[{"data":1,"prerenderedAt":174011},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2026-05-24-c-xue-xi\u002Fch2-han-shu":3,"wiki-doc-nav":1197},{"id":4,"title":5,"body":6,"description":35,"extension":1190,"meta":1191,"navigation":1192,"path":1193,"seo":1194,"stem":1195,"__hash__":1196},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":8,"toc":1182},"minimark",[9,13,18,28,39,43,133,137,140,230,234,237,240,243,473,477,482,546,551,620,625,717,720,829,833,836,843,992,996,999,1014,1017,1067,1070,1178],[10,11,5],"h1",{"id":12},"_2函数",[14,15,17],"h2",{"id":16},"_21函数概述","2.1函数概述",[19,20,21,25],"ol",{},[22,23,24],"li",{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[22,26,27],{},"语法：",[29,30,36],"pre",{"className":31,"code":33,"language":34,"meta":35},[32],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text","",[37,38,33],"code",{"__ignoreMap":35},[40,41,42],"p",{},"小案例",[29,44,48],{"className":45,"code":46,"language":47,"meta":35,"style":35},"language-c++ shiki shiki-themes github-light github-dark","\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n","c++",[37,49,50,59,91,97,118,127],{"__ignoreMap":35},[51,52,55],"span",{"class":53,"line":54},"line",1,[51,56,58],{"class":57},"sJ8bj","\u002F\u002Fnum1,num2形参\n",[51,60,62,66,70,74,76,80,83,85,88],{"class":53,"line":61},2,[51,63,65],{"class":64},"szBVR","int",[51,67,69],{"class":68},"sScJk"," add",[51,71,73],{"class":72},"sVt8B","(",[51,75,65],{"class":64},[51,77,79],{"class":78},"s4XuR"," num1",[51,81,82],{"class":72},",",[51,84,65],{"class":64},[51,86,87],{"class":78}," num2",[51,89,90],{"class":72},")\n",[51,92,94],{"class":53,"line":93},3,[51,95,96],{"class":72},"{\n",[51,98,100,103,106,109,112,115],{"class":53,"line":99},4,[51,101,102],{"class":64},"    int",[51,104,105],{"class":72}," sum",[51,107,108],{"class":64},"=",[51,110,111],{"class":72},"num1",[51,113,114],{"class":64},"+",[51,116,117],{"class":72},"num2;\n",[51,119,121,124],{"class":53,"line":120},5,[51,122,123],{"class":64},"    return",[51,125,126],{"class":72}," sum;\n",[51,128,130],{"class":53,"line":129},6,[51,131,132],{"class":72},"}\n",[14,134,136],{"id":135},"_22函数调用","2.2函数调用",[40,138,139],{},"调用刚刚写的求和函数",[29,141,143],{"className":45,"code":142,"language":47,"meta":35,"style":35},"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",[37,144,145,155,159,164,180,193,204,210,225],{"__ignoreMap":35},[51,146,147,149,152],{"class":53,"line":54},[51,148,65],{"class":64},[51,150,151],{"class":68}," main",[51,153,154],{"class":72},"()\n",[51,156,157],{"class":53,"line":61},[51,158,96],{"class":72},[51,160,161],{"class":53,"line":93},[51,162,163],{"class":57},"    \u002F\u002Fa,b实参\n",[51,165,166,168,171,173,177],{"class":53,"line":99},[51,167,102],{"class":64},[51,169,170],{"class":72}," a",[51,172,108],{"class":64},[51,174,176],{"class":175},"sj4cs","0",[51,178,179],{"class":72},";\n",[51,181,182,184,187,189,191],{"class":53,"line":120},[51,183,102],{"class":64},[51,185,186],{"class":72}," b",[51,188,108],{"class":64},[51,190,176],{"class":175},[51,192,179],{"class":72},[51,194,195,198,201],{"class":53,"line":129},[51,196,197],{"class":72},"    cin",[51,199,200],{"class":64},">>",[51,202,203],{"class":72},"a,b;\n",[51,205,207],{"class":53,"line":206},7,[51,208,209],{"class":57},"    \u002F\u002F调用函数时，实参值传给了形参\n",[51,211,213,216,219,222],{"class":53,"line":212},8,[51,214,215],{"class":72},"    cout",[51,217,218],{"class":64},"\u003C\u003C",[51,220,221],{"class":68},"add",[51,223,224],{"class":72},"(a,b);\n",[51,226,228],{"class":53,"line":227},9,[51,229,132],{"class":72},[14,231,233],{"id":232},"_23值传递","2.3值传递",[40,235,236],{},"值传递就是函数调用时实参将数值传给形参",[40,238,239],{},"值传递时，如果形参发生任何改变，不会影响实参",[40,241,242],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[29,244,246],{"className":45,"code":245,"language":47,"meta":35,"style":35},"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",[37,247,248,270,274,289,306,324,336,345,355,368,385,402,413,418,427,432,446,460,468],{"__ignoreMap":35},[51,249,250,253,256,258,260,262,264,266,268],{"class":53,"line":54},[51,251,252],{"class":64},"void",[51,254,255],{"class":68}," swap",[51,257,73],{"class":72},[51,259,65],{"class":64},[51,261,79],{"class":78},[51,263,82],{"class":72},[51,265,65],{"class":64},[51,267,87],{"class":78},[51,269,90],{"class":72},[51,271,272],{"class":53,"line":61},[51,273,96],{"class":72},[51,275,276,278,280,284,286],{"class":53,"line":93},[51,277,215],{"class":72},[51,279,218],{"class":64},[51,281,283],{"class":282},"sZZnC","\"交换前：\"",[51,285,218],{"class":64},[51,287,288],{"class":72},"endl;\n",[51,290,291,293,295,298,300,302,304],{"class":53,"line":99},[51,292,215],{"class":72},[51,294,218],{"class":64},[51,296,297],{"class":282},"\"num1=\"",[51,299,218],{"class":64},[51,301,111],{"class":72},[51,303,218],{"class":64},[51,305,288],{"class":72},[51,307,308,310,312,315,317,320,322],{"class":53,"line":120},[51,309,215],{"class":72},[51,311,218],{"class":64},[51,313,314],{"class":282},"\"num2=\"",[51,316,218],{"class":64},[51,318,319],{"class":72},"num2",[51,321,218],{"class":64},[51,323,288],{"class":72},[51,325,326,328,331,333],{"class":53,"line":129},[51,327,102],{"class":64},[51,329,330],{"class":72}," temp",[51,332,108],{"class":64},[51,334,335],{"class":72},"num1;\n",[51,337,338,341,343],{"class":53,"line":206},[51,339,340],{"class":72},"    num1",[51,342,108],{"class":64},[51,344,117],{"class":72},[51,346,347,350,352],{"class":53,"line":212},[51,348,349],{"class":72},"    num2",[51,351,108],{"class":64},[51,353,354],{"class":72},"temp;\n",[51,356,357,359,361,364,366],{"class":53,"line":227},[51,358,215],{"class":72},[51,360,218],{"class":64},[51,362,363],{"class":282},"\"交换后：\"",[51,365,218],{"class":64},[51,367,288],{"class":72},[51,369,371,373,375,377,379,381,383],{"class":53,"line":370},10,[51,372,215],{"class":72},[51,374,218],{"class":64},[51,376,297],{"class":282},[51,378,218],{"class":64},[51,380,111],{"class":72},[51,382,218],{"class":64},[51,384,288],{"class":72},[51,386,388,390,392,394,396,398,400],{"class":53,"line":387},11,[51,389,215],{"class":72},[51,391,218],{"class":64},[51,393,314],{"class":282},[51,395,218],{"class":64},[51,397,319],{"class":72},[51,399,218],{"class":64},[51,401,288],{"class":72},[51,403,405,407,410],{"class":53,"line":404},12,[51,406,123],{"class":64},[51,408,409],{"class":72},";",[51,411,412],{"class":57},"\u002F\u002F或者不写\n",[51,414,416],{"class":53,"line":415},13,[51,417,132],{"class":72},[51,419,421,423,425],{"class":53,"line":420},14,[51,422,65],{"class":64},[51,424,151],{"class":68},[51,426,154],{"class":72},[51,428,430],{"class":53,"line":429},15,[51,431,96],{"class":72},[51,433,435,437,439,441,444],{"class":53,"line":434},16,[51,436,102],{"class":64},[51,438,170],{"class":72},[51,440,108],{"class":64},[51,442,443],{"class":175},"10",[51,445,179],{"class":72},[51,447,449,451,453,455,458],{"class":53,"line":448},17,[51,450,102],{"class":64},[51,452,186],{"class":72},[51,454,108],{"class":64},[51,456,457],{"class":175},"20",[51,459,179],{"class":72},[51,461,463,466],{"class":53,"line":462},18,[51,464,465],{"class":68},"    swap",[51,467,224],{"class":72},[51,469,471],{"class":53,"line":470},19,[51,472,132],{"class":72},[14,474,476],{"id":475},"_24函数的常见形式","2.4函数的常见形式",[19,478,479],{},[22,480,481],{},"无参无返",[29,483,485],{"className":45,"code":484,"language":47,"meta":35,"style":35},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[37,486,487,496,500,513,517,525,529,534,542],{"__ignoreMap":35},[51,488,489,491,494],{"class":53,"line":54},[51,490,252],{"class":64},[51,492,493],{"class":68}," test01",[51,495,154],{"class":72},[51,497,498],{"class":53,"line":61},[51,499,96],{"class":72},[51,501,502,504,506,509,511],{"class":53,"line":93},[51,503,215],{"class":72},[51,505,218],{"class":64},[51,507,508],{"class":282},"\"你好\"",[51,510,218],{"class":64},[51,512,288],{"class":72},[51,514,515],{"class":53,"line":99},[51,516,132],{"class":72},[51,518,519,521,523],{"class":53,"line":120},[51,520,65],{"class":64},[51,522,151],{"class":68},[51,524,154],{"class":72},[51,526,527],{"class":53,"line":129},[51,528,96],{"class":72},[51,530,531],{"class":53,"line":206},[51,532,533],{"class":57},"    \u002F\u002F函数调用\n",[51,535,536,539],{"class":53,"line":212},[51,537,538],{"class":68},"    test01",[51,540,541],{"class":72},"();\n",[51,543,544],{"class":53,"line":227},[51,545,132],{"class":72},[19,547,548],{"start":61},[22,549,550],{},"有参无返",[29,552,554],{"className":45,"code":553,"language":47,"meta":35,"style":35},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[37,555,556,571,575,587,591,599,603,616],{"__ignoreMap":35},[51,557,558,560,563,565,567,569],{"class":53,"line":54},[51,559,252],{"class":64},[51,561,562],{"class":68}," test02",[51,564,73],{"class":72},[51,566,65],{"class":64},[51,568,170],{"class":78},[51,570,90],{"class":72},[51,572,573],{"class":53,"line":61},[51,574,96],{"class":72},[51,576,577,579,581,583,585],{"class":53,"line":93},[51,578,215],{"class":72},[51,580,218],{"class":64},[51,582,508],{"class":282},[51,584,218],{"class":64},[51,586,288],{"class":72},[51,588,589],{"class":53,"line":99},[51,590,132],{"class":72},[51,592,593,595,597],{"class":53,"line":120},[51,594,65],{"class":64},[51,596,151],{"class":68},[51,598,154],{"class":72},[51,600,601],{"class":53,"line":129},[51,602,96],{"class":72},[51,604,605,608,610,613],{"class":53,"line":206},[51,606,607],{"class":68},"    test02",[51,609,73],{"class":72},[51,611,612],{"class":175},"100",[51,614,615],{"class":72},");\n",[51,617,618],{"class":53,"line":212},[51,619,132],{"class":72},[19,621,622],{"start":93},[22,623,624],{},"无参有返",[29,626,628],{"className":45,"code":627,"language":47,"meta":35,"style":35},"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",[37,629,630,639,643,655,664,668,676,680,693,713],{"__ignoreMap":35},[51,631,632,634,637],{"class":53,"line":54},[51,633,65],{"class":64},[51,635,636],{"class":68}," test03",[51,638,154],{"class":72},[51,640,641],{"class":53,"line":61},[51,642,96],{"class":72},[51,644,645,647,649,651,653],{"class":53,"line":93},[51,646,215],{"class":72},[51,648,218],{"class":64},[51,650,508],{"class":282},[51,652,218],{"class":64},[51,654,288],{"class":72},[51,656,657,659,662],{"class":53,"line":99},[51,658,123],{"class":64},[51,660,661],{"class":175}," 100",[51,663,179],{"class":72},[51,665,666],{"class":53,"line":120},[51,667,132],{"class":72},[51,669,670,672,674],{"class":53,"line":129},[51,671,65],{"class":64},[51,673,151],{"class":68},[51,675,154],{"class":72},[51,677,678],{"class":53,"line":206},[51,679,96],{"class":72},[51,681,682,684,686,688,691],{"class":53,"line":212},[51,683,102],{"class":64},[51,685,79],{"class":72},[51,687,108],{"class":64},[51,689,690],{"class":68},"test03",[51,692,541],{"class":72},[51,694,695,697,699,701,703,705,707,710],{"class":53,"line":227},[51,696,215],{"class":72},[51,698,218],{"class":64},[51,700,297],{"class":282},[51,702,218],{"class":64},[51,704,111],{"class":72},[51,706,218],{"class":64},[51,708,709],{"class":72},"endl;",[51,711,712],{"class":57}," \u002F\u002F100\n",[51,714,715],{"class":53,"line":370},[51,716,132],{"class":72},[40,718,719],{},"4.有参有返",[29,721,723],{"className":45,"code":722,"language":47,"meta":35,"style":35},"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",[37,724,725,740,744,757,764,768,777,781,794,809,825],{"__ignoreMap":35},[51,726,727,729,732,734,736,738],{"class":53,"line":54},[51,728,65],{"class":64},[51,730,731],{"class":68}," test04",[51,733,73],{"class":72},[51,735,65],{"class":64},[51,737,170],{"class":78},[51,739,90],{"class":72},[51,741,742],{"class":53,"line":61},[51,743,96],{"class":72},[51,745,746,748,750,753,755],{"class":53,"line":93},[51,747,215],{"class":72},[51,749,218],{"class":64},[51,751,752],{"class":282},"\"hello\"",[51,754,218],{"class":64},[51,756,288],{"class":72},[51,758,759,761],{"class":53,"line":99},[51,760,123],{"class":64},[51,762,763],{"class":72}," a;\n",[51,765,766],{"class":53,"line":120},[51,767,132],{"class":72},[51,769,770,772,775],{"class":53,"line":129},[51,771,65],{"class":64},[51,773,774],{"class":68}," mian",[51,776,154],{"class":72},[51,778,779],{"class":53,"line":206},[51,780,96],{"class":72},[51,782,783,785,787,789,792],{"class":53,"line":212},[51,784,102],{"class":64},[51,786,186],{"class":72},[51,788,108],{"class":64},[51,790,791],{"class":175},"1",[51,793,179],{"class":72},[51,795,796,798,801,803,806],{"class":53,"line":227},[51,797,102],{"class":64},[51,799,800],{"class":72}," c",[51,802,108],{"class":64},[51,804,805],{"class":68},"test04",[51,807,808],{"class":72},"(b);\n",[51,810,811,813,815,818,820,822],{"class":53,"line":370},[51,812,215],{"class":72},[51,814,218],{"class":64},[51,816,817],{"class":72},"c",[51,819,218],{"class":64},[51,821,709],{"class":72},[51,823,824],{"class":57}," \u002F\u002F1\n",[51,826,827],{"class":53,"line":387},[51,828,132],{"class":72},[14,830,832],{"id":831},"_25函数的声明","2.5函数的声明",[40,834,835],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[40,837,838,839],{},"函数的",[840,841,842],"strong",{},"声明可以多次，但是函数的定义只能有一次",[29,844,846],{"className":45,"code":845,"language":47,"meta":35,"style":35},"\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",[37,847,848,853,858,883,892,896,908,920,936,940,960,964,988],{"__ignoreMap":35},[51,849,850],{"class":53,"line":54},[51,851,852],{"class":57},"\u002F\u002F函数声明\n",[51,854,855],{"class":53,"line":61},[51,856,857],{"class":57},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[51,859,860,862,865,867,869,871,873,875,877,880],{"class":53,"line":93},[51,861,65],{"class":64},[51,863,864],{"class":68}," max",[51,866,73],{"class":72},[51,868,65],{"class":64},[51,870,170],{"class":78},[51,872,82],{"class":72},[51,874,65],{"class":64},[51,876,186],{"class":78},[51,878,879],{"class":72},");",[51,881,882],{"class":57},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[51,884,885,887,889],{"class":53,"line":99},[51,886,65],{"class":64},[51,888,151],{"class":68},[51,890,891],{"class":72},"() \n",[51,893,894],{"class":53,"line":120},[51,895,96],{"class":72},[51,897,898,900,902,904,906],{"class":53,"line":129},[51,899,102],{"class":64},[51,901,170],{"class":72},[51,903,108],{"class":64},[51,905,443],{"class":175},[51,907,179],{"class":72},[51,909,910,912,914,916,918],{"class":53,"line":206},[51,911,102],{"class":64},[51,913,186],{"class":72},[51,915,108],{"class":64},[51,917,457],{"class":175},[51,919,179],{"class":72},[51,921,922,924,926,929,932,934],{"class":53,"line":212},[51,923,215],{"class":72},[51,925,218],{"class":64},[51,927,928],{"class":68},"max",[51,930,931],{"class":72},"(a,b)",[51,933,218],{"class":64},[51,935,288],{"class":72},[51,937,938],{"class":53,"line":227},[51,939,132],{"class":72},[51,941,942,944,946,948,950,952,954,956,958],{"class":53,"line":370},[51,943,65],{"class":64},[51,945,864],{"class":68},[51,947,73],{"class":72},[51,949,65],{"class":64},[51,951,170],{"class":78},[51,953,82],{"class":72},[51,955,65],{"class":64},[51,957,186],{"class":78},[51,959,90],{"class":72},[51,961,962],{"class":53,"line":387},[51,963,96],{"class":72},[51,965,966,968,970,973,976,979,982,985],{"class":53,"line":404},[51,967,123],{"class":64},[51,969,170],{"class":72},[51,971,972],{"class":64},">",[51,974,975],{"class":72},"b",[51,977,978],{"class":64},"?",[51,980,981],{"class":72},"a",[51,983,984],{"class":64},":",[51,986,987],{"class":72},"b;\n",[51,989,990],{"class":53,"line":415},[51,991,132],{"class":72},[14,993,995],{"id":994},"_26函数的分文件编写","2.6函数的分文件编写",[40,997,998],{},"4个步骤：",[1000,1001,1002,1005,1008,1011],"ul",{},[22,1003,1004],{},"1.创建后缀名为.h的头文件",[22,1006,1007],{},"2.创建后缀名为.cpp的源文件",[22,1009,1010],{},"3.在头文件中写函数的定义",[22,1012,1013],{},"4.在源文件中写函数的定义\n示例：",[40,1015,1016],{},"头文件：swap.h",[29,1018,1020],{"className":45,"code":1019,"language":47,"meta":35,"style":35},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[37,1021,1022,1030,1043,1047],{"__ignoreMap":35},[51,1023,1024,1027],{"class":53,"line":54},[51,1025,1026],{"class":64},"#include",[51,1028,1029],{"class":282},"\u003Ciostream>\n",[51,1031,1032,1035,1038,1041],{"class":53,"line":61},[51,1033,1034],{"class":64},"using",[51,1036,1037],{"class":64}," namespace",[51,1039,1040],{"class":68}," std",[51,1042,179],{"class":72},[51,1044,1045],{"class":53,"line":93},[51,1046,852],{"class":57},[51,1048,1049,1051,1053,1055,1057,1059,1061,1063,1065],{"class":53,"line":99},[51,1050,252],{"class":64},[51,1052,255],{"class":68},[51,1054,73],{"class":72},[51,1056,65],{"class":64},[51,1058,170],{"class":78},[51,1060,82],{"class":72},[51,1062,65],{"class":64},[51,1064,186],{"class":78},[51,1066,615],{"class":72},[40,1068,1069],{},"源文件：swap.cpp",[29,1071,1073],{"className":45,"code":1072,"language":47,"meta":35,"style":35},"#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",[37,1074,1075,1082,1087,1107,1111,1122,1131,1140,1157,1174],{"__ignoreMap":35},[51,1076,1077,1079],{"class":53,"line":54},[51,1078,1026],{"class":64},[51,1080,1081],{"class":282}," \"swap.h\"\n",[51,1083,1084],{"class":53,"line":61},[51,1085,1086],{"class":57},"\u002F\u002F函数的定义\n",[51,1088,1089,1091,1093,1095,1097,1099,1101,1103,1105],{"class":53,"line":93},[51,1090,252],{"class":64},[51,1092,255],{"class":68},[51,1094,73],{"class":72},[51,1096,65],{"class":64},[51,1098,170],{"class":78},[51,1100,82],{"class":72},[51,1102,65],{"class":64},[51,1104,186],{"class":78},[51,1106,90],{"class":72},[51,1108,1109],{"class":53,"line":99},[51,1110,96],{"class":72},[51,1112,1113,1115,1117,1119],{"class":53,"line":120},[51,1114,102],{"class":64},[51,1116,330],{"class":72},[51,1118,108],{"class":64},[51,1120,1121],{"class":72},"a;\n",[51,1123,1124,1127,1129],{"class":53,"line":129},[51,1125,1126],{"class":72},"    a",[51,1128,108],{"class":64},[51,1130,987],{"class":72},[51,1132,1133,1136,1138],{"class":53,"line":206},[51,1134,1135],{"class":72},"    b",[51,1137,108],{"class":64},[51,1139,354],{"class":72},[51,1141,1142,1144,1146,1149,1151,1153,1155],{"class":53,"line":212},[51,1143,215],{"class":72},[51,1145,218],{"class":64},[51,1147,1148],{"class":282},"\"a=\"",[51,1150,218],{"class":64},[51,1152,981],{"class":72},[51,1154,218],{"class":64},[51,1156,288],{"class":72},[51,1158,1159,1161,1163,1166,1168,1170,1172],{"class":53,"line":227},[51,1160,215],{"class":72},[51,1162,218],{"class":64},[51,1164,1165],{"class":282},"\"b=\"",[51,1167,218],{"class":64},[51,1169,975],{"class":72},[51,1171,218],{"class":64},[51,1173,288],{"class":72},[51,1175,1176],{"class":53,"line":370},[51,1177,132],{"class":72},[1179,1180,1181],"style",{},"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":35,"searchDepth":61,"depth":61,"links":1183},[1184,1185,1186,1187,1188,1189],{"id":16,"depth":61,"text":17},{"id":135,"depth":61,"text":136},{"id":232,"depth":61,"text":233},{"id":475,"depth":61,"text":476},{"id":831,"depth":61,"text":832},{"id":994,"depth":61,"text":995},"md",{},true,"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5,"description":35},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",[1198,6236,7232,8652,11641,12992,14481,15570,24333,24346,24945,24971,25095,25336,25401,25419,25432,25479,25603,25772,25971,26151,26356,26492,26587,26624,26637,26947,27688,28396,28417,29437,31068,31219,31232,31244,31545,51357,51372,51389,51422,54294,77642,93787,93808,93921,94042,94812,95475,95836,95874,95980,96080,96123,96149,96210,97864,97965,97990,98481,98981,100061,100344,101086,101588,101600,103616,105280,106783,108481,110398,112317,114339,117809,118241,118704,119453,122397,122745,122767,123123,126430,126442,126845,126868,127015,127182,127387,127688,128245,128902,130833,132431,133080,134574,136005,137240,138934,140686,143096,143212,144147,144358,145243,146478,146706,146719,147874,150286,152654,155975,158452,160096,161873,163886,166938,169118,171645,173839],{"id":1199,"title":1200,"body":1201,"description":35,"extension":1190,"meta":6231,"navigation":1192,"path":6232,"seo":6233,"stem":6234,"__hash__":6235},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1202,"toc":6203},[1203,1206,1210,1213,1217,1228,1232,1237,1240,1243,1246,1249,1252,1275,1279,1282,1285,1288,1291,1340,1344,1362,1364,1378,1381,1389,1392,2241,2248,2264,2268,2351,2355,2361,2446,2450,2488,2492,2553,2557,2561,2568,2579,2583,2588,2592,2597,2601,2606,2610,2614,2619,2877,2882,3020,3025,3272,3275,3283,3287,3292,3395,3398,3704,3713,3813,3816,3819,3822,3825,4083,4088,4228,4231,4410,4413,4541,4544,4696,4700,4705,4708,4719,4727,4730,4837,4841,4845,4850,4900,4905,4910,4934,4939,4992,4995,5000,5176,5181,5464,5469,5866,5870,5875,5932,5937,5945,5948,6088,6091,6200],[10,1204,1200],{"id":1205},"_1基础入门",[14,1207,1209],{"id":1208},"_11注释","1.1注释",[40,1211,1212],{},"\u002F\u002F或者\u002F* *\u002F",[14,1214,1216],{"id":1215},"_12命名","1.2命名",[19,1218,1219,1222,1225],{},[22,1220,1221],{},"字母数字下划线",[22,1223,1224],{},"开头必须是字母或_",[22,1226,1227],{},"不能使用关键词",[14,1229,1231],{"id":1230},"_13数据类型","1.3数据类型",[1233,1234,1236],"h3",{"id":1235},"_131整形","1.3.1整形",[40,1238,1239],{},"short 短整形 2",[40,1241,1242],{},"int 整形 4",[40,1244,1245],{},"long 长整形 win4 linux32位4 linux64位8",[40,1247,1248],{},"long long 长长整形 8",[40,1250,1251],{},"利用sizeof可以求数据类型占用的内存空间大小",[29,1253,1255],{"className":45,"code":1254,"language":47,"meta":35,"style":35},"sizeof(int)\nsizeof(num)\n",[37,1256,1257,1268],{"__ignoreMap":35},[51,1258,1259,1262,1264,1266],{"class":53,"line":54},[51,1260,1261],{"class":64},"sizeof",[51,1263,73],{"class":72},[51,1265,65],{"class":64},[51,1267,90],{"class":72},[51,1269,1270,1272],{"class":53,"line":61},[51,1271,1261],{"class":64},[51,1273,1274],{"class":72},"(num)\n",[1233,1276,1278],{"id":1277},"_132浮点型","1.3.2浮点型",[40,1280,1281],{},"float 单精度 4节 7位有效数字",[40,1283,1284],{},"double 双精度 8节 15-16有效数字",[40,1286,1287],{},"默认情况下，输出一个小数，会显示6位有效数字",[40,1289,1290],{},"注意点：",[29,1292,1294],{"className":45,"code":1293,"language":47,"meta":35,"style":35},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[37,1295,1296,1317],{"__ignoreMap":35},[51,1297,1298,1301,1304,1306,1309,1312,1314],{"class":53,"line":54},[51,1299,1300],{"class":64},"float",[51,1302,1303],{"class":72}," f1",[51,1305,108],{"class":64},[51,1307,1308],{"class":175},"3.14",[51,1310,1311],{"class":64},"f",[51,1313,409],{"class":72},[51,1315,1316],{"class":57}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[51,1318,1319,1321,1324,1326,1329,1332,1335,1337],{"class":53,"line":61},[51,1320,1300],{"class":64},[51,1322,1323],{"class":72}," f2",[51,1325,108],{"class":64},[51,1327,1328],{"class":175},"3",[51,1330,1331],{"class":64},"e",[51,1333,1334],{"class":175},"2",[51,1336,409],{"class":72},[51,1338,1339],{"class":57}," \u002F\u002F科学记数法\n",[1233,1341,1343],{"id":1342},"_133字符型","1.3.3字符型",[29,1345,1347],{"className":45,"code":1346,"language":47,"meta":35,"style":35},"char ch='a'\n",[37,1348,1349],{"__ignoreMap":35},[51,1350,1351,1354,1357,1359],{"class":53,"line":54},[51,1352,1353],{"class":64},"char",[51,1355,1356],{"class":72}," ch",[51,1358,108],{"class":64},[51,1360,1361],{"class":282},"'a'\n",[40,1363,1290],{},[19,1365,1366,1369,1372,1375],{},[22,1367,1368],{},"在显示字符型变量时，只能单引号，双引号x",[22,1370,1371],{},"单引号内只能一个字符，不能字符串",[22,1373,1374],{},"c和c++字符型变量只占用一个字符",[22,1376,1377],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[40,1379,1380],{},"ASCII码大致由以下两部分组成：",[19,1382,1383,1386],{},[22,1384,1385],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[22,1387,1388],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[40,1390,1391],{},"ASCII码表格：",[1393,1394,1395,1438],"table",{},[1396,1397,1398],"thead",{},[1399,1400,1401,1408,1413,1417,1422,1426,1430,1434],"tr",{},[1402,1403,1404,1407],"th",{},[840,1405,1406],{},"ASCII","值",[1402,1409,1410],{},[840,1411,1412],{},"控制字符",[1402,1414,1415,1407],{},[840,1416,1406],{},[1402,1418,1419],{},[840,1420,1421],{},"字符",[1402,1423,1424,1407],{},[840,1425,1406],{},[1402,1427,1428],{},[840,1429,1421],{},[1402,1431,1432,1407],{},[840,1433,1406],{},[1402,1435,1436],{},[840,1437,1421],{},[1439,1440,1441,1467,1491,1515,1539,1564,1589,1614,1639,1664,1690,1715,1740,1765,1791,1817,1843,1867,1892,1917,1942,1966,1991,2016,2041,2066,2091,2116,2141,2166,2191,2216],"tbody",{},[1399,1442,1443,1446,1449,1452,1455,1458,1461,1464],{},[1444,1445,176],"td",{},[1444,1447,1448],{},"NUT",[1444,1450,1451],{},"32",[1444,1453,1454],{},"(space)",[1444,1456,1457],{},"64",[1444,1459,1460],{},"@",[1444,1462,1463],{},"96",[1444,1465,1466],{},"、",[1399,1468,1469,1471,1474,1477,1480,1483,1486,1489],{},[1444,1470,791],{},[1444,1472,1473],{},"SOH",[1444,1475,1476],{},"33",[1444,1478,1479],{},"!",[1444,1481,1482],{},"65",[1444,1484,1485],{},"A",[1444,1487,1488],{},"97",[1444,1490,981],{},[1399,1492,1493,1495,1498,1501,1504,1507,1510,1513],{},[1444,1494,1334],{},[1444,1496,1497],{},"STX",[1444,1499,1500],{},"34",[1444,1502,1503],{},"\"",[1444,1505,1506],{},"66",[1444,1508,1509],{},"B",[1444,1511,1512],{},"98",[1444,1514,975],{},[1399,1516,1517,1519,1522,1525,1528,1531,1534,1537],{},[1444,1518,1328],{},[1444,1520,1521],{},"ETX",[1444,1523,1524],{},"35",[1444,1526,1527],{},"#",[1444,1529,1530],{},"67",[1444,1532,1533],{},"C",[1444,1535,1536],{},"99",[1444,1538,817],{},[1399,1540,1541,1544,1547,1550,1553,1556,1559,1561],{},[1444,1542,1543],{},"4",[1444,1545,1546],{},"EOT",[1444,1548,1549],{},"36",[1444,1551,1552],{},"$",[1444,1554,1555],{},"68",[1444,1557,1558],{},"D",[1444,1560,612],{},[1444,1562,1563],{},"d",[1399,1565,1566,1569,1572,1575,1578,1581,1584,1587],{},[1444,1567,1568],{},"5",[1444,1570,1571],{},"ENQ",[1444,1573,1574],{},"37",[1444,1576,1577],{},"%",[1444,1579,1580],{},"69",[1444,1582,1583],{},"E",[1444,1585,1586],{},"101",[1444,1588,1331],{},[1399,1590,1591,1594,1597,1600,1603,1606,1609,1612],{},[1444,1592,1593],{},"6",[1444,1595,1596],{},"ACK",[1444,1598,1599],{},"38",[1444,1601,1602],{},"&",[1444,1604,1605],{},"70",[1444,1607,1608],{},"F",[1444,1610,1611],{},"102",[1444,1613,1311],{},[1399,1615,1616,1619,1622,1625,1627,1630,1633,1636],{},[1444,1617,1618],{},"7",[1444,1620,1621],{},"BEL",[1444,1623,1624],{},"39",[1444,1626,82],{},[1444,1628,1629],{},"71",[1444,1631,1632],{},"G",[1444,1634,1635],{},"103",[1444,1637,1638],{},"g",[1399,1640,1641,1644,1647,1650,1652,1655,1658,1661],{},[1444,1642,1643],{},"8",[1444,1645,1646],{},"BS",[1444,1648,1649],{},"40",[1444,1651,73],{},[1444,1653,1654],{},"72",[1444,1656,1657],{},"H",[1444,1659,1660],{},"104",[1444,1662,1663],{},"h",[1399,1665,1666,1669,1672,1675,1678,1681,1684,1687],{},[1444,1667,1668],{},"9",[1444,1670,1671],{},"HT",[1444,1673,1674],{},"41",[1444,1676,1677],{},")",[1444,1679,1680],{},"73",[1444,1682,1683],{},"I",[1444,1685,1686],{},"105",[1444,1688,1689],{},"i",[1399,1691,1692,1694,1697,1700,1703,1706,1709,1712],{},[1444,1693,443],{},[1444,1695,1696],{},"LF",[1444,1698,1699],{},"42",[1444,1701,1702],{},"*",[1444,1704,1705],{},"74",[1444,1707,1708],{},"J",[1444,1710,1711],{},"106",[1444,1713,1714],{},"j",[1399,1716,1717,1720,1723,1726,1728,1731,1734,1737],{},[1444,1718,1719],{},"11",[1444,1721,1722],{},"VT",[1444,1724,1725],{},"43",[1444,1727,114],{},[1444,1729,1730],{},"75",[1444,1732,1733],{},"K",[1444,1735,1736],{},"107",[1444,1738,1739],{},"k",[1399,1741,1742,1745,1748,1751,1753,1756,1759,1762],{},[1444,1743,1744],{},"12",[1444,1746,1747],{},"FF",[1444,1749,1750],{},"44",[1444,1752,82],{},[1444,1754,1755],{},"76",[1444,1757,1758],{},"L",[1444,1760,1761],{},"108",[1444,1763,1764],{},"l",[1399,1766,1767,1770,1773,1776,1779,1782,1785,1788],{},[1444,1768,1769],{},"13",[1444,1771,1772],{},"CR",[1444,1774,1775],{},"45",[1444,1777,1778],{},"-",[1444,1780,1781],{},"77",[1444,1783,1784],{},"M",[1444,1786,1787],{},"109",[1444,1789,1790],{},"m",[1399,1792,1793,1796,1799,1802,1805,1808,1811,1814],{},[1444,1794,1795],{},"14",[1444,1797,1798],{},"SO",[1444,1800,1801],{},"46",[1444,1803,1804],{},".",[1444,1806,1807],{},"78",[1444,1809,1810],{},"N",[1444,1812,1813],{},"110",[1444,1815,1816],{},"n",[1399,1818,1819,1822,1825,1828,1831,1834,1837,1840],{},[1444,1820,1821],{},"15",[1444,1823,1824],{},"SI",[1444,1826,1827],{},"47",[1444,1829,1830],{},"\u002F",[1444,1832,1833],{},"79",[1444,1835,1836],{},"O",[1444,1838,1839],{},"111",[1444,1841,1842],{},"o",[1399,1844,1845,1848,1851,1854,1856,1859,1862,1865],{},[1444,1846,1847],{},"16",[1444,1849,1850],{},"DLE",[1444,1852,1853],{},"48",[1444,1855,176],{},[1444,1857,1858],{},"80",[1444,1860,1861],{},"P",[1444,1863,1864],{},"112",[1444,1866,40],{},[1399,1868,1869,1872,1875,1878,1880,1883,1886,1889],{},[1444,1870,1871],{},"17",[1444,1873,1874],{},"DCI",[1444,1876,1877],{},"49",[1444,1879,791],{},[1444,1881,1882],{},"81",[1444,1884,1885],{},"Q",[1444,1887,1888],{},"113",[1444,1890,1891],{},"q",[1399,1893,1894,1897,1900,1903,1905,1908,1911,1914],{},[1444,1895,1896],{},"18",[1444,1898,1899],{},"DC2",[1444,1901,1902],{},"50",[1444,1904,1334],{},[1444,1906,1907],{},"82",[1444,1909,1910],{},"R",[1444,1912,1913],{},"114",[1444,1915,1916],{},"r",[1399,1918,1919,1922,1925,1928,1930,1933,1936,1939],{},[1444,1920,1921],{},"19",[1444,1923,1924],{},"DC3",[1444,1926,1927],{},"51",[1444,1929,1328],{},[1444,1931,1932],{},"83",[1444,1934,1935],{},"S",[1444,1937,1938],{},"115",[1444,1940,1941],{},"s",[1399,1943,1944,1946,1949,1952,1954,1957,1960,1963],{},[1444,1945,457],{},[1444,1947,1948],{},"DC4",[1444,1950,1951],{},"52",[1444,1953,1543],{},[1444,1955,1956],{},"84",[1444,1958,1959],{},"T",[1444,1961,1962],{},"116",[1444,1964,1965],{},"t",[1399,1967,1968,1971,1974,1977,1979,1982,1985,1988],{},[1444,1969,1970],{},"21",[1444,1972,1973],{},"NAK",[1444,1975,1976],{},"53",[1444,1978,1568],{},[1444,1980,1981],{},"85",[1444,1983,1984],{},"U",[1444,1986,1987],{},"117",[1444,1989,1990],{},"u",[1399,1992,1993,1996,1999,2002,2004,2007,2010,2013],{},[1444,1994,1995],{},"22",[1444,1997,1998],{},"SYN",[1444,2000,2001],{},"54",[1444,2003,1593],{},[1444,2005,2006],{},"86",[1444,2008,2009],{},"V",[1444,2011,2012],{},"118",[1444,2014,2015],{},"v",[1399,2017,2018,2021,2024,2027,2029,2032,2035,2038],{},[1444,2019,2020],{},"23",[1444,2022,2023],{},"TB",[1444,2025,2026],{},"55",[1444,2028,1618],{},[1444,2030,2031],{},"87",[1444,2033,2034],{},"W",[1444,2036,2037],{},"119",[1444,2039,2040],{},"w",[1399,2042,2043,2046,2049,2052,2054,2057,2060,2063],{},[1444,2044,2045],{},"24",[1444,2047,2048],{},"CAN",[1444,2050,2051],{},"56",[1444,2053,1643],{},[1444,2055,2056],{},"88",[1444,2058,2059],{},"X",[1444,2061,2062],{},"120",[1444,2064,2065],{},"x",[1399,2067,2068,2071,2074,2077,2079,2082,2085,2088],{},[1444,2069,2070],{},"25",[1444,2072,2073],{},"EM",[1444,2075,2076],{},"57",[1444,2078,1668],{},[1444,2080,2081],{},"89",[1444,2083,2084],{},"Y",[1444,2086,2087],{},"121",[1444,2089,2090],{},"y",[1399,2092,2093,2096,2099,2102,2104,2107,2110,2113],{},[1444,2094,2095],{},"26",[1444,2097,2098],{},"SUB",[1444,2100,2101],{},"58",[1444,2103,984],{},[1444,2105,2106],{},"90",[1444,2108,2109],{},"Z",[1444,2111,2112],{},"122",[1444,2114,2115],{},"z",[1399,2117,2118,2121,2124,2127,2129,2132,2135,2138],{},[1444,2119,2120],{},"27",[1444,2122,2123],{},"ESC",[1444,2125,2126],{},"59",[1444,2128,409],{},[1444,2130,2131],{},"91",[1444,2133,2134],{},"[",[1444,2136,2137],{},"123",[1444,2139,2140],{},"{",[1399,2142,2143,2146,2149,2152,2155,2158,2160,2163],{},[1444,2144,2145],{},"28",[1444,2147,2148],{},"FS",[1444,2150,2151],{},"60",[1444,2153,2154],{},"\u003C",[1444,2156,2157],{},"92",[1444,2159,1830],{},[1444,2161,2162],{},"124",[1444,2164,2165],{},"|",[1399,2167,2168,2171,2174,2177,2179,2182,2185,2188],{},[1444,2169,2170],{},"29",[1444,2172,2173],{},"GS",[1444,2175,2176],{},"61",[1444,2178,108],{},[1444,2180,2181],{},"93",[1444,2183,2184],{},"]",[1444,2186,2187],{},"125",[1444,2189,2190],{},"}",[1399,2192,2193,2196,2199,2202,2204,2207,2210,2213],{},[1444,2194,2195],{},"30",[1444,2197,2198],{},"RS",[1444,2200,2201],{},"62",[1444,2203,972],{},[1444,2205,2206],{},"94",[1444,2208,2209],{},"^",[1444,2211,2212],{},"126",[1444,2214,2215],{},"`",[1399,2217,2218,2221,2224,2227,2229,2232,2235,2238],{},[1444,2219,2220],{},"31",[1444,2222,2223],{},"US",[1444,2225,2226],{},"63",[1444,2228,978],{},[1444,2230,2231],{},"95",[1444,2233,2234],{},"_",[1444,2236,2237],{},"127",[1444,2239,2240],{},"DEL",[40,2242,2243,2244,2247],{},"ASCII 码大致由以下",[840,2245,2246],{},"两部分组","成：",[1000,2249,2250,2257],{},[22,2251,2252,2253,2256],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[840,2254,2255],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[22,2258,2259,2260,2263],{},"ASCII 打印字符：数字 ",[840,2261,2262],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[1233,2265,2267],{"id":2266},"_134转义字符","1.3.4转义字符",[29,2269,2271],{"className":45,"code":2270,"language":47,"meta":35,"style":35},"\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",[37,2272,2273,2278,2293,2306,2311,2324,2329],{"__ignoreMap":35},[51,2274,2275],{"class":53,"line":54},[51,2276,2277],{"class":57},"\u002F\u002F换行符\n",[51,2279,2280,2283,2285,2288,2290],{"class":53,"line":61},[51,2281,2282],{"class":72},"cout ",[51,2284,218],{"class":64},[51,2286,2287],{"class":282},"\"hello world\u002Fn\"",[51,2289,409],{"class":72},[51,2291,2292],{"class":57}," \u002F\u002F就等同于如下：\n",[51,2294,2295,2297,2299,2302,2304],{"class":53,"line":93},[51,2296,2282],{"class":72},[51,2298,218],{"class":64},[51,2300,2301],{"class":282},"\"hello world\"",[51,2303,218],{"class":64},[51,2305,288],{"class":72},[51,2307,2308],{"class":53,"line":99},[51,2309,2310],{"class":57},"\u002F\u002F反斜杠\n",[51,2312,2313,2315,2317,2320,2322],{"class":53,"line":120},[51,2314,2282],{"class":72},[51,2316,218],{"class":64},[51,2318,2319],{"class":282},"\"\u002F\u002F\"",[51,2321,218],{"class":64},[51,2323,288],{"class":72},[51,2325,2326],{"class":53,"line":129},[51,2327,2328],{"class":57},"\u002F\u002F水平制表符\n",[51,2330,2331,2333,2335,2338,2341,2344,2346,2348],{"class":53,"line":206},[51,2332,2282],{"class":72},[51,2334,218],{"class":64},[51,2336,2337],{"class":282},"\"aaaa",[51,2339,2340],{"class":175},"\\t",[51,2342,2343],{"class":282},"helloworld\"",[51,2345,218],{"class":64},[51,2347,709],{"class":72},[51,2349,2350],{"class":57}," \u002F\u002F输出窗口时有对齐效果\n",[1233,2352,2354],{"id":2353},"_135字符串型","1.3.5字符串型",[40,2356,2357,2358,2360],{},"char 变量名",[51,2359],{},"=\"字符串值\"",[29,2362,2364],{"className":45,"code":2363,"language":47,"meta":35,"style":35},"\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",[37,2365,2366,2371,2376,2381,2386,2399,2412,2417,2422,2433],{"__ignoreMap":35},[51,2367,2368],{"class":53,"line":54},[51,2369,2370],{"class":57},"\u002F\u002Fc风格字符串\n",[51,2372,2373],{"class":53,"line":61},[51,2374,2375],{"class":57},"\u002F\u002F注意事项：\n",[51,2377,2378],{"class":53,"line":93},[51,2379,2380],{"class":57},"\u002F\u002F1.char字符串名[]\n",[51,2382,2383],{"class":53,"line":99},[51,2384,2385],{"class":57},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[51,2387,2388,2390,2393,2395,2397],{"class":53,"line":120},[51,2389,1353],{"class":64},[51,2391,2392],{"class":72}," str[]",[51,2394,108],{"class":64},[51,2396,2301],{"class":282},[51,2398,179],{"class":72},[51,2400,2401,2403,2405,2408,2410],{"class":53,"line":129},[51,2402,2282],{"class":72},[51,2404,218],{"class":64},[51,2406,2407],{"class":72},"str",[51,2409,218],{"class":64},[51,2411,288],{"class":72},[51,2413,2414],{"class":53,"line":206},[51,2415,2416],{"class":57},"\u002F\u002Fc++风格字符串\n",[51,2418,2419],{"class":53,"line":212},[51,2420,2421],{"class":57},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[51,2423,2424,2427,2429,2431],{"class":53,"line":227},[51,2425,2426],{"class":72},"string str2",[51,2428,108],{"class":64},[51,2430,2301],{"class":282},[51,2432,179],{"class":72},[51,2434,2435,2437,2439,2442,2444],{"class":53,"line":370},[51,2436,2282],{"class":72},[51,2438,218],{"class":64},[51,2440,2441],{"class":72},"str2",[51,2443,218],{"class":64},[51,2445,288],{"class":72},[1233,2447,2449],{"id":2448},"_136布尔类型bool","1.3.6布尔类型bool",[29,2451,2453],{"className":45,"code":2452,"language":47,"meta":35,"style":35},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[37,2454,2455,2470],{"__ignoreMap":35},[51,2456,2457,2460,2463,2465,2468],{"class":53,"line":54},[51,2458,2459],{"class":64},"bool",[51,2461,2462],{"class":72}," flag",[51,2464,108],{"class":64},[51,2466,2467],{"class":175},"true",[51,2469,179],{"class":72},[51,2471,2472,2475,2478,2481,2483,2485],{"class":53,"line":61},[51,2473,2474],{"class":72},"cout",[51,2476,2477],{"class":64},"\u003C\u003Csizeof",[51,2479,2480],{"class":72},"(flag)",[51,2482,218],{"class":64},[51,2484,709],{"class":72},[51,2486,2487],{"class":57}," \u002F\u002F查看布尔占内存空间\n",[14,2489,2491],{"id":2490},"_14键盘输入cin","1.4键盘输入cin",[29,2493,2495],{"className":45,"code":2494,"language":47,"meta":35,"style":35},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[37,2496,2497,2509,2526,2535],{"__ignoreMap":35},[51,2498,2499,2501,2503,2505,2507],{"class":53,"line":54},[51,2500,65],{"class":64},[51,2502,170],{"class":72},[51,2504,108],{"class":64},[51,2506,176],{"class":175},[51,2508,179],{"class":72},[51,2510,2511,2513,2515,2518,2520,2522,2524],{"class":53,"line":61},[51,2512,2474],{"class":72},[51,2514,218],{"class":64},[51,2516,2517],{"class":282},"\"请给整型变量a赋值\"",[51,2519,218],{"class":64},[51,2521,981],{"class":72},[51,2523,218],{"class":64},[51,2525,288],{"class":72},[51,2527,2528,2531,2533],{"class":53,"line":93},[51,2529,2530],{"class":72},"cin ",[51,2532,200],{"class":64},[51,2534,763],{"class":72},[51,2536,2537,2539,2541,2544,2547,2549,2551],{"class":53,"line":99},[51,2538,2282],{"class":72},[51,2540,218],{"class":64},[51,2542,2543],{"class":282}," \"整型变量a=\"",[51,2545,2546],{"class":64}," \u003C\u003C",[51,2548,981],{"class":72},[51,2550,218],{"class":64},[51,2552,288],{"class":72},[14,2554,2556],{"id":2555},"_15运算符","1.5运算符",[1233,2558,2560],{"id":2559},"_151算术运算符","1.5.1算术运算符",[40,2562,2563,2567],{},[2564,2565],"img",{"alt":35,"src":2566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[19,2569,2570,2573,2576],{},[22,2571,2572],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[22,2574,2575],{},"两个小数不可以做取模运算",[22,2577,2578],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[1233,2580,2582],{"id":2581},"_152赋值运算符","1.5.2赋值运算符",[40,2584,2585],{},[2564,2586],{"alt":35,"src":2587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[1233,2589,2591],{"id":2590},"_153比较运算符","1.5.3比较运算符",[40,2593,2594],{},[2564,2595],{"alt":35,"src":2596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[1233,2598,2600],{"id":2599},"_154逻辑运算符","1.5.4逻辑运算符",[40,2602,2603],{},[2564,2604],{"alt":35,"src":2605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2607,2609],{"id":2608},"_16程序流程结构","1.6程序流程结构",[1233,2611,2613],{"id":2612},"_161选择结构","1.6.1选择结构",[19,2615,2616],{},[22,2617,2618],{},"if语句\n单行、多行、多条件if语句",[29,2620,2622],{"className":45,"code":2621,"language":47,"meta":35,"style":35},"\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",[37,2623,2624,2629,2644,2648,2661,2665,2670,2679,2692,2696,2709,2713,2718,2722,2735,2739,2744,2764,2768,2781,2786,2815,2820,2837,2842,2847,2852,2866,2871],{"__ignoreMap":35},[51,2625,2626],{"class":53,"line":54},[51,2627,2628],{"class":57},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[51,2630,2631,2634,2637,2639,2642],{"class":53,"line":61},[51,2632,2633],{"class":64},"if",[51,2635,2636],{"class":72},"(score",[51,2638,972],{"class":64},[51,2640,2641],{"class":175},"600",[51,2643,90],{"class":72},[51,2645,2646],{"class":53,"line":93},[51,2647,96],{"class":72},[51,2649,2650,2652,2654,2657,2659],{"class":53,"line":99},[51,2651,215],{"class":72},[51,2653,218],{"class":64},[51,2655,2656],{"class":282},"'这是单行if语句'",[51,2658,218],{"class":64},[51,2660,288],{"class":72},[51,2662,2663],{"class":53,"line":120},[51,2664,132],{"class":72},[51,2666,2667],{"class":53,"line":129},[51,2668,2669],{"class":57},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[51,2671,2672,2674,2676],{"class":53,"line":206},[51,2673,2530],{"class":72},[51,2675,200],{"class":64},[51,2677,2678],{"class":72}," score\n",[51,2680,2681,2683,2685,2688,2690],{"class":53,"line":212},[51,2682,2633],{"class":64},[51,2684,2636],{"class":72},[51,2686,2687],{"class":64},"\u003C=",[51,2689,2641],{"class":175},[51,2691,90],{"class":72},[51,2693,2694],{"class":53,"line":227},[51,2695,96],{"class":72},[51,2697,2698,2700,2702,2705,2707],{"class":53,"line":370},[51,2699,215],{"class":72},[51,2701,200],{"class":64},[51,2703,2704],{"class":282},"\"小于等于600\"",[51,2706,218],{"class":64},[51,2708,288],{"class":72},[51,2710,2711],{"class":53,"line":387},[51,2712,132],{"class":72},[51,2714,2715],{"class":53,"line":404},[51,2716,2717],{"class":64},"else\n",[51,2719,2720],{"class":53,"line":415},[51,2721,96],{"class":72},[51,2723,2724,2726,2728,2731,2733],{"class":53,"line":420},[51,2725,215],{"class":72},[51,2727,200],{"class":64},[51,2729,2730],{"class":282},"\"大于600\"",[51,2732,200],{"class":64},[51,2734,288],{"class":72},[51,2736,2737],{"class":53,"line":429},[51,2738,132],{"class":72},[51,2740,2741],{"class":53,"line":434},[51,2742,2743],{"class":57},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[51,2745,2746,2748,2751,2753,2755,2758,2760,2762],{"class":53,"line":448},[51,2747,2633],{"class":64},[51,2749,2750],{"class":72}," (",[51,2752,176],{"class":175},[51,2754,2154],{"class":64},[51,2756,2757],{"class":72},"num",[51,2759,2154],{"class":64},[51,2761,612],{"class":175},[51,2763,90],{"class":72},[51,2765,2766],{"class":53,"line":462},[51,2767,96],{"class":72},[51,2769,2770,2772,2774,2777,2779],{"class":53,"line":470},[51,2771,215],{"class":72},[51,2773,218],{"class":64},[51,2775,2776],{"class":282},"\"小于100\"",[51,2778,218],{"class":64},[51,2780,288],{"class":72},[51,2782,2784],{"class":53,"line":2783},20,[51,2785,132],{"class":72},[51,2787,2789,2792,2795,2798,2801,2803,2806,2808,2810,2813],{"class":53,"line":2788},21,[51,2790,2791],{"class":64},"else",[51,2793,2794],{"class":64}," if",[51,2796,2797],{"class":72}," (nmu",[51,2799,2800],{"class":64},">=",[51,2802,612],{"class":175},[51,2804,2805],{"class":64},"&&",[51,2807,2757],{"class":72},[51,2809,2154],{"class":64},[51,2811,2812],{"class":175},"200",[51,2814,90],{"class":72},[51,2816,2818],{"class":53,"line":2817},22,[51,2819,96],{"class":72},[51,2821,2823,2825,2827,2830,2832,2834],{"class":53,"line":2822},23,[51,2824,215],{"class":72},[51,2826,218],{"class":64},[51,2828,2829],{"class":282},"\"不小于100且小于200\"",[51,2831,218],{"class":64},[51,2833,709],{"class":72},[51,2835,2836],{"class":57}," \u002F\u002F可以无限else if,python中是elif：\n",[51,2838,2840],{"class":53,"line":2839},24,[51,2841,132],{"class":72},[51,2843,2845],{"class":53,"line":2844},25,[51,2846,2717],{"class":64},[51,2848,2850],{"class":53,"line":2849},26,[51,2851,96],{"class":72},[51,2853,2855,2857,2859,2862,2864],{"class":53,"line":2854},27,[51,2856,215],{"class":72},[51,2858,218],{"class":64},[51,2860,2861],{"class":282},"\"不小于200\"",[51,2863,218],{"class":64},[51,2865,288],{"class":72},[51,2867,2869],{"class":53,"line":2868},28,[51,2870,132],{"class":72},[51,2872,2874],{"class":53,"line":2873},29,[51,2875,2876],{"class":57},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[19,2878,2879],{"start":61},[22,2880,2881],{},"三目运算符",[29,2883,2885],{"className":45,"code":2884,"language":47,"meta":35,"style":35},"\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",[37,2886,2887,2892,2897,2923,2945,2962,2967,2990,3005],{"__ignoreMap":35},[51,2888,2889],{"class":53,"line":54},[51,2890,2891],{"class":57},"\u002F\u002F创建三个变量a,b,c\n",[51,2893,2894],{"class":53,"line":61},[51,2895,2896],{"class":57},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[51,2898,2899,2901,2903,2905,2907,2910,2912,2914,2917,2919,2921],{"class":53,"line":93},[51,2900,65],{"class":64},[51,2902,170],{"class":72},[51,2904,108],{"class":64},[51,2906,457],{"class":175},[51,2908,2909],{"class":72},",b",[51,2911,108],{"class":64},[51,2913,443],{"class":175},[51,2915,2916],{"class":72},",c",[51,2918,108],{"class":64},[51,2920,176],{"class":175},[51,2922,179],{"class":72},[51,2924,2925,2927,2929,2932,2934,2936,2938,2940,2942],{"class":53,"line":99},[51,2926,817],{"class":72},[51,2928,108],{"class":64},[51,2930,2931],{"class":72},"(a",[51,2933,972],{"class":64},[51,2935,975],{"class":72},[51,2937,978],{"class":64},[51,2939,981],{"class":72},[51,2941,984],{"class":64},[51,2943,2944],{"class":72},"b)\n",[51,2946,2947,2949,2951,2954,2956,2958,2960],{"class":53,"line":120},[51,2948,2474],{"class":72},[51,2950,218],{"class":64},[51,2952,2953],{"class":282},"\"c=\"",[51,2955,218],{"class":64},[51,2957,817],{"class":72},[51,2959,218],{"class":64},[51,2961,288],{"class":72},[51,2963,2964],{"class":53,"line":129},[51,2965,2966],{"class":57},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[51,2968,2969,2971,2973,2975,2977,2979,2981,2984,2986,2988],{"class":53,"line":206},[51,2970,2931],{"class":72},[51,2972,972],{"class":64},[51,2974,975],{"class":72},[51,2976,978],{"class":64},[51,2978,981],{"class":72},[51,2980,984],{"class":64},[51,2982,2983],{"class":72},"b)",[51,2985,108],{"class":64},[51,2987,612],{"class":175},[51,2989,179],{"class":72},[51,2991,2992,2994,2996,2998,3000,3002],{"class":53,"line":212},[51,2993,2474],{"class":72},[51,2995,218],{"class":64},[51,2997,981],{"class":72},[51,2999,218],{"class":64},[51,3001,709],{"class":72},[51,3003,3004],{"class":57}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[51,3006,3007,3009,3011,3013,3015,3017],{"class":53,"line":227},[51,3008,2474],{"class":72},[51,3010,218],{"class":64},[51,3012,975],{"class":72},[51,3014,218],{"class":64},[51,3016,709],{"class":72},[51,3018,3019],{"class":57}," \u002F\u002F10   a>b,b还是原值\n",[19,3021,3022],{"start":93},[22,3023,3024],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[29,3026,3028],{"className":45,"code":3027,"language":47,"meta":35,"style":35},"\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",[37,3029,3030,3035,3041,3051,3059,3063,3076,3089,3098,3106,3111,3136,3157,3179,3200,3222,3243,3263,3268],{"__ignoreMap":35},[51,3031,3032],{"class":53,"line":54},[51,3033,3034],{"class":57},"\u002F\u002F案例-电影打分\n",[51,3036,3037,3039],{"class":53,"line":61},[51,3038,1026],{"class":64},[51,3040,1029],{"class":282},[51,3042,3043,3045,3047,3049],{"class":53,"line":93},[51,3044,1034],{"class":64},[51,3046,1037],{"class":64},[51,3048,1040],{"class":68},[51,3050,179],{"class":72},[51,3052,3053,3055,3057],{"class":53,"line":99},[51,3054,65],{"class":64},[51,3056,151],{"class":68},[51,3058,154],{"class":72},[51,3060,3061],{"class":53,"line":120},[51,3062,96],{"class":72},[51,3064,3065,3067,3070,3072,3074],{"class":53,"line":129},[51,3066,102],{"class":64},[51,3068,3069],{"class":72}," score",[51,3071,108],{"class":64},[51,3073,176],{"class":175},[51,3075,179],{"class":72},[51,3077,3078,3080,3082,3085,3087],{"class":53,"line":206},[51,3079,215],{"class":72},[51,3081,218],{"class":64},[51,3083,3084],{"class":282},"\"电影打分：\"",[51,3086,218],{"class":64},[51,3088,288],{"class":72},[51,3090,3091,3093,3095],{"class":53,"line":212},[51,3092,197],{"class":72},[51,3094,200],{"class":64},[51,3096,3097],{"class":72},"score;\n",[51,3099,3100,3103],{"class":53,"line":227},[51,3101,3102],{"class":64},"    switch",[51,3104,3105],{"class":72},"(score)\n",[51,3107,3108],{"class":53,"line":370},[51,3109,3110],{"class":72},"    {\n",[51,3112,3113,3116,3119,3122,3124,3127,3129,3131,3134],{"class":53,"line":387},[51,3114,3115],{"class":64},"        case",[51,3117,3118],{"class":175}," 10",[51,3120,3121],{"class":72},":cout",[51,3123,218],{"class":64},[51,3125,3126],{"class":282},"\"经典\"",[51,3128,218],{"class":64},[51,3130,709],{"class":72},[51,3132,3133],{"class":64},"break",[51,3135,179],{"class":72},[51,3137,3138,3140,3143,3145,3147,3149,3151,3153,3155],{"class":53,"line":404},[51,3139,3115],{"class":64},[51,3141,3142],{"class":175}," 9",[51,3144,3121],{"class":72},[51,3146,218],{"class":64},[51,3148,3126],{"class":282},[51,3150,218],{"class":64},[51,3152,709],{"class":72},[51,3154,3133],{"class":64},[51,3156,179],{"class":72},[51,3158,3159,3161,3164,3166,3168,3171,3173,3175,3177],{"class":53,"line":415},[51,3160,3115],{"class":64},[51,3162,3163],{"class":175}," 8",[51,3165,3121],{"class":72},[51,3167,218],{"class":64},[51,3169,3170],{"class":282},"\"非常好\"",[51,3172,218],{"class":64},[51,3174,709],{"class":72},[51,3176,3133],{"class":64},[51,3178,179],{"class":72},[51,3180,3181,3183,3186,3188,3190,3192,3194,3196,3198],{"class":53,"line":420},[51,3182,3115],{"class":64},[51,3184,3185],{"class":175}," 7",[51,3187,3121],{"class":72},[51,3189,218],{"class":64},[51,3191,3170],{"class":282},[51,3193,218],{"class":64},[51,3195,709],{"class":72},[51,3197,3133],{"class":64},[51,3199,179],{"class":72},[51,3201,3202,3204,3207,3209,3211,3214,3216,3218,3220],{"class":53,"line":429},[51,3203,3115],{"class":64},[51,3205,3206],{"class":175}," 6",[51,3208,3121],{"class":72},[51,3210,218],{"class":64},[51,3212,3213],{"class":282},"\"一般\"",[51,3215,218],{"class":64},[51,3217,709],{"class":72},[51,3219,3133],{"class":64},[51,3221,179],{"class":72},[51,3223,3224,3226,3229,3231,3233,3235,3237,3239,3241],{"class":53,"line":434},[51,3225,3115],{"class":64},[51,3227,3228],{"class":175}," 5",[51,3230,3121],{"class":72},[51,3232,218],{"class":64},[51,3234,3213],{"class":282},[51,3236,218],{"class":64},[51,3238,709],{"class":72},[51,3240,3133],{"class":64},[51,3242,179],{"class":72},[51,3244,3245,3248,3250,3252,3255,3257,3259,3261],{"class":53,"line":448},[51,3246,3247],{"class":64},"        default",[51,3249,3121],{"class":72},[51,3251,218],{"class":64},[51,3253,3254],{"class":282},"\"烂片\"",[51,3256,218],{"class":64},[51,3258,709],{"class":72},[51,3260,3133],{"class":64},[51,3262,179],{"class":72},[51,3264,3265],{"class":53,"line":462},[51,3266,3267],{"class":72},"    }\n",[51,3269,3270],{"class":53,"line":470},[51,3271,132],{"class":72},[40,3273,3274],{},"if和switch区别：",[1000,3276,3277,3280],{},[22,3278,3279],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[22,3281,3282],{},"switch优点：结构清晰，执行效率高",[1233,3284,3286],{"id":3285},"_162循环结构","1.6.2循环结构",[19,3288,3289],{},[22,3290,3291],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[29,3293,3295],{"className":45,"code":3294,"language":47,"meta":35,"style":35},"\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",[37,3296,3297,3302,3310,3314,3327,3341,3345,3365,3375,3379,3391],{"__ignoreMap":35},[51,3298,3299],{"class":53,"line":54},[51,3300,3301],{"class":57},"\u002F\u002F打印0-9数字\n",[51,3303,3304,3306,3308],{"class":53,"line":61},[51,3305,65],{"class":64},[51,3307,151],{"class":68},[51,3309,154],{"class":72},[51,3311,3312],{"class":53,"line":93},[51,3313,96],{"class":72},[51,3315,3316,3318,3321,3323,3325],{"class":53,"line":99},[51,3317,102],{"class":64},[51,3319,3320],{"class":72}," num",[51,3322,108],{"class":64},[51,3324,176],{"class":175},[51,3326,179],{"class":72},[51,3328,3329,3332,3335,3337,3339],{"class":53,"line":120},[51,3330,3331],{"class":64},"    while",[51,3333,3334],{"class":72},"(num",[51,3336,2154],{"class":64},[51,3338,443],{"class":175},[51,3340,90],{"class":72},[51,3342,3343],{"class":53,"line":129},[51,3344,3110],{"class":72},[51,3346,3347,3350,3353,3355,3357,3359,3362],{"class":53,"line":206},[51,3348,3349],{"class":68},"       std",[51,3351,3352],{"class":72},"::cout",[51,3354,218],{"class":64},[51,3356,2757],{"class":72},[51,3358,218],{"class":64},[51,3360,3361],{"class":68},"std",[51,3363,3364],{"class":72},"::endl;\n",[51,3366,3367,3370,3373],{"class":53,"line":212},[51,3368,3369],{"class":72},"        num",[51,3371,3372],{"class":64},"++",[51,3374,179],{"class":72},[51,3376,3377],{"class":53,"line":227},[51,3378,3267],{"class":72},[51,3380,3381,3384,3386,3389],{"class":53,"line":370},[51,3382,3383],{"class":68},"    system",[51,3385,73],{"class":72},[51,3387,3388],{"class":282},"\"pause\"",[51,3390,90],{"class":72},[51,3392,3393],{"class":53,"line":387},[51,3394,132],{"class":72},[40,3396,3397],{},"注意：写好循环条件，避免死循环情况",[29,3399,3401],{"className":45,"code":3400,"language":47,"meta":35,"style":35},"\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",[37,3402,3403,3408,3415,3422,3432,3440,3444,3449,3476,3481,3486,3494,3521,3526,3531,3544,3554,3558,3568,3573,3586,3591,3605,3610,3625,3629,3642,3646,3651,3655,3669,3677,3682,3688,3694,3699],{"__ignoreMap":35},[51,3404,3405],{"class":53,"line":54},[51,3406,3407],{"class":57},"\u002F\u002F循环结构-猜数字\n",[51,3409,3410,3412],{"class":53,"line":61},[51,3411,1026],{"class":64},[51,3413,3414],{"class":282}," \u003Ciostream>\n",[51,3416,3417,3419],{"class":53,"line":93},[51,3418,1026],{"class":64},[51,3420,3421],{"class":282}," \u003Cctime>\n",[51,3423,3424,3426,3428,3430],{"class":53,"line":99},[51,3425,1034],{"class":64},[51,3427,1037],{"class":64},[51,3429,1040],{"class":68},[51,3431,179],{"class":72},[51,3433,3434,3436,3438],{"class":53,"line":120},[51,3435,65],{"class":64},[51,3437,151],{"class":68},[51,3439,154],{"class":72},[51,3441,3442],{"class":53,"line":129},[51,3443,96],{"class":72},[51,3445,3446],{"class":53,"line":206},[51,3447,3448],{"class":57},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[51,3450,3451,3454,3457,3460,3463,3465,3468,3470,3473],{"class":53,"line":212},[51,3452,3453],{"class":68},"    srand",[51,3455,3456],{"class":72},"((",[51,3458,3459],{"class":64},"unsigned",[51,3461,3462],{"class":64}," int",[51,3464,1677],{"class":72},[51,3466,3467],{"class":68},"time",[51,3469,73],{"class":72},[51,3471,3472],{"class":175},"NULL",[51,3474,3475],{"class":72},"));\n",[51,3477,3478],{"class":53,"line":227},[51,3479,3480],{"emptyLinePlaceholder":1192},"\n",[51,3482,3483],{"class":53,"line":370},[51,3484,3485],{"class":57},"    \u002F\u002F1.系统生成随机数\n",[51,3487,3488,3491],{"class":53,"line":387},[51,3489,3490],{"class":57},"    \u002F\u002Frand()%100",[51,3492,3493],{"class":57}," \u002F\u002F生成0-99的随机数\n",[51,3495,3496,3498,3500,3502,3505,3508,3510,3512,3514,3516,3518],{"class":53,"line":404},[51,3497,102],{"class":64},[51,3499,3320],{"class":72},[51,3501,108],{"class":64},[51,3503,3504],{"class":68},"rand",[51,3506,3507],{"class":72},"()",[51,3509,1577],{"class":64},[51,3511,612],{"class":175},[51,3513,114],{"class":64},[51,3515,791],{"class":175},[51,3517,409],{"class":72},[51,3519,3520],{"class":57}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[51,3522,3523],{"class":53,"line":415},[51,3524,3525],{"class":57},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[51,3527,3528],{"class":53,"line":420},[51,3529,3530],{"class":57},"    \u002F\u002F2.玩家猜测\n",[51,3532,3533,3535,3538,3540,3542],{"class":53,"line":429},[51,3534,102],{"class":64},[51,3536,3537],{"class":72}," val",[51,3539,108],{"class":64},[51,3541,176],{"class":175},[51,3543,179],{"class":72},[51,3545,3546,3548,3550,3552],{"class":53,"line":434},[51,3547,3331],{"class":64},[51,3549,2750],{"class":72},[51,3551,791],{"class":175},[51,3553,90],{"class":72},[51,3555,3556],{"class":53,"line":448},[51,3557,3110],{"class":72},[51,3559,3560,3563,3565],{"class":53,"line":462},[51,3561,3562],{"class":72},"        cin",[51,3564,200],{"class":64},[51,3566,3567],{"class":72},"val;\n",[51,3569,3570],{"class":53,"line":470},[51,3571,3572],{"class":57},"        \u002F\u002F3.判断玩家猜测\n",[51,3574,3575,3578,3581,3583],{"class":53,"line":2783},[51,3576,3577],{"class":64},"        if",[51,3579,3580],{"class":72},"(val",[51,3582,2154],{"class":64},[51,3584,3585],{"class":72},"num) \n",[51,3587,3588],{"class":53,"line":2788},[51,3589,3590],{"class":72},"        {\n",[51,3592,3593,3596,3598,3601,3603],{"class":53,"line":2817},[51,3594,3595],{"class":72},"            cout",[51,3597,218],{"class":64},[51,3599,3600],{"class":282},"\"猜小了！\"",[51,3602,218],{"class":64},[51,3604,288],{"class":72},[51,3606,3607],{"class":53,"line":2822},[51,3608,3609],{"class":72},"        }\n",[51,3611,3612,3615,3617,3620,3622],{"class":53,"line":2839},[51,3613,3614],{"class":64},"        else",[51,3616,2794],{"class":64},[51,3618,3619],{"class":72}," (val",[51,3621,972],{"class":64},[51,3623,3624],{"class":72},"num)\n",[51,3626,3627],{"class":53,"line":2844},[51,3628,3590],{"class":72},[51,3630,3631,3633,3635,3638,3640],{"class":53,"line":2849},[51,3632,3595],{"class":72},[51,3634,218],{"class":64},[51,3636,3637],{"class":282},"\"猜大了！\"",[51,3639,218],{"class":64},[51,3641,288],{"class":72},[51,3643,3644],{"class":53,"line":2854},[51,3645,3609],{"class":72},[51,3647,3648],{"class":53,"line":2868},[51,3649,3650],{"class":64},"        else\n",[51,3652,3653],{"class":53,"line":2873},[51,3654,3590],{"class":72},[51,3656,3658,3660,3662,3665,3667],{"class":53,"line":3657},30,[51,3659,3595],{"class":72},[51,3661,218],{"class":64},[51,3663,3664],{"class":282},"\"猜对了！\"",[51,3666,218],{"class":64},[51,3668,288],{"class":72},[51,3670,3672,3675],{"class":53,"line":3671},31,[51,3673,3674],{"class":64},"            break",[51,3676,179],{"class":72},[51,3678,3680],{"class":53,"line":3679},32,[51,3681,3609],{"class":72},[51,3683,3685],{"class":53,"line":3684},33,[51,3686,3687],{"class":57},"        \u002F\u002F猜对 退出游戏\n",[51,3689,3691],{"class":53,"line":3690},34,[51,3692,3693],{"class":57},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[51,3695,3697],{"class":53,"line":3696},35,[51,3698,3267],{"class":72},[51,3700,3702],{"class":53,"line":3701},36,[51,3703,132],{"class":72},[19,3705,3706],{"start":61},[22,3707,3708,3709,3712],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[840,3710,3711],{},"do...while会先执行一次循环语句","，在判断循环语句",[29,3714,3716],{"className":45,"code":3715,"language":47,"meta":35,"style":35},"\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",[37,3717,3718,3723,3731,3735,3747,3755,3759,3776,3783,3787,3799,3809],{"__ignoreMap":35},[51,3719,3720],{"class":53,"line":54},[51,3721,3722],{"class":57},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[51,3724,3725,3727,3729],{"class":53,"line":61},[51,3726,65],{"class":64},[51,3728,151],{"class":68},[51,3730,154],{"class":72},[51,3732,3733],{"class":53,"line":93},[51,3734,96],{"class":72},[51,3736,3737,3739,3741,3743,3745],{"class":53,"line":99},[51,3738,102],{"class":64},[51,3740,3320],{"class":72},[51,3742,108],{"class":64},[51,3744,176],{"class":175},[51,3746,179],{"class":72},[51,3748,3749,3752],{"class":53,"line":120},[51,3750,3751],{"class":64},"    do",[51,3753,3754],{"class":72}," \n",[51,3756,3757],{"class":53,"line":129},[51,3758,3110],{"class":72},[51,3760,3761,3764,3766,3768,3770,3772,3774],{"class":53,"line":206},[51,3762,3763],{"class":68},"        std",[51,3765,3352],{"class":72},[51,3767,218],{"class":64},[51,3769,2757],{"class":72},[51,3771,218],{"class":64},[51,3773,3361],{"class":68},[51,3775,3364],{"class":72},[51,3777,3778,3780],{"class":53,"line":212},[51,3779,3369],{"class":72},[51,3781,3782],{"class":64},"++\n",[51,3784,3785],{"class":53,"line":227},[51,3786,3267],{"class":72},[51,3788,3789,3791,3793,3795,3797],{"class":53,"line":370},[51,3790,3331],{"class":64},[51,3792,3334],{"class":72},[51,3794,2154],{"class":64},[51,3796,443],{"class":175},[51,3798,615],{"class":72},[51,3800,3801,3803,3805,3807],{"class":53,"line":387},[51,3802,3383],{"class":68},[51,3804,73],{"class":72},[51,3806,3388],{"class":282},[51,3808,615],{"class":72},[51,3810,3811],{"class":53,"line":404},[51,3812,132],{"class":72},[40,3814,3815],{},"案例-水仙花数",[40,3817,3818],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[40,3820,3821],{},"例如：1^3+5^3+3^3=153",[40,3823,3824],{},"请用do...while语句，求出所有3位数的水仙花数",[29,3826,3828],{"className":45,"code":3827,"language":47,"meta":35,"style":35},"#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",[37,3829,3830,3836,3846,3854,3858,3863,3875,3881,3885,3890,3906,3921,3936,3951,3970,3985,4033,4037,4049,4053,4061,4065,4079],{"__ignoreMap":35},[51,3831,3832,3834],{"class":53,"line":54},[51,3833,1026],{"class":64},[51,3835,3414],{"class":282},[51,3837,3838,3840,3842,3844],{"class":53,"line":61},[51,3839,1034],{"class":64},[51,3841,1037],{"class":64},[51,3843,1040],{"class":68},[51,3845,179],{"class":72},[51,3847,3848,3850,3852],{"class":53,"line":93},[51,3849,65],{"class":64},[51,3851,151],{"class":68},[51,3853,154],{"class":72},[51,3855,3856],{"class":53,"line":99},[51,3857,96],{"class":72},[51,3859,3860],{"class":53,"line":120},[51,3861,3862],{"class":57},"    \u002F\u002F1.先打印所有三位数字\n",[51,3864,3865,3867,3869,3871,3873],{"class":53,"line":129},[51,3866,102],{"class":64},[51,3868,3320],{"class":72},[51,3870,108],{"class":64},[51,3872,612],{"class":175},[51,3874,179],{"class":72},[51,3876,3877,3879],{"class":53,"line":206},[51,3878,3751],{"class":64},[51,3880,3754],{"class":72},[51,3882,3883],{"class":53,"line":212},[51,3884,3110],{"class":72},[51,3886,3887],{"class":53,"line":227},[51,3888,3889],{"class":57},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[51,3891,3892,3895,3897,3899,3901,3903],{"class":53,"line":370},[51,3893,3894],{"class":64},"        int",[51,3896,170],{"class":72},[51,3898,108],{"class":64},[51,3900,176],{"class":175},[51,3902,409],{"class":72},[51,3904,3905],{"class":57}," \u002F\u002F个位\n",[51,3907,3908,3910,3912,3914,3916,3918],{"class":53,"line":387},[51,3909,3894],{"class":64},[51,3911,186],{"class":72},[51,3913,108],{"class":64},[51,3915,176],{"class":175},[51,3917,409],{"class":72},[51,3919,3920],{"class":57}," \u002F\u002F十位\n",[51,3922,3923,3925,3927,3929,3931,3933],{"class":53,"line":404},[51,3924,3894],{"class":64},[51,3926,800],{"class":72},[51,3928,108],{"class":64},[51,3930,176],{"class":175},[51,3932,409],{"class":72},[51,3934,3935],{"class":57}," \u002F\u002F百位\n",[51,3937,3938,3941,3943,3945,3947,3949],{"class":53,"line":415},[51,3939,3940],{"class":72},"        a",[51,3942,108],{"class":64},[51,3944,2757],{"class":72},[51,3946,1577],{"class":64},[51,3948,443],{"class":175},[51,3950,179],{"class":72},[51,3952,3953,3956,3958,3960,3962,3964,3966,3968],{"class":53,"line":420},[51,3954,3955],{"class":72},"        b",[51,3957,108],{"class":64},[51,3959,2757],{"class":72},[51,3961,1830],{"class":64},[51,3963,443],{"class":175},[51,3965,1577],{"class":64},[51,3967,443],{"class":175},[51,3969,179],{"class":72},[51,3971,3972,3975,3977,3979,3981,3983],{"class":53,"line":429},[51,3973,3974],{"class":72},"        c",[51,3976,108],{"class":64},[51,3978,2757],{"class":72},[51,3980,1830],{"class":64},[51,3982,612],{"class":175},[51,3984,179],{"class":72},[51,3986,3987,3989,3991,3993,3995,3997,3999,4001,4003,4005,4007,4009,4011,4013,4015,4017,4019,4021,4024,4027,4030],{"class":53,"line":434},[51,3988,3577],{"class":64},[51,3990,2931],{"class":72},[51,3992,1702],{"class":64},[51,3994,981],{"class":72},[51,3996,1702],{"class":64},[51,3998,981],{"class":72},[51,4000,114],{"class":64},[51,4002,975],{"class":72},[51,4004,1702],{"class":64},[51,4006,975],{"class":72},[51,4008,1702],{"class":64},[51,4010,975],{"class":72},[51,4012,114],{"class":64},[51,4014,817],{"class":72},[51,4016,1702],{"class":64},[51,4018,817],{"class":72},[51,4020,1702],{"class":64},[51,4022,4023],{"class":72},"c ",[51,4025,4026],{"class":64},"==",[51,4028,4029],{"class":72}," num)",[51,4031,4032],{"class":57}," \u002F\u002F如果是水仙花数，才打印\n",[51,4034,4035],{"class":53,"line":448},[51,4036,3590],{"class":72},[51,4038,4039,4041,4043,4045,4047],{"class":53,"line":462},[51,4040,3595],{"class":72},[51,4042,218],{"class":64},[51,4044,2757],{"class":72},[51,4046,218],{"class":64},[51,4048,288],{"class":72},[51,4050,4051],{"class":53,"line":470},[51,4052,3609],{"class":72},[51,4054,4055,4057,4059],{"class":53,"line":2783},[51,4056,3369],{"class":72},[51,4058,3372],{"class":64},[51,4060,179],{"class":72},[51,4062,4063],{"class":53,"line":2788},[51,4064,3267],{"class":72},[51,4066,4067,4069,4072,4074,4077],{"class":53,"line":2817},[51,4068,3331],{"class":64},[51,4070,4071],{"class":72}," (num ",[51,4073,2154],{"class":64},[51,4075,4076],{"class":175}," 1000",[51,4078,615],{"class":72},[51,4080,4081],{"class":53,"line":2822},[51,4082,132],{"class":72},[19,4084,4085],{"start":93},[22,4086,4087],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[29,4089,4091],{"className":45,"code":4090,"language":47,"meta":35,"style":35},"\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",[37,4092,4093,4098,4127,4131,4143,4147,4152,4163,4170,4174,4188,4192,4199,4203,4215,4224],{"__ignoreMap":35},[51,4094,4095],{"class":53,"line":54},[51,4096,4097],{"class":57},"\u002F\u002F从数字0-9打印\n",[51,4099,4100,4103,4105,4107,4110,4112,4114,4117,4119,4121,4123,4125],{"class":53,"line":61},[51,4101,4102],{"class":64},"for",[51,4104,73],{"class":72},[51,4106,65],{"class":64},[51,4108,4109],{"class":72}," i",[51,4111,108],{"class":64},[51,4113,176],{"class":175},[51,4115,4116],{"class":72},";i",[51,4118,2154],{"class":64},[51,4120,443],{"class":175},[51,4122,4116],{"class":72},[51,4124,3372],{"class":64},[51,4126,90],{"class":72},[51,4128,4129],{"class":53,"line":93},[51,4130,96],{"class":72},[51,4132,4133,4135,4137,4139,4141],{"class":53,"line":99},[51,4134,215],{"class":72},[51,4136,218],{"class":64},[51,4138,1689],{"class":72},[51,4140,218],{"class":64},[51,4142,288],{"class":72},[51,4144,4145],{"class":53,"line":120},[51,4146,132],{"class":72},[51,4148,4149],{"class":53,"line":129},[51,4150,4151],{"class":57},"\u002F\u002F上式可以进行拆分\n",[51,4153,4154,4156,4158,4160],{"class":53,"line":206},[51,4155,65],{"class":64},[51,4157,4109],{"class":72},[51,4159,108],{"class":64},[51,4161,4162],{"class":175},"0\n",[51,4164,4165,4167],{"class":53,"line":212},[51,4166,4102],{"class":64},[51,4168,4169],{"class":72},"(;;;)\n",[51,4171,4172],{"class":53,"line":227},[51,4173,96],{"class":72},[51,4175,4176,4179,4182,4184,4186],{"class":53,"line":370},[51,4177,4178],{"class":64},"    if",[51,4180,4181],{"class":72},"(i",[51,4183,2800],{"class":64},[51,4185,443],{"class":175},[51,4187,90],{"class":72},[51,4189,4190],{"class":53,"line":387},[51,4191,3110],{"class":72},[51,4193,4194,4197],{"class":53,"line":404},[51,4195,4196],{"class":64},"        break",[51,4198,179],{"class":72},[51,4200,4201],{"class":53,"line":415},[51,4202,3267],{"class":72},[51,4204,4205,4207,4209,4211,4213],{"class":53,"line":420},[51,4206,215],{"class":72},[51,4208,218],{"class":64},[51,4210,1689],{"class":72},[51,4212,218],{"class":64},[51,4214,288],{"class":72},[51,4216,4217,4220,4222],{"class":53,"line":429},[51,4218,4219],{"class":72},"    i",[51,4221,3372],{"class":64},[51,4223,179],{"class":72},[51,4225,4226],{"class":53,"line":434},[51,4227,132],{"class":72},[40,4229,4230],{},"小练习",[29,4232,4234],{"className":45,"code":4233,"language":47,"meta":35,"style":35},"#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",[37,4235,4236,4242,4252,4260,4264,4269,4274,4302,4306,4311,4316,4357,4361,4374,4378,4382,4386,4398,4402,4406],{"__ignoreMap":35},[51,4237,4238,4240],{"class":53,"line":54},[51,4239,1026],{"class":64},[51,4241,1029],{"class":282},[51,4243,4244,4246,4248,4250],{"class":53,"line":61},[51,4245,1034],{"class":64},[51,4247,1037],{"class":64},[51,4249,1040],{"class":68},[51,4251,179],{"class":72},[51,4253,4254,4256,4258],{"class":53,"line":93},[51,4255,65],{"class":64},[51,4257,151],{"class":68},[51,4259,154],{"class":72},[51,4261,4262],{"class":53,"line":99},[51,4263,96],{"class":72},[51,4265,4266],{"class":53,"line":120},[51,4267,4268],{"class":57},"    \u002F\u002F敲桌子案例\n",[51,4270,4271],{"class":53,"line":129},[51,4272,4273],{"class":57},"    \u002F\u002F1.先输出1-100的数字\n",[51,4275,4276,4279,4281,4283,4285,4287,4289,4292,4294,4296,4298,4300],{"class":53,"line":206},[51,4277,4278],{"class":64},"    for",[51,4280,73],{"class":72},[51,4282,65],{"class":64},[51,4284,4109],{"class":72},[51,4286,108],{"class":64},[51,4288,791],{"class":175},[51,4290,4291],{"class":72},"; i",[51,4293,2687],{"class":64},[51,4295,612],{"class":175},[51,4297,4291],{"class":72},[51,4299,3372],{"class":64},[51,4301,90],{"class":72},[51,4303,4304],{"class":53,"line":212},[51,4305,3110],{"class":72},[51,4307,4308],{"class":53,"line":227},[51,4309,4310],{"class":57},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[51,4312,4313],{"class":53,"line":370},[51,4314,4315],{"class":57},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[51,4317,4318,4320,4322,4324,4326,4328,4330,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351,4353,4355],{"class":53,"line":387},[51,4319,3577],{"class":64},[51,4321,4181],{"class":72},[51,4323,1577],{"class":64},[51,4325,1618],{"class":175},[51,4327,4026],{"class":64},[51,4329,176],{"class":175},[51,4331,4332],{"class":64}," ||",[51,4334,4109],{"class":72},[51,4336,1577],{"class":64},[51,4338,443],{"class":175},[51,4340,4026],{"class":64},[51,4342,1618],{"class":175},[51,4344,4332],{"class":64},[51,4346,4109],{"class":72},[51,4348,1830],{"class":64},[51,4350,443],{"class":175},[51,4352,4026],{"class":64},[51,4354,1618],{"class":175},[51,4356,90],{"class":72},[51,4358,4359],{"class":53,"line":404},[51,4360,3590],{"class":72},[51,4362,4363,4365,4367,4370,4372],{"class":53,"line":415},[51,4364,3595],{"class":72},[51,4366,218],{"class":64},[51,4368,4369],{"class":282},"\"敲桌子\"",[51,4371,218],{"class":64},[51,4373,288],{"class":72},[51,4375,4376],{"class":53,"line":420},[51,4377,3609],{"class":72},[51,4379,4380],{"class":53,"line":429},[51,4381,3650],{"class":64},[51,4383,4384],{"class":53,"line":434},[51,4385,3590],{"class":72},[51,4387,4388,4390,4392,4394,4396],{"class":53,"line":448},[51,4389,3595],{"class":72},[51,4391,218],{"class":64},[51,4393,1689],{"class":72},[51,4395,218],{"class":64},[51,4397,288],{"class":72},[51,4399,4400],{"class":53,"line":462},[51,4401,3609],{"class":72},[51,4403,4404],{"class":53,"line":470},[51,4405,3267],{"class":72},[51,4407,4408],{"class":53,"line":2783},[51,4409,132],{"class":72},[40,4411,4412],{},"嵌套实现星图",[29,4414,4416],{"className":45,"code":4415,"language":47,"meta":35,"style":35},"#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",[37,4417,4418,4424,4434,4442,4446,4472,4476,4505,4509,4520,4524,4533,4537],{"__ignoreMap":35},[51,4419,4420,4422],{"class":53,"line":54},[51,4421,1026],{"class":64},[51,4423,1029],{"class":282},[51,4425,4426,4428,4430,4432],{"class":53,"line":61},[51,4427,1034],{"class":64},[51,4429,1037],{"class":64},[51,4431,1040],{"class":68},[51,4433,179],{"class":72},[51,4435,4436,4438,4440],{"class":53,"line":93},[51,4437,65],{"class":64},[51,4439,151],{"class":68},[51,4441,154],{"class":72},[51,4443,4444],{"class":53,"line":99},[51,4445,96],{"class":72},[51,4447,4448,4450,4452,4454,4456,4458,4460,4462,4464,4466,4468,4470],{"class":53,"line":120},[51,4449,4278],{"class":64},[51,4451,2750],{"class":72},[51,4453,65],{"class":64},[51,4455,4109],{"class":72},[51,4457,108],{"class":64},[51,4459,176],{"class":175},[51,4461,4116],{"class":72},[51,4463,2154],{"class":64},[51,4465,443],{"class":175},[51,4467,4116],{"class":72},[51,4469,3372],{"class":64},[51,4471,90],{"class":72},[51,4473,4474],{"class":53,"line":129},[51,4475,3110],{"class":72},[51,4477,4478,4481,4483,4485,4488,4490,4492,4495,4497,4499,4501,4503],{"class":53,"line":206},[51,4479,4480],{"class":64},"        for",[51,4482,2750],{"class":72},[51,4484,65],{"class":64},[51,4486,4487],{"class":72}," j",[51,4489,108],{"class":64},[51,4491,176],{"class":175},[51,4493,4494],{"class":72},";j",[51,4496,2154],{"class":64},[51,4498,443],{"class":175},[51,4500,4494],{"class":72},[51,4502,3372],{"class":64},[51,4504,90],{"class":72},[51,4506,4507],{"class":53,"line":212},[51,4508,3590],{"class":72},[51,4510,4511,4513,4515,4518],{"class":53,"line":227},[51,4512,3595],{"class":72},[51,4514,218],{"class":64},[51,4516,4517],{"class":282},"\"*\"",[51,4519,179],{"class":72},[51,4521,4522],{"class":53,"line":370},[51,4523,3609],{"class":72},[51,4525,4526,4529,4531],{"class":53,"line":387},[51,4527,4528],{"class":72},"        cout",[51,4530,218],{"class":64},[51,4532,288],{"class":72},[51,4534,4535],{"class":53,"line":404},[51,4536,3267],{"class":72},[51,4538,4539],{"class":53,"line":415},[51,4540,132],{"class":72},[40,4542,4543],{},"乘法口诀表",[29,4545,4547],{"className":45,"code":4546,"language":47,"meta":35,"style":35},"#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",[37,4548,4549,4555,4565,4573,4577,4603,4607,4632,4636,4676,4680,4688,4692],{"__ignoreMap":35},[51,4550,4551,4553],{"class":53,"line":54},[51,4552,1026],{"class":64},[51,4554,3414],{"class":282},[51,4556,4557,4559,4561,4563],{"class":53,"line":61},[51,4558,1034],{"class":64},[51,4560,1037],{"class":64},[51,4562,1040],{"class":68},[51,4564,179],{"class":72},[51,4566,4567,4569,4571],{"class":53,"line":93},[51,4568,65],{"class":64},[51,4570,151],{"class":68},[51,4572,154],{"class":72},[51,4574,4575],{"class":53,"line":99},[51,4576,96],{"class":72},[51,4578,4579,4581,4583,4585,4587,4589,4591,4593,4595,4597,4599,4601],{"class":53,"line":120},[51,4580,4278],{"class":64},[51,4582,73],{"class":72},[51,4584,65],{"class":64},[51,4586,4109],{"class":72},[51,4588,108],{"class":64},[51,4590,791],{"class":175},[51,4592,4116],{"class":72},[51,4594,2154],{"class":64},[51,4596,443],{"class":175},[51,4598,4116],{"class":72},[51,4600,3372],{"class":64},[51,4602,90],{"class":72},[51,4604,4605],{"class":53,"line":129},[51,4606,3110],{"class":72},[51,4608,4609,4611,4613,4615,4617,4619,4621,4623,4625,4628,4630],{"class":53,"line":206},[51,4610,4480],{"class":64},[51,4612,73],{"class":72},[51,4614,65],{"class":64},[51,4616,4487],{"class":72},[51,4618,108],{"class":64},[51,4620,791],{"class":175},[51,4622,4494],{"class":72},[51,4624,2687],{"class":64},[51,4626,4627],{"class":72},"i;j",[51,4629,3372],{"class":64},[51,4631,90],{"class":72},[51,4633,4634],{"class":53,"line":212},[51,4635,3590],{"class":72},[51,4637,4638,4640,4642,4644,4646,4648,4650,4652,4654,4657,4659,4661,4663,4665,4667,4670,4672,4674],{"class":53,"line":227},[51,4639,3595],{"class":72},[51,4641,218],{"class":64},[51,4643,1714],{"class":72},[51,4645,218],{"class":64},[51,4647,4517],{"class":282},[51,4649,218],{"class":64},[51,4651,1689],{"class":72},[51,4653,218],{"class":64},[51,4655,4656],{"class":282},"\"=\"",[51,4658,218],{"class":64},[51,4660,1689],{"class":72},[51,4662,1702],{"class":64},[51,4664,1714],{"class":72},[51,4666,218],{"class":64},[51,4668,4669],{"class":282},"'",[51,4671,2340],{"class":175},[51,4673,4669],{"class":282},[51,4675,179],{"class":72},[51,4677,4678],{"class":53,"line":370},[51,4679,3609],{"class":72},[51,4681,4682,4684,4686],{"class":53,"line":387},[51,4683,4528],{"class":72},[51,4685,218],{"class":64},[51,4687,288],{"class":72},[51,4689,4690],{"class":53,"line":404},[51,4691,3267],{"class":72},[51,4693,4694],{"class":53,"line":415},[51,4695,132],{"class":72},[1233,4697,4699],{"id":4698},"_163跳出语句","1.6.3跳出语句",[19,4701,4702],{},[22,4703,4704],{},"break语句\n作用：用于跳出选择结构或者循环结构",[40,4706,4707],{},"break使用时机：",[1000,4709,4710,4713,4716],{},[22,4711,4712],{},"出现在switch条件语句中，作用是终止case并跳出switch",[22,4714,4715],{},"出现在循环结构中，作用是跳出当前的循环结构",[22,4717,4718],{},"出现在嵌套循环中，跳出最近的内层循环语句",[19,4720,4721,4724],{"start":61},[22,4722,4723],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[22,4725,4726],{},"goto语句\n语法：goto 标记;",[40,4728,4729],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[29,4731,4733],{"className":45,"code":4732,"language":47,"meta":35,"style":35},"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",[37,4734,4735,4743,4747,4760,4770,4783,4796,4809,4817,4833],{"__ignoreMap":35},[51,4736,4737,4739,4741],{"class":53,"line":54},[51,4738,65],{"class":64},[51,4740,151],{"class":68},[51,4742,154],{"class":72},[51,4744,4745],{"class":53,"line":61},[51,4746,96],{"class":72},[51,4748,4749,4751,4753,4756,4758],{"class":53,"line":93},[51,4750,215],{"class":72},[51,4752,218],{"class":64},[51,4754,4755],{"class":282},"\"1\"",[51,4757,218],{"class":64},[51,4759,288],{"class":72},[51,4761,4762,4765,4768],{"class":53,"line":99},[51,4763,4764],{"class":64},"    goto",[51,4766,4767],{"class":68}," FLAG",[51,4769,179],{"class":72},[51,4771,4772,4774,4776,4779,4781],{"class":53,"line":120},[51,4773,215],{"class":72},[51,4775,218],{"class":64},[51,4777,4778],{"class":282},"\"2\"",[51,4780,218],{"class":64},[51,4782,288],{"class":72},[51,4784,4785,4787,4789,4792,4794],{"class":53,"line":129},[51,4786,215],{"class":72},[51,4788,218],{"class":64},[51,4790,4791],{"class":282},"\"3\"",[51,4793,218],{"class":64},[51,4795,288],{"class":72},[51,4797,4798,4800,4802,4805,4807],{"class":53,"line":206},[51,4799,215],{"class":72},[51,4801,218],{"class":64},[51,4803,4804],{"class":282},"\"4\"",[51,4806,218],{"class":64},[51,4808,288],{"class":72},[51,4810,4811,4814],{"class":53,"line":212},[51,4812,4813],{"class":68},"    FLAG",[51,4815,4816],{"class":72},":\n",[51,4818,4819,4821,4823,4826,4828,4830],{"class":53,"line":227},[51,4820,215],{"class":72},[51,4822,218],{"class":64},[51,4824,4825],{"class":282},"\"5\"",[51,4827,218],{"class":64},[51,4829,709],{"class":72},[51,4831,4832],{"class":57},"\u002F\u002F跳过了2,3,4,直接到5\n",[51,4834,4835],{"class":53,"line":370},[51,4836,132],{"class":72},[14,4838,4840],{"id":4839},"_17数组","1.7数组",[1233,4842,4844],{"id":4843},"_171一维数组","1.7.1一维数组",[19,4846,4847],{},[22,4848,4849],{},"一维数组定义方式",[1393,4851,4852,4862],{},[1396,4853,4854],{},[1399,4855,4856,4859],{},[1402,4857,4858],{},"方式",[1402,4860,4861],{},"注意事项",[1439,4863,4864,4878,4888],{},[1399,4865,4866,4872],{},[1444,4867,4868,4869,409],{},"数据类型 数组名",[51,4870,4871],{},"数组长度",[1444,4873,4874,4875,4877],{},"这种方式是先定义再arr",[51,4876,1689],{},"赋值",[1399,4879,4880,4885],{},[1444,4881,4868,4882,4884],{},[51,4883,4871],{},"={值1,值2....};",[1444,4886,4887],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1399,4889,4890,4894],{},[1444,4891,4868,4892,4884],{},[51,4893],{},[1444,4895,4896,4897,4899],{},"int arr",[51,4898],{},";这是不正确的，按照这样的方式定义必须有初始长度",[19,4901,4902],{"start":61},[22,4903,4904],{},"一维数组数组名\n用途：",[1000,4906,4907],{},[22,4908,4909],{},"1.可以统计整个数组在内存中的长度：",[29,4911,4913],{"className":45,"code":4912,"language":47,"meta":35,"style":35},"sizeof(arr);\nsizeof(arr[0]);\n",[37,4914,4915,4922],{"__ignoreMap":35},[51,4916,4917,4919],{"class":53,"line":54},[51,4918,1261],{"class":64},[51,4920,4921],{"class":72},"(arr);\n",[51,4923,4924,4926,4929,4931],{"class":53,"line":61},[51,4925,1261],{"class":64},[51,4927,4928],{"class":72},"(arr[",[51,4930,176],{"class":175},[51,4932,4933],{"class":72},"]);\n",[1000,4935,4936],{},[22,4937,4938],{},"2.可以获取数组在内存中的首地址:",[29,4940,4942],{"className":45,"code":4941,"language":47,"meta":35,"style":35},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[37,4943,4944,4949,4962,4967],{"__ignoreMap":35},[51,4945,4946],{"class":53,"line":54},[51,4947,4948],{"class":57},"\u002F\u002F查看16进制的首地址\n",[51,4950,4951,4953,4955,4958,4960],{"class":53,"line":61},[51,4952,2474],{"class":72},[51,4954,218],{"class":64},[51,4956,4957],{"class":72},"arr",[51,4959,218],{"class":64},[51,4961,288],{"class":72},[51,4963,4964],{"class":53,"line":93},[51,4965,4966],{"class":57},"\u002F\u002F看10进制数\n",[51,4968,4969,4971,4973,4975,4977,4979,4981,4984,4986,4988,4990],{"class":53,"line":99},[51,4970,2474],{"class":72},[51,4972,218],{"class":64},[51,4974,73],{"class":72},[51,4976,65],{"class":64},[51,4978,1677],{"class":72},[51,4980,1602],{"class":64},[51,4982,4983],{"class":72},"arr[",[51,4985,176],{"class":175},[51,4987,2184],{"class":72},[51,4989,218],{"class":64},[51,4991,288],{"class":72},[40,4993,4994],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1000,4996,4997],{},[22,4998,4999],{},"1️⃣五只小猪称体重",[29,5001,5003],{"className":45,"code":5002,"language":47,"meta":35,"style":35},"#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",[37,5004,5005,5011,5021,5029,5033,5073,5086,5112,5116,5128,5132,5142,5146,5150,5163,5172],{"__ignoreMap":35},[51,5006,5007,5009],{"class":53,"line":54},[51,5008,1026],{"class":64},[51,5010,1029],{"class":282},[51,5012,5013,5015,5017,5019],{"class":53,"line":61},[51,5014,1034],{"class":64},[51,5016,1037],{"class":64},[51,5018,1040],{"class":68},[51,5020,179],{"class":72},[51,5022,5023,5025,5027],{"class":53,"line":93},[51,5024,65],{"class":64},[51,5026,151],{"class":68},[51,5028,154],{"class":72},[51,5030,5031],{"class":53,"line":99},[51,5032,96],{"class":72},[51,5034,5035,5037,5040,5042,5044,5046,5048,5051,5053,5056,5058,5060,5062,5065,5067,5070],{"class":53,"line":120},[51,5036,102],{"class":64},[51,5038,5039],{"class":72}," arr[",[51,5041,1568],{"class":175},[51,5043,2184],{"class":72},[51,5045,108],{"class":64},[51,5047,2140],{"class":72},[51,5049,5050],{"class":175},"300",[51,5052,82],{"class":72},[51,5054,5055],{"class":175},"350",[51,5057,82],{"class":72},[51,5059,2812],{"class":175},[51,5061,82],{"class":72},[51,5063,5064],{"class":175},"400",[51,5066,82],{"class":72},[51,5068,5069],{"class":175},"250",[51,5071,5072],{"class":72},"};\n",[51,5074,5075,5077,5080,5082,5084],{"class":53,"line":129},[51,5076,102],{"class":64},[51,5078,5079],{"class":72}," tmp",[51,5081,108],{"class":64},[51,5083,176],{"class":175},[51,5085,179],{"class":72},[51,5087,5088,5090,5092,5094,5096,5098,5100,5102,5104,5106,5108,5110],{"class":53,"line":206},[51,5089,4278],{"class":64},[51,5091,2750],{"class":72},[51,5093,65],{"class":64},[51,5095,4109],{"class":72},[51,5097,108],{"class":64},[51,5099,176],{"class":175},[51,5101,4116],{"class":72},[51,5103,2154],{"class":64},[51,5105,1568],{"class":175},[51,5107,4116],{"class":72},[51,5109,3372],{"class":64},[51,5111,90],{"class":72},[51,5113,5114],{"class":53,"line":212},[51,5115,3110],{"class":72},[51,5117,5118,5120,5123,5125],{"class":53,"line":227},[51,5119,3577],{"class":64},[51,5121,5122],{"class":72},"(tmp",[51,5124,2154],{"class":64},[51,5126,5127],{"class":72},"arr[i])\n",[51,5129,5130],{"class":53,"line":370},[51,5131,3590],{"class":72},[51,5133,5134,5137,5139],{"class":53,"line":387},[51,5135,5136],{"class":72},"            tmp",[51,5138,108],{"class":64},[51,5140,5141],{"class":72},"arr[i];\n",[51,5143,5144],{"class":53,"line":404},[51,5145,3609],{"class":72},[51,5147,5148],{"class":53,"line":415},[51,5149,3267],{"class":72},[51,5151,5152,5154,5156,5159,5161],{"class":53,"line":420},[51,5153,215],{"class":72},[51,5155,218],{"class":64},[51,5157,5158],{"class":72},"tmp",[51,5160,218],{"class":64},[51,5162,288],{"class":72},[51,5164,5165,5167,5170],{"class":53,"line":429},[51,5166,123],{"class":64},[51,5168,5169],{"class":175}," 0",[51,5171,179],{"class":72},[51,5173,5174],{"class":53,"line":434},[51,5175,132],{"class":72},[1000,5177,5178],{},[22,5179,5180],{},"2️⃣数组元素逆置",[29,5182,5184],{"className":45,"code":5183,"language":47,"meta":35,"style":35},"\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",[37,5185,5186,5191,5197,5207,5215,5219,5254,5270,5302,5315,5320,5325,5336,5346,5355,5360,5369,5379,5384,5389,5416,5420,5436,5440,5451,5460],{"__ignoreMap":35},[51,5187,5188],{"class":53,"line":54},[51,5189,5190],{"class":57},"\u002F\u002F元素逆置\n",[51,5192,5193,5195],{"class":53,"line":61},[51,5194,1026],{"class":64},[51,5196,1029],{"class":282},[51,5198,5199,5201,5203,5205],{"class":53,"line":93},[51,5200,1034],{"class":64},[51,5202,1037],{"class":64},[51,5204,1040],{"class":68},[51,5206,179],{"class":72},[51,5208,5209,5211,5213],{"class":53,"line":99},[51,5210,65],{"class":64},[51,5212,151],{"class":68},[51,5214,154],{"class":72},[51,5216,5217],{"class":53,"line":120},[51,5218,96],{"class":72},[51,5220,5221,5224,5226,5228,5230,5232,5234,5236,5238,5240,5242,5244,5246,5248,5250,5252],{"class":53,"line":129},[51,5222,5223],{"class":64},"   int",[51,5225,5039],{"class":72},[51,5227,1568],{"class":175},[51,5229,2184],{"class":72},[51,5231,108],{"class":64},[51,5233,2140],{"class":72},[51,5235,791],{"class":175},[51,5237,82],{"class":72},[51,5239,1334],{"class":175},[51,5241,82],{"class":72},[51,5243,1328],{"class":175},[51,5245,82],{"class":72},[51,5247,1543],{"class":175},[51,5249,82],{"class":72},[51,5251,1568],{"class":175},[51,5253,5072],{"class":72},[51,5255,5256,5258,5261,5263,5265,5267],{"class":53,"line":206},[51,5257,5223],{"class":64},[51,5259,5260],{"class":72}," start",[51,5262,108],{"class":64},[51,5264,176],{"class":175},[51,5266,409],{"class":72},[51,5268,5269],{"class":57},"\u002F\u002F起始下标\n",[51,5271,5272,5274,5277,5280,5283,5286,5288,5290,5293,5295,5297,5299],{"class":53,"line":212},[51,5273,5223],{"class":64},[51,5275,5276],{"class":72}," end",[51,5278,5279],{"class":64},"=sizeof",[51,5281,5282],{"class":72},"(arr)",[51,5284,5285],{"class":64},"\u002Fsizeof",[51,5287,4928],{"class":72},[51,5289,176],{"class":175},[51,5291,5292],{"class":72},"])",[51,5294,1778],{"class":64},[51,5296,791],{"class":175},[51,5298,409],{"class":72},[51,5300,5301],{"class":57},"\u002F\u002F结束下标\n",[51,5303,5304,5307,5310,5312],{"class":53,"line":227},[51,5305,5306],{"class":64},"   while",[51,5308,5309],{"class":72}," (start",[51,5311,2154],{"class":64},[51,5313,5314],{"class":72},"end)\n",[51,5316,5317],{"class":53,"line":370},[51,5318,5319],{"class":72},"   {\n",[51,5321,5322],{"class":53,"line":387},[51,5323,5324],{"class":57},"    \u002F\u002F实现元素互换代码\n",[51,5326,5327,5329,5331,5333],{"class":53,"line":404},[51,5328,102],{"class":64},[51,5330,330],{"class":72},[51,5332,108],{"class":64},[51,5334,5335],{"class":72},"arr[start];\n",[51,5337,5338,5341,5343],{"class":53,"line":415},[51,5339,5340],{"class":72},"    arr[start]",[51,5342,108],{"class":64},[51,5344,5345],{"class":72},"arr[end];\n",[51,5347,5348,5351,5353],{"class":53,"line":420},[51,5349,5350],{"class":72},"    arr[end]",[51,5352,108],{"class":64},[51,5354,354],{"class":72},[51,5356,5357],{"class":53,"line":429},[51,5358,5359],{"class":57},"    \u002F\u002F下标更新\n",[51,5361,5362,5365,5367],{"class":53,"line":434},[51,5363,5364],{"class":72},"    start",[51,5366,3372],{"class":64},[51,5368,179],{"class":72},[51,5370,5371,5374,5377],{"class":53,"line":448},[51,5372,5373],{"class":72},"    end",[51,5375,5376],{"class":64},"--",[51,5378,179],{"class":72},[51,5380,5381],{"class":53,"line":462},[51,5382,5383],{"class":72},"   }\n",[51,5385,5386],{"class":53,"line":470},[51,5387,5388],{"class":57},"   \u002F\u002F输出逆置后的数组\n",[51,5390,5391,5394,5396,5398,5400,5402,5404,5406,5408,5410,5412,5414],{"class":53,"line":2783},[51,5392,5393],{"class":64},"   for",[51,5395,2750],{"class":72},[51,5397,65],{"class":64},[51,5399,4109],{"class":72},[51,5401,108],{"class":64},[51,5403,176],{"class":175},[51,5405,4116],{"class":72},[51,5407,2154],{"class":64},[51,5409,1568],{"class":175},[51,5411,4116],{"class":72},[51,5413,3372],{"class":64},[51,5415,90],{"class":72},[51,5417,5418],{"class":53,"line":2788},[51,5419,5319],{"class":72},[51,5421,5422,5424,5426,5429,5431,5434],{"class":53,"line":2817},[51,5423,215],{"class":72},[51,5425,218],{"class":64},[51,5427,5428],{"class":72},"arr[i]",[51,5430,218],{"class":64},[51,5432,5433],{"class":282},"\" \"",[51,5435,179],{"class":72},[51,5437,5438],{"class":53,"line":2822},[51,5439,5383],{"class":72},[51,5441,5442,5445,5447,5449],{"class":53,"line":2839},[51,5443,5444],{"class":68},"   system",[51,5446,73],{"class":72},[51,5448,3388],{"class":282},[51,5450,615],{"class":72},[51,5452,5453,5456,5458],{"class":53,"line":2844},[51,5454,5455],{"class":64},"   return",[51,5457,5169],{"class":175},[51,5459,179],{"class":72},[51,5461,5462],{"class":53,"line":2849},[51,5463,132],{"class":72},[1000,5465,5466],{},[22,5467,5468],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[29,5470,5472],{"className":45,"code":5471,"language":47,"meta":35,"style":35},"\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",[37,5473,5474,5479,5485,5495,5503,5507,5559,5572,5598,5602,5616,5620,5625,5630,5660,5664,5669,5703,5707,5712,5732,5737,5749,5765,5780,5785,5789,5793,5806,5832,5836,5850,5854,5862],{"__ignoreMap":35},[51,5475,5476],{"class":53,"line":54},[51,5477,5478],{"class":57},"\u002F\u002F冒泡排序,升序\n",[51,5480,5481,5483],{"class":53,"line":61},[51,5482,1026],{"class":64},[51,5484,1029],{"class":282},[51,5486,5487,5489,5491,5493],{"class":53,"line":93},[51,5488,1034],{"class":64},[51,5490,1037],{"class":64},[51,5492,1040],{"class":68},[51,5494,179],{"class":72},[51,5496,5497,5499,5501],{"class":53,"line":99},[51,5498,65],{"class":64},[51,5500,151],{"class":68},[51,5502,154],{"class":72},[51,5504,5505],{"class":53,"line":120},[51,5506,96],{"class":72},[51,5508,5509,5511,5513,5515,5518,5520,5523,5525,5527,5529,5531,5533,5535,5537,5539,5541,5543,5545,5547,5549,5551,5553,5555,5557],{"class":53,"line":129},[51,5510,102],{"class":64},[51,5512,5039],{"class":72},[51,5514,1668],{"class":175},[51,5516,5517],{"class":72},"] ",[51,5519,108],{"class":64},[51,5521,5522],{"class":72}," {",[51,5524,1543],{"class":175},[51,5526,82],{"class":72},[51,5528,1334],{"class":175},[51,5530,82],{"class":72},[51,5532,1643],{"class":175},[51,5534,82],{"class":72},[51,5536,176],{"class":175},[51,5538,82],{"class":72},[51,5540,1568],{"class":175},[51,5542,82],{"class":72},[51,5544,1618],{"class":175},[51,5546,82],{"class":72},[51,5548,791],{"class":175},[51,5550,82],{"class":72},[51,5552,1328],{"class":175},[51,5554,82],{"class":72},[51,5556,1668],{"class":175},[51,5558,5072],{"class":72},[51,5560,5561,5563,5565,5568,5570],{"class":53,"line":206},[51,5562,215],{"class":72},[51,5564,218],{"class":64},[51,5566,5567],{"class":282},"\"排序前：\"",[51,5569,218],{"class":64},[51,5571,288],{"class":72},[51,5573,5574,5576,5578,5580,5582,5584,5586,5588,5590,5592,5594,5596],{"class":53,"line":212},[51,5575,4278],{"class":64},[51,5577,2750],{"class":72},[51,5579,65],{"class":64},[51,5581,4109],{"class":72},[51,5583,108],{"class":64},[51,5585,176],{"class":175},[51,5587,4116],{"class":72},[51,5589,2154],{"class":64},[51,5591,1668],{"class":175},[51,5593,4116],{"class":72},[51,5595,3372],{"class":64},[51,5597,90],{"class":72},[51,5599,5600],{"class":53,"line":227},[51,5601,3110],{"class":72},[51,5603,5604,5606,5608,5610,5612,5614],{"class":53,"line":370},[51,5605,4528],{"class":72},[51,5607,218],{"class":64},[51,5609,5428],{"class":72},[51,5611,218],{"class":64},[51,5613,5433],{"class":282},[51,5615,179],{"class":72},[51,5617,5618],{"class":53,"line":387},[51,5619,3267],{"class":72},[51,5621,5622],{"class":53,"line":404},[51,5623,5624],{"class":57},"    \u002F\u002F开始冒泡排序\n",[51,5626,5627],{"class":53,"line":415},[51,5628,5629],{"class":57},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[51,5631,5632,5634,5636,5638,5640,5642,5644,5646,5648,5650,5652,5654,5656,5658],{"class":53,"line":420},[51,5633,4278],{"class":64},[51,5635,2750],{"class":72},[51,5637,65],{"class":64},[51,5639,4109],{"class":72},[51,5641,108],{"class":64},[51,5643,176],{"class":175},[51,5645,4116],{"class":72},[51,5647,2154],{"class":64},[51,5649,1668],{"class":175},[51,5651,1778],{"class":64},[51,5653,791],{"class":175},[51,5655,4116],{"class":72},[51,5657,3372],{"class":64},[51,5659,90],{"class":72},[51,5661,5662],{"class":53,"line":429},[51,5663,3110],{"class":72},[51,5665,5666],{"class":53,"line":434},[51,5667,5668],{"class":57},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[51,5670,5671,5673,5675,5677,5679,5681,5683,5685,5687,5689,5691,5693,5695,5697,5699,5701],{"class":53,"line":448},[51,5672,4480],{"class":64},[51,5674,2750],{"class":72},[51,5676,65],{"class":64},[51,5678,4487],{"class":72},[51,5680,108],{"class":64},[51,5682,176],{"class":175},[51,5684,4494],{"class":72},[51,5686,2154],{"class":64},[51,5688,1668],{"class":175},[51,5690,1778],{"class":64},[51,5692,1689],{"class":72},[51,5694,1778],{"class":64},[51,5696,791],{"class":175},[51,5698,4494],{"class":72},[51,5700,3372],{"class":64},[51,5702,90],{"class":72},[51,5704,5705],{"class":53,"line":462},[51,5706,3590],{"class":72},[51,5708,5709],{"class":53,"line":470},[51,5710,5711],{"class":57},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[51,5713,5714,5717,5720,5722,5725,5727,5729],{"class":53,"line":2783},[51,5715,5716],{"class":64},"            if",[51,5718,5719],{"class":72},"(arr[j]",[51,5721,972],{"class":64},[51,5723,5724],{"class":72},"arr[j",[51,5726,114],{"class":64},[51,5728,791],{"class":175},[51,5730,5731],{"class":72},"])\n",[51,5733,5734],{"class":53,"line":2788},[51,5735,5736],{"class":72},"            {\n",[51,5738,5739,5742,5744,5746],{"class":53,"line":2817},[51,5740,5741],{"class":64},"                int",[51,5743,330],{"class":72},[51,5745,108],{"class":64},[51,5747,5748],{"class":72},"arr[j];\n",[51,5750,5751,5754,5756,5758,5760,5762],{"class":53,"line":2822},[51,5752,5753],{"class":72},"                arr[j]",[51,5755,108],{"class":64},[51,5757,5724],{"class":72},[51,5759,114],{"class":64},[51,5761,791],{"class":175},[51,5763,5764],{"class":72},"];\n",[51,5766,5767,5770,5772,5774,5776,5778],{"class":53,"line":2839},[51,5768,5769],{"class":72},"                arr[j",[51,5771,114],{"class":64},[51,5773,791],{"class":175},[51,5775,2184],{"class":72},[51,5777,108],{"class":64},[51,5779,354],{"class":72},[51,5781,5782],{"class":53,"line":2844},[51,5783,5784],{"class":72},"            }\n",[51,5786,5787],{"class":53,"line":2849},[51,5788,3609],{"class":72},[51,5790,5791],{"class":53,"line":2854},[51,5792,3267],{"class":72},[51,5794,5795,5797,5799,5802,5804],{"class":53,"line":2868},[51,5796,215],{"class":72},[51,5798,218],{"class":64},[51,5800,5801],{"class":282},"\"排序后：\"",[51,5803,218],{"class":64},[51,5805,288],{"class":72},[51,5807,5808,5810,5812,5814,5816,5818,5820,5822,5824,5826,5828,5830],{"class":53,"line":2873},[51,5809,4278],{"class":64},[51,5811,2750],{"class":72},[51,5813,65],{"class":64},[51,5815,4109],{"class":72},[51,5817,108],{"class":64},[51,5819,176],{"class":175},[51,5821,4116],{"class":72},[51,5823,2154],{"class":64},[51,5825,1668],{"class":175},[51,5827,4116],{"class":72},[51,5829,3372],{"class":64},[51,5831,90],{"class":72},[51,5833,5834],{"class":53,"line":3657},[51,5835,3110],{"class":72},[51,5837,5838,5840,5842,5844,5846,5848],{"class":53,"line":3671},[51,5839,4528],{"class":72},[51,5841,218],{"class":64},[51,5843,5428],{"class":72},[51,5845,218],{"class":64},[51,5847,5433],{"class":282},[51,5849,179],{"class":72},[51,5851,5852],{"class":53,"line":3679},[51,5853,3267],{"class":72},[51,5855,5856,5858,5860],{"class":53,"line":3684},[51,5857,123],{"class":64},[51,5859,5169],{"class":175},[51,5861,179],{"class":72},[51,5863,5864],{"class":53,"line":3690},[51,5865,132],{"class":72},[1233,5867,5869],{"id":5868},"_172二维数组","1.7.2二维数组",[19,5871,5872],{},[22,5873,5874],{},"二维数组的四种定义方式",[1393,5876,5877,5886],{},[1396,5878,5879],{},[1399,5880,5881,5884],{},[1402,5882,5883],{},"序号",[1402,5885,4858],{},[1439,5887,5888,5898,5907,5916,5925],{},[1399,5889,5890,5892],{},[1444,5891,791],{},[1444,5893,5894,5895,409],{},"数据类型 数组名[行数]",[51,5896,5897],{},"列数",[1399,5899,5900,5902],{},[1444,5901,1334],{},[1444,5903,5894,5904,5906],{},[51,5905,5897],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1399,5908,5909,5911],{},[1444,5910,1328],{},[1444,5912,5894,5913,5915],{},[51,5914,5897],{},"={数据1,数据2,数据3...}",[1399,5917,5918,5920],{},[1444,5919,1543],{},[1444,5921,5922,5923,5915],{},"数据类型 数组名[]",[51,5924,5897],{},[1399,5926,5927,5930],{},[1444,5928,5929],{},"注意：不能只省略列数",[1444,5931],{},[19,5933,5934],{"start":61},[22,5935,5936],{},"二维数组数组名",[1000,5938,5939,5942],{},[22,5940,5941],{},"1.查看二维数组所占内存空间",[22,5943,5944],{},"2.获取二维数组首地址",[40,5946,5947],{},"已知二维数组，求二维数组的行数与列数",[29,5949,5951],{"className":45,"code":5950,"language":47,"meta":35,"style":35},"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",[37,5952,5953,5961,5965,5983,5987,6005,6021,6026,6051,6084],{"__ignoreMap":35},[51,5954,5955,5957,5959],{"class":53,"line":54},[51,5956,65],{"class":64},[51,5958,151],{"class":68},[51,5960,154],{"class":72},[51,5962,5963],{"class":53,"line":61},[51,5964,96],{"class":72},[51,5966,5967,5969,5971,5973,5976,5978,5980],{"class":53,"line":93},[51,5968,102],{"class":64},[51,5970,5039],{"class":72},[51,5972,1334],{"class":175},[51,5974,5975],{"class":72},"][",[51,5977,1328],{"class":175},[51,5979,2184],{"class":72},[51,5981,5982],{"class":64},"=\n",[51,5984,5985],{"class":53,"line":99},[51,5986,3110],{"class":72},[51,5988,5989,5992,5994,5996,5998,6000,6002],{"class":53,"line":120},[51,5990,5991],{"class":72},"        {",[51,5993,791],{"class":175},[51,5995,82],{"class":72},[51,5997,1334],{"class":175},[51,5999,82],{"class":72},[51,6001,1328],{"class":175},[51,6003,6004],{"class":72},"},\n",[51,6006,6007,6009,6011,6013,6015,6017,6019],{"class":53,"line":129},[51,6008,5991],{"class":72},[51,6010,1543],{"class":175},[51,6012,82],{"class":72},[51,6014,1568],{"class":175},[51,6016,82],{"class":72},[51,6018,1593],{"class":175},[51,6020,132],{"class":72},[51,6022,6023],{"class":53,"line":206},[51,6024,6025],{"class":72},"    };\n",[51,6027,6028,6030,6032,6035,6037,6039,6041,6043,6045,6047,6049],{"class":53,"line":212},[51,6029,215],{"class":72},[51,6031,218],{"class":64},[51,6033,6034],{"class":282},"\"二维数组的行数\"",[51,6036,2477],{"class":64},[51,6038,5282],{"class":72},[51,6040,5285],{"class":64},[51,6042,4928],{"class":72},[51,6044,176],{"class":175},[51,6046,5292],{"class":72},[51,6048,218],{"class":64},[51,6050,288],{"class":72},[51,6052,6053,6055,6057,6060,6062,6064,6066,6068,6070,6072,6074,6076,6078,6080,6082],{"class":53,"line":227},[51,6054,215],{"class":72},[51,6056,218],{"class":64},[51,6058,6059],{"class":282},"\"二维数组的列数\"",[51,6061,2477],{"class":64},[51,6063,4928],{"class":72},[51,6065,176],{"class":175},[51,6067,5292],{"class":72},[51,6069,5285],{"class":64},[51,6071,4928],{"class":72},[51,6073,176],{"class":175},[51,6075,5975],{"class":72},[51,6077,176],{"class":175},[51,6079,5292],{"class":72},[51,6081,218],{"class":64},[51,6083,288],{"class":72},[51,6085,6086],{"class":53,"line":370},[51,6087,132],{"class":72},[40,6089,6090],{},"查看二维数组首地址",[29,6092,6094],{"className":45,"code":6093,"language":47,"meta":35,"style":35},"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",[37,6095,6096,6113,6139,6164],{"__ignoreMap":35},[51,6097,6098,6100,6102,6105,6107,6109,6111],{"class":53,"line":54},[51,6099,2474],{"class":72},[51,6101,218],{"class":64},[51,6103,6104],{"class":282},"\"二维数组首地址：\"",[51,6106,218],{"class":64},[51,6108,4957],{"class":72},[51,6110,218],{"class":64},[51,6112,288],{"class":72},[51,6114,6115,6117,6119,6122,6124,6126,6128,6131,6133,6135,6137],{"class":53,"line":61},[51,6116,2474],{"class":72},[51,6118,218],{"class":64},[51,6120,6121],{"class":282},"\"二维数组第一行的首地址：\"",[51,6123,218],{"class":64},[51,6125,73],{"class":72},[51,6127,65],{"class":64},[51,6129,6130],{"class":72},")arr[",[51,6132,176],{"class":175},[51,6134,2184],{"class":72},[51,6136,218],{"class":64},[51,6138,288],{"class":72},[51,6140,6141,6143,6145,6148,6150,6152,6154,6156,6158,6160,6162],{"class":53,"line":93},[51,6142,2474],{"class":72},[51,6144,218],{"class":64},[51,6146,6147],{"class":282},"\"二维数组第二行的首地址：\"",[51,6149,218],{"class":64},[51,6151,73],{"class":72},[51,6153,65],{"class":64},[51,6155,6130],{"class":72},[51,6157,791],{"class":175},[51,6159,2184],{"class":72},[51,6161,218],{"class":64},[51,6163,288],{"class":72},[51,6165,6166,6168,6170,6173,6175,6177,6179,6181,6183,6185,6187,6189,6191,6193,6195,6197],{"class":53,"line":99},[51,6167,2474],{"class":72},[51,6169,218],{"class":64},[51,6171,6172],{"class":282},"\"二维数组第一个元素的首地址:\"",[51,6174,218],{"class":64},[51,6176,73],{"class":72},[51,6178,65],{"class":64},[51,6180,1677],{"class":72},[51,6182,1602],{"class":64},[51,6184,4983],{"class":72},[51,6186,176],{"class":175},[51,6188,5975],{"class":72},[51,6190,176],{"class":175},[51,6192,2184],{"class":72},[51,6194,218],{"class":64},[51,6196,709],{"class":72},[51,6198,6199],{"class":57},"\u002F\u002F对于数，要加取址符\n",[1179,6201,6202],{},"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":35,"searchDepth":61,"depth":61,"links":6204},[6205,6206,6207,6215,6216,6222,6227],{"id":1208,"depth":61,"text":1209},{"id":1215,"depth":61,"text":1216},{"id":1230,"depth":61,"text":1231,"children":6208},[6209,6210,6211,6212,6213,6214],{"id":1235,"depth":93,"text":1236},{"id":1277,"depth":93,"text":1278},{"id":1342,"depth":93,"text":1343},{"id":2266,"depth":93,"text":2267},{"id":2353,"depth":93,"text":2354},{"id":2448,"depth":93,"text":2449},{"id":2490,"depth":61,"text":2491},{"id":2555,"depth":61,"text":2556,"children":6217},[6218,6219,6220,6221],{"id":2559,"depth":93,"text":2560},{"id":2581,"depth":93,"text":2582},{"id":2590,"depth":93,"text":2591},{"id":2599,"depth":93,"text":2600},{"id":2608,"depth":61,"text":2609,"children":6223},[6224,6225,6226],{"id":2612,"depth":93,"text":2613},{"id":3285,"depth":93,"text":3286},{"id":4698,"depth":93,"text":4699},{"id":4839,"depth":61,"text":4840,"children":6228},[6229,6230],{"id":4843,"depth":93,"text":4844},{"id":5868,"depth":93,"text":5869},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1200,"description":35},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":4,"title":5,"body":6237,"description":35,"extension":1190,"meta":7230,"navigation":1192,"path":1193,"seo":7231,"stem":1195,"__hash__":1196},{"type":7,"value":6238,"toc":7222},[6239,6241,6243,6249,6254,6256,6312,6314,6316,6386,6388,6390,6392,6394,6594,6596,6600,6658,6662,6726,6730,6816,6818,6916,6918,6920,6924,7058,7060,7062,7072,7074,7118,7120,7220],[10,6240,5],{"id":12},[14,6242,17],{"id":16},[19,6244,6245,6247],{},[22,6246,24],{},[22,6248,27],{},[29,6250,6252],{"className":6251,"code":33,"language":34,"meta":35},[32],[37,6253,33],{"__ignoreMap":35},[40,6255,42],{},[29,6257,6258],{"className":45,"code":46,"language":47,"meta":35,"style":35},[37,6259,6260,6264,6284,6288,6302,6308],{"__ignoreMap":35},[51,6261,6262],{"class":53,"line":54},[51,6263,58],{"class":57},[51,6265,6266,6268,6270,6272,6274,6276,6278,6280,6282],{"class":53,"line":61},[51,6267,65],{"class":64},[51,6269,69],{"class":68},[51,6271,73],{"class":72},[51,6273,65],{"class":64},[51,6275,79],{"class":78},[51,6277,82],{"class":72},[51,6279,65],{"class":64},[51,6281,87],{"class":78},[51,6283,90],{"class":72},[51,6285,6286],{"class":53,"line":93},[51,6287,96],{"class":72},[51,6289,6290,6292,6294,6296,6298,6300],{"class":53,"line":99},[51,6291,102],{"class":64},[51,6293,105],{"class":72},[51,6295,108],{"class":64},[51,6297,111],{"class":72},[51,6299,114],{"class":64},[51,6301,117],{"class":72},[51,6303,6304,6306],{"class":53,"line":120},[51,6305,123],{"class":64},[51,6307,126],{"class":72},[51,6309,6310],{"class":53,"line":129},[51,6311,132],{"class":72},[14,6313,136],{"id":135},[40,6315,139],{},[29,6317,6318],{"className":45,"code":142,"language":47,"meta":35,"style":35},[37,6319,6320,6328,6332,6336,6348,6360,6368,6372,6382],{"__ignoreMap":35},[51,6321,6322,6324,6326],{"class":53,"line":54},[51,6323,65],{"class":64},[51,6325,151],{"class":68},[51,6327,154],{"class":72},[51,6329,6330],{"class":53,"line":61},[51,6331,96],{"class":72},[51,6333,6334],{"class":53,"line":93},[51,6335,163],{"class":57},[51,6337,6338,6340,6342,6344,6346],{"class":53,"line":99},[51,6339,102],{"class":64},[51,6341,170],{"class":72},[51,6343,108],{"class":64},[51,6345,176],{"class":175},[51,6347,179],{"class":72},[51,6349,6350,6352,6354,6356,6358],{"class":53,"line":120},[51,6351,102],{"class":64},[51,6353,186],{"class":72},[51,6355,108],{"class":64},[51,6357,176],{"class":175},[51,6359,179],{"class":72},[51,6361,6362,6364,6366],{"class":53,"line":129},[51,6363,197],{"class":72},[51,6365,200],{"class":64},[51,6367,203],{"class":72},[51,6369,6370],{"class":53,"line":206},[51,6371,209],{"class":57},[51,6373,6374,6376,6378,6380],{"class":53,"line":212},[51,6375,215],{"class":72},[51,6377,218],{"class":64},[51,6379,221],{"class":68},[51,6381,224],{"class":72},[51,6383,6384],{"class":53,"line":227},[51,6385,132],{"class":72},[14,6387,233],{"id":232},[40,6389,236],{},[40,6391,239],{},[40,6393,242],{},[29,6395,6396],{"className":45,"code":245,"language":47,"meta":35,"style":35},[37,6397,6398,6418,6422,6434,6450,6466,6476,6484,6492,6504,6520,6536,6544,6548,6556,6560,6572,6584,6590],{"__ignoreMap":35},[51,6399,6400,6402,6404,6406,6408,6410,6412,6414,6416],{"class":53,"line":54},[51,6401,252],{"class":64},[51,6403,255],{"class":68},[51,6405,73],{"class":72},[51,6407,65],{"class":64},[51,6409,79],{"class":78},[51,6411,82],{"class":72},[51,6413,65],{"class":64},[51,6415,87],{"class":78},[51,6417,90],{"class":72},[51,6419,6420],{"class":53,"line":61},[51,6421,96],{"class":72},[51,6423,6424,6426,6428,6430,6432],{"class":53,"line":93},[51,6425,215],{"class":72},[51,6427,218],{"class":64},[51,6429,283],{"class":282},[51,6431,218],{"class":64},[51,6433,288],{"class":72},[51,6435,6436,6438,6440,6442,6444,6446,6448],{"class":53,"line":99},[51,6437,215],{"class":72},[51,6439,218],{"class":64},[51,6441,297],{"class":282},[51,6443,218],{"class":64},[51,6445,111],{"class":72},[51,6447,218],{"class":64},[51,6449,288],{"class":72},[51,6451,6452,6454,6456,6458,6460,6462,6464],{"class":53,"line":120},[51,6453,215],{"class":72},[51,6455,218],{"class":64},[51,6457,314],{"class":282},[51,6459,218],{"class":64},[51,6461,319],{"class":72},[51,6463,218],{"class":64},[51,6465,288],{"class":72},[51,6467,6468,6470,6472,6474],{"class":53,"line":129},[51,6469,102],{"class":64},[51,6471,330],{"class":72},[51,6473,108],{"class":64},[51,6475,335],{"class":72},[51,6477,6478,6480,6482],{"class":53,"line":206},[51,6479,340],{"class":72},[51,6481,108],{"class":64},[51,6483,117],{"class":72},[51,6485,6486,6488,6490],{"class":53,"line":212},[51,6487,349],{"class":72},[51,6489,108],{"class":64},[51,6491,354],{"class":72},[51,6493,6494,6496,6498,6500,6502],{"class":53,"line":227},[51,6495,215],{"class":72},[51,6497,218],{"class":64},[51,6499,363],{"class":282},[51,6501,218],{"class":64},[51,6503,288],{"class":72},[51,6505,6506,6508,6510,6512,6514,6516,6518],{"class":53,"line":370},[51,6507,215],{"class":72},[51,6509,218],{"class":64},[51,6511,297],{"class":282},[51,6513,218],{"class":64},[51,6515,111],{"class":72},[51,6517,218],{"class":64},[51,6519,288],{"class":72},[51,6521,6522,6524,6526,6528,6530,6532,6534],{"class":53,"line":387},[51,6523,215],{"class":72},[51,6525,218],{"class":64},[51,6527,314],{"class":282},[51,6529,218],{"class":64},[51,6531,319],{"class":72},[51,6533,218],{"class":64},[51,6535,288],{"class":72},[51,6537,6538,6540,6542],{"class":53,"line":404},[51,6539,123],{"class":64},[51,6541,409],{"class":72},[51,6543,412],{"class":57},[51,6545,6546],{"class":53,"line":415},[51,6547,132],{"class":72},[51,6549,6550,6552,6554],{"class":53,"line":420},[51,6551,65],{"class":64},[51,6553,151],{"class":68},[51,6555,154],{"class":72},[51,6557,6558],{"class":53,"line":429},[51,6559,96],{"class":72},[51,6561,6562,6564,6566,6568,6570],{"class":53,"line":434},[51,6563,102],{"class":64},[51,6565,170],{"class":72},[51,6567,108],{"class":64},[51,6569,443],{"class":175},[51,6571,179],{"class":72},[51,6573,6574,6576,6578,6580,6582],{"class":53,"line":448},[51,6575,102],{"class":64},[51,6577,186],{"class":72},[51,6579,108],{"class":64},[51,6581,457],{"class":175},[51,6583,179],{"class":72},[51,6585,6586,6588],{"class":53,"line":462},[51,6587,465],{"class":68},[51,6589,224],{"class":72},[51,6591,6592],{"class":53,"line":470},[51,6593,132],{"class":72},[14,6595,476],{"id":475},[19,6597,6598],{},[22,6599,481],{},[29,6601,6602],{"className":45,"code":484,"language":47,"meta":35,"style":35},[37,6603,6604,6612,6616,6628,6632,6640,6644,6648,6654],{"__ignoreMap":35},[51,6605,6606,6608,6610],{"class":53,"line":54},[51,6607,252],{"class":64},[51,6609,493],{"class":68},[51,6611,154],{"class":72},[51,6613,6614],{"class":53,"line":61},[51,6615,96],{"class":72},[51,6617,6618,6620,6622,6624,6626],{"class":53,"line":93},[51,6619,215],{"class":72},[51,6621,218],{"class":64},[51,6623,508],{"class":282},[51,6625,218],{"class":64},[51,6627,288],{"class":72},[51,6629,6630],{"class":53,"line":99},[51,6631,132],{"class":72},[51,6633,6634,6636,6638],{"class":53,"line":120},[51,6635,65],{"class":64},[51,6637,151],{"class":68},[51,6639,154],{"class":72},[51,6641,6642],{"class":53,"line":129},[51,6643,96],{"class":72},[51,6645,6646],{"class":53,"line":206},[51,6647,533],{"class":57},[51,6649,6650,6652],{"class":53,"line":212},[51,6651,538],{"class":68},[51,6653,541],{"class":72},[51,6655,6656],{"class":53,"line":227},[51,6657,132],{"class":72},[19,6659,6660],{"start":61},[22,6661,550],{},[29,6663,6664],{"className":45,"code":553,"language":47,"meta":35,"style":35},[37,6665,6666,6680,6684,6696,6700,6708,6712,6722],{"__ignoreMap":35},[51,6667,6668,6670,6672,6674,6676,6678],{"class":53,"line":54},[51,6669,252],{"class":64},[51,6671,562],{"class":68},[51,6673,73],{"class":72},[51,6675,65],{"class":64},[51,6677,170],{"class":78},[51,6679,90],{"class":72},[51,6681,6682],{"class":53,"line":61},[51,6683,96],{"class":72},[51,6685,6686,6688,6690,6692,6694],{"class":53,"line":93},[51,6687,215],{"class":72},[51,6689,218],{"class":64},[51,6691,508],{"class":282},[51,6693,218],{"class":64},[51,6695,288],{"class":72},[51,6697,6698],{"class":53,"line":99},[51,6699,132],{"class":72},[51,6701,6702,6704,6706],{"class":53,"line":120},[51,6703,65],{"class":64},[51,6705,151],{"class":68},[51,6707,154],{"class":72},[51,6709,6710],{"class":53,"line":129},[51,6711,96],{"class":72},[51,6713,6714,6716,6718,6720],{"class":53,"line":206},[51,6715,607],{"class":68},[51,6717,73],{"class":72},[51,6719,612],{"class":175},[51,6721,615],{"class":72},[51,6723,6724],{"class":53,"line":212},[51,6725,132],{"class":72},[19,6727,6728],{"start":93},[22,6729,624],{},[29,6731,6732],{"className":45,"code":627,"language":47,"meta":35,"style":35},[37,6733,6734,6742,6746,6758,6766,6770,6778,6782,6794,6812],{"__ignoreMap":35},[51,6735,6736,6738,6740],{"class":53,"line":54},[51,6737,65],{"class":64},[51,6739,636],{"class":68},[51,6741,154],{"class":72},[51,6743,6744],{"class":53,"line":61},[51,6745,96],{"class":72},[51,6747,6748,6750,6752,6754,6756],{"class":53,"line":93},[51,6749,215],{"class":72},[51,6751,218],{"class":64},[51,6753,508],{"class":282},[51,6755,218],{"class":64},[51,6757,288],{"class":72},[51,6759,6760,6762,6764],{"class":53,"line":99},[51,6761,123],{"class":64},[51,6763,661],{"class":175},[51,6765,179],{"class":72},[51,6767,6768],{"class":53,"line":120},[51,6769,132],{"class":72},[51,6771,6772,6774,6776],{"class":53,"line":129},[51,6773,65],{"class":64},[51,6775,151],{"class":68},[51,6777,154],{"class":72},[51,6779,6780],{"class":53,"line":206},[51,6781,96],{"class":72},[51,6783,6784,6786,6788,6790,6792],{"class":53,"line":212},[51,6785,102],{"class":64},[51,6787,79],{"class":72},[51,6789,108],{"class":64},[51,6791,690],{"class":68},[51,6793,541],{"class":72},[51,6795,6796,6798,6800,6802,6804,6806,6808,6810],{"class":53,"line":227},[51,6797,215],{"class":72},[51,6799,218],{"class":64},[51,6801,297],{"class":282},[51,6803,218],{"class":64},[51,6805,111],{"class":72},[51,6807,218],{"class":64},[51,6809,709],{"class":72},[51,6811,712],{"class":57},[51,6813,6814],{"class":53,"line":370},[51,6815,132],{"class":72},[40,6817,719],{},[29,6819,6820],{"className":45,"code":722,"language":47,"meta":35,"style":35},[37,6821,6822,6836,6840,6852,6858,6862,6870,6874,6886,6898,6912],{"__ignoreMap":35},[51,6823,6824,6826,6828,6830,6832,6834],{"class":53,"line":54},[51,6825,65],{"class":64},[51,6827,731],{"class":68},[51,6829,73],{"class":72},[51,6831,65],{"class":64},[51,6833,170],{"class":78},[51,6835,90],{"class":72},[51,6837,6838],{"class":53,"line":61},[51,6839,96],{"class":72},[51,6841,6842,6844,6846,6848,6850],{"class":53,"line":93},[51,6843,215],{"class":72},[51,6845,218],{"class":64},[51,6847,752],{"class":282},[51,6849,218],{"class":64},[51,6851,288],{"class":72},[51,6853,6854,6856],{"class":53,"line":99},[51,6855,123],{"class":64},[51,6857,763],{"class":72},[51,6859,6860],{"class":53,"line":120},[51,6861,132],{"class":72},[51,6863,6864,6866,6868],{"class":53,"line":129},[51,6865,65],{"class":64},[51,6867,774],{"class":68},[51,6869,154],{"class":72},[51,6871,6872],{"class":53,"line":206},[51,6873,96],{"class":72},[51,6875,6876,6878,6880,6882,6884],{"class":53,"line":212},[51,6877,102],{"class":64},[51,6879,186],{"class":72},[51,6881,108],{"class":64},[51,6883,791],{"class":175},[51,6885,179],{"class":72},[51,6887,6888,6890,6892,6894,6896],{"class":53,"line":227},[51,6889,102],{"class":64},[51,6891,800],{"class":72},[51,6893,108],{"class":64},[51,6895,805],{"class":68},[51,6897,808],{"class":72},[51,6899,6900,6902,6904,6906,6908,6910],{"class":53,"line":370},[51,6901,215],{"class":72},[51,6903,218],{"class":64},[51,6905,817],{"class":72},[51,6907,218],{"class":64},[51,6909,709],{"class":72},[51,6911,824],{"class":57},[51,6913,6914],{"class":53,"line":387},[51,6915,132],{"class":72},[14,6917,832],{"id":831},[40,6919,835],{},[40,6921,838,6922],{},[840,6923,842],{},[29,6925,6926],{"className":45,"code":845,"language":47,"meta":35,"style":35},[37,6927,6928,6932,6936,6958,6966,6970,6982,6994,7008,7012,7032,7036,7054],{"__ignoreMap":35},[51,6929,6930],{"class":53,"line":54},[51,6931,852],{"class":57},[51,6933,6934],{"class":53,"line":61},[51,6935,857],{"class":57},[51,6937,6938,6940,6942,6944,6946,6948,6950,6952,6954,6956],{"class":53,"line":93},[51,6939,65],{"class":64},[51,6941,864],{"class":68},[51,6943,73],{"class":72},[51,6945,65],{"class":64},[51,6947,170],{"class":78},[51,6949,82],{"class":72},[51,6951,65],{"class":64},[51,6953,186],{"class":78},[51,6955,879],{"class":72},[51,6957,882],{"class":57},[51,6959,6960,6962,6964],{"class":53,"line":99},[51,6961,65],{"class":64},[51,6963,151],{"class":68},[51,6965,891],{"class":72},[51,6967,6968],{"class":53,"line":120},[51,6969,96],{"class":72},[51,6971,6972,6974,6976,6978,6980],{"class":53,"line":129},[51,6973,102],{"class":64},[51,6975,170],{"class":72},[51,6977,108],{"class":64},[51,6979,443],{"class":175},[51,6981,179],{"class":72},[51,6983,6984,6986,6988,6990,6992],{"class":53,"line":206},[51,6985,102],{"class":64},[51,6987,186],{"class":72},[51,6989,108],{"class":64},[51,6991,457],{"class":175},[51,6993,179],{"class":72},[51,6995,6996,6998,7000,7002,7004,7006],{"class":53,"line":212},[51,6997,215],{"class":72},[51,6999,218],{"class":64},[51,7001,928],{"class":68},[51,7003,931],{"class":72},[51,7005,218],{"class":64},[51,7007,288],{"class":72},[51,7009,7010],{"class":53,"line":227},[51,7011,132],{"class":72},[51,7013,7014,7016,7018,7020,7022,7024,7026,7028,7030],{"class":53,"line":370},[51,7015,65],{"class":64},[51,7017,864],{"class":68},[51,7019,73],{"class":72},[51,7021,65],{"class":64},[51,7023,170],{"class":78},[51,7025,82],{"class":72},[51,7027,65],{"class":64},[51,7029,186],{"class":78},[51,7031,90],{"class":72},[51,7033,7034],{"class":53,"line":387},[51,7035,96],{"class":72},[51,7037,7038,7040,7042,7044,7046,7048,7050,7052],{"class":53,"line":404},[51,7039,123],{"class":64},[51,7041,170],{"class":72},[51,7043,972],{"class":64},[51,7045,975],{"class":72},[51,7047,978],{"class":64},[51,7049,981],{"class":72},[51,7051,984],{"class":64},[51,7053,987],{"class":72},[51,7055,7056],{"class":53,"line":415},[51,7057,132],{"class":72},[14,7059,995],{"id":994},[40,7061,998],{},[1000,7063,7064,7066,7068,7070],{},[22,7065,1004],{},[22,7067,1007],{},[22,7069,1010],{},[22,7071,1013],{},[40,7073,1016],{},[29,7075,7076],{"className":45,"code":1019,"language":47,"meta":35,"style":35},[37,7077,7078,7084,7094,7098],{"__ignoreMap":35},[51,7079,7080,7082],{"class":53,"line":54},[51,7081,1026],{"class":64},[51,7083,1029],{"class":282},[51,7085,7086,7088,7090,7092],{"class":53,"line":61},[51,7087,1034],{"class":64},[51,7089,1037],{"class":64},[51,7091,1040],{"class":68},[51,7093,179],{"class":72},[51,7095,7096],{"class":53,"line":93},[51,7097,852],{"class":57},[51,7099,7100,7102,7104,7106,7108,7110,7112,7114,7116],{"class":53,"line":99},[51,7101,252],{"class":64},[51,7103,255],{"class":68},[51,7105,73],{"class":72},[51,7107,65],{"class":64},[51,7109,170],{"class":78},[51,7111,82],{"class":72},[51,7113,65],{"class":64},[51,7115,186],{"class":78},[51,7117,615],{"class":72},[40,7119,1069],{},[29,7121,7122],{"className":45,"code":1072,"language":47,"meta":35,"style":35},[37,7123,7124,7130,7134,7154,7158,7168,7176,7184,7200,7216],{"__ignoreMap":35},[51,7125,7126,7128],{"class":53,"line":54},[51,7127,1026],{"class":64},[51,7129,1081],{"class":282},[51,7131,7132],{"class":53,"line":61},[51,7133,1086],{"class":57},[51,7135,7136,7138,7140,7142,7144,7146,7148,7150,7152],{"class":53,"line":93},[51,7137,252],{"class":64},[51,7139,255],{"class":68},[51,7141,73],{"class":72},[51,7143,65],{"class":64},[51,7145,170],{"class":78},[51,7147,82],{"class":72},[51,7149,65],{"class":64},[51,7151,186],{"class":78},[51,7153,90],{"class":72},[51,7155,7156],{"class":53,"line":99},[51,7157,96],{"class":72},[51,7159,7160,7162,7164,7166],{"class":53,"line":120},[51,7161,102],{"class":64},[51,7163,330],{"class":72},[51,7165,108],{"class":64},[51,7167,1121],{"class":72},[51,7169,7170,7172,7174],{"class":53,"line":129},[51,7171,1126],{"class":72},[51,7173,108],{"class":64},[51,7175,987],{"class":72},[51,7177,7178,7180,7182],{"class":53,"line":206},[51,7179,1135],{"class":72},[51,7181,108],{"class":64},[51,7183,354],{"class":72},[51,7185,7186,7188,7190,7192,7194,7196,7198],{"class":53,"line":212},[51,7187,215],{"class":72},[51,7189,218],{"class":64},[51,7191,1148],{"class":282},[51,7193,218],{"class":64},[51,7195,981],{"class":72},[51,7197,218],{"class":64},[51,7199,288],{"class":72},[51,7201,7202,7204,7206,7208,7210,7212,7214],{"class":53,"line":227},[51,7203,215],{"class":72},[51,7205,218],{"class":64},[51,7207,1165],{"class":282},[51,7209,218],{"class":64},[51,7211,975],{"class":72},[51,7213,218],{"class":64},[51,7215,288],{"class":72},[51,7217,7218],{"class":53,"line":370},[51,7219,132],{"class":72},[1179,7221,1181],{},{"title":35,"searchDepth":61,"depth":61,"links":7223},[7224,7225,7226,7227,7228,7229],{"id":16,"depth":61,"text":17},{"id":135,"depth":61,"text":136},{"id":232,"depth":61,"text":233},{"id":475,"depth":61,"text":476},{"id":831,"depth":61,"text":832},{"id":994,"depth":61,"text":995},{},{"title":5,"description":35},{"id":7233,"title":7234,"body":7235,"description":7242,"extension":1190,"meta":8647,"navigation":1192,"path":8648,"seo":8649,"stem":8650,"__hash__":8651},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7236,"toc":8637},[7237,7240,7243,7247,7409,7413,7416,7419,7422,7425,7565,7569,7572,7575,7578,7643,7647,7652,7719,7722,7726,7729,7740,7745,7765,7768,7773,7792,7795,7799,7818,7821,7825,8060,8064,8067,8070,8073,8235,8238,8242,8245,8251,8634],[10,7238,7234],{"id":7239},"_3指针",[40,7241,7242],{},"通过指针保存一个地址，指针就是个地址",[14,7244,7246],{"id":7245},"_31定义指针","3.1定义指针",[29,7248,7250],{"className":45,"code":7249,"language":47,"meta":35,"style":35},"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",[37,7251,7252,7260,7264,7269,7281,7286,7294,7304,7322,7342,7346,7351,7356,7361,7375,7391,7405],{"__ignoreMap":35},[51,7253,7254,7256,7258],{"class":53,"line":54},[51,7255,65],{"class":64},[51,7257,151],{"class":68},[51,7259,154],{"class":72},[51,7261,7262],{"class":53,"line":61},[51,7263,96],{"class":72},[51,7265,7266],{"class":53,"line":93},[51,7267,7268],{"class":57},"    \u002F\u002F1.定义指针\n",[51,7270,7271,7273,7275,7277,7279],{"class":53,"line":99},[51,7272,102],{"class":64},[51,7274,170],{"class":72},[51,7276,108],{"class":64},[51,7278,443],{"class":175},[51,7280,179],{"class":72},[51,7282,7283],{"class":53,"line":120},[51,7284,7285],{"class":57},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[51,7287,7288,7291],{"class":53,"line":129},[51,7289,7290],{"class":64},"    int*",[51,7292,7293],{"class":72},"p;\n",[51,7295,7296,7299,7302],{"class":53,"line":206},[51,7297,7298],{"class":72},"    p",[51,7300,7301],{"class":64},"=&",[51,7303,1121],{"class":72},[51,7305,7306,7308,7310,7313,7316,7318,7320],{"class":53,"line":212},[51,7307,215],{"class":72},[51,7309,218],{"class":64},[51,7311,7312],{"class":282},"\"a的地址为：\"",[51,7314,7315],{"class":64},"\u003C\u003C&",[51,7317,981],{"class":72},[51,7319,218],{"class":64},[51,7321,288],{"class":72},[51,7323,7324,7326,7328,7331,7333,7335,7337,7339],{"class":53,"line":227},[51,7325,215],{"class":72},[51,7327,218],{"class":64},[51,7329,7330],{"class":282},"\"指针p为：\"",[51,7332,218],{"class":64},[51,7334,40],{"class":72},[51,7336,218],{"class":64},[51,7338,709],{"class":72},[51,7340,7341],{"class":57},"\u002F\u002F指针p表示的就是a的地址\n",[51,7343,7344],{"class":53,"line":370},[51,7345,3480],{"emptyLinePlaceholder":1192},[51,7347,7348],{"class":53,"line":387},[51,7349,7350],{"class":57},"    \u002F\u002F2.使用指针\n",[51,7352,7353],{"class":53,"line":404},[51,7354,7355],{"class":57},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[51,7357,7358],{"class":53,"line":415},[51,7359,7360],{"class":57},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[51,7362,7363,7366,7368,7370,7373],{"class":53,"line":420},[51,7364,7365],{"class":64},"    *",[51,7367,40],{"class":72},[51,7369,108],{"class":64},[51,7371,7372],{"class":175},"1000",[51,7374,179],{"class":72},[51,7376,7377,7379,7382,7384,7386,7388],{"class":53,"line":429},[51,7378,215],{"class":72},[51,7380,7381],{"class":64},"\u003C\u003C*",[51,7383,40],{"class":72},[51,7385,218],{"class":64},[51,7387,709],{"class":72},[51,7389,7390],{"class":57},"\u002F\u002F1000\n",[51,7392,7393,7395,7397,7399,7401,7403],{"class":53,"line":434},[51,7394,215],{"class":72},[51,7396,218],{"class":64},[51,7398,981],{"class":72},[51,7400,218],{"class":64},[51,7402,709],{"class":72},[51,7404,7390],{"class":57},[51,7406,7407],{"class":53,"line":448},[51,7408,132],{"class":72},[14,7410,7412],{"id":7411},"_32指针所占的内存空间","3.2指针所占的内存空间",[40,7414,7415],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[40,7417,7418],{},"在32位操作系统下：占用4个字节空间",[40,7420,7421],{},"在64位操作系统下：占用8个字节空间",[40,7423,7424],{},"上方是不管啥数据类型的",[29,7426,7428],{"className":45,"code":7427,"language":47,"meta":35,"style":35},"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",[37,7429,7430,7438,7442,7447,7459,7464,7469,7474,7487,7509,7535,7561],{"__ignoreMap":35},[51,7431,7432,7434,7436],{"class":53,"line":54},[51,7433,65],{"class":64},[51,7435,151],{"class":68},[51,7437,154],{"class":72},[51,7439,7440],{"class":53,"line":61},[51,7441,96],{"class":72},[51,7443,7444],{"class":53,"line":93},[51,7445,7446],{"class":57},"    \u002F\u002F指针所占内存空间\n",[51,7448,7449,7451,7453,7455,7457],{"class":53,"line":99},[51,7450,102],{"class":64},[51,7452,170],{"class":72},[51,7454,108],{"class":64},[51,7456,443],{"class":175},[51,7458,179],{"class":72},[51,7460,7461],{"class":53,"line":120},[51,7462,7463],{"class":57},"    \u002F\u002Fint *p;\n",[51,7465,7466],{"class":53,"line":129},[51,7467,7468],{"class":57},"    \u002F\u002Fp=&a;\n",[51,7470,7471],{"class":53,"line":206},[51,7472,7473],{"class":57},"    \u002F\u002F上述可以写为以下：\n",[51,7475,7476,7478,7481,7483,7485],{"class":53,"line":212},[51,7477,102],{"class":64},[51,7479,7480],{"class":64}," *",[51,7482,40],{"class":72},[51,7484,7301],{"class":64},[51,7486,1121],{"class":72},[51,7488,7489,7492,7494,7497,7499,7502,7504,7506],{"class":53,"line":227},[51,7490,7491],{"class":72},"    cout ",[51,7493,218],{"class":64},[51,7495,7496],{"class":282},"\"sizeof(int *)\"",[51,7498,2477],{"class":64},[51,7500,7501],{"class":72},"(p)",[51,7503,218],{"class":64},[51,7505,709],{"class":72},[51,7507,7508],{"class":57},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[51,7510,7511,7513,7515,7517,7519,7521,7523,7525,7527,7529,7532],{"class":53,"line":370},[51,7512,7491],{"class":72},[51,7514,218],{"class":64},[51,7516,7496],{"class":282},[51,7518,2477],{"class":64},[51,7520,73],{"class":72},[51,7522,65],{"class":64},[51,7524,7480],{"class":64},[51,7526,1677],{"class":72},[51,7528,218],{"class":64},[51,7530,7531],{"class":72},"endl",[51,7533,7534],{"class":57},"  \u002F\u002F4字节(32位的话)\n",[51,7536,7537,7539,7541,7544,7546,7548,7550,7552,7554,7556,7558],{"class":53,"line":387},[51,7538,7491],{"class":72},[51,7540,218],{"class":64},[51,7542,7543],{"class":282},"\"sizeof(char *)\"",[51,7545,2477],{"class":64},[51,7547,73],{"class":72},[51,7549,1353],{"class":64},[51,7551,7480],{"class":64},[51,7553,1677],{"class":72},[51,7555,218],{"class":64},[51,7557,709],{"class":72},[51,7559,7560],{"class":57}," \u002F\u002F4字节(32位的话)\n",[51,7562,7563],{"class":53,"line":404},[51,7564,132],{"class":72},[14,7566,7568],{"id":7567},"_33空指针","3.3空指针",[40,7570,7571],{},"空指针：指针变量指向内存中编号为0的空间",[40,7573,7574],{},"用途：初始化指针变量",[40,7576,7577],{},"注意：空指针指向的内存是不可以访问的",[29,7579,7581],{"className":45,"code":7580,"language":47,"meta":35,"style":35},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[37,7582,7583,7591,7595,7600,7614,7619,7634,7639],{"__ignoreMap":35},[51,7584,7585,7587,7589],{"class":53,"line":54},[51,7586,65],{"class":64},[51,7588,151],{"class":68},[51,7590,154],{"class":72},[51,7592,7593],{"class":53,"line":61},[51,7594,96],{"class":72},[51,7596,7597],{"class":53,"line":93},[51,7598,7599],{"class":57},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[51,7601,7602,7604,7606,7608,7610,7612],{"class":53,"line":99},[51,7603,102],{"class":64},[51,7605,7480],{"class":64},[51,7607,40],{"class":72},[51,7609,108],{"class":64},[51,7611,3472],{"class":175},[51,7613,179],{"class":72},[51,7615,7616],{"class":53,"line":120},[51,7617,7618],{"class":57},"    \u002F\u002F2.空指针不能进行访问\n",[51,7620,7621,7623,7625,7627,7629,7631],{"class":53,"line":129},[51,7622,7365],{"class":64},[51,7624,40],{"class":72},[51,7626,108],{"class":64},[51,7628,612],{"class":175},[51,7630,409],{"class":72},[51,7632,7633],{"class":57},"\u002F\u002F直接报错，压根不能访问\n",[51,7635,7636],{"class":53,"line":206},[51,7637,7638],{"class":57},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[51,7640,7641],{"class":53,"line":212},[51,7642,132],{"class":72},[14,7644,7646],{"id":7645},"_34野指针","3.4野指针",[40,7648,7649],{},[840,7650,7651],{},"指针变量指向非法的内存空间",[29,7653,7655],{"className":45,"code":7654,"language":47,"meta":35,"style":35},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[37,7656,7657,7665,7669,7698,7703,7715],{"__ignoreMap":35},[51,7658,7659,7661,7663],{"class":53,"line":54},[51,7660,65],{"class":64},[51,7662,151],{"class":68},[51,7664,154],{"class":72},[51,7666,7667],{"class":53,"line":61},[51,7668,96],{"class":72},[51,7670,7671,7673,7675,7677,7679,7681,7683,7685,7687,7690,7693,7695],{"class":53,"line":93},[51,7672,102],{"class":64},[51,7674,7480],{"class":64},[51,7676,40],{"class":72},[51,7678,108],{"class":64},[51,7680,73],{"class":72},[51,7682,65],{"class":64},[51,7684,7480],{"class":64},[51,7686,1677],{"class":72},[51,7688,7689],{"class":64},"0x",[51,7691,7692],{"class":175},"1100",[51,7694,409],{"class":72},[51,7696,7697],{"class":57}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[51,7699,7700],{"class":53,"line":99},[51,7701,7702],{"class":57},"    \u002F\u002F访问野指针报错\n",[51,7704,7705,7707,7709,7711,7713],{"class":53,"line":120},[51,7706,215],{"class":72},[51,7708,7381],{"class":64},[51,7710,40],{"class":72},[51,7712,218],{"class":64},[51,7714,288],{"class":72},[51,7716,7717],{"class":53,"line":129},[51,7718,132],{"class":72},[40,7720,7721],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7723,7725],{"id":7724},"_35const修饰指针","3.5const修饰指针",[40,7727,7728],{},"三种情况：",[1000,7730,7731,7734,7737],{},[22,7732,7733],{},"const修饰指针 常量指针",[22,7735,7736],{},"const修饰常量 指针常量",[22,7738,7739],{},"const即修饰指针，又修饰常量",[19,7741,7742],{},[22,7743,7744],{},"常量指针",[29,7746,7748],{"className":45,"code":7747,"language":47,"meta":35,"style":35},"const int *p=&a;\n",[37,7749,7750],{"__ignoreMap":35},[51,7751,7752,7755,7757,7759,7761,7763],{"class":53,"line":54},[51,7753,7754],{"class":64},"const",[51,7756,3462],{"class":64},[51,7758,7480],{"class":64},[51,7760,40],{"class":72},[51,7762,7301],{"class":64},[51,7764,1121],{"class":72},[40,7766,7767],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[19,7769,7770],{"start":61},[22,7771,7772],{},"指针常量",[29,7774,7776],{"className":45,"code":7775,"language":47,"meta":35,"style":35},"int *const p=&a;\n",[37,7777,7778],{"__ignoreMap":35},[51,7779,7780,7782,7785,7788,7790],{"class":53,"line":54},[51,7781,65],{"class":64},[51,7783,7784],{"class":64}," *const",[51,7786,7787],{"class":72}," p",[51,7789,7301],{"class":64},[51,7791,1121],{"class":72},[40,7793,7794],{},"指针的指向不可以改，指针指向的值可以改",[19,7796,7797],{"start":93},[22,7798,7739],{},[29,7800,7802],{"className":45,"code":7801,"language":47,"meta":35,"style":35},"const int *const p=&a;\n",[37,7803,7804],{"__ignoreMap":35},[51,7805,7806,7808,7810,7812,7814,7816],{"class":53,"line":54},[51,7807,7754],{"class":64},[51,7809,3462],{"class":64},[51,7811,7784],{"class":64},[51,7813,7787],{"class":72},[51,7815,7301],{"class":64},[51,7817,1121],{"class":72},[40,7819,7820],{},"指针的指向和指针指向的值都不可以改变",[14,7822,7824],{"id":7823},"_36指针和数组","3.6指针和数组",[29,7826,7828],{"className":45,"code":7827,"language":47,"meta":35,"style":35},"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",[37,7829,7830,7838,7842,7847,7901,7922,7938,7954,7965,7982,7987,8001,8027,8031,8043,8052,8056],{"__ignoreMap":35},[51,7831,7832,7834,7836],{"class":53,"line":54},[51,7833,65],{"class":64},[51,7835,151],{"class":68},[51,7837,154],{"class":72},[51,7839,7840],{"class":53,"line":61},[51,7841,96],{"class":72},[51,7843,7844],{"class":53,"line":93},[51,7845,7846],{"class":57},"    \u002F\u002F利用指针访问数组中的元素\n",[51,7848,7849,7851,7853,7855,7857,7859,7861,7863,7865,7867,7869,7871,7873,7875,7877,7879,7881,7883,7885,7887,7889,7891,7893,7895,7897,7899],{"class":53,"line":99},[51,7850,102],{"class":64},[51,7852,5039],{"class":72},[51,7854,443],{"class":175},[51,7856,2184],{"class":72},[51,7858,108],{"class":64},[51,7860,2140],{"class":72},[51,7862,791],{"class":175},[51,7864,82],{"class":72},[51,7866,1334],{"class":175},[51,7868,82],{"class":72},[51,7870,1328],{"class":175},[51,7872,82],{"class":72},[51,7874,1543],{"class":175},[51,7876,82],{"class":72},[51,7878,1568],{"class":175},[51,7880,82],{"class":72},[51,7882,1593],{"class":175},[51,7884,82],{"class":72},[51,7886,1618],{"class":175},[51,7888,82],{"class":72},[51,7890,1643],{"class":175},[51,7892,82],{"class":72},[51,7894,1668],{"class":175},[51,7896,82],{"class":72},[51,7898,443],{"class":175},[51,7900,5072],{"class":72},[51,7902,7903,7905,7907,7910,7912,7914,7916,7918,7920],{"class":53,"line":120},[51,7904,215],{"class":72},[51,7906,218],{"class":64},[51,7908,7909],{"class":282},"\"数组的第一个元素为：\"",[51,7911,218],{"class":64},[51,7913,4983],{"class":72},[51,7915,176],{"class":175},[51,7917,2184],{"class":72},[51,7919,218],{"class":64},[51,7921,288],{"class":72},[51,7923,7924,7926,7928,7930,7932,7935],{"class":53,"line":129},[51,7925,102],{"class":64},[51,7927,7480],{"class":64},[51,7929,40],{"class":72},[51,7931,108],{"class":64},[51,7933,7934],{"class":72},"arr;",[51,7936,7937],{"class":57},"\u002F\u002F注意数才要加取地址符号&\n",[51,7939,7940,7942,7944,7946,7948,7950,7952],{"class":53,"line":206},[51,7941,215],{"class":72},[51,7943,218],{"class":64},[51,7945,7909],{"class":282},[51,7947,7381],{"class":64},[51,7949,40],{"class":72},[51,7951,218],{"class":64},[51,7953,288],{"class":72},[51,7955,7956,7958,7960,7962],{"class":53,"line":212},[51,7957,7298],{"class":72},[51,7959,3372],{"class":64},[51,7961,409],{"class":72},[51,7963,7964],{"class":57}," \u002F\u002F让指针向后偏移4个字节\n",[51,7966,7967,7969,7971,7974,7976,7978,7980],{"class":53,"line":227},[51,7968,215],{"class":72},[51,7970,218],{"class":64},[51,7972,7973],{"class":282},"\"数组的第二个元素为：\"",[51,7975,7381],{"class":64},[51,7977,40],{"class":72},[51,7979,218],{"class":64},[51,7981,288],{"class":72},[51,7983,7984],{"class":53,"line":370},[51,7985,7986],{"class":57},"    \u002F\u002F利用指针遍历数组\n",[51,7988,7989,7991,7993,7996,7998],{"class":53,"line":387},[51,7990,102],{"class":64},[51,7992,7480],{"class":64},[51,7994,7995],{"class":72},"p2",[51,7997,108],{"class":64},[51,7999,8000],{"class":72},"arr;\n",[51,8002,8003,8005,8007,8009,8011,8013,8015,8017,8019,8021,8023,8025],{"class":53,"line":404},[51,8004,4278],{"class":64},[51,8006,2750],{"class":72},[51,8008,65],{"class":64},[51,8010,4109],{"class":72},[51,8012,108],{"class":64},[51,8014,176],{"class":175},[51,8016,4116],{"class":72},[51,8018,2154],{"class":64},[51,8020,443],{"class":175},[51,8022,4116],{"class":72},[51,8024,3372],{"class":64},[51,8026,90],{"class":72},[51,8028,8029],{"class":53,"line":415},[51,8030,3110],{"class":72},[51,8032,8033,8035,8037,8039,8041],{"class":53,"line":420},[51,8034,4528],{"class":72},[51,8036,7381],{"class":64},[51,8038,7995],{"class":72},[51,8040,218],{"class":64},[51,8042,288],{"class":72},[51,8044,8045,8048,8050],{"class":53,"line":429},[51,8046,8047],{"class":72},"        p2",[51,8049,3372],{"class":64},[51,8051,179],{"class":72},[51,8053,8054],{"class":53,"line":434},[51,8055,3267],{"class":72},[51,8057,8058],{"class":53,"line":448},[51,8059,132],{"class":72},[14,8061,8063],{"id":8062},"_37指针和函数","3.7指针和函数",[40,8065,8066],{},"利用指针做函数参数，可以修改实参的值",[40,8068,8069],{},"值传递：只改变形参，不改变实参",[40,8071,8072],{},"地址传递：",[29,8074,8076],{"className":45,"code":8075,"language":47,"meta":35,"style":35},"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",[37,8077,8078,8103,8107,8119,8130,8140,8144,8152,8156,8168,8180,8185,8201,8216,8231],{"__ignoreMap":35},[51,8079,8080,8082,8084,8086,8088,8090,8093,8095,8097,8099,8101],{"class":53,"line":54},[51,8081,252],{"class":64},[51,8083,255],{"class":68},[51,8085,73],{"class":72},[51,8087,65],{"class":64},[51,8089,7480],{"class":64},[51,8091,8092],{"class":78},"p1",[51,8094,82],{"class":72},[51,8096,65],{"class":64},[51,8098,7480],{"class":64},[51,8100,7995],{"class":78},[51,8102,90],{"class":72},[51,8104,8105],{"class":53,"line":61},[51,8106,96],{"class":72},[51,8108,8109,8111,8113,8116],{"class":53,"line":93},[51,8110,102],{"class":64},[51,8112,330],{"class":72},[51,8114,8115],{"class":64},"=*",[51,8117,8118],{"class":72},"p1;\n",[51,8120,8121,8123,8125,8127],{"class":53,"line":99},[51,8122,7365],{"class":64},[51,8124,8092],{"class":72},[51,8126,8115],{"class":64},[51,8128,8129],{"class":72},"p2;\n",[51,8131,8132,8134,8136,8138],{"class":53,"line":120},[51,8133,7365],{"class":64},[51,8135,7995],{"class":72},[51,8137,108],{"class":64},[51,8139,354],{"class":72},[51,8141,8142],{"class":53,"line":129},[51,8143,132],{"class":72},[51,8145,8146,8148,8150],{"class":53,"line":206},[51,8147,65],{"class":64},[51,8149,151],{"class":68},[51,8151,154],{"class":72},[51,8153,8154],{"class":53,"line":212},[51,8155,96],{"class":72},[51,8157,8158,8160,8162,8164,8166],{"class":53,"line":227},[51,8159,102],{"class":64},[51,8161,170],{"class":72},[51,8163,108],{"class":64},[51,8165,443],{"class":175},[51,8167,179],{"class":72},[51,8169,8170,8172,8174,8176,8178],{"class":53,"line":370},[51,8171,102],{"class":64},[51,8173,186],{"class":72},[51,8175,108],{"class":64},[51,8177,457],{"class":175},[51,8179,179],{"class":72},[51,8181,8182],{"class":53,"line":387},[51,8183,8184],{"class":57},"    \u002F\u002F地址传递\n",[51,8186,8187,8189,8191,8193,8196,8198],{"class":53,"line":404},[51,8188,465],{"class":68},[51,8190,73],{"class":72},[51,8192,1602],{"class":64},[51,8194,8195],{"class":72},"a,",[51,8197,1602],{"class":64},[51,8199,8200],{"class":72},"b);\n",[51,8202,8203,8205,8207,8209,8211,8213],{"class":53,"line":415},[51,8204,215],{"class":72},[51,8206,218],{"class":64},[51,8208,981],{"class":72},[51,8210,218],{"class":64},[51,8212,709],{"class":72},[51,8214,8215],{"class":57},"\u002F\u002F20\n",[51,8217,8218,8220,8222,8224,8226,8228],{"class":53,"line":420},[51,8219,215],{"class":72},[51,8221,218],{"class":64},[51,8223,975],{"class":72},[51,8225,218],{"class":64},[51,8227,709],{"class":72},[51,8229,8230],{"class":57},"\u002F\u002F10\n",[51,8232,8233],{"class":53,"line":429},[51,8234,132],{"class":72},[40,8236,8237],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8239,8241],{"id":8240},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[40,8243,8244],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[40,8246,8247,8248,8250],{},"例如数组：int arr",[51,8249,443],{},"={4,3,6,9,1,2,10,8,7,5}",[29,8252,8254],{"className":45,"code":8253,"language":47,"meta":35,"style":35},"#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",[37,8255,8256,8262,8272,8296,8300,8331,8335,8369,8373,8391,8395,8406,8421,8436,8440,8444,8448,8452,8456,8464,8468,8473,8527,8539,8551,8556,8564,8568,8573,8598,8602,8617,8626,8630],{"__ignoreMap":35},[51,8257,8258,8260],{"class":53,"line":54},[51,8259,1026],{"class":64},[51,8261,1029],{"class":282},[51,8263,8264,8266,8268,8270],{"class":53,"line":61},[51,8265,1034],{"class":64},[51,8267,1037],{"class":64},[51,8269,1040],{"class":68},[51,8271,179],{"class":72},[51,8273,8274,8276,8279,8281,8283,8285,8287,8289,8291,8294],{"class":53,"line":93},[51,8275,252],{"class":64},[51,8277,8278],{"class":68}," bubbleSort",[51,8280,73],{"class":72},[51,8282,65],{"class":64},[51,8284,7480],{"class":64},[51,8286,40],{"class":78},[51,8288,82],{"class":72},[51,8290,65],{"class":64},[51,8292,8293],{"class":78}," len",[51,8295,90],{"class":72},[51,8297,8298],{"class":53,"line":99},[51,8299,96],{"class":72},[51,8301,8302,8304,8306,8308,8310,8312,8314,8316,8318,8321,8323,8325,8327,8329],{"class":53,"line":120},[51,8303,4278],{"class":64},[51,8305,73],{"class":72},[51,8307,65],{"class":64},[51,8309,4109],{"class":72},[51,8311,108],{"class":64},[51,8313,176],{"class":175},[51,8315,4116],{"class":72},[51,8317,2154],{"class":64},[51,8319,8320],{"class":72},"len",[51,8322,1778],{"class":64},[51,8324,791],{"class":175},[51,8326,4116],{"class":72},[51,8328,3372],{"class":64},[51,8330,90],{"class":72},[51,8332,8333],{"class":53,"line":129},[51,8334,3110],{"class":72},[51,8336,8337,8339,8341,8343,8345,8347,8349,8351,8353,8355,8357,8359,8361,8363,8365,8367],{"class":53,"line":206},[51,8338,4480],{"class":64},[51,8340,73],{"class":72},[51,8342,65],{"class":64},[51,8344,4487],{"class":72},[51,8346,108],{"class":64},[51,8348,176],{"class":175},[51,8350,4494],{"class":72},[51,8352,2154],{"class":64},[51,8354,8320],{"class":72},[51,8356,1778],{"class":64},[51,8358,1689],{"class":72},[51,8360,1778],{"class":64},[51,8362,791],{"class":175},[51,8364,4494],{"class":72},[51,8366,3372],{"class":64},[51,8368,90],{"class":72},[51,8370,8371],{"class":53,"line":212},[51,8372,3590],{"class":72},[51,8374,8375,8377,8380,8382,8385,8387,8389],{"class":53,"line":227},[51,8376,5716],{"class":64},[51,8378,8379],{"class":72},"(p[j]",[51,8381,972],{"class":64},[51,8383,8384],{"class":72},"p[j",[51,8386,114],{"class":64},[51,8388,791],{"class":175},[51,8390,5731],{"class":72},[51,8392,8393],{"class":53,"line":370},[51,8394,5736],{"class":72},[51,8396,8397,8399,8401,8403],{"class":53,"line":387},[51,8398,5741],{"class":64},[51,8400,330],{"class":72},[51,8402,108],{"class":64},[51,8404,8405],{"class":72},"p[j];\n",[51,8407,8408,8411,8413,8415,8417,8419],{"class":53,"line":404},[51,8409,8410],{"class":72},"                p[j]",[51,8412,108],{"class":64},[51,8414,8384],{"class":72},[51,8416,114],{"class":64},[51,8418,791],{"class":175},[51,8420,5764],{"class":72},[51,8422,8423,8426,8428,8430,8432,8434],{"class":53,"line":415},[51,8424,8425],{"class":72},"                p[j",[51,8427,114],{"class":64},[51,8429,791],{"class":175},[51,8431,2184],{"class":72},[51,8433,108],{"class":64},[51,8435,354],{"class":72},[51,8437,8438],{"class":53,"line":420},[51,8439,5784],{"class":72},[51,8441,8442],{"class":53,"line":429},[51,8443,3609],{"class":72},[51,8445,8446],{"class":53,"line":434},[51,8447,3267],{"class":72},[51,8449,8450],{"class":53,"line":448},[51,8451,132],{"class":72},[51,8453,8454],{"class":53,"line":462},[51,8455,3480],{"emptyLinePlaceholder":1192},[51,8457,8458,8460,8462],{"class":53,"line":470},[51,8459,65],{"class":64},[51,8461,151],{"class":68},[51,8463,154],{"class":72},[51,8465,8466],{"class":53,"line":2783},[51,8467,96],{"class":72},[51,8469,8470],{"class":53,"line":2788},[51,8471,8472],{"class":57},"    \u002F\u002F 1.创建数组\n",[51,8474,8475,8477,8479,8481,8483,8485,8487,8489,8491,8493,8495,8497,8499,8501,8503,8505,8507,8509,8511,8513,8515,8517,8519,8521,8523,8525],{"class":53,"line":2817},[51,8476,102],{"class":64},[51,8478,5039],{"class":72},[51,8480,443],{"class":175},[51,8482,2184],{"class":72},[51,8484,108],{"class":64},[51,8486,2140],{"class":72},[51,8488,1543],{"class":175},[51,8490,82],{"class":72},[51,8492,1328],{"class":175},[51,8494,82],{"class":72},[51,8496,1593],{"class":175},[51,8498,82],{"class":72},[51,8500,1668],{"class":175},[51,8502,82],{"class":72},[51,8504,791],{"class":175},[51,8506,82],{"class":72},[51,8508,1334],{"class":175},[51,8510,82],{"class":72},[51,8512,443],{"class":175},[51,8514,82],{"class":72},[51,8516,1643],{"class":175},[51,8518,82],{"class":72},[51,8520,1618],{"class":175},[51,8522,82],{"class":72},[51,8524,1568],{"class":175},[51,8526,5072],{"class":72},[51,8528,8529,8531,8533,8535,8537],{"class":53,"line":2822},[51,8530,102],{"class":64},[51,8532,8293],{"class":72},[51,8534,108],{"class":64},[51,8536,443],{"class":175},[51,8538,179],{"class":72},[51,8540,8541,8543,8545,8547,8549],{"class":53,"line":2839},[51,8542,102],{"class":64},[51,8544,7480],{"class":64},[51,8546,40],{"class":72},[51,8548,108],{"class":64},[51,8550,8000],{"class":72},[51,8552,8553],{"class":53,"line":2844},[51,8554,8555],{"class":57},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[51,8557,8558,8561],{"class":53,"line":2849},[51,8559,8560],{"class":68},"    bubbleSort",[51,8562,8563],{"class":72},"(p,len);\n",[51,8565,8566],{"class":53,"line":2854},[51,8567,3480],{"emptyLinePlaceholder":1192},[51,8569,8570],{"class":53,"line":2868},[51,8571,8572],{"class":57},"    \u002F\u002F 3.打印排序后的数组\n",[51,8574,8575,8577,8579,8581,8583,8585,8587,8589,8591,8594,8596],{"class":53,"line":2873},[51,8576,4278],{"class":64},[51,8578,2750],{"class":72},[51,8580,65],{"class":64},[51,8582,4109],{"class":72},[51,8584,108],{"class":64},[51,8586,176],{"class":175},[51,8588,4291],{"class":72},[51,8590,2154],{"class":64},[51,8592,8593],{"class":72},"len; i",[51,8595,3372],{"class":64},[51,8597,90],{"class":72},[51,8599,8600],{"class":53,"line":3657},[51,8601,3110],{"class":72},[51,8603,8604,8606,8608,8610,8612,8615],{"class":53,"line":3671},[51,8605,4528],{"class":72},[51,8607,7381],{"class":64},[51,8609,40],{"class":72},[51,8611,218],{"class":64},[51,8613,8614],{"class":282},"\"\"",[51,8616,179],{"class":72},[51,8618,8619,8622,8624],{"class":53,"line":3679},[51,8620,8621],{"class":72},"        p",[51,8623,3372],{"class":64},[51,8625,179],{"class":72},[51,8627,8628],{"class":53,"line":3684},[51,8629,3267],{"class":72},[51,8631,8632],{"class":53,"line":3690},[51,8633,132],{"class":72},[1179,8635,8636],{},"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":35,"searchDepth":61,"depth":61,"links":8638},[8639,8640,8641,8642,8643,8644,8645,8646],{"id":7245,"depth":61,"text":7246},{"id":7411,"depth":61,"text":7412},{"id":7567,"depth":61,"text":7568},{"id":7645,"depth":61,"text":7646},{"id":7724,"depth":61,"text":7725},{"id":7823,"depth":61,"text":7824},{"id":8062,"depth":61,"text":8063},{"id":8240,"depth":61,"text":8241},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7234,"description":7242},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8653,"title":8654,"body":8655,"description":8662,"extension":1190,"meta":11636,"navigation":1192,"path":11637,"seo":11638,"stem":11639,"__hash__":11640},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8656,"toc":11627},[8657,8660,8663,8667,8670,8673,8684,9022,9025,9029,9032,9039,9294,9298,9301,9304,9459,9463,9466,9469,9675,9679,9682,9985,9988,9996,10000,10003,10154,10156,10167,10224,10228,10233,10890,10898,10901,10995,10998,11618,11624],[10,8658,8654],{"id":8659},"_4结构体",[40,8661,8662],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8664,8666],{"id":8665},"_41结构体定义与使用","4.1结构体定义与使用",[40,8668,8669],{},"语法：struct 结构体名 {结构体成员列表}；",[40,8671,8672],{},"通过结构体创建变量的方式：",[1000,8674,8675,8678,8681],{},[22,8676,8677],{},"struct 结构体名 变量名",[22,8679,8680],{},"struct 结构体名 变量名={成员1值，成员2值...}",[22,8682,8683],{},"定义结构体时顺便创建变量",[29,8685,8687],{"className":45,"code":8686,"language":47,"meta":35,"style":35},"#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",[37,8688,8689,8695,8705,8712,8717,8725,8729,8734,8738,8743,8748,8753,8760,8765,8772,8776,8783,8787,8791,8795,8799,8803,8807,8813,8817,8823,8831,8839,8843,8848,8853,8864,8869,8881,8892,8903,8908,8932,8937,8943,8970,8975,8981,8993,9005,9017],{"__ignoreMap":35},[51,8690,8691,8693],{"class":53,"line":54},[51,8692,1026],{"class":64},[51,8694,1029],{"class":282},[51,8696,8697,8699,8701,8703],{"class":53,"line":61},[51,8698,1034],{"class":64},[51,8700,1037],{"class":64},[51,8702,1040],{"class":68},[51,8704,179],{"class":72},[51,8706,8707,8709],{"class":53,"line":93},[51,8708,1026],{"class":64},[51,8710,8711],{"class":282},"\u003Cstring>\n",[51,8713,8714],{"class":53,"line":99},[51,8715,8716],{"class":57},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[51,8718,8719,8722],{"class":53,"line":120},[51,8720,8721],{"class":64},"struct",[51,8723,8724],{"class":68}," Student\n",[51,8726,8727],{"class":53,"line":129},[51,8728,96],{"class":72},[51,8730,8731],{"class":53,"line":206},[51,8732,8733],{"class":57},"    \u002F\u002F成员列表\n",[51,8735,8736],{"class":53,"line":212},[51,8737,3480],{"emptyLinePlaceholder":1192},[51,8739,8740],{"class":53,"line":227},[51,8741,8742],{"class":57},"    \u002F\u002F姓名\n",[51,8744,8745],{"class":53,"line":370},[51,8746,8747],{"class":72},"    string name;\n",[51,8749,8750],{"class":53,"line":387},[51,8751,8752],{"class":57},"    \u002F\u002F年龄\n",[51,8754,8755,8757],{"class":53,"line":404},[51,8756,102],{"class":64},[51,8758,8759],{"class":72}," age;\n",[51,8761,8762],{"class":53,"line":415},[51,8763,8764],{"class":57},"    \u002F\u002F分数\n",[51,8766,8767,8769],{"class":53,"line":420},[51,8768,102],{"class":64},[51,8770,8771],{"class":72}," score;\n",[51,8773,8774],{"class":53,"line":429},[51,8775,5072],{"class":72},[51,8777,8778,8780],{"class":53,"line":434},[51,8779,8721],{"class":64},[51,8781,8782],{"class":68}," School\n",[51,8784,8785],{"class":53,"line":448},[51,8786,96],{"class":72},[51,8788,8789],{"class":53,"line":462},[51,8790,8733],{"class":57},[51,8792,8793],{"class":53,"line":470},[51,8794,3480],{"emptyLinePlaceholder":1192},[51,8796,8797],{"class":53,"line":2783},[51,8798,8742],{"class":57},[51,8800,8801],{"class":53,"line":2788},[51,8802,8747],{"class":72},[51,8804,8805],{"class":53,"line":2817},[51,8806,8752],{"class":57},[51,8808,8809,8811],{"class":53,"line":2822},[51,8810,102],{"class":64},[51,8812,8759],{"class":72},[51,8814,8815],{"class":53,"line":2839},[51,8816,8764],{"class":57},[51,8818,8819,8821],{"class":53,"line":2844},[51,8820,102],{"class":64},[51,8822,8771],{"class":72},[51,8824,8825,8828],{"class":53,"line":2849},[51,8826,8827],{"class":72},"} s3;",[51,8829,8830],{"class":57}," \u002F\u002F创建结构体时就创建了变量\n",[51,8832,8833,8835,8837],{"class":53,"line":2854},[51,8834,65],{"class":64},[51,8836,151],{"class":68},[51,8838,154],{"class":72},[51,8840,8841],{"class":53,"line":2868},[51,8842,96],{"class":72},[51,8844,8845],{"class":53,"line":2873},[51,8846,8847],{"class":57},"    \u002F\u002F2.通过学生类型创建具体学生\n",[51,8849,8850],{"class":53,"line":3657},[51,8851,8852],{"class":57},"    \u002F\u002F2.1 struct Student s1;\n",[51,8854,8855,8858,8861],{"class":53,"line":3671},[51,8856,8857],{"class":64},"    struct",[51,8859,8860],{"class":68}," Student",[51,8862,8863],{"class":72}," s1;\n",[51,8865,8866],{"class":53,"line":3679},[51,8867,8868],{"class":57},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[51,8870,8871,8874,8876,8879],{"class":53,"line":3684},[51,8872,8873],{"class":72},"    s1.name",[51,8875,108],{"class":64},[51,8877,8878],{"class":282},"\"张三\"",[51,8880,179],{"class":72},[51,8882,8883,8886,8888,8890],{"class":53,"line":3690},[51,8884,8885],{"class":72},"    s1.age",[51,8887,108],{"class":64},[51,8889,1896],{"class":175},[51,8891,179],{"class":72},[51,8893,8894,8897,8899,8901],{"class":53,"line":3696},[51,8895,8896],{"class":72},"    s1.score",[51,8898,108],{"class":64},[51,8900,1506],{"class":175},[51,8902,179],{"class":72},[51,8904,8905],{"class":53,"line":3701},[51,8906,8907],{"class":57},"    \u002F\u002F输出结果\n",[51,8909,8911,8913,8915,8918,8920,8923,8925,8928,8930],{"class":53,"line":8910},37,[51,8912,215],{"class":72},[51,8914,218],{"class":64},[51,8916,8917],{"class":72},"s1.name",[51,8919,218],{"class":64},[51,8921,8922],{"class":72},"s1.age",[51,8924,218],{"class":64},[51,8926,8927],{"class":72},"s1.score",[51,8929,218],{"class":64},[51,8931,288],{"class":72},[51,8933,8935],{"class":53,"line":8934},38,[51,8936,3480],{"emptyLinePlaceholder":1192},[51,8938,8940],{"class":53,"line":8939},39,[51,8941,8942],{"class":57},"    \u002F\u002F2.2 struct Student s2={...}\n",[51,8944,8946,8948,8950,8953,8955,8957,8960,8962,8964,8966,8968],{"class":53,"line":8945},40,[51,8947,8857],{"class":64},[51,8949,8860],{"class":68},[51,8951,8952],{"class":72}," s2",[51,8954,108],{"class":64},[51,8956,2140],{"class":72},[51,8958,8959],{"class":282},"\"王五\"",[51,8961,82],{"class":72},[51,8963,1896],{"class":175},[51,8965,82],{"class":72},[51,8967,1506],{"class":175},[51,8969,5072],{"class":72},[51,8971,8973],{"class":53,"line":8972},41,[51,8974,3480],{"emptyLinePlaceholder":1192},[51,8976,8978],{"class":53,"line":8977},42,[51,8979,8980],{"class":57},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[51,8982,8984,8987,8989,8991],{"class":53,"line":8983},43,[51,8985,8986],{"class":72},"    s3.name",[51,8988,108],{"class":64},[51,8990,4755],{"class":282},[51,8992,179],{"class":72},[51,8994,8996,8999,9001,9003],{"class":53,"line":8995},44,[51,8997,8998],{"class":72},"    s3.age",[51,9000,108],{"class":64},[51,9002,1896],{"class":175},[51,9004,179],{"class":72},[51,9006,9008,9011,9013,9015],{"class":53,"line":9007},45,[51,9009,9010],{"class":72},"    s3.score",[51,9012,108],{"class":64},[51,9014,457],{"class":175},[51,9016,179],{"class":72},[51,9018,9020],{"class":53,"line":9019},46,[51,9021,132],{"class":72},[40,9023,9024],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9026,9028],{"id":9027},"_42结构体数组","4.2结构体数组",[40,9030,9031],{},"将自定义的结构体放入到数组中方便维护",[40,9033,9034,9035,9038],{},"语法：struct 结构体名 数组名",[51,9036,9037],{},"元素个数","={ {}，{},...{} };",[29,9040,9042],{"className":45,"code":9041,"language":47,"meta":35,"style":35},"#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",[37,9043,9044,9050,9060,9066,9071,9077,9081,9085,9091,9097,9101,9105,9113,9117,9122,9137,9141,9157,9173,9177,9182,9198,9213,9228,9233,9259,9263,9286,9290],{"__ignoreMap":35},[51,9045,9046,9048],{"class":53,"line":54},[51,9047,1026],{"class":64},[51,9049,1029],{"class":282},[51,9051,9052,9054,9056,9058],{"class":53,"line":61},[51,9053,1034],{"class":64},[51,9055,1037],{"class":64},[51,9057,1040],{"class":68},[51,9059,179],{"class":72},[51,9061,9062,9064],{"class":53,"line":93},[51,9063,1026],{"class":64},[51,9065,8711],{"class":282},[51,9067,9068],{"class":53,"line":99},[51,9069,9070],{"class":57},"\u002F\u002F1.定义结构体\n",[51,9072,9073,9075],{"class":53,"line":120},[51,9074,8721],{"class":64},[51,9076,8724],{"class":68},[51,9078,9079],{"class":53,"line":129},[51,9080,96],{"class":72},[51,9082,9083],{"class":53,"line":206},[51,9084,8747],{"class":72},[51,9086,9087,9089],{"class":53,"line":212},[51,9088,102],{"class":64},[51,9090,8759],{"class":72},[51,9092,9093,9095],{"class":53,"line":227},[51,9094,102],{"class":64},[51,9096,8771],{"class":72},[51,9098,9099],{"class":53,"line":370},[51,9100,3480],{"emptyLinePlaceholder":1192},[51,9102,9103],{"class":53,"line":387},[51,9104,5072],{"class":72},[51,9106,9107,9109,9111],{"class":53,"line":404},[51,9108,65],{"class":64},[51,9110,151],{"class":68},[51,9112,154],{"class":72},[51,9114,9115],{"class":53,"line":415},[51,9116,96],{"class":72},[51,9118,9119],{"class":53,"line":420},[51,9120,9121],{"class":57},"    \u002F\u002F2.创建结构体数组\n",[51,9123,9124,9126,9128,9131,9133,9135],{"class":53,"line":429},[51,9125,8857],{"class":64},[51,9127,8860],{"class":68},[51,9129,9130],{"class":72}," stuArray[",[51,9132,1334],{"class":175},[51,9134,2184],{"class":72},[51,9136,5982],{"class":64},[51,9138,9139],{"class":53,"line":434},[51,9140,3110],{"class":72},[51,9142,9143,9145,9147,9149,9151,9153,9155],{"class":53,"line":448},[51,9144,5991],{"class":72},[51,9146,8878],{"class":282},[51,9148,82],{"class":72},[51,9150,1896],{"class":175},[51,9152,82],{"class":72},[51,9154,612],{"class":175},[51,9156,6004],{"class":72},[51,9158,9159,9161,9163,9165,9167,9169,9171],{"class":53,"line":462},[51,9160,5991],{"class":72},[51,9162,4755],{"class":282},[51,9164,82],{"class":72},[51,9166,1821],{"class":175},[51,9168,82],{"class":72},[51,9170,1821],{"class":175},[51,9172,132],{"class":72},[51,9174,9175],{"class":53,"line":470},[51,9176,3267],{"class":72},[51,9178,9179],{"class":53,"line":2783},[51,9180,9181],{"class":57},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[51,9183,9184,9187,9189,9192,9194,9196],{"class":53,"line":2788},[51,9185,9186],{"class":72},"    stuArray[",[51,9188,791],{"class":175},[51,9190,9191],{"class":72},"].name",[51,9193,108],{"class":64},[51,9195,4778],{"class":282},[51,9197,179],{"class":72},[51,9199,9200,9202,9204,9207,9209,9211],{"class":53,"line":2817},[51,9201,9186],{"class":72},[51,9203,791],{"class":175},[51,9205,9206],{"class":72},"].age",[51,9208,108],{"class":64},[51,9210,1334],{"class":175},[51,9212,179],{"class":72},[51,9214,9215,9217,9219,9222,9224,9226],{"class":53,"line":2822},[51,9216,9186],{"class":72},[51,9218,791],{"class":175},[51,9220,9221],{"class":72},"].score",[51,9223,108],{"class":64},[51,9225,1334],{"class":175},[51,9227,179],{"class":72},[51,9229,9230],{"class":53,"line":2839},[51,9231,9232],{"class":57},"    \u002F\u002F4.遍历结构体数组\n",[51,9234,9235,9237,9239,9241,9243,9245,9247,9249,9251,9253,9255,9257],{"class":53,"line":2844},[51,9236,4278],{"class":64},[51,9238,2750],{"class":72},[51,9240,65],{"class":64},[51,9242,4109],{"class":72},[51,9244,108],{"class":64},[51,9246,176],{"class":175},[51,9248,4116],{"class":72},[51,9250,2154],{"class":64},[51,9252,1334],{"class":175},[51,9254,4116],{"class":72},[51,9256,3372],{"class":64},[51,9258,90],{"class":72},[51,9260,9261],{"class":53,"line":2849},[51,9262,3110],{"class":72},[51,9264,9265,9267,9269,9272,9274,9277,9279,9282,9284],{"class":53,"line":2854},[51,9266,4528],{"class":72},[51,9268,218],{"class":64},[51,9270,9271],{"class":72},"stuArray[i].name",[51,9273,218],{"class":64},[51,9275,9276],{"class":72},"stuArray[i].age",[51,9278,218],{"class":64},[51,9280,9281],{"class":72},"stuArray[i].score",[51,9283,218],{"class":64},[51,9285,288],{"class":72},[51,9287,9288],{"class":53,"line":2868},[51,9289,3267],{"class":72},[51,9291,9292],{"class":53,"line":2873},[51,9293,132],{"class":72},[14,9295,9297],{"id":9296},"_43结构体指针","4.3结构体指针",[40,9299,9300],{},"作用：通过指针访问结构体中的成员",[40,9302,9303],{},"利用操作符->可以通过结构体指针访问结构体属性",[29,9305,9307],{"className":45,"code":9306,"language":47,"meta":35,"style":35},"#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",[37,9308,9309,9315,9325,9331,9335,9341,9345,9349,9355,9361,9365,9373,9377,9382,9407,9412,9427,9432,9455],{"__ignoreMap":35},[51,9310,9311,9313],{"class":53,"line":54},[51,9312,1026],{"class":64},[51,9314,1029],{"class":282},[51,9316,9317,9319,9321,9323],{"class":53,"line":61},[51,9318,1034],{"class":64},[51,9320,1037],{"class":64},[51,9322,1040],{"class":68},[51,9324,179],{"class":72},[51,9326,9327,9329],{"class":53,"line":93},[51,9328,1026],{"class":64},[51,9330,8711],{"class":282},[51,9332,9333],{"class":53,"line":99},[51,9334,9070],{"class":57},[51,9336,9337,9339],{"class":53,"line":120},[51,9338,8721],{"class":64},[51,9340,8724],{"class":68},[51,9342,9343],{"class":53,"line":129},[51,9344,96],{"class":72},[51,9346,9347],{"class":53,"line":206},[51,9348,8747],{"class":72},[51,9350,9351,9353],{"class":53,"line":212},[51,9352,102],{"class":64},[51,9354,8759],{"class":72},[51,9356,9357,9359],{"class":53,"line":227},[51,9358,102],{"class":64},[51,9360,8771],{"class":72},[51,9362,9363],{"class":53,"line":370},[51,9364,5072],{"class":72},[51,9366,9367,9369,9371],{"class":53,"line":387},[51,9368,65],{"class":64},[51,9370,151],{"class":68},[51,9372,154],{"class":72},[51,9374,9375],{"class":53,"line":404},[51,9376,96],{"class":72},[51,9378,9379],{"class":53,"line":415},[51,9380,9381],{"class":57},"    \u002F\u002F创建学生结构体变量\n",[51,9383,9384,9386,9388,9391,9393,9395,9397,9399,9401,9403,9405],{"class":53,"line":420},[51,9385,8857],{"class":64},[51,9387,8860],{"class":68},[51,9389,9390],{"class":72}," s",[51,9392,108],{"class":64},[51,9394,2140],{"class":72},[51,9396,8878],{"class":282},[51,9398,82],{"class":72},[51,9400,1896],{"class":175},[51,9402,82],{"class":72},[51,9404,2812],{"class":175},[51,9406,5072],{"class":72},[51,9408,9409],{"class":53,"line":429},[51,9410,9411],{"class":57},"    \u002F\u002F通过指针指向结构体变量\n",[51,9413,9414,9416,9418,9420,9422,9424],{"class":53,"line":434},[51,9415,8857],{"class":64},[51,9417,8860],{"class":68},[51,9419,7480],{"class":64},[51,9421,40],{"class":72},[51,9423,7301],{"class":64},[51,9425,9426],{"class":72},"s\n",[51,9428,9429],{"class":53,"line":448},[51,9430,9431],{"class":57},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[51,9433,9434,9436,9438,9441,9443,9446,9448,9451,9453],{"class":53,"line":462},[51,9435,215],{"class":72},[51,9437,218],{"class":64},[51,9439,9440],{"class":72},"p->name",[51,9442,218],{"class":64},[51,9444,9445],{"class":72},"p->age",[51,9447,218],{"class":64},[51,9449,9450],{"class":72},"p->score",[51,9452,218],{"class":64},[51,9454,288],{"class":72},[51,9456,9457],{"class":53,"line":470},[51,9458,132],{"class":72},[14,9460,9462],{"id":9461},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[40,9464,9465],{},"作用：结构体中的成员可以是另一个结构体",[40,9467,9468],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[29,9470,9472],{"className":45,"code":9471,"language":47,"meta":35,"style":35},"#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",[37,9473,9474,9480,9490,9496,9501,9509,9513,9517,9523,9529,9533,9538,9545,9549,9556,9560,9566,9571,9575,9583,9587,9592,9597,9602,9613,9625,9636,9649,9660,9671],{"__ignoreMap":35},[51,9475,9476,9478],{"class":53,"line":54},[51,9477,1026],{"class":64},[51,9479,1029],{"class":282},[51,9481,9482,9484,9486,9488],{"class":53,"line":61},[51,9483,1034],{"class":64},[51,9485,1037],{"class":64},[51,9487,1040],{"class":68},[51,9489,179],{"class":72},[51,9491,9492,9494],{"class":53,"line":93},[51,9493,1026],{"class":64},[51,9495,8711],{"class":282},[51,9497,9498],{"class":53,"line":99},[51,9499,9500],{"class":57},"\u002F\u002F定义学生结构体\n",[51,9502,9503,9505,9507],{"class":53,"line":120},[51,9504,8721],{"class":64},[51,9506,8860],{"class":68},[51,9508,3754],{"class":72},[51,9510,9511],{"class":53,"line":129},[51,9512,96],{"class":72},[51,9514,9515],{"class":53,"line":206},[51,9516,8747],{"class":72},[51,9518,9519,9521],{"class":53,"line":212},[51,9520,102],{"class":64},[51,9522,8759],{"class":72},[51,9524,9525,9527],{"class":53,"line":227},[51,9526,102],{"class":64},[51,9528,8771],{"class":72},[51,9530,9531],{"class":53,"line":370},[51,9532,132],{"class":72},[51,9534,9535],{"class":53,"line":387},[51,9536,9537],{"class":57},"\u002F\u002F定义老师结构体\n",[51,9539,9540,9542],{"class":53,"line":404},[51,9541,8721],{"class":64},[51,9543,9544],{"class":68}," Teacher\n",[51,9546,9547],{"class":53,"line":415},[51,9548,96],{"class":72},[51,9550,9551,9553],{"class":53,"line":420},[51,9552,102],{"class":64},[51,9554,9555],{"class":72}," id;\n",[51,9557,9558],{"class":53,"line":429},[51,9559,8747],{"class":72},[51,9561,9562,9564],{"class":53,"line":434},[51,9563,102],{"class":64},[51,9565,8759],{"class":72},[51,9567,9568],{"class":53,"line":448},[51,9569,9570],{"class":72},"    Student stu;\n",[51,9572,9573],{"class":53,"line":462},[51,9574,132],{"class":72},[51,9576,9577,9579,9581],{"class":53,"line":470},[51,9578,65],{"class":64},[51,9580,151],{"class":68},[51,9582,891],{"class":72},[51,9584,9585],{"class":53,"line":2783},[51,9586,96],{"class":72},[51,9588,9589],{"class":53,"line":2788},[51,9590,9591],{"class":57},"    \u002F\u002F结构体嵌套结构体\n",[51,9593,9594],{"class":53,"line":2817},[51,9595,9596],{"class":57},"    \u002F\u002F创建老师\n",[51,9598,9599],{"class":53,"line":2822},[51,9600,9601],{"class":72},"    Teacher t;\n",[51,9603,9604,9607,9609,9611],{"class":53,"line":2839},[51,9605,9606],{"class":72},"    t.id",[51,9608,108],{"class":64},[51,9610,612],{"class":175},[51,9612,179],{"class":72},[51,9614,9615,9618,9620,9623],{"class":53,"line":2844},[51,9616,9617],{"class":72},"    t.name",[51,9619,108],{"class":64},[51,9621,9622],{"class":282},"\"老王\"",[51,9624,179],{"class":72},[51,9626,9627,9630,9632,9634],{"class":53,"line":2849},[51,9628,9629],{"class":72},"    t.age",[51,9631,108],{"class":64},[51,9633,1896],{"class":175},[51,9635,179],{"class":72},[51,9637,9638,9641,9643,9646],{"class":53,"line":2854},[51,9639,9640],{"class":72},"    t.stu.name",[51,9642,108],{"class":64},[51,9644,9645],{"class":282},"\"小王\"",[51,9647,9648],{"class":72},"；\n",[51,9650,9651,9654,9656,9658],{"class":53,"line":2868},[51,9652,9653],{"class":72},"    t.stu.age",[51,9655,108],{"class":64},[51,9657,457],{"class":175},[51,9659,179],{"class":72},[51,9661,9662,9665,9667,9669],{"class":53,"line":2873},[51,9663,9664],{"class":72},"    t.stu.score",[51,9666,108],{"class":64},[51,9668,1593],{"class":175},[51,9670,179],{"class":72},[51,9672,9673],{"class":53,"line":3657},[51,9674,132],{"class":72},[14,9676,9678],{"id":9677},"_45结构体做函数参数","4.5结构体做函数参数",[40,9680,9681],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[29,9683,9685],{"className":45,"code":9684,"language":47,"meta":35,"style":35},"#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",[37,9686,9687,9693,9703,9709,9715,9719,9723,9729,9735,9739,9744,9749,9766,9770,9803,9807,9812,9831,9835,9866,9870,9878,9882,9891,9903,9915,9927,9940,9948,9961,9973,9981],{"__ignoreMap":35},[51,9688,9689,9691],{"class":53,"line":54},[51,9690,1026],{"class":64},[51,9692,1029],{"class":282},[51,9694,9695,9697,9699,9701],{"class":53,"line":61},[51,9696,1034],{"class":64},[51,9698,1037],{"class":64},[51,9700,1040],{"class":68},[51,9702,179],{"class":72},[51,9704,9705,9707],{"class":53,"line":93},[51,9706,1026],{"class":64},[51,9708,8711],{"class":282},[51,9710,9711,9713],{"class":53,"line":99},[51,9712,8721],{"class":64},[51,9714,8724],{"class":68},[51,9716,9717],{"class":53,"line":120},[51,9718,96],{"class":72},[51,9720,9721],{"class":53,"line":129},[51,9722,8747],{"class":72},[51,9724,9725,9727],{"class":53,"line":206},[51,9726,102],{"class":64},[51,9728,8759],{"class":72},[51,9730,9731,9733],{"class":53,"line":212},[51,9732,102],{"class":64},[51,9734,8771],{"class":72},[51,9736,9737],{"class":53,"line":227},[51,9738,5072],{"class":72},[51,9740,9741],{"class":53,"line":370},[51,9742,9743],{"class":57},"\u002F\u002F打印学生信息的函数\n",[51,9745,9746],{"class":53,"line":387},[51,9747,9748],{"class":57},"\u002F\u002F值传递\n",[51,9750,9751,9753,9756,9758,9760,9762,9764],{"class":53,"line":404},[51,9752,252],{"class":64},[51,9754,9755],{"class":68}," printStudent1",[51,9757,73],{"class":72},[51,9759,8721],{"class":64},[51,9761,8860],{"class":68},[51,9763,9390],{"class":78},[51,9765,90],{"class":72},[51,9767,9768],{"class":53,"line":415},[51,9769,96],{"class":72},[51,9771,9772,9774,9776,9779,9781,9784,9786,9789,9791,9793,9795,9798,9800],{"class":53,"line":420},[51,9773,7491],{"class":72},[51,9775,218],{"class":64},[51,9777,9778],{"class":72}," s.name ",[51,9780,218],{"class":64},[51,9782,9783],{"class":282}," \" \"",[51,9785,2546],{"class":64},[51,9787,9788],{"class":72}," s.age ",[51,9790,218],{"class":64},[51,9792,9783],{"class":282},[51,9794,2546],{"class":64},[51,9796,9797],{"class":72}," s.score ",[51,9799,218],{"class":64},[51,9801,9802],{"class":72}," endl;\n",[51,9804,9805],{"class":53,"line":429},[51,9806,132],{"class":72},[51,9808,9809],{"class":53,"line":434},[51,9810,9811],{"class":57},"\u002F\u002F地址传递\n",[51,9813,9814,9816,9819,9821,9823,9825,9827,9829],{"class":53,"line":448},[51,9815,252],{"class":64},[51,9817,9818],{"class":68}," printStudent2",[51,9820,73],{"class":72},[51,9822,8721],{"class":64},[51,9824,8860],{"class":68},[51,9826,7480],{"class":64},[51,9828,1941],{"class":78},[51,9830,90],{"class":72},[51,9832,9833],{"class":53,"line":462},[51,9834,96],{"class":72},[51,9836,9837,9839,9841,9844,9846,9848,9850,9853,9855,9857,9859,9862,9864],{"class":53,"line":470},[51,9838,7491],{"class":72},[51,9840,218],{"class":64},[51,9842,9843],{"class":72}," s->name ",[51,9845,218],{"class":64},[51,9847,9783],{"class":282},[51,9849,2546],{"class":64},[51,9851,9852],{"class":72}," s->age ",[51,9854,218],{"class":64},[51,9856,9783],{"class":282},[51,9858,2546],{"class":64},[51,9860,9861],{"class":72}," s->score ",[51,9863,218],{"class":64},[51,9865,9802],{"class":72},[51,9867,9868],{"class":53,"line":2783},[51,9869,132],{"class":72},[51,9871,9872,9874,9876],{"class":53,"line":2788},[51,9873,65],{"class":64},[51,9875,151],{"class":68},[51,9877,154],{"class":72},[51,9879,9880],{"class":53,"line":2817},[51,9881,96],{"class":72},[51,9883,9884,9886,9888],{"class":53,"line":2822},[51,9885,8857],{"class":64},[51,9887,8860],{"class":68},[51,9889,9890],{"class":72}," s;\n",[51,9892,9893,9896,9898,9901],{"class":53,"line":2839},[51,9894,9895],{"class":72},"    s.name ",[51,9897,108],{"class":64},[51,9899,9900],{"class":282}," \"张三\"",[51,9902,179],{"class":72},[51,9904,9905,9908,9910,9913],{"class":53,"line":2844},[51,9906,9907],{"class":72},"    s.age ",[51,9909,108],{"class":64},[51,9911,9912],{"class":175}," 20",[51,9914,179],{"class":72},[51,9916,9917,9920,9922,9925],{"class":53,"line":2849},[51,9918,9919],{"class":72},"    s.score ",[51,9921,108],{"class":64},[51,9923,9924],{"class":175}," 85",[51,9926,179],{"class":72},[51,9928,9929,9931,9933,9936,9938],{"class":53,"line":2854},[51,9930,215],{"class":72},[51,9932,218],{"class":64},[51,9934,9935],{"class":282},"\"值传递:\"",[51,9937,218],{"class":64},[51,9939,288],{"class":72},[51,9941,9942,9945],{"class":53,"line":2868},[51,9943,9944],{"class":68},"    printStudent1",[51,9946,9947],{"class":72},"(s);\n",[51,9949,9950,9952,9954,9957,9959],{"class":53,"line":2873},[51,9951,215],{"class":72},[51,9953,218],{"class":64},[51,9955,9956],{"class":282},"\"地址传递:\"",[51,9958,218],{"class":64},[51,9960,288],{"class":72},[51,9962,9963,9966,9968,9970],{"class":53,"line":3657},[51,9964,9965],{"class":68},"    printStudent2",[51,9967,73],{"class":72},[51,9969,1602],{"class":64},[51,9971,9972],{"class":72},"s); \n",[51,9974,9975,9977,9979],{"class":53,"line":3671},[51,9976,123],{"class":64},[51,9978,5169],{"class":175},[51,9980,179],{"class":72},[51,9982,9983],{"class":53,"line":3679},[51,9984,132],{"class":72},[40,9986,9987],{},"注意：",[1000,9989,9990,9993],{},[22,9991,9992],{},"1.先定义结构体，不要在函数中写结构体的定义",[22,9994,9995],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9997,9999],{"id":9998},"_46结构体中const使用场景","4.6结构体中const使用场景",[40,10001,10002],{},"用const防止误操作",[29,10004,10006],{"className":45,"code":10005,"language":47,"meta":35,"style":35},"#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",[37,10007,10008,10014,10024,10030,10035,10039,10043,10049,10055,10059,10075,10079,10102,10106,10114,10118,10139,10146,10150],{"__ignoreMap":35},[51,10009,10010,10012],{"class":53,"line":54},[51,10011,1026],{"class":64},[51,10013,1029],{"class":282},[51,10015,10016,10018,10020,10022],{"class":53,"line":61},[51,10017,1034],{"class":64},[51,10019,1037],{"class":64},[51,10021,1040],{"class":68},[51,10023,179],{"class":72},[51,10025,10026,10028],{"class":53,"line":93},[51,10027,1026],{"class":64},[51,10029,8711],{"class":282},[51,10031,10032],{"class":53,"line":99},[51,10033,10034],{"class":72},"sctuct Student\n",[51,10036,10037],{"class":53,"line":120},[51,10038,96],{"class":72},[51,10040,10041],{"class":53,"line":129},[51,10042,8747],{"class":72},[51,10044,10045,10047],{"class":53,"line":206},[51,10046,102],{"class":64},[51,10048,8759],{"class":72},[51,10050,10051,10053],{"class":53,"line":212},[51,10052,102],{"class":64},[51,10054,8771],{"class":72},[51,10056,10057],{"class":53,"line":227},[51,10058,5072],{"class":72},[51,10060,10061,10063,10066,10068,10071,10073],{"class":53,"line":370},[51,10062,252],{"class":64},[51,10064,10065],{"class":68}," printStudents",[51,10067,73],{"class":72},[51,10069,10070],{"class":68},"student",[51,10072,9390],{"class":78},[51,10074,90],{"class":72},[51,10076,10077],{"class":53,"line":387},[51,10078,96],{"class":72},[51,10080,10081,10083,10085,10088,10090,10093,10095,10098,10100],{"class":53,"line":404},[51,10082,215],{"class":72},[51,10084,218],{"class":64},[51,10086,10087],{"class":72},"s.name",[51,10089,218],{"class":64},[51,10091,10092],{"class":72},"s.age",[51,10094,218],{"class":64},[51,10096,10097],{"class":72},"s.score",[51,10099,218],{"class":64},[51,10101,288],{"class":72},[51,10103,10104],{"class":53,"line":415},[51,10105,132],{"class":72},[51,10107,10108,10110,10112],{"class":53,"line":420},[51,10109,65],{"class":64},[51,10111,151],{"class":68},[51,10113,891],{"class":72},[51,10115,10116],{"class":53,"line":429},[51,10117,96],{"class":72},[51,10119,10120,10123,10125,10127,10129,10131,10133,10135,10137],{"class":53,"line":434},[51,10121,10122],{"class":72},"    Student s",[51,10124,108],{"class":64},[51,10126,2140],{"class":72},[51,10128,8878],{"class":282},[51,10130,82],{"class":72},[51,10132,1896],{"class":175},[51,10134,82],{"class":72},[51,10136,1896],{"class":175},[51,10138,5072],{"class":72},[51,10140,10141,10144],{"class":53,"line":448},[51,10142,10143],{"class":68},"    printStudent",[51,10145,9947],{"class":72},[51,10147,10148],{"class":53,"line":462},[51,10149,3480],{"emptyLinePlaceholder":1192},[51,10151,10152],{"class":53,"line":470},[51,10153,132],{"class":72},[40,10155,9987],{},[1000,10157,10158,10161,10164],{},[22,10159,10160],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[22,10162,10163],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[22,10165,10166],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[29,10168,10170],{"className":45,"code":10169,"language":47,"meta":35,"style":35},"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",[37,10171,10172,10191,10195,10200,10220],{"__ignoreMap":35},[51,10173,10174,10176,10178,10180,10182,10185,10187,10189],{"class":53,"line":54},[51,10175,252],{"class":64},[51,10177,10065],{"class":68},[51,10179,73],{"class":72},[51,10181,7754],{"class":64},[51,10183,10184],{"class":68}," student",[51,10186,7480],{"class":64},[51,10188,1941],{"class":78},[51,10190,90],{"class":72},[51,10192,10193],{"class":53,"line":61},[51,10194,96],{"class":72},[51,10196,10197],{"class":53,"line":93},[51,10198,10199],{"class":57},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[51,10201,10202,10204,10206,10208,10210,10212,10214,10216,10218],{"class":53,"line":99},[51,10203,215],{"class":72},[51,10205,218],{"class":64},[51,10207,10087],{"class":72},[51,10209,218],{"class":64},[51,10211,10092],{"class":72},[51,10213,218],{"class":64},[51,10215,10097],{"class":72},[51,10217,218],{"class":64},[51,10219,288],{"class":72},[51,10221,10222],{"class":53,"line":120},[51,10223,132],{"class":72},[14,10225,10227],{"id":10226},"_47案例","4.7案例",[19,10229,10230],{},[22,10231,10232],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[29,10234,10236],{"className":45,"code":10235,"language":47,"meta":35,"style":35},"#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",[37,10237,10238,10244,10254,10260,10267,10271,10277,10281,10286,10292,10298,10302,10306,10312,10316,10321,10326,10339,10343,10348,10374,10378,10390,10417,10421,10433,10443,10447,10452,10481,10485,10497,10506,10533,10544,10554,10558,10562,10566,10571,10595,10599,10623,10627,10646,10672,10676,10701,10724,10748,10753,10758,10763,10772,10777,10783,10804,10810,10824,10830,10857,10866,10872,10880,10885],{"__ignoreMap":35},[51,10239,10240,10242],{"class":53,"line":54},[51,10241,1026],{"class":64},[51,10243,1029],{"class":282},[51,10245,10246,10248,10250,10252],{"class":53,"line":61},[51,10247,1034],{"class":64},[51,10249,1037],{"class":64},[51,10251,1040],{"class":68},[51,10253,179],{"class":72},[51,10255,10256,10258],{"class":53,"line":93},[51,10257,1026],{"class":64},[51,10259,8711],{"class":282},[51,10261,10262,10264],{"class":53,"line":99},[51,10263,1026],{"class":64},[51,10265,10266],{"class":282},"\u003Cctime>\n",[51,10268,10269],{"class":53,"line":120},[51,10270,9500],{"class":57},[51,10272,10273,10275],{"class":53,"line":129},[51,10274,8721],{"class":64},[51,10276,8724],{"class":68},[51,10278,10279],{"class":53,"line":206},[51,10280,96],{"class":72},[51,10282,10283],{"class":53,"line":212},[51,10284,10285],{"class":72},"    string sName;\n",[51,10287,10288,10290],{"class":53,"line":227},[51,10289,102],{"class":64},[51,10291,8759],{"class":72},[51,10293,10294,10296],{"class":53,"line":370},[51,10295,102],{"class":64},[51,10297,8771],{"class":72},[51,10299,10300],{"class":53,"line":387},[51,10301,5072],{"class":72},[51,10303,10304],{"class":53,"line":404},[51,10305,9537],{"class":57},[51,10307,10308,10310],{"class":53,"line":415},[51,10309,8721],{"class":64},[51,10311,9544],{"class":68},[51,10313,10314],{"class":53,"line":420},[51,10315,96],{"class":72},[51,10317,10318],{"class":53,"line":429},[51,10319,10320],{"class":72},"    string tName;\n",[51,10322,10323],{"class":53,"line":434},[51,10324,10325],{"class":57},"    \u002F\u002F学生数组\n",[51,10327,10328,10330,10332,10335,10337],{"class":53,"line":448},[51,10329,8857],{"class":64},[51,10331,8860],{"class":68},[51,10333,10334],{"class":72}," sArray[",[51,10336,1568],{"class":175},[51,10338,5764],{"class":72},[51,10340,10341],{"class":53,"line":462},[51,10342,5072],{"class":72},[51,10344,10345],{"class":53,"line":470},[51,10346,10347],{"class":57},"\u002F\u002F给老师和学生赋值的函数\n",[51,10349,10350,10352,10355,10357,10359,10362,10365,10368,10370,10372],{"class":53,"line":2783},[51,10351,252],{"class":64},[51,10353,10354],{"class":68}," allocateSpace",[51,10356,73],{"class":72},[51,10358,8721],{"class":64},[51,10360,10361],{"class":68}," Teacher",[51,10363,10364],{"class":78}," tArray",[51,10366,10367],{"class":72},"[],",[51,10369,65],{"class":64},[51,10371,8293],{"class":78},[51,10373,90],{"class":72},[51,10375,10376],{"class":53,"line":2788},[51,10377,96],{"class":72},[51,10379,10380,10383,10385,10388],{"class":53,"line":2817},[51,10381,10382],{"class":72},"    string nameSeed",[51,10384,108],{"class":64},[51,10386,10387],{"class":282},"\"ABCDE\"",[51,10389,179],{"class":72},[51,10391,10392,10394,10396,10398,10401,10403,10405,10408,10410,10413,10415],{"class":53,"line":2822},[51,10393,4278],{"class":64},[51,10395,2750],{"class":72},[51,10397,65],{"class":64},[51,10399,10400],{"class":72}," i ",[51,10402,108],{"class":64},[51,10404,5169],{"class":175},[51,10406,10407],{"class":72},"; i ",[51,10409,2154],{"class":64},[51,10411,10412],{"class":72}," len; i",[51,10414,3372],{"class":64},[51,10416,90],{"class":72},[51,10418,10419],{"class":53,"line":2839},[51,10420,3110],{"class":72},[51,10422,10423,10426,10428,10431],{"class":53,"line":2844},[51,10424,10425],{"class":72},"        tArray[i].tName ",[51,10427,108],{"class":64},[51,10429,10430],{"class":282}," \"Teacher_\"",[51,10432,179],{"class":72},[51,10434,10435,10437,10440],{"class":53,"line":2849},[51,10436,10425],{"class":72},[51,10438,10439],{"class":64},"+=",[51,10441,10442],{"class":72},"nameSeed[i];\n",[51,10444,10445],{"class":53,"line":2854},[51,10446,3480],{"emptyLinePlaceholder":1192},[51,10448,10449],{"class":53,"line":2868},[51,10450,10451],{"class":57},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[51,10453,10454,10456,10458,10460,10463,10465,10467,10470,10472,10474,10477,10479],{"class":53,"line":2873},[51,10455,4480],{"class":64},[51,10457,2750],{"class":72},[51,10459,65],{"class":64},[51,10461,10462],{"class":72}," j ",[51,10464,108],{"class":64},[51,10466,5169],{"class":175},[51,10468,10469],{"class":72},"; j ",[51,10471,2154],{"class":64},[51,10473,3228],{"class":175},[51,10475,10476],{"class":72},"; j",[51,10478,3372],{"class":64},[51,10480,90],{"class":72},[51,10482,10483],{"class":53,"line":3657},[51,10484,3590],{"class":72},[51,10486,10487,10490,10492,10495],{"class":53,"line":3671},[51,10488,10489],{"class":72},"            tArray[i].sArray[j].sName ",[51,10491,108],{"class":64},[51,10493,10494],{"class":282}," \"Student_\"",[51,10496,179],{"class":72},[51,10498,10499,10501,10503],{"class":53,"line":3679},[51,10500,10489],{"class":72},[51,10502,10439],{"class":64},[51,10504,10505],{"class":72}," nameSeed[j];\n",[51,10507,10508,10511,10514,10516,10518,10520,10522,10524,10526,10528,10530],{"class":53,"line":3684},[51,10509,10510],{"class":64},"            int",[51,10512,10513],{"class":72}," random",[51,10515,108],{"class":64},[51,10517,3504],{"class":68},[51,10519,3507],{"class":72},[51,10521,1577],{"class":64},[51,10523,2151],{"class":175},[51,10525,114],{"class":64},[51,10527,1649],{"class":175},[51,10529,409],{"class":72},[51,10531,10532],{"class":57},"\u002F\u002F40~99\n",[51,10534,10535,10538,10540,10542],{"class":53,"line":3690},[51,10536,10537],{"class":72},"            tArray[i].sArray[j].age ",[51,10539,108],{"class":64},[51,10541,9912],{"class":175},[51,10543,179],{"class":72},[51,10545,10546,10549,10551],{"class":53,"line":3696},[51,10547,10548],{"class":72},"            tArray[i].sArray[j].score ",[51,10550,108],{"class":64},[51,10552,10553],{"class":72}," random;\n",[51,10555,10556],{"class":53,"line":3701},[51,10557,3609],{"class":72},[51,10559,10560],{"class":53,"line":8910},[51,10561,3267],{"class":72},[51,10563,10564],{"class":53,"line":8934},[51,10565,132],{"class":72},[51,10567,10568],{"class":53,"line":8939},[51,10569,10570],{"class":57},"\u002F\u002F打印所有信息的函数\n",[51,10572,10573,10575,10578,10580,10582,10584,10586,10589,10591,10593],{"class":53,"line":8945},[51,10574,252],{"class":64},[51,10576,10577],{"class":68}," printInfo",[51,10579,73],{"class":72},[51,10581,8721],{"class":64},[51,10583,10361],{"class":68},[51,10585,10364],{"class":78},[51,10587,10588],{"class":72},"[], ",[51,10590,65],{"class":64},[51,10592,8293],{"class":78},[51,10594,90],{"class":72},[51,10596,10597],{"class":53,"line":8972},[51,10598,96],{"class":72},[51,10600,10601,10603,10605,10607,10609,10611,10613,10615,10617,10619,10621],{"class":53,"line":8977},[51,10602,4278],{"class":64},[51,10604,2750],{"class":72},[51,10606,65],{"class":64},[51,10608,10400],{"class":72},[51,10610,108],{"class":64},[51,10612,5169],{"class":175},[51,10614,10407],{"class":72},[51,10616,2154],{"class":64},[51,10618,10412],{"class":72},[51,10620,3372],{"class":64},[51,10622,90],{"class":72},[51,10624,10625],{"class":53,"line":8983},[51,10626,3110],{"class":72},[51,10628,10629,10632,10634,10637,10639,10642,10644],{"class":53,"line":8995},[51,10630,10631],{"class":72},"        cout ",[51,10633,218],{"class":64},[51,10635,10636],{"class":282}," \"Teacher: \"",[51,10638,2546],{"class":64},[51,10640,10641],{"class":72}," tArray[i].tName ",[51,10643,218],{"class":64},[51,10645,9802],{"class":72},[51,10647,10648,10650,10652,10654,10656,10658,10660,10662,10664,10666,10668,10670],{"class":53,"line":9007},[51,10649,4480],{"class":64},[51,10651,2750],{"class":72},[51,10653,65],{"class":64},[51,10655,10462],{"class":72},[51,10657,108],{"class":64},[51,10659,5169],{"class":175},[51,10661,10469],{"class":72},[51,10663,2154],{"class":64},[51,10665,3228],{"class":175},[51,10667,10476],{"class":72},[51,10669,3372],{"class":64},[51,10671,90],{"class":72},[51,10673,10674],{"class":53,"line":9019},[51,10675,3590],{"class":72},[51,10677,10679,10682,10684,10687,10689,10692,10694,10697,10699],{"class":53,"line":10678},47,[51,10680,10681],{"class":72},"            cout ",[51,10683,218],{"class":64},[51,10685,10686],{"class":282}," \"",[51,10688,2340],{"class":175},[51,10690,10691],{"class":282},"Student: \"",[51,10693,2546],{"class":64},[51,10695,10696],{"class":72}," tArray[i].sArray[j].sName",[51,10698,218],{"class":64},[51,10700,288],{"class":72},[51,10702,10704,10706,10708,10710,10712,10715,10717,10720,10722],{"class":53,"line":10703},48,[51,10705,10681],{"class":72},[51,10707,218],{"class":64},[51,10709,10686],{"class":282},[51,10711,2340],{"class":175},[51,10713,10714],{"class":282},"Age: \"",[51,10716,2546],{"class":64},[51,10718,10719],{"class":72}," tArray[i].sArray[j].age ",[51,10721,218],{"class":64},[51,10723,9802],{"class":72},[51,10725,10727,10729,10731,10733,10735,10738,10740,10743,10745],{"class":53,"line":10726},49,[51,10728,10681],{"class":72},[51,10730,218],{"class":64},[51,10732,10686],{"class":282},[51,10734,2340],{"class":175},[51,10736,10737],{"class":282},"Score: \"",[51,10739,2546],{"class":64},[51,10741,10742],{"class":72}," tArray[i].sArray[j].score ",[51,10744,218],{"class":64},[51,10746,10747],{"class":72}," endl;   \n",[51,10749,10751],{"class":53,"line":10750},50,[51,10752,3609],{"class":72},[51,10754,10756],{"class":53,"line":10755},51,[51,10757,3267],{"class":72},[51,10759,10761],{"class":53,"line":10760},52,[51,10762,132],{"class":72},[51,10764,10766,10768,10770],{"class":53,"line":10765},53,[51,10767,65],{"class":64},[51,10769,151],{"class":68},[51,10771,154],{"class":72},[51,10773,10775],{"class":53,"line":10774},54,[51,10776,96],{"class":72},[51,10778,10780],{"class":53,"line":10779},55,[51,10781,10782],{"class":57},"    \u002F\u002F随机数种子\n",[51,10784,10786,10788,10790,10792,10794,10796,10798,10800,10802],{"class":53,"line":10785},56,[51,10787,3453],{"class":68},[51,10789,3456],{"class":72},[51,10791,3459],{"class":64},[51,10793,3462],{"class":64},[51,10795,1677],{"class":72},[51,10797,3467],{"class":68},[51,10799,73],{"class":72},[51,10801,3472],{"class":175},[51,10803,3475],{"class":72},[51,10805,10807],{"class":53,"line":10806},57,[51,10808,10809],{"class":57},"    \u002F\u002F1.创建3名老师的数组\n",[51,10811,10813,10815,10817,10820,10822],{"class":53,"line":10812},58,[51,10814,8857],{"class":64},[51,10816,10361],{"class":68},[51,10818,10819],{"class":72}," tArray[",[51,10821,1328],{"class":175},[51,10823,5764],{"class":72},[51,10825,10827],{"class":53,"line":10826},59,[51,10828,10829],{"class":57},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[51,10831,10833,10835,10838,10840,10843,10846,10848,10850,10853,10855],{"class":53,"line":10832},60,[51,10834,102],{"class":64},[51,10836,10837],{"class":72}," len ",[51,10839,108],{"class":64},[51,10841,10842],{"class":64}," sizeof",[51,10844,10845],{"class":72},"(tArray) ",[51,10847,1830],{"class":64},[51,10849,10842],{"class":64},[51,10851,10852],{"class":72},"(tArray[",[51,10854,176],{"class":175},[51,10856,4933],{"class":72},[51,10858,10860,10863],{"class":53,"line":10859},61,[51,10861,10862],{"class":68},"    allocateSpace",[51,10864,10865],{"class":72},"(tArray, len);\n",[51,10867,10869],{"class":53,"line":10868},62,[51,10870,10871],{"class":57},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[51,10873,10875,10878],{"class":53,"line":10874},63,[51,10876,10877],{"class":68},"    printInfo",[51,10879,10865],{"class":72},[51,10881,10883],{"class":53,"line":10882},64,[51,10884,3480],{"emptyLinePlaceholder":1192},[51,10886,10888],{"class":53,"line":10887},65,[51,10889,132],{"class":72},[19,10891,10892],{"start":61},[22,10893,10894,10897],{},[840,10895,10896],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[40,10899,10900],{},"五名英雄信息如下：",[29,10902,10906],{"className":10903,"code":10904,"language":10905,"meta":35,"style":35},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[37,10907,10908,10926,10943,10960,10977],{"__ignoreMap":35},[51,10909,10910,10912,10915,10917,10919,10921,10924],{"class":53,"line":54},[51,10911,5991],{"class":72},[51,10913,10914],{"class":282},"\"刘备\"",[51,10916,82],{"class":72},[51,10918,2020],{"class":175},[51,10920,82],{"class":72},[51,10922,10923],{"class":282},"\"男\"",[51,10925,6004],{"class":72},[51,10927,10928,10930,10933,10935,10937,10939,10941],{"class":53,"line":61},[51,10929,5991],{"class":72},[51,10931,10932],{"class":282},"\"关羽\"",[51,10934,82],{"class":72},[51,10936,1995],{"class":175},[51,10938,82],{"class":72},[51,10940,10923],{"class":282},[51,10942,6004],{"class":72},[51,10944,10945,10947,10950,10952,10954,10956,10958],{"class":53,"line":93},[51,10946,5991],{"class":72},[51,10948,10949],{"class":282},"\"张飞\"",[51,10951,82],{"class":72},[51,10953,457],{"class":175},[51,10955,82],{"class":72},[51,10957,10923],{"class":282},[51,10959,6004],{"class":72},[51,10961,10962,10964,10967,10969,10971,10973,10975],{"class":53,"line":99},[51,10963,5991],{"class":72},[51,10965,10966],{"class":282},"\"赵云\"",[51,10968,82],{"class":72},[51,10970,1970],{"class":175},[51,10972,82],{"class":72},[51,10974,10923],{"class":282},[51,10976,6004],{"class":72},[51,10978,10979,10981,10984,10986,10988,10990,10993],{"class":53,"line":120},[51,10980,5991],{"class":72},[51,10982,10983],{"class":282},"\"貂蝉\"",[51,10985,82],{"class":72},[51,10987,1921],{"class":175},[51,10989,82],{"class":72},[51,10991,10992],{"class":282},"\"女\"",[51,10994,6004],{"class":72},[40,10996,10997],{},"代码：",[29,10999,11001],{"className":45,"code":11000,"language":47,"meta":35,"style":35},"#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",[37,11002,11003,11009,11019,11025,11032,11036,11040,11046,11051,11055,11060,11083,11087,11112,11116,11149,11154,11183,11188,11203,11229,11249,11254,11259,11263,11267,11272,11294,11298,11322,11326,11388,11392,11396,11404,11408,11413,11424,11428,11444,11460,11476,11492,11508,11512,11532,11554,11559,11572,11579,11584,11590,11595,11608,11614],{"__ignoreMap":35},[51,11004,11005,11007],{"class":53,"line":54},[51,11006,1026],{"class":64},[51,11008,1029],{"class":282},[51,11010,11011,11013,11015,11017],{"class":53,"line":61},[51,11012,1034],{"class":64},[51,11014,1037],{"class":64},[51,11016,1040],{"class":68},[51,11018,179],{"class":72},[51,11020,11021,11023],{"class":53,"line":93},[51,11022,1026],{"class":64},[51,11024,8711],{"class":282},[51,11026,11027,11029],{"class":53,"line":99},[51,11028,8721],{"class":64},[51,11030,11031],{"class":68}," Sanguo\n",[51,11033,11034],{"class":53,"line":120},[51,11035,96],{"class":72},[51,11037,11038],{"class":53,"line":129},[51,11039,8747],{"class":72},[51,11041,11042,11044],{"class":53,"line":206},[51,11043,102],{"class":64},[51,11045,8759],{"class":72},[51,11047,11048],{"class":53,"line":212},[51,11049,11050],{"class":72},"    string gender;\n",[51,11052,11053],{"class":53,"line":227},[51,11054,5072],{"class":72},[51,11056,11057],{"class":53,"line":370},[51,11058,11059],{"class":57},"\u002F\u002F定义排序函数\n",[51,11061,11062,11064,11066,11068,11071,11073,11075,11077,11079,11081],{"class":53,"line":387},[51,11063,252],{"class":64},[51,11065,8278],{"class":68},[51,11067,73],{"class":72},[51,11069,11070],{"class":68},"Sanguo",[51,11072,7480],{"class":64},[51,11074,1941],{"class":78},[51,11076,82],{"class":72},[51,11078,65],{"class":64},[51,11080,8293],{"class":78},[51,11082,90],{"class":72},[51,11084,11085],{"class":53,"line":404},[51,11086,96],{"class":72},[51,11088,11089,11091,11093,11095,11097,11099,11101,11103,11105,11108,11110],{"class":53,"line":415},[51,11090,4278],{"class":64},[51,11092,73],{"class":72},[51,11094,65],{"class":64},[51,11096,4109],{"class":72},[51,11098,108],{"class":64},[51,11100,176],{"class":175},[51,11102,4116],{"class":72},[51,11104,2154],{"class":64},[51,11106,11107],{"class":72},"len;i",[51,11109,3372],{"class":64},[51,11111,90],{"class":72},[51,11113,11114],{"class":53,"line":420},[51,11115,3110],{"class":72},[51,11117,11118,11121,11123,11125,11127,11129,11131,11133,11135,11137,11139,11141,11143,11145,11147],{"class":53,"line":429},[51,11119,11120],{"class":64},"     for",[51,11122,2750],{"class":72},[51,11124,65],{"class":64},[51,11126,4487],{"class":72},[51,11128,108],{"class":64},[51,11130,176],{"class":175},[51,11132,4494],{"class":72},[51,11134,2154],{"class":64},[51,11136,8320],{"class":72},[51,11138,1778],{"class":64},[51,11140,791],{"class":175},[51,11142,1778],{"class":64},[51,11144,4627],{"class":72},[51,11146,3372],{"class":64},[51,11148,90],{"class":72},[51,11150,11151],{"class":53,"line":434},[51,11152,11153],{"class":72},"     {\n",[51,11155,11156,11159,11162,11164,11167,11169,11172,11174,11176,11178,11180],{"class":53,"line":448},[51,11157,11158],{"class":64},"         if",[51,11160,11161],{"class":72}," ((s",[51,11163,114],{"class":64},[51,11165,11166],{"class":72},"j)->age ",[51,11168,972],{"class":64},[51,11170,11171],{"class":72}," (s",[51,11173,114],{"class":64},[51,11175,1714],{"class":72},[51,11177,114],{"class":64},[51,11179,791],{"class":175},[51,11181,11182],{"class":72},")->age)\n",[51,11184,11185],{"class":53,"line":462},[51,11186,11187],{"class":72},"         {\n",[51,11189,11190,11193,11195,11198,11200],{"class":53,"line":470},[51,11191,11192],{"class":72},"             Sanguo temp",[51,11194,8115],{"class":64},[51,11196,11197],{"class":72},"(s",[51,11199,114],{"class":64},[51,11201,11202],{"class":72},"j);\n",[51,11204,11205,11208,11210,11212,11215,11217,11219,11221,11223,11225,11227],{"class":53,"line":2783},[51,11206,11207],{"class":64},"             *",[51,11209,11197],{"class":72},[51,11211,114],{"class":64},[51,11213,11214],{"class":72},"j)",[51,11216,8115],{"class":64},[51,11218,11197],{"class":72},[51,11220,114],{"class":64},[51,11222,1714],{"class":72},[51,11224,114],{"class":64},[51,11226,791],{"class":175},[51,11228,615],{"class":72},[51,11230,11231,11233,11235,11237,11239,11241,11243,11245,11247],{"class":53,"line":2788},[51,11232,11207],{"class":64},[51,11234,11197],{"class":72},[51,11236,114],{"class":64},[51,11238,1714],{"class":72},[51,11240,114],{"class":64},[51,11242,791],{"class":175},[51,11244,1677],{"class":72},[51,11246,108],{"class":64},[51,11248,354],{"class":72},[51,11250,11251],{"class":53,"line":2817},[51,11252,11253],{"class":72},"         }\n",[51,11255,11256],{"class":53,"line":2822},[51,11257,11258],{"class":72},"     }\n",[51,11260,11261],{"class":53,"line":2839},[51,11262,3267],{"class":72},[51,11264,11265],{"class":53,"line":2844},[51,11266,132],{"class":72},[51,11268,11269],{"class":53,"line":2849},[51,11270,11271],{"class":57},"\u002F\u002F定义打印函数\n",[51,11273,11274,11276,11278,11280,11282,11284,11286,11288,11290,11292],{"class":53,"line":2854},[51,11275,252],{"class":64},[51,11277,10577],{"class":68},[51,11279,73],{"class":72},[51,11281,11070],{"class":68},[51,11283,7480],{"class":64},[51,11285,1941],{"class":78},[51,11287,82],{"class":72},[51,11289,65],{"class":64},[51,11291,8293],{"class":78},[51,11293,90],{"class":72},[51,11295,11296],{"class":53,"line":2868},[51,11297,96],{"class":72},[51,11299,11300,11302,11304,11306,11308,11310,11312,11314,11316,11318,11320],{"class":53,"line":2873},[51,11301,4278],{"class":64},[51,11303,2750],{"class":72},[51,11305,65],{"class":64},[51,11307,4109],{"class":72},[51,11309,108],{"class":64},[51,11311,176],{"class":175},[51,11313,4116],{"class":72},[51,11315,2154],{"class":64},[51,11317,11107],{"class":72},[51,11319,3372],{"class":64},[51,11321,90],{"class":72},[51,11323,11324],{"class":53,"line":3657},[51,11325,3110],{"class":72},[51,11327,11328,11330,11332,11334,11336,11339,11341,11343,11345,11348,11350,11352,11354,11357,11359,11361,11363,11366,11368,11370,11372,11375,11377,11379,11381,11384,11386],{"class":53,"line":3671},[51,11329,4528],{"class":72},[51,11331,218],{"class":64},[51,11333,1503],{"class":282},[51,11335,2340],{"class":175},[51,11337,11338],{"class":282},"姓名：\"",[51,11340,218],{"class":64},[51,11342,11197],{"class":72},[51,11344,114],{"class":64},[51,11346,11347],{"class":72},"i)->name",[51,11349,218],{"class":64},[51,11351,1503],{"class":282},[51,11353,2340],{"class":175},[51,11355,11356],{"class":282},"年龄：\"",[51,11358,218],{"class":64},[51,11360,11197],{"class":72},[51,11362,114],{"class":64},[51,11364,11365],{"class":72},"i)->age",[51,11367,218],{"class":64},[51,11369,1503],{"class":282},[51,11371,2340],{"class":175},[51,11373,11374],{"class":282},"性别：\"",[51,11376,218],{"class":64},[51,11378,11197],{"class":72},[51,11380,114],{"class":64},[51,11382,11383],{"class":72},"i)->gender",[51,11385,218],{"class":64},[51,11387,288],{"class":72},[51,11389,11390],{"class":53,"line":3679},[51,11391,3267],{"class":72},[51,11393,11394],{"class":53,"line":3684},[51,11395,132],{"class":72},[51,11397,11398,11400,11402],{"class":53,"line":3690},[51,11399,65],{"class":64},[51,11401,151],{"class":68},[51,11403,154],{"class":72},[51,11405,11406],{"class":53,"line":3696},[51,11407,96],{"class":72},[51,11409,11410],{"class":53,"line":3701},[51,11411,11412],{"class":57},"    \u002F\u002F定义结构体变量\n",[51,11414,11415,11418,11420,11422],{"class":53,"line":8910},[51,11416,11417],{"class":72},"    Sanguo s1[",[51,11419,1568],{"class":175},[51,11421,2184],{"class":72},[51,11423,5982],{"class":64},[51,11425,11426],{"class":53,"line":8934},[51,11427,3110],{"class":72},[51,11429,11430,11432,11434,11436,11438,11440,11442],{"class":53,"line":8939},[51,11431,5991],{"class":72},[51,11433,10914],{"class":282},[51,11435,82],{"class":72},[51,11437,2020],{"class":175},[51,11439,82],{"class":72},[51,11441,10923],{"class":282},[51,11443,6004],{"class":72},[51,11445,11446,11448,11450,11452,11454,11456,11458],{"class":53,"line":8945},[51,11447,5991],{"class":72},[51,11449,10932],{"class":282},[51,11451,82],{"class":72},[51,11453,1995],{"class":175},[51,11455,82],{"class":72},[51,11457,10923],{"class":282},[51,11459,6004],{"class":72},[51,11461,11462,11464,11466,11468,11470,11472,11474],{"class":53,"line":8972},[51,11463,5991],{"class":72},[51,11465,10949],{"class":282},[51,11467,82],{"class":72},[51,11469,457],{"class":175},[51,11471,82],{"class":72},[51,11473,10923],{"class":282},[51,11475,6004],{"class":72},[51,11477,11478,11480,11482,11484,11486,11488,11490],{"class":53,"line":8977},[51,11479,5991],{"class":72},[51,11481,10966],{"class":282},[51,11483,82],{"class":72},[51,11485,1970],{"class":175},[51,11487,82],{"class":72},[51,11489,10923],{"class":282},[51,11491,6004],{"class":72},[51,11493,11494,11496,11498,11500,11502,11504,11506],{"class":53,"line":8983},[51,11495,5991],{"class":72},[51,11497,10983],{"class":282},[51,11499,82],{"class":72},[51,11501,1921],{"class":175},[51,11503,82],{"class":72},[51,11505,10992],{"class":282},[51,11507,6004],{"class":72},[51,11509,11510],{"class":53,"line":8995},[51,11511,6025],{"class":72},[51,11513,11514,11516,11518,11520,11523,11525,11528,11530],{"class":53,"line":9007},[51,11515,102],{"class":64},[51,11517,8293],{"class":72},[51,11519,5279],{"class":64},[51,11521,11522],{"class":72},"(s1)",[51,11524,5285],{"class":64},[51,11526,11527],{"class":72},"(s1[",[51,11529,176],{"class":175},[51,11531,4933],{"class":72},[51,11533,11534,11537,11539,11542,11544,11547,11550,11552],{"class":53,"line":9019},[51,11535,11536],{"class":72},"    Sanguo ",[51,11538,1702],{"class":64},[51,11540,11541],{"class":72},"s ",[51,11543,108],{"class":64},[51,11545,11546],{"class":64}," &",[51,11548,11549],{"class":72},"s1[",[51,11551,176],{"class":175},[51,11553,5764],{"class":72},[51,11555,11556],{"class":53,"line":10678},[51,11557,11558],{"class":57},"    \u002F\u002F排序前：\n",[51,11560,11561,11563,11565,11568,11570],{"class":53,"line":10703},[51,11562,7491],{"class":72},[51,11564,218],{"class":64},[51,11566,11567],{"class":282}," \"排序前：\"",[51,11569,2546],{"class":64},[51,11571,9802],{"class":72},[51,11573,11574,11576],{"class":53,"line":10726},[51,11575,10877],{"class":68},[51,11577,11578],{"class":72},"(s,len);\n",[51,11580,11581],{"class":53,"line":10750},[51,11582,11583],{"class":57},"    \u002F\u002F调用排序函数\n",[51,11585,11586,11588],{"class":53,"line":10755},[51,11587,8560],{"class":68},[51,11589,11578],{"class":72},[51,11591,11592],{"class":53,"line":10760},[51,11593,11594],{"class":57},"    \u002F\u002F排序后\n",[51,11596,11597,11599,11601,11604,11606],{"class":53,"line":10765},[51,11598,7491],{"class":72},[51,11600,218],{"class":64},[51,11602,11603],{"class":282}," \"排序后：\"",[51,11605,2546],{"class":64},[51,11607,9802],{"class":72},[51,11609,11610,11612],{"class":53,"line":10774},[51,11611,10877],{"class":68},[51,11613,11578],{"class":72},[51,11615,11616],{"class":53,"line":10779},[51,11617,132],{"class":72},[40,11619,11620,11621,11623],{},"注意：使用指针时直接用传首地址**&s",[51,11622,176],{},"**",[1179,11625,11626],{},"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":35,"searchDepth":61,"depth":61,"links":11628},[11629,11630,11631,11632,11633,11634,11635],{"id":8665,"depth":61,"text":8666},{"id":9027,"depth":61,"text":9028},{"id":9296,"depth":61,"text":9297},{"id":9461,"depth":61,"text":9462},{"id":9677,"depth":61,"text":9678},{"id":9998,"depth":61,"text":9999},{"id":10226,"depth":61,"text":10227},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8654,"description":8662},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11642,"title":11643,"body":11644,"description":35,"extension":1190,"meta":12987,"navigation":1192,"path":12988,"seo":12989,"stem":12990,"__hash__":12991},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11645,"toc":12981},[11646,11649,11653,11659,11673,11678,11681,11685,11692,11698,11701,11708,11714,11719,11722,11725,11728,12292,12295,12309,12313,12318,12334,12474,12477,12483,12486,12491,12499,12607,12610,12615,12618,12623,12626,12632,12635,12978],[10,11647,11643],{"id":11648},"_5程序内存模型",[14,11650,11652],{"id":11651},"_51内存分区模型","5.1内存分区模型",[40,11654,11655,11656],{},"C++程序在执行时，将内存大方向划分为",[840,11657,11658],{},"4个区域",[1000,11660,11661,11664,11667,11670],{},[22,11662,11663],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[22,11665,11666],{},"全局区：存放全局变量和静态变量以及常量",[22,11668,11669],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[22,11671,11672],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[40,11674,11675],{},[840,11676,11677],{},"内存四区意义：",[40,11679,11680],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[1233,11682,11684],{"id":11683},"_511程序运行前","5.1.1程序运行前",[40,11686,11687,11688,11691],{},"​\t在程序编译后，生成了exe可执行程序，",[840,11689,11690],{},"未执行该程序前","分为两个区域",[40,11693,11694,11695],{},"​\t",[840,11696,11697],{},"代码区：",[40,11699,11700],{},"​\t\t存放 CPU 执行的机器指令",[40,11702,11703,11704,11707],{},"​\t\t代码区是",[840,11705,11706],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[40,11709,11703,11710,11713],{},[840,11711,11712],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[40,11715,11694,11716],{},[840,11717,11718],{},"全局区：",[40,11720,11721],{},"​\t\t全局变量和静态变量存放在此.",[40,11723,11724],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[40,11726,11727],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[29,11729,11731],{"className":45,"code":11730,"language":47,"meta":35,"style":35},"\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",[37,11732,11733,11738,11751,11764,11768,11773,11788,11803,11807,11816,11820,11825,11838,11851,11855,11860,11886,11912,11916,11943,11969,11973,11978,11994,12009,12013,12039,12065,12069,12094,12119,12123,12149,12175,12179,12195,12210,12236,12262,12266,12276,12280,12288],{"__ignoreMap":35},[51,11734,11735],{"class":53,"line":54},[51,11736,11737],{"class":57},"\u002F\u002F全局变量\n",[51,11739,11740,11742,11745,11747,11749],{"class":53,"line":61},[51,11741,65],{"class":64},[51,11743,11744],{"class":72}," g_a ",[51,11746,108],{"class":64},[51,11748,3118],{"class":175},[51,11750,179],{"class":72},[51,11752,11753,11755,11758,11760,11762],{"class":53,"line":93},[51,11754,65],{"class":64},[51,11756,11757],{"class":72}," g_b ",[51,11759,108],{"class":64},[51,11761,3118],{"class":175},[51,11763,179],{"class":72},[51,11765,11766],{"class":53,"line":99},[51,11767,3480],{"emptyLinePlaceholder":1192},[51,11769,11770],{"class":53,"line":120},[51,11771,11772],{"class":57},"\u002F\u002F全局常量\n",[51,11774,11775,11777,11779,11782,11784,11786],{"class":53,"line":129},[51,11776,7754],{"class":64},[51,11778,3462],{"class":64},[51,11780,11781],{"class":72}," c_g_a ",[51,11783,108],{"class":64},[51,11785,3118],{"class":175},[51,11787,179],{"class":72},[51,11789,11790,11792,11794,11797,11799,11801],{"class":53,"line":206},[51,11791,7754],{"class":64},[51,11793,3462],{"class":64},[51,11795,11796],{"class":72}," c_g_b ",[51,11798,108],{"class":64},[51,11800,3118],{"class":175},[51,11802,179],{"class":72},[51,11804,11805],{"class":53,"line":212},[51,11806,3480],{"emptyLinePlaceholder":1192},[51,11808,11809,11811,11813],{"class":53,"line":227},[51,11810,65],{"class":64},[51,11812,151],{"class":68},[51,11814,11815],{"class":72},"() {\n",[51,11817,11818],{"class":53,"line":370},[51,11819,3480],{"emptyLinePlaceholder":1192},[51,11821,11822],{"class":53,"line":387},[51,11823,11824],{"class":57},"    \u002F\u002F局部变量\n",[51,11826,11827,11829,11832,11834,11836],{"class":53,"line":404},[51,11828,102],{"class":64},[51,11830,11831],{"class":72}," a ",[51,11833,108],{"class":64},[51,11835,3118],{"class":175},[51,11837,179],{"class":72},[51,11839,11840,11842,11845,11847,11849],{"class":53,"line":415},[51,11841,102],{"class":64},[51,11843,11844],{"class":72}," b ",[51,11846,108],{"class":64},[51,11848,3118],{"class":175},[51,11850,179],{"class":72},[51,11852,11853],{"class":53,"line":420},[51,11854,3480],{"emptyLinePlaceholder":1192},[51,11856,11857],{"class":53,"line":429},[51,11858,11859],{"class":57},"    \u002F\u002F打印地址\n",[51,11861,11862,11864,11866,11869,11871,11873,11875,11877,11879,11882,11884],{"class":53,"line":434},[51,11863,7491],{"class":72},[51,11865,218],{"class":64},[51,11867,11868],{"class":282}," \"局部变量a地址为： \"",[51,11870,2546],{"class":64},[51,11872,2750],{"class":72},[51,11874,65],{"class":64},[51,11876,1677],{"class":72},[51,11878,1602],{"class":64},[51,11880,11881],{"class":72},"a ",[51,11883,218],{"class":64},[51,11885,9802],{"class":72},[51,11887,11888,11890,11892,11895,11897,11899,11901,11903,11905,11908,11910],{"class":53,"line":448},[51,11889,7491],{"class":72},[51,11891,218],{"class":64},[51,11893,11894],{"class":282}," \"局部变量b地址为： \"",[51,11896,2546],{"class":64},[51,11898,2750],{"class":72},[51,11900,65],{"class":64},[51,11902,1677],{"class":72},[51,11904,1602],{"class":64},[51,11906,11907],{"class":72},"b ",[51,11909,218],{"class":64},[51,11911,9802],{"class":72},[51,11913,11914],{"class":53,"line":462},[51,11915,3480],{"emptyLinePlaceholder":1192},[51,11917,11918,11920,11922,11925,11927,11930,11932,11934,11936,11939,11941],{"class":53,"line":470},[51,11919,7491],{"class":72},[51,11921,218],{"class":64},[51,11923,11924],{"class":282}," \"全局变量g_a地址为： \"",[51,11926,2546],{"class":64},[51,11928,11929],{"class":72},"  (",[51,11931,65],{"class":64},[51,11933,1677],{"class":72},[51,11935,1602],{"class":64},[51,11937,11938],{"class":72},"g_a ",[51,11940,218],{"class":64},[51,11942,9802],{"class":72},[51,11944,11945,11947,11949,11952,11954,11956,11958,11960,11962,11965,11967],{"class":53,"line":2783},[51,11946,7491],{"class":72},[51,11948,218],{"class":64},[51,11950,11951],{"class":282}," \"全局变量g_b地址为： \"",[51,11953,2546],{"class":64},[51,11955,11929],{"class":72},[51,11957,65],{"class":64},[51,11959,1677],{"class":72},[51,11961,1602],{"class":64},[51,11963,11964],{"class":72},"g_b ",[51,11966,218],{"class":64},[51,11968,9802],{"class":72},[51,11970,11971],{"class":53,"line":2788},[51,11972,3480],{"emptyLinePlaceholder":1192},[51,11974,11975],{"class":53,"line":2817},[51,11976,11977],{"class":57},"    \u002F\u002F静态变量\n",[51,11979,11980,11983,11985,11988,11990,11992],{"class":53,"line":2822},[51,11981,11982],{"class":64},"    static",[51,11984,3462],{"class":64},[51,11986,11987],{"class":72}," s_a ",[51,11989,108],{"class":64},[51,11991,3118],{"class":175},[51,11993,179],{"class":72},[51,11995,11996,11998,12000,12003,12005,12007],{"class":53,"line":2839},[51,11997,11982],{"class":64},[51,11999,3462],{"class":64},[51,12001,12002],{"class":72}," s_b ",[51,12004,108],{"class":64},[51,12006,3118],{"class":175},[51,12008,179],{"class":72},[51,12010,12011],{"class":53,"line":2844},[51,12012,3480],{"emptyLinePlaceholder":1192},[51,12014,12015,12017,12019,12022,12024,12026,12028,12030,12032,12035,12037],{"class":53,"line":2849},[51,12016,7491],{"class":72},[51,12018,218],{"class":64},[51,12020,12021],{"class":282}," \"静态变量s_a地址为： \"",[51,12023,2546],{"class":64},[51,12025,2750],{"class":72},[51,12027,65],{"class":64},[51,12029,1677],{"class":72},[51,12031,1602],{"class":64},[51,12033,12034],{"class":72},"s_a ",[51,12036,218],{"class":64},[51,12038,9802],{"class":72},[51,12040,12041,12043,12045,12048,12050,12052,12054,12056,12058,12061,12063],{"class":53,"line":2854},[51,12042,7491],{"class":72},[51,12044,218],{"class":64},[51,12046,12047],{"class":282}," \"静态变量s_b地址为： \"",[51,12049,2546],{"class":64},[51,12051,2750],{"class":72},[51,12053,65],{"class":64},[51,12055,1677],{"class":72},[51,12057,1602],{"class":64},[51,12059,12060],{"class":72},"s_b ",[51,12062,218],{"class":64},[51,12064,9802],{"class":72},[51,12066,12067],{"class":53,"line":2868},[51,12068,3480],{"emptyLinePlaceholder":1192},[51,12070,12071,12073,12075,12078,12080,12082,12084,12086,12088,12090,12092],{"class":53,"line":2873},[51,12072,7491],{"class":72},[51,12074,218],{"class":64},[51,12076,12077],{"class":282}," \"字符串常量地址为： \"",[51,12079,2546],{"class":64},[51,12081,2750],{"class":72},[51,12083,65],{"class":64},[51,12085,1677],{"class":72},[51,12087,1602],{"class":64},[51,12089,2301],{"class":282},[51,12091,2546],{"class":64},[51,12093,9802],{"class":72},[51,12095,12096,12098,12100,12102,12104,12106,12108,12110,12112,12115,12117],{"class":53,"line":3657},[51,12097,7491],{"class":72},[51,12099,218],{"class":64},[51,12101,12077],{"class":282},[51,12103,2546],{"class":64},[51,12105,2750],{"class":72},[51,12107,65],{"class":64},[51,12109,1677],{"class":72},[51,12111,1602],{"class":64},[51,12113,12114],{"class":282},"\"hello world1\"",[51,12116,2546],{"class":64},[51,12118,9802],{"class":72},[51,12120,12121],{"class":53,"line":3671},[51,12122,3480],{"emptyLinePlaceholder":1192},[51,12124,12125,12127,12129,12132,12134,12136,12138,12140,12142,12145,12147],{"class":53,"line":3679},[51,12126,7491],{"class":72},[51,12128,218],{"class":64},[51,12130,12131],{"class":282}," \"全局常量c_g_a地址为： \"",[51,12133,2546],{"class":64},[51,12135,2750],{"class":72},[51,12137,65],{"class":64},[51,12139,1677],{"class":72},[51,12141,1602],{"class":64},[51,12143,12144],{"class":72},"c_g_a ",[51,12146,218],{"class":64},[51,12148,9802],{"class":72},[51,12150,12151,12153,12155,12158,12160,12162,12164,12166,12168,12171,12173],{"class":53,"line":3684},[51,12152,7491],{"class":72},[51,12154,218],{"class":64},[51,12156,12157],{"class":282}," \"全局常量c_g_b地址为： \"",[51,12159,2546],{"class":64},[51,12161,2750],{"class":72},[51,12163,65],{"class":64},[51,12165,1677],{"class":72},[51,12167,1602],{"class":64},[51,12169,12170],{"class":72},"c_g_b ",[51,12172,218],{"class":64},[51,12174,9802],{"class":72},[51,12176,12177],{"class":53,"line":3690},[51,12178,3480],{"emptyLinePlaceholder":1192},[51,12180,12181,12184,12186,12189,12191,12193],{"class":53,"line":3696},[51,12182,12183],{"class":64},"    const",[51,12185,3462],{"class":64},[51,12187,12188],{"class":72}," c_l_a ",[51,12190,108],{"class":64},[51,12192,3118],{"class":175},[51,12194,179],{"class":72},[51,12196,12197,12199,12201,12204,12206,12208],{"class":53,"line":3701},[51,12198,12183],{"class":64},[51,12200,3462],{"class":64},[51,12202,12203],{"class":72}," c_l_b ",[51,12205,108],{"class":64},[51,12207,3118],{"class":175},[51,12209,179],{"class":72},[51,12211,12212,12214,12216,12219,12221,12223,12225,12227,12229,12232,12234],{"class":53,"line":8910},[51,12213,7491],{"class":72},[51,12215,218],{"class":64},[51,12217,12218],{"class":282}," \"局部常量c_l_a地址为： \"",[51,12220,2546],{"class":64},[51,12222,2750],{"class":72},[51,12224,65],{"class":64},[51,12226,1677],{"class":72},[51,12228,1602],{"class":64},[51,12230,12231],{"class":72},"c_l_a ",[51,12233,218],{"class":64},[51,12235,9802],{"class":72},[51,12237,12238,12240,12242,12245,12247,12249,12251,12253,12255,12258,12260],{"class":53,"line":8934},[51,12239,7491],{"class":72},[51,12241,218],{"class":64},[51,12243,12244],{"class":282}," \"局部常量c_l_b地址为： \"",[51,12246,2546],{"class":64},[51,12248,2750],{"class":72},[51,12250,65],{"class":64},[51,12252,1677],{"class":72},[51,12254,1602],{"class":64},[51,12256,12257],{"class":72},"c_l_b ",[51,12259,218],{"class":64},[51,12261,9802],{"class":72},[51,12263,12264],{"class":53,"line":8939},[51,12265,3480],{"emptyLinePlaceholder":1192},[51,12267,12268,12270,12272,12274],{"class":53,"line":8945},[51,12269,3383],{"class":68},[51,12271,73],{"class":72},[51,12273,3388],{"class":282},[51,12275,615],{"class":72},[51,12277,12278],{"class":53,"line":8972},[51,12279,3480],{"emptyLinePlaceholder":1192},[51,12281,12282,12284,12286],{"class":53,"line":8977},[51,12283,123],{"class":64},[51,12285,5169],{"class":175},[51,12287,179],{"class":72},[51,12289,12290],{"class":53,"line":8983},[51,12291,132],{"class":72},[40,12293,12294],{},"总结：",[1000,12296,12297,12300,12303,12306],{},[22,12298,12299],{},"c++中程序运行前分为全局区和代码区",[22,12301,12302],{},"代码区特点是共享和只读",[22,12304,12305],{},"全局区中存放全局变量、静态变量、常量",[22,12307,12308],{},"常量区中存放const修饰的全局常量和字符串常量",[1233,12310,12312],{"id":12311},"_512程序运行后","5.1.2程序运行后",[19,12314,12315],{},[22,12316,12317],{},"栈区：",[1000,12319,12320,12327],{},[22,12321,12322,12323,12326],{},"由编译器自动分配释放, 存放",[840,12324,12325],{},"函数的参数值,局部变量","等",[22,12328,12329,12330,12333],{},"注意事项：",[840,12331,12332],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[29,12335,12337],{"className":45,"code":12336,"language":47,"meta":35,"style":35},"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",[37,12338,12339,12350,12354,12369,12381,12385,12389,12397,12402,12417,12435,12452,12462,12470],{"__ignoreMap":35},[51,12340,12341,12343,12345,12348],{"class":53,"line":54},[51,12342,65],{"class":64},[51,12344,7480],{"class":64},[51,12346,12347],{"class":68}," func",[51,12349,154],{"class":72},[51,12351,12352],{"class":53,"line":61},[51,12353,96],{"class":72},[51,12355,12356,12358,12360,12362,12364,12366],{"class":53,"line":93},[51,12357,102],{"class":64},[51,12359,11831],{"class":72},[51,12361,108],{"class":64},[51,12363,3118],{"class":175},[51,12365,409],{"class":72},[51,12367,12368],{"class":57}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[51,12370,12371,12373,12375,12378],{"class":53,"line":99},[51,12372,123],{"class":64},[51,12374,11546],{"class":64},[51,12376,12377],{"class":72},"a;",[51,12379,12380],{"class":57}," \u002F\u002F放回局部变量的地址\n",[51,12382,12383],{"class":53,"line":120},[51,12384,132],{"class":72},[51,12386,12387],{"class":53,"line":129},[51,12388,3480],{"emptyLinePlaceholder":1192},[51,12390,12391,12393,12395],{"class":53,"line":206},[51,12392,65],{"class":64},[51,12394,151],{"class":68},[51,12396,11815],{"class":72},[51,12398,12399],{"class":53,"line":212},[51,12400,12401],{"class":57},"    \u002F\u002F接受func的返回值\n",[51,12403,12404,12406,12408,12411,12413,12415],{"class":53,"line":227},[51,12405,102],{"class":64},[51,12407,7480],{"class":64},[51,12409,12410],{"class":72},"p ",[51,12412,108],{"class":64},[51,12414,12347],{"class":68},[51,12416,541],{"class":72},[51,12418,12419,12421,12423,12425,12427,12429,12432],{"class":53,"line":370},[51,12420,7491],{"class":72},[51,12422,218],{"class":64},[51,12424,7480],{"class":64},[51,12426,12410],{"class":72},[51,12428,218],{"class":64},[51,12430,12431],{"class":72}," endl;",[51,12433,12434],{"class":57}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[51,12436,12437,12439,12441,12443,12445,12447,12449],{"class":53,"line":387},[51,12438,7491],{"class":72},[51,12440,218],{"class":64},[51,12442,7480],{"class":64},[51,12444,12410],{"class":72},[51,12446,218],{"class":64},[51,12448,12431],{"class":72},[51,12450,12451],{"class":57}," \u002F\u002F第二次这个数据不再保留\n",[51,12453,12454,12456,12458,12460],{"class":53,"line":404},[51,12455,3383],{"class":68},[51,12457,73],{"class":72},[51,12459,3388],{"class":282},[51,12461,615],{"class":72},[51,12463,12464,12466,12468],{"class":53,"line":415},[51,12465,123],{"class":64},[51,12467,5169],{"class":175},[51,12469,179],{"class":72},[51,12471,12472],{"class":53,"line":420},[51,12473,132],{"class":72},[40,12475,12476],{},"输出结果：",[40,12478,12479],{},[2564,12480],{"alt":12481,"src":12482},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[40,12484,12485],{},"总结：不要返回局部变量的地址",[19,12487,12488],{"start":61},[22,12489,12490],{},"堆区",[1000,12492,12493,12496],{},[22,12494,12495],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[22,12497,12498],{},"在c++中主要利用new在堆区开辟内存",[29,12500,12502],{"className":45,"code":12501,"language":47,"meta":35,"style":35},"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",[37,12503,12504,12519,12523,12528,12549,12556,12560,12568,12572,12577,12591,12603],{"__ignoreMap":35},[51,12505,12506,12508,12511,12514,12516],{"class":53,"line":54},[51,12507,65],{"class":64},[51,12509,12510],{"class":64},"  *",[51,12512,12513],{"class":68},"func",[51,12515,3507],{"class":72},[51,12517,12518],{"class":57},"  \u002F\u002F函数返回指针\n",[51,12520,12521],{"class":53,"line":61},[51,12522,96],{"class":72},[51,12524,12525],{"class":53,"line":93},[51,12526,12527],{"class":57},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[51,12529,12530,12532,12534,12536,12538,12541,12543,12545,12547],{"class":53,"line":99},[51,12531,5223],{"class":64},[51,12533,7480],{"class":64},[51,12535,40],{"class":72},[51,12537,108],{"class":64},[51,12539,12540],{"class":64}," new",[51,12542,3462],{"class":64},[51,12544,73],{"class":72},[51,12546,443],{"class":175},[51,12548,615],{"class":72},[51,12550,12551,12553],{"class":53,"line":120},[51,12552,5455],{"class":64},[51,12554,12555],{"class":72}," p;\n",[51,12557,12558],{"class":53,"line":129},[51,12559,132],{"class":72},[51,12561,12562,12564,12566],{"class":53,"line":206},[51,12563,65],{"class":64},[51,12565,151],{"class":68},[51,12567,154],{"class":72},[51,12569,12570],{"class":53,"line":212},[51,12571,96],{"class":72},[51,12573,12574],{"class":53,"line":227},[51,12575,12576],{"class":57},"    \u002F\u002F在堆区开辟数据\n",[51,12578,12579,12581,12583,12585,12587,12589],{"class":53,"line":370},[51,12580,102],{"class":64},[51,12582,7480],{"class":64},[51,12584,40],{"class":72},[51,12586,108],{"class":64},[51,12588,12513],{"class":68},[51,12590,541],{"class":72},[51,12592,12593,12595,12597,12599,12601],{"class":53,"line":387},[51,12594,215],{"class":72},[51,12596,7381],{"class":64},[51,12598,40],{"class":72},[51,12600,218],{"class":64},[51,12602,288],{"class":72},[51,12604,12605],{"class":53,"line":404},[51,12606,132],{"class":72},[40,12608,12609],{},"图片展示：",[40,12611,12612],{},[2564,12613],{"alt":12481,"src":12614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[40,12616,12617],{},"堆区内存由程序员管生死！！！",[19,12619,12620],{"start":93},[22,12621,12622],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[40,12624,12625],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[40,12627,12628,12629],{},"​语法：",[37,12630,12631],{}," new 数据类型",[40,12633,12634],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[29,12636,12638],{"className":45,"code":12637,"language":47,"meta":35,"style":35},"\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",[37,12639,12640,12645,12655,12659,12664,12669,12691,12695,12703,12707,12721,12733,12745,12757,12762,12767,12778,12782,12787,12795,12799,12804,12826,12852,12856,12874,12878,12904,12908,12920,12924,12929,12934,12942,12946,12950,12958,12962,12968,12974],{"__ignoreMap":35},[51,12641,12642],{"class":53,"line":54},[51,12643,12644],{"class":57},"\u002F\u002F1.new的基本语法\n",[51,12646,12647,12649,12651,12653],{"class":53,"line":61},[51,12648,65],{"class":64},[51,12650,7480],{"class":64},[51,12652,12513],{"class":68},[51,12654,154],{"class":72},[51,12656,12657],{"class":53,"line":93},[51,12658,96],{"class":72},[51,12660,12661],{"class":53,"line":99},[51,12662,12663],{"class":57},"    \u002F\u002F在堆区创建整型数据\n",[51,12665,12666],{"class":53,"line":120},[51,12667,12668],{"class":57},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[51,12670,12671,12673,12675,12677,12680,12682,12684,12686,12688],{"class":53,"line":129},[51,12672,102],{"class":64},[51,12674,7480],{"class":64},[51,12676,40],{"class":72},[51,12678,12679],{"class":64},"=new",[51,12681,3462],{"class":64},[51,12683,73],{"class":72},[51,12685,443],{"class":175},[51,12687,879],{"class":72},[51,12689,12690],{"class":57},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[51,12692,12693],{"class":53,"line":206},[51,12694,132],{"class":72},[51,12696,12697,12699,12701],{"class":53,"line":212},[51,12698,252],{"class":64},[51,12700,493],{"class":68},[51,12702,154],{"class":72},[51,12704,12705],{"class":53,"line":227},[51,12706,96],{"class":72},[51,12708,12709,12711,12713,12715,12717,12719],{"class":53,"line":370},[51,12710,102],{"class":64},[51,12712,7480],{"class":64},[51,12714,40],{"class":72},[51,12716,108],{"class":64},[51,12718,12513],{"class":68},[51,12720,541],{"class":72},[51,12722,12723,12725,12727,12729,12731],{"class":53,"line":387},[51,12724,215],{"class":72},[51,12726,7381],{"class":64},[51,12728,40],{"class":72},[51,12730,218],{"class":64},[51,12732,288],{"class":72},[51,12734,12735,12737,12739,12741,12743],{"class":53,"line":404},[51,12736,215],{"class":72},[51,12738,7381],{"class":64},[51,12740,40],{"class":72},[51,12742,218],{"class":64},[51,12744,288],{"class":72},[51,12746,12747,12749,12751,12753,12755],{"class":53,"line":415},[51,12748,215],{"class":72},[51,12750,7381],{"class":64},[51,12752,40],{"class":72},[51,12754,218],{"class":64},[51,12756,288],{"class":72},[51,12758,12759],{"class":53,"line":420},[51,12760,12761],{"class":57},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[51,12763,12764],{"class":53,"line":429},[51,12765,12766],{"class":57},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[51,12768,12769,12772,12775],{"class":53,"line":434},[51,12770,12771],{"class":64},"    delete",[51,12773,12774],{"class":72}," p;",[51,12776,12777],{"class":57},"\u002F\u002F删除这块地址\n",[51,12779,12780],{"class":53,"line":448},[51,12781,132],{"class":72},[51,12783,12784],{"class":53,"line":462},[51,12785,12786],{"class":57},"\u002F\u002F2.在堆区利用new开辟数组\n",[51,12788,12789,12791,12793],{"class":53,"line":470},[51,12790,252],{"class":64},[51,12792,562],{"class":68},[51,12794,154],{"class":72},[51,12796,12797],{"class":53,"line":2783},[51,12798,96],{"class":72},[51,12800,12801],{"class":53,"line":2788},[51,12802,12803],{"class":57},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[51,12805,12806,12808,12810,12812,12814,12816,12818,12820,12823],{"class":53,"line":2817},[51,12807,102],{"class":64},[51,12809,7480],{"class":64},[51,12811,4957],{"class":72},[51,12813,12679],{"class":64},[51,12815,3462],{"class":64},[51,12817,2134],{"class":72},[51,12819,443],{"class":175},[51,12821,12822],{"class":72},"];",[51,12824,12825],{"class":57},"\u002F\u002F10代表数组有10个元素\n",[51,12827,12828,12830,12832,12834,12836,12838,12840,12842,12844,12846,12848,12850],{"class":53,"line":2822},[51,12829,4278],{"class":64},[51,12831,2750],{"class":72},[51,12833,65],{"class":64},[51,12835,4109],{"class":72},[51,12837,108],{"class":64},[51,12839,176],{"class":175},[51,12841,4116],{"class":72},[51,12843,2154],{"class":64},[51,12845,443],{"class":175},[51,12847,4116],{"class":72},[51,12849,3372],{"class":64},[51,12851,90],{"class":72},[51,12853,12854],{"class":53,"line":2839},[51,12855,3110],{"class":72},[51,12857,12858,12861,12863,12865,12867,12869,12871],{"class":53,"line":2844},[51,12859,12860],{"class":72},"        arr[i]",[51,12862,108],{"class":64},[51,12864,1689],{"class":72},[51,12866,114],{"class":64},[51,12868,612],{"class":175},[51,12870,409],{"class":72},[51,12872,12873],{"class":57},"\u002F\u002F给10个元素赋值100～109\n",[51,12875,12876],{"class":53,"line":2849},[51,12877,3267],{"class":72},[51,12879,12880,12882,12884,12886,12888,12890,12892,12894,12896,12898,12900,12902],{"class":53,"line":2854},[51,12881,4278],{"class":64},[51,12883,2750],{"class":72},[51,12885,65],{"class":64},[51,12887,4109],{"class":72},[51,12889,108],{"class":64},[51,12891,176],{"class":175},[51,12893,4116],{"class":72},[51,12895,2154],{"class":64},[51,12897,443],{"class":175},[51,12899,4116],{"class":72},[51,12901,3372],{"class":64},[51,12903,90],{"class":72},[51,12905,12906],{"class":53,"line":2868},[51,12907,3110],{"class":72},[51,12909,12910,12912,12914,12916,12918],{"class":53,"line":2873},[51,12911,4528],{"class":72},[51,12913,218],{"class":64},[51,12915,5428],{"class":72},[51,12917,218],{"class":64},[51,12919,288],{"class":72},[51,12921,12922],{"class":53,"line":3657},[51,12923,3267],{"class":72},[51,12925,12926],{"class":53,"line":3671},[51,12927,12928],{"class":57},"    \u002F\u002F释放堆区数组\n",[51,12930,12931],{"class":53,"line":3679},[51,12932,12933],{"class":57},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[51,12935,12936,12939],{"class":53,"line":3684},[51,12937,12938],{"class":64},"    delete[]",[51,12940,12941],{"class":72}," arr;\n",[51,12943,12944],{"class":53,"line":3690},[51,12945,132],{"class":72},[51,12947,12948],{"class":53,"line":3696},[51,12949,3480],{"emptyLinePlaceholder":1192},[51,12951,12952,12954,12956],{"class":53,"line":3701},[51,12953,65],{"class":64},[51,12955,151],{"class":68},[51,12957,154],{"class":72},[51,12959,12960],{"class":53,"line":8910},[51,12961,96],{"class":72},[51,12963,12964,12966],{"class":53,"line":8934},[51,12965,538],{"class":68},[51,12967,541],{"class":72},[51,12969,12970,12972],{"class":53,"line":8939},[51,12971,607],{"class":68},[51,12973,541],{"class":72},[51,12975,12976],{"class":53,"line":8945},[51,12977,132],{"class":72},[1179,12979,12980],{},"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":35,"searchDepth":61,"depth":61,"links":12982},[12983],{"id":11651,"depth":61,"text":11652,"children":12984},[12985,12986],{"id":11683,"depth":93,"text":11684},{"id":12311,"depth":93,"text":12312},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11643,"description":35},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12993,"title":12994,"body":12995,"description":35,"extension":1190,"meta":14476,"navigation":1192,"path":14477,"seo":14478,"stem":14479,"__hash__":14480},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12996,"toc":14468},[12997,13000,13004,13007,13010,13179,13183,13188,13205,13210,13362,13366,13369,13372,13766,13770,13773,13778,13781,14093,14097,14103,14263,14265,14273,14277,14280,14287,14465],[10,12998,12994],{"id":12999},"_6引用",[14,13001,13003],{"id":13002},"_61引用基本用法","6.1引用基本用法",[40,13005,13006],{},"引用的本质：给变量起别名",[40,13008,13009],{},"语法：数据类型 &别名=原名",[29,13011,13013],{"className":45,"code":13012,"language":47,"meta":35,"style":35},"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",[37,13014,13015,13023,13027,13039,13051,13055,13074,13093,13097,13108,13112,13131,13149,13153,13163,13167,13175],{"__ignoreMap":35},[51,13016,13017,13019,13021],{"class":53,"line":54},[51,13018,65],{"class":64},[51,13020,151],{"class":68},[51,13022,11815],{"class":72},[51,13024,13025],{"class":53,"line":61},[51,13026,3480],{"emptyLinePlaceholder":1192},[51,13028,13029,13031,13033,13035,13037],{"class":53,"line":93},[51,13030,102],{"class":64},[51,13032,11831],{"class":72},[51,13034,108],{"class":64},[51,13036,3118],{"class":175},[51,13038,179],{"class":72},[51,13040,13041,13043,13045,13047,13049],{"class":53,"line":99},[51,13042,102],{"class":64},[51,13044,11546],{"class":64},[51,13046,11907],{"class":72},[51,13048,108],{"class":64},[51,13050,763],{"class":72},[51,13052,13053],{"class":53,"line":120},[51,13054,3480],{"emptyLinePlaceholder":1192},[51,13056,13057,13059,13061,13064,13066,13068,13070,13072],{"class":53,"line":129},[51,13058,7491],{"class":72},[51,13060,218],{"class":64},[51,13062,13063],{"class":282}," \"a = \"",[51,13065,2546],{"class":64},[51,13067,11831],{"class":72},[51,13069,218],{"class":64},[51,13071,12431],{"class":72},[51,13073,8230],{"class":57},[51,13075,13076,13078,13080,13083,13085,13087,13089,13091],{"class":53,"line":206},[51,13077,7491],{"class":72},[51,13079,218],{"class":64},[51,13081,13082],{"class":282}," \"b = \"",[51,13084,2546],{"class":64},[51,13086,11844],{"class":72},[51,13088,218],{"class":64},[51,13090,12431],{"class":72},[51,13092,8230],{"class":57},[51,13094,13095],{"class":53,"line":212},[51,13096,3480],{"emptyLinePlaceholder":1192},[51,13098,13099,13102,13104,13106],{"class":53,"line":227},[51,13100,13101],{"class":72},"    b ",[51,13103,108],{"class":64},[51,13105,661],{"class":175},[51,13107,179],{"class":72},[51,13109,13110],{"class":53,"line":370},[51,13111,3480],{"emptyLinePlaceholder":1192},[51,13113,13114,13116,13118,13120,13122,13124,13126,13128],{"class":53,"line":387},[51,13115,7491],{"class":72},[51,13117,218],{"class":64},[51,13119,13063],{"class":282},[51,13121,2546],{"class":64},[51,13123,11831],{"class":72},[51,13125,218],{"class":64},[51,13127,12431],{"class":72},[51,13129,13130],{"class":57},"\u002F\u002F100\n",[51,13132,13133,13135,13137,13139,13141,13143,13145,13147],{"class":53,"line":404},[51,13134,7491],{"class":72},[51,13136,218],{"class":64},[51,13138,13082],{"class":282},[51,13140,2546],{"class":64},[51,13142,11844],{"class":72},[51,13144,218],{"class":64},[51,13146,12431],{"class":72},[51,13148,13130],{"class":57},[51,13150,13151],{"class":53,"line":415},[51,13152,3480],{"emptyLinePlaceholder":1192},[51,13154,13155,13157,13159,13161],{"class":53,"line":420},[51,13156,3383],{"class":68},[51,13158,73],{"class":72},[51,13160,3388],{"class":282},[51,13162,615],{"class":72},[51,13164,13165],{"class":53,"line":429},[51,13166,3480],{"emptyLinePlaceholder":1192},[51,13168,13169,13171,13173],{"class":53,"line":434},[51,13170,123],{"class":64},[51,13172,5169],{"class":175},[51,13174,179],{"class":72},[51,13176,13177],{"class":53,"line":448},[51,13178,132],{"class":72},[14,13180,13182],{"id":13181},"_62引用的注意事项","6.2引用的注意事项",[19,13184,13185],{},[22,13186,13187],{},"引用必须要初始化",[29,13189,13191],{"className":45,"code":13190,"language":47,"meta":35,"style":35},"int &b;\u002F\u002F非常错误！\n",[37,13192,13193],{"__ignoreMap":35},[51,13194,13195,13197,13199,13202],{"class":53,"line":54},[51,13196,65],{"class":64},[51,13198,11546],{"class":64},[51,13200,13201],{"class":72},"b;",[51,13203,13204],{"class":57},"\u002F\u002F非常错误！\n",[19,13206,13207],{"start":61},[22,13208,13209],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[29,13211,13213],{"className":45,"code":13212,"language":47,"meta":35,"style":35},"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",[37,13214,13215,13223,13235,13247,13255,13271,13284,13302,13320,13340,13350,13358],{"__ignoreMap":35},[51,13216,13217,13219,13221],{"class":53,"line":54},[51,13218,65],{"class":64},[51,13220,151],{"class":68},[51,13222,11815],{"class":72},[51,13224,13225,13227,13229,13231,13233],{"class":53,"line":61},[51,13226,102],{"class":64},[51,13228,11831],{"class":72},[51,13230,108],{"class":64},[51,13232,3118],{"class":175},[51,13234,179],{"class":72},[51,13236,13237,13239,13241,13243,13245],{"class":53,"line":93},[51,13238,102],{"class":64},[51,13240,11844],{"class":72},[51,13242,108],{"class":64},[51,13244,9912],{"class":175},[51,13246,179],{"class":72},[51,13248,13249,13252],{"class":53,"line":99},[51,13250,13251],{"class":57},"    \u002F\u002Fint &c;",[51,13253,13254],{"class":57}," \u002F\u002F错误，引用必须初始化\n",[51,13256,13257,13259,13261,13263,13265,13268],{"class":53,"line":120},[51,13258,102],{"class":64},[51,13260,11546],{"class":64},[51,13262,4023],{"class":72},[51,13264,108],{"class":64},[51,13266,13267],{"class":72}," a;",[51,13269,13270],{"class":57}," \u002F\u002F一旦初始化后，就不可以更改\n",[51,13272,13273,13276,13278,13281],{"class":53,"line":129},[51,13274,13275],{"class":72},"    c ",[51,13277,108],{"class":64},[51,13279,13280],{"class":72}," b;",[51,13282,13283],{"class":57}," \u002F\u002F这是赋值操作，不是更改引用\n",[51,13285,13286,13288,13290,13292,13294,13296,13298,13300],{"class":53,"line":206},[51,13287,7491],{"class":72},[51,13289,218],{"class":64},[51,13291,13063],{"class":282},[51,13293,2546],{"class":64},[51,13295,11831],{"class":72},[51,13297,218],{"class":64},[51,13299,12431],{"class":72},[51,13301,8215],{"class":57},[51,13303,13304,13306,13308,13310,13312,13314,13316,13318],{"class":53,"line":212},[51,13305,7491],{"class":72},[51,13307,218],{"class":64},[51,13309,13082],{"class":282},[51,13311,2546],{"class":64},[51,13313,11844],{"class":72},[51,13315,218],{"class":64},[51,13317,12431],{"class":72},[51,13319,8215],{"class":57},[51,13321,13322,13324,13326,13329,13331,13334,13336,13338],{"class":53,"line":227},[51,13323,7491],{"class":72},[51,13325,218],{"class":64},[51,13327,13328],{"class":282}," \"c = \"",[51,13330,2546],{"class":64},[51,13332,13333],{"class":72}," c ",[51,13335,218],{"class":64},[51,13337,12431],{"class":72},[51,13339,8215],{"class":57},[51,13341,13342,13344,13346,13348],{"class":53,"line":370},[51,13343,3383],{"class":68},[51,13345,73],{"class":72},[51,13347,3388],{"class":282},[51,13349,615],{"class":72},[51,13351,13352,13354,13356],{"class":53,"line":387},[51,13353,123],{"class":64},[51,13355,5169],{"class":175},[51,13357,179],{"class":72},[51,13359,13360],{"class":53,"line":404},[51,13361,132],{"class":72},[14,13363,13365],{"id":13364},"_63引用做函数参数","6.3引用做函数参数",[40,13367,13368],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[40,13370,13371],{},"优点：可以简化指针修改实参",[29,13373,13375],{"className":45,"code":13374,"language":47,"meta":35,"style":35},"\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",[37,13376,13377,13382,13405,13416,13426,13435,13439,13443,13448,13470,13482,13494,13504,13508,13512,13517,13539,13549,13557,13565,13569,13573,13581,13585,13597,13609,13613,13624,13650,13654,13674,13698,13702,13712,13736,13740,13750,13754,13762],{"__ignoreMap":35},[51,13378,13379],{"class":53,"line":54},[51,13380,13381],{"class":57},"\u002F\u002F1. 值传递\n",[51,13383,13384,13386,13389,13391,13393,13395,13398,13400,13402],{"class":53,"line":61},[51,13385,252],{"class":64},[51,13387,13388],{"class":68}," mySwap01",[51,13390,73],{"class":72},[51,13392,65],{"class":64},[51,13394,170],{"class":78},[51,13396,13397],{"class":72},", ",[51,13399,65],{"class":64},[51,13401,186],{"class":78},[51,13403,13404],{"class":72},") {\n",[51,13406,13407,13409,13412,13414],{"class":53,"line":93},[51,13408,102],{"class":64},[51,13410,13411],{"class":72}," temp ",[51,13413,108],{"class":64},[51,13415,763],{"class":72},[51,13417,13418,13421,13423],{"class":53,"line":99},[51,13419,13420],{"class":72},"    a ",[51,13422,108],{"class":64},[51,13424,13425],{"class":72}," b;\n",[51,13427,13428,13430,13432],{"class":53,"line":120},[51,13429,13101],{"class":72},[51,13431,108],{"class":64},[51,13433,13434],{"class":72}," temp;\n",[51,13436,13437],{"class":53,"line":129},[51,13438,132],{"class":72},[51,13440,13441],{"class":53,"line":206},[51,13442,3480],{"emptyLinePlaceholder":1192},[51,13444,13445],{"class":53,"line":212},[51,13446,13447],{"class":57},"\u002F\u002F2. 地址传递\n",[51,13449,13450,13452,13455,13457,13460,13462,13464,13466,13468],{"class":53,"line":227},[51,13451,252],{"class":64},[51,13453,13454],{"class":68}," mySwap02",[51,13456,73],{"class":72},[51,13458,13459],{"class":64},"int*",[51,13461,170],{"class":78},[51,13463,13397],{"class":72},[51,13465,13459],{"class":64},[51,13467,186],{"class":78},[51,13469,13404],{"class":72},[51,13471,13472,13474,13476,13478,13480],{"class":53,"line":370},[51,13473,102],{"class":64},[51,13475,13411],{"class":72},[51,13477,108],{"class":64},[51,13479,7480],{"class":64},[51,13481,1121],{"class":72},[51,13483,13484,13486,13488,13490,13492],{"class":53,"line":387},[51,13485,7365],{"class":64},[51,13487,11881],{"class":72},[51,13489,108],{"class":64},[51,13491,7480],{"class":64},[51,13493,987],{"class":72},[51,13495,13496,13498,13500,13502],{"class":53,"line":404},[51,13497,7365],{"class":64},[51,13499,11907],{"class":72},[51,13501,108],{"class":64},[51,13503,13434],{"class":72},[51,13505,13506],{"class":53,"line":415},[51,13507,132],{"class":72},[51,13509,13510],{"class":53,"line":420},[51,13511,3480],{"emptyLinePlaceholder":1192},[51,13513,13514],{"class":53,"line":429},[51,13515,13516],{"class":57},"\u002F\u002F3. 引用传递\n",[51,13518,13519,13521,13524,13526,13529,13531,13533,13535,13537],{"class":53,"line":434},[51,13520,252],{"class":64},[51,13522,13523],{"class":68}," mySwap03",[51,13525,73],{"class":72},[51,13527,13528],{"class":64},"int&",[51,13530,170],{"class":78},[51,13532,13397],{"class":72},[51,13534,13528],{"class":64},[51,13536,186],{"class":78},[51,13538,13404],{"class":72},[51,13540,13541,13543,13545,13547],{"class":53,"line":448},[51,13542,102],{"class":64},[51,13544,13411],{"class":72},[51,13546,108],{"class":64},[51,13548,763],{"class":72},[51,13550,13551,13553,13555],{"class":53,"line":462},[51,13552,13420],{"class":72},[51,13554,108],{"class":64},[51,13556,13425],{"class":72},[51,13558,13559,13561,13563],{"class":53,"line":470},[51,13560,13101],{"class":72},[51,13562,108],{"class":64},[51,13564,13434],{"class":72},[51,13566,13567],{"class":53,"line":2783},[51,13568,132],{"class":72},[51,13570,13571],{"class":53,"line":2788},[51,13572,3480],{"emptyLinePlaceholder":1192},[51,13574,13575,13577,13579],{"class":53,"line":2817},[51,13576,65],{"class":64},[51,13578,151],{"class":68},[51,13580,11815],{"class":72},[51,13582,13583],{"class":53,"line":2822},[51,13584,3480],{"emptyLinePlaceholder":1192},[51,13586,13587,13589,13591,13593,13595],{"class":53,"line":2839},[51,13588,102],{"class":64},[51,13590,11831],{"class":72},[51,13592,108],{"class":64},[51,13594,3118],{"class":175},[51,13596,179],{"class":72},[51,13598,13599,13601,13603,13605,13607],{"class":53,"line":2844},[51,13600,102],{"class":64},[51,13602,11844],{"class":72},[51,13604,108],{"class":64},[51,13606,9912],{"class":175},[51,13608,179],{"class":72},[51,13610,13611],{"class":53,"line":2849},[51,13612,3480],{"emptyLinePlaceholder":1192},[51,13614,13615,13618,13621],{"class":53,"line":2854},[51,13616,13617],{"class":68},"    mySwap01",[51,13619,13620],{"class":72},"(a, b);",[51,13622,13623],{"class":57},"\u002F\u002F值传递，形参不会修饰实参\n",[51,13625,13626,13628,13630,13633,13635,13637,13639,13642,13644,13646,13648],{"class":53,"line":2868},[51,13627,7491],{"class":72},[51,13629,218],{"class":64},[51,13631,13632],{"class":282}," \"a:\"",[51,13634,2546],{"class":64},[51,13636,11831],{"class":72},[51,13638,218],{"class":64},[51,13640,13641],{"class":282}," \" b:\"",[51,13643,2546],{"class":64},[51,13645,11844],{"class":72},[51,13647,218],{"class":64},[51,13649,9802],{"class":72},[51,13651,13652],{"class":53,"line":2873},[51,13653,3480],{"emptyLinePlaceholder":1192},[51,13655,13656,13659,13661,13663,13666,13668,13671],{"class":53,"line":3657},[51,13657,13658],{"class":68},"    mySwap02",[51,13660,73],{"class":72},[51,13662,1602],{"class":64},[51,13664,13665],{"class":72},"a, ",[51,13667,1602],{"class":64},[51,13669,13670],{"class":72},"b);",[51,13672,13673],{"class":57},"\u002F\u002F地址传递，形参会修饰实参\n",[51,13675,13676,13678,13680,13682,13684,13686,13688,13690,13692,13694,13696],{"class":53,"line":3671},[51,13677,7491],{"class":72},[51,13679,218],{"class":64},[51,13681,13632],{"class":282},[51,13683,2546],{"class":64},[51,13685,11831],{"class":72},[51,13687,218],{"class":64},[51,13689,13641],{"class":282},[51,13691,2546],{"class":64},[51,13693,11844],{"class":72},[51,13695,218],{"class":64},[51,13697,9802],{"class":72},[51,13699,13700],{"class":53,"line":3679},[51,13701,3480],{"emptyLinePlaceholder":1192},[51,13703,13704,13707,13709],{"class":53,"line":3684},[51,13705,13706],{"class":68},"    mySwap03",[51,13708,13620],{"class":72},[51,13710,13711],{"class":57},"\u002F\u002F引用传递，形参会修饰实参\n",[51,13713,13714,13716,13718,13720,13722,13724,13726,13728,13730,13732,13734],{"class":53,"line":3690},[51,13715,7491],{"class":72},[51,13717,218],{"class":64},[51,13719,13632],{"class":282},[51,13721,2546],{"class":64},[51,13723,11831],{"class":72},[51,13725,218],{"class":64},[51,13727,13641],{"class":282},[51,13729,2546],{"class":64},[51,13731,11844],{"class":72},[51,13733,218],{"class":64},[51,13735,9802],{"class":72},[51,13737,13738],{"class":53,"line":3696},[51,13739,3480],{"emptyLinePlaceholder":1192},[51,13741,13742,13744,13746,13748],{"class":53,"line":3701},[51,13743,3383],{"class":68},[51,13745,73],{"class":72},[51,13747,3388],{"class":282},[51,13749,615],{"class":72},[51,13751,13752],{"class":53,"line":8910},[51,13753,3480],{"emptyLinePlaceholder":1192},[51,13755,13756,13758,13760],{"class":53,"line":8934},[51,13757,123],{"class":64},[51,13759,5169],{"class":175},[51,13761,179],{"class":72},[51,13763,13764],{"class":53,"line":8939},[51,13765,132],{"class":72},[14,13767,13769],{"id":13768},"_64引用做函数的返回值","6.4引用做函数的返回值",[40,13771,13772],{},"作用：引用是可以作为函数的返回值存在的",[40,13774,9987,13775],{},[840,13776,13777],{},"不要返回局部变量引用",[40,13779,13780],{},"用法：函数调用作为左值",[29,13782,13784],{"className":10903,"code":13783,"language":10905,"meta":35,"style":35},"\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",[37,13785,13786,13791,13799,13814,13820,13824,13828,13833,13841,13858,13864,13868,13872,13880,13884,13889,13903,13923,13942,13946,13951,13964,13984,14002,14006,14022,14026,14045,14063,14067,14077,14081,14089],{"__ignoreMap":35},[51,13787,13788],{"class":53,"line":54},[51,13789,13790],{"class":57},"\u002F\u002F返回局部变量引用\n",[51,13792,13793,13795,13797],{"class":53,"line":61},[51,13794,13528],{"class":64},[51,13796,493],{"class":68},[51,13798,11815],{"class":72},[51,13800,13801,13803,13805,13807,13809,13811],{"class":53,"line":93},[51,13802,102],{"class":64},[51,13804,11831],{"class":72},[51,13806,108],{"class":64},[51,13808,3118],{"class":175},[51,13810,409],{"class":72},[51,13812,13813],{"class":57}," \u002F\u002F局部变量\n",[51,13815,13816,13818],{"class":53,"line":99},[51,13817,123],{"class":64},[51,13819,763],{"class":72},[51,13821,13822],{"class":53,"line":120},[51,13823,132],{"class":72},[51,13825,13826],{"class":53,"line":129},[51,13827,3480],{"emptyLinePlaceholder":1192},[51,13829,13830],{"class":53,"line":206},[51,13831,13832],{"class":57},"\u002F\u002F返回静态变量引用\n",[51,13834,13835,13837,13839],{"class":53,"line":212},[51,13836,13528],{"class":64},[51,13838,562],{"class":68},[51,13840,11815],{"class":72},[51,13842,13843,13845,13847,13849,13851,13853,13855],{"class":53,"line":227},[51,13844,11982],{"class":64},[51,13846,3462],{"class":64},[51,13848,11831],{"class":72},[51,13850,108],{"class":64},[51,13852,9912],{"class":175},[51,13854,409],{"class":72},[51,13856,13857],{"class":57},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[51,13859,13860,13862],{"class":53,"line":370},[51,13861,123],{"class":64},[51,13863,763],{"class":72},[51,13865,13866],{"class":53,"line":387},[51,13867,132],{"class":72},[51,13869,13870],{"class":53,"line":404},[51,13871,3480],{"emptyLinePlaceholder":1192},[51,13873,13874,13876,13878],{"class":53,"line":415},[51,13875,65],{"class":64},[51,13877,151],{"class":68},[51,13879,11815],{"class":72},[51,13881,13882],{"class":53,"line":420},[51,13883,3480],{"emptyLinePlaceholder":1192},[51,13885,13886],{"class":53,"line":429},[51,13887,13888],{"class":57},"    \u002F\u002F不能返回局部变量的引用\n",[51,13890,13891,13894,13897,13899,13901],{"class":53,"line":434},[51,13892,13893],{"class":64},"    int&",[51,13895,13896],{"class":72}," ref ",[51,13898,108],{"class":64},[51,13900,493],{"class":68},[51,13902,541],{"class":72},[51,13904,13905,13907,13909,13912,13914,13916,13918,13920],{"class":53,"line":448},[51,13906,7491],{"class":72},[51,13908,218],{"class":64},[51,13910,13911],{"class":282}," \"ref = \"",[51,13913,2546],{"class":64},[51,13915,13896],{"class":72},[51,13917,218],{"class":64},[51,13919,12431],{"class":72},[51,13921,13922],{"class":57},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[51,13924,13925,13927,13929,13931,13933,13935,13937,13939],{"class":53,"line":462},[51,13926,7491],{"class":72},[51,13928,218],{"class":64},[51,13930,13911],{"class":282},[51,13932,2546],{"class":64},[51,13934,13896],{"class":72},[51,13936,218],{"class":64},[51,13938,12431],{"class":72},[51,13940,13941],{"class":57},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[51,13943,13944],{"class":53,"line":470},[51,13945,3480],{"emptyLinePlaceholder":1192},[51,13947,13948],{"class":53,"line":2783},[51,13949,13950],{"class":57},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[51,13952,13953,13955,13958,13960,13962],{"class":53,"line":2788},[51,13954,13893],{"class":64},[51,13956,13957],{"class":72}," ref2 ",[51,13959,108],{"class":64},[51,13961,562],{"class":68},[51,13963,541],{"class":72},[51,13965,13966,13968,13970,13973,13975,13977,13979,13981],{"class":53,"line":2817},[51,13967,7491],{"class":72},[51,13969,218],{"class":64},[51,13971,13972],{"class":282}," \"ref2 = \"",[51,13974,2546],{"class":64},[51,13976,13957],{"class":72},[51,13978,218],{"class":64},[51,13980,12431],{"class":72},[51,13982,13983],{"class":57}," \u002F\u002F20\n",[51,13985,13986,13988,13990,13992,13994,13996,13998,14000],{"class":53,"line":2822},[51,13987,7491],{"class":72},[51,13989,218],{"class":64},[51,13991,13972],{"class":282},[51,13993,2546],{"class":64},[51,13995,13957],{"class":72},[51,13997,218],{"class":64},[51,13999,12431],{"class":72},[51,14001,13983],{"class":57},[51,14003,14004],{"class":53,"line":2839},[51,14005,3480],{"emptyLinePlaceholder":1192},[51,14007,14008,14010,14013,14015,14017,14019],{"class":53,"line":2844},[51,14009,607],{"class":68},[51,14011,14012],{"class":72},"() ",[51,14014,108],{"class":64},[51,14016,4076],{"class":175},[51,14018,409],{"class":72},[51,14020,14021],{"class":57},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[51,14023,14024],{"class":53,"line":2849},[51,14025,3480],{"emptyLinePlaceholder":1192},[51,14027,14028,14030,14032,14034,14036,14038,14040,14042],{"class":53,"line":2854},[51,14029,7491],{"class":72},[51,14031,218],{"class":64},[51,14033,13972],{"class":282},[51,14035,2546],{"class":64},[51,14037,13957],{"class":72},[51,14039,218],{"class":64},[51,14041,12431],{"class":72},[51,14043,14044],{"class":57}," \u002F\u002F1000\n",[51,14046,14047,14049,14051,14053,14055,14057,14059,14061],{"class":53,"line":2868},[51,14048,7491],{"class":72},[51,14050,218],{"class":64},[51,14052,13972],{"class":282},[51,14054,2546],{"class":64},[51,14056,13957],{"class":72},[51,14058,218],{"class":64},[51,14060,12431],{"class":72},[51,14062,14044],{"class":57},[51,14064,14065],{"class":53,"line":2873},[51,14066,3480],{"emptyLinePlaceholder":1192},[51,14068,14069,14071,14073,14075],{"class":53,"line":3657},[51,14070,3383],{"class":68},[51,14072,73],{"class":72},[51,14074,3388],{"class":282},[51,14076,615],{"class":72},[51,14078,14079],{"class":53,"line":3671},[51,14080,3480],{"emptyLinePlaceholder":1192},[51,14082,14083,14085,14087],{"class":53,"line":3679},[51,14084,123],{"class":64},[51,14086,5169],{"class":175},[51,14088,179],{"class":72},[51,14090,14091],{"class":53,"line":3684},[51,14092,132],{"class":72},[14,14094,14096],{"id":14095},"_65引用的本质","6.5引用的本质",[40,14098,14099,14100],{},"本质：",[840,14101,14102],{},"引用的本质在c++内部实现是一个指针常量.",[29,14104,14106],{"className":45,"code":14105,"language":47,"meta":35,"style":35},"\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",[37,14107,14108,14113,14129,14143,14147,14156,14168,14173,14178,14189,14202,14206,14222,14239,14243,14251,14259],{"__ignoreMap":35},[51,14109,14110],{"class":53,"line":54},[51,14111,14112],{"class":57},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[51,14114,14115,14117,14119,14121,14123,14126],{"class":53,"line":61},[51,14116,252],{"class":64},[51,14118,12347],{"class":68},[51,14120,73],{"class":72},[51,14122,13528],{"class":64},[51,14124,14125],{"class":78}," ref",[51,14127,14128],{"class":72},"){\n",[51,14130,14131,14134,14136,14138,14140],{"class":53,"line":93},[51,14132,14133],{"class":72},"    ref ",[51,14135,108],{"class":64},[51,14137,661],{"class":175},[51,14139,409],{"class":72},[51,14141,14142],{"class":57}," \u002F\u002F ref是引用，转换为*ref = 100\n",[51,14144,14145],{"class":53,"line":99},[51,14146,132],{"class":72},[51,14148,14149,14151,14153],{"class":53,"line":120},[51,14150,65],{"class":64},[51,14152,151],{"class":68},[51,14154,14155],{"class":72},"(){\n",[51,14157,14158,14160,14162,14164,14166],{"class":53,"line":129},[51,14159,102],{"class":64},[51,14161,11831],{"class":72},[51,14163,108],{"class":64},[51,14165,3118],{"class":175},[51,14167,179],{"class":72},[51,14169,14170],{"class":53,"line":206},[51,14171,14172],{"class":72},"    \n",[51,14174,14175],{"class":53,"line":212},[51,14176,14177],{"class":57},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[51,14179,14180,14182,14184,14186],{"class":53,"line":227},[51,14181,13893],{"class":64},[51,14183,13896],{"class":72},[51,14185,108],{"class":64},[51,14187,14188],{"class":72}," a; \n",[51,14190,14191,14193,14195,14197,14199],{"class":53,"line":370},[51,14192,14133],{"class":72},[51,14194,108],{"class":64},[51,14196,9912],{"class":175},[51,14198,409],{"class":72},[51,14200,14201],{"class":57}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[51,14203,14204],{"class":53,"line":387},[51,14205,14172],{"class":72},[51,14207,14208,14210,14212,14214,14216,14218,14220],{"class":53,"line":404},[51,14209,7491],{"class":72},[51,14211,218],{"class":64},[51,14213,13632],{"class":282},[51,14215,2546],{"class":64},[51,14217,11831],{"class":72},[51,14219,218],{"class":64},[51,14221,9802],{"class":72},[51,14223,14224,14226,14228,14231,14233,14235,14237],{"class":53,"line":415},[51,14225,7491],{"class":72},[51,14227,218],{"class":64},[51,14229,14230],{"class":282}," \"ref:\"",[51,14232,2546],{"class":64},[51,14234,13896],{"class":72},[51,14236,218],{"class":64},[51,14238,9802],{"class":72},[51,14240,14241],{"class":53,"line":420},[51,14242,14172],{"class":72},[51,14244,14245,14248],{"class":53,"line":429},[51,14246,14247],{"class":68},"    func",[51,14249,14250],{"class":72},"(a);\n",[51,14252,14253,14255,14257],{"class":53,"line":434},[51,14254,123],{"class":64},[51,14256,5169],{"class":175},[51,14258,179],{"class":72},[51,14260,14261],{"class":53,"line":448},[51,14262,132],{"class":72},[40,14264,12294],{},[19,14266,14267,14270],{},[22,14268,14269],{},"引用的本质，就是一个指针常量",[22,14271,14272],{},"引用一旦初始化，就不可以发生改变",[14,14274,14276],{"id":14275},"_66常量引用","6.6常量引用",[40,14278,14279],{},"作用：常量引用主要用来修饰形参",[40,14281,14282,14283,14286],{},"在函数形参列表中，可以加",[840,14284,14285],{},"const修饰形参","，防止形参改变实参",[29,14288,14290],{"className":45,"code":14289,"language":47,"meta":35,"style":35},"\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",[37,14291,14292,14297,14302,14321,14326,14339,14343,14347,14355,14359,14364,14369,14383,14387,14395,14407,14411,14416,14428,14435,14439,14449,14453,14461],{"__ignoreMap":35},[51,14293,14294],{"class":53,"line":54},[51,14295,14296],{"class":57},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[51,14298,14299],{"class":53,"line":61},[51,14300,14301],{"class":57},"\u002F\u002F加上const就不能修改实参的\n",[51,14303,14304,14306,14309,14311,14313,14316,14319],{"class":53,"line":93},[51,14305,252],{"class":64},[51,14307,14308],{"class":68}," showValue",[51,14310,73],{"class":72},[51,14312,7754],{"class":64},[51,14314,14315],{"class":64}," int&",[51,14317,14318],{"class":78}," v",[51,14320,13404],{"class":72},[51,14322,14323],{"class":53,"line":99},[51,14324,14325],{"class":57},"    \u002F\u002Fv += 100;\n",[51,14327,14328,14330,14332,14335,14337],{"class":53,"line":120},[51,14329,7491],{"class":72},[51,14331,218],{"class":64},[51,14333,14334],{"class":72}," v ",[51,14336,218],{"class":64},[51,14338,9802],{"class":72},[51,14340,14341],{"class":53,"line":129},[51,14342,132],{"class":72},[51,14344,14345],{"class":53,"line":206},[51,14346,3480],{"emptyLinePlaceholder":1192},[51,14348,14349,14351,14353],{"class":53,"line":212},[51,14350,65],{"class":64},[51,14352,151],{"class":68},[51,14354,11815],{"class":72},[51,14356,14357],{"class":53,"line":227},[51,14358,3480],{"emptyLinePlaceholder":1192},[51,14360,14361],{"class":53,"line":370},[51,14362,14363],{"class":57},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[51,14365,14366],{"class":53,"line":387},[51,14367,14368],{"class":57},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[51,14370,14371,14373,14375,14377,14379,14381],{"class":53,"line":404},[51,14372,12183],{"class":64},[51,14374,14315],{"class":64},[51,14376,13896],{"class":72},[51,14378,108],{"class":64},[51,14380,3118],{"class":175},[51,14382,179],{"class":72},[51,14384,14385],{"class":53,"line":415},[51,14386,3480],{"emptyLinePlaceholder":1192},[51,14388,14389,14392],{"class":53,"line":420},[51,14390,14391],{"class":57},"    \u002F\u002Fref = 100;",[51,14393,14394],{"class":57},"  \u002F\u002F加入const后不可以修改变量\n",[51,14396,14397,14399,14401,14403,14405],{"class":53,"line":429},[51,14398,7491],{"class":72},[51,14400,218],{"class":64},[51,14402,13896],{"class":72},[51,14404,218],{"class":64},[51,14406,9802],{"class":72},[51,14408,14409],{"class":53,"line":434},[51,14410,3480],{"emptyLinePlaceholder":1192},[51,14412,14413],{"class":53,"line":448},[51,14414,14415],{"class":57},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[51,14417,14418,14420,14422,14424,14426],{"class":53,"line":462},[51,14419,102],{"class":64},[51,14421,11831],{"class":72},[51,14423,108],{"class":64},[51,14425,3118],{"class":175},[51,14427,179],{"class":72},[51,14429,14430,14433],{"class":53,"line":470},[51,14431,14432],{"class":68},"    showValue",[51,14434,14250],{"class":72},[51,14436,14437],{"class":53,"line":2783},[51,14438,3480],{"emptyLinePlaceholder":1192},[51,14440,14441,14443,14445,14447],{"class":53,"line":2788},[51,14442,3383],{"class":68},[51,14444,73],{"class":72},[51,14446,3388],{"class":282},[51,14448,615],{"class":72},[51,14450,14451],{"class":53,"line":2817},[51,14452,3480],{"emptyLinePlaceholder":1192},[51,14454,14455,14457,14459],{"class":53,"line":2822},[51,14456,123],{"class":64},[51,14458,5169],{"class":175},[51,14460,179],{"class":72},[51,14462,14463],{"class":53,"line":2839},[51,14464,132],{"class":72},[1179,14466,14467],{},"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":35,"searchDepth":61,"depth":61,"links":14469},[14470,14471,14472,14473,14474,14475],{"id":13002,"depth":61,"text":13003},{"id":13181,"depth":61,"text":13182},{"id":13364,"depth":61,"text":13365},{"id":13768,"depth":61,"text":13769},{"id":14095,"depth":61,"text":14096},{"id":14275,"depth":61,"text":14276},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12994,"description":35},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14482,"title":14483,"body":14484,"description":35,"extension":1190,"meta":15565,"navigation":1192,"path":15566,"seo":15567,"stem":15568,"__hash__":15569},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14485,"toc":15557},[14486,14489,14493,14496,14501,14733,14735,14746,14750,14753,14761,14865,14868,14872,14875,14879,14882,14887,14909,14915,15242,15245,15249,15257,15554],[10,14487,14483],{"id":14488},"_7函数高级部分",[14,14490,14492],{"id":14491},"_71函数默认参数","7.1函数默认参数",[40,14494,14495],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[40,14497,27,14498],{},[37,14499,14500],{}," 返回值类型  函数名 （参数= 默认值）{}",[29,14502,14504],{"className":45,"code":14503,"language":47,"meta":35,"style":35},"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",[37,14505,14506,14541,14556,14560,14564,14569,14574,14603,14623,14633,14637,14641,14649,14653,14681,14703,14707,14717,14721,14729],{"__ignoreMap":35},[51,14507,14508,14510,14512,14514,14516,14518,14520,14522,14524,14527,14529,14531,14533,14535,14537,14539],{"class":53,"line":54},[51,14509,65],{"class":64},[51,14511,12347],{"class":68},[51,14513,73],{"class":72},[51,14515,65],{"class":64},[51,14517,170],{"class":78},[51,14519,13397],{"class":72},[51,14521,65],{"class":64},[51,14523,186],{"class":78},[51,14525,14526],{"class":64}," =",[51,14528,3118],{"class":175},[51,14530,13397],{"class":72},[51,14532,65],{"class":64},[51,14534,800],{"class":78},[51,14536,14526],{"class":64},[51,14538,3118],{"class":175},[51,14540,13404],{"class":72},[51,14542,14543,14545,14547,14549,14551,14553],{"class":53,"line":61},[51,14544,123],{"class":64},[51,14546,11831],{"class":72},[51,14548,114],{"class":64},[51,14550,11844],{"class":72},[51,14552,114],{"class":64},[51,14554,14555],{"class":72}," c;\n",[51,14557,14558],{"class":53,"line":93},[51,14559,132],{"class":72},[51,14561,14562],{"class":53,"line":99},[51,14563,3480],{"emptyLinePlaceholder":1192},[51,14565,14566],{"class":53,"line":120},[51,14567,14568],{"class":57},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[51,14570,14571],{"class":53,"line":129},[51,14572,14573],{"class":57},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[51,14575,14576,14578,14581,14583,14585,14587,14589,14591,14593,14595,14597,14599,14601],{"class":53,"line":206},[51,14577,65],{"class":64},[51,14579,14580],{"class":68}," func2",[51,14582,73],{"class":72},[51,14584,65],{"class":64},[51,14586,170],{"class":78},[51,14588,14526],{"class":64},[51,14590,3118],{"class":175},[51,14592,13397],{"class":72},[51,14594,65],{"class":64},[51,14596,186],{"class":78},[51,14598,14526],{"class":64},[51,14600,3118],{"class":175},[51,14602,615],{"class":72},[51,14604,14605,14607,14609,14611,14613,14615,14617,14619,14621],{"class":53,"line":212},[51,14606,65],{"class":64},[51,14608,14580],{"class":68},[51,14610,73],{"class":72},[51,14612,65],{"class":64},[51,14614,170],{"class":78},[51,14616,13397],{"class":72},[51,14618,65],{"class":64},[51,14620,186],{"class":78},[51,14622,13404],{"class":72},[51,14624,14625,14627,14629,14631],{"class":53,"line":227},[51,14626,123],{"class":64},[51,14628,11831],{"class":72},[51,14630,114],{"class":64},[51,14632,13425],{"class":72},[51,14634,14635],{"class":53,"line":370},[51,14636,132],{"class":72},[51,14638,14639],{"class":53,"line":387},[51,14640,3480],{"emptyLinePlaceholder":1192},[51,14642,14643,14645,14647],{"class":53,"line":404},[51,14644,65],{"class":64},[51,14646,151],{"class":68},[51,14648,11815],{"class":72},[51,14650,14651],{"class":53,"line":415},[51,14652,3480],{"emptyLinePlaceholder":1192},[51,14654,14655,14657,14659,14662,14664,14666,14668,14670,14672,14674,14677,14679],{"class":53,"line":420},[51,14656,7491],{"class":72},[51,14658,218],{"class":64},[51,14660,14661],{"class":282}," \"ret = \"",[51,14663,2546],{"class":64},[51,14665,12347],{"class":68},[51,14667,73],{"class":72},[51,14669,457],{"class":175},[51,14671,13397],{"class":72},[51,14673,457],{"class":175},[51,14675,14676],{"class":72},") ",[51,14678,218],{"class":64},[51,14680,9802],{"class":72},[51,14682,14683,14685,14687,14689,14691,14693,14695,14697,14699,14701],{"class":53,"line":429},[51,14684,7491],{"class":72},[51,14686,218],{"class":64},[51,14688,14661],{"class":282},[51,14690,2546],{"class":64},[51,14692,12347],{"class":68},[51,14694,73],{"class":72},[51,14696,612],{"class":175},[51,14698,14676],{"class":72},[51,14700,218],{"class":64},[51,14702,9802],{"class":72},[51,14704,14705],{"class":53,"line":434},[51,14706,3480],{"emptyLinePlaceholder":1192},[51,14708,14709,14711,14713,14715],{"class":53,"line":448},[51,14710,3383],{"class":68},[51,14712,73],{"class":72},[51,14714,3388],{"class":282},[51,14716,615],{"class":72},[51,14718,14719],{"class":53,"line":462},[51,14720,3480],{"emptyLinePlaceholder":1192},[51,14722,14723,14725,14727],{"class":53,"line":470},[51,14724,123],{"class":64},[51,14726,5169],{"class":175},[51,14728,179],{"class":72},[51,14730,14731],{"class":53,"line":2783},[51,14732,132],{"class":72},[40,14734,12294],{},[19,14736,14737,14740,14743],{},[22,14738,14739],{},"我传就用我；没传就用你",[22,14741,14742],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[22,14744,14745],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14747,14749],{"id":14748},"_72函数的占位参数","7.2函数的占位参数",[40,14751,14752],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[40,14754,14755,14757,14758],{},[840,14756,27],{}," ",[37,14759,14760],{},"返回值类型 函数名 (数据类型){}",[29,14762,14764],{"className":45,"code":14763,"language":47,"meta":35,"style":35},"\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",[37,14765,14766,14771,14789,14802,14806,14814,14818,14835,14839,14849,14853,14861],{"__ignoreMap":35},[51,14767,14768],{"class":53,"line":54},[51,14769,14770],{"class":57},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[51,14772,14773,14775,14777,14779,14781,14783,14785,14787],{"class":53,"line":61},[51,14774,252],{"class":64},[51,14776,12347],{"class":68},[51,14778,73],{"class":72},[51,14780,65],{"class":64},[51,14782,170],{"class":78},[51,14784,13397],{"class":72},[51,14786,65],{"class":64},[51,14788,13404],{"class":72},[51,14790,14791,14793,14795,14798,14800],{"class":53,"line":93},[51,14792,7491],{"class":72},[51,14794,218],{"class":64},[51,14796,14797],{"class":282}," \"this is func\"",[51,14799,2546],{"class":64},[51,14801,9802],{"class":72},[51,14803,14804],{"class":53,"line":99},[51,14805,132],{"class":72},[51,14807,14808,14810,14812],{"class":53,"line":120},[51,14809,65],{"class":64},[51,14811,151],{"class":68},[51,14813,11815],{"class":72},[51,14815,14816],{"class":53,"line":129},[51,14817,3480],{"emptyLinePlaceholder":1192},[51,14819,14820,14822,14824,14826,14828,14830,14832],{"class":53,"line":206},[51,14821,14247],{"class":68},[51,14823,73],{"class":72},[51,14825,443],{"class":175},[51,14827,82],{"class":72},[51,14829,443],{"class":175},[51,14831,879],{"class":72},[51,14833,14834],{"class":57}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[51,14836,14837],{"class":53,"line":212},[51,14838,3480],{"emptyLinePlaceholder":1192},[51,14840,14841,14843,14845,14847],{"class":53,"line":227},[51,14842,3383],{"class":68},[51,14844,73],{"class":72},[51,14846,3388],{"class":282},[51,14848,615],{"class":72},[51,14850,14851],{"class":53,"line":370},[51,14852,3480],{"emptyLinePlaceholder":1192},[51,14854,14855,14857,14859],{"class":53,"line":387},[51,14856,123],{"class":64},[51,14858,5169],{"class":175},[51,14860,179],{"class":72},[51,14862,14863],{"class":53,"line":404},[51,14864,132],{"class":72},[40,14866,14867],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14869,14871],{"id":14870},"_73函数重载","7.3函数重载",[40,14873,14874],{},"意思是函数名是可以相同的",[1233,14876,14878],{"id":14877},"_731基本语法","7.3.1基本语法",[40,14880,14881],{},"作用：函数名可以相同，提高复用性",[40,14883,14884],{},[840,14885,14886],{},"函数重载满足条件：",[1000,14888,14889,14892,14895],{},[22,14890,14891],{},"同一个作用域下",[22,14893,14894],{},"函数名称相同",[22,14896,14897,14898,14901,14902,14905,14906],{},"函数参数",[840,14899,14900],{},"类型不同","  或者 ",[840,14903,14904],{},"个数不同"," 或者 ",[840,14907,14908],{},"顺序不同",[40,14910,14911,14914],{},[840,14912,14913],{},"注意:","  函数的返回值不可以作为函数重载的条件",[29,14916,14918],{"className":10903,"code":14917,"language":10905,"meta":35,"style":35},"\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",[37,14919,14920,14925,14933,14937,14950,14954,14968,14972,14985,14989,15004,15008,15021,15025,15046,15050,15063,15067,15087,15091,15104,15108,15112,15117,15122,15127,15132,15137,15141,15145,15153,15157,15163,15173,15183,15197,15212,15216,15226,15230,15238],{"__ignoreMap":35},[51,14921,14922],{"class":53,"line":54},[51,14923,14924],{"class":57},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[51,14926,14927,14929,14931],{"class":53,"line":61},[51,14928,252],{"class":64},[51,14930,12347],{"class":68},[51,14932,154],{"class":72},[51,14934,14935],{"class":53,"line":93},[51,14936,96],{"class":72},[51,14938,14939,14941,14943,14946,14948],{"class":53,"line":99},[51,14940,7491],{"class":72},[51,14942,218],{"class":64},[51,14944,14945],{"class":282}," \"func 的调用！\"",[51,14947,2546],{"class":64},[51,14949,9802],{"class":72},[51,14951,14952],{"class":53,"line":120},[51,14953,132],{"class":72},[51,14955,14956,14958,14960,14962,14964,14966],{"class":53,"line":129},[51,14957,252],{"class":64},[51,14959,12347],{"class":68},[51,14961,73],{"class":72},[51,14963,65],{"class":64},[51,14965,170],{"class":78},[51,14967,90],{"class":72},[51,14969,14970],{"class":53,"line":206},[51,14971,96],{"class":72},[51,14973,14974,14976,14978,14981,14983],{"class":53,"line":212},[51,14975,7491],{"class":72},[51,14977,218],{"class":64},[51,14979,14980],{"class":282}," \"func (int a) 的调用！\"",[51,14982,2546],{"class":64},[51,14984,9802],{"class":72},[51,14986,14987],{"class":53,"line":227},[51,14988,132],{"class":72},[51,14990,14991,14993,14995,14997,15000,15002],{"class":53,"line":370},[51,14992,252],{"class":64},[51,14994,12347],{"class":68},[51,14996,73],{"class":72},[51,14998,14999],{"class":64},"double",[51,15001,170],{"class":78},[51,15003,90],{"class":72},[51,15005,15006],{"class":53,"line":387},[51,15007,96],{"class":72},[51,15009,15010,15012,15014,15017,15019],{"class":53,"line":404},[51,15011,7491],{"class":72},[51,15013,218],{"class":64},[51,15015,15016],{"class":282}," \"func (double a)的调用！\"",[51,15018,2546],{"class":64},[51,15020,9802],{"class":72},[51,15022,15023],{"class":53,"line":415},[51,15024,132],{"class":72},[51,15026,15027,15029,15031,15033,15035,15037,15040,15042,15044],{"class":53,"line":420},[51,15028,252],{"class":64},[51,15030,12347],{"class":68},[51,15032,73],{"class":72},[51,15034,65],{"class":64},[51,15036,170],{"class":78},[51,15038,15039],{"class":72}," ,",[51,15041,14999],{"class":64},[51,15043,186],{"class":78},[51,15045,90],{"class":72},[51,15047,15048],{"class":53,"line":429},[51,15049,96],{"class":72},[51,15051,15052,15054,15056,15059,15061],{"class":53,"line":434},[51,15053,7491],{"class":72},[51,15055,218],{"class":64},[51,15057,15058],{"class":282}," \"func (int a ,double b) 的调用！\"",[51,15060,2546],{"class":64},[51,15062,9802],{"class":72},[51,15064,15065],{"class":53,"line":448},[51,15066,132],{"class":72},[51,15068,15069,15071,15073,15075,15077,15079,15081,15083,15085],{"class":53,"line":462},[51,15070,252],{"class":64},[51,15072,12347],{"class":68},[51,15074,73],{"class":72},[51,15076,14999],{"class":64},[51,15078,170],{"class":78},[51,15080,15039],{"class":72},[51,15082,65],{"class":64},[51,15084,186],{"class":78},[51,15086,90],{"class":72},[51,15088,15089],{"class":53,"line":470},[51,15090,96],{"class":72},[51,15092,15093,15095,15097,15100,15102],{"class":53,"line":2783},[51,15094,7491],{"class":72},[51,15096,218],{"class":64},[51,15098,15099],{"class":282}," \"func (double a ,int b)的调用！\"",[51,15101,2546],{"class":64},[51,15103,9802],{"class":72},[51,15105,15106],{"class":53,"line":2788},[51,15107,132],{"class":72},[51,15109,15110],{"class":53,"line":2817},[51,15111,3480],{"emptyLinePlaceholder":1192},[51,15113,15114],{"class":53,"line":2822},[51,15115,15116],{"class":57},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[51,15118,15119],{"class":53,"line":2839},[51,15120,15121],{"class":57},"\u002F\u002Fint func(double a, int b)\n",[51,15123,15124],{"class":53,"line":2844},[51,15125,15126],{"class":57},"\u002F\u002F{\n",[51,15128,15129],{"class":53,"line":2849},[51,15130,15131],{"class":57},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[51,15133,15134],{"class":53,"line":2854},[51,15135,15136],{"class":57},"\u002F\u002F}\n",[51,15138,15139],{"class":53,"line":2868},[51,15140,3480],{"emptyLinePlaceholder":1192},[51,15142,15143],{"class":53,"line":2873},[51,15144,3480],{"emptyLinePlaceholder":1192},[51,15146,15147,15149,15151],{"class":53,"line":3657},[51,15148,65],{"class":64},[51,15150,151],{"class":68},[51,15152,11815],{"class":72},[51,15154,15155],{"class":53,"line":3671},[51,15156,3480],{"emptyLinePlaceholder":1192},[51,15158,15159,15161],{"class":53,"line":3679},[51,15160,14247],{"class":68},[51,15162,541],{"class":72},[51,15164,15165,15167,15169,15171],{"class":53,"line":3684},[51,15166,14247],{"class":68},[51,15168,73],{"class":72},[51,15170,443],{"class":175},[51,15172,615],{"class":72},[51,15174,15175,15177,15179,15181],{"class":53,"line":3690},[51,15176,14247],{"class":68},[51,15178,73],{"class":72},[51,15180,1308],{"class":175},[51,15182,615],{"class":72},[51,15184,15185,15187,15189,15191,15193,15195],{"class":53,"line":3696},[51,15186,14247],{"class":68},[51,15188,73],{"class":72},[51,15190,443],{"class":175},[51,15192,82],{"class":72},[51,15194,1308],{"class":175},[51,15196,615],{"class":72},[51,15198,15199,15201,15203,15205,15208,15210],{"class":53,"line":3701},[51,15200,14247],{"class":68},[51,15202,73],{"class":72},[51,15204,1308],{"class":175},[51,15206,15207],{"class":72}," , ",[51,15209,443],{"class":175},[51,15211,615],{"class":72},[51,15213,15214],{"class":53,"line":8910},[51,15215,14172],{"class":72},[51,15217,15218,15220,15222,15224],{"class":53,"line":8934},[51,15219,3383],{"class":68},[51,15221,73],{"class":72},[51,15223,3388],{"class":282},[51,15225,615],{"class":72},[51,15227,15228],{"class":53,"line":8939},[51,15229,3480],{"emptyLinePlaceholder":1192},[51,15231,15232,15234,15236],{"class":53,"line":8945},[51,15233,123],{"class":64},[51,15235,5169],{"class":175},[51,15237,179],{"class":72},[51,15239,15240],{"class":53,"line":8972},[51,15241,132],{"class":72},[40,15243,15244],{},"重点：函数返回值不可以作为函数重载条件！",[1233,15246,15248],{"id":15247},"_732注意事项","7.3.2注意事项",[1000,15250,15251,15254],{},[22,15252,15253],{},"引用作为重载条件!!!",[22,15255,15256],{},"函数重载碰到函数默认参数",[29,15258,15260],{"className":45,"code":15259,"language":47,"meta":35,"style":35},"\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",[37,15261,15262,15267,15272,15276,15292,15296,15309,15313,15317,15335,15339,15352,15356,15360,15364,15369,15373,15397,15401,15414,15418,15422,15436,15440,15453,15457,15461,15469,15473,15485,15495,15508,15512,15516,15524,15528,15538,15542,15550],{"__ignoreMap":35},[51,15263,15264],{"class":53,"line":54},[51,15265,15266],{"class":57},"\u002F\u002F函数重载注意事项\n",[51,15268,15269],{"class":53,"line":61},[51,15270,15271],{"class":57},"\u002F\u002F1、引用作为重载条件\n",[51,15273,15274],{"class":53,"line":93},[51,15275,3480],{"emptyLinePlaceholder":1192},[51,15277,15278,15280,15282,15284,15286,15288,15290],{"class":53,"line":99},[51,15279,252],{"class":64},[51,15281,12347],{"class":68},[51,15283,73],{"class":72},[51,15285,65],{"class":64},[51,15287,11546],{"class":64},[51,15289,981],{"class":78},[51,15291,90],{"class":72},[51,15293,15294],{"class":53,"line":120},[51,15295,96],{"class":72},[51,15297,15298,15300,15302,15305,15307],{"class":53,"line":129},[51,15299,7491],{"class":72},[51,15301,218],{"class":64},[51,15303,15304],{"class":282}," \"func (int &a) 调用 \"",[51,15306,2546],{"class":64},[51,15308,9802],{"class":72},[51,15310,15311],{"class":53,"line":206},[51,15312,132],{"class":72},[51,15314,15315],{"class":53,"line":212},[51,15316,3480],{"emptyLinePlaceholder":1192},[51,15318,15319,15321,15323,15325,15327,15329,15331,15333],{"class":53,"line":227},[51,15320,252],{"class":64},[51,15322,12347],{"class":68},[51,15324,73],{"class":72},[51,15326,7754],{"class":64},[51,15328,3462],{"class":64},[51,15330,11546],{"class":64},[51,15332,981],{"class":78},[51,15334,90],{"class":72},[51,15336,15337],{"class":53,"line":370},[51,15338,96],{"class":72},[51,15340,15341,15343,15345,15348,15350],{"class":53,"line":387},[51,15342,7491],{"class":72},[51,15344,218],{"class":64},[51,15346,15347],{"class":282}," \"func (const int &a) 调用 \"",[51,15349,2546],{"class":64},[51,15351,9802],{"class":72},[51,15353,15354],{"class":53,"line":404},[51,15355,132],{"class":72},[51,15357,15358],{"class":53,"line":415},[51,15359,3480],{"emptyLinePlaceholder":1192},[51,15361,15362],{"class":53,"line":420},[51,15363,3480],{"emptyLinePlaceholder":1192},[51,15365,15366],{"class":53,"line":429},[51,15367,15368],{"class":57},"\u002F\u002F2、函数重载碰到函数默认参数\n",[51,15370,15371],{"class":53,"line":434},[51,15372,3480],{"emptyLinePlaceholder":1192},[51,15374,15375,15377,15379,15381,15383,15385,15387,15389,15391,15393,15395],{"class":53,"line":448},[51,15376,252],{"class":64},[51,15378,14580],{"class":68},[51,15380,73],{"class":72},[51,15382,65],{"class":64},[51,15384,170],{"class":78},[51,15386,13397],{"class":72},[51,15388,65],{"class":64},[51,15390,186],{"class":78},[51,15392,14526],{"class":64},[51,15394,3118],{"class":175},[51,15396,90],{"class":72},[51,15398,15399],{"class":53,"line":462},[51,15400,96],{"class":72},[51,15402,15403,15405,15407,15410,15412],{"class":53,"line":470},[51,15404,7491],{"class":72},[51,15406,218],{"class":64},[51,15408,15409],{"class":282}," \"func2(int a, int b = 10) 调用\"",[51,15411,2546],{"class":64},[51,15413,9802],{"class":72},[51,15415,15416],{"class":53,"line":2783},[51,15417,132],{"class":72},[51,15419,15420],{"class":53,"line":2788},[51,15421,3480],{"emptyLinePlaceholder":1192},[51,15423,15424,15426,15428,15430,15432,15434],{"class":53,"line":2817},[51,15425,252],{"class":64},[51,15427,14580],{"class":68},[51,15429,73],{"class":72},[51,15431,65],{"class":64},[51,15433,170],{"class":78},[51,15435,90],{"class":72},[51,15437,15438],{"class":53,"line":2822},[51,15439,96],{"class":72},[51,15441,15442,15444,15446,15449,15451],{"class":53,"line":2839},[51,15443,7491],{"class":72},[51,15445,218],{"class":64},[51,15447,15448],{"class":282}," \"func2(int a) 调用\"",[51,15450,2546],{"class":64},[51,15452,9802],{"class":72},[51,15454,15455],{"class":53,"line":2844},[51,15456,132],{"class":72},[51,15458,15459],{"class":53,"line":2849},[51,15460,3480],{"emptyLinePlaceholder":1192},[51,15462,15463,15465,15467],{"class":53,"line":2854},[51,15464,65],{"class":64},[51,15466,151],{"class":68},[51,15468,11815],{"class":72},[51,15470,15471],{"class":53,"line":2868},[51,15472,14172],{"class":72},[51,15474,15475,15477,15479,15481,15483],{"class":53,"line":2873},[51,15476,102],{"class":64},[51,15478,11831],{"class":72},[51,15480,108],{"class":64},[51,15482,3118],{"class":175},[51,15484,179],{"class":72},[51,15486,15487,15489,15492],{"class":53,"line":3657},[51,15488,14247],{"class":68},[51,15490,15491],{"class":72},"(a);",[51,15493,15494],{"class":57}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[51,15496,15497,15499,15501,15503,15505],{"class":53,"line":3671},[51,15498,14247],{"class":68},[51,15500,73],{"class":72},[51,15502,443],{"class":175},[51,15504,879],{"class":72},[51,15506,15507],{"class":57},"\u002F\u002F调用有const   10是个常量\n",[51,15509,15510],{"class":53,"line":3679},[51,15511,3480],{"emptyLinePlaceholder":1192},[51,15513,15514],{"class":53,"line":3684},[51,15515,3480],{"emptyLinePlaceholder":1192},[51,15517,15518,15521],{"class":53,"line":3690},[51,15519,15520],{"class":57},"    \u002F\u002Ffunc2(10);",[51,15522,15523],{"class":57}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[51,15525,15526],{"class":53,"line":3696},[51,15527,3480],{"emptyLinePlaceholder":1192},[51,15529,15530,15532,15534,15536],{"class":53,"line":3701},[51,15531,3383],{"class":68},[51,15533,73],{"class":72},[51,15535,3388],{"class":282},[51,15537,615],{"class":72},[51,15539,15540],{"class":53,"line":8910},[51,15541,3480],{"emptyLinePlaceholder":1192},[51,15543,15544,15546,15548],{"class":53,"line":8934},[51,15545,123],{"class":64},[51,15547,5169],{"class":175},[51,15549,179],{"class":72},[51,15551,15552],{"class":53,"line":8939},[51,15553,132],{"class":72},[1179,15555,15556],{},"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":35,"searchDepth":61,"depth":61,"links":15558},[15559,15560,15561],{"id":14491,"depth":61,"text":14492},{"id":14748,"depth":61,"text":14749},{"id":14870,"depth":61,"text":14871,"children":15562},[15563,15564],{"id":14877,"depth":93,"text":14878},{"id":15247,"depth":93,"text":15248},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14483,"description":35},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15571,"title":15572,"body":15573,"description":24327,"extension":1190,"meta":24328,"navigation":1192,"path":24329,"seo":24330,"stem":24331,"__hash__":24332},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15574,"toc":24308},[15575,15578,15584,15591,15596,15599,15602,15605,15609,15613,15616,15619,15627,15632,15635,15642,15647,15806,15809,16062,16065,16068,16071,16076,16079,16082,16093,16098,16334,16338,16348,16351,16359,16506,16510,16513,16516,16520,16965,16969,16977,16985,17897,17904,17909,18537,18540,18543,18546,18665,18668,18755,18758,18884,18887,18981,18984,19337,19341,19349,19353,19360,19363,19366,19377,19383,19388,19400,19408,19428,19436,19453,19639,19642,19646,19649,19652,19655,19658,19661,19664,19667,20127,20133,20137,20140,20151,20738,20741,21230,21234,21237,21240,21243,21246,21249,21257,21653,21657,21660,21663,22110,22113,22116,22121,22124,22129,22132,22136,22139,22141,22147,22150,22456,22466,22507,22511,22514,22516,22549,22552,22859,22861,22876,22879,22902,22911,22917,22920,22924,22927,22930,22935,22946,22951,22959,22964,23094,23097,23100,23275,23280,23492,23496,23499,23613,23618,23857,23861,23865,23868,23871,23876,23981,23984,23987,23990,23994,24105,24108,24111,24116,24168,24171,24174,24179,24225,24228,24233,24301,24303,24306],[10,15576,15572],{"id":15577},"_8类和对象",[40,15579,15580,15581],{},"C++面向对象的三大特性为",[840,15582,15583],{},"封装、继承、多态",[40,15585,15586,15587,15590],{},"C++认为",[840,15588,15589],{},"万事万物都皆为对象","，对象上有其属性和行为",[40,15592,15593],{},[840,15594,15595],{},"例如：",[40,15597,15598],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[40,15600,15601],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[40,15603,15604],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15606,15608],{"id":15607},"_81封装","8.1封装",[1233,15610,15612],{"id":15611},"_811封装的意义","8.1.1封装的意义",[40,15614,15615],{},"封装是C++面向对象三大特性之一",[40,15617,15618],{},"封装的意义：",[1000,15620,15621,15624],{},[22,15622,15623],{},"将属性和行为作为一个整体，表现生活中的事物",[22,15625,15626],{},"将属性和行为加以权限控制",[40,15628,15629],{},[840,15630,15631],{},"封装意义一：",[40,15633,15634],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[40,15636,15637,14757,15639],{},[840,15638,27],{},[37,15640,15641],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[19,15643,15644],{},[22,15645,15646],{},"**示例1：**设计一个圆类，求圆的周长",[29,15648,15650],{"className":45,"code":15649,"language":47,"meta":35,"style":35},"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",[37,15651,15652,15660,15664,15669,15674,15679,15684,15691,15696,15706,15710,15728,15732,15736,15744,15748,15753,15758,15763,15768,15779,15802],{"__ignoreMap":35},[51,15653,15654,15657],{"class":53,"line":54},[51,15655,15656],{"class":64},"class",[51,15658,15659],{"class":68}," Circle\n",[51,15661,15662],{"class":53,"line":61},[51,15663,96],{"class":72},[51,15665,15666],{"class":53,"line":93},[51,15667,15668],{"class":57},"    \u002F\u002F访问权限\n",[51,15670,15671],{"class":53,"line":99},[51,15672,15673],{"class":57},"    \u002F\u002F公共权限\n",[51,15675,15676],{"class":53,"line":120},[51,15677,15678],{"class":64},"public:\n",[51,15680,15681],{"class":53,"line":129},[51,15682,15683],{"class":57},"    \u002F\u002F属性\n",[51,15685,15686,15688],{"class":53,"line":206},[51,15687,102],{"class":64},[51,15689,15690],{"class":72}," m_r;\n",[51,15692,15693],{"class":53,"line":212},[51,15694,15695],{"class":57},"    \u002F\u002F行为\n",[51,15697,15698,15701,15704],{"class":53,"line":227},[51,15699,15700],{"class":64},"    double",[51,15702,15703],{"class":68}," calculateZC",[51,15705,154],{"class":72},[51,15707,15708],{"class":53,"line":370},[51,15709,3110],{"class":72},[51,15711,15712,15715,15718,15720,15723,15725],{"class":53,"line":387},[51,15713,15714],{"class":64},"        return",[51,15716,15717],{"class":175}," 2",[51,15719,1702],{"class":64},[51,15721,15722],{"class":72},"PI",[51,15724,1702],{"class":64},[51,15726,15727],{"class":72},"m_r;\n",[51,15729,15730],{"class":53,"line":404},[51,15731,3267],{"class":72},[51,15733,15734],{"class":53,"line":415},[51,15735,5072],{"class":72},[51,15737,15738,15740,15742],{"class":53,"line":420},[51,15739,65],{"class":64},[51,15741,151],{"class":68},[51,15743,154],{"class":72},[51,15745,15746],{"class":53,"line":429},[51,15747,96],{"class":72},[51,15749,15750],{"class":53,"line":434},[51,15751,15752],{"class":57},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[51,15754,15755],{"class":53,"line":448},[51,15756,15757],{"class":57},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[51,15759,15760],{"class":53,"line":462},[51,15761,15762],{"class":72},"    Circle c1;\n",[51,15764,15765],{"class":53,"line":470},[51,15766,15767],{"class":57},"    \u002F\u002F给圆对象 的属性进行赋值\n",[51,15769,15770,15773,15775,15777],{"class":53,"line":2783},[51,15771,15772],{"class":72},"    c1.m_r",[51,15774,108],{"class":64},[51,15776,443],{"class":175},[51,15778,179],{"class":72},[51,15780,15781,15783,15785,15788,15790,15793,15796,15798,15800],{"class":53,"line":2788},[51,15782,215],{"class":72},[51,15784,218],{"class":64},[51,15786,15787],{"class":282},"\"圆的周长\"",[51,15789,218],{"class":64},[51,15791,15792],{"class":72},"c1.",[51,15794,15795],{"class":68},"calculateZC",[51,15797,3507],{"class":72},[51,15799,218],{"class":64},[51,15801,288],{"class":72},[51,15803,15804],{"class":53,"line":2817},[51,15805,132],{"class":72},[40,15807,15808],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[29,15810,15812],{"className":45,"code":15811,"language":47,"meta":35,"style":35},"#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",[37,15813,15814,15820,15830,15836,15842,15846,15850,15855,15862,15867,15885,15889,15899,15903,15908,15924,15928,15938,15942,15947,15955,15959,15991,15995,15999,16007,16011,16016,16021,16035,16049,16058],{"__ignoreMap":35},[51,15815,15816,15818],{"class":53,"line":54},[51,15817,1026],{"class":64},[51,15819,1029],{"class":282},[51,15821,15822,15824,15826,15828],{"class":53,"line":61},[51,15823,1034],{"class":64},[51,15825,1037],{"class":64},[51,15827,1040],{"class":68},[51,15829,179],{"class":72},[51,15831,15832,15834],{"class":53,"line":93},[51,15833,1026],{"class":64},[51,15835,8711],{"class":282},[51,15837,15838,15840],{"class":53,"line":99},[51,15839,15656],{"class":64},[51,15841,8724],{"class":68},[51,15843,15844],{"class":53,"line":120},[51,15845,96],{"class":72},[51,15847,15848],{"class":53,"line":129},[51,15849,15678],{"class":64},[51,15851,15852],{"class":53,"line":206},[51,15853,15854],{"class":72},"    string m_name;\n",[51,15856,15857,15859],{"class":53,"line":212},[51,15858,102],{"class":64},[51,15860,15861],{"class":72}," m_id;\n",[51,15863,15864],{"class":53,"line":227},[51,15865,15866],{"class":57},"    \u002F\u002F赋值姓名\n",[51,15868,15869,15872,15875,15877,15880,15883],{"class":53,"line":370},[51,15870,15871],{"class":64},"    void",[51,15873,15874],{"class":68}," setName",[51,15876,73],{"class":72},[51,15878,15879],{"class":68},"string",[51,15881,15882],{"class":78}," name",[51,15884,90],{"class":72},[51,15886,15887],{"class":53,"line":387},[51,15888,3110],{"class":72},[51,15890,15891,15894,15896],{"class":53,"line":404},[51,15892,15893],{"class":72},"        m_name",[51,15895,108],{"class":64},[51,15897,15898],{"class":72},"name;\n",[51,15900,15901],{"class":53,"line":415},[51,15902,3267],{"class":72},[51,15904,15905],{"class":53,"line":420},[51,15906,15907],{"class":57},"    \u002F\u002F赋值学号\n",[51,15909,15910,15912,15915,15917,15919,15922],{"class":53,"line":429},[51,15911,15871],{"class":64},[51,15913,15914],{"class":68}," setId",[51,15916,73],{"class":72},[51,15918,65],{"class":64},[51,15920,15921],{"class":78}," id",[51,15923,90],{"class":72},[51,15925,15926],{"class":53,"line":434},[51,15927,3110],{"class":72},[51,15929,15930,15933,15935],{"class":53,"line":448},[51,15931,15932],{"class":72},"        m_id",[51,15934,108],{"class":64},[51,15936,15937],{"class":72},"id;\n",[51,15939,15940],{"class":53,"line":462},[51,15941,3267],{"class":72},[51,15943,15944],{"class":53,"line":470},[51,15945,15946],{"class":57},"    \u002F\u002F打印学生信息\n",[51,15948,15949,15951,15953],{"class":53,"line":2783},[51,15950,15871],{"class":64},[51,15952,10577],{"class":68},[51,15954,154],{"class":72},[51,15956,15957],{"class":53,"line":2788},[51,15958,3110],{"class":72},[51,15960,15961,15963,15965,15968,15970,15973,15975,15977,15979,15982,15984,15987,15989],{"class":53,"line":2817},[51,15962,4528],{"class":72},[51,15964,218],{"class":64},[51,15966,15967],{"class":282},"\"姓名：\"",[51,15969,218],{"class":64},[51,15971,15972],{"class":72},"m_name",[51,15974,218],{"class":64},[51,15976,5433],{"class":282},[51,15978,218],{"class":64},[51,15980,15981],{"class":282},"\"学号：\"",[51,15983,218],{"class":64},[51,15985,15986],{"class":72},"m_id",[51,15988,218],{"class":64},[51,15990,288],{"class":72},[51,15992,15993],{"class":53,"line":2822},[51,15994,3267],{"class":72},[51,15996,15997],{"class":53,"line":2839},[51,15998,5072],{"class":72},[51,16000,16001,16003,16005],{"class":53,"line":2844},[51,16002,65],{"class":64},[51,16004,151],{"class":68},[51,16006,154],{"class":72},[51,16008,16009],{"class":53,"line":2849},[51,16010,96],{"class":72},[51,16012,16013],{"class":53,"line":2854},[51,16014,16015],{"class":57},"    \u002F\u002F实例化\n",[51,16017,16018],{"class":53,"line":2868},[51,16019,16020],{"class":72},"    Student s1;\n",[51,16022,16023,16026,16029,16031,16033],{"class":53,"line":2873},[51,16024,16025],{"class":72},"    s1.",[51,16027,16028],{"class":68},"setName",[51,16030,73],{"class":72},[51,16032,8878],{"class":282},[51,16034,615],{"class":72},[51,16036,16037,16039,16042,16044,16047],{"class":53,"line":3657},[51,16038,16025],{"class":72},[51,16040,16041],{"class":68},"setId",[51,16043,73],{"class":72},[51,16045,16046],{"class":175},"123456",[51,16048,615],{"class":72},[51,16050,16051,16053,16056],{"class":53,"line":3671},[51,16052,16025],{"class":72},[51,16054,16055],{"class":68},"printInfo",[51,16057,541],{"class":72},[51,16059,16060],{"class":53,"line":3679},[51,16061,132],{"class":72},[40,16063,16064],{},"类中的属性和行为统称为成员",[40,16066,16067],{},"属性：成员属性(成员变量)",[40,16069,16070],{},"方法：成员函数(成员方法)",[40,16072,16073],{},[840,16074,16075],{},"封装意义二：",[40,16077,16078],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[40,16080,16081],{},"访问权限有三种：",[19,16083,16084,16087,16090],{},[22,16085,16086],{},"public        公共权限",[22,16088,16089],{},"protected 保护权限",[22,16091,16092],{},"private      私有权限",[40,16094,16095],{},[840,16096,16097],{},"示例：",[29,16099,16101],{"className":10903,"code":16100,"language":10905,"meta":35,"style":35},"\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",[37,16102,16103,16108,16113,16118,16123,16127,16134,16138,16143,16147,16152,16156,16161,16166,16171,16175,16180,16185,16192,16196,16200,16208,16212,16223,16235,16247,16251,16255,16259,16267,16271,16276,16288,16296,16304,16308,16318,16322,16330],{"__ignoreMap":35},[51,16104,16105],{"class":53,"line":54},[51,16106,16107],{"class":57},"\u002F\u002F三种权限\n",[51,16109,16110],{"class":53,"line":61},[51,16111,16112],{"class":57},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[51,16114,16115],{"class":53,"line":93},[51,16116,16117],{"class":57},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[51,16119,16120],{"class":53,"line":99},[51,16121,16122],{"class":57},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[51,16124,16125],{"class":53,"line":120},[51,16126,3480],{"emptyLinePlaceholder":1192},[51,16128,16129,16131],{"class":53,"line":129},[51,16130,15656],{"class":64},[51,16132,16133],{"class":68}," Person\n",[51,16135,16136],{"class":53,"line":206},[51,16137,96],{"class":72},[51,16139,16140],{"class":53,"line":212},[51,16141,16142],{"class":57},"    \u002F\u002F姓名  公共权限\n",[51,16144,16145],{"class":53,"line":227},[51,16146,15678],{"class":64},[51,16148,16149],{"class":53,"line":370},[51,16150,16151],{"class":72},"    string m_Name;\n",[51,16153,16154],{"class":53,"line":387},[51,16155,3480],{"emptyLinePlaceholder":1192},[51,16157,16158],{"class":53,"line":404},[51,16159,16160],{"class":57},"    \u002F\u002F汽车  保护权限\n",[51,16162,16163],{"class":53,"line":415},[51,16164,16165],{"class":64},"protected:\n",[51,16167,16168],{"class":53,"line":420},[51,16169,16170],{"class":72},"    string m_Car;\n",[51,16172,16173],{"class":53,"line":429},[51,16174,3480],{"emptyLinePlaceholder":1192},[51,16176,16177],{"class":53,"line":434},[51,16178,16179],{"class":57},"    \u002F\u002F银行卡密码  私有权限\n",[51,16181,16182],{"class":53,"line":448},[51,16183,16184],{"class":64},"private:\n",[51,16186,16187,16189],{"class":53,"line":462},[51,16188,102],{"class":64},[51,16190,16191],{"class":72}," m_Password;\n",[51,16193,16194],{"class":53,"line":470},[51,16195,3480],{"emptyLinePlaceholder":1192},[51,16197,16198],{"class":53,"line":2783},[51,16199,15678],{"class":64},[51,16201,16202,16204,16206],{"class":53,"line":2788},[51,16203,15871],{"class":64},[51,16205,12347],{"class":68},[51,16207,154],{"class":72},[51,16209,16210],{"class":53,"line":2817},[51,16211,3110],{"class":72},[51,16213,16214,16217,16219,16221],{"class":53,"line":2822},[51,16215,16216],{"class":72},"        m_Name ",[51,16218,108],{"class":64},[51,16220,9900],{"class":282},[51,16222,179],{"class":72},[51,16224,16225,16228,16230,16233],{"class":53,"line":2839},[51,16226,16227],{"class":72},"        m_Car ",[51,16229,108],{"class":64},[51,16231,16232],{"class":282}," \"拖拉机\"",[51,16234,179],{"class":72},[51,16236,16237,16240,16242,16245],{"class":53,"line":2844},[51,16238,16239],{"class":72},"        m_Password ",[51,16241,108],{"class":64},[51,16243,16244],{"class":175}," 123456",[51,16246,179],{"class":72},[51,16248,16249],{"class":53,"line":2849},[51,16250,3267],{"class":72},[51,16252,16253],{"class":53,"line":2854},[51,16254,5072],{"class":72},[51,16256,16257],{"class":53,"line":2868},[51,16258,3480],{"emptyLinePlaceholder":1192},[51,16260,16261,16263,16265],{"class":53,"line":2873},[51,16262,65],{"class":64},[51,16264,151],{"class":68},[51,16266,11815],{"class":72},[51,16268,16269],{"class":53,"line":3657},[51,16270,3480],{"emptyLinePlaceholder":1192},[51,16272,16273],{"class":53,"line":3671},[51,16274,16275],{"class":72},"    Person p;\n",[51,16277,16278,16281,16283,16286],{"class":53,"line":3679},[51,16279,16280],{"class":72},"    p.m_Name ",[51,16282,108],{"class":64},[51,16284,16285],{"class":282}," \"李四\"",[51,16287,179],{"class":72},[51,16289,16290,16293],{"class":53,"line":3684},[51,16291,16292],{"class":57},"    \u002F\u002Fp.m_Car = \"奔驰\";",[51,16294,16295],{"class":57},"  \u002F\u002F保护权限类外访问不到\n",[51,16297,16298,16301],{"class":53,"line":3690},[51,16299,16300],{"class":57},"    \u002F\u002Fp.m_Password = 123;",[51,16302,16303],{"class":57}," \u002F\u002F私有权限类外访问不到\n",[51,16305,16306],{"class":53,"line":3696},[51,16307,3480],{"emptyLinePlaceholder":1192},[51,16309,16310,16312,16314,16316],{"class":53,"line":3701},[51,16311,3383],{"class":68},[51,16313,73],{"class":72},[51,16315,3388],{"class":282},[51,16317,615],{"class":72},[51,16319,16320],{"class":53,"line":8910},[51,16321,3480],{"emptyLinePlaceholder":1192},[51,16323,16324,16326,16328],{"class":53,"line":8934},[51,16325,123],{"class":64},[51,16327,5169],{"class":175},[51,16329,179],{"class":72},[51,16331,16332],{"class":53,"line":8939},[51,16333,132],{"class":72},[1233,16335,16337],{"id":16336},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[40,16339,16340,16341,16344,16345],{},"在C++中 struct和class唯一的",[840,16342,16343],{},"区别","就在于 ",[840,16346,16347],{},"默认的访问权限不同",[40,16349,16350],{},"区别：",[1000,16352,16353,16356],{},[22,16354,16355],{},"struct 默认权限为公共",[22,16357,16358],{},"class   默认权限为私有",[29,16360,16362],{"className":10903,"code":16361,"language":10905,"meta":35,"style":35},"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",[37,16363,16364,16371,16375,16385,16389,16393,16400,16404,16414,16418,16422,16430,16434,16439,16453,16457,16462,16476,16480,16490,16494,16502],{"__ignoreMap":35},[51,16365,16366,16368],{"class":53,"line":54},[51,16367,15656],{"class":64},[51,16369,16370],{"class":68}," C1\n",[51,16372,16373],{"class":53,"line":61},[51,16374,96],{"class":72},[51,16376,16377,16379,16382],{"class":53,"line":93},[51,16378,102],{"class":64},[51,16380,16381],{"class":72},"  m_A;",[51,16383,16384],{"class":57}," \u002F\u002F默认是私有权限\n",[51,16386,16387],{"class":53,"line":99},[51,16388,5072],{"class":72},[51,16390,16391],{"class":53,"line":120},[51,16392,3480],{"emptyLinePlaceholder":1192},[51,16394,16395,16397],{"class":53,"line":129},[51,16396,8721],{"class":64},[51,16398,16399],{"class":68}," C2\n",[51,16401,16402],{"class":53,"line":206},[51,16403,96],{"class":72},[51,16405,16406,16408,16411],{"class":53,"line":212},[51,16407,102],{"class":64},[51,16409,16410],{"class":72}," m_A;",[51,16412,16413],{"class":57},"  \u002F\u002F默认是公共权限\n",[51,16415,16416],{"class":53,"line":227},[51,16417,5072],{"class":72},[51,16419,16420],{"class":53,"line":370},[51,16421,3480],{"emptyLinePlaceholder":1192},[51,16423,16424,16426,16428],{"class":53,"line":387},[51,16425,65],{"class":64},[51,16427,151],{"class":68},[51,16429,11815],{"class":72},[51,16431,16432],{"class":53,"line":404},[51,16433,3480],{"emptyLinePlaceholder":1192},[51,16435,16436],{"class":53,"line":415},[51,16437,16438],{"class":72},"    C1 c1;\n",[51,16440,16441,16444,16446,16448,16450],{"class":53,"line":420},[51,16442,16443],{"class":72},"    c1.m_A ",[51,16445,108],{"class":64},[51,16447,3118],{"class":175},[51,16449,409],{"class":72},[51,16451,16452],{"class":57}," \u002F\u002F错误，访问权限是私有\n",[51,16454,16455],{"class":53,"line":429},[51,16456,3480],{"emptyLinePlaceholder":1192},[51,16458,16459],{"class":53,"line":434},[51,16460,16461],{"class":72},"    C2 c2;\n",[51,16463,16464,16467,16469,16471,16473],{"class":53,"line":448},[51,16465,16466],{"class":72},"    c2.m_A ",[51,16468,108],{"class":64},[51,16470,3118],{"class":175},[51,16472,409],{"class":72},[51,16474,16475],{"class":57}," \u002F\u002F正确，访问权限是公共\n",[51,16477,16478],{"class":53,"line":462},[51,16479,3480],{"emptyLinePlaceholder":1192},[51,16481,16482,16484,16486,16488],{"class":53,"line":470},[51,16483,3383],{"class":68},[51,16485,73],{"class":72},[51,16487,3388],{"class":282},[51,16489,615],{"class":72},[51,16491,16492],{"class":53,"line":2783},[51,16493,3480],{"emptyLinePlaceholder":1192},[51,16495,16496,16498,16500],{"class":53,"line":2788},[51,16497,123],{"class":64},[51,16499,5169],{"class":175},[51,16501,179],{"class":72},[51,16503,16504],{"class":53,"line":2817},[51,16505,132],{"class":72},[1233,16507,16509],{"id":16508},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[40,16511,16512],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[40,16514,16515],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[40,16517,16518],{},[840,16519,16097],{},[29,16521,16523],{"className":10903,"code":16522,"language":10905,"meta":35,"style":35},"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",[37,16524,16525,16535,16539,16543,16548,16562,16571,16575,16585,16589,16596,16600,16604,16608,16613,16622,16629,16633,16638,16654,16677,16690,16697,16701,16710,16714,16718,16723,16739,16749,16753,16757,16761,16769,16773,16783,16787,16795,16799,16803,16811,16815,16819,16824,16837,16860,16864,16869,16882,16904,16908,16913,16927,16935,16939,16949,16953,16961],{"__ignoreMap":35},[51,16526,16527,16529,16532],{"class":53,"line":54},[51,16528,15656],{"class":64},[51,16530,16531],{"class":68}," Person",[51,16533,16534],{"class":72}," {\n",[51,16536,16537],{"class":53,"line":61},[51,16538,15678],{"class":64},[51,16540,16541],{"class":53,"line":93},[51,16542,3480],{"emptyLinePlaceholder":1192},[51,16544,16545],{"class":53,"line":99},[51,16546,16547],{"class":57},"    \u002F\u002F姓名设置可读可写\n",[51,16549,16550,16552,16554,16556,16558,16560],{"class":53,"line":120},[51,16551,15871],{"class":64},[51,16553,15874],{"class":68},[51,16555,73],{"class":72},[51,16557,15879],{"class":68},[51,16559,15882],{"class":78},[51,16561,13404],{"class":72},[51,16563,16564,16566,16568],{"class":53,"line":129},[51,16565,16216],{"class":72},[51,16567,108],{"class":64},[51,16569,16570],{"class":72}," name;\n",[51,16572,16573],{"class":53,"line":206},[51,16574,3267],{"class":72},[51,16576,16577,16580,16583],{"class":53,"line":212},[51,16578,16579],{"class":68},"    string",[51,16581,16582],{"class":68}," getName",[51,16584,154],{"class":72},[51,16586,16587],{"class":53,"line":227},[51,16588,3110],{"class":72},[51,16590,16591,16593],{"class":53,"line":370},[51,16592,15714],{"class":64},[51,16594,16595],{"class":72}," m_Name;\n",[51,16597,16598],{"class":53,"line":387},[51,16599,3267],{"class":72},[51,16601,16602],{"class":53,"line":404},[51,16603,3480],{"emptyLinePlaceholder":1192},[51,16605,16606],{"class":53,"line":415},[51,16607,3480],{"emptyLinePlaceholder":1192},[51,16609,16610],{"class":53,"line":420},[51,16611,16612],{"class":57},"    \u002F\u002F获取年龄 \n",[51,16614,16615,16617,16620],{"class":53,"line":429},[51,16616,102],{"class":64},[51,16618,16619],{"class":68}," getAge",[51,16621,11815],{"class":72},[51,16623,16624,16626],{"class":53,"line":434},[51,16625,15714],{"class":64},[51,16627,16628],{"class":72}," m_Age;\n",[51,16630,16631],{"class":53,"line":448},[51,16632,3267],{"class":72},[51,16634,16635],{"class":53,"line":462},[51,16636,16637],{"class":57},"    \u002F\u002F设置年龄\n",[51,16639,16640,16642,16645,16647,16649,16652],{"class":53,"line":470},[51,16641,15871],{"class":64},[51,16643,16644],{"class":68}," setAge",[51,16646,73],{"class":72},[51,16648,65],{"class":64},[51,16650,16651],{"class":78}," age",[51,16653,13404],{"class":72},[51,16655,16656,16658,16661,16663,16665,16667,16670,16672,16675],{"class":53,"line":2783},[51,16657,3577],{"class":64},[51,16659,16660],{"class":72}," (age ",[51,16662,2154],{"class":64},[51,16664,5169],{"class":175},[51,16666,4332],{"class":64},[51,16668,16669],{"class":72}," age ",[51,16671,972],{"class":64},[51,16673,16674],{"class":175}," 150",[51,16676,13404],{"class":72},[51,16678,16679,16681,16683,16686,16688],{"class":53,"line":2788},[51,16680,10681],{"class":72},[51,16682,218],{"class":64},[51,16684,16685],{"class":282}," \"你个老妖精!\"",[51,16687,2546],{"class":64},[51,16689,9802],{"class":72},[51,16691,16692,16695],{"class":53,"line":2817},[51,16693,16694],{"class":64},"            return",[51,16696,179],{"class":72},[51,16698,16699],{"class":53,"line":2822},[51,16700,3609],{"class":72},[51,16702,16703,16706,16708],{"class":53,"line":2839},[51,16704,16705],{"class":72},"        m_Age ",[51,16707,108],{"class":64},[51,16709,8759],{"class":72},[51,16711,16712],{"class":53,"line":2844},[51,16713,3267],{"class":72},[51,16715,16716],{"class":53,"line":2849},[51,16717,3480],{"emptyLinePlaceholder":1192},[51,16719,16720],{"class":53,"line":2854},[51,16721,16722],{"class":57},"    \u002F\u002F情人设置为只写\n",[51,16724,16725,16727,16730,16732,16734,16737],{"class":53,"line":2868},[51,16726,15871],{"class":64},[51,16728,16729],{"class":68}," setLover",[51,16731,73],{"class":72},[51,16733,15879],{"class":68},[51,16735,16736],{"class":78}," lover",[51,16738,13404],{"class":72},[51,16740,16741,16744,16746],{"class":53,"line":2873},[51,16742,16743],{"class":72},"        m_Lover ",[51,16745,108],{"class":64},[51,16747,16748],{"class":72}," lover;\n",[51,16750,16751],{"class":53,"line":3657},[51,16752,3267],{"class":72},[51,16754,16755],{"class":53,"line":3671},[51,16756,3480],{"emptyLinePlaceholder":1192},[51,16758,16759],{"class":53,"line":3679},[51,16760,16184],{"class":64},[51,16762,16763,16766],{"class":53,"line":3684},[51,16764,16765],{"class":72},"    string m_Name;",[51,16767,16768],{"class":57}," \u002F\u002F可读可写  姓名\n",[51,16770,16771],{"class":53,"line":3690},[51,16772,14172],{"class":72},[51,16774,16775,16777,16780],{"class":53,"line":3696},[51,16776,102],{"class":64},[51,16778,16779],{"class":72}," m_Age;",[51,16781,16782],{"class":57}," \u002F\u002F只读  年龄\n",[51,16784,16785],{"class":53,"line":3701},[51,16786,3480],{"emptyLinePlaceholder":1192},[51,16788,16789,16792],{"class":53,"line":8910},[51,16790,16791],{"class":72},"    string m_Lover;",[51,16793,16794],{"class":57}," \u002F\u002F只写  情人\n",[51,16796,16797],{"class":53,"line":8934},[51,16798,5072],{"class":72},[51,16800,16801],{"class":53,"line":8939},[51,16802,3480],{"emptyLinePlaceholder":1192},[51,16804,16805,16807,16809],{"class":53,"line":8945},[51,16806,65],{"class":64},[51,16808,151],{"class":68},[51,16810,11815],{"class":72},[51,16812,16813],{"class":53,"line":8972},[51,16814,3480],{"emptyLinePlaceholder":1192},[51,16816,16817],{"class":53,"line":8977},[51,16818,16275],{"class":72},[51,16820,16821],{"class":53,"line":8983},[51,16822,16823],{"class":57},"    \u002F\u002F姓名设置\n",[51,16825,16826,16829,16831,16833,16835],{"class":53,"line":8995},[51,16827,16828],{"class":72},"    p.",[51,16830,16028],{"class":68},[51,16832,73],{"class":72},[51,16834,8878],{"class":282},[51,16836,615],{"class":72},[51,16838,16839,16841,16843,16846,16848,16851,16854,16856,16858],{"class":53,"line":9007},[51,16840,7491],{"class":72},[51,16842,218],{"class":64},[51,16844,16845],{"class":282}," \"姓名： \"",[51,16847,2546],{"class":64},[51,16849,16850],{"class":72}," p.",[51,16852,16853],{"class":68},"getName",[51,16855,14012],{"class":72},[51,16857,218],{"class":64},[51,16859,9802],{"class":72},[51,16861,16862],{"class":53,"line":9019},[51,16863,3480],{"emptyLinePlaceholder":1192},[51,16865,16866],{"class":53,"line":10678},[51,16867,16868],{"class":57},"    \u002F\u002F年龄设置\n",[51,16870,16871,16873,16876,16878,16880],{"class":53,"line":10703},[51,16872,16828],{"class":72},[51,16874,16875],{"class":68},"setAge",[51,16877,73],{"class":72},[51,16879,1902],{"class":175},[51,16881,615],{"class":72},[51,16883,16884,16886,16888,16891,16893,16895,16898,16900,16902],{"class":53,"line":10726},[51,16885,7491],{"class":72},[51,16887,218],{"class":64},[51,16889,16890],{"class":282}," \"年龄： \"",[51,16892,2546],{"class":64},[51,16894,16850],{"class":72},[51,16896,16897],{"class":68},"getAge",[51,16899,14012],{"class":72},[51,16901,218],{"class":64},[51,16903,9802],{"class":72},[51,16905,16906],{"class":53,"line":10750},[51,16907,3480],{"emptyLinePlaceholder":1192},[51,16909,16910],{"class":53,"line":10755},[51,16911,16912],{"class":57},"    \u002F\u002F情人设置\n",[51,16914,16915,16917,16920,16922,16925],{"class":53,"line":10760},[51,16916,16828],{"class":72},[51,16918,16919],{"class":68},"setLover",[51,16921,73],{"class":72},[51,16923,16924],{"class":282},"\"苍井\"",[51,16926,615],{"class":72},[51,16928,16929,16932],{"class":53,"line":10765},[51,16930,16931],{"class":57},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[51,16933,16934],{"class":57},"  \u002F\u002F只写属性，不可以读取\n",[51,16936,16937],{"class":53,"line":10774},[51,16938,3480],{"emptyLinePlaceholder":1192},[51,16940,16941,16943,16945,16947],{"class":53,"line":10779},[51,16942,3383],{"class":68},[51,16944,73],{"class":72},[51,16946,3388],{"class":282},[51,16948,615],{"class":72},[51,16950,16951],{"class":53,"line":10785},[51,16952,3480],{"emptyLinePlaceholder":1192},[51,16954,16955,16957,16959],{"class":53,"line":10806},[51,16956,123],{"class":64},[51,16958,5169],{"class":175},[51,16960,179],{"class":72},[51,16962,16963],{"class":53,"line":10812},[51,16964,132],{"class":72},[1233,16966,16968],{"id":16967},"_814封装案例","8.1.4封装案例",[19,16970,16971],{},[22,16972,16973,16976],{},[840,16974,16975],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1000,16978,16979,16982],{},[22,16980,16981],{},"求出立方体的面积和体积",[22,16983,16984],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[29,16986,16988],{"className":45,"code":16987,"language":47,"meta":35,"style":35},"#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",[37,16989,16990,16996,17006,17013,17017,17021,17026,17056,17060,17070,17080,17090,17094,17103,17107,17143,17147,17156,17160,17176,17180,17185,17194,17198,17205,17209,17218,17222,17229,17233,17242,17246,17253,17257,17262,17279,17283,17329,17333,17342,17346,17350,17354,17363,17367,17371,17376,17380,17386,17392,17398,17402,17406,17411,17433,17437,17491,17495,17503,17507,17512,17517,17530,17537,17553,17564,17570,17593,17599,17622,17636,17656,17662,17673,17696,17718,17723,17729,17743,17756,17761,17775,17780,17786,17791,17805,17810,17815,17829,17841,17846,17859,17864,17869,17874,17887,17892],{"__ignoreMap":35},[51,16991,16992,16994],{"class":53,"line":54},[51,16993,1026],{"class":64},[51,16995,1029],{"class":282},[51,16997,16998,17000,17002,17004],{"class":53,"line":61},[51,16999,1034],{"class":64},[51,17001,1037],{"class":64},[51,17003,1040],{"class":68},[51,17005,179],{"class":72},[51,17007,17008,17010],{"class":53,"line":93},[51,17009,15656],{"class":64},[51,17011,17012],{"class":68}," Cube\n",[51,17014,17015],{"class":53,"line":99},[51,17016,96],{"class":72},[51,17018,17019],{"class":53,"line":120},[51,17020,15678],{"class":64},[51,17022,17023],{"class":53,"line":129},[51,17024,17025],{"class":57},"    \u002F\u002F输入长宽高\n",[51,17027,17028,17030,17033,17035,17037,17040,17042,17044,17047,17049,17051,17054],{"class":53,"line":206},[51,17029,15871],{"class":64},[51,17031,17032],{"class":68}," setLwh",[51,17034,73],{"class":72},[51,17036,65],{"class":64},[51,17038,17039],{"class":78}," l",[51,17041,82],{"class":72},[51,17043,65],{"class":64},[51,17045,17046],{"class":78}," w",[51,17048,82],{"class":72},[51,17050,65],{"class":64},[51,17052,17053],{"class":78}," h",[51,17055,90],{"class":72},[51,17057,17058],{"class":53,"line":212},[51,17059,3110],{"class":72},[51,17061,17062,17065,17067],{"class":53,"line":227},[51,17063,17064],{"class":72},"        m_L",[51,17066,108],{"class":64},[51,17068,17069],{"class":72},"l;\n",[51,17071,17072,17075,17077],{"class":53,"line":370},[51,17073,17074],{"class":72},"        m_W",[51,17076,108],{"class":64},[51,17078,17079],{"class":72},"w;\n",[51,17081,17082,17085,17087],{"class":53,"line":387},[51,17083,17084],{"class":72},"        m_H",[51,17086,108],{"class":64},[51,17088,17089],{"class":72},"h;\n",[51,17091,17092],{"class":53,"line":404},[51,17093,3267],{"class":72},[51,17095,17096,17098,17101],{"class":53,"line":415},[51,17097,102],{"class":64},[51,17099,17100],{"class":68}," mianji",[51,17102,154],{"class":72},[51,17104,17105],{"class":53,"line":420},[51,17106,3110],{"class":72},[51,17108,17109,17111,17113,17115,17118,17120,17123,17125,17128,17130,17133,17135,17138,17140],{"class":53,"line":429},[51,17110,15714],{"class":64},[51,17112,15717],{"class":175},[51,17114,1702],{"class":64},[51,17116,17117],{"class":72},"(m_L",[51,17119,1702],{"class":64},[51,17121,17122],{"class":72},"m_W ",[51,17124,114],{"class":64},[51,17126,17127],{"class":72}," m_L",[51,17129,1702],{"class":64},[51,17131,17132],{"class":72},"m_H ",[51,17134,114],{"class":64},[51,17136,17137],{"class":72}," m_W",[51,17139,1702],{"class":64},[51,17141,17142],{"class":72},"m_H);\n",[51,17144,17145],{"class":53,"line":434},[51,17146,3267],{"class":72},[51,17148,17149,17151,17154],{"class":53,"line":448},[51,17150,102],{"class":64},[51,17152,17153],{"class":68}," tiji",[51,17155,154],{"class":72},[51,17157,17158],{"class":53,"line":462},[51,17159,3110],{"class":72},[51,17161,17162,17164,17166,17168,17171,17173],{"class":53,"line":470},[51,17163,15714],{"class":64},[51,17165,17127],{"class":72},[51,17167,1702],{"class":64},[51,17169,17170],{"class":72},"m_W",[51,17172,1702],{"class":64},[51,17174,17175],{"class":72},"m_H;\n",[51,17177,17178],{"class":53,"line":2783},[51,17179,3267],{"class":72},[51,17181,17182],{"class":53,"line":2788},[51,17183,17184],{"class":57},"    \u002F\u002F获取长宽高\n",[51,17186,17187,17189,17192],{"class":53,"line":2817},[51,17188,102],{"class":64},[51,17190,17191],{"class":68}," getLength",[51,17193,154],{"class":72},[51,17195,17196],{"class":53,"line":2822},[51,17197,3110],{"class":72},[51,17199,17200,17202],{"class":53,"line":2839},[51,17201,15714],{"class":64},[51,17203,17204],{"class":72}," m_L;\n",[51,17206,17207],{"class":53,"line":2844},[51,17208,3267],{"class":72},[51,17210,17211,17213,17216],{"class":53,"line":2849},[51,17212,102],{"class":64},[51,17214,17215],{"class":68}," getWidth",[51,17217,154],{"class":72},[51,17219,17220],{"class":53,"line":2854},[51,17221,3110],{"class":72},[51,17223,17224,17226],{"class":53,"line":2868},[51,17225,15714],{"class":64},[51,17227,17228],{"class":72}," m_W;\n",[51,17230,17231],{"class":53,"line":2873},[51,17232,3267],{"class":72},[51,17234,17235,17237,17240],{"class":53,"line":3657},[51,17236,102],{"class":64},[51,17238,17239],{"class":68}," getHeight",[51,17241,154],{"class":72},[51,17243,17244],{"class":53,"line":3671},[51,17245,3110],{"class":72},[51,17247,17248,17250],{"class":53,"line":3679},[51,17249,15714],{"class":64},[51,17251,17252],{"class":72}," m_H;\n",[51,17254,17255],{"class":53,"line":3684},[51,17256,3267],{"class":72},[51,17258,17259],{"class":53,"line":3690},[51,17260,17261],{"class":57},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[51,17263,17264,17267,17270,17272,17275,17277],{"class":53,"line":3696},[51,17265,17266],{"class":64},"    bool",[51,17268,17269],{"class":68}," isEqual",[51,17271,73],{"class":72},[51,17273,17274],{"class":68},"Cube",[51,17276,800],{"class":78},[51,17278,90],{"class":72},[51,17280,17281],{"class":53,"line":3701},[51,17282,3110],{"class":72},[51,17284,17285,17287,17290,17293,17295,17297,17300,17302,17305,17308,17310,17312,17315,17317,17319,17322,17324,17326],{"class":53,"line":8910},[51,17286,3577],{"class":64},[51,17288,17289],{"class":72}," (c.",[51,17291,17292],{"class":68},"getLength",[51,17294,14012],{"class":72},[51,17296,4026],{"class":64},[51,17298,17299],{"class":72}," m_L ",[51,17301,2805],{"class":64},[51,17303,17304],{"class":72}," c.",[51,17306,17307],{"class":68},"getWidth",[51,17309,14012],{"class":72},[51,17311,4026],{"class":64},[51,17313,17314],{"class":72}," m_W ",[51,17316,2805],{"class":64},[51,17318,17304],{"class":72},[51,17320,17321],{"class":68},"getHeight",[51,17323,14012],{"class":72},[51,17325,4026],{"class":64},[51,17327,17328],{"class":72}," m_H)\n",[51,17330,17331],{"class":53,"line":8934},[51,17332,3590],{"class":72},[51,17334,17335,17337,17340],{"class":53,"line":8939},[51,17336,16694],{"class":64},[51,17338,17339],{"class":175}," true",[51,17341,179],{"class":72},[51,17343,17344],{"class":53,"line":8945},[51,17345,3609],{"class":72},[51,17347,17348],{"class":53,"line":8972},[51,17349,3650],{"class":64},[51,17351,17352],{"class":53,"line":8977},[51,17353,3590],{"class":72},[51,17355,17356,17358,17361],{"class":53,"line":8983},[51,17357,16694],{"class":64},[51,17359,17360],{"class":175}," false",[51,17362,179],{"class":72},[51,17364,17365],{"class":53,"line":8995},[51,17366,3609],{"class":72},[51,17368,17369],{"class":53,"line":9007},[51,17370,3267],{"class":72},[51,17372,17373],{"class":53,"line":9019},[51,17374,17375],{"class":57},"    \u002F\u002F私有属性\n",[51,17377,17378],{"class":53,"line":10678},[51,17379,16184],{"class":64},[51,17381,17382,17384],{"class":53,"line":10703},[51,17383,102],{"class":64},[51,17385,17204],{"class":72},[51,17387,17388,17390],{"class":53,"line":10726},[51,17389,102],{"class":64},[51,17391,17228],{"class":72},[51,17393,17394,17396],{"class":53,"line":10750},[51,17395,102],{"class":64},[51,17397,17252],{"class":72},[51,17399,17400],{"class":53,"line":10755},[51,17401,3480],{"emptyLinePlaceholder":1192},[51,17403,17404],{"class":53,"line":10760},[51,17405,5072],{"class":72},[51,17407,17408],{"class":53,"line":10765},[51,17409,17410],{"class":57},"\u002F\u002F全局函数判断两个立方体是否相等\n",[51,17412,17413,17415,17417,17419,17421,17424,17426,17428,17431],{"class":53,"line":10774},[51,17414,2459],{"class":64},[51,17416,17269],{"class":68},[51,17418,73],{"class":72},[51,17420,17274],{"class":68},[51,17422,17423],{"class":78}," c1",[51,17425,82],{"class":72},[51,17427,17274],{"class":68},[51,17429,17430],{"class":78}," c2",[51,17432,90],{"class":72},[51,17434,17435],{"class":53,"line":10779},[51,17436,96],{"class":72},[51,17438,17439,17441,17444,17446,17448,17450,17453,17455,17458,17460,17462,17464,17466,17468,17470,17472,17474,17476,17478,17480,17482,17484,17486,17488],{"class":53,"line":10785},[51,17440,123],{"class":64},[51,17442,17443],{"class":72}," (c1.",[51,17445,17292],{"class":68},[51,17447,14012],{"class":72},[51,17449,4026],{"class":64},[51,17451,17452],{"class":72}," c2.",[51,17454,17292],{"class":68},[51,17456,17457],{"class":72},"()) ",[51,17459,2805],{"class":64},[51,17461,17443],{"class":72},[51,17463,17307],{"class":68},[51,17465,14012],{"class":72},[51,17467,4026],{"class":64},[51,17469,17452],{"class":72},[51,17471,17307],{"class":68},[51,17473,17457],{"class":72},[51,17475,2805],{"class":64},[51,17477,17443],{"class":72},[51,17479,17321],{"class":68},[51,17481,14012],{"class":72},[51,17483,4026],{"class":64},[51,17485,17452],{"class":72},[51,17487,17321],{"class":68},[51,17489,17490],{"class":72},"());\n",[51,17492,17493],{"class":53,"line":10806},[51,17494,132],{"class":72},[51,17496,17497,17499,17501],{"class":53,"line":10812},[51,17498,65],{"class":64},[51,17500,151],{"class":68},[51,17502,154],{"class":72},[51,17504,17505],{"class":53,"line":10826},[51,17506,96],{"class":72},[51,17508,17509],{"class":53,"line":10832},[51,17510,17511],{"class":72},"    Cube c1;\n",[51,17513,17514],{"class":53,"line":10859},[51,17515,17516],{"class":57},"    \u002F\u002F输入立方体的长宽高\n",[51,17518,17519,17521,17523,17526,17528],{"class":53,"line":10868},[51,17520,215],{"class":72},[51,17522,218],{"class":64},[51,17524,17525],{"class":282},"\"请输入第一个立方体的长、宽、高：\"",[51,17527,218],{"class":64},[51,17529,288],{"class":72},[51,17531,17532,17534],{"class":53,"line":10874},[51,17533,102],{"class":64},[51,17535,17536],{"class":72}," l,w,h,l1,w1,h1;\n",[51,17538,17539,17541,17543,17545,17547,17549,17551],{"class":53,"line":10882},[51,17540,197],{"class":72},[51,17542,200],{"class":64},[51,17544,1764],{"class":72},[51,17546,200],{"class":64},[51,17548,2040],{"class":72},[51,17550,200],{"class":64},[51,17552,17089],{"class":72},[51,17554,17555,17558,17561],{"class":53,"line":10887},[51,17556,17557],{"class":72},"    c1.",[51,17559,17560],{"class":68},"setLwh",[51,17562,17563],{"class":72},"(l,w,h);\n",[51,17565,17567],{"class":53,"line":17566},66,[51,17568,17569],{"class":57},"    \u002F\u002F面积\n",[51,17571,17573,17575,17577,17580,17582,17584,17587,17589,17591],{"class":53,"line":17572},67,[51,17574,215],{"class":72},[51,17576,218],{"class":64},[51,17578,17579],{"class":282},"\"立方体的表面积为：\"",[51,17581,218],{"class":64},[51,17583,15792],{"class":72},[51,17585,17586],{"class":68},"mianji",[51,17588,3507],{"class":72},[51,17590,218],{"class":64},[51,17592,288],{"class":72},[51,17594,17596],{"class":53,"line":17595},68,[51,17597,17598],{"class":57},"    \u002F\u002F体积\n",[51,17600,17602,17604,17606,17609,17611,17613,17616,17618,17620],{"class":53,"line":17601},69,[51,17603,215],{"class":72},[51,17605,218],{"class":64},[51,17607,17608],{"class":282},"\"立方体的体积为：\"",[51,17610,218],{"class":64},[51,17612,15792],{"class":72},[51,17614,17615],{"class":68},"tiji",[51,17617,3507],{"class":72},[51,17619,218],{"class":64},[51,17621,288],{"class":72},[51,17623,17625,17627,17629,17632,17634],{"class":53,"line":17624},70,[51,17626,215],{"class":72},[51,17628,218],{"class":64},[51,17630,17631],{"class":282},"\"请输入第二个立方体的长、宽、高：\"",[51,17633,218],{"class":64},[51,17635,288],{"class":72},[51,17637,17639,17641,17643,17646,17648,17651,17653],{"class":53,"line":17638},71,[51,17640,197],{"class":72},[51,17642,200],{"class":64},[51,17644,17645],{"class":72},"l1",[51,17647,200],{"class":64},[51,17649,17650],{"class":72},"w1",[51,17652,200],{"class":64},[51,17654,17655],{"class":72},"h1;\n",[51,17657,17659],{"class":53,"line":17658},72,[51,17660,17661],{"class":72},"    Cube c2;\n",[51,17663,17665,17668,17670],{"class":53,"line":17664},73,[51,17666,17667],{"class":72},"    c2.",[51,17669,17560],{"class":68},[51,17671,17672],{"class":72},"(l1,w1,h1);\n",[51,17674,17676,17678,17680,17683,17685,17688,17690,17692,17694],{"class":53,"line":17675},74,[51,17677,215],{"class":72},[51,17679,218],{"class":64},[51,17681,17682],{"class":282},"\"第二个立方体的表面积为：\"",[51,17684,218],{"class":64},[51,17686,17687],{"class":72},"c2.",[51,17689,17586],{"class":68},[51,17691,3507],{"class":72},[51,17693,218],{"class":64},[51,17695,288],{"class":72},[51,17697,17699,17701,17703,17706,17708,17710,17712,17714,17716],{"class":53,"line":17698},75,[51,17700,215],{"class":72},[51,17702,218],{"class":64},[51,17704,17705],{"class":282},"\"第二个立方体的体积为：\"",[51,17707,218],{"class":64},[51,17709,17687],{"class":72},[51,17711,17615],{"class":68},[51,17713,3507],{"class":72},[51,17715,218],{"class":64},[51,17717,288],{"class":72},[51,17719,17721],{"class":53,"line":17720},76,[51,17722,3480],{"emptyLinePlaceholder":1192},[51,17724,17726],{"class":53,"line":17725},77,[51,17727,17728],{"class":57},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[51,17730,17732,17734,17736,17739,17741],{"class":53,"line":17731},78,[51,17733,215],{"class":72},[51,17735,218],{"class":64},[51,17737,17738],{"class":282},"\"内部函数判断结果：\"",[51,17740,218],{"class":64},[51,17742,288],{"class":72},[51,17744,17746,17748,17750,17753],{"class":53,"line":17745},79,[51,17747,4178],{"class":64},[51,17749,17443],{"class":72},[51,17751,17752],{"class":68},"isEqual",[51,17754,17755],{"class":72},"(c2))\n",[51,17757,17759],{"class":53,"line":17758},80,[51,17760,3110],{"class":72},[51,17762,17764,17766,17768,17771,17773],{"class":53,"line":17763},81,[51,17765,4528],{"class":72},[51,17767,218],{"class":64},[51,17769,17770],{"class":282},"\"两个立方体相等\"",[51,17772,218],{"class":64},[51,17774,288],{"class":72},[51,17776,17778],{"class":53,"line":17777},82,[51,17779,3267],{"class":72},[51,17781,17783],{"class":53,"line":17782},83,[51,17784,17785],{"class":64},"    else\n",[51,17787,17789],{"class":53,"line":17788},84,[51,17790,3110],{"class":72},[51,17792,17794,17796,17798,17801,17803],{"class":53,"line":17793},85,[51,17795,4528],{"class":72},[51,17797,218],{"class":64},[51,17799,17800],{"class":282},"\"两个立方体不相等\"",[51,17802,218],{"class":64},[51,17804,288],{"class":72},[51,17806,17808],{"class":53,"line":17807},86,[51,17809,3267],{"class":72},[51,17811,17813],{"class":53,"line":17812},87,[51,17814,3480],{"emptyLinePlaceholder":1192},[51,17816,17818,17820,17822,17825,17827],{"class":53,"line":17817},88,[51,17819,215],{"class":72},[51,17821,218],{"class":64},[51,17823,17824],{"class":282},"\"全局函数判断结果：\"",[51,17826,218],{"class":64},[51,17828,288],{"class":72},[51,17830,17832,17834,17836,17838],{"class":53,"line":17831},89,[51,17833,4178],{"class":64},[51,17835,2750],{"class":72},[51,17837,17752],{"class":68},[51,17839,17840],{"class":72},"(c1, c2))\n",[51,17842,17844],{"class":53,"line":17843},90,[51,17845,3110],{"class":72},[51,17847,17849,17851,17853,17855,17857],{"class":53,"line":17848},91,[51,17850,4528],{"class":72},[51,17852,218],{"class":64},[51,17854,17770],{"class":282},[51,17856,218],{"class":64},[51,17858,288],{"class":72},[51,17860,17862],{"class":53,"line":17861},92,[51,17863,3267],{"class":72},[51,17865,17867],{"class":53,"line":17866},93,[51,17868,17785],{"class":64},[51,17870,17872],{"class":53,"line":17871},94,[51,17873,3110],{"class":72},[51,17875,17877,17879,17881,17883,17885],{"class":53,"line":17876},95,[51,17878,4528],{"class":72},[51,17880,218],{"class":64},[51,17882,17800],{"class":282},[51,17884,218],{"class":64},[51,17886,288],{"class":72},[51,17888,17890],{"class":53,"line":17889},96,[51,17891,3267],{"class":72},[51,17893,17895],{"class":53,"line":17894},97,[51,17896,132],{"class":72},[19,17898,17899],{"start":61},[22,17900,17901],{},[840,17902,17903],{},"练习案例2：点和圆的关系",[1000,17905,17906],{},[22,17907,17908],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[29,17910,17912],{"className":45,"code":17911,"language":47,"meta":35,"style":35},"#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",[37,17913,17914,17920,17930,17937,17944,17948,17952,17957,17991,17996,18012,18026,18030,18034,18041,18048,18052,18058,18062,18066,18070,18092,18115,18120,18134,18149,18153,18157,18163,18168,18173,18177,18203,18207,18237,18265,18293,18310,18314,18327,18331,18335,18339,18352,18356,18360,18368,18372,18376,18380,18385,18389,18400,18407,18416,18426,18437,18444,18457,18468,18478,18489,18496,18510,18515,18525,18533],{"__ignoreMap":35},[51,17915,17916,17918],{"class":53,"line":54},[51,17917,1026],{"class":64},[51,17919,1029],{"class":282},[51,17921,17922,17924,17926,17928],{"class":53,"line":61},[51,17923,1034],{"class":64},[51,17925,1037],{"class":64},[51,17927,1040],{"class":68},[51,17929,179],{"class":72},[51,17931,17932,17934],{"class":53,"line":93},[51,17933,1026],{"class":64},[51,17935,17936],{"class":282},"\u003Ccmath>\n",[51,17938,17939,17941],{"class":53,"line":99},[51,17940,15656],{"class":64},[51,17942,17943],{"class":68}," Point\n",[51,17945,17946],{"class":53,"line":120},[51,17947,96],{"class":72},[51,17949,17950],{"class":53,"line":129},[51,17951,15678],{"class":64},[51,17953,17954],{"class":53,"line":206},[51,17955,17956],{"class":57},"    \u002F\u002F赋值\n",[51,17958,17959,17961,17964,17966,17968,17971,17973,17975,17978,17981,17983,17986,17988],{"class":53,"line":212},[51,17960,15871],{"class":64},[51,17962,17963],{"class":68}," setPoint",[51,17965,73],{"class":72},[51,17967,14999],{"class":64},[51,17969,17970],{"class":78}," x",[51,17972,13397],{"class":72},[51,17974,14999],{"class":64},[51,17976,17977],{"class":78}," y",[51,17979,17980],{"class":72},") { m_x ",[51,17982,108],{"class":64},[51,17984,17985],{"class":72}," x; m_y ",[51,17987,108],{"class":64},[51,17989,17990],{"class":72}," y; }\n",[51,17992,17993],{"class":53,"line":227},[51,17994,17995],{"class":57},"    \u002F\u002F获取坐标\n",[51,17997,17998,18000,18003,18006,18009],{"class":53,"line":370},[51,17999,15700],{"class":64},[51,18001,18002],{"class":68}," getX",[51,18004,18005],{"class":72},"() { ",[51,18007,18008],{"class":64},"return",[51,18010,18011],{"class":72}," m_x; }\n",[51,18013,18014,18016,18019,18021,18023],{"class":53,"line":387},[51,18015,15700],{"class":64},[51,18017,18018],{"class":68}," getY",[51,18020,18005],{"class":72},[51,18022,18008],{"class":64},[51,18024,18025],{"class":72}," m_y; }\n",[51,18027,18028],{"class":53,"line":404},[51,18029,3480],{"emptyLinePlaceholder":1192},[51,18031,18032],{"class":53,"line":415},[51,18033,16184],{"class":64},[51,18035,18036,18038],{"class":53,"line":420},[51,18037,15700],{"class":64},[51,18039,18040],{"class":72}," m_x;\n",[51,18042,18043,18045],{"class":53,"line":429},[51,18044,15700],{"class":64},[51,18046,18047],{"class":72}," m_y;\n",[51,18049,18050],{"class":53,"line":434},[51,18051,5072],{"class":72},[51,18053,18054,18056],{"class":53,"line":448},[51,18055,15656],{"class":64},[51,18057,15659],{"class":68},[51,18059,18060],{"class":53,"line":462},[51,18061,96],{"class":72},[51,18063,18064],{"class":53,"line":470},[51,18065,15678],{"class":64},[51,18067,18068],{"class":53,"line":2783},[51,18069,17956],{"class":57},[51,18071,18072,18074,18077,18079,18081,18084,18087,18089],{"class":53,"line":2788},[51,18073,15871],{"class":64},[51,18075,18076],{"class":68}," setRadius",[51,18078,73],{"class":72},[51,18080,14999],{"class":64},[51,18082,18083],{"class":78}," r",[51,18085,18086],{"class":72},") { m_r ",[51,18088,108],{"class":64},[51,18090,18091],{"class":72}," r; }\n",[51,18093,18094,18096,18099,18101,18104,18107,18110,18112],{"class":53,"line":2817},[51,18095,15871],{"class":64},[51,18097,18098],{"class":68}," setCenter",[51,18100,73],{"class":72},[51,18102,18103],{"class":68},"Point",[51,18105,18106],{"class":78}," center",[51,18108,18109],{"class":72},") { m_center ",[51,18111,108],{"class":64},[51,18113,18114],{"class":72}," center; }\n",[51,18116,18117],{"class":53,"line":2822},[51,18118,18119],{"class":57},"    \u002F\u002F获取属性\n",[51,18121,18122,18124,18127,18129,18131],{"class":53,"line":2839},[51,18123,15700],{"class":64},[51,18125,18126],{"class":68}," getRadius",[51,18128,18005],{"class":72},[51,18130,18008],{"class":64},[51,18132,18133],{"class":72}," m_r; }\n",[51,18135,18136,18139,18142,18144,18146],{"class":53,"line":2844},[51,18137,18138],{"class":68},"    Point",[51,18140,18141],{"class":68}," getCenter",[51,18143,18005],{"class":72},[51,18145,18008],{"class":64},[51,18147,18148],{"class":72}," m_center; }\n",[51,18150,18151],{"class":53,"line":2849},[51,18152,3480],{"emptyLinePlaceholder":1192},[51,18154,18155],{"class":53,"line":2854},[51,18156,16184],{"class":64},[51,18158,18159,18161],{"class":53,"line":2868},[51,18160,15700],{"class":64},[51,18162,15690],{"class":72},[51,18164,18165],{"class":53,"line":2873},[51,18166,18167],{"class":57},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[51,18169,18170],{"class":53,"line":3657},[51,18171,18172],{"class":72},"    Point m_center;\n",[51,18174,18175],{"class":53,"line":3671},[51,18176,5072],{"class":72},[51,18178,18179,18181,18184,18186,18189,18191,18193,18195,18197,18199,18201],{"class":53,"line":3679},[51,18180,252],{"class":64},[51,18182,18183],{"class":68}," isInCircle",[51,18185,73],{"class":72},[51,18187,18188],{"class":68},"Circle",[51,18190,11546],{"class":64},[51,18192,817],{"class":78},[51,18194,82],{"class":72},[51,18196,18103],{"class":68},[51,18198,11546],{"class":64},[51,18200,40],{"class":78},[51,18202,90],{"class":72},[51,18204,18205],{"class":53,"line":3684},[51,18206,96],{"class":72},[51,18208,18209,18211,18214,18216,18218,18221,18224,18227,18229,18231,18233,18235],{"class":53,"line":3690},[51,18210,15700],{"class":64},[51,18212,18213],{"class":72}," dx ",[51,18215,108],{"class":64},[51,18217,17304],{"class":72},[51,18219,18220],{"class":68},"getCenter",[51,18222,18223],{"class":72},"().",[51,18225,18226],{"class":68},"getX",[51,18228,14012],{"class":72},[51,18230,1778],{"class":64},[51,18232,16850],{"class":72},[51,18234,18226],{"class":68},[51,18236,541],{"class":72},[51,18238,18239,18241,18244,18246,18248,18250,18252,18255,18257,18259,18261,18263],{"class":53,"line":3696},[51,18240,15700],{"class":64},[51,18242,18243],{"class":72}," dy ",[51,18245,108],{"class":64},[51,18247,17304],{"class":72},[51,18249,18220],{"class":68},[51,18251,18223],{"class":72},[51,18253,18254],{"class":68},"getY",[51,18256,14012],{"class":72},[51,18258,1778],{"class":64},[51,18260,16850],{"class":72},[51,18262,18254],{"class":68},[51,18264,541],{"class":72},[51,18266,18267,18269,18272,18274,18277,18280,18282,18284,18286,18288,18290],{"class":53,"line":3701},[51,18268,15700],{"class":64},[51,18270,18271],{"class":72}," distance ",[51,18273,108],{"class":64},[51,18275,18276],{"class":68}," sqrt",[51,18278,18279],{"class":72},"(dx ",[51,18281,1702],{"class":64},[51,18283,18213],{"class":72},[51,18285,114],{"class":64},[51,18287,18243],{"class":72},[51,18289,1702],{"class":64},[51,18291,18292],{"class":72}," dy);\n",[51,18294,18295,18297,18300,18302,18304,18307],{"class":53,"line":8910},[51,18296,4178],{"class":64},[51,18298,18299],{"class":72}," (distance ",[51,18301,2154],{"class":64},[51,18303,17304],{"class":72},[51,18305,18306],{"class":68},"getRadius",[51,18308,18309],{"class":72},"())\n",[51,18311,18312],{"class":53,"line":8934},[51,18313,3110],{"class":72},[51,18315,18316,18318,18320,18323,18325],{"class":53,"line":8939},[51,18317,10631],{"class":72},[51,18319,218],{"class":64},[51,18321,18322],{"class":282}," \"点在圆内\"",[51,18324,2546],{"class":64},[51,18326,9802],{"class":72},[51,18328,18329],{"class":53,"line":8945},[51,18330,3267],{"class":72},[51,18332,18333],{"class":53,"line":8972},[51,18334,17785],{"class":64},[51,18336,18337],{"class":53,"line":8977},[51,18338,3110],{"class":72},[51,18340,18341,18343,18345,18348,18350],{"class":53,"line":8983},[51,18342,10631],{"class":72},[51,18344,218],{"class":64},[51,18346,18347],{"class":282}," \"点在圆外\"",[51,18349,2546],{"class":64},[51,18351,9802],{"class":72},[51,18353,18354],{"class":53,"line":8995},[51,18355,3267],{"class":72},[51,18357,18358],{"class":53,"line":9007},[51,18359,132],{"class":72},[51,18361,18362,18364,18366],{"class":53,"line":9019},[51,18363,65],{"class":64},[51,18365,151],{"class":68},[51,18367,154],{"class":72},[51,18369,18370],{"class":53,"line":10678},[51,18371,96],{"class":72},[51,18373,18374],{"class":53,"line":10703},[51,18375,16015],{"class":57},[51,18377,18378],{"class":53,"line":10726},[51,18379,15762],{"class":72},[51,18381,18382],{"class":53,"line":10750},[51,18383,18384],{"class":72},"    Point p1;\n",[51,18386,18387],{"class":53,"line":10755},[51,18388,17956],{"class":57},[51,18390,18391,18393,18395,18398],{"class":53,"line":10760},[51,18392,215],{"class":72},[51,18394,218],{"class":64},[51,18396,18397],{"class":282},"\"请输入圆的半径：\"",[51,18399,179],{"class":72},[51,18401,18402,18404],{"class":53,"line":10765},[51,18403,15700],{"class":64},[51,18405,18406],{"class":72}," r;\n",[51,18408,18409,18411,18413],{"class":53,"line":10774},[51,18410,197],{"class":72},[51,18412,200],{"class":64},[51,18414,18415],{"class":72},"r;\n",[51,18417,18418,18420,18423],{"class":53,"line":10779},[51,18419,17557],{"class":72},[51,18421,18422],{"class":68},"setRadius",[51,18424,18425],{"class":72},"(r);\n",[51,18427,18428,18430,18432,18435],{"class":53,"line":10785},[51,18429,215],{"class":72},[51,18431,218],{"class":64},[51,18433,18434],{"class":282},"\"请输入圆心坐标：\"",[51,18436,179],{"class":72},[51,18438,18439,18441],{"class":53,"line":10806},[51,18440,15700],{"class":64},[51,18442,18443],{"class":72}," x, y;\n",[51,18445,18446,18448,18450,18452,18454],{"class":53,"line":10812},[51,18447,197],{"class":72},[51,18449,200],{"class":64},[51,18451,2065],{"class":72},[51,18453,200],{"class":64},[51,18455,18456],{"class":72},"y;\n",[51,18458,18459,18462,18465],{"class":53,"line":10826},[51,18460,18461],{"class":72},"    p1.",[51,18463,18464],{"class":68},"setPoint",[51,18466,18467],{"class":72},"(x, y);\n",[51,18469,18470,18472,18475],{"class":53,"line":10832},[51,18471,17557],{"class":72},[51,18473,18474],{"class":68},"setCenter",[51,18476,18477],{"class":72},"(p1);\n",[51,18479,18480,18482,18484,18487],{"class":53,"line":10859},[51,18481,215],{"class":72},[51,18483,218],{"class":64},[51,18485,18486],{"class":282},"\"请输入测试点坐标：\"",[51,18488,179],{"class":72},[51,18490,18491,18493],{"class":53,"line":10868},[51,18492,15700],{"class":64},[51,18494,18495],{"class":72}," x1, y1;\n",[51,18497,18498,18500,18502,18505,18507],{"class":53,"line":10874},[51,18499,197],{"class":72},[51,18501,200],{"class":64},[51,18503,18504],{"class":72},"x1",[51,18506,200],{"class":64},[51,18508,18509],{"class":72},"y1;\n",[51,18511,18512],{"class":53,"line":10882},[51,18513,18514],{"class":72},"    Point p2;\n",[51,18516,18517,18520,18522],{"class":53,"line":10887},[51,18518,18519],{"class":72},"    p2.",[51,18521,18464],{"class":68},[51,18523,18524],{"class":72},"(x1, y1);\n",[51,18526,18527,18530],{"class":53,"line":17566},[51,18528,18529],{"class":68},"    isInCircle",[51,18531,18532],{"class":72},"(c1, p2);\n",[51,18534,18535],{"class":53,"line":17572},[51,18536,132],{"class":72},[40,18538,18539],{},"在类中可以让另一个类作为本来的成员",[40,18541,18542],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[40,18544,18545],{},"创建point.h",[29,18547,18549],{"className":45,"code":18548,"language":47,"meta":35,"style":35},"#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",[37,18550,18551,18562,18568,18578,18584,18588,18593,18597,18601,18621,18625,18633,18641,18645,18649,18655,18661],{"__ignoreMap":35},[51,18552,18553,18556,18559],{"class":53,"line":54},[51,18554,18555],{"class":64},"#pragma",[51,18557,18558],{"class":68}," once",[51,18560,18561],{"class":57}," \u002F\u002F防止头文件重复包含\n",[51,18563,18564,18566],{"class":53,"line":61},[51,18565,1026],{"class":64},[51,18567,1029],{"class":282},[51,18569,18570,18572,18574,18576],{"class":53,"line":93},[51,18571,1034],{"class":64},[51,18573,1037],{"class":64},[51,18575,1040],{"class":68},[51,18577,179],{"class":72},[51,18579,18580,18582],{"class":53,"line":99},[51,18581,15656],{"class":64},[51,18583,17943],{"class":68},[51,18585,18586],{"class":53,"line":120},[51,18587,96],{"class":72},[51,18589,18590],{"class":53,"line":129},[51,18591,18592],{"class":57},"\u002F\u002F做好声明与变量定义就可以\n",[51,18594,18595],{"class":53,"line":206},[51,18596,15678],{"class":64},[51,18598,18599],{"class":53,"line":212},[51,18600,17956],{"class":57},[51,18602,18603,18605,18607,18609,18611,18613,18615,18617,18619],{"class":53,"line":227},[51,18604,15871],{"class":64},[51,18606,17963],{"class":68},[51,18608,73],{"class":72},[51,18610,14999],{"class":64},[51,18612,17970],{"class":78},[51,18614,13397],{"class":72},[51,18616,14999],{"class":64},[51,18618,17977],{"class":78},[51,18620,615],{"class":72},[51,18622,18623],{"class":53,"line":370},[51,18624,17995],{"class":57},[51,18626,18627,18629,18631],{"class":53,"line":387},[51,18628,15700],{"class":64},[51,18630,18002],{"class":68},[51,18632,541],{"class":72},[51,18634,18635,18637,18639],{"class":53,"line":404},[51,18636,15700],{"class":64},[51,18638,18018],{"class":68},[51,18640,541],{"class":72},[51,18642,18643],{"class":53,"line":415},[51,18644,3480],{"emptyLinePlaceholder":1192},[51,18646,18647],{"class":53,"line":420},[51,18648,16184],{"class":64},[51,18650,18651,18653],{"class":53,"line":429},[51,18652,15700],{"class":64},[51,18654,18040],{"class":72},[51,18656,18657,18659],{"class":53,"line":434},[51,18658,15700],{"class":64},[51,18660,18047],{"class":72},[51,18662,18663],{"class":53,"line":448},[51,18664,5072],{"class":72},[40,18666,18667],{},"创建point.cpp",[29,18669,18671],{"className":45,"code":18670,"language":47,"meta":35,"style":35},"#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",[37,18672,18673,18680,18685,18719,18723,18739],{"__ignoreMap":35},[51,18674,18675,18677],{"class":53,"line":54},[51,18676,1026],{"class":64},[51,18678,18679],{"class":282},"\u003Cpoint.h>\n",[51,18681,18682],{"class":53,"line":61},[51,18683,18684],{"class":57},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[51,18686,18687,18689,18692,18695,18697,18699,18701,18703,18705,18707,18709,18711,18713,18715,18717],{"class":53,"line":93},[51,18688,15871],{"class":64},[51,18690,18691],{"class":68}," Point",[51,18693,18694],{"class":72},"::",[51,18696,18464],{"class":68},[51,18698,73],{"class":72},[51,18700,14999],{"class":64},[51,18702,17970],{"class":78},[51,18704,13397],{"class":72},[51,18706,14999],{"class":64},[51,18708,17977],{"class":78},[51,18710,17980],{"class":72},[51,18712,108],{"class":64},[51,18714,17985],{"class":72},[51,18716,108],{"class":64},[51,18718,17990],{"class":72},[51,18720,18721],{"class":53,"line":99},[51,18722,17995],{"class":57},[51,18724,18725,18727,18729,18731,18733,18735,18737],{"class":53,"line":120},[51,18726,15700],{"class":64},[51,18728,18691],{"class":68},[51,18730,18694],{"class":72},[51,18732,18226],{"class":68},[51,18734,18005],{"class":72},[51,18736,18008],{"class":64},[51,18738,18011],{"class":72},[51,18740,18741,18743,18745,18747,18749,18751,18753],{"class":53,"line":129},[51,18742,15700],{"class":64},[51,18744,18691],{"class":68},[51,18746,18694],{"class":72},[51,18748,18254],{"class":68},[51,18750,18005],{"class":72},[51,18752,18008],{"class":64},[51,18754,18025],{"class":72},[40,18756,18757],{},"创建circle.h",[29,18759,18761],{"className":45,"code":18760,"language":47,"meta":35,"style":35},"#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",[37,18762,18763,18770,18776,18786,18792,18798,18802,18806,18810,18824,18838,18842,18850,18858,18862,18866,18872,18876,18880],{"__ignoreMap":35},[51,18764,18765,18767],{"class":53,"line":54},[51,18766,18555],{"class":64},[51,18768,18769],{"class":68}," once\n",[51,18771,18772,18774],{"class":53,"line":61},[51,18773,1026],{"class":64},[51,18775,1029],{"class":282},[51,18777,18778,18780,18782,18784],{"class":53,"line":93},[51,18779,1034],{"class":64},[51,18781,1037],{"class":64},[51,18783,1040],{"class":68},[51,18785,179],{"class":72},[51,18787,18788,18790],{"class":53,"line":99},[51,18789,1026],{"class":64},[51,18791,18679],{"class":282},[51,18793,18794,18796],{"class":53,"line":120},[51,18795,15656],{"class":64},[51,18797,15659],{"class":68},[51,18799,18800],{"class":53,"line":129},[51,18801,96],{"class":72},[51,18803,18804],{"class":53,"line":206},[51,18805,15678],{"class":64},[51,18807,18808],{"class":53,"line":212},[51,18809,17956],{"class":57},[51,18811,18812,18814,18816,18818,18820,18822],{"class":53,"line":227},[51,18813,15871],{"class":64},[51,18815,18076],{"class":68},[51,18817,73],{"class":72},[51,18819,14999],{"class":64},[51,18821,18083],{"class":78},[51,18823,615],{"class":72},[51,18825,18826,18828,18830,18832,18834,18836],{"class":53,"line":370},[51,18827,15871],{"class":64},[51,18829,18098],{"class":68},[51,18831,73],{"class":72},[51,18833,18103],{"class":68},[51,18835,18106],{"class":78},[51,18837,615],{"class":72},[51,18839,18840],{"class":53,"line":387},[51,18841,18119],{"class":57},[51,18843,18844,18846,18848],{"class":53,"line":404},[51,18845,15700],{"class":64},[51,18847,18126],{"class":68},[51,18849,541],{"class":72},[51,18851,18852,18854,18856],{"class":53,"line":415},[51,18853,18138],{"class":68},[51,18855,18141],{"class":68},[51,18857,541],{"class":72},[51,18859,18860],{"class":53,"line":420},[51,18861,3480],{"emptyLinePlaceholder":1192},[51,18863,18864],{"class":53,"line":429},[51,18865,16184],{"class":64},[51,18867,18868,18870],{"class":53,"line":434},[51,18869,15700],{"class":64},[51,18871,15690],{"class":72},[51,18873,18874],{"class":53,"line":448},[51,18875,18167],{"class":57},[51,18877,18878],{"class":53,"line":462},[51,18879,18172],{"class":72},[51,18881,18882],{"class":53,"line":470},[51,18883,5072],{"class":72},[40,18885,18886],{},"创建circle.cpp",[29,18888,18890],{"className":45,"code":18889,"language":47,"meta":35,"style":35},"#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",[37,18891,18892,18899,18922,18944,18949,18965],{"__ignoreMap":35},[51,18893,18894,18896],{"class":53,"line":54},[51,18895,1026],{"class":64},[51,18897,18898],{"class":282},"\u003Ccircle.h>\n",[51,18900,18901,18903,18906,18908,18910,18912,18914,18916,18918,18920],{"class":53,"line":61},[51,18902,252],{"class":64},[51,18904,18905],{"class":68}," Circle",[51,18907,18694],{"class":72},[51,18909,18422],{"class":68},[51,18911,73],{"class":72},[51,18913,14999],{"class":64},[51,18915,18083],{"class":78},[51,18917,18086],{"class":72},[51,18919,108],{"class":64},[51,18921,18091],{"class":72},[51,18923,18924,18926,18928,18930,18932,18934,18936,18938,18940,18942],{"class":53,"line":93},[51,18925,252],{"class":64},[51,18927,18905],{"class":68},[51,18929,18694],{"class":72},[51,18931,18474],{"class":68},[51,18933,73],{"class":72},[51,18935,18103],{"class":68},[51,18937,18106],{"class":78},[51,18939,18109],{"class":72},[51,18941,108],{"class":64},[51,18943,18114],{"class":72},[51,18945,18946],{"class":53,"line":99},[51,18947,18948],{"class":57},"\u002F\u002F获取属性\n",[51,18950,18951,18953,18955,18957,18959,18961,18963],{"class":53,"line":120},[51,18952,14999],{"class":64},[51,18954,18905],{"class":68},[51,18956,18694],{"class":72},[51,18958,18306],{"class":68},[51,18960,18005],{"class":72},[51,18962,18008],{"class":64},[51,18964,18133],{"class":72},[51,18966,18967,18969,18971,18973,18975,18977,18979],{"class":53,"line":129},[51,18968,18103],{"class":68},[51,18970,18905],{"class":68},[51,18972,18694],{"class":72},[51,18974,18220],{"class":68},[51,18976,18005],{"class":72},[51,18978,18008],{"class":64},[51,18980,18148],{"class":72},[40,18982,18983],{},"使用封装的类",[29,18985,18987],{"className":45,"code":18986,"language":47,"meta":35,"style":35},"#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",[37,18988,18989,18995,19005,19011,19017,19041,19045,19071,19097,19121,19135,19139,19151,19155,19159,19163,19175,19179,19183,19191,19195,19199,19203,19207,19211,19221,19227,19235,19243,19253,19259,19271,19279,19287,19297,19303,19315,19319,19327,19333],{"__ignoreMap":35},[51,18990,18991,18993],{"class":53,"line":54},[51,18992,1026],{"class":64},[51,18994,1029],{"class":282},[51,18996,18997,18999,19001,19003],{"class":53,"line":61},[51,18998,1034],{"class":64},[51,19000,1037],{"class":64},[51,19002,1040],{"class":68},[51,19004,179],{"class":72},[51,19006,19007,19009],{"class":53,"line":93},[51,19008,1026],{"class":64},[51,19010,18898],{"class":282},[51,19012,19013,19015],{"class":53,"line":99},[51,19014,1026],{"class":64},[51,19016,18679],{"class":282},[51,19018,19019,19021,19023,19025,19027,19029,19031,19033,19035,19037,19039],{"class":53,"line":120},[51,19020,252],{"class":64},[51,19022,18183],{"class":68},[51,19024,73],{"class":72},[51,19026,18188],{"class":68},[51,19028,11546],{"class":64},[51,19030,817],{"class":78},[51,19032,82],{"class":72},[51,19034,18103],{"class":68},[51,19036,11546],{"class":64},[51,19038,40],{"class":78},[51,19040,90],{"class":72},[51,19042,19043],{"class":53,"line":129},[51,19044,96],{"class":72},[51,19046,19047,19049,19051,19053,19055,19057,19059,19061,19063,19065,19067,19069],{"class":53,"line":206},[51,19048,15700],{"class":64},[51,19050,18213],{"class":72},[51,19052,108],{"class":64},[51,19054,17304],{"class":72},[51,19056,18220],{"class":68},[51,19058,18223],{"class":72},[51,19060,18226],{"class":68},[51,19062,14012],{"class":72},[51,19064,1778],{"class":64},[51,19066,16850],{"class":72},[51,19068,18226],{"class":68},[51,19070,541],{"class":72},[51,19072,19073,19075,19077,19079,19081,19083,19085,19087,19089,19091,19093,19095],{"class":53,"line":212},[51,19074,15700],{"class":64},[51,19076,18243],{"class":72},[51,19078,108],{"class":64},[51,19080,17304],{"class":72},[51,19082,18220],{"class":68},[51,19084,18223],{"class":72},[51,19086,18254],{"class":68},[51,19088,14012],{"class":72},[51,19090,1778],{"class":64},[51,19092,16850],{"class":72},[51,19094,18254],{"class":68},[51,19096,541],{"class":72},[51,19098,19099,19101,19103,19105,19107,19109,19111,19113,19115,19117,19119],{"class":53,"line":227},[51,19100,15700],{"class":64},[51,19102,18271],{"class":72},[51,19104,108],{"class":64},[51,19106,18276],{"class":68},[51,19108,18279],{"class":72},[51,19110,1702],{"class":64},[51,19112,18213],{"class":72},[51,19114,114],{"class":64},[51,19116,18243],{"class":72},[51,19118,1702],{"class":64},[51,19120,18292],{"class":72},[51,19122,19123,19125,19127,19129,19131,19133],{"class":53,"line":370},[51,19124,4178],{"class":64},[51,19126,18299],{"class":72},[51,19128,2154],{"class":64},[51,19130,17304],{"class":72},[51,19132,18306],{"class":68},[51,19134,18309],{"class":72},[51,19136,19137],{"class":53,"line":387},[51,19138,3110],{"class":72},[51,19140,19141,19143,19145,19147,19149],{"class":53,"line":404},[51,19142,10631],{"class":72},[51,19144,218],{"class":64},[51,19146,18322],{"class":282},[51,19148,2546],{"class":64},[51,19150,9802],{"class":72},[51,19152,19153],{"class":53,"line":415},[51,19154,3267],{"class":72},[51,19156,19157],{"class":53,"line":420},[51,19158,17785],{"class":64},[51,19160,19161],{"class":53,"line":429},[51,19162,3110],{"class":72},[51,19164,19165,19167,19169,19171,19173],{"class":53,"line":434},[51,19166,10631],{"class":72},[51,19168,218],{"class":64},[51,19170,18347],{"class":282},[51,19172,2546],{"class":64},[51,19174,9802],{"class":72},[51,19176,19177],{"class":53,"line":448},[51,19178,3267],{"class":72},[51,19180,19181],{"class":53,"line":462},[51,19182,132],{"class":72},[51,19184,19185,19187,19189],{"class":53,"line":470},[51,19186,65],{"class":64},[51,19188,151],{"class":68},[51,19190,154],{"class":72},[51,19192,19193],{"class":53,"line":2783},[51,19194,96],{"class":72},[51,19196,19197],{"class":53,"line":2788},[51,19198,16015],{"class":57},[51,19200,19201],{"class":53,"line":2817},[51,19202,15762],{"class":72},[51,19204,19205],{"class":53,"line":2822},[51,19206,18384],{"class":72},[51,19208,19209],{"class":53,"line":2839},[51,19210,17956],{"class":57},[51,19212,19213,19215,19217,19219],{"class":53,"line":2844},[51,19214,215],{"class":72},[51,19216,218],{"class":64},[51,19218,18397],{"class":282},[51,19220,179],{"class":72},[51,19222,19223,19225],{"class":53,"line":2849},[51,19224,15700],{"class":64},[51,19226,18406],{"class":72},[51,19228,19229,19231,19233],{"class":53,"line":2854},[51,19230,197],{"class":72},[51,19232,200],{"class":64},[51,19234,18415],{"class":72},[51,19236,19237,19239,19241],{"class":53,"line":2868},[51,19238,17557],{"class":72},[51,19240,18422],{"class":68},[51,19242,18425],{"class":72},[51,19244,19245,19247,19249,19251],{"class":53,"line":2873},[51,19246,215],{"class":72},[51,19248,218],{"class":64},[51,19250,18434],{"class":282},[51,19252,179],{"class":72},[51,19254,19255,19257],{"class":53,"line":3657},[51,19256,15700],{"class":64},[51,19258,18443],{"class":72},[51,19260,19261,19263,19265,19267,19269],{"class":53,"line":3671},[51,19262,197],{"class":72},[51,19264,200],{"class":64},[51,19266,2065],{"class":72},[51,19268,200],{"class":64},[51,19270,18456],{"class":72},[51,19272,19273,19275,19277],{"class":53,"line":3679},[51,19274,18461],{"class":72},[51,19276,18464],{"class":68},[51,19278,18467],{"class":72},[51,19280,19281,19283,19285],{"class":53,"line":3684},[51,19282,17557],{"class":72},[51,19284,18474],{"class":68},[51,19286,18477],{"class":72},[51,19288,19289,19291,19293,19295],{"class":53,"line":3690},[51,19290,215],{"class":72},[51,19292,218],{"class":64},[51,19294,18486],{"class":282},[51,19296,179],{"class":72},[51,19298,19299,19301],{"class":53,"line":3696},[51,19300,15700],{"class":64},[51,19302,18495],{"class":72},[51,19304,19305,19307,19309,19311,19313],{"class":53,"line":3701},[51,19306,197],{"class":72},[51,19308,200],{"class":64},[51,19310,18504],{"class":72},[51,19312,200],{"class":64},[51,19314,18509],{"class":72},[51,19316,19317],{"class":53,"line":8910},[51,19318,18514],{"class":72},[51,19320,19321,19323,19325],{"class":53,"line":8934},[51,19322,18519],{"class":72},[51,19324,18464],{"class":68},[51,19326,18524],{"class":72},[51,19328,19329,19331],{"class":53,"line":8939},[51,19330,18529],{"class":68},[51,19332,18532],{"class":72},[51,19334,19335],{"class":53,"line":8945},[51,19336,132],{"class":72},[14,19338,19340],{"id":19339},"_82对象的初始化清理","8.2对象的初始化清理",[1000,19342,19343,19346],{},[22,19344,19345],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[22,19347,19348],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[1233,19350,19352],{"id":19351},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[40,19354,19355,19356,19359],{},"对象的",[840,19357,19358],{},"初始化和清理","也是两个非常重要的安全问题",[40,19361,19362],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[40,19364,19365],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[40,19367,19368,19369,19372,19373,19376],{},"c++利用了",[840,19370,19371],{},"构造函数","和",[840,19374,19375],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[40,19378,19379,19380],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[840,19381,19382],{},"我们不提供构造和析构，编译器会提供",[40,19384,19385],{},[840,19386,19387],{},"编译器提供的构造函数和析构函数是空实现。",[1000,19389,19390,19393],{},[22,19391,19392],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[22,19394,19395,19396,19399],{},"析构函数：主要作用在于对象",[840,19397,19398],{},"销毁前","系统自动调用，执行一些清理工作。",[40,19401,19402,19405],{},[840,19403,19404],{},"构造函数语法：",[37,19406,19407],{},"类名(){}",[19,19409,19410,19413,19416,19419,19422],{},[22,19411,19412],{},"构造函数，没有返回值也不写void",[22,19414,19415],{},"函数名称与类名相同",[22,19417,19418],{},"构造函数可以有参数，因此可以发生重载",[22,19420,19421],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[22,19423,19424,19425,1677],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[37,19426,19427],{},"Person(){}",[40,19429,19430,14757,19433],{},[840,19431,19432],{},"析构函数语法：",[37,19434,19435],{},"~类名(){}",[19,19437,19438,19441,19444,19450],{},[22,19439,19440],{},"析构函数，没有返回值也不写void",[22,19442,19443],{},"函数名称与类名相同,在名称前加上符号  ~",[22,19445,19446,19447],{},"析构函数不可以有参数，因此",[840,19448,19449],{},"不可以发生重载",[22,19451,19452],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[29,19454,19456],{"className":45,"code":19455,"language":47,"meta":35,"style":35},"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",[37,19457,19458,19464,19468,19472,19477,19484,19488,19501,19505,19510,19517,19521,19534,19538,19542,19546,19550,19558,19562,19570,19574,19578,19586,19590,19595,19599,19606,19610,19623,19627,19635],{"__ignoreMap":35},[51,19459,19460,19462],{"class":53,"line":54},[51,19461,15656],{"class":64},[51,19463,16133],{"class":68},[51,19465,19466],{"class":53,"line":61},[51,19467,96],{"class":72},[51,19469,19470],{"class":53,"line":93},[51,19471,15678],{"class":64},[51,19473,19474],{"class":53,"line":99},[51,19475,19476],{"class":57},"    \u002F\u002F构造函数\n",[51,19478,19479,19482],{"class":53,"line":120},[51,19480,19481],{"class":68},"    Person",[51,19483,154],{"class":72},[51,19485,19486],{"class":53,"line":129},[51,19487,3110],{"class":72},[51,19489,19490,19492,19494,19497,19499],{"class":53,"line":206},[51,19491,10631],{"class":72},[51,19493,218],{"class":64},[51,19495,19496],{"class":282}," \"Person的构造函数调用\"",[51,19498,2546],{"class":64},[51,19500,9802],{"class":72},[51,19502,19503],{"class":53,"line":212},[51,19504,3267],{"class":72},[51,19506,19507],{"class":53,"line":227},[51,19508,19509],{"class":57},"    \u002F\u002F析构函数\n",[51,19511,19512,19515],{"class":53,"line":370},[51,19513,19514],{"class":68},"    ~Person",[51,19516,154],{"class":72},[51,19518,19519],{"class":53,"line":387},[51,19520,3110],{"class":72},[51,19522,19523,19525,19527,19530,19532],{"class":53,"line":404},[51,19524,10631],{"class":72},[51,19526,218],{"class":64},[51,19528,19529],{"class":282}," \"Person的析构函数调用\"",[51,19531,2546],{"class":64},[51,19533,9802],{"class":72},[51,19535,19536],{"class":53,"line":415},[51,19537,3267],{"class":72},[51,19539,19540],{"class":53,"line":420},[51,19541,3480],{"emptyLinePlaceholder":1192},[51,19543,19544],{"class":53,"line":429},[51,19545,5072],{"class":72},[51,19547,19548],{"class":53,"line":434},[51,19549,3480],{"emptyLinePlaceholder":1192},[51,19551,19552,19554,19556],{"class":53,"line":448},[51,19553,252],{"class":64},[51,19555,493],{"class":68},[51,19557,154],{"class":72},[51,19559,19560],{"class":53,"line":462},[51,19561,96],{"class":72},[51,19563,19564,19567],{"class":53,"line":470},[51,19565,19566],{"class":72},"    Person p;",[51,19568,19569],{"class":57},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[51,19571,19572],{"class":53,"line":2783},[51,19573,132],{"class":72},[51,19575,19576],{"class":53,"line":2788},[51,19577,3480],{"emptyLinePlaceholder":1192},[51,19579,19580,19582,19584],{"class":53,"line":2817},[51,19581,65],{"class":64},[51,19583,151],{"class":68},[51,19585,11815],{"class":72},[51,19587,19588],{"class":53,"line":2822},[51,19589,14172],{"class":72},[51,19591,19592],{"class":53,"line":2839},[51,19593,19594],{"class":57},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[51,19596,19597],{"class":53,"line":2844},[51,19598,3480],{"emptyLinePlaceholder":1192},[51,19600,19601,19603],{"class":53,"line":2849},[51,19602,19566],{"class":72},[51,19604,19605],{"class":57},"\u002F\u002F只有构造函数\n",[51,19607,19608],{"class":53,"line":2854},[51,19609,3480],{"emptyLinePlaceholder":1192},[51,19611,19612,19614,19616,19618,19620],{"class":53,"line":2868},[51,19613,3383],{"class":68},[51,19615,73],{"class":72},[51,19617,3388],{"class":282},[51,19619,879],{"class":72},[51,19621,19622],{"class":57},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[51,19624,19625],{"class":53,"line":2873},[51,19626,3480],{"emptyLinePlaceholder":1192},[51,19628,19629,19631,19633],{"class":53,"line":3657},[51,19630,123],{"class":64},[51,19632,5169],{"class":175},[51,19634,179],{"class":72},[51,19636,19637],{"class":53,"line":3671},[51,19638,132],{"class":72},[40,19640,19641],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[1233,19643,19645],{"id":19644},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[40,19647,19648],{},"两种分类方式：",[40,19650,19651],{},"​\t按参数分为： 有参构造和无参构造",[40,19653,19654],{},"​\t按类型分为： 普通构造和拷贝构造",[40,19656,19657],{},"三种调用方式：",[40,19659,19660],{},"​\t括号法",[40,19662,19663],{},"​\t显示法",[40,19665,19666],{},"​\t隐式转换法",[29,19668,19670],{"className":45,"code":19669,"language":47,"meta":35,"style":35},"#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",[37,19671,19672,19678,19688,19693,19698,19703,19708,19712,19720,19724,19728,19732,19738,19742,19755,19759,19771,19775,19784,19797,19801,19805,19811,19815,19828,19832,19837,19853,19857,19862,19871,19884,19888,19894,19898,19903,19911,19915,19920,19924,19932,19936,19941,19946,19951,19956,19961,19965,19970,19975,19980,19985,19989,19994,19999,20015,20027,20032,20036,20041,20046,20051,20055,20060,20074,20087,20091,20099,20103,20109,20115,20123],{"__ignoreMap":35},[51,19673,19674,19676],{"class":53,"line":54},[51,19675,1026],{"class":64},[51,19677,1029],{"class":282},[51,19679,19680,19682,19684,19686],{"class":53,"line":61},[51,19681,1034],{"class":64},[51,19683,1037],{"class":64},[51,19685,1040],{"class":68},[51,19687,179],{"class":72},[51,19689,19690],{"class":53,"line":93},[51,19691,19692],{"class":57},"\u002F\u002F1.构造函数的分类及调用\n",[51,19694,19695],{"class":53,"line":99},[51,19696,19697],{"class":57},"\u002F\u002F分类\n",[51,19699,19700],{"class":53,"line":120},[51,19701,19702],{"class":57},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[51,19704,19705],{"class":53,"line":129},[51,19706,19707],{"class":57},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[51,19709,19710],{"class":53,"line":206},[51,19711,3480],{"emptyLinePlaceholder":1192},[51,19713,19714,19716,19718],{"class":53,"line":212},[51,19715,15656],{"class":64},[51,19717,16531],{"class":68},[51,19719,3754],{"class":72},[51,19721,19722],{"class":53,"line":227},[51,19723,96],{"class":72},[51,19725,19726],{"class":53,"line":370},[51,19727,15678],{"class":64},[51,19729,19730],{"class":53,"line":387},[51,19731,19476],{"class":57},[51,19733,19734,19736],{"class":53,"line":404},[51,19735,19481],{"class":68},[51,19737,154],{"class":72},[51,19739,19740],{"class":53,"line":415},[51,19741,3110],{"class":72},[51,19743,19744,19746,19748,19751,19753],{"class":53,"line":420},[51,19745,4528],{"class":72},[51,19747,218],{"class":64},[51,19749,19750],{"class":282},"\"Person构造函数无参构造\"",[51,19752,218],{"class":64},[51,19754,288],{"class":72},[51,19756,19757],{"class":53,"line":429},[51,19758,3267],{"class":72},[51,19760,19761,19763,19765,19767,19769],{"class":53,"line":434},[51,19762,19481],{"class":68},[51,19764,73],{"class":72},[51,19766,65],{"class":64},[51,19768,170],{"class":78},[51,19770,90],{"class":72},[51,19772,19773],{"class":53,"line":448},[51,19774,3110],{"class":72},[51,19776,19777,19780,19782],{"class":53,"line":462},[51,19778,19779],{"class":72},"        age",[51,19781,108],{"class":64},[51,19783,1121],{"class":72},[51,19785,19786,19788,19790,19793,19795],{"class":53,"line":470},[51,19787,4528],{"class":72},[51,19789,218],{"class":64},[51,19791,19792],{"class":282},"\"Person构造函数有参构造\"",[51,19794,218],{"class":64},[51,19796,288],{"class":72},[51,19798,19799],{"class":53,"line":2783},[51,19800,3267],{"class":72},[51,19802,19803],{"class":53,"line":2788},[51,19804,19509],{"class":57},[51,19806,19807,19809],{"class":53,"line":2817},[51,19808,19514],{"class":68},[51,19810,154],{"class":72},[51,19812,19813],{"class":53,"line":2822},[51,19814,3110],{"class":72},[51,19816,19817,19819,19821,19824,19826],{"class":53,"line":2839},[51,19818,4528],{"class":72},[51,19820,218],{"class":64},[51,19822,19823],{"class":282},"\"Person析构函数被调用\"",[51,19825,218],{"class":64},[51,19827,288],{"class":72},[51,19829,19830],{"class":53,"line":2844},[51,19831,3267],{"class":72},[51,19833,19834],{"class":53,"line":2849},[51,19835,19836],{"class":57},"    \u002F\u002F拷贝构造函数\n",[51,19838,19839,19841,19843,19845,19847,19849,19851],{"class":53,"line":2854},[51,19840,19481],{"class":68},[51,19842,73],{"class":72},[51,19844,7754],{"class":64},[51,19846,16531],{"class":68},[51,19848,11546],{"class":64},[51,19850,40],{"class":78},[51,19852,90],{"class":72},[51,19854,19855],{"class":53,"line":2868},[51,19856,3110],{"class":72},[51,19858,19859],{"class":53,"line":2873},[51,19860,19861],{"class":57},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[51,19863,19864,19866,19868],{"class":53,"line":3657},[51,19865,19779],{"class":72},[51,19867,108],{"class":64},[51,19869,19870],{"class":72},"p.age;\n",[51,19872,19873,19875,19877,19880,19882],{"class":53,"line":3671},[51,19874,4528],{"class":72},[51,19876,218],{"class":64},[51,19878,19879],{"class":282},"\"Person拷贝构造函数被调用\"",[51,19881,218],{"class":64},[51,19883,288],{"class":72},[51,19885,19886],{"class":53,"line":3679},[51,19887,3267],{"class":72},[51,19889,19890,19892],{"class":53,"line":3684},[51,19891,102],{"class":64},[51,19893,8759],{"class":72},[51,19895,19896],{"class":53,"line":3690},[51,19897,5072],{"class":72},[51,19899,19900],{"class":53,"line":3696},[51,19901,19902],{"class":57},"\u002F\u002F调用\n",[51,19904,19905,19907,19909],{"class":53,"line":3701},[51,19906,252],{"class":64},[51,19908,493],{"class":68},[51,19910,154],{"class":72},[51,19912,19913],{"class":53,"line":8910},[51,19914,96],{"class":72},[51,19916,19917],{"class":53,"line":8934},[51,19918,19919],{"class":57},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[51,19921,19922],{"class":53,"line":8939},[51,19923,132],{"class":72},[51,19925,19926,19928,19930],{"class":53,"line":8945},[51,19927,252],{"class":64},[51,19929,562],{"class":68},[51,19931,154],{"class":72},[51,19933,19934],{"class":53,"line":8972},[51,19935,96],{"class":72},[51,19937,19938],{"class":53,"line":8977},[51,19939,19940],{"class":57},"    \u002F\u002F1.括号法\n",[51,19942,19943],{"class":53,"line":8983},[51,19944,19945],{"class":57},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[51,19947,19948],{"class":53,"line":8995},[51,19949,19950],{"class":57},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[51,19952,19953],{"class":53,"line":9007},[51,19954,19955],{"class":57},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[51,19957,19958],{"class":53,"line":9019},[51,19959,19960],{"class":57},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[51,19962,19963],{"class":53,"line":10678},[51,19964,3480],{"emptyLinePlaceholder":1192},[51,19966,19967],{"class":53,"line":10703},[51,19968,19969],{"class":57},"    \u002F\u002F注意事项\n",[51,19971,19972],{"class":53,"line":10726},[51,19973,19974],{"class":57},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[51,19976,19977],{"class":53,"line":10750},[51,19978,19979],{"class":57},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[51,19981,19982],{"class":53,"line":10755},[51,19983,19984],{"class":57},"    \u002F\u002F Person p4();\n",[51,19986,19987],{"class":53,"line":10760},[51,19988,3480],{"emptyLinePlaceholder":1192},[51,19990,19991],{"class":53,"line":10765},[51,19992,19993],{"class":57},"    \u002F\u002F2.显示法\n",[51,19995,19996],{"class":53,"line":10774},[51,19997,19998],{"class":72},"    Person p1;\n",[51,20000,20001,20004,20006,20009,20011,20013],{"class":53,"line":10779},[51,20002,20003],{"class":72},"    Person p2",[51,20005,108],{"class":64},[51,20007,20008],{"class":68},"Person",[51,20010,73],{"class":72},[51,20012,443],{"class":175},[51,20014,615],{"class":72},[51,20016,20017,20020,20022,20024],{"class":53,"line":10785},[51,20018,20019],{"class":72},"    Person p3",[51,20021,108],{"class":64},[51,20023,20008],{"class":68},[51,20025,20026],{"class":72},"(p2);\n",[51,20028,20029],{"class":53,"line":10806},[51,20030,20031],{"class":57},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[51,20033,20034],{"class":53,"line":10812},[51,20035,3480],{"emptyLinePlaceholder":1192},[51,20037,20038],{"class":53,"line":10826},[51,20039,20040],{"class":57},"    \u002F\u002F 注意事项2\n",[51,20042,20043],{"class":53,"line":10832},[51,20044,20045],{"class":57},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[51,20047,20048],{"class":53,"line":10859},[51,20049,20050],{"class":57},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[51,20052,20053],{"class":53,"line":10868},[51,20054,3480],{"emptyLinePlaceholder":1192},[51,20056,20057],{"class":53,"line":10874},[51,20058,20059],{"class":57},"    \u002F\u002F3.隐士转换法\n",[51,20061,20062,20065,20067,20069,20071],{"class":53,"line":10882},[51,20063,20064],{"class":72},"    Person p4",[51,20066,108],{"class":64},[51,20068,443],{"class":175},[51,20070,409],{"class":72},[51,20072,20073],{"class":57},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[51,20075,20076,20079,20081,20084],{"class":53,"line":10887},[51,20077,20078],{"class":72},"    Person p5",[51,20080,108],{"class":64},[51,20082,20083],{"class":72},"p4;",[51,20085,20086],{"class":57}," \u002F\u002F 这里会调用拷贝构造函数\n",[51,20088,20089],{"class":53,"line":17566},[51,20090,132],{"class":72},[51,20092,20093,20095,20097],{"class":53,"line":17572},[51,20094,65],{"class":64},[51,20096,151],{"class":68},[51,20098,154],{"class":72},[51,20100,20101],{"class":53,"line":17595},[51,20102,96],{"class":72},[51,20104,20105,20107],{"class":53,"line":17601},[51,20106,538],{"class":68},[51,20108,541],{"class":72},[51,20110,20111,20113],{"class":53,"line":17624},[51,20112,607],{"class":68},[51,20114,541],{"class":72},[51,20116,20117,20119,20121],{"class":53,"line":17638},[51,20118,123],{"class":64},[51,20120,5169],{"class":175},[51,20122,179],{"class":72},[51,20124,20125],{"class":53,"line":17658},[51,20126,132],{"class":72},[40,20128,20129,20132],{},[840,20130,20131],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[1233,20134,20136],{"id":20135},"_823拷贝构造函数","8.2.3拷贝构造函数",[40,20138,20139],{},"C++中拷贝构造函数调用时机通常有三种情况",[1000,20141,20142,20145,20148],{},[22,20143,20144],{},"使用一个已经创建完毕的对象来初始化一个新对象",[22,20146,20147],{},"值传递的方式给函数参数传值",[22,20149,20150],{},"以值方式返回局部对象",[29,20152,20154],{"className":45,"code":20153,"language":47,"meta":35,"style":35},"#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",[37,20155,20156,20162,20172,20176,20181,20185,20190,20195,20200,20206,20210,20214,20220,20224,20237,20241,20246,20258,20262,20270,20283,20287,20291,20307,20311,20320,20333,20337,20343,20347,20359,20363,20369,20373,20377,20385,20389,20402,20410,20428,20432,20437,20442,20457,20461,20474,20478,20486,20490,20494,20502,20506,20511,20520,20524,20528,20553,20563,20567,20575,20579,20590,20615,20619,20623,20627,20635,20639,20644,20649,20656,20661,20666,20671,20676,20680,20685,20689,20694,20698,20703,20708,20712,20716,20721,20726,20734],{"__ignoreMap":35},[51,20157,20158,20160],{"class":53,"line":54},[51,20159,1026],{"class":64},[51,20161,1029],{"class":282},[51,20163,20164,20166,20168,20170],{"class":53,"line":61},[51,20165,1034],{"class":64},[51,20167,1037],{"class":64},[51,20169,1040],{"class":68},[51,20171,179],{"class":72},[51,20173,20174],{"class":53,"line":93},[51,20175,3480],{"emptyLinePlaceholder":1192},[51,20177,20178],{"class":53,"line":99},[51,20179,20180],{"class":57},"\u002F\u002F拷贝构造函数调用时机\n",[51,20182,20183],{"class":53,"line":120},[51,20184,3480],{"emptyLinePlaceholder":1192},[51,20186,20187],{"class":53,"line":129},[51,20188,20189],{"class":57},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[51,20191,20192],{"class":53,"line":206},[51,20193,20194],{"class":57},"\u002F\u002F2.值传递的方式给函数参数传值\n",[51,20196,20197],{"class":53,"line":212},[51,20198,20199],{"class":57},"\u002F\u002F3.以值方式返回局部对象\n",[51,20201,20202,20204],{"class":53,"line":227},[51,20203,15656],{"class":64},[51,20205,16133],{"class":68},[51,20207,20208],{"class":53,"line":370},[51,20209,96],{"class":72},[51,20211,20212],{"class":53,"line":387},[51,20213,15678],{"class":64},[51,20215,20216,20218],{"class":53,"line":404},[51,20217,19481],{"class":68},[51,20219,154],{"class":72},[51,20221,20222],{"class":53,"line":415},[51,20223,3110],{"class":72},[51,20225,20226,20228,20230,20233,20235],{"class":53,"line":420},[51,20227,10631],{"class":72},[51,20229,218],{"class":64},[51,20231,20232],{"class":282}," \"Person的默认构造函数调用\"",[51,20234,2546],{"class":64},[51,20236,9802],{"class":72},[51,20238,20239],{"class":53,"line":429},[51,20240,3267],{"class":72},[51,20242,20243],{"class":53,"line":434},[51,20244,20245],{"class":57},"    \u002F\u002F有参构造\n",[51,20247,20248,20250,20252,20254,20256],{"class":53,"line":448},[51,20249,19481],{"class":68},[51,20251,73],{"class":72},[51,20253,65],{"class":64},[51,20255,16651],{"class":78},[51,20257,90],{"class":72},[51,20259,20260],{"class":53,"line":462},[51,20261,3110],{"class":72},[51,20263,20264,20266,20268],{"class":53,"line":470},[51,20265,16705],{"class":72},[51,20267,108],{"class":64},[51,20269,8759],{"class":72},[51,20271,20272,20274,20276,20279,20281],{"class":53,"line":2783},[51,20273,10631],{"class":72},[51,20275,218],{"class":64},[51,20277,20278],{"class":282}," \"Person的有参构造函数调用\"",[51,20280,2546],{"class":64},[51,20282,9802],{"class":72},[51,20284,20285],{"class":53,"line":2788},[51,20286,3267],{"class":72},[51,20288,20289],{"class":53,"line":2817},[51,20290,19836],{"class":57},[51,20292,20293,20295,20297,20299,20301,20303,20305],{"class":53,"line":2822},[51,20294,19481],{"class":68},[51,20296,73],{"class":72},[51,20298,7754],{"class":64},[51,20300,16531],{"class":68},[51,20302,11546],{"class":64},[51,20304,40],{"class":78},[51,20306,90],{"class":72},[51,20308,20309],{"class":53,"line":2839},[51,20310,3110],{"class":72},[51,20312,20313,20315,20317],{"class":53,"line":2844},[51,20314,16705],{"class":72},[51,20316,108],{"class":64},[51,20318,20319],{"class":72}," p.m_Age;\n",[51,20321,20322,20324,20326,20329,20331],{"class":53,"line":2849},[51,20323,10631],{"class":72},[51,20325,218],{"class":64},[51,20327,20328],{"class":282}," \"Person的拷贝构造函数调用\"",[51,20330,2546],{"class":64},[51,20332,9802],{"class":72},[51,20334,20335],{"class":53,"line":2854},[51,20336,3267],{"class":72},[51,20338,20339,20341],{"class":53,"line":2868},[51,20340,19514],{"class":68},[51,20342,154],{"class":72},[51,20344,20345],{"class":53,"line":2873},[51,20346,3110],{"class":72},[51,20348,20349,20351,20353,20355,20357],{"class":53,"line":3657},[51,20350,10631],{"class":72},[51,20352,218],{"class":64},[51,20354,19529],{"class":282},[51,20356,2546],{"class":64},[51,20358,9802],{"class":72},[51,20360,20361],{"class":53,"line":3671},[51,20362,3267],{"class":72},[51,20364,20365,20367],{"class":53,"line":3679},[51,20366,102],{"class":64},[51,20368,16628],{"class":72},[51,20370,20371],{"class":53,"line":3684},[51,20372,5072],{"class":72},[51,20374,20375],{"class":53,"line":3690},[51,20376,20189],{"class":57},[51,20378,20379,20381,20383],{"class":53,"line":3696},[51,20380,252],{"class":64},[51,20382,493],{"class":68},[51,20384,154],{"class":72},[51,20386,20387],{"class":53,"line":3701},[51,20388,96],{"class":72},[51,20390,20391,20394,20396,20398,20400],{"class":53,"line":8910},[51,20392,20393],{"class":72},"    Person ",[51,20395,8092],{"class":68},[51,20397,73],{"class":72},[51,20399,457],{"class":175},[51,20401,615],{"class":72},[51,20403,20404,20406,20408],{"class":53,"line":8934},[51,20405,20393],{"class":72},[51,20407,7995],{"class":68},[51,20409,18477],{"class":72},[51,20411,20412,20414,20416,20419,20421,20424,20426],{"class":53,"line":8939},[51,20413,215],{"class":72},[51,20415,218],{"class":64},[51,20417,20418],{"class":282},"\"P2的年龄为：\"",[51,20420,218],{"class":64},[51,20422,20423],{"class":72},"p2.m_Age",[51,20425,218],{"class":64},[51,20427,288],{"class":72},[51,20429,20430],{"class":53,"line":8945},[51,20431,132],{"class":72},[51,20433,20434],{"class":53,"line":8972},[51,20435,20436],{"class":57},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[51,20438,20439],{"class":53,"line":8977},[51,20440,20441],{"class":57},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[51,20443,20444,20446,20449,20451,20453,20455],{"class":53,"line":8983},[51,20445,252],{"class":64},[51,20447,20448],{"class":68}," doWork",[51,20450,73],{"class":72},[51,20452,20008],{"class":68},[51,20454,7787],{"class":78},[51,20456,90],{"class":72},[51,20458,20459],{"class":53,"line":8995},[51,20460,96],{"class":72},[51,20462,20463,20465,20467,20470,20472],{"class":53,"line":9007},[51,20464,7491],{"class":72},[51,20466,218],{"class":64},[51,20468,20469],{"class":282}," \"doWork函数调用\"",[51,20471,2546],{"class":64},[51,20473,9802],{"class":72},[51,20475,20476],{"class":53,"line":9019},[51,20477,132],{"class":72},[51,20479,20480,20482,20484],{"class":53,"line":10678},[51,20481,252],{"class":64},[51,20483,562],{"class":68},[51,20485,154],{"class":72},[51,20487,20488],{"class":53,"line":10703},[51,20489,96],{"class":72},[51,20491,20492],{"class":53,"line":10726},[51,20493,16275],{"class":72},[51,20495,20496,20499],{"class":53,"line":10750},[51,20497,20498],{"class":68},"    doWork",[51,20500,20501],{"class":72},"(p);\n",[51,20503,20504],{"class":53,"line":10755},[51,20505,132],{"class":72},[51,20507,20508],{"class":53,"line":10760},[51,20509,20510],{"class":57},"\u002F\u002F 3.以值方式返回局部对象\n",[51,20512,20513,20515,20518],{"class":53,"line":10765},[51,20514,20008],{"class":68},[51,20516,20517],{"class":68}," doWork2",[51,20519,154],{"class":72},[51,20521,20522],{"class":53,"line":10774},[51,20523,96],{"class":72},[51,20525,20526],{"class":53,"line":10779},[51,20527,19998],{"class":72},[51,20529,20530,20532,20534,20536,20538,20540,20542,20544,20546,20548,20550],{"class":53,"line":10785},[51,20531,215],{"class":72},[51,20533,218],{"class":64},[51,20535,73],{"class":72},[51,20537,65],{"class":64},[51,20539,7480],{"class":64},[51,20541,1677],{"class":72},[51,20543,1602],{"class":64},[51,20545,8092],{"class":72},[51,20547,218],{"class":64},[51,20549,709],{"class":72},[51,20551,20552],{"class":57},"\u002F\u002F打印p1的地址\n",[51,20554,20555,20557,20560],{"class":53,"line":10806},[51,20556,123],{"class":64},[51,20558,20559],{"class":72}," p1;",[51,20561,20562],{"class":57},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[51,20564,20565],{"class":53,"line":10812},[51,20566,132],{"class":72},[51,20568,20569,20571,20573],{"class":53,"line":10826},[51,20570,252],{"class":64},[51,20572,636],{"class":68},[51,20574,154],{"class":72},[51,20576,20577],{"class":53,"line":10832},[51,20578,96],{"class":72},[51,20580,20581,20584,20586,20588],{"class":53,"line":10859},[51,20582,20583],{"class":72},"    Person p ",[51,20585,108],{"class":64},[51,20587,20517],{"class":68},[51,20589,541],{"class":72},[51,20591,20592,20594,20596,20598,20600,20602,20604,20606,20608,20610,20612],{"class":53,"line":10868},[51,20593,215],{"class":72},[51,20595,218],{"class":64},[51,20597,73],{"class":72},[51,20599,65],{"class":64},[51,20601,7480],{"class":64},[51,20603,1677],{"class":72},[51,20605,1602],{"class":64},[51,20607,40],{"class":72},[51,20609,218],{"class":64},[51,20611,709],{"class":72},[51,20613,20614],{"class":57},"\u002F\u002F打印p的地址\n",[51,20616,20617],{"class":53,"line":10874},[51,20618,132],{"class":72},[51,20620,20621],{"class":53,"line":10882},[51,20622,3480],{"emptyLinePlaceholder":1192},[51,20624,20625],{"class":53,"line":10887},[51,20626,3480],{"emptyLinePlaceholder":1192},[51,20628,20629,20631,20633],{"class":53,"line":17566},[51,20630,65],{"class":64},[51,20632,151],{"class":68},[51,20634,154],{"class":72},[51,20636,20637],{"class":53,"line":17572},[51,20638,96],{"class":72},[51,20640,20641],{"class":53,"line":17595},[51,20642,20643],{"class":57},"    \u002F\u002F test01();\n",[51,20645,20646],{"class":53,"line":17601},[51,20647,20648],{"class":57},"    \u002F\u002F test02();\n",[51,20650,20651,20654],{"class":53,"line":17624},[51,20652,20653],{"class":68},"    test03",[51,20655,541],{"class":72},[51,20657,20658],{"class":53,"line":17638},[51,20659,20660],{"class":57},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[51,20662,20663],{"class":53,"line":17658},[51,20664,20665],{"class":57},"\u002F\u002F 输出结果如下：\n",[51,20667,20668],{"class":53,"line":17664},[51,20669,20670],{"class":57},"\u002F\u002F Person的默认构造函数调用\n",[51,20672,20673],{"class":53,"line":17675},[51,20674,20675],{"class":57},"\u002F\u002F 0x7fffffffceec\n",[51,20677,20678],{"class":53,"line":17698},[51,20679,20675],{"class":57},[51,20681,20682],{"class":53,"line":17720},[51,20683,20684],{"class":57},"\u002F\u002F Person的析构函数调用\n",[51,20686,20687],{"class":53,"line":17725},[51,20688,3480],{"emptyLinePlaceholder":1192},[51,20690,20691],{"class":53,"line":17731},[51,20692,20693],{"class":57},"\u002F\u002F 之前的输出结果如下：\n",[51,20695,20696],{"class":53,"line":17745},[51,20697,20670],{"class":57},[51,20699,20700],{"class":53,"line":17758},[51,20701,20702],{"class":57},"\u002F\u002F 地址\n",[51,20704,20705],{"class":53,"line":17763},[51,20706,20707],{"class":57},"\u002F\u002F Person的拷贝构造函数调用\n",[51,20709,20710],{"class":53,"line":17777},[51,20711,20684],{"class":57},[51,20713,20714],{"class":53,"line":17782},[51,20715,20702],{"class":57},[51,20717,20718],{"class":53,"line":17788},[51,20719,20720],{"class":57},"\u002F\u002F (这两次输出的地址也是不同的) \n",[51,20722,20723],{"class":53,"line":17793},[51,20724,20725],{"class":57},"\u002F\u002F Person的析构函数调用     \n",[51,20727,20728,20730,20732],{"class":53,"line":17807},[51,20729,123],{"class":64},[51,20731,5169],{"class":175},[51,20733,179],{"class":72},[51,20735,20736],{"class":53,"line":17812},[51,20737,132],{"class":72},[40,20739,20740],{},"简化版理解",[29,20742,20744],{"className":45,"code":20743,"language":47,"meta":35,"style":35},"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",[37,20745,20746,20754,20758,20764,20777,20788,20792,20804,20817,20825,20829,20845,20858,20867,20871,20876,20882,20895,20899,20903,20910,20914,20918,20923,20931,20935,20951,20964,20977,20981,20986,20994,20998,21002,21007,21012,21028,21036,21043,21049,21053,21057,21062,21070,21074,21078,21101,21108,21112,21116,21124,21128,21138,21160,21164,21168,21172,21180,21184,21189,21194,21200,21204,21214,21218,21226],{"__ignoreMap":35},[51,20747,20748,20750,20752],{"class":53,"line":54},[51,20749,15656],{"class":64},[51,20751,16531],{"class":68},[51,20753,16534],{"class":72},[51,20755,20756],{"class":53,"line":61},[51,20757,15678],{"class":64},[51,20759,20760,20762],{"class":53,"line":93},[51,20761,19481],{"class":68},[51,20763,11815],{"class":72},[51,20765,20766,20768,20770,20773,20775],{"class":53,"line":99},[51,20767,10631],{"class":72},[51,20769,218],{"class":64},[51,20771,20772],{"class":282}," \"无参构造函数!\"",[51,20774,2546],{"class":64},[51,20776,9802],{"class":72},[51,20778,20779,20782,20784,20786],{"class":53,"line":120},[51,20780,20781],{"class":72},"        mAge ",[51,20783,108],{"class":64},[51,20785,5169],{"class":175},[51,20787,179],{"class":72},[51,20789,20790],{"class":53,"line":129},[51,20791,3267],{"class":72},[51,20793,20794,20796,20798,20800,20802],{"class":53,"line":206},[51,20795,19481],{"class":68},[51,20797,73],{"class":72},[51,20799,65],{"class":64},[51,20801,16651],{"class":78},[51,20803,13404],{"class":72},[51,20805,20806,20808,20810,20813,20815],{"class":53,"line":212},[51,20807,10631],{"class":72},[51,20809,218],{"class":64},[51,20811,20812],{"class":282}," \"有参构造函数!\"",[51,20814,2546],{"class":64},[51,20816,9802],{"class":72},[51,20818,20819,20821,20823],{"class":53,"line":227},[51,20820,20781],{"class":72},[51,20822,108],{"class":64},[51,20824,8759],{"class":72},[51,20826,20827],{"class":53,"line":370},[51,20828,3267],{"class":72},[51,20830,20831,20833,20835,20837,20839,20841,20843],{"class":53,"line":387},[51,20832,19481],{"class":68},[51,20834,73],{"class":72},[51,20836,7754],{"class":64},[51,20838,16531],{"class":68},[51,20840,1602],{"class":64},[51,20842,7787],{"class":78},[51,20844,13404],{"class":72},[51,20846,20847,20849,20851,20854,20856],{"class":53,"line":404},[51,20848,10631],{"class":72},[51,20850,218],{"class":64},[51,20852,20853],{"class":282}," \"拷贝构造函数!\"",[51,20855,2546],{"class":64},[51,20857,9802],{"class":72},[51,20859,20860,20862,20864],{"class":53,"line":415},[51,20861,20781],{"class":72},[51,20863,108],{"class":64},[51,20865,20866],{"class":72}," p.mAge;\n",[51,20868,20869],{"class":53,"line":420},[51,20870,3267],{"class":72},[51,20872,20873],{"class":53,"line":429},[51,20874,20875],{"class":57},"    \u002F\u002F析构函数在释放内存之前调用\n",[51,20877,20878,20880],{"class":53,"line":434},[51,20879,19514],{"class":68},[51,20881,11815],{"class":72},[51,20883,20884,20886,20888,20891,20893],{"class":53,"line":448},[51,20885,10631],{"class":72},[51,20887,218],{"class":64},[51,20889,20890],{"class":282}," \"析构函数!\"",[51,20892,2546],{"class":64},[51,20894,9802],{"class":72},[51,20896,20897],{"class":53,"line":462},[51,20898,3267],{"class":72},[51,20900,20901],{"class":53,"line":470},[51,20902,15678],{"class":64},[51,20904,20905,20907],{"class":53,"line":2783},[51,20906,102],{"class":64},[51,20908,20909],{"class":72}," mAge;\n",[51,20911,20912],{"class":53,"line":2788},[51,20913,5072],{"class":72},[51,20915,20916],{"class":53,"line":2817},[51,20917,3480],{"emptyLinePlaceholder":1192},[51,20919,20920],{"class":53,"line":2822},[51,20921,20922],{"class":57},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[51,20924,20925,20927,20929],{"class":53,"line":2839},[51,20926,252],{"class":64},[51,20928,493],{"class":68},[51,20930,11815],{"class":72},[51,20932,20933],{"class":53,"line":2844},[51,20934,3480],{"emptyLinePlaceholder":1192},[51,20936,20937,20939,20942,20944,20946,20948],{"class":53,"line":2849},[51,20938,20393],{"class":72},[51,20940,20941],{"class":68},"man",[51,20943,73],{"class":72},[51,20945,612],{"class":175},[51,20947,879],{"class":72},[51,20949,20950],{"class":57}," \u002F\u002Fp对象已经创建完毕\n",[51,20952,20953,20955,20958,20961],{"class":53,"line":2854},[51,20954,20393],{"class":72},[51,20956,20957],{"class":68},"newman",[51,20959,20960],{"class":72},"(man);",[51,20962,20963],{"class":57}," \u002F\u002F调用拷贝构造函数\n",[51,20965,20966,20969,20971,20974],{"class":53,"line":2868},[51,20967,20968],{"class":72},"    Person newman2 ",[51,20970,108],{"class":64},[51,20972,20973],{"class":72}," man;",[51,20975,20976],{"class":57}," \u002F\u002F拷贝构造\n",[51,20978,20979],{"class":53,"line":2873},[51,20980,3480],{"emptyLinePlaceholder":1192},[51,20982,20983],{"class":53,"line":3657},[51,20984,20985],{"class":57},"    \u002F\u002FPerson newman3;\n",[51,20987,20988,20991],{"class":53,"line":3671},[51,20989,20990],{"class":57},"    \u002F\u002Fnewman3 = man;",[51,20992,20993],{"class":57}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[51,20995,20996],{"class":53,"line":3679},[51,20997,132],{"class":72},[51,20999,21000],{"class":53,"line":3684},[51,21001,3480],{"emptyLinePlaceholder":1192},[51,21003,21004],{"class":53,"line":3690},[51,21005,21006],{"class":57},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[51,21008,21009],{"class":53,"line":3696},[51,21010,21011],{"class":57},"\u002F\u002F相当于Person p1 = p;\n",[51,21013,21014,21016,21018,21020,21022,21025],{"class":53,"line":3701},[51,21015,252],{"class":64},[51,21017,20448],{"class":68},[51,21019,73],{"class":72},[51,21021,20008],{"class":68},[51,21023,21024],{"class":78}," p1",[51,21026,21027],{"class":72},") {}\n",[51,21029,21030,21032,21034],{"class":53,"line":8910},[51,21031,252],{"class":64},[51,21033,562],{"class":68},[51,21035,11815],{"class":72},[51,21037,21038,21040],{"class":53,"line":8934},[51,21039,19566],{"class":72},[51,21041,21042],{"class":57}," \u002F\u002F无参构造函数\n",[51,21044,21045,21047],{"class":53,"line":8939},[51,21046,20498],{"class":68},[51,21048,20501],{"class":72},[51,21050,21051],{"class":53,"line":8945},[51,21052,132],{"class":72},[51,21054,21055],{"class":53,"line":8972},[51,21056,3480],{"emptyLinePlaceholder":1192},[51,21058,21059],{"class":53,"line":8977},[51,21060,21061],{"class":57},"\u002F\u002F3. 以值方式返回局部对象\n",[51,21063,21064,21066,21068],{"class":53,"line":8983},[51,21065,20008],{"class":68},[51,21067,20517],{"class":68},[51,21069,154],{"class":72},[51,21071,21072],{"class":53,"line":8995},[51,21073,96],{"class":72},[51,21075,21076],{"class":53,"line":9007},[51,21077,19998],{"class":72},[51,21079,21080,21082,21084,21086,21088,21090,21092,21094,21097,21099],{"class":53,"line":9019},[51,21081,7491],{"class":72},[51,21083,218],{"class":64},[51,21085,2750],{"class":72},[51,21087,65],{"class":64},[51,21089,7480],{"class":64},[51,21091,1677],{"class":72},[51,21093,1602],{"class":64},[51,21095,21096],{"class":72},"p1 ",[51,21098,218],{"class":64},[51,21100,9802],{"class":72},[51,21102,21103,21105],{"class":53,"line":10678},[51,21104,123],{"class":64},[51,21106,21107],{"class":72}," p1;\n",[51,21109,21110],{"class":53,"line":10703},[51,21111,132],{"class":72},[51,21113,21114],{"class":53,"line":10726},[51,21115,3480],{"emptyLinePlaceholder":1192},[51,21117,21118,21120,21122],{"class":53,"line":10750},[51,21119,252],{"class":64},[51,21121,636],{"class":68},[51,21123,154],{"class":72},[51,21125,21126],{"class":53,"line":10755},[51,21127,96],{"class":72},[51,21129,21130,21132,21134,21136],{"class":53,"line":10760},[51,21131,20583],{"class":72},[51,21133,108],{"class":64},[51,21135,20517],{"class":68},[51,21137,541],{"class":72},[51,21139,21140,21142,21144,21146,21148,21150,21152,21154,21156,21158],{"class":53,"line":10765},[51,21141,7491],{"class":72},[51,21143,218],{"class":64},[51,21145,2750],{"class":72},[51,21147,65],{"class":64},[51,21149,7480],{"class":64},[51,21151,1677],{"class":72},[51,21153,1602],{"class":64},[51,21155,12410],{"class":72},[51,21157,218],{"class":64},[51,21159,9802],{"class":72},[51,21161,21162],{"class":53,"line":10774},[51,21163,132],{"class":72},[51,21165,21166],{"class":53,"line":10779},[51,21167,3480],{"emptyLinePlaceholder":1192},[51,21169,21170],{"class":53,"line":10785},[51,21171,3480],{"emptyLinePlaceholder":1192},[51,21173,21174,21176,21178],{"class":53,"line":10806},[51,21175,65],{"class":64},[51,21177,151],{"class":68},[51,21179,11815],{"class":72},[51,21181,21182],{"class":53,"line":10812},[51,21183,3480],{"emptyLinePlaceholder":1192},[51,21185,21186],{"class":53,"line":10826},[51,21187,21188],{"class":57},"    \u002F\u002Ftest01();\n",[51,21190,21191],{"class":53,"line":10832},[51,21192,21193],{"class":57},"    \u002F\u002Ftest02();\n",[51,21195,21196,21198],{"class":53,"line":10859},[51,21197,20653],{"class":68},[51,21199,541],{"class":72},[51,21201,21202],{"class":53,"line":10868},[51,21203,3480],{"emptyLinePlaceholder":1192},[51,21205,21206,21208,21210,21212],{"class":53,"line":10874},[51,21207,3383],{"class":68},[51,21209,73],{"class":72},[51,21211,3388],{"class":282},[51,21213,615],{"class":72},[51,21215,21216],{"class":53,"line":10882},[51,21217,3480],{"emptyLinePlaceholder":1192},[51,21219,21220,21222,21224],{"class":53,"line":10887},[51,21221,123],{"class":64},[51,21223,5169],{"class":175},[51,21225,179],{"class":72},[51,21227,21228],{"class":53,"line":17566},[51,21229,132],{"class":72},[1233,21231,21233],{"id":21232},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[40,21235,21236],{},"默认情况下，c++编译器至少给一个类添加3个函数",[40,21238,21239],{},"1．默认构造函数(无参，函数体为空)",[40,21241,21242],{},"2．默认析构函数(无参，函数体为空)",[40,21244,21245],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[40,21247,21248],{},"构造函数调用规则如下：",[1000,21250,21251,21254],{},[22,21252,21253],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[22,21255,21256],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[29,21258,21260],{"className":45,"code":21259,"language":47,"meta":35,"style":35},"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",[37,21261,21262,21270,21274,21279,21285,21297,21301,21306,21318,21327,21339,21343,21347,21363,21372,21384,21388,21392,21398,21410,21414,21418,21424,21428,21432,21440,21444,21456,21461,21469,21473,21491,21495,21499,21507,21511,21516,21524,21539,21552,21556,21561,21568,21584,21597,21601,21605,21613,21617,21623,21627,21637,21641,21649],{"__ignoreMap":35},[51,21263,21264,21266,21268],{"class":53,"line":54},[51,21265,15656],{"class":64},[51,21267,16531],{"class":68},[51,21269,16534],{"class":72},[51,21271,21272],{"class":53,"line":61},[51,21273,15678],{"class":64},[51,21275,21276],{"class":53,"line":93},[51,21277,21278],{"class":57},"    \u002F\u002F无参（默认）构造函数\n",[51,21280,21281,21283],{"class":53,"line":99},[51,21282,19481],{"class":68},[51,21284,11815],{"class":72},[51,21286,21287,21289,21291,21293,21295],{"class":53,"line":120},[51,21288,10631],{"class":72},[51,21290,218],{"class":64},[51,21292,20772],{"class":282},[51,21294,2546],{"class":64},[51,21296,9802],{"class":72},[51,21298,21299],{"class":53,"line":129},[51,21300,3267],{"class":72},[51,21302,21303],{"class":53,"line":206},[51,21304,21305],{"class":57},"    \u002F\u002F有参构造函数\n",[51,21307,21308,21310,21312,21314,21316],{"class":53,"line":212},[51,21309,19481],{"class":68},[51,21311,73],{"class":72},[51,21313,65],{"class":64},[51,21315,170],{"class":78},[51,21317,13404],{"class":72},[51,21319,21320,21323,21325],{"class":53,"line":227},[51,21321,21322],{"class":72},"        age ",[51,21324,108],{"class":64},[51,21326,763],{"class":72},[51,21328,21329,21331,21333,21335,21337],{"class":53,"line":370},[51,21330,10631],{"class":72},[51,21332,218],{"class":64},[51,21334,20812],{"class":282},[51,21336,2546],{"class":64},[51,21338,9802],{"class":72},[51,21340,21341],{"class":53,"line":387},[51,21342,3267],{"class":72},[51,21344,21345],{"class":53,"line":404},[51,21346,19836],{"class":57},[51,21348,21349,21351,21353,21355,21357,21359,21361],{"class":53,"line":415},[51,21350,19481],{"class":68},[51,21352,73],{"class":72},[51,21354,7754],{"class":64},[51,21356,16531],{"class":68},[51,21358,1602],{"class":64},[51,21360,7787],{"class":78},[51,21362,13404],{"class":72},[51,21364,21365,21367,21369],{"class":53,"line":420},[51,21366,21322],{"class":72},[51,21368,108],{"class":64},[51,21370,21371],{"class":72}," p.age;\n",[51,21373,21374,21376,21378,21380,21382],{"class":53,"line":429},[51,21375,10631],{"class":72},[51,21377,218],{"class":64},[51,21379,20853],{"class":282},[51,21381,2546],{"class":64},[51,21383,9802],{"class":72},[51,21385,21386],{"class":53,"line":434},[51,21387,3267],{"class":72},[51,21389,21390],{"class":53,"line":448},[51,21391,19509],{"class":57},[51,21393,21394,21396],{"class":53,"line":462},[51,21395,19514],{"class":68},[51,21397,11815],{"class":72},[51,21399,21400,21402,21404,21406,21408],{"class":53,"line":470},[51,21401,10631],{"class":72},[51,21403,218],{"class":64},[51,21405,20890],{"class":282},[51,21407,2546],{"class":64},[51,21409,9802],{"class":72},[51,21411,21412],{"class":53,"line":2783},[51,21413,3267],{"class":72},[51,21415,21416],{"class":53,"line":2788},[51,21417,15678],{"class":64},[51,21419,21420,21422],{"class":53,"line":2817},[51,21421,102],{"class":64},[51,21423,8759],{"class":72},[51,21425,21426],{"class":53,"line":2822},[51,21427,5072],{"class":72},[51,21429,21430],{"class":53,"line":2839},[51,21431,3480],{"emptyLinePlaceholder":1192},[51,21433,21434,21436,21438],{"class":53,"line":2844},[51,21435,252],{"class":64},[51,21437,493],{"class":68},[51,21439,154],{"class":72},[51,21441,21442],{"class":53,"line":2849},[51,21443,96],{"class":72},[51,21445,21446,21448,21450,21452,21454],{"class":53,"line":2854},[51,21447,20393],{"class":72},[51,21449,8092],{"class":68},[51,21451,73],{"class":72},[51,21453,1896],{"class":175},[51,21455,615],{"class":72},[51,21457,21458],{"class":53,"line":2868},[51,21459,21460],{"class":57},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[51,21462,21463,21465,21467],{"class":53,"line":2873},[51,21464,20393],{"class":72},[51,21466,7995],{"class":68},[51,21468,18477],{"class":72},[51,21470,21471],{"class":53,"line":3657},[51,21472,3480],{"emptyLinePlaceholder":1192},[51,21474,21475,21477,21479,21482,21484,21487,21489],{"class":53,"line":3671},[51,21476,7491],{"class":72},[51,21478,218],{"class":64},[51,21480,21481],{"class":282}," \"p2的年龄为： \"",[51,21483,2546],{"class":64},[51,21485,21486],{"class":72}," p2.age ",[51,21488,218],{"class":64},[51,21490,9802],{"class":72},[51,21492,21493],{"class":53,"line":3679},[51,21494,132],{"class":72},[51,21496,21497],{"class":53,"line":3684},[51,21498,3480],{"emptyLinePlaceholder":1192},[51,21500,21501,21503,21505],{"class":53,"line":3690},[51,21502,252],{"class":64},[51,21504,562],{"class":68},[51,21506,154],{"class":72},[51,21508,21509],{"class":53,"line":3696},[51,21510,96],{"class":72},[51,21512,21513],{"class":53,"line":3701},[51,21514,21515],{"class":57},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[51,21517,21518,21521],{"class":53,"line":8910},[51,21519,21520],{"class":72},"    Person p1;",[51,21522,21523],{"class":57}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[51,21525,21526,21528,21530,21532,21534,21536],{"class":53,"line":8934},[51,21527,20393],{"class":72},[51,21529,7995],{"class":68},[51,21531,73],{"class":72},[51,21533,443],{"class":175},[51,21535,879],{"class":72},[51,21537,21538],{"class":57}," \u002F\u002F用户提供的有参\n",[51,21540,21541,21543,21546,21549],{"class":53,"line":8939},[51,21542,20393],{"class":72},[51,21544,21545],{"class":68},"p3",[51,21547,21548],{"class":72},"(p2);",[51,21550,21551],{"class":57}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[51,21553,21554],{"class":53,"line":8945},[51,21555,3480],{"emptyLinePlaceholder":1192},[51,21557,21558],{"class":53,"line":8972},[51,21559,21560],{"class":57},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[51,21562,21563,21566],{"class":53,"line":8977},[51,21564,21565],{"class":72},"    Person p4;",[51,21567,21523],{"class":57},[51,21569,21570,21572,21575,21577,21579,21581],{"class":53,"line":8983},[51,21571,20393],{"class":72},[51,21573,21574],{"class":68},"p5",[51,21576,73],{"class":72},[51,21578,443],{"class":175},[51,21580,879],{"class":72},[51,21582,21583],{"class":57}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[51,21585,21586,21588,21591,21594],{"class":53,"line":8995},[51,21587,20393],{"class":72},[51,21589,21590],{"class":68},"p6",[51,21592,21593],{"class":72},"(p5);",[51,21595,21596],{"class":57}," \u002F\u002F用户自己提供拷贝构造\n",[51,21598,21599],{"class":53,"line":9007},[51,21600,132],{"class":72},[51,21602,21603],{"class":53,"line":9019},[51,21604,3480],{"emptyLinePlaceholder":1192},[51,21606,21607,21609,21611],{"class":53,"line":10678},[51,21608,65],{"class":64},[51,21610,151],{"class":68},[51,21612,11815],{"class":72},[51,21614,21615],{"class":53,"line":10703},[51,21616,3480],{"emptyLinePlaceholder":1192},[51,21618,21619,21621],{"class":53,"line":10726},[51,21620,538],{"class":68},[51,21622,541],{"class":72},[51,21624,21625],{"class":53,"line":10750},[51,21626,3480],{"emptyLinePlaceholder":1192},[51,21628,21629,21631,21633,21635],{"class":53,"line":10755},[51,21630,3383],{"class":68},[51,21632,73],{"class":72},[51,21634,3388],{"class":282},[51,21636,615],{"class":72},[51,21638,21639],{"class":53,"line":10760},[51,21640,3480],{"emptyLinePlaceholder":1192},[51,21642,21643,21645,21647],{"class":53,"line":10765},[51,21644,123],{"class":64},[51,21646,5169],{"class":175},[51,21648,179],{"class":72},[51,21650,21651],{"class":53,"line":10774},[51,21652,132],{"class":72},[1233,21654,21656],{"id":21655},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[40,21658,21659],{},"浅拷贝：简单的赋值拷贝操作",[40,21661,21662],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[29,21664,21666],{"className":45,"code":21665,"language":47,"meta":35,"style":35},"#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",[37,21667,21668,21674,21684,21690,21694,21698,21703,21709,21713,21726,21730,21734,21741,21745,21755,21770,21783,21787,21792,21797,21813,21817,21830,21835,21840,21845,21854,21859,21874,21878,21882,21886,21892,21896,21901,21916,21920,21931,21945,21949,21958,21962,21968,21980,21984,21992,21996,22013,22044,22052,22080,22084,22088,22096,22100,22106],{"__ignoreMap":35},[51,21669,21670,21672],{"class":53,"line":54},[51,21671,1026],{"class":64},[51,21673,1029],{"class":282},[51,21675,21676,21678,21680,21682],{"class":53,"line":61},[51,21677,1034],{"class":64},[51,21679,1037],{"class":64},[51,21681,1040],{"class":68},[51,21683,179],{"class":72},[51,21685,21686,21688],{"class":53,"line":93},[51,21687,15656],{"class":64},[51,21689,16133],{"class":68},[51,21691,21692],{"class":53,"line":99},[51,21693,96],{"class":72},[51,21695,21696],{"class":53,"line":120},[51,21697,15678],{"class":64},[51,21699,21700],{"class":53,"line":129},[51,21701,21702],{"class":57},"    \u002F\u002F默认构造函数\n",[51,21704,21705,21707],{"class":53,"line":206},[51,21706,19481],{"class":68},[51,21708,154],{"class":72},[51,21710,21711],{"class":53,"line":212},[51,21712,3110],{"class":72},[51,21714,21715,21717,21719,21722,21724],{"class":53,"line":227},[51,21716,4528],{"class":72},[51,21718,218],{"class":64},[51,21720,21721],{"class":282},"\"默认构造函数\"",[51,21723,218],{"class":64},[51,21725,288],{"class":72},[51,21727,21728],{"class":53,"line":370},[51,21729,3267],{"class":72},[51,21731,21732],{"class":53,"line":387},[51,21733,21305],{"class":57},[51,21735,21736,21738],{"class":53,"line":404},[51,21737,19514],{"class":68},[51,21739,21740],{"class":72},"(int age,int height)\n",[51,21742,21743],{"class":53,"line":415},[51,21744,3110],{"class":72},[51,21746,21747,21750,21752],{"class":53,"line":420},[51,21748,21749],{"class":72},"        m_Age",[51,21751,108],{"class":64},[51,21753,21754],{"class":72},"age;\n",[51,21756,21757,21760,21762,21764,21767],{"class":53,"line":429},[51,21758,21759],{"class":72},"        m_Height",[51,21761,12679],{"class":64},[51,21763,3462],{"class":64},[51,21765,21766],{"class":72},"(height);",[51,21768,21769],{"class":57},"\u002F\u002F放到堆区\n",[51,21771,21772,21774,21776,21779,21781],{"class":53,"line":434},[51,21773,4528],{"class":72},[51,21775,218],{"class":64},[51,21777,21778],{"class":282},"\"有参构造函数\"",[51,21780,218],{"class":64},[51,21782,288],{"class":72},[51,21784,21785],{"class":53,"line":448},[51,21786,3267],{"class":72},[51,21788,21789],{"class":53,"line":462},[51,21790,21791],{"class":57},"    \u002F\u002F深拷贝解决上述问题\n",[51,21793,21794],{"class":53,"line":470},[51,21795,21796],{"class":57},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[51,21798,21799,21801,21803,21805,21807,21809,21811],{"class":53,"line":2783},[51,21800,19481],{"class":68},[51,21802,73],{"class":72},[51,21804,7754],{"class":64},[51,21806,16531],{"class":68},[51,21808,11546],{"class":64},[51,21810,40],{"class":78},[51,21812,90],{"class":72},[51,21814,21815],{"class":53,"line":2788},[51,21816,3110],{"class":72},[51,21818,21819,21821,21823,21826,21828],{"class":53,"line":2817},[51,21820,4528],{"class":72},[51,21822,218],{"class":64},[51,21824,21825],{"class":282},"\"拷贝构造函数\"",[51,21827,218],{"class":64},[51,21829,288],{"class":72},[51,21831,21832],{"class":53,"line":2822},[51,21833,21834],{"class":57},"        \u002F\u002F编译器默认的写如下注释部分\n",[51,21836,21837],{"class":53,"line":2839},[51,21838,21839],{"class":57},"        \u002F\u002Fm_Age=p.m_Age;\n",[51,21841,21842],{"class":53,"line":2844},[51,21843,21844],{"class":57},"        \u002F\u002Fm_Height=p.m_Height;\n",[51,21846,21847,21849,21851],{"class":53,"line":2849},[51,21848,21749],{"class":72},[51,21850,108],{"class":64},[51,21852,21853],{"class":72},"p.m_Age;\n",[51,21855,21856],{"class":53,"line":2854},[51,21857,21858],{"class":57},"        \u002F\u002F深拷贝操作\n",[51,21860,21861,21863,21865,21867,21869,21871],{"class":53,"line":2868},[51,21862,21759],{"class":72},[51,21864,12679],{"class":64},[51,21866,3462],{"class":64},[51,21868,73],{"class":72},[51,21870,1702],{"class":64},[51,21872,21873],{"class":72},"p.m_Height);\n",[51,21875,21876],{"class":53,"line":2873},[51,21877,3267],{"class":72},[51,21879,21880],{"class":53,"line":3657},[51,21881,3480],{"emptyLinePlaceholder":1192},[51,21883,21884],{"class":53,"line":3671},[51,21885,19509],{"class":57},[51,21887,21888,21890],{"class":53,"line":3679},[51,21889,19514],{"class":68},[51,21891,154],{"class":72},[51,21893,21894],{"class":53,"line":3684},[51,21895,3110],{"class":72},[51,21897,21898],{"class":53,"line":3690},[51,21899,21900],{"class":57},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[51,21902,21903,21905,21908,21911,21914],{"class":53,"line":3696},[51,21904,3577],{"class":64},[51,21906,21907],{"class":72},"(m_Height ",[51,21909,21910],{"class":64},"!=",[51,21912,21913],{"class":175}," NULL",[51,21915,90],{"class":72},[51,21917,21918],{"class":53,"line":3701},[51,21919,3590],{"class":72},[51,21921,21922,21925,21928],{"class":53,"line":8910},[51,21923,21924],{"class":64},"            delete",[51,21926,21927],{"class":72}," m_Height;",[51,21929,21930],{"class":57}," \u002F\u002F释放堆区内存\n",[51,21932,21933,21936,21938,21940,21942],{"class":53,"line":8934},[51,21934,21935],{"class":72},"            m_Height",[51,21937,108],{"class":64},[51,21939,3472],{"class":175},[51,21941,409],{"class":72},[51,21943,21944],{"class":57}," \u002F\u002F防止野指针\n",[51,21946,21947],{"class":53,"line":8939},[51,21948,3609],{"class":72},[51,21950,21951,21953,21955],{"class":53,"line":8945},[51,21952,4528],{"class":72},[51,21954,218],{"class":64},[51,21956,21957],{"class":282},"\"Person的析构函数调用\"\n",[51,21959,21960],{"class":53,"line":8972},[51,21961,3267],{"class":72},[51,21963,21964,21966],{"class":53,"line":8977},[51,21965,102],{"class":64},[51,21967,16628],{"class":72},[51,21969,21970,21972,21974,21977],{"class":53,"line":8983},[51,21971,102],{"class":64},[51,21973,7480],{"class":64},[51,21975,21976],{"class":72},"m_Height;",[51,21978,21979],{"class":57}," \u002F\u002F定义一个指针，指向身高\n",[51,21981,21982],{"class":53,"line":8995},[51,21983,5072],{"class":72},[51,21985,21986,21988,21990],{"class":53,"line":9007},[51,21987,252],{"class":64},[51,21989,493],{"class":68},[51,21991,154],{"class":72},[51,21993,21994],{"class":53,"line":9019},[51,21995,96],{"class":72},[51,21997,21998,22000,22002,22004,22006,22008,22011],{"class":53,"line":10678},[51,21999,20393],{"class":72},[51,22001,8092],{"class":68},[51,22003,73],{"class":72},[51,22005,1896],{"class":175},[51,22007,82],{"class":72},[51,22009,22010],{"class":175},"160",[51,22012,615],{"class":72},[51,22014,22015,22017,22019,22022,22024,22027,22029,22032,22034,22037,22039,22041],{"class":53,"line":10703},[51,22016,215],{"class":72},[51,22018,218],{"class":64},[51,22020,22021],{"class":282},"\"p1的年龄为:\"",[51,22023,218],{"class":64},[51,22025,22026],{"class":72},"p1.m_Age",[51,22028,218],{"class":64},[51,22030,22031],{"class":282},"\"身高为：\"",[51,22033,7381],{"class":64},[51,22035,22036],{"class":72},"p1.m_Height",[51,22038,218],{"class":64},[51,22040,709],{"class":72},[51,22042,22043],{"class":57},"  \u002F\u002F18\n",[51,22045,22046,22048,22050],{"class":53,"line":10726},[51,22047,20393],{"class":72},[51,22049,7995],{"class":68},[51,22051,18477],{"class":72},[51,22053,22054,22056,22058,22061,22063,22065,22067,22069,22071,22074,22076,22078],{"class":53,"line":10750},[51,22055,215],{"class":72},[51,22057,218],{"class":64},[51,22059,22060],{"class":282},"\"p2的年龄为：\"",[51,22062,218],{"class":64},[51,22064,20423],{"class":72},[51,22066,218],{"class":64},[51,22068,22031],{"class":282},[51,22070,7381],{"class":64},[51,22072,22073],{"class":72},"p2.m_Height",[51,22075,218],{"class":64},[51,22077,709],{"class":72},[51,22079,22043],{"class":57},[51,22081,22082],{"class":53,"line":10755},[51,22083,14172],{"class":72},[51,22085,22086],{"class":53,"line":10760},[51,22087,132],{"class":72},[51,22089,22090,22092,22094],{"class":53,"line":10765},[51,22091,65],{"class":64},[51,22093,151],{"class":68},[51,22095,154],{"class":72},[51,22097,22098],{"class":53,"line":10774},[51,22099,96],{"class":72},[51,22101,22102,22104],{"class":53,"line":10779},[51,22103,538],{"class":68},[51,22105,541],{"class":72},[51,22107,22108],{"class":53,"line":10785},[51,22109,132],{"class":72},[40,22111,22112],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[40,22114,22115],{},"浅拷贝带来的问题是堆区的内存重复释放",[40,22117,22118],{},[2564,22119],{"alt":35,"src":22120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[40,22122,22123],{},"浅拷贝问题要使用深拷贝来解决",[40,22125,22126],{},[2564,22127],{"alt":35,"src":22128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[40,22130,22131],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[1233,22133,22135],{"id":22134},"_826初始化列表","8.2.6初始化列表",[40,22137,22138],{},"作用：初始化属性",[40,22140,27],{},[29,22142,22145],{"className":22143,"code":22144,"language":34},[32],"构造函数():属性1(值1),属性2(值2).....{}\n",[37,22146,22144],{"__ignoreMap":35},[40,22148,22149],{},"例子",[29,22151,22153],{"className":45,"code":22152,"language":47,"meta":35,"style":35},"#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",[37,22154,22155,22161,22171,22177,22181,22186,22190,22195,22200,22205,22210,22215,22220,22224,22229,22234,22277,22286,22304,22322,22340,22344,22348,22355,22362,22369,22373,22377,22385,22389,22393,22413,22422,22426,22430,22440,22444,22452],{"__ignoreMap":35},[51,22156,22157,22159],{"class":53,"line":54},[51,22158,1026],{"class":64},[51,22160,1029],{"class":282},[51,22162,22163,22165,22167,22169],{"class":53,"line":61},[51,22164,1034],{"class":64},[51,22166,1037],{"class":64},[51,22168,1040],{"class":68},[51,22170,179],{"class":72},[51,22172,22173,22175],{"class":53,"line":93},[51,22174,15656],{"class":64},[51,22176,16133],{"class":68},[51,22178,22179],{"class":53,"line":99},[51,22180,96],{"class":72},[51,22182,22183],{"class":53,"line":120},[51,22184,22185],{"class":64},"    public:\n",[51,22187,22188],{"class":53,"line":129},[51,22189,3480],{"emptyLinePlaceholder":1192},[51,22191,22192],{"class":53,"line":206},[51,22193,22194],{"class":57},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[51,22196,22197],{"class":53,"line":212},[51,22198,22199],{"class":57},"    \u002F\u002FPerson(int a, int b, int c) {\n",[51,22201,22202],{"class":53,"line":227},[51,22203,22204],{"class":57},"    \u002F\u002F  m_A = a;\n",[51,22206,22207],{"class":53,"line":370},[51,22208,22209],{"class":57},"    \u002F\u002F  m_B = b;\n",[51,22211,22212],{"class":53,"line":387},[51,22213,22214],{"class":57},"    \u002F\u002F  m_C = c;\n",[51,22216,22217],{"class":53,"line":404},[51,22218,22219],{"class":57},"    \u002F\u002F}\n",[51,22221,22222],{"class":53,"line":415},[51,22223,3480],{"emptyLinePlaceholder":1192},[51,22225,22226],{"class":53,"line":420},[51,22227,22228],{"class":57},"    \u002F\u002F初始化列表方式初始化\n",[51,22230,22231],{"class":53,"line":429},[51,22232,22233],{"class":57},"    \u002F\u002F使用有参构造函数\n",[51,22235,22236,22238,22240,22242,22244,22246,22248,22250,22252,22254,22256,22259,22262,22265,22268,22271,22274],{"class":53,"line":434},[51,22237,19481],{"class":68},[51,22239,73],{"class":72},[51,22241,65],{"class":64},[51,22243,170],{"class":78},[51,22245,13397],{"class":72},[51,22247,65],{"class":64},[51,22249,186],{"class":78},[51,22251,13397],{"class":72},[51,22253,65],{"class":64},[51,22255,800],{"class":78},[51,22257,22258],{"class":72},") :",[51,22260,22261],{"class":68},"m_A",[51,22263,22264],{"class":72},"(a), ",[51,22266,22267],{"class":68},"m_B",[51,22269,22270],{"class":72},"(b), ",[51,22272,22273],{"class":68},"m_C",[51,22275,22276],{"class":72},"(c) {}\n",[51,22278,22279,22281,22284],{"class":53,"line":448},[51,22280,15871],{"class":64},[51,22282,22283],{"class":68}," PrintPerson",[51,22285,11815],{"class":72},[51,22287,22288,22290,22292,22295,22297,22300,22302],{"class":53,"line":462},[51,22289,10631],{"class":72},[51,22291,218],{"class":64},[51,22293,22294],{"class":282}," \"mA:\"",[51,22296,2546],{"class":64},[51,22298,22299],{"class":72}," m_A ",[51,22301,218],{"class":64},[51,22303,9802],{"class":72},[51,22305,22306,22308,22310,22313,22315,22318,22320],{"class":53,"line":470},[51,22307,10631],{"class":72},[51,22309,218],{"class":64},[51,22311,22312],{"class":282}," \"mB:\"",[51,22314,2546],{"class":64},[51,22316,22317],{"class":72}," m_B ",[51,22319,218],{"class":64},[51,22321,9802],{"class":72},[51,22323,22324,22326,22328,22331,22333,22336,22338],{"class":53,"line":2783},[51,22325,10631],{"class":72},[51,22327,218],{"class":64},[51,22329,22330],{"class":282}," \"mC:\"",[51,22332,2546],{"class":64},[51,22334,22335],{"class":72}," m_C ",[51,22337,218],{"class":64},[51,22339,9802],{"class":72},[51,22341,22342],{"class":53,"line":2788},[51,22343,3267],{"class":72},[51,22345,22346],{"class":53,"line":2817},[51,22347,16184],{"class":64},[51,22349,22350,22352],{"class":53,"line":2822},[51,22351,102],{"class":64},[51,22353,22354],{"class":72}," m_A;\n",[51,22356,22357,22359],{"class":53,"line":2839},[51,22358,102],{"class":64},[51,22360,22361],{"class":72}," m_B;\n",[51,22363,22364,22366],{"class":53,"line":2844},[51,22365,102],{"class":64},[51,22367,22368],{"class":72}," m_C;\n",[51,22370,22371],{"class":53,"line":2849},[51,22372,5072],{"class":72},[51,22374,22375],{"class":53,"line":2854},[51,22376,3480],{"emptyLinePlaceholder":1192},[51,22378,22379,22381,22383],{"class":53,"line":2868},[51,22380,65],{"class":64},[51,22382,151],{"class":68},[51,22384,891],{"class":72},[51,22386,22387],{"class":53,"line":2873},[51,22388,96],{"class":72},[51,22390,22391],{"class":53,"line":3657},[51,22392,3480],{"emptyLinePlaceholder":1192},[51,22394,22395,22397,22399,22401,22403,22405,22407,22409,22411],{"class":53,"line":3671},[51,22396,20393],{"class":72},[51,22398,40],{"class":68},[51,22400,73],{"class":72},[51,22402,791],{"class":175},[51,22404,13397],{"class":72},[51,22406,1334],{"class":175},[51,22408,13397],{"class":72},[51,22410,1328],{"class":175},[51,22412,615],{"class":72},[51,22414,22415,22417,22420],{"class":53,"line":3679},[51,22416,16828],{"class":72},[51,22418,22419],{"class":68},"PrintPerson",[51,22421,541],{"class":72},[51,22423,22424],{"class":53,"line":3684},[51,22425,3480],{"emptyLinePlaceholder":1192},[51,22427,22428],{"class":53,"line":3690},[51,22429,3480],{"emptyLinePlaceholder":1192},[51,22431,22432,22434,22436,22438],{"class":53,"line":3696},[51,22433,3383],{"class":68},[51,22435,73],{"class":72},[51,22437,3388],{"class":282},[51,22439,615],{"class":72},[51,22441,22442],{"class":53,"line":3701},[51,22443,3480],{"emptyLinePlaceholder":1192},[51,22445,22446,22448,22450],{"class":53,"line":8910},[51,22447,123],{"class":64},[51,22449,5169],{"class":175},[51,22451,179],{"class":72},[51,22453,22454],{"class":53,"line":8934},[51,22455,132],{"class":72},[40,22457,22458,22459,22462,22463],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[840,22460,22461],{},"参数名就是定义的对象属性","，",[840,22464,22465],{},"属性后面的值为有参构造函数的形参",[29,22467,22469],{"className":45,"code":22468,"language":47,"meta":35,"style":35},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[37,22470,22471],{"__ignoreMap":35},[51,22472,22473,22475,22477,22479,22482,22484,22487,22489,22492,22494,22497,22499,22502,22504],{"class":53,"line":54},[51,22474,20008],{"class":68},[51,22476,73],{"class":72},[51,22478,65],{"class":64},[51,22480,22481],{"class":72}," a.",[51,22483,65],{"class":64},[51,22485,22486],{"class":72}," b,",[51,22488,65],{"class":64},[51,22490,22491],{"class":72}," b):",[51,22493,22261],{"class":68},[51,22495,22496],{"class":72},"(a),",[51,22498,22267],{"class":68},[51,22500,22501],{"class":72},"(c),",[51,22503,22273],{"class":68},[51,22505,22506],{"class":72},"(b) {}\n",[1233,22508,22510],{"id":22509},"_827类对象作为类成员","8.2.7类对象作为类成员",[40,22512,22513],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[40,22515,15595],{},[29,22517,22519],{"className":45,"code":22518,"language":47,"meta":35,"style":35},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[37,22520,22521,22526,22531,22535,22540,22544],{"__ignoreMap":35},[51,22522,22523],{"class":53,"line":54},[51,22524,22525],{"class":72},"A{};\n",[51,22527,22528],{"class":53,"line":61},[51,22529,22530],{"class":72},"B\n",[51,22532,22533],{"class":53,"line":93},[51,22534,96],{"class":72},[51,22536,22537],{"class":53,"line":99},[51,22538,22539],{"class":72},"    A a;\n",[51,22541,22542],{"class":53,"line":120},[51,22543,132],{"class":72},[51,22545,22546],{"class":53,"line":129},[51,22547,22548],{"class":57},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[40,22550,22551],{},"案例",[29,22553,22555],{"className":45,"code":22554,"language":47,"meta":35,"style":35},"\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",[37,22556,22557,22562,22569,22573,22578,22583,22597,22601,22611,22622,22626,22633,22637,22650,22654,22659,22664,22668,22674,22678,22682,22686,22717,22721,22732,22736,22742,22746,22759,22763,22767,22771,22776,22781,22785,22793,22797,22814,22833,22837,22845,22849,22855],{"__ignoreMap":35},[51,22558,22559],{"class":53,"line":54},[51,22560,22561],{"class":57},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[51,22563,22564,22566],{"class":53,"line":61},[51,22565,15656],{"class":64},[51,22567,22568],{"class":68}," Phone\n",[51,22570,22571],{"class":53,"line":93},[51,22572,96],{"class":72},[51,22574,22575],{"class":53,"line":99},[51,22576,22577],{"class":72},"public：\n",[51,22579,22580],{"class":53,"line":120},[51,22581,22582],{"class":57},"    \u002F\u002F 赋值(构造函数)\n",[51,22584,22585,22588,22590,22592,22595],{"class":53,"line":129},[51,22586,22587],{"class":68},"    Phone",[51,22589,73],{"class":72},[51,22591,15879],{"class":68},[51,22593,22594],{"class":78}," pName",[51,22596,90],{"class":72},[51,22598,22599],{"class":53,"line":206},[51,22600,3110],{"class":72},[51,22602,22603,22606,22608],{"class":53,"line":212},[51,22604,22605],{"class":72},"        m_pName",[51,22607,108],{"class":64},[51,22609,22610],{"class":72},"pName;\n",[51,22612,22613,22615,22617,22620],{"class":53,"line":227},[51,22614,4528],{"class":72},[51,22616,218],{"class":64},[51,22618,22619],{"class":282},"\"Phone的构造函数调用\"",[51,22621,179],{"class":72},[51,22623,22624],{"class":53,"line":370},[51,22625,3267],{"class":72},[51,22627,22628,22631],{"class":53,"line":387},[51,22629,22630],{"class":68},"    ~Phone",[51,22632,154],{"class":72},[51,22634,22635],{"class":53,"line":404},[51,22636,3110],{"class":72},[51,22638,22639,22641,22643,22646,22648],{"class":53,"line":415},[51,22640,4528],{"class":72},[51,22642,218],{"class":64},[51,22644,22645],{"class":282},"\"Phone析构函数调用\"",[51,22647,218],{"class":64},[51,22649,288],{"class":72},[51,22651,22652],{"class":53,"line":420},[51,22653,3267],{"class":72},[51,22655,22656],{"class":53,"line":429},[51,22657,22658],{"class":57},"    \u002F\u002F\n",[51,22660,22661],{"class":53,"line":434},[51,22662,22663],{"class":72},"    string m_PName;\n",[51,22665,22666],{"class":53,"line":448},[51,22667,5072],{"class":72},[51,22669,22670,22672],{"class":53,"line":462},[51,22671,15656],{"class":64},[51,22673,16133],{"class":68},[51,22675,22676],{"class":53,"line":470},[51,22677,96],{"class":72},[51,22679,22680],{"class":53,"line":2783},[51,22681,15678],{"class":64},[51,22683,22684],{"class":53,"line":2788},[51,22685,17956],{"class":57},[51,22687,22688,22690,22692,22694,22696,22698,22700,22703,22706,22708,22711,22714],{"class":53,"line":2817},[51,22689,19481],{"class":68},[51,22691,73],{"class":72},[51,22693,15879],{"class":68},[51,22695,15882],{"class":78},[51,22697,82],{"class":72},[51,22699,15879],{"class":68},[51,22701,22702],{"class":78}," pname",[51,22704,22705],{"class":72},"):",[51,22707,15972],{"class":68},[51,22709,22710],{"class":72},"(name),m_phone.",[51,22712,22713],{"class":68},"m_PName",[51,22715,22716],{"class":72},"(pname) \n",[51,22718,22719],{"class":53,"line":2822},[51,22720,3110],{"class":72},[51,22722,22723,22725,22727,22730],{"class":53,"line":2839},[51,22724,4528],{"class":72},[51,22726,218],{"class":64},[51,22728,22729],{"class":282},"\"Person的构造函数调用\"",[51,22731,179],{"class":72},[51,22733,22734],{"class":53,"line":2844},[51,22735,3267],{"class":72},[51,22737,22738,22740],{"class":53,"line":2849},[51,22739,19514],{"class":68},[51,22741,154],{"class":72},[51,22743,22744],{"class":53,"line":2854},[51,22745,3110],{"class":72},[51,22747,22748,22750,22752,22755,22757],{"class":53,"line":2868},[51,22749,4528],{"class":72},[51,22751,218],{"class":64},[51,22753,22754],{"class":282},"\"Person析构函数调用\"",[51,22756,218],{"class":64},[51,22758,288],{"class":72},[51,22760,22761],{"class":53,"line":2873},[51,22762,3267],{"class":72},[51,22764,22765],{"class":53,"line":3657},[51,22766,8742],{"class":57},[51,22768,22769],{"class":53,"line":3671},[51,22770,15854],{"class":72},[51,22772,22773],{"class":53,"line":3679},[51,22774,22775],{"class":57},"    \u002F\u002F手机\n",[51,22777,22778],{"class":53,"line":3684},[51,22779,22780],{"class":72},"    Phone m_Phone;\n",[51,22782,22783],{"class":53,"line":3690},[51,22784,5072],{"class":72},[51,22786,22787,22789,22791],{"class":53,"line":3696},[51,22788,252],{"class":64},[51,22790,493],{"class":68},[51,22792,154],{"class":72},[51,22794,22795],{"class":53,"line":3701},[51,22796,96],{"class":72},[51,22798,22799,22801,22803,22805,22807,22809,22812],{"class":53,"line":8910},[51,22800,20393],{"class":72},[51,22802,40],{"class":68},[51,22804,73],{"class":72},[51,22806,8878],{"class":282},[51,22808,82],{"class":72},[51,22810,22811],{"class":282},"\"安卓\"",[51,22813,615],{"class":72},[51,22815,22816,22818,22820,22823,22825,22828,22830],{"class":53,"line":8934},[51,22817,215],{"class":72},[51,22819,218],{"class":64},[51,22821,22822],{"class":72},"p.Name",[51,22824,218],{"class":64},[51,22826,22827],{"class":282},"\"拿着：\"",[51,22829,218],{"class":64},[51,22831,22832],{"class":72},"p.m_phone.m_PName;\n",[51,22834,22835],{"class":53,"line":8939},[51,22836,132],{"class":72},[51,22838,22839,22841,22843],{"class":53,"line":8945},[51,22840,65],{"class":64},[51,22842,151],{"class":68},[51,22844,154],{"class":72},[51,22846,22847],{"class":53,"line":8972},[51,22848,96],{"class":72},[51,22850,22851,22853],{"class":53,"line":8977},[51,22852,538],{"class":68},[51,22854,541],{"class":72},[51,22856,22857],{"class":53,"line":8983},[51,22858,132],{"class":72},[40,22860,9987],{},[29,22862,22864],{"className":45,"code":22863,"language":47,"meta":35,"style":35},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[37,22865,22866,22871],{"__ignoreMap":35},[51,22867,22868],{"class":53,"line":54},[51,22869,22870],{"class":57},"    \u002F\u002F不需要写这个：\n",[51,22872,22873],{"class":53,"line":61},[51,22874,22875],{"class":57},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[40,22877,22878],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[29,22880,22882],{"className":45,"code":22881,"language":47,"meta":35,"style":35},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[37,22883,22884],{"__ignoreMap":35},[51,22885,22886,22888,22891,22893,22896,22899],{"class":53,"line":54},[51,22887,20008],{"class":68},[51,22889,22890],{"class":72},"(string name.string pname):",[51,22892,15972],{"class":68},[51,22894,22895],{"class":72},"(name),",[51,22897,22898],{"class":68},"m_phone",[51,22900,22901],{"class":72},"(pname) {}\n",[40,22903,22904,22905,108,22908],{},"采用的是隐式转换法，实际为如下：\n",[37,22906,22907],{},"m_phone(pname)",[37,22909,22910],{},"Phone m_phone=pname",[40,22912,22913,22916],{},[840,22914,22915],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[40,22918,22919],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[1233,22921,22923],{"id":22922},"_828静态对象","8.2.8静态对象",[40,22925,22926],{},"静态对象在成员对象前static，称为静态对象",[40,22928,22929],{},"静态对象分为两类：",[19,22931,22932],{},[22,22933,22934],{},"静态成员变量",[1000,22936,22937,22940,22943],{},[22,22938,22939],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[22,22941,22942],{},"②在编译阶段分配内存",[22,22944,22945],{},"③类内声明，类外初始化",[19,22947,22948],{"start":61},[22,22949,22950],{},"静态成员函数",[1000,22952,22953,22956],{},[22,22954,22955],{},"①所有对象共享同一个函数",[22,22957,22958],{},"②静态成员函数只能访问静态成员变量",[22960,22961,22963],"h4",{"id":22962},"_8281静态成员变量","8.2.8.1静态成员变量",[29,22965,22967],{"className":45,"code":22966,"language":47,"meta":35,"style":35},"#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",[37,22968,22969,22975,22985,22991,22995,22999,23004,23009,23014,23022,23026,23030,23034,23042,23046,23050,23055,23068,23072,23080,23084,23090],{"__ignoreMap":35},[51,22970,22971,22973],{"class":53,"line":54},[51,22972,1026],{"class":64},[51,22974,1029],{"class":282},[51,22976,22977,22979,22981,22983],{"class":53,"line":61},[51,22978,1034],{"class":64},[51,22980,1037],{"class":64},[51,22982,1040],{"class":68},[51,22984,179],{"class":72},[51,22986,22987,22989],{"class":53,"line":93},[51,22988,15656],{"class":64},[51,22990,16133],{"class":68},[51,22992,22993],{"class":53,"line":99},[51,22994,96],{"class":72},[51,22996,22997],{"class":53,"line":120},[51,22998,15678],{"class":64},[51,23000,23001],{"class":53,"line":129},[51,23002,23003],{"class":57},"    \u002F\u002F非静态成员变量\n",[51,23005,23006],{"class":53,"line":206},[51,23007,23008],{"class":57},"    \u002F\u002F int m_A;\n",[51,23010,23011],{"class":53,"line":212},[51,23012,23013],{"class":57},"    \u002F\u002F定义静态成员变量\n",[51,23015,23016,23018,23020],{"class":53,"line":227},[51,23017,11982],{"class":64},[51,23019,3462],{"class":64},[51,23021,22354],{"class":72},[51,23023,23024],{"class":53,"line":370},[51,23025,3480],{"emptyLinePlaceholder":1192},[51,23027,23028],{"class":53,"line":387},[51,23029,3480],{"emptyLinePlaceholder":1192},[51,23031,23032],{"class":53,"line":404},[51,23033,5072],{"class":72},[51,23035,23036,23038,23040],{"class":53,"line":415},[51,23037,252],{"class":64},[51,23039,493],{"class":68},[51,23041,154],{"class":72},[51,23043,23044],{"class":53,"line":420},[51,23045,96],{"class":72},[51,23047,23048],{"class":53,"line":429},[51,23049,16275],{"class":72},[51,23051,23052],{"class":53,"line":434},[51,23053,23054],{"class":57},"    \u002F\u002F输出类成员变量这块内存\n",[51,23056,23057,23059,23061,23064,23066],{"class":53,"line":448},[51,23058,215],{"class":72},[51,23060,218],{"class":64},[51,23062,23063],{"class":72},"p.m_A",[51,23065,218],{"class":64},[51,23067,288],{"class":72},[51,23069,23070],{"class":53,"line":462},[51,23071,132],{"class":72},[51,23073,23074,23076,23078],{"class":53,"line":470},[51,23075,65],{"class":64},[51,23077,151],{"class":68},[51,23079,154],{"class":72},[51,23081,23082],{"class":53,"line":2783},[51,23083,96],{"class":72},[51,23085,23086,23088],{"class":53,"line":2788},[51,23087,538],{"class":68},[51,23089,154],{"class":72},[51,23091,23092],{"class":53,"line":2817},[51,23093,132],{"class":72},[40,23095,23096],{},"此时输出是报错的：无法解析外部命令",[40,23098,23099],{},"解决这一问题：必须用到类内声明，类外初始化操作",[29,23101,23103],{"className":45,"code":23102,"language":47,"meta":35,"style":35},"#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",[37,23104,23105,23111,23121,23127,23131,23135,23140,23148,23152,23157,23172,23180,23184,23188,23193,23198,23210,23215,23226,23231,23236,23249,23253,23261,23265,23271],{"__ignoreMap":35},[51,23106,23107,23109],{"class":53,"line":54},[51,23108,1026],{"class":64},[51,23110,1029],{"class":282},[51,23112,23113,23115,23117,23119],{"class":53,"line":61},[51,23114,1034],{"class":64},[51,23116,1037],{"class":64},[51,23118,1040],{"class":68},[51,23120,179],{"class":72},[51,23122,23123,23125],{"class":53,"line":93},[51,23124,15656],{"class":64},[51,23126,16133],{"class":68},[51,23128,23129],{"class":53,"line":99},[51,23130,96],{"class":72},[51,23132,23133],{"class":53,"line":120},[51,23134,15678],{"class":64},[51,23136,23137],{"class":53,"line":129},[51,23138,23139],{"class":57},"    \u002F\u002F类内声明\n",[51,23141,23142,23144,23146],{"class":53,"line":206},[51,23143,11982],{"class":64},[51,23145,3462],{"class":64},[51,23147,22354],{"class":72},[51,23149,23150],{"class":53,"line":212},[51,23151,5072],{"class":72},[51,23153,23154],{"class":53,"line":227},[51,23155,23156],{"class":57},"\u002F\u002F类外初始化\n",[51,23158,23159,23161,23163,23166,23168,23170],{"class":53,"line":370},[51,23160,65],{"class":64},[51,23162,16531],{"class":68},[51,23164,23165],{"class":72},"::m_A",[51,23167,108],{"class":64},[51,23169,443],{"class":175},[51,23171,179],{"class":72},[51,23173,23174,23176,23178],{"class":53,"line":387},[51,23175,252],{"class":64},[51,23177,493],{"class":68},[51,23179,154],{"class":72},[51,23181,23182],{"class":53,"line":404},[51,23183,96],{"class":72},[51,23185,23186],{"class":53,"line":415},[51,23187,16275],{"class":72},[51,23189,23190],{"class":53,"line":420},[51,23191,23192],{"class":57},"    \u002F\u002F访问变量的原内存空间\n",[51,23194,23195],{"class":53,"line":429},[51,23196,23197],{"class":57},"    \u002F\u002F100\n",[51,23199,23200,23202,23204,23206,23208],{"class":53,"line":434},[51,23201,215],{"class":72},[51,23203,218],{"class":64},[51,23205,23063],{"class":72},[51,23207,218],{"class":64},[51,23209,288],{"class":72},[51,23211,23212],{"class":53,"line":448},[51,23213,23214],{"class":72},"    Person p2;\n",[51,23216,23217,23220,23222,23224],{"class":53,"line":462},[51,23218,23219],{"class":72},"    p2.m_A",[51,23221,108],{"class":64},[51,23223,2812],{"class":175},[51,23225,179],{"class":72},[51,23227,23228],{"class":53,"line":470},[51,23229,23230],{"class":57},"    \u002F\u002F继续访问这片空间\n",[51,23232,23233],{"class":53,"line":2783},[51,23234,23235],{"class":57},"    \u002F\u002F200\n",[51,23237,23238,23240,23242,23245,23247],{"class":53,"line":2788},[51,23239,215],{"class":72},[51,23241,218],{"class":64},[51,23243,23244],{"class":72},"p2.m_A",[51,23246,218],{"class":64},[51,23248,288],{"class":72},[51,23250,23251],{"class":53,"line":2817},[51,23252,132],{"class":72},[51,23254,23255,23257,23259],{"class":53,"line":2822},[51,23256,65],{"class":64},[51,23258,151],{"class":68},[51,23260,154],{"class":72},[51,23262,23263],{"class":53,"line":2839},[51,23264,96],{"class":72},[51,23266,23267,23269],{"class":53,"line":2844},[51,23268,538],{"class":68},[51,23270,541],{"class":72},[51,23272,23273],{"class":53,"line":2849},[51,23274,132],{"class":72},[40,23276,23277],{},[840,23278,23279],{},"静态变量的访问",[29,23281,23283],{"className":45,"code":23282,"language":47,"meta":35,"style":35},"#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",[37,23284,23285,23291,23301,23307,23311,23315,23319,23327,23331,23336,23344,23348,23352,23366,23381,23389,23393,23398,23403,23408,23413,23425,23430,23435,23449,23466,23470,23478,23482,23488],{"__ignoreMap":35},[51,23286,23287,23289],{"class":53,"line":54},[51,23288,1026],{"class":64},[51,23290,1029],{"class":282},[51,23292,23293,23295,23297,23299],{"class":53,"line":61},[51,23294,1034],{"class":64},[51,23296,1037],{"class":64},[51,23298,1040],{"class":68},[51,23300,179],{"class":72},[51,23302,23303,23305],{"class":53,"line":93},[51,23304,15656],{"class":64},[51,23306,16133],{"class":68},[51,23308,23309],{"class":53,"line":99},[51,23310,96],{"class":72},[51,23312,23313],{"class":53,"line":120},[51,23314,15678],{"class":64},[51,23316,23317],{"class":53,"line":129},[51,23318,23139],{"class":57},[51,23320,23321,23323,23325],{"class":53,"line":206},[51,23322,11982],{"class":64},[51,23324,3462],{"class":64},[51,23326,22354],{"class":72},[51,23328,23329],{"class":53,"line":212},[51,23330,16184],{"class":64},[51,23332,23333],{"class":53,"line":227},[51,23334,23335],{"class":57},"    \u002F\u002F静态成员变量也是有访问权限的\n",[51,23337,23338,23340,23342],{"class":53,"line":370},[51,23339,11982],{"class":64},[51,23341,3462],{"class":64},[51,23343,22361],{"class":72},[51,23345,23346],{"class":53,"line":387},[51,23347,5072],{"class":72},[51,23349,23350],{"class":53,"line":404},[51,23351,23156],{"class":57},[51,23353,23354,23356,23358,23360,23362,23364],{"class":53,"line":415},[51,23355,65],{"class":64},[51,23357,16531],{"class":68},[51,23359,23165],{"class":72},[51,23361,108],{"class":64},[51,23363,443],{"class":175},[51,23365,179],{"class":72},[51,23367,23368,23370,23372,23375,23377,23379],{"class":53,"line":420},[51,23369,65],{"class":64},[51,23371,16531],{"class":68},[51,23373,23374],{"class":72},"::m_B",[51,23376,108],{"class":64},[51,23378,457],{"class":175},[51,23380,179],{"class":72},[51,23382,23383,23385,23387],{"class":53,"line":429},[51,23384,252],{"class":64},[51,23386,562],{"class":68},[51,23388,154],{"class":72},[51,23390,23391],{"class":53,"line":434},[51,23392,96],{"class":72},[51,23394,23395],{"class":53,"line":448},[51,23396,23397],{"class":57},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[51,23399,23400],{"class":53,"line":462},[51,23401,23402],{"class":57},"    \u002F\u002F静态成员变量有两种访问方式：\n",[51,23404,23405],{"class":53,"line":470},[51,23406,23407],{"class":57},"    \u002F\u002F1.通过对象进行访问\n",[51,23409,23410],{"class":53,"line":2783},[51,23411,23412],{"class":72},"    Person p;  \n",[51,23414,23415,23417,23419,23421,23423],{"class":53,"line":2788},[51,23416,215],{"class":72},[51,23418,218],{"class":64},[51,23420,23063],{"class":72},[51,23422,218],{"class":64},[51,23424,288],{"class":72},[51,23426,23427],{"class":53,"line":2817},[51,23428,23429],{"class":57},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[51,23431,23432],{"class":53,"line":2822},[51,23433,23434],{"class":57},"    \u002F\u002F2.通过类名进行访问\n",[51,23436,23437,23439,23441,23443,23445,23447],{"class":53,"line":2839},[51,23438,215],{"class":72},[51,23440,218],{"class":64},[51,23442,20008],{"class":68},[51,23444,23165],{"class":72},[51,23446,218],{"class":64},[51,23448,288],{"class":72},[51,23450,23451,23453,23455,23457,23459,23461,23463],{"class":53,"line":2844},[51,23452,215],{"class":72},[51,23454,218],{"class":64},[51,23456,20008],{"class":68},[51,23458,23374],{"class":72},[51,23460,218],{"class":64},[51,23462,709],{"class":72},[51,23464,23465],{"class":57}," \u002F\u002F没有访问权限，报错\n",[51,23467,23468],{"class":53,"line":2849},[51,23469,132],{"class":72},[51,23471,23472,23474,23476],{"class":53,"line":2854},[51,23473,65],{"class":64},[51,23475,151],{"class":68},[51,23477,154],{"class":72},[51,23479,23480],{"class":53,"line":2868},[51,23481,96],{"class":72},[51,23483,23484,23486],{"class":53,"line":2873},[51,23485,607],{"class":68},[51,23487,541],{"class":72},[51,23489,23490],{"class":53,"line":3657},[51,23491,132],{"class":72},[22960,23493,23495],{"id":23494},"_8282静态成员函数","8.2.8.2静态成员函数",[40,23497,23498],{},"1.静态成员函数定义与访问",[29,23500,23502],{"className":45,"code":23501,"language":47,"meta":35,"style":35},"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",[37,23503,23504,23510,23514,23518,23523,23534,23538,23552,23556,23560,23568,23572,23577,23582,23586,23594,23599,23609],{"__ignoreMap":35},[51,23505,23506,23508],{"class":53,"line":54},[51,23507,15656],{"class":64},[51,23509,16133],{"class":68},[51,23511,23512],{"class":53,"line":61},[51,23513,96],{"class":72},[51,23515,23516],{"class":53,"line":93},[51,23517,15678],{"class":64},[51,23519,23520],{"class":53,"line":99},[51,23521,23522],{"class":57},"    \u002F\u002F在公共权限下定义静态成员函数\n",[51,23524,23525,23527,23530,23532],{"class":53,"line":120},[51,23526,11982],{"class":64},[51,23528,23529],{"class":64}," void",[51,23531,12347],{"class":68},[51,23533,154],{"class":72},[51,23535,23536],{"class":53,"line":129},[51,23537,3110],{"class":72},[51,23539,23540,23543,23545,23548,23550],{"class":53,"line":206},[51,23541,23542],{"class":72},"        coout",[51,23544,218],{"class":64},[51,23546,23547],{"class":282},"\"静态成员函数的调用\"",[51,23549,218],{"class":64},[51,23551,288],{"class":72},[51,23553,23554],{"class":53,"line":212},[51,23555,3267],{"class":72},[51,23557,23558],{"class":53,"line":227},[51,23559,5072],{"class":72},[51,23561,23562,23564,23566],{"class":53,"line":370},[51,23563,252],{"class":64},[51,23565,493],{"class":68},[51,23567,154],{"class":72},[51,23569,23570],{"class":53,"line":387},[51,23571,96],{"class":72},[51,23573,23574],{"class":53,"line":404},[51,23575,23576],{"class":57},"    \u002F\u002F静态成员函数的调用方式:\n",[51,23578,23579],{"class":53,"line":415},[51,23580,23581],{"class":57},"    \u002F\u002F1.通过对象访问\n",[51,23583,23584],{"class":53,"line":420},[51,23585,16275],{"class":72},[51,23587,23588,23590,23592],{"class":53,"line":429},[51,23589,16828],{"class":72},[51,23591,12513],{"class":68},[51,23593,541],{"class":72},[51,23595,23596],{"class":53,"line":434},[51,23597,23598],{"class":57},"    \u002F\u002F2.通过类名访问\n",[51,23600,23601,23603,23605,23607],{"class":53,"line":448},[51,23602,19481],{"class":68},[51,23604,18694],{"class":72},[51,23606,12513],{"class":68},[51,23608,541],{"class":72},[51,23610,23611],{"class":53,"line":462},[51,23612,132],{"class":72},[19,23614,23615],{"start":61},[22,23616,23617],{},"静态成员函数只能访问静态成员变量",[29,23619,23621],{"className":45,"code":23620,"language":47,"meta":35,"style":35},"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",[37,23622,23623,23629,23633,23637,23641,23651,23655,23669,23674,23686,23690,23701,23711,23715,23719,23723,23733,23737,23750,23754,23758,23762,23766,23780,23788,23792,23796,23800,23804,23812,23816,23826,23831,23835,23843,23847,23853],{"__ignoreMap":35},[51,23624,23625,23627],{"class":53,"line":54},[51,23626,15656],{"class":64},[51,23628,16133],{"class":68},[51,23630,23631],{"class":53,"line":61},[51,23632,96],{"class":72},[51,23634,23635],{"class":53,"line":93},[51,23636,15678],{"class":64},[51,23638,23639],{"class":53,"line":99},[51,23640,23522],{"class":57},[51,23642,23643,23645,23647,23649],{"class":53,"line":120},[51,23644,11982],{"class":64},[51,23646,23529],{"class":64},[51,23648,12347],{"class":68},[51,23650,154],{"class":72},[51,23652,23653],{"class":53,"line":129},[51,23654,3110],{"class":72},[51,23656,23657,23660,23662,23664,23666],{"class":53,"line":206},[51,23658,23659],{"class":72},"        m_A",[51,23661,108],{"class":64},[51,23663,612],{"class":175},[51,23665,409],{"class":72},[51,23667,23668],{"class":57}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[51,23670,23671],{"class":53,"line":212},[51,23672,23673],{"class":57},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[51,23675,23676,23678,23680,23682,23684],{"class":53,"line":227},[51,23677,23542],{"class":72},[51,23679,218],{"class":64},[51,23681,23547],{"class":282},[51,23683,218],{"class":64},[51,23685,288],{"class":72},[51,23687,23688],{"class":53,"line":370},[51,23689,3267],{"class":72},[51,23691,23692,23694,23696,23698],{"class":53,"line":387},[51,23693,11982],{"class":64},[51,23695,3462],{"class":64},[51,23697,16410],{"class":72},[51,23699,23700],{"class":57}," \u002F\u002F静态成员变量\n",[51,23702,23703,23705,23708],{"class":53,"line":404},[51,23704,102],{"class":64},[51,23706,23707],{"class":72}," m_B;",[51,23709,23710],{"class":57}," \u002F\u002F非静态成员变量\n",[51,23712,23713],{"class":53,"line":415},[51,23714,3480],{"emptyLinePlaceholder":1192},[51,23716,23717],{"class":53,"line":420},[51,23718,16184],{"class":64},[51,23720,23721],{"class":53,"line":429},[51,23722,23335],{"class":57},[51,23724,23725,23727,23729,23731],{"class":53,"line":434},[51,23726,11982],{"class":64},[51,23728,23529],{"class":64},[51,23730,14580],{"class":68},[51,23732,154],{"class":72},[51,23734,23735],{"class":53,"line":448},[51,23736,3110],{"class":72},[51,23738,23739,23741,23743,23746,23748],{"class":53,"line":462},[51,23740,4528],{"class":72},[51,23742,218],{"class":64},[51,23744,23745],{"class":282},"\"这是私有权限下的静态函数调用\"",[51,23747,218],{"class":64},[51,23749,288],{"class":72},[51,23751,23752],{"class":53,"line":470},[51,23753,3267],{"class":72},[51,23755,23756],{"class":53,"line":2783},[51,23757,3480],{"emptyLinePlaceholder":1192},[51,23759,23760],{"class":53,"line":2788},[51,23761,3480],{"emptyLinePlaceholder":1192},[51,23763,23764],{"class":53,"line":2817},[51,23765,5072],{"class":72},[51,23767,23768,23770,23772,23774,23776,23778],{"class":53,"line":2822},[51,23769,65],{"class":64},[51,23771,16531],{"class":68},[51,23773,23165],{"class":72},[51,23775,108],{"class":64},[51,23777,176],{"class":175},[51,23779,179],{"class":72},[51,23781,23782,23784,23786],{"class":53,"line":2839},[51,23783,252],{"class":64},[51,23785,493],{"class":68},[51,23787,154],{"class":72},[51,23789,23790],{"class":53,"line":2844},[51,23791,96],{"class":72},[51,23793,23794],{"class":53,"line":2849},[51,23795,23576],{"class":57},[51,23797,23798],{"class":53,"line":2854},[51,23799,23581],{"class":57},[51,23801,23802],{"class":53,"line":2868},[51,23803,16275],{"class":72},[51,23805,23806,23808,23810],{"class":53,"line":2873},[51,23807,16828],{"class":72},[51,23809,12513],{"class":68},[51,23811,541],{"class":72},[51,23813,23814],{"class":53,"line":3657},[51,23815,23598],{"class":57},[51,23817,23818,23820,23822,23824],{"class":53,"line":3671},[51,23819,19481],{"class":68},[51,23821,18694],{"class":72},[51,23823,12513],{"class":68},[51,23825,541],{"class":72},[51,23827,23828],{"class":53,"line":3679},[51,23829,23830],{"class":57},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[51,23832,23833],{"class":53,"line":3684},[51,23834,132],{"class":72},[51,23836,23837,23839,23841],{"class":53,"line":3690},[51,23838,65],{"class":64},[51,23840,151],{"class":68},[51,23842,154],{"class":72},[51,23844,23845],{"class":53,"line":3696},[51,23846,96],{"class":72},[51,23848,23849,23851],{"class":53,"line":3701},[51,23850,538],{"class":68},[51,23852,541],{"class":72},[51,23854,23855],{"class":53,"line":8910},[51,23856,132],{"class":72},[1233,23858,23860],{"id":23859},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22960,23862,23864],{"id":23863},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[40,23866,23867],{},"在c++中，类内的成员变量和成员函数分开存储",[40,23869,23870],{},"只有非静态成员变量才属于类的对象上",[23872,23873,23875],"h5",{"id":23874},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[29,23877,23879],{"className":45,"code":23878,"language":47,"meta":35,"style":35},"#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",[37,23880,23881,23888,23898,23904,23908,23912,23916,23924,23928,23932,23955,23959,23967,23971,23977],{"__ignoreMap":35},[51,23882,23883,23885],{"class":53,"line":54},[51,23884,1026],{"class":64},[51,23886,23887],{"class":282},"\u003Ciostraem>\n",[51,23889,23890,23892,23894,23896],{"class":53,"line":61},[51,23891,1034],{"class":64},[51,23893,1037],{"class":64},[51,23895,1040],{"class":68},[51,23897,179],{"class":72},[51,23899,23900,23902],{"class":53,"line":93},[51,23901,15656],{"class":64},[51,23903,16133],{"class":68},[51,23905,23906],{"class":53,"line":99},[51,23907,96],{"class":72},[51,23909,23910],{"class":53,"line":120},[51,23911,3480],{"emptyLinePlaceholder":1192},[51,23913,23914],{"class":53,"line":129},[51,23915,5072],{"class":72},[51,23917,23918,23920,23922],{"class":53,"line":206},[51,23919,252],{"class":64},[51,23921,493],{"class":68},[51,23923,154],{"class":72},[51,23925,23926],{"class":53,"line":212},[51,23927,96],{"class":72},[51,23929,23930],{"class":53,"line":227},[51,23931,16275],{"class":72},[51,23933,23934,23936,23938,23941,23943,23946,23948,23950,23952],{"class":53,"line":370},[51,23935,215],{"class":72},[51,23937,218],{"class":64},[51,23939,23940],{"class":282},"\"size of p=\"",[51,23942,218],{"class":64},[51,23944,23945],{"class":68},"sizeoif",[51,23947,7501],{"class":72},[51,23949,218],{"class":64},[51,23951,709],{"class":72},[51,23953,23954],{"class":57}," \u002F\u002F查看这个空类的占用的内存空间\n",[51,23956,23957],{"class":53,"line":387},[51,23958,132],{"class":72},[51,23960,23961,23963,23965],{"class":53,"line":404},[51,23962,65],{"class":64},[51,23964,151],{"class":68},[51,23966,154],{"class":72},[51,23968,23969],{"class":53,"line":415},[51,23970,96],{"class":72},[51,23972,23973,23975],{"class":53,"line":420},[51,23974,538],{"class":68},[51,23976,541],{"class":72},[51,23978,23979],{"class":53,"line":429},[51,23980,132],{"class":72},[40,23982,23983],{},"输出结果为：size of p=1",[40,23985,23986],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[40,23988,23989],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23872,23991,23993],{"id":23992},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[29,23995,23997],{"className":45,"code":23996,"language":47,"meta":35,"style":35},"#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",[37,23998,23999,24005,24015,24023,24027,24036,24040,24048,24052,24056,24075,24079,24083,24091,24095,24101],{"__ignoreMap":35},[51,24000,24001,24003],{"class":53,"line":54},[51,24002,1026],{"class":64},[51,24004,1029],{"class":282},[51,24006,24007,24009,24011,24013],{"class":53,"line":61},[51,24008,1034],{"class":64},[51,24010,1037],{"class":64},[51,24012,1040],{"class":68},[51,24014,179],{"class":72},[51,24016,24017,24019,24021],{"class":53,"line":93},[51,24018,15656],{"class":64},[51,24020,16531],{"class":68},[51,24022,3754],{"class":72},[51,24024,24025],{"class":53,"line":99},[51,24026,96],{"class":72},[51,24028,24029,24031,24033],{"class":53,"line":120},[51,24030,102],{"class":64},[51,24032,16410],{"class":72},[51,24034,24035],{"class":57},"\u002F\u002F非静态成员变量\n",[51,24037,24038],{"class":53,"line":129},[51,24039,5072],{"class":72},[51,24041,24042,24044,24046],{"class":53,"line":206},[51,24043,252],{"class":64},[51,24045,493],{"class":68},[51,24047,154],{"class":72},[51,24049,24050],{"class":53,"line":212},[51,24051,96],{"class":72},[51,24053,24054],{"class":53,"line":227},[51,24055,16275],{"class":72},[51,24057,24058,24060,24062,24064,24066,24068,24070,24072],{"class":53,"line":370},[51,24059,215],{"class":72},[51,24061,218],{"class":64},[51,24063,23940],{"class":282},[51,24065,2477],{"class":64},[51,24067,7501],{"class":72},[51,24069,218],{"class":64},[51,24071,709],{"class":72},[51,24073,24074],{"class":57}," \u002F\u002F查看不是空对象时占用多少内存\n",[51,24076,24077],{"class":53,"line":387},[51,24078,3480],{"emptyLinePlaceholder":1192},[51,24080,24081],{"class":53,"line":404},[51,24082,132],{"class":72},[51,24084,24085,24087,24089],{"class":53,"line":415},[51,24086,65],{"class":64},[51,24088,151],{"class":68},[51,24090,154],{"class":72},[51,24092,24093],{"class":53,"line":420},[51,24094,96],{"class":72},[51,24096,24097,24099],{"class":53,"line":429},[51,24098,538],{"class":68},[51,24100,541],{"class":72},[51,24102,24103],{"class":53,"line":434},[51,24104,132],{"class":72},[40,24106,24107],{},"输出结果：size of p=4",[40,24109,24110],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[19,24112,24113],{},[22,24114,24115],{},"如果加上非静态成员变量，Person类修改如下",[29,24117,24119],{"className":45,"code":24118,"language":47,"meta":35,"style":35},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[37,24120,24121,24127,24131,24137,24145,24149,24154],{"__ignoreMap":35},[51,24122,24123,24125],{"class":53,"line":54},[51,24124,15656],{"class":64},[51,24126,16133],{"class":68},[51,24128,24129],{"class":53,"line":61},[51,24130,96],{"class":72},[51,24132,24133,24135],{"class":53,"line":93},[51,24134,102],{"class":64},[51,24136,22354],{"class":72},[51,24138,24139,24141,24143],{"class":53,"line":99},[51,24140,11982],{"class":64},[51,24142,3462],{"class":64},[51,24144,22361],{"class":72},[51,24146,24147],{"class":53,"line":120},[51,24148,5072],{"class":72},[51,24150,24151],{"class":53,"line":129},[51,24152,24153],{"class":57},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[51,24155,24156,24158,24160,24162,24164,24166],{"class":53,"line":206},[51,24157,65],{"class":64},[51,24159,16531],{"class":68},[51,24161,23374],{"class":72},[51,24163,108],{"class":64},[51,24165,176],{"class":175},[51,24167,179],{"class":72},[40,24169,24170],{},"输出结果：4",[40,24172,24173],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[19,24175,24176],{"start":61},[22,24177,24178],{},"加上非静态成员函数",[29,24180,24182],{"className":45,"code":24181,"language":47,"meta":35,"style":35},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[37,24183,24184,24191,24195,24201,24209,24213,24217,24221],{"__ignoreMap":35},[51,24185,24186,24188],{"class":53,"line":54},[51,24187,15656],{"class":64},[51,24189,24190],{"class":68},"  Person\n",[51,24192,24193],{"class":53,"line":61},[51,24194,96],{"class":72},[51,24196,24197,24199],{"class":53,"line":93},[51,24198,102],{"class":64},[51,24200,22354],{"class":72},[51,24202,24203,24205,24207],{"class":53,"line":99},[51,24204,15871],{"class":64},[51,24206,12347],{"class":68},[51,24208,154],{"class":72},[51,24210,24211],{"class":53,"line":120},[51,24212,3110],{"class":72},[51,24214,24215],{"class":53,"line":129},[51,24216,3480],{"emptyLinePlaceholder":1192},[51,24218,24219],{"class":53,"line":206},[51,24220,3267],{"class":72},[51,24222,24223],{"class":53,"line":212},[51,24224,5072],{"class":72},[40,24226,24227],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[19,24229,24230],{"start":93},[22,24231,24232],{},"加上静态成员函数",[29,24234,24236],{"className":45,"code":24235,"language":47,"meta":35,"style":35},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[37,24237,24238,24244,24248,24254,24262,24266,24270,24274,24285,24289,24293,24297],{"__ignoreMap":35},[51,24239,24240,24242],{"class":53,"line":54},[51,24241,15656],{"class":64},[51,24243,24190],{"class":68},[51,24245,24246],{"class":53,"line":61},[51,24247,96],{"class":72},[51,24249,24250,24252],{"class":53,"line":93},[51,24251,102],{"class":64},[51,24253,22354],{"class":72},[51,24255,24256,24258,24260],{"class":53,"line":99},[51,24257,15871],{"class":64},[51,24259,12347],{"class":68},[51,24261,154],{"class":72},[51,24263,24264],{"class":53,"line":120},[51,24265,3110],{"class":72},[51,24267,24268],{"class":53,"line":129},[51,24269,3480],{"emptyLinePlaceholder":1192},[51,24271,24272],{"class":53,"line":206},[51,24273,3267],{"class":72},[51,24275,24276,24278,24280,24283],{"class":53,"line":212},[51,24277,11982],{"class":64},[51,24279,23529],{"class":64},[51,24281,24282],{"class":68}," func1",[51,24284,154],{"class":72},[51,24286,24287],{"class":53,"line":227},[51,24288,3110],{"class":72},[51,24290,24291],{"class":53,"line":370},[51,24292,3480],{"emptyLinePlaceholder":1192},[51,24294,24295],{"class":53,"line":387},[51,24296,3267],{"class":72},[51,24298,24299],{"class":53,"line":404},[51,24300,5072],{"class":72},[40,24302,24170],{},[40,24304,24305],{},"解释：静态成员函数也不属于类上",[1179,24307,8636],{},{"title":35,"searchDepth":61,"depth":61,"links":24309},[24310,24316],{"id":15607,"depth":61,"text":15608,"children":24311},[24312,24313,24314,24315],{"id":15611,"depth":93,"text":15612},{"id":16336,"depth":93,"text":16337},{"id":16508,"depth":93,"text":16509},{"id":16967,"depth":93,"text":16968},{"id":19339,"depth":61,"text":19340,"children":24317},[24318,24319,24320,24321,24322,24323,24324,24325,24326],{"id":19351,"depth":93,"text":19352},{"id":19644,"depth":93,"text":19645},{"id":20135,"depth":93,"text":20136},{"id":21232,"depth":93,"text":21233},{"id":21655,"depth":93,"text":21656},{"id":22134,"depth":93,"text":22135},{"id":22509,"depth":93,"text":22510},{"id":22922,"depth":93,"text":22923},{"id":23859,"depth":93,"text":23860},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15572,"description":24327},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24334,"title":47,"body":24335,"description":24339,"extension":1190,"meta":24340,"navigation":1192,"path":24342,"seo":24343,"stem":24344,"__hash__":24345},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24336,"toc":24337},[],{"title":35,"searchDepth":61,"depth":61,"links":24338},[],null,{"category":24341},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":47,"description":24339},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24347,"title":24348,"body":24349,"description":35,"extension":1190,"meta":24940,"navigation":1192,"path":24941,"seo":24942,"stem":24943,"__hash__":24944},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24350,"toc":24922},[24351,24354,24358,24361,24364,24367,24385,24390,24393,24396,24399,24402,24407,24410,24415,24418,24421,24425,24428,24431,24437,24440,24458,24462,24466,24469,24474,24477,24481,24484,24497,24500,24504,24507,24510,24513,24538,24541,24550,24561,24576,24608,24612,24619,24627,24631,24634,24637,24642,24646,24649,24652,24657,24660,24664,24667,24670,24675,24678,24682,24687,24691,24758,24762,24765,24768,24771,24774,24777,24783,24804,24807,24821,24830,24834,24837,24840,24845,24848,24853,24858,24861,24864,24869,24874,24877,24882,24887,24890,24895,24900,24903,24906,24911,24914,24919],[10,24352,24348],{"id":24353},"_1强化学习基本认识",[14,24355,24357],{"id":24356},"_11什么是强化学习","1.1.什么是强化学习",[40,24359,24360],{},"强化学习有两部分组成：智能体和环境；",[40,24362,24363],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[40,24365,24366],{},"强化学习与监督学习的区别:",[19,24368,24369,24372,24375,24378],{},[22,24370,24371],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[22,24373,24374],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[22,24376,24377],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[22,24379,24380,24381,24384],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[840,24382,24383],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[40,24386,24387],{},[2564,24388],{"alt":35,"src":24389},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[40,24391,24392],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[40,24394,24395],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[40,24397,24398],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[40,24400,24401],{},"获取奖励",[40,24403,24404],{},[2564,24405],{"alt":35,"src":24406},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[40,24408,24409],{},"强化学习可以分成标准强化学习和深度强化学习",[40,24411,24412],{},[2564,24413],{"alt":35,"src":24414},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[40,24416,24417],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[40,24419,24420],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24422,24424],{"id":24423},"_12强化学习应用场景","1.2.强化学习应用场景",[40,24426,24427],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[40,24429,24430],{},"具身智能中的应用",[40,24432,24433,24436],{},[840,24434,24435],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[40,24438,24439],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[40,24441,24442,24443,24446,24447,24450,24451,24454,24455],{},"机器人是",[840,24444,24445],{},"躯体","，深度学习是",[840,24448,24449],{},"神经元****网络","，VLA是",[840,24452,24453],{},"通用的行为逻辑","，而强化学习是",[840,24456,24457],{},"教练",[14,24459,24461],{"id":24460},"_13序列决策","1.3.序列决策",[1233,24463,24465],{"id":24464},"_131智能体与环境","1.3.1.智能体与环境",[40,24467,24468],{},"强化学习研究的问题是智能体agent与环境交互的问题",[40,24470,24471],{},[2564,24472],{"alt":35,"src":24473},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[40,24475,24476],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[1233,24478,24480],{"id":24479},"_132奖励","1.3.2.奖励",[40,24482,24483],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[40,24485,24486,24487,24496],{},"取某个策略的表现如何。强化学习的目的就是",[840,24488,24489,24490,24495],{},"最大化",[840,24491,24492],{},[840,24493,24494],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[40,24498,24499],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[1233,24501,24503],{"id":24502},"_133序列决策","1.3.3.序列决策",[40,24505,24506],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[40,24508,24509],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[40,24511,24512],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[40,24514,24515,24519,24520,24522,24523,24525,24526,24528,24529,14757,24532,14757,24535],{},[24516,24517,24518],"em",{},"Ht"," = ",[24516,24521,1842],{},"1*, a",[24516,24524,791],{},", r",[24516,24527,791],{},", . . . ,* ",[24516,24530,24531],{},"ot",[24516,24533,24534],{},", at ,",[24516,24536,24537],{},"rt",[40,24539,24540],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[40,24542,24543,24519,24546,2750,24548,1677],{},[24516,24544,24545],{},"st",[24516,24547,1311],{},[24516,24549,24518],{},[40,24551,24552,24553,24556,24557,24560],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[840,24554,24555],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[840,24558,24559],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[40,24562,24563,24564,24567,24568,24571,24572,24575],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[840,24565,24566],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[840,24569,24570],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24516,24573,24574],{},"S, A, T, R, Ω, O, γ",")。",[40,24577,24578,24579,24581,24582,24584,24585,73,24587,24590,24591,24593,24594,73,24597,24600,24601,24603,24604,24607],{},"其中 ",[24516,24580,1935],{}," 表示状态空间，为隐变量，",[24516,24583,1485],{}," 为动作空间，",[24516,24586,1959],{},[24516,24588,24589],{},"s ′ |s, a",") 为状态转移概率，",[24516,24592,1910],{}," 为奖励函数，",[24516,24595,24596],{},"Ω",[24516,24598,24599],{},"o|s, a",") 为观测概率，",[24516,24602,1836],{}," 为观测空间，",[24516,24605,24606],{},"γ"," 为折扣因子。",[14,24609,24611],{"id":24610},"_14动作空间","1.4.动作空间",[40,24613,24614,24615,24618],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[840,24616,24617],{},"动作空间"," ，动作空间分为:",[19,24620,24621,24624],{},[22,24622,24623],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[22,24625,24626],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24628,24630],{"id":24629},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[40,24632,24633],{},"由策略、价值函数、模型三部分组成",[40,24635,24636],{},"这三者组成马尔可夫决策过程",[40,24638,24639],{},[2564,24640],{"alt":35,"src":24641},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[1233,24643,24645],{"id":24644},"_151策略","1.5.1.策略",[40,24647,24648],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[40,24650,24651],{},"策略可分为两种：",[40,24653,24654],{},[2564,24655],{"alt":35,"src":24656},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[40,24658,24659],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[1233,24661,24663],{"id":24662},"_152价值函数","1.5.2.价值函数",[40,24665,24666],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[40,24668,24669],{},"价值函数中有一个折扣因子，类似于存款利息",[40,24671,24672],{},[2564,24673],{"alt":35,"src":24674},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[40,24676,24677],{},"进入某个状态采取的最优动作可以通过Q函数得到",[1233,24679,24681],{"id":24680},"_153模型","1.5.3.模型",[40,24683,24684],{},[2564,24685],{"alt":35,"src":24686},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24688,24690],{"id":24689},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1393,24692,24693,24704],{},[1396,24694,24695],{},[1399,24696,24697,24701],{},[1402,24698,24700],{"align":24699},"left","类型",[1402,24702,24703],{"align":24699},"特点",[1439,24705,24706,24716,24726,24736,24748],{},[1399,24707,24708,24713],{},[1444,24709,24710],{"align":24699},[840,24711,24712],{},"基于价值的智能体",[1444,24714,24715],{"align":24699},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1399,24717,24718,24723],{},[1444,24719,24720],{"align":24699},[840,24721,24722],{},"基于策略的智能体",[1444,24724,24725],{"align":24699},"直接学习策略，没有学习价值函数",[1399,24727,24728,24733],{},[1444,24729,24730],{"align":24699},[840,24731,24732],{},"演员-评论员智能体",[1444,24734,24735],{"align":24699},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1399,24737,24738,24743],{},[1444,24739,24740],{"align":24699},[840,24741,24742],{},"有模型强化学习智能体",[1444,24744,24745],{"align":24699},[2564,24746],{"alt":35,"src":24747},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1399,24749,24750,24755],{},[1444,24751,24752],{"align":24699},[840,24753,24754],{},"免模型强化学习智能体",[1444,24756,24757],{"align":24699},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24759,24761],{"id":24760},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[40,24763,24764],{},"学习和规划是序列决策的两个基本问题",[40,24766,24767],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[40,24769,24770],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[40,24772,24773],{},"强化学习用到的库：Gym",[40,24775,24776],{},"Gym可以检验强化学习算法的优劣",[40,24778,24779,24782],{},[840,24780,24781],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[29,24784,24788],{"className":24785,"code":24786,"language":24787,"meta":35,"style":35},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[37,24789,24790],{"__ignoreMap":35},[51,24791,24792,24795,24798,24801],{"class":53,"line":54},[51,24793,24794],{"class":68},"pip",[51,24796,24797],{"class":282}," install",[51,24799,24800],{"class":282}," gym==",[51,24802,24803],{"class":175},"0.25.2\n",[40,24805,24806],{},"显示图形界面需要",[29,24808,24810],{"className":24785,"code":24809,"language":24787,"meta":35,"style":35},"pip install pygame\n",[37,24811,24812],{"__ignoreMap":35},[51,24813,24814,24816,24818],{"class":53,"line":54},[51,24815,24794],{"class":68},[51,24817,24797],{"class":282},[51,24819,24820],{"class":282}," pygame\n",[40,24822,24823,24824],{},"有关Gym库的相关文档介绍：",[981,24825,24829],{"href":24826,"rel":24827},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24828],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24831,24833],{"id":24832},"_18一些补充基础概念","1.8.一些补充基础概念",[40,24835,24836],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[40,24838,24839],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[40,24841,24842],{},[2564,24843],{"alt":35,"src":24844},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[40,24846,24847],{},"折扣率需要自己来设定",[40,24849,24850],{},[2564,24851],{"alt":35,"src":24852},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[19,24854,24855],{},[22,24856,24857],{},"状态转移函数：",[40,24859,24860],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[40,24862,24863],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[40,24865,24866],{},[2564,24867],{"alt":35,"src":24868},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[19,24870,24871],{"start":61},[22,24872,24873],{},"动作价值函数：",[40,24875,24876],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[40,24878,24879],{},[2564,24880],{"alt":35,"src":24881},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[19,24883,24884],{"start":93},[22,24885,24886],{},"最优动作价值函数：",[40,24888,24889],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[40,24891,24892],{},[2564,24893],{"alt":35,"src":24894},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[19,24896,24897],{"start":99},[22,24898,24899],{},"状态价值函数:",[40,24901,24902],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[40,24904,24905],{},"它衡量的是“一个具体动作”的长期价值",[40,24907,24908],{},[2564,24909],{"alt":35,"src":24910},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[40,24912,24913],{},"几个价值函数之间的比较：",[40,24915,24916],{},[2564,24917],{"alt":35,"src":24918},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1179,24920,24921],{},"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":35,"searchDepth":61,"depth":61,"links":24923},[24924,24925,24926,24931,24932,24937,24938,24939],{"id":24356,"depth":61,"text":24357},{"id":24423,"depth":61,"text":24424},{"id":24460,"depth":61,"text":24461,"children":24927},[24928,24929,24930],{"id":24464,"depth":93,"text":24465},{"id":24479,"depth":93,"text":24480},{"id":24502,"depth":93,"text":24503},{"id":24610,"depth":61,"text":24611},{"id":24629,"depth":61,"text":24630,"children":24933},[24934,24935,24936],{"id":24644,"depth":93,"text":24645},{"id":24662,"depth":93,"text":24663},{"id":24680,"depth":93,"text":24681},{"id":24689,"depth":61,"text":24690},{"id":24760,"depth":61,"text":24761},{"id":24832,"depth":61,"text":24833},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24348,"description":35},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24946,"title":24947,"body":24948,"description":24955,"extension":1190,"meta":24966,"navigation":1192,"path":24967,"seo":24968,"stem":24969,"__hash__":24970},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24949,"toc":24964},[24950,24953,24956,24961],[10,24951,24947],{"id":24952},"_2马尔可夫决策过程",[40,24954,24955],{},"这是强化学习的基本框架",[40,24957,24958],{},[2564,24959],{"alt":35,"src":24960},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[40,24962,24963],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":35,"searchDepth":61,"depth":61,"links":24965},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24947,"description":24955},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24972,"title":24973,"body":24974,"description":35,"extension":1190,"meta":25090,"navigation":1192,"path":25091,"seo":25092,"stem":25093,"__hash__":25094},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24975,"toc":25085},[24976,24979,24983,24986,24991,24996,24999,25004,25007,25012,25015,25019,25024,25027,25032,25037,25042,25045,25049,25054,25057,25062,25067,25072,25077,25080],[10,24977,24973],{"id":24978},"_3动作价值函数",[14,24980,24982],{"id":24981},"_31dqn","3.1.DQN",[40,24984,24985],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[40,24987,24988],{},[2564,24989],{"alt":35,"src":24990},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[40,24992,24993],{},[2564,24994],{"alt":35,"src":24995},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[40,24997,24998],{},"DQN算法的描述：",[40,25000,25001],{},[2564,25002],{"alt":35,"src":25003},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[40,25005,25006],{},"这里的Dense指的是全连接层",[40,25008,25009],{},[2564,25010],{"alt":35,"src":25011},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[40,25013,25014],{},"当前观测的状态为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,25016,25018],{"id":25017},"_32dqn的举例","3.2.DQN的举例",[40,25020,25021],{},[2564,25022],{"alt":35,"src":25023},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[40,25025,25026],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[40,25028,25029],{},[2564,25030],{"alt":35,"src":25031},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[40,25033,25034],{},[2564,25035],{"alt":35,"src":25036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[40,25038,25039],{},[2564,25040],{"alt":35,"src":25041},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[40,25043,25044],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25046,25048],{"id":25047},"_33td算法","3.3.TD算法",[40,25050,25051],{},[2564,25052],{"alt":35,"src":25053},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[40,25055,25056],{},"强化学习TD算法公式的粗略解释：",[40,25058,25059],{},[2564,25060],{"alt":35,"src":25061},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[40,25063,25064],{},[2564,25065],{"alt":35,"src":25066},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[40,25068,25069],{},[2564,25070],{"alt":35,"src":25071},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[40,25073,25074],{},[2564,25075],{"alt":35,"src":25076},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[40,25078,25079],{},"TD算法总结：",[40,25081,25082],{},[2564,25083],{"alt":35,"src":25084},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":35,"searchDepth":61,"depth":61,"links":25086},[25087,25088,25089],{"id":24981,"depth":61,"text":24982},{"id":25017,"depth":61,"text":25018},{"id":25047,"depth":61,"text":25048},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24973,"description":35},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25096,"title":25097,"body":25098,"description":35,"extension":1190,"meta":25331,"navigation":1192,"path":25332,"seo":25333,"stem":25334,"__hash__":25335},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25099,"toc":25327},[25100,25103,25107,25110,25113,25118,25123,25126,25131,25136,25139,25144,25147,25152,25155,25160,25163,25168,25171,25176,25181,25184,25189,25192,25195,25200,25203,25208,25213,25217,25220,25223,25228,25233,25236,25241,25246,25249,25254,25257,25260,25265,25268,25273,25276,25281,25286,25289,25294,25299,25302,25307,25310,25315,25318],[10,25101,25097],{"id":25102},"_4策略学习",[14,25104,25106],{"id":25105},"_41概念描述","4.1.概念描述",[40,25108,25109],{},"用神经网络（策略网络）近似策略函数",[40,25111,25112],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[40,25114,25115],{},[2564,25116],{"alt":35,"src":25117},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[40,25119,25120],{},[2564,25121],{"alt":35,"src":25122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[40,25124,25125],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[40,25127,25128],{},[2564,25129],{"alt":35,"src":25130},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[40,25132,25133],{},[2564,25134],{"alt":35,"src":25135},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[40,25137,25138],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[40,25140,25141],{},[2564,25142],{"alt":35,"src":25143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[40,25145,25146],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[40,25148,25149],{},[2564,25150],{"alt":35,"src":25151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[40,25153,25154],{},"改进theta要用到策略梯度算法",[40,25156,25157],{},[2564,25158],{"alt":35,"src":25159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[40,25161,25162],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[40,25164,25165],{},[2564,25166],{"alt":35,"src":25167},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[40,25169,25170],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[40,25172,25173],{},[2564,25174],{"alt":35,"src":25175},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[40,25177,25178],{},[2564,25179],{"alt":35,"src":25180},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[40,25182,25183],{},"梯度公式总结：",[40,25185,25186],{},[2564,25187],{"alt":35,"src":25188},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[40,25190,25191],{},"两个公式的分别应用场景：",[40,25193,25194],{},"对于离散的动作：",[40,25196,25197],{},[2564,25198],{"alt":35,"src":25199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[40,25201,25202],{},"对于连续的动作：",[40,25204,25205],{},[2564,25206],{"alt":35,"src":25207},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[40,25209,25210],{},[2564,25211],{"alt":35,"src":25212},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25214,25216],{"id":25215},"_42概率梯度算法总结","4.2.概率梯度算法总结",[40,25218,25219],{},"使用蒙特卡洛来近似计算策略梯度",[40,25221,25222],{},"蒙特卡洛法的解释如下：",[40,25224,25225],{},[2564,25226],{"alt":35,"src":25227},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[40,25229,25230],{},[2564,25231],{"alt":35,"src":25232},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[40,25234,25235],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[19,25237,25238],{},[22,25239,25240],{},"方法一：reinforce算法",[40,25242,25243],{},[2564,25244],{"alt":35,"src":25245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[40,25247,25248],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[19,25250,25251],{"start":61},[22,25252,25253],{},"方法二：actor-critic算法",[40,25255,25256],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[40,25258,25259],{},"两个网络的构建：",[40,25261,25262],{},[2564,25263],{"alt":35,"src":25264},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[40,25266,25267],{},"actor网路：",[40,25269,25270],{},[2564,25271],{"alt":35,"src":25272},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[40,25274,25275],{},"critic网络",[40,25277,25278],{},[2564,25279],{"alt":35,"src":25280},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[19,25282,25283],{"start":93},[22,25284,25285],{},"网络的训练",[40,25287,25288],{},"网络描述",[40,25290,25291],{},[2564,25292],{"alt":35,"src":25293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[40,25295,25296],{},[2564,25297],{"alt":35,"src":25298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[40,25300,25301],{},"TD算法更新梯度：",[40,25303,25304],{},[2564,25305],{"alt":35,"src":25306},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[40,25308,25309],{},"策略网络更新梯度：",[40,25311,25312],{},[2564,25313],{"alt":35,"src":25314},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[40,25316,25317],{},"训练整个流程的具体描述：",[40,25319,25320,25323,25324],{},[2564,25321],{"alt":35,"src":25322},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[2564,25325],{"alt":35,"src":25326},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":35,"searchDepth":61,"depth":61,"links":25328},[25329,25330],{"id":25105,"depth":61,"text":25106},{"id":25215,"depth":61,"text":25216},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25097,"description":35},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25337,"title":25338,"body":25339,"description":25346,"extension":1190,"meta":25396,"navigation":1192,"path":25397,"seo":25398,"stem":25399,"__hash__":25400},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25340,"toc":25392},[25341,25344,25347,25351,25354,25359,25363,25366,25371,25374,25379,25384,25387],[10,25342,25338],{"id":25343},"_5alphago算法",[40,25345,25346],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25348,25350],{"id":25349},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[40,25352,25353],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[40,25355,25356],{},[2564,25357],{"alt":35,"src":25358},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25360,25362],{"id":25361},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[40,25364,25365],{},"采用强化学习的方式训练策略网络",[40,25367,25368],{},[2564,25369],{"alt":35,"src":25370},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[40,25372,25373],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[40,25375,25376],{},[2564,25377],{"alt":35,"src":25378},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[40,25380,25381],{},[2564,25382],{"alt":35,"src":25383},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[40,25385,25386],{},"强化学习训练策略网络的总结：",[40,25388,25389],{},[2564,25390],{"alt":35,"src":25391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":35,"searchDepth":61,"depth":61,"links":25393},[25394,25395],{"id":25349,"depth":61,"text":25350},{"id":25361,"depth":61,"text":25362},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25338,"description":25346},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25402,"title":25403,"body":25404,"description":25411,"extension":1190,"meta":25414,"navigation":1192,"path":25415,"seo":25416,"stem":25417,"__hash__":25418},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25405,"toc":25412},[25406,25409],[10,25407,25403],{"id":25408},"_6价值网络",[40,25410,25411],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":35,"searchDepth":61,"depth":61,"links":25413},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25403,"description":25411},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25420,"title":25421,"body":25422,"description":25426,"extension":1190,"meta":25427,"navigation":1192,"path":25428,"seo":25429,"stem":25430,"__hash__":25431},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25423,"toc":25424},[],{"title":35,"searchDepth":61,"depth":61,"links":25425},[],"记录自己的强化学习笔记。",{"category":24341},"\u002Fwiki\u002F2025-12-04",{"title":25421,"description":25426},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25433,"title":25434,"body":25435,"description":24339,"extension":1190,"meta":25474,"navigation":1192,"path":25475,"seo":25476,"stem":25477,"__hash__":25478},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25436,"toc":25472},[25437,25440,25443,25449,25452,25458,25461,25466,25469],[10,25438,25434],{"id":25439},"_1-项目概览与官方资源",[40,25441,25442],{},"官方文档：",[40,25444,25445],{},[981,25446,25447],{"href":25447,"rel":25448},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24828],[40,25450,25451],{},"官方代码仓库：",[40,25453,25454],{},[981,25455,25456],{"href":25456,"rel":25457},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24828],[40,25459,25460],{},"复现大体流程：",[40,25462,25463],{},[2564,25464],{"alt":35,"src":25465},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[40,25467,25468],{},"本教程的目标是打通这条链路：",[40,25470,25471],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":35,"searchDepth":61,"depth":61,"links":25473},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25434,"description":24339},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25480,"title":25481,"body":25482,"description":24339,"extension":1190,"meta":25598,"navigation":1192,"path":25599,"seo":25600,"stem":25601,"__hash__":25602},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25483,"toc":25593},[25484,25487,25491,25494,25501,25505,25508,25517,25527,25531,25561,25564,25590],[10,25485,25481],{"id":25486},"_2-环境准备与设备连接",[14,25488,25490],{"id":25489},"_21-系统与环境","2.1 系统与环境",[40,25492,25493],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[40,25495,25496,25497,25500],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[37,25498,25499],{},"lerobot"," 依赖。",[14,25502,25504],{"id":25503},"_22-机械臂串口识别","2.2 机械臂串口识别",[40,25506,25507],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[29,25509,25511],{"className":24785,"code":25510,"language":24787,"meta":35,"style":35},"lerobot-find-out\n",[37,25512,25513],{"__ignoreMap":35},[51,25514,25515],{"class":53,"line":54},[51,25516,25510],{"class":68},[40,25518,25519,25520,1466,25523,25526],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[37,25521,25522],{},"\u002Fdev\u002FttyACM0",[37,25524,25525],{},"\u002Fdev\u002FttyACM1","）。",[14,25528,25530],{"id":25529},"_23-串口授权","2.3 串口授权",[29,25532,25534],{"className":24785,"code":25533,"language":24787,"meta":35,"style":35},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[37,25535,25536,25550],{"__ignoreMap":35},[51,25537,25538,25541,25544,25547],{"class":53,"line":54},[51,25539,25540],{"class":68},"sudo",[51,25542,25543],{"class":282}," chmod",[51,25545,25546],{"class":175}," 666",[51,25548,25549],{"class":282}," \u002Fdev\u002FttyACM0\n",[51,25551,25552,25554,25556,25558],{"class":53,"line":61},[51,25553,25540],{"class":68},[51,25555,25543],{"class":282},[51,25557,25546],{"class":175},[51,25559,25560],{"class":282}," \u002Fdev\u002FttyACM1\n",[40,25562,25563],{},"说明：",[1000,25565,25566,25571,25577,25587],{},[22,25567,25568,25570],{},[37,25569,25540],{},"：以 root 权限执行命令。",[22,25572,25573,25576],{},[37,25574,25575],{},"chmod","：修改设备节点权限。",[22,25578,25579,25582,25583,25586],{},[37,25580,25581],{},"666","：",[37,25584,25585],{},"rw-rw-rw-","，所有用户可读写。",[22,25588,25589],{},"串口号必须替换为你机器上的真实端口。",[1179,25591,25592],{},"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":35,"searchDepth":61,"depth":61,"links":25594},[25595,25596,25597],{"id":25489,"depth":61,"text":25490},{"id":25503,"depth":61,"text":25504},{"id":25529,"depth":61,"text":25530},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25481,"description":24339},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25604,"title":25605,"body":25606,"description":24339,"extension":1190,"meta":25767,"navigation":1192,"path":25768,"seo":25769,"stem":25770,"__hash__":25771},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25607,"toc":25763},[25608,25612,25616,25622,25625,25682,25685,25689,25692,25760],[10,25609,25611],{"id":25610},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25613,25615],{"id":25614},"_31-配置电机-id","3.1 配置电机 ID",[40,25617,25618,25619,25621],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[37,25620,791],{},"，需要改成机械臂链路里不冲突的编号。",[40,25623,25624],{},"方式一：用 LeRobot 命令逐步写入。",[29,25626,25628],{"className":24785,"code":25627,"language":24787,"meta":35,"style":35},"# 主臂舵机配置 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",[37,25629,25630,25635,25643,25650,25655,25659,25664,25670,25677],{"__ignoreMap":35},[51,25631,25632],{"class":53,"line":54},[51,25633,25634],{"class":57},"# 主臂舵机配置 ID\n",[51,25636,25637,25640],{"class":53,"line":61},[51,25638,25639],{"class":68},"lerobot-setup-motors",[51,25641,25642],{"class":175}," \\\n",[51,25644,25645,25648],{"class":53,"line":93},[51,25646,25647],{"class":175},"  --teleop.type=so101_leader",[51,25649,25642],{"class":175},[51,25651,25652],{"class":53,"line":99},[51,25653,25654],{"class":175},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[51,25656,25657],{"class":53,"line":120},[51,25658,3480],{"emptyLinePlaceholder":1192},[51,25660,25661],{"class":53,"line":129},[51,25662,25663],{"class":57},"# 从臂舵机配置 ID\n",[51,25665,25666,25668],{"class":53,"line":206},[51,25667,25639],{"class":68},[51,25669,25642],{"class":175},[51,25671,25672,25675],{"class":53,"line":212},[51,25673,25674],{"class":175},"  --robot.type=so101_follower",[51,25676,25642],{"class":175},[51,25678,25679],{"class":53,"line":227},[51,25680,25681],{"class":175},"  --robot.port=\u002Fdev\u002FttyACM1\n",[40,25683,25684],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25686,25688],{"id":25687},"_32-机械臂校准","3.2 机械臂校准",[40,25690,25691],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[29,25693,25695],{"className":24785,"code":25694,"language":24787,"meta":35,"style":35},"# 主臂校准\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",[37,25696,25697,25702,25709,25715,25722,25727,25731,25736,25742,25748,25755],{"__ignoreMap":35},[51,25698,25699],{"class":53,"line":54},[51,25700,25701],{"class":57},"# 主臂校准\n",[51,25703,25704,25707],{"class":53,"line":61},[51,25705,25706],{"class":68},"lerobot-calibrate",[51,25708,25642],{"class":175},[51,25710,25711,25713],{"class":53,"line":93},[51,25712,25647],{"class":175},[51,25714,25642],{"class":175},[51,25716,25717,25720],{"class":53,"line":99},[51,25718,25719],{"class":175},"  --teleop.port=\u002Fdev\u002FttyACM0",[51,25721,25642],{"class":175},[51,25723,25724],{"class":53,"line":120},[51,25725,25726],{"class":175},"  --teleop.id=my_awesome_leader_arm\n",[51,25728,25729],{"class":53,"line":129},[51,25730,3480],{"emptyLinePlaceholder":1192},[51,25732,25733],{"class":53,"line":206},[51,25734,25735],{"class":57},"# 从臂校准\n",[51,25737,25738,25740],{"class":53,"line":212},[51,25739,25706],{"class":68},[51,25741,25642],{"class":175},[51,25743,25744,25746],{"class":53,"line":227},[51,25745,25674],{"class":175},[51,25747,25642],{"class":175},[51,25749,25750,25753],{"class":53,"line":370},[51,25751,25752],{"class":175},"  --robot.port=\u002Fdev\u002FttyACM1",[51,25754,25642],{"class":175},[51,25756,25757],{"class":53,"line":387},[51,25758,25759],{"class":175},"  --robot.id=my_awesome_follower_arm\n",[1179,25761,25762],{},"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":35,"searchDepth":61,"depth":61,"links":25764},[25765,25766],{"id":25614,"depth":61,"text":25615},{"id":25687,"depth":61,"text":25688},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25605,"description":24339},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25773,"title":25774,"body":25775,"description":24339,"extension":1190,"meta":25966,"navigation":1192,"path":25967,"seo":25968,"stem":25969,"__hash__":25970},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25776,"toc":25962},[25777,25780,25784,25831,25835,25848,25911,25914,25959],[10,25778,25774],{"id":25779},"_4-遥操与相机接入",[14,25781,25783],{"id":25782},"_41-不带相机遥操","4.1 不带相机遥操",[29,25785,25787],{"className":24785,"code":25786,"language":24787,"meta":35,"style":35},"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",[37,25788,25789,25796,25802,25808,25815,25821,25827],{"__ignoreMap":35},[51,25790,25791,25794],{"class":53,"line":54},[51,25792,25793],{"class":68},"lerobot-teleoperate",[51,25795,25642],{"class":175},[51,25797,25798,25800],{"class":53,"line":61},[51,25799,25674],{"class":175},[51,25801,25642],{"class":175},[51,25803,25804,25806],{"class":53,"line":93},[51,25805,25752],{"class":175},[51,25807,25642],{"class":175},[51,25809,25810,25813],{"class":53,"line":99},[51,25811,25812],{"class":175},"  --robot.id=my_awesome_follower_arm",[51,25814,25642],{"class":175},[51,25816,25817,25819],{"class":53,"line":120},[51,25818,25647],{"class":175},[51,25820,25642],{"class":175},[51,25822,25823,25825],{"class":53,"line":129},[51,25824,25719],{"class":175},[51,25826,25642],{"class":175},[51,25828,25829],{"class":53,"line":206},[51,25830,25726],{"class":175},[14,25832,25834],{"id":25833},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[29,25836,25838],{"className":24785,"code":25837,"language":24787,"meta":35,"style":35},"lerobot-find-cameras opencv\n",[37,25839,25840],{"__ignoreMap":35},[51,25841,25842,25845],{"class":53,"line":54},[51,25843,25844],{"class":68},"lerobot-find-cameras",[51,25846,25847],{"class":282}," opencv\n",[29,25849,25851],{"className":24785,"code":25850,"language":24787,"meta":35,"style":35},"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",[37,25852,25853,25859,25865,25871,25877,25887,25893,25899,25906],{"__ignoreMap":35},[51,25854,25855,25857],{"class":53,"line":54},[51,25856,25793],{"class":68},[51,25858,25642],{"class":175},[51,25860,25861,25863],{"class":53,"line":61},[51,25862,25674],{"class":175},[51,25864,25642],{"class":175},[51,25866,25867,25869],{"class":53,"line":93},[51,25868,25752],{"class":175},[51,25870,25642],{"class":175},[51,25872,25873,25875],{"class":53,"line":99},[51,25874,25812],{"class":175},[51,25876,25642],{"class":175},[51,25878,25879,25882,25885],{"class":53,"line":120},[51,25880,25881],{"class":175},"  --robot.cameras=",[51,25883,25884],{"class":282},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[51,25886,25642],{"class":175},[51,25888,25889,25891],{"class":53,"line":129},[51,25890,25647],{"class":175},[51,25892,25642],{"class":175},[51,25894,25895,25897],{"class":53,"line":206},[51,25896,25719],{"class":175},[51,25898,25642],{"class":175},[51,25900,25901,25904],{"class":53,"line":212},[51,25902,25903],{"class":175},"  --teleop.id=my_awesome_leader_arm",[51,25905,25642],{"class":175},[51,25907,25908],{"class":53,"line":227},[51,25909,25910],{"class":175},"  --display_data=true\n",[40,25912,25913],{},"相机参数说明：",[1000,25915,25916,25922,25928,25937,25947,25953],{},[22,25917,25918,25921],{},[37,25919,25920],{},"front","：相机名称。",[22,25923,25924,25927],{},[37,25925,25926],{},"type: opencv","：相机驱动类型。",[22,25929,25930,25933,25934,25526],{},[37,25931,25932],{},"index_or_path","：设备编号或设备路径（如 ",[37,25935,25936],{},"\u002Fdev\u002Fvideo4",[22,25938,25939,25942,25943,25946],{},[37,25940,25941],{},"width"," \u002F ",[37,25944,25945],{},"height","：图像分辨率。",[22,25948,25949,25952],{},[37,25950,25951],{},"fps","：采样帧率。",[22,25954,25955,25958],{},[37,25956,25957],{},"--display_data=true","：启用实时可视化。",[1179,25960,25961],{},"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":35,"searchDepth":61,"depth":61,"links":25963},[25964,25965],{"id":25782,"depth":61,"text":25783},{"id":25833,"depth":61,"text":25834},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25774,"description":24339},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25972,"title":25973,"body":25974,"description":24339,"extension":1190,"meta":26146,"navigation":1192,"path":26147,"seo":26148,"stem":26149,"__hash__":26150},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25975,"toc":26141},[25976,25980,25984,25989,25994,25997,26039,26045,26049,26098,26103,26107,26110,26118,26123,26128,26133,26138],[10,25977,25979],{"id":25978},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25981,25983],{"id":25982},"_51-生成访问令牌","5.1 生成访问令牌",[40,25985,25986],{},[2564,25987],{"alt":35,"src":25988},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[40,25990,25991],{},[2564,25992],{"alt":35,"src":25993},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[40,25995,25996],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[29,25998,26000],{"className":24785,"code":25999,"language":24787,"meta":35,"style":35},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[37,26001,26002,26015],{"__ignoreMap":35},[51,26003,26004,26007,26010,26012],{"class":53,"line":54},[51,26005,26006],{"class":64},"export",[51,26008,26009],{"class":72}," HF_TOKEN",[51,26011,108],{"class":64},[51,26013,26014],{"class":282},"\"your_huggingface_token\"\n",[51,26016,26017,26020,26023,26026,26029,26031,26034,26036],{"class":53,"line":61},[51,26018,26019],{"class":68},"hf",[51,26021,26022],{"class":282}," auth",[51,26024,26025],{"class":282}," login",[51,26027,26028],{"class":175}," --token",[51,26030,10686],{"class":282},[51,26032,26033],{"class":72},"$HF_TOKEN",[51,26035,1503],{"class":282},[51,26037,26038],{"class":175}," --add-to-git-credential\n",[40,26040,26041,26044],{},[37,26042,26043],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26046,26048],{"id":26047},"_52-验证登录","5.2 验证登录",[29,26050,26052],{"className":24785,"code":26051,"language":24787,"meta":35,"style":35},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[37,26053,26054,26085],{"__ignoreMap":35},[51,26055,26056,26059,26061,26064,26066,26068,26071,26074,26077,26080,26083],{"class":53,"line":54},[51,26057,26058],{"class":72},"HF_USER",[51,26060,108],{"class":64},[51,26062,26063],{"class":72},"$(",[51,26065,26019],{"class":68},[51,26067,26022],{"class":282},[51,26069,26070],{"class":282}," whoami",[51,26072,26073],{"class":64}," |",[51,26075,26076],{"class":68}," head",[51,26078,26079],{"class":175}," -n",[51,26081,26082],{"class":175}," 1",[51,26084,90],{"class":72},[51,26086,26087,26090,26092,26095],{"class":53,"line":61},[51,26088,26089],{"class":175},"echo",[51,26091,10686],{"class":282},[51,26093,26094],{"class":72},"$HF_USER",[51,26096,26097],{"class":282},"\"\n",[40,26099,26100],{},[2564,26101],{"alt":35,"src":26102},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26104,26106],{"id":26105},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[40,26108,26109],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1000,26111,26112,26115],{},[22,26113,26114],{},"Dataset Repo（用于上传演示数据）",[22,26116,26117],{},"Model Repo（用于上传训练后的 ACT 权重）",[40,26119,26120],{},[2564,26121],{"alt":35,"src":26122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[40,26124,26125],{},[2564,26126],{"alt":35,"src":26127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[40,26129,26130],{},[2564,26131],{"alt":35,"src":26132},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[40,26134,26135],{},[2564,26136],{"alt":35,"src":26137},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1179,26139,26140],{},"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":35,"searchDepth":61,"depth":61,"links":26142},[26143,26144,26145],{"id":25982,"depth":61,"text":25983},{"id":26047,"depth":61,"text":26048},{"id":26105,"depth":61,"text":26106},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25973,"description":24339},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26152,"title":26153,"body":26154,"description":24339,"extension":1190,"meta":26351,"navigation":1192,"path":26352,"seo":26353,"stem":26354,"__hash__":26355},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26155,"toc":26346},[26156,26160,26164,26260,26268,26273,26277,26293,26296,26300,26343],[10,26157,26159],{"id":26158},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26161,26163],{"id":26162},"_61-录制示教数据","6.1 录制示教数据",[29,26165,26167],{"className":24785,"code":26166,"language":24787,"meta":35,"style":35},"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",[37,26168,26169,26176,26182,26188,26194,26203,26209,26215,26221,26228,26238,26245,26255],{"__ignoreMap":35},[51,26170,26171,26174],{"class":53,"line":54},[51,26172,26173],{"class":68},"lerobot-record",[51,26175,25642],{"class":175},[51,26177,26178,26180],{"class":53,"line":61},[51,26179,25674],{"class":175},[51,26181,25642],{"class":175},[51,26183,26184,26186],{"class":53,"line":93},[51,26185,25752],{"class":175},[51,26187,25642],{"class":175},[51,26189,26190,26192],{"class":53,"line":99},[51,26191,25812],{"class":175},[51,26193,25642],{"class":175},[51,26195,26196,26198,26201],{"class":53,"line":120},[51,26197,25881],{"class":175},[51,26199,26200],{"class":282},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[51,26202,25642],{"class":175},[51,26204,26205,26207],{"class":53,"line":129},[51,26206,25647],{"class":175},[51,26208,25642],{"class":175},[51,26210,26211,26213],{"class":53,"line":206},[51,26212,25719],{"class":175},[51,26214,25642],{"class":175},[51,26216,26217,26219],{"class":53,"line":212},[51,26218,25903],{"class":175},[51,26220,25642],{"class":175},[51,26222,26223,26226],{"class":53,"line":227},[51,26224,26225],{"class":175},"  --display_data=true",[51,26227,25642],{"class":175},[51,26229,26230,26233,26236],{"class":53,"line":370},[51,26231,26232],{"class":175},"  --dataset.repo_id=",[51,26234,26235],{"class":282},"\"Embodied-AI-6\u002Fso101_test\"",[51,26237,25642],{"class":175},[51,26239,26240,26243],{"class":53,"line":387},[51,26241,26242],{"class":175},"  --dataset.num_episodes=10",[51,26244,25642],{"class":175},[51,26246,26247,26250,26253],{"class":53,"line":404},[51,26248,26249],{"class":175},"  --dataset.single_task=",[51,26251,26252],{"class":282},"\"Grab the green cube\"",[51,26254,25642],{"class":175},[51,26256,26257],{"class":53,"line":415},[51,26258,26259],{"class":175},"  --resume=true\n",[1000,26261,26262],{},[22,26263,26264,26267],{},[37,26265,26266],{},"--resume=true","：已有同一数据集时继续追加 episode。",[40,26269,26270],{},[2564,26271],{"alt":35,"src":26272},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26274,26276],{"id":26275},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[29,26278,26280],{"className":24785,"code":26279,"language":24787,"meta":35,"style":35},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[37,26281,26282],{"__ignoreMap":35},[51,26283,26284,26287,26290],{"class":53,"line":54},[51,26285,26286],{"class":68},"rm",[51,26288,26289],{"class":175}," -rf",[51,26291,26292],{"class":282}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[40,26294,26295],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26297,26299],{"id":26298},"_63-回放指定-episode","6.3 回放指定 episode",[29,26301,26303],{"className":24785,"code":26302,"language":24787,"meta":35,"style":35},"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",[37,26304,26305,26312,26318,26324,26330,26338],{"__ignoreMap":35},[51,26306,26307,26310],{"class":53,"line":54},[51,26308,26309],{"class":68},"lerobot-replay",[51,26311,25642],{"class":175},[51,26313,26314,26316],{"class":53,"line":61},[51,26315,25674],{"class":175},[51,26317,25642],{"class":175},[51,26319,26320,26322],{"class":53,"line":93},[51,26321,25752],{"class":175},[51,26323,25642],{"class":175},[51,26325,26326,26328],{"class":53,"line":99},[51,26327,25812],{"class":175},[51,26329,25642],{"class":175},[51,26331,26332,26334,26336],{"class":53,"line":120},[51,26333,26232],{"class":175},[51,26335,26235],{"class":282},[51,26337,25642],{"class":175},[51,26339,26340],{"class":53,"line":129},[51,26341,26342],{"class":175},"  --dataset.episode=0\n",[1179,26344,26345],{},"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":35,"searchDepth":61,"depth":61,"links":26347},[26348,26349,26350],{"id":26162,"depth":61,"text":26163},{"id":26275,"depth":61,"text":26276},{"id":26298,"depth":61,"text":26299},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26153,"description":24339},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26357,"title":26358,"body":26359,"description":24339,"extension":1190,"meta":26487,"navigation":1192,"path":26488,"seo":26489,"stem":26490,"__hash__":26491},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26360,"toc":26485},[26361,26365,26428,26431,26478,26483],[10,26362,26364],{"id":26363},"_7-act-模型训练","7. ACT 模型训练",[29,26366,26368],{"className":24785,"code":26367,"language":24787,"meta":35,"style":35},"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",[37,26369,26370,26377,26385,26392,26399,26406,26413,26420],{"__ignoreMap":35},[51,26371,26372,26375],{"class":53,"line":54},[51,26373,26374],{"class":68},"lerobot-train",[51,26376,25642],{"class":175},[51,26378,26379,26381,26383],{"class":53,"line":61},[51,26380,26232],{"class":175},[51,26382,26235],{"class":282},[51,26384,25642],{"class":175},[51,26386,26387,26390],{"class":53,"line":93},[51,26388,26389],{"class":175},"  --policy.type=act",[51,26391,25642],{"class":175},[51,26393,26394,26397],{"class":53,"line":99},[51,26395,26396],{"class":175},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[51,26398,25642],{"class":175},[51,26400,26401,26404],{"class":53,"line":120},[51,26402,26403],{"class":175},"  --job_name=act_so101_test",[51,26405,25642],{"class":175},[51,26407,26408,26411],{"class":53,"line":129},[51,26409,26410],{"class":175},"  --policy.device=cuda",[51,26412,25642],{"class":175},[51,26414,26415,26418],{"class":53,"line":206},[51,26416,26417],{"class":175},"  --wandb.enable=false",[51,26419,25642],{"class":175},[51,26421,26422,26425],{"class":53,"line":212},[51,26423,26424],{"class":175},"  --policy.repo_id=",[51,26426,26427],{"class":282},"\"Embodied-AI-6\u002Flerobot_new\"\n",[40,26429,26430],{},"参数说明：",[1000,26432,26433,26439,26445,26451,26457,26466,26472],{},[22,26434,26435,26438],{},[37,26436,26437],{},"--dataset.repo_id","：训练数据集仓库。",[22,26440,26441,26444],{},[37,26442,26443],{},"--policy.type=act","：策略模型类型为 ACT。",[22,26446,26447,26450],{},[37,26448,26449],{},"--output_dir","：本地训练输出目录。",[22,26452,26453,26456],{},[37,26454,26455],{},"--job_name","：训练任务名称。",[22,26458,26459,26462,26463,25526],{},[37,26460,26461],{},"--policy.device","：训练设备（如 ",[37,26464,26465],{},"cuda",[22,26467,26468,26471],{},[37,26469,26470],{},"--wandb.enable","：是否启用 WandB 可视化。",[22,26473,26474,26477],{},[37,26475,26476],{},"--policy.repo_id","：训练后模型推送目标仓库。",[40,26479,26480],{},[2564,26481],{"alt":35,"src":26482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1179,26484,26345],{},{"title":35,"searchDepth":61,"depth":61,"links":26486},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26358,"description":24339},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26493,"title":26494,"body":26495,"description":24339,"extension":1190,"meta":26582,"navigation":1192,"path":26583,"seo":26584,"stem":26585,"__hash__":26586},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26496,"toc":26580},[26497,26500,26503,26570,26578],[10,26498,26494],{"id":26499},"_8-策略部署与自动采集",[40,26501,26502],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[29,26504,26506],{"className":24785,"code":26505,"language":24787,"meta":35,"style":35},"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",[37,26507,26508,26514,26520,26526,26534,26540,26547,26555,26563],{"__ignoreMap":35},[51,26509,26510,26512],{"class":53,"line":54},[51,26511,26173],{"class":68},[51,26513,25642],{"class":175},[51,26515,26516,26518],{"class":53,"line":61},[51,26517,25674],{"class":175},[51,26519,25642],{"class":175},[51,26521,26522,26524],{"class":53,"line":93},[51,26523,25752],{"class":175},[51,26525,25642],{"class":175},[51,26527,26528,26530,26532],{"class":53,"line":99},[51,26529,25881],{"class":175},[51,26531,26200],{"class":282},[51,26533,25642],{"class":175},[51,26535,26536,26538],{"class":53,"line":120},[51,26537,25812],{"class":175},[51,26539,25642],{"class":175},[51,26541,26542,26545],{"class":53,"line":129},[51,26543,26544],{"class":175},"  --display_data=false",[51,26546,25642],{"class":175},[51,26548,26549,26551,26553],{"class":53,"line":206},[51,26550,26232],{"class":175},[51,26552,26235],{"class":282},[51,26554,25642],{"class":175},[51,26556,26557,26559,26561],{"class":53,"line":212},[51,26558,26249],{"class":175},[51,26560,26252],{"class":282},[51,26562,25642],{"class":175},[51,26564,26565,26568],{"class":53,"line":227},[51,26566,26567],{"class":175},"  --policy.path=",[51,26569,26427],{"class":282},[1000,26571,26572],{},[22,26573,26574,26577],{},[37,26575,26576],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1179,26579,26345],{},{"title":35,"searchDepth":61,"depth":61,"links":26581},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26494,"description":24339},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26588,"title":26589,"body":26590,"description":24339,"extension":1190,"meta":26619,"navigation":1192,"path":26620,"seo":26621,"stem":26622,"__hash__":26623},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26591,"toc":26617},[26592,26596,26599,26605,26608,26614],[10,26593,26595],{"id":26594},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[40,26597,26598],{},"项目地址：",[40,26600,26601],{},[981,26602,26603],{"href":26603,"rel":26604},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24828],[40,26606,26607],{},"参考教程：",[40,26609,26610],{},[981,26611,26612],{"href":26612,"rel":26613},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24828],[40,26615,26616],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":35,"searchDepth":61,"depth":61,"links":26618},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26589,"description":24339},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26625,"title":26626,"body":26627,"description":26631,"extension":1190,"meta":26632,"navigation":1192,"path":26633,"seo":26634,"stem":26635,"__hash__":26636},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26628,"toc":26629},[],{"title":35,"searchDepth":61,"depth":61,"links":26630},[],"act复现",{"category":24341},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26626,"description":26631},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26638,"title":26639,"body":26640,"description":35,"extension":1190,"meta":26942,"navigation":1192,"path":26943,"seo":26944,"stem":26945,"__hash__":26946},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26641,"toc":26934},[26642,26645,26649,26659,26666,26673,26676,26683,26686,26689,26693,26705,26709,26755,26758,26761,26764,26767,26770,26774,26812,26818,26822,26876,26881,26884,26887,26892,26895,26900,26903,26906,26910,26913,26916,26920],[10,26643,26639],{"id":26644},"_1简介",[1233,26646,26648],{"id":26647},"_11什么是-docker","1.1什么是 Docker？",[40,26650,26651,26652,26655,26656],{},"Docker 是一个开源的 ",[840,26653,26654],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[840,26657,26658],{},"一次构建，到处运行。",[40,26660,26661,26662,26665],{},"“ ",[840,26663,26664],{},"一次构建，到处运行"," ”也就是说：",[19,26667,26668],{},[22,26669,26670],{},[840,26671,26672],{},"之前：",[40,26674,26675],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[19,26677,26678],{},[22,26679,26680],{},[840,26681,26682],{},"使用docker后：",[40,26684,26685],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[40,26687,26688],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[1233,26690,26692],{"id":26691},"_12它是怎么工作的","1.2.它是怎么工作的？",[1000,26694,26695,26698],{},[22,26696,26697],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[22,26699,26700,26701,26704],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[840,26702,26703],{},"无论在哪运行都一样稳定"," 。",[1233,26706,26708],{"id":26707},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1393,26710,26711,26721],{},[1396,26712,26713],{},[1399,26714,26715,26718],{},[1402,26716,26717],{"align":24699},"概念",[1402,26719,26720],{"align":24699},"解释",[1439,26722,26723,26731,26739,26747],{},[1399,26724,26725,26728],{},[1444,26726,26727],{"align":24699},"镜像",[1444,26729,26730],{"align":24699},"Image，运行容器的模板，像是一个应用快照",[1399,26732,26733,26736],{},[1444,26734,26735],{"align":24699},"容器",[1444,26737,26738],{"align":24699},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1399,26740,26741,26744],{},[1444,26742,26743],{"align":24699},"Dockerfile",[1444,26745,26746],{"align":24699},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1399,26748,26749,26752],{},[1444,26750,26751],{"align":24699},"仓库",[1444,26753,26754],{"align":24699},"Registry，存放镜像的地方，比如 Docker Hub",[40,26756,26757],{},"抽象化理解:",[40,26759,26760],{},"Docker镜像≈C++类",[40,26762,26763],{},"Docker容器≈C++类实例(即对象)",[40,26765,26766],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[40,26768,26769],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[1233,26771,26773],{"id":26772},"_14类比理解","1.4.类比理解",[1393,26775,26776,26786],{},[1396,26777,26778],{},[1399,26779,26780,26783],{},[1402,26781,26782],{"align":24699},"传统部署",[1402,26784,26785],{"align":24699},"Docker部署",[1439,26787,26788,26796,26804],{},[1399,26789,26790,26793],{},[1444,26791,26792],{"align":24699},"手动安装依赖、调试版本不一致问题",[1444,26794,26795],{"align":24699},"一次打包环境和代码",[1399,26797,26798,26801],{},[1444,26799,26800],{"align":24699},"程序“裸奔”跑在系统上",[1444,26802,26803],{"align":24699},"程序“穿着容器”隔离运行",[1399,26805,26806,26809],{},[1444,26807,26808],{"align":24699},"容易“在我电脑上能跑”",[1444,26810,26811],{"align":24699},"保证“无论在哪都能跑”",[40,26813,26814,26815],{},"就像快递包裹： ",[840,26816,26817],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[1233,26819,26821],{"id":26820},"_15docker-的核心优势","1.5.Docker 的核心优势",[1393,26823,26824,26834],{},[1396,26825,26826],{},[1399,26827,26828,26831],{},[1402,26829,26830],{"align":24699},"优势",[1402,26832,26833],{"align":24699},"说明",[1439,26835,26836,26844,26852,26860,26868],{},[1399,26837,26838,26841],{},[1444,26839,26840],{"align":24699},"轻量级",[1444,26842,26843],{"align":24699},"基于系统内核共享，启动速度快，占资源少",[1399,26845,26846,26849],{},[1444,26847,26848],{"align":24699},"跨平台",[1444,26850,26851],{"align":24699},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1399,26853,26854,26857],{},[1444,26855,26856],{"align":24699},"易于迁移部署",[1444,26858,26859],{"align":24699},"应用和环境一起封装，不怕依赖不一致",[1399,26861,26862,26865],{},[1444,26863,26864],{"align":24699},"易于版本控制",[1444,26866,26867],{"align":24699},"镜像版本可控，支持回滚",[1399,26869,26870,26873],{},[1444,26871,26872],{"align":24699},"生态丰富",[1444,26874,26875],{"align":24699},"Docker Hub 上有成千上万的现成镜像可用",[19,26877,26878],{},[22,26879,26880],{},"在Linux上可以几乎实现无性能损失。",[40,26882,26883],{},"docker里的发行版和本机共用Linux内核。",[40,26885,26886],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[19,26888,26889],{},[22,26890,26891],{},"可以快速部署在绝大多数Linux发行版",[40,26893,26894],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[19,26896,26897],{},[22,26898,26899],{},"配置环境简单",[40,26901,26902],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[40,26904,26905],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[19,26907,26908],{},[22,26909,26872],{},[40,26911,26912],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[40,26914,26915],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[1233,26917,26919],{"id":26918},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1000,26921,26922,26925,26928,26931],{},[22,26923,26924],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[22,26926,26927],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[22,26929,26930],{},"微服务架构：每个服务一个容器，灵活组合",[22,26932,26933],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":35,"searchDepth":61,"depth":61,"links":26935},[26936,26937,26938,26939,26940,26941],{"id":26647,"depth":93,"text":26648},{"id":26691,"depth":93,"text":26692},{"id":26707,"depth":93,"text":26708},{"id":26772,"depth":93,"text":26773},{"id":26820,"depth":93,"text":26821},{"id":26918,"depth":93,"text":26919},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26639,"description":35},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26948,"title":26949,"body":26950,"description":35,"extension":1190,"meta":27683,"navigation":1192,"path":27684,"seo":27685,"stem":27686,"__hash__":27687},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26951,"toc":27678},[26952,26955,26959,26962,26965,26971,26977,26981,26990,26993,27050,27053,27104,27107,27190,27193,27230,27234,27245,27258,27265,27268,27348,27351,27401,27404,27427,27431,27438,27441,27457,27463,27466,27482,27488,27491,27507,27521,27527,27547,27553,27556,27568,27574,27577,27591,27597,27600,27620,27625,27628,27631,27635,27638,27641,27644,27651,27654,27657,27660,27665,27670,27675],[10,26953,26949],{"id":26954},"_2安装docker",[1233,26956,26958],{"id":26957},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[40,26960,26961],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[40,26963,26964],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[40,26966,26967],{},[981,26968,26969],{"href":26969,"rel":26970},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24828],[40,26972,26973],{},[981,26974,26975],{"href":26975,"rel":26976},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24828],[22960,26978,26980],{"id":26979},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[40,26982,26983,26984,26989],{},"以下内容根据 ",[981,26985,26988],{"href":26986,"rel":26987},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24828],"官方文档"," 修改而来。",[40,26991,26992],{},"如果你过去安装过 docker，先删掉：",[29,26994,26996],{"className":24785,"code":26995,"language":24787,"meta":35,"style":35},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[37,26997,26998],{"__ignoreMap":35},[51,26999,27000,27002,27005,27008,27011,27014,27017,27020,27023,27026,27029,27032,27035,27038,27041,27044,27047],{"class":53,"line":54},[51,27001,4102],{"class":64},[51,27003,27004],{"class":72}," pkg ",[51,27006,27007],{"class":64},"in",[51,27009,27010],{"class":282}," docker.io",[51,27012,27013],{"class":282}," docker-doc",[51,27015,27016],{"class":282}," docker-compose",[51,27018,27019],{"class":282}," docker-compose-v2",[51,27021,27022],{"class":282}," podman-docker",[51,27024,27025],{"class":282}," containerd",[51,27027,27028],{"class":282}," runc",[51,27030,27031],{"class":72},"; ",[51,27033,27034],{"class":64},"do",[51,27036,27037],{"class":68}," sudo",[51,27039,27040],{"class":282}," apt-get",[51,27042,27043],{"class":282}," remove",[51,27045,27046],{"class":72}," $pkg; ",[51,27048,27049],{"class":64},"done\n",[40,27051,27052],{},"首先安装依赖和GPG：",[29,27054,27058],{"className":27055,"code":27056,"language":27057,"meta":35,"style":35},"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",[37,27059,27060,27065,27070,27075,27080,27085,27090,27094,27099],{"__ignoreMap":35},[51,27061,27062],{"class":53,"line":54},[51,27063,27064],{},"# Add Docker's official GPG key:\n",[51,27066,27067],{"class":53,"line":61},[51,27068,27069],{},"sudo apt-get update\n",[51,27071,27072],{"class":53,"line":93},[51,27073,27074],{},"sudo apt-get install ca-certificates curl\n",[51,27076,27077],{"class":53,"line":99},[51,27078,27079],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[51,27081,27082],{"class":53,"line":120},[51,27083,27084],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[51,27086,27087],{"class":53,"line":129},[51,27088,27089],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[51,27091,27092],{"class":53,"line":206},[51,27093,3480],{"emptyLinePlaceholder":1192},[51,27095,27096],{"class":53,"line":212},[51,27097,27098],{},"# 如果上面这行报错就弄下面这行\n",[51,27100,27101],{"class":53,"line":227},[51,27102,27103],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[40,27105,27106],{},"信任 Docker 的 GPG 公钥并添加仓库：",[29,27108,27110],{"className":24785,"code":27109,"language":24787,"meta":35,"style":35},"# 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",[37,27111,27112,27117,27123,27140,27173],{"__ignoreMap":35},[51,27113,27114],{"class":53,"line":54},[51,27115,27116],{"class":57},"# Add the repository to Apt sources:\n",[51,27118,27119,27121],{"class":53,"line":61},[51,27120,26089],{"class":175},[51,27122,25642],{"class":175},[51,27124,27125,27128,27131,27134,27137],{"class":53,"line":93},[51,27126,27127],{"class":282},"  \"deb [arch=$(",[51,27129,27130],{"class":68},"dpkg",[51,27132,27133],{"class":175}," --print-architecture",[51,27135,27136],{"class":282},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[51,27138,27139],{"class":175},"\\\n",[51,27141,27142,27145,27147,27149,27152,27155,27157,27159,27162,27164,27166,27169,27171],{"class":53,"line":99},[51,27143,27144],{"class":282},"  \"",[51,27146,26063],{"class":72},[51,27148,1804],{"class":175},[51,27150,27151],{"class":282}," \u002Fetc\u002Fos-release",[51,27153,27154],{"class":72}," && ",[51,27156,26089],{"class":175},[51,27158,10686],{"class":282},[51,27160,27161],{"class":72},"$VERSION_CODENAME",[51,27163,1503],{"class":282},[51,27165,1677],{"class":72},[51,27167,27168],{"class":282},"\" stable\"",[51,27170,26073],{"class":64},[51,27172,25642],{"class":175},[51,27174,27175,27178,27181,27184,27187],{"class":53,"line":120},[51,27176,27177],{"class":68},"  sudo",[51,27179,27180],{"class":282}," tee",[51,27182,27183],{"class":282}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[51,27185,27186],{"class":64}," >",[51,27188,27189],{"class":282}," \u002Fdev\u002Fnull\n",[40,27191,27192],{},"最后安装",[29,27194,27196],{"className":24785,"code":27195,"language":24787,"meta":35,"style":35},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[37,27197,27198,27207],{"__ignoreMap":35},[51,27199,27200,27202,27204],{"class":53,"line":54},[51,27201,25540],{"class":68},[51,27203,27040],{"class":282},[51,27205,27206],{"class":282}," update\n",[51,27208,27209,27211,27213,27215,27218,27221,27224,27227],{"class":53,"line":61},[51,27210,25540],{"class":68},[51,27212,27040],{"class":282},[51,27214,24797],{"class":282},[51,27216,27217],{"class":282}," docker-ce",[51,27219,27220],{"class":282}," docker-ce-cli",[51,27222,27223],{"class":282}," containerd.io",[51,27225,27226],{"class":282}," docker-buildx-plugin",[51,27228,27229],{"class":282}," docker-compose-plugin\n",[22960,27231,27233],{"id":27232},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[40,27235,27236,27237,27240,27241,27244],{},"查看自己自己包管理工具版本（dnf是 ",[840,27238,27239],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[840,27242,27243],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[29,27246,27248],{"className":24785,"code":27247,"language":24787,"meta":35,"style":35},"dnf --version\n",[37,27249,27250],{"__ignoreMap":35},[51,27251,27252,27255],{"class":53,"line":54},[51,27253,27254],{"class":68},"dnf",[51,27256,27257],{"class":175}," --version\n",[40,27259,26983,27260,27264],{},[981,27261,26988],{"href":27262,"rel":27263},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24828]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[40,27266,27267],{},"如果你之前安装过 docker，请先删掉",[29,27269,27271],{"className":24785,"code":27270,"language":24787,"meta":35,"style":35},"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",[37,27272,27273,27287,27294,27301,27308,27315,27322,27329,27336,27343],{"__ignoreMap":35},[51,27274,27275,27277,27280,27282,27285],{"class":53,"line":54},[51,27276,25540],{"class":68},[51,27278,27279],{"class":282}," dnf",[51,27281,27043],{"class":282},[51,27283,27284],{"class":282}," docker",[51,27286,25642],{"class":175},[51,27288,27289,27292],{"class":53,"line":61},[51,27290,27291],{"class":282},"                  docker-client",[51,27293,25642],{"class":175},[51,27295,27296,27299],{"class":53,"line":93},[51,27297,27298],{"class":282},"                  docker-client-latest",[51,27300,25642],{"class":175},[51,27302,27303,27306],{"class":53,"line":99},[51,27304,27305],{"class":282},"                  docker-common",[51,27307,25642],{"class":175},[51,27309,27310,27313],{"class":53,"line":120},[51,27311,27312],{"class":282},"                  docker-latest",[51,27314,25642],{"class":175},[51,27316,27317,27320],{"class":53,"line":129},[51,27318,27319],{"class":282},"                  docker-latest-logrotate",[51,27321,25642],{"class":175},[51,27323,27324,27327],{"class":53,"line":206},[51,27325,27326],{"class":282},"                  docker-logrotate",[51,27328,25642],{"class":175},[51,27330,27331,27334],{"class":53,"line":212},[51,27332,27333],{"class":282},"                  docker-selinux",[51,27335,25642],{"class":175},[51,27337,27338,27341],{"class":53,"line":227},[51,27339,27340],{"class":282},"                  docker-engine-selinux",[51,27342,25642],{"class":175},[51,27344,27345],{"class":53,"line":370},[51,27346,27347],{"class":282},"                  docker-engine\n",[40,27349,27350],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[29,27352,27354],{"className":24785,"code":27353,"language":24787,"meta":35,"style":35},"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",[37,27355,27356,27370,27385],{"__ignoreMap":35},[51,27357,27358,27360,27362,27365,27367],{"class":53,"line":54},[51,27359,25540],{"class":68},[51,27361,27279],{"class":282},[51,27363,27364],{"class":175}," -y",[51,27366,24797],{"class":282},[51,27368,27369],{"class":282}," dnf-plugins-core\n",[51,27371,27372,27374,27376,27379,27382],{"class":53,"line":61},[51,27373,25540],{"class":68},[51,27375,27279],{"class":282},[51,27377,27378],{"class":282}," config-manager",[51,27380,27381],{"class":282}," addrepo",[51,27383,27384],{"class":175}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[51,27386,27387,27389,27392,27395,27398],{"class":53,"line":93},[51,27388,25540],{"class":68},[51,27390,27391],{"class":282}," sed",[51,27393,27394],{"class":175}," -i",[51,27396,27397],{"class":282}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[51,27399,27400],{"class":282}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[40,27402,27403],{},"最后安装：",[29,27405,27407],{"className":24785,"code":27406,"language":24787,"meta":35,"style":35},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[37,27408,27409],{"__ignoreMap":35},[51,27410,27411,27413,27415,27417,27419,27421,27423,27425],{"class":53,"line":54},[51,27412,25540],{"class":68},[51,27414,27279],{"class":282},[51,27416,24797],{"class":282},[51,27418,27217],{"class":282},[51,27420,27220],{"class":282},[51,27422,27223],{"class":282},[51,27424,27226],{"class":282},[51,27426,27229],{"class":282},[1233,27428,27430],{"id":27429},"_22配置环境","2.2.配置环境",[22960,27432,27434,27437],{"id":27433},"_221检查-docker-服务状态",[840,27435,27436],{},"2.2.1.检查 Docker 服务状态"," ：",[40,27439,27440],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[29,27442,27444],{"className":24785,"code":27443,"language":24787,"meta":35,"style":35},"systemctl status docker\n",[37,27445,27446],{"__ignoreMap":35},[51,27447,27448,27451,27454],{"class":53,"line":54},[51,27449,27450],{"class":68},"systemctl",[51,27452,27453],{"class":282}," status",[51,27455,27456],{"class":282}," docker\n",[22960,27458,27460,27437],{"id":27459},"_222启动-docker-服务",[840,27461,27462],{},"2.2.2.启动 Docker 服务",[40,27464,27465],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[29,27467,27469],{"className":24785,"code":27468,"language":24787,"meta":35,"style":35},"sudo systemctl start docker\n",[37,27470,27471],{"__ignoreMap":35},[51,27472,27473,27475,27478,27480],{"class":53,"line":54},[51,27474,25540],{"class":68},[51,27476,27477],{"class":282}," systemctl",[51,27479,5260],{"class":282},[51,27481,27456],{"class":282},[22960,27483,27485,27437],{"id":27484},"_223设置-docker-开机自启",[840,27486,27487],{},"2.2.3.设置 Docker 开机自启",[40,27489,27490],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[29,27492,27494],{"className":24785,"code":27493,"language":24787,"meta":35,"style":35},"sudo systemctl enable docker\n",[37,27495,27496],{"__ignoreMap":35},[51,27497,27498,27500,27502,27505],{"class":53,"line":54},[51,27499,25540],{"class":68},[51,27501,27477],{"class":282},[51,27503,27504],{"class":282}," enable",[51,27506,27456],{"class":282},[22960,27508,27510,14757,27513,14757,27518,27437],{"id":27509},"_224将用户添加到-docker-组",[840,27511,27512],{},"2.2.4.将用户添加到",[840,27514,27515],{},[37,27516,27517],{},"docker",[840,27519,27520],{},"组",[40,27522,27523,27524,27526],{},"使用以下命令将当前用户添加到 ",[37,27525,27517],{}," 组：",[29,27528,27530],{"className":24785,"code":27529,"language":24787,"meta":35,"style":35},"sudo usermod -aG docker $USER\n",[37,27531,27532],{"__ignoreMap":35},[51,27533,27534,27536,27539,27542,27544],{"class":53,"line":54},[51,27535,25540],{"class":68},[51,27537,27538],{"class":282}," usermod",[51,27540,27541],{"class":175}," -aG",[51,27543,27284],{"class":282},[51,27545,27546],{"class":72}," $USER\n",[22960,27548,27550,27437],{"id":27549},"_225退出并重新登录",[840,27551,27552],{},"2.2.5.退出并重新登录",[40,27554,27555],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[29,27557,27559],{"className":24785,"code":27558,"language":24787,"meta":35,"style":35},"newgrp docker\n",[37,27560,27561],{"__ignoreMap":35},[51,27562,27563,27566],{"class":53,"line":54},[51,27564,27565],{"class":68},"newgrp",[51,27567,27456],{"class":282},[22960,27569,27571,27437],{"id":27570},"_226重新启动-docker-服务如果需要",[840,27572,27573],{},"2.2.6.重新启动 Docker 服务（如果需要）",[40,27575,27576],{},"确保 Docker 服务正在运行，可以使用以下命令：",[29,27578,27579],{"className":24785,"code":27468,"language":24787,"meta":35,"style":35},[37,27580,27581],{"__ignoreMap":35},[51,27582,27583,27585,27587,27589],{"class":53,"line":54},[51,27584,25540],{"class":68},[51,27586,27477],{"class":282},[51,27588,5260],{"class":282},[51,27590,27456],{"class":282},[22960,27592,27594,27437],{"id":27593},"_227重启电脑后检查-docker-服务状态",[840,27595,27596],{},"2.2.7.重启电脑后检查 Docker 服务状态",[40,27598,27599],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[29,27601,27603],{"className":24785,"code":27602,"language":24787,"meta":35,"style":35},"sudo reboot\nsystemctl status docker\n",[37,27604,27605,27612],{"__ignoreMap":35},[51,27606,27607,27609],{"class":53,"line":54},[51,27608,25540],{"class":68},[51,27610,27611],{"class":282}," reboot\n",[51,27613,27614,27616,27618],{"class":53,"line":61},[51,27615,27450],{"class":68},[51,27617,27453],{"class":282},[51,27619,27456],{"class":282},[40,27621,27622],{},[2564,27623],{"alt":35,"src":27624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[40,27626,27627],{},"第三行显示enabled说明开机自启动成功",[40,27629,27630],{},"按q退出",[1233,27632,27634],{"id":27633},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[40,27636,27637],{},"优先使用linux来使用docker是比较好的",[40,27639,27640],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[40,27642,27643],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[40,27645,27646,27647],{},"官方下载安装:",[981,27648,27649],{"href":27649,"rel":27650},"https:\u002F\u002Fwww.docker.com\u002F",[24828],[40,27652,27653],{},"Windows的Docker显卡直通与USB直通:",[40,27655,27656],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[40,27658,27659],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[40,27661,27662],{},[2564,27663],{"alt":35,"src":27664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[40,27666,27667],{},[2564,27668],{"alt":35,"src":27669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[40,27671,27672],{},[2564,27673],{"alt":35,"src":27674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1179,27676,27677],{},"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":35,"searchDepth":61,"depth":61,"links":27679},[27680,27681,27682],{"id":26957,"depth":93,"text":26958},{"id":27429,"depth":93,"text":27430},{"id":27633,"depth":93,"text":27634},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26949,"description":35},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27689,"title":27690,"body":27691,"description":27698,"extension":1190,"meta":28391,"navigation":1192,"path":28392,"seo":28393,"stem":28394,"__hash__":28395},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27692,"toc":28385},[27693,27696,27699,27703,27708,27713,27716,27744,27749,27758,27761,27766,27770,27777,27782,27788,27792,27795,27799,27804,27896,27901,27919,27924,27945,27950,27966,27970,27975,28004,28009,28055,28060,28104,28112,28129,28134,28150,28155,28169,28172,28175,28178,28181,28210,28213,28218,28222,28225,28228,28234,28237,28240,28243,28305,28312,28317,28320,28338,28342,28345,28362,28365,28368,28382],[10,27694,27690],{"id":27695},"_3docker直通",[40,27697,27698],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[1233,27700,27702],{"id":27701},"_31usb直通","3.1.USB直通",[40,27704,27705],{},[2564,27706],{"alt":35,"src":27707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[19,27709,27710],{},[22,27711,27712],{},"方法一(不是很推荐新手)：",[40,27714,27715],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[29,27717,27719],{"className":24785,"code":27718,"language":24787,"meta":35,"style":35},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[37,27720,27721,27729,27734],{"__ignoreMap":35},[51,27722,27723,27726],{"class":53,"line":54},[51,27724,27725],{"class":68},"ls",[51,27727,27728],{"class":282}," \u002Fdev\n",[51,27730,27731],{"class":53,"line":61},[51,27732,27733],{"class":57},"#例如\n",[51,27735,27736,27739,27741],{"class":53,"line":93},[51,27737,27738],{"class":72},"--device",[51,27740,108],{"class":64},[51,27742,27743],{"class":282},"\u002Fdev\u002Ftty_USB0\n",[19,27745,27746],{"start":61},[22,27747,27748],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[29,27750,27752],{"className":24785,"code":27751,"language":24787,"meta":35,"style":35},"--privileged\n",[37,27753,27754],{"__ignoreMap":35},[51,27755,27756],{"class":53,"line":54},[51,27757,27751],{"class":68},[40,27759,27760],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[40,27762,27763],{},[2564,27764],{"alt":35,"src":27765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[1233,27767,27769],{"id":27768},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[40,27771,27772,27773,27776],{},"NVIDIA Container Toolkit使用户 ",[840,27774,27775],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[40,27778,27779],{},[2564,27780],{"alt":35,"src":27781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[40,27783,27784],{},[981,27785,27786],{"href":27786,"rel":27787},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24828],[22960,27789,27791],{"id":27790},"_321安装","3.2.1.安装",[40,27793,27794],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23872,27796,27798],{"id":27797},"_3211ubuntu","3.2.1.1.Ubuntu",[19,27800,27801],{},[22,27802,27803],{},"配置存储库 并更新",[29,27805,27807],{"className":24785,"code":27806,"language":24787,"meta":35,"style":35},"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",[37,27808,27809,27838,27858,27870,27882,27888],{"__ignoreMap":35},[51,27810,27811,27814,27817,27820,27822,27824,27827,27830,27833,27836],{"class":53,"line":54},[51,27812,27813],{"class":68},"curl",[51,27815,27816],{"class":175}," -fsSL",[51,27818,27819],{"class":282}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[51,27821,26073],{"class":64},[51,27823,27037],{"class":68},[51,27825,27826],{"class":282}," gpg",[51,27828,27829],{"class":175}," --dearmor",[51,27831,27832],{"class":175}," -o",[51,27834,27835],{"class":282}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[51,27837,25642],{"class":175},[51,27839,27840,27843,27845,27848,27851,27854,27856],{"class":53,"line":61},[51,27841,27842],{"class":72},"  && ",[51,27844,27813],{"class":68},[51,27846,27847],{"class":175}," -s",[51,27849,27850],{"class":175}," -L",[51,27852,27853],{"class":282}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[51,27855,26073],{"class":64},[51,27857,25642],{"class":175},[51,27859,27860,27863,27866,27868],{"class":53,"line":93},[51,27861,27862],{"class":68},"    sed",[51,27864,27865],{"class":282}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[51,27867,26073],{"class":64},[51,27869,25642],{"class":175},[51,27871,27872,27875,27877,27880],{"class":53,"line":99},[51,27873,27874],{"class":68},"    sudo",[51,27876,27180],{"class":282},[51,27878,27879],{"class":282}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[51,27881,25642],{"class":175},[51,27883,27884,27886],{"class":53,"line":120},[51,27885,27842],{"class":72},[51,27887,27139],{"class":175},[51,27889,27890,27892,27894],{"class":53,"line":129},[51,27891,27874],{"class":68},[51,27893,27040],{"class":282},[51,27895,27206],{"class":282},[19,27897,27898],{"start":61},[22,27899,27900],{},"安装nvidia-docker2",[29,27902,27904],{"className":24785,"code":27903,"language":24787,"meta":35,"style":35},"sudo apt-get install -y nvidia-docker2\n",[37,27905,27906],{"__ignoreMap":35},[51,27907,27908,27910,27912,27914,27916],{"class":53,"line":54},[51,27909,25540],{"class":68},[51,27911,27040],{"class":282},[51,27913,24797],{"class":282},[51,27915,27364],{"class":175},[51,27917,27918],{"class":282}," nvidia-docker2\n",[19,27920,27921],{"start":93},[22,27922,27923],{},"使用nvidia-ctk命令配置container runtime",[29,27925,27927],{"className":24785,"code":27926,"language":24787,"meta":35,"style":35},"sudo nvidia-ctk runtime configure --runtime=docker\n",[37,27928,27929],{"__ignoreMap":35},[51,27930,27931,27933,27936,27939,27942],{"class":53,"line":54},[51,27932,25540],{"class":68},[51,27934,27935],{"class":282}," nvidia-ctk",[51,27937,27938],{"class":282}," runtime",[51,27940,27941],{"class":282}," configure",[51,27943,27944],{"class":175}," --runtime=docker\n",[19,27946,27947],{"start":99},[22,27948,27949],{},"重启docker服务:",[29,27951,27953],{"className":24785,"code":27952,"language":24787,"meta":35,"style":35},"sudo systemctl restart docker\n",[37,27954,27955],{"__ignoreMap":35},[51,27956,27957,27959,27961,27964],{"class":53,"line":54},[51,27958,25540],{"class":68},[51,27960,27477],{"class":282},[51,27962,27963],{"class":282}," restart",[51,27965,27456],{"class":282},[23872,27967,27969],{"id":27968},"_3212fedora","3.2.1.2.Fedora",[19,27971,27972],{},[22,27973,27974],{},"配置存储库",[29,27976,27978],{"className":24785,"code":27977,"language":24787,"meta":35,"style":35},"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",[37,27979,27980,27995],{"__ignoreMap":35},[51,27981,27982,27984,27986,27988,27991,27993],{"class":53,"line":54},[51,27983,27813],{"class":68},[51,27985,27847],{"class":175},[51,27987,27850],{"class":175},[51,27989,27990],{"class":282}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[51,27992,26073],{"class":64},[51,27994,25642],{"class":175},[51,27996,27997,27999,28001],{"class":53,"line":61},[51,27998,25540],{"class":68},[51,28000,27180],{"class":282},[51,28002,28003],{"class":282}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[19,28005,28006],{"start":61},[22,28007,28008],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[29,28010,28012],{"className":24785,"code":28011,"language":24787,"meta":35,"style":35},"# 如果是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",[37,28013,28014,28019,28033,28037,28042],{"__ignoreMap":35},[51,28015,28016],{"class":53,"line":54},[51,28017,28018],{"class":57},"# 如果是RHEL或者Rocky（DNF4）\n",[51,28020,28021,28023,28025,28027,28030],{"class":53,"line":61},[51,28022,25540],{"class":68},[51,28024,27279],{"class":282},[51,28026,27378],{"class":282},[51,28028,28029],{"class":175}," --add-repo",[51,28031,28032],{"class":282}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[51,28034,28035],{"class":53,"line":93},[51,28036,3480],{"emptyLinePlaceholder":1192},[51,28038,28039],{"class":53,"line":99},[51,28040,28041],{"class":57},"# 如果是Feodra41+（DNF5）\n",[51,28043,28044,28046,28048,28050,28052],{"class":53,"line":120},[51,28045,25540],{"class":68},[51,28047,27279],{"class":282},[51,28049,27378],{"class":282},[51,28051,27381],{"class":282},[51,28053,28054],{"class":175}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[19,28056,28057],{"start":93},[22,28058,28059],{},"安装NVIDIA Container Toolki包",[29,28061,28063],{"className":24785,"code":28062,"language":24787,"meta":35,"style":35},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[37,28064,28065,28070,28083,28087,28092],{"__ignoreMap":35},[51,28066,28067],{"class":53,"line":54},[51,28068,28069],{"class":57},"# 如果是RHEL或者Rocky\n",[51,28071,28072,28074,28076,28078,28080],{"class":53,"line":61},[51,28073,25540],{"class":68},[51,28075,27279],{"class":282},[51,28077,24797],{"class":282},[51,28079,27364],{"class":175},[51,28081,28082],{"class":282}," nvidia-container-toolkit\n",[51,28084,28085],{"class":53,"line":93},[51,28086,3480],{"emptyLinePlaceholder":1192},[51,28088,28089],{"class":53,"line":99},[51,28090,28091],{"class":57},"# 如果是Fedora\n",[51,28093,28094,28096,28098,28100,28102],{"class":53,"line":120},[51,28095,25540],{"class":68},[51,28097,27279],{"class":282},[51,28099,24797],{"class":282},[51,28101,27364],{"class":175},[51,28103,28082],{"class":282},[19,28105,28106],{"start":99},[22,28107,28108,28109,28111],{},"安装nvidia-docker2 ： 在Fedora上使用",[37,28110,27254],{},"进行安装",[29,28113,28115],{"className":24785,"code":28114,"language":24787,"meta":35,"style":35},"sudo dnf install -y nvidia-docker2\n",[37,28116,28117],{"__ignoreMap":35},[51,28118,28119,28121,28123,28125,28127],{"class":53,"line":54},[51,28120,25540],{"class":68},[51,28122,27279],{"class":282},[51,28124,24797],{"class":282},[51,28126,27364],{"class":175},[51,28128,27918],{"class":282},[19,28130,28131],{"start":120},[22,28132,28133],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[29,28135,28136],{"className":24785,"code":27926,"language":24787,"meta":35,"style":35},[37,28137,28138],{"__ignoreMap":35},[51,28139,28140,28142,28144,28146,28148],{"class":53,"line":54},[51,28141,25540],{"class":68},[51,28143,27935],{"class":282},[51,28145,27938],{"class":282},[51,28147,27941],{"class":282},[51,28149,27944],{"class":175},[19,28151,28152],{"start":129},[22,28153,28154],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[29,28156,28157],{"className":24785,"code":27952,"language":24787,"meta":35,"style":35},[37,28158,28159],{"__ignoreMap":35},[51,28160,28161,28163,28165,28167],{"class":53,"line":54},[51,28162,25540],{"class":68},[51,28164,27477],{"class":282},[51,28166,27963],{"class":282},[51,28168,27456],{"class":282},[40,28170,28171],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[40,28173,28174],{},"方法：",[40,28176,28177],{},"1️⃣nvidia-smi",[40,28179,28180],{},"2️⃣运行nvidia cuda 容器进行测试",[29,28182,28184],{"className":24785,"code":28183,"language":24787,"meta":35,"style":35},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[37,28185,28186],{"__ignoreMap":35},[51,28187,28188,28190,28192,28195,28198,28201,28204,28207],{"class":53,"line":54},[51,28189,25540],{"class":68},[51,28191,27284],{"class":282},[51,28193,28194],{"class":282}," run",[51,28196,28197],{"class":175}," --rm",[51,28199,28200],{"class":175}," --gpus",[51,28202,28203],{"class":282}," all",[51,28205,28206],{"class":282}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[51,28208,28209],{"class":282}," nvidia-smi\n",[40,28211,28212],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[40,28214,28215],{},[2564,28216],{"alt":35,"src":28217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[1233,28219,28221],{"id":28220},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[40,28223,28224],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[40,28226,28227],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[40,28229,28230],{},[981,28231,28232],{"href":28232,"rel":28233},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24828],[40,28235,28236],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[40,28238,28239],{},"我们只需要找到对应的Docker镜像当底包即可。",[40,28241,28242],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1393,28244,28245,28261],{},[1396,28246,28247],{},[1399,28248,28249,28252,28255,28258],{},[1402,28250,28251],{"align":24699},"镜像类型",[1402,28253,28254],{"align":24699},"适用场景",[1402,28256,28257],{"align":24699},"示例标签",[1402,28259,28260],{"align":24699},"大小",[1439,28262,28263,28277,28291],{},[1399,28264,28265,28268,28271,28274],{},[1444,28266,28267],{"align":24699},"base",[1444,28269,28270],{"align":24699},"仅需 CUDA 运行时库",[1444,28272,28273],{"align":24699},"12.4.0-base-ubuntu22.04",[1444,28275,28276],{"align":24699},"~240MB",[1399,28278,28279,28282,28285,28288],{},[1444,28280,28281],{"align":24699},"runtime",[1444,28283,28284],{"align":24699},"部署编译后的应用（含数学库）",[1444,28286,28287],{"align":24699},"12.4.0-runtime-ubuntu22.04",[1444,28289,28290],{"align":24699},"~2GB",[1399,28292,28293,28296,28299,28302],{},[1444,28294,28295],{"align":24699},"devel",[1444,28297,28298],{"align":24699},"开发环境（含编译工具）",[1444,28300,28301],{"align":24699},"12.4.0-devel-ubuntu22.04",[1444,28303,28304],{"align":24699},"~3GB",[40,28306,28307,28308,28311],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[37,28309,28310],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[40,28313,28314],{},[2564,28315],{"alt":35,"src":28316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[40,28318,28319],{},"在dockerfile里就可以开头这么写：",[29,28321,28323],{"className":24785,"code":28322,"language":24787,"meta":35,"style":35},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[37,28324,28325,28330],{"__ignoreMap":35},[51,28326,28327],{"class":53,"line":54},[51,28328,28329],{"class":57},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[51,28331,28332,28335],{"class":53,"line":61},[51,28333,28334],{"class":68},"FROM",[51,28336,28337],{"class":282}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[1233,28339,28341],{"id":28340},"_34配置以太网","3.4.配置以太网",[40,28343,28344],{},"指定网络模式",[29,28346,28348],{"className":24785,"code":28347,"language":24787,"meta":35,"style":35},"--net=host \\\n",[37,28349,28350],{"__ignoreMap":35},[51,28351,28352,28355,28357,28360],{"class":53,"line":54},[51,28353,28354],{"class":72},"--net",[51,28356,108],{"class":64},[51,28358,28359],{"class":282},"host",[51,28361,25642],{"class":68},[40,28363,28364],{},"启动参数里加上这行即可。具体在下方",[40,28366,28367],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1000,28369,28370,28373,28376,28379],{},[22,28371,28372],{},"--net=bridge:默认选项，表示连接到默认的网桥",[22,28374,28375],{},"--net=host:容器使用宿主机的网络",[22,28377,28378],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[22,28380,28381],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1179,28383,28384],{},"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":35,"searchDepth":61,"depth":61,"links":28386},[28387,28388,28389,28390],{"id":27701,"depth":93,"text":27702},{"id":27768,"depth":93,"text":27769},{"id":28220,"depth":93,"text":28221},{"id":28340,"depth":93,"text":28341},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27690,"description":27698},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28397,"title":28398,"body":28399,"description":28406,"extension":1190,"meta":28412,"navigation":1192,"path":28413,"seo":28414,"stem":28415,"__hash__":28416},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28400,"toc":28410},[28401,28404,28407],[10,28402,28398],{"id":28403},"_4dockerhub换源",[40,28405,28406],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[40,28408,28409],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":35,"searchDepth":61,"depth":61,"links":28411},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28398,"description":28406},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28418,"title":28419,"body":28420,"description":35,"extension":1190,"meta":29432,"navigation":1192,"path":29433,"seo":29434,"stem":29435,"__hash__":29436},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28421,"toc":29427},[28422,28425,28429,28435,28439,28442,28782,28785,28788,28791,28796,28801,28804,28807,28810,28813,28832,28835,28846,28852,29034,29044,29060,29323,29325,29350,29365,29374,29424],[10,28423,28419],{"id":28424},"_5docker命令学习",[1233,28426,28428],{"id":28427},"_51参考文档","5.1.参考文档",[40,28430,28431],{},[981,28432,28433],{"href":28433,"rel":28434},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24828],[1233,28436,28438],{"id":28437},"_52常用命令","5.2.常用命令",[40,28440,28441],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1393,28443,28444,28457],{},[1396,28445,28446],{},[1399,28447,28448,28451,28454],{},[1402,28449,28450],{"align":24699},"命令",[1402,28452,28453],{"align":24699},"描述",[1402,28455,28456],{"align":24699},"示例",[1439,28458,28459,28470,28481,28492,28503,28514,28525,28536,28546,28557,28568,28579,28589,28600,28611,28622,28632,28642,28652,28662,28673,28684,28695,28706,28717,28728,28738,28749,28760,28771],{},[1399,28460,28461,28464,28467],{},[1444,28462,28463],{"align":24699},"docker run",[1444,28465,28466],{"align":24699},"创建并启动一个新的容器。",[1444,28468,28469],{"align":24699},"docker run -it ubuntu bash",[1399,28471,28472,28475,28478],{},[1444,28473,28474],{"align":24699},"docker build",[1444,28476,28477],{"align":24699},"通过指定的 Dockerfile 创建一个新的镜像。",[1444,28479,28480],{"align":24699},"docker build -t myimage .",[1399,28482,28483,28486,28489],{},[1444,28484,28485],{"align":24699},"docker pull",[1444,28487,28488],{"align":24699},"从 Docker 仓库拉取镜像。",[1444,28490,28491],{"align":24699},"docker pull ubuntu",[1399,28493,28494,28497,28500],{},[1444,28495,28496],{"align":24699},"docker push",[1444,28498,28499],{"align":24699},"将本地镜像推送到 Docker 仓库。",[1444,28501,28502],{"align":24699},"docker push myimage",[1399,28504,28505,28508,28511],{},[1444,28506,28507],{"align":24699},"docker stop",[1444,28509,28510],{"align":24699},"停止一个正在运行的容器。",[1444,28512,28513],{"align":24699},"docker stop container_id",[1399,28515,28516,28519,28522],{},[1444,28517,28518],{"align":24699},"docker start",[1444,28520,28521],{"align":24699},"启动一个已经存在的容器。",[1444,28523,28524],{"align":24699},"docker start container_id",[1399,28526,28527,28530,28533],{},[1444,28528,28529],{"align":24699},"docker restart",[1444,28531,28532],{"align":24699},"重新启动容器。",[1444,28534,28535],{"align":24699},"docker restart container_id",[1399,28537,28538,28541,28544],{},[1444,28539,28540],{"align":24699},"docker ps",[1444,28542,28543],{"align":24699},"列出当前正在运行的容器。",[1444,28545,28540],{"align":24699},[1399,28547,28548,28551,28554],{},[1444,28549,28550],{"align":24699},"docker rm",[1444,28552,28553],{"align":24699},"删除一个或多个停止的容器。",[1444,28555,28556],{"align":24699},"docker rm container_id",[1399,28558,28559,28562,28565],{},[1444,28560,28561],{"align":24699},"docker exec",[1444,28563,28564],{"align":24699},"在一个正在运行的容器中执行命令。",[1444,28566,28567],{"align":24699},"docker exec -it container_id bash",[1399,28569,28570,28573,28576],{},[1444,28571,28572],{"align":24699},"docker logs",[1444,28574,28575],{"align":24699},"查看容器的日志输出。",[1444,28577,28578],{"align":24699},"docker logs container_id",[1399,28580,28581,28584,28587],{},[1444,28582,28583],{"align":24699},"docker images",[1444,28585,28586],{"align":24699},"列出本地所有镜像。",[1444,28588,28583],{"align":24699},[1399,28590,28591,28594,28597],{},[1444,28592,28593],{"align":24699},"docker rmi",[1444,28595,28596],{"align":24699},"删除一个或多个镜像。",[1444,28598,28599],{"align":24699},"docker rmi myimage",[1399,28601,28602,28605,28608],{},[1444,28603,28604],{"align":24699},"docker network",[1444,28606,28607],{"align":24699},"管理 Docker 网络。",[1444,28609,28610],{"align":24699},"docker network ls",[1399,28612,28613,28616,28619],{},[1444,28614,28615],{"align":24699},"docker volume",[1444,28617,28618],{"align":24699},"管理 Docker 数据卷。",[1444,28620,28621],{"align":24699},"docker volume ls",[1399,28623,28624,28627,28630],{},[1444,28625,28626],{"align":24699},"docker-compose up",[1444,28628,28629],{"align":24699},"启动 docker-compose.yml 中定义的所有服务。",[1444,28631,28626],{"align":24699},[1399,28633,28634,28637,28640],{},[1444,28635,28636],{"align":24699},"docker-compose down",[1444,28638,28639],{"align":24699},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1444,28641,28636],{"align":24699},[1399,28643,28644,28647,28650],{},[1444,28645,28646],{"align":24699},"docker info",[1444,28648,28649],{"align":24699},"显示 Docker 系统的详细信息。",[1444,28651,28646],{"align":24699},[1399,28653,28654,28657,28660],{},[1444,28655,28656],{"align":24699},"docker stats",[1444,28658,28659],{"align":24699},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1444,28661,28656],{"align":24699},[1399,28663,28664,28667,28670],{},[1444,28665,28666],{"align":24699},"docker inspect",[1444,28668,28669],{"align":24699},"查看容器或镜像的详细信息（JSON 格式）。",[1444,28671,28672],{"align":24699},"docker inspect container_id",[1399,28674,28675,28678,28681],{},[1444,28676,28677],{"align":24699},"docker save",[1444,28679,28680],{"align":24699},"将一个镜像保存为 tar 文件。",[1444,28682,28683],{"align":24699},"docker save -o myimage.tar myimage",[1399,28685,28686,28689,28692],{},[1444,28687,28688],{"align":24699},"docker load",[1444,28690,28691],{"align":24699},"从 tar 文件中加载镜像。",[1444,28693,28694],{"align":24699},"docker load -i myimage.tar",[1399,28696,28697,28700,28703],{},[1444,28698,28699],{"align":24699},"docker tag",[1444,28701,28702],{"align":24699},"为镜像添加标签（tag）。",[1444,28704,28705],{"align":24699},"docker tag myimage myimage:v1",[1399,28707,28708,28711,28714],{},[1444,28709,28710],{"align":24699},"docker buildx build",[1444,28712,28713],{"align":24699},"使用 Buildx 构建多架构镜像。",[1444,28715,28716],{"align":24699},"docker buildx build -t myimage .",[1399,28718,28719,28722,28725],{},[1444,28720,28721],{"align":24699},"docker buildx create",[1444,28723,28724],{"align":24699},"创建一个新的 Buildx 构建实例。",[1444,28726,28727],{"align":24699},"docker buildx create –use",[1399,28729,28730,28733,28736],{},[1444,28731,28732],{"align":24699},"docker buildx ls",[1444,28734,28735],{"align":24699},"列出所有可用的 Buildx 构建实例。",[1444,28737,28732],{"align":24699},[1399,28739,28740,28743,28746],{},[1444,28741,28742],{"align":24699},"docker buildx use",[1444,28744,28745],{"align":24699},"设置当前的 Buildx 构建实例。",[1444,28747,28748],{"align":24699},"docker buildx use mybuilder",[1399,28750,28751,28754,28757],{},[1444,28752,28753],{"align":24699},"docker buildx bake",[1444,28755,28756],{"align":24699},"使用 Bake 文件批量构建镜像。",[1444,28758,28759],{"align":24699},"docker buildx bake -f bake.hcl",[1399,28761,28762,28765,28768],{},[1444,28763,28764],{"align":24699},"docker buildx build –push",[1444,28766,28767],{"align":24699},"构建镜像并推送到镜像仓库。",[1444,28769,28770],{"align":24699},"docker buildx build –push -t myimage .",[1399,28772,28773,28776,28779],{},[1444,28774,28775],{"align":24699},"docker buildx build –platform",[1444,28777,28778],{"align":24699},"构建镜像并为多个平台生成支持。",[1444,28780,28781],{"align":24699},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[40,28783,28784],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[40,28786,28787],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[40,28789,28790],{},"docker images 可以查看已经下载的镜像",[40,28792,28793],{},[2564,28794],{"alt":35,"src":28795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[40,28797,28798],{},[840,28799,28800],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[40,28802,28803],{},"docker rmi $(docker images -q) 删除所有的镜像",[40,28805,28806],{},"docker container logs 查看容器日志",[40,28808,28809],{},"docker top 查看容器里的进程",[40,28811,28812],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[29,28814,28816],{"className":24785,"code":28815,"language":24787,"meta":35,"style":35},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[37,28817,28818],{"__ignoreMap":35},[51,28819,28820,28823,28826,28829],{"class":53,"line":54},[51,28821,28822],{"class":68},"如：docker",[51,28824,28825],{"class":282}," cp",[51,28827,28828],{"class":282}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[51,28830,28831],{"class":282}," \u002Fmydata\u002Fnginx\n",[40,28833,28834],{},"docker run时在启动容器的时候会有几个常用的选项：",[1000,28836,28837,28840,28843],{},[22,28838,28839],{},"-d选项：表示后台运行",[22,28841,28842],{},"-P选项：随机端口映射",[22,28844,28845],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[1233,28847,28849],{"id":28848},"_53run命令的参数非常重要",[840,28850,28851],{},"5.3.run命令的参数（非常重要）",[1393,28853,28854,28867],{},[1396,28855,28856],{},[1399,28857,28858,28861,28864],{},[1402,28859,28860],{"align":24699},"参数\u002F配置",[1402,28862,28863],{"align":24699},"功能说明",[1402,28865,28866],{"align":24699},"重要性与参考依据",[1439,28868,28869,28880,28891,28902,28913,28924,28935,28946,28957,28968,28979,28990,29001,29012,29023],{},[1399,28870,28871,28874,28877],{},[1444,28872,28873],{"align":24699},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1444,28875,28876],{"align":24699},"指定容器名称，便于后续管理",[1444,28878,28879],{"align":24699},"替代随机生成的容器名。",[1399,28881,28882,28885,28888],{},[1444,28883,28884],{"align":24699},"–gpus all",[1444,28886,28887],{"align":24699},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1444,28889,28890],{"align":24699},"用于CUDA加速等GPU依赖任务。",[1399,28892,28893,28896,28899],{},[1444,28894,28895],{"align":24699},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1444,28897,28898],{"align":24699},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1444,28900,28901],{"align":24699},"确保容器内GPU功能完整67。",[1399,28903,28904,28907,28910],{},[1444,28905,28906],{"align":24699},"-dit",[1444,28908,28909],{"align":24699},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1444,28911,28912],{"align":24699},"允许容器在后台运行并支持交互操作。",[1399,28914,28915,28918,28921],{},[1444,28916,28917],{"align":24699},"–privileged",[1444,28919,28920],{"align":24699},"赋予容器完全主机权限（可访问设备、内核模块等）",[1444,28922,28923],{"align":24699},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1399,28925,28926,28929,28932],{},[1444,28927,28928],{"align":24699},"–net=host",[1444,28930,28931],{"align":24699},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1444,28933,28934],{"align":24699},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1399,28936,28937,28940,28943],{},[1444,28938,28939],{"align":24699},"–group-add audio–group-add video–group-add dialout",[1444,28941,28942],{"align":24699},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1444,28944,28945],{"align":24699},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1399,28947,28948,28951,28954],{},[1444,28949,28950],{"align":24699},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1444,28952,28953],{"align":24699},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1444,28955,28956],{"align":24699},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1399,28958,28959,28962,28965],{},[1444,28960,28961],{"align":24699},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1444,28963,28964],{"align":24699},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1444,28966,28967],{"align":24699},"实现容器内图形显示。",[1399,28969,28970,28973,28976],{},[1444,28971,28972],{"align":24699},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1444,28974,28975],{"align":24699},"挂载X11认证文件（只读）",[1444,28977,28978],{"align":24699},"确保容器有权连接宿主机显示服务。",[1399,28980,28981,28984,28987],{},[1444,28982,28983],{"align":24699},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1444,28985,28986],{"align":24699},"挂载Wayland显示协议相关目录",[1444,28988,28989],{"align":24699},"支持Wayland协议的图形显示。",[1399,28991,28992,28995,28998],{},[1444,28993,28994],{"align":24699},"–ulimit nofile=1024:524288",[1444,28996,28997],{"align":24699},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1444,28999,29000],{"align":24699},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1399,29002,29003,29006,29009],{},[1444,29004,29005],{"align":24699},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1444,29007,29008],{"align":24699},"挂载宿主机用户目录到容器内同名路径",[1444,29010,29011],{"align":24699},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1399,29013,29014,29017,29020],{},[1444,29015,29016],{"align":24699},"-w \u002Fhome\u002Ftungchiahui",[1444,29018,29019],{"align":24699},"设置容器启动后的默认工作目录",[1444,29021,29022],{"align":24699},"直接进入项目路径，方便执行命令2324。",[1399,29024,29025,29028,29031],{},[1444,29026,29027],{"align":24699},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1444,29029,29030],{"align":24699},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1444,29032,29033],{"align":24699},"提供预配置的深度学习与机器人开发环境。",[40,29035,29036,29037,29039,29040,29043],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[37,29038,25540],{},"加不加",[37,29041,29042],{},"sudo -E","都无所谓。",[40,29045,29046,29047,29049,29050,29052,29053,29056,29057,29059],{},"用户已经被加到docker组了，不用",[37,29048,25540],{},"也行跑，其次，",[37,29051,25540],{},"运行的话，你的",[37,29054,29055],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[37,29058,29055],{},"更不可能变了。",[29,29061,29063],{"className":24785,"code":29062,"language":24787,"meta":35,"style":35},"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",[37,29064,29065,29078,29088,29098,29110,29117,29124,29131,29141,29150,29159,29173,29185,29197,29206,29216,29225,29240,29273,29300,29311,29318],{"__ignoreMap":35},[51,29066,29067,29069,29071,29073,29076],{"class":53,"line":54},[51,29068,25540],{"class":68},[51,29070,27284],{"class":282},[51,29072,28194],{"class":282},[51,29074,29075],{"class":175}," --name=ros_opencv_cuda",[51,29077,25642],{"class":175},[51,29079,29080,29083,29086],{"class":53,"line":61},[51,29081,29082],{"class":72},"--gpus ",[51,29084,29085],{"class":282},"all",[51,29087,25642],{"class":175},[51,29089,29090,29093,29096],{"class":53,"line":93},[51,29091,29092],{"class":72},"-e ",[51,29094,29095],{"class":282},"NVIDIA_DRIVER_CAPABILITIES=all",[51,29097,25642],{"class":175},[51,29099,29100,29102,29105,29108],{"class":53,"line":99},[51,29101,29092],{"class":72},[51,29103,29104],{"class":282},"DISPLAY=",[51,29106,29107],{"class":72},"$DISPLAY ",[51,29109,27139],{"class":175},[51,29111,29112,29115],{"class":53,"line":120},[51,29113,29114],{"class":72},"-dit ",[51,29116,27139],{"class":175},[51,29118,29119,29122],{"class":53,"line":129},[51,29120,29121],{"class":72},"--privileged ",[51,29123,27139],{"class":175},[51,29125,29126,29129],{"class":53,"line":206},[51,29127,29128],{"class":72},"--net=host ",[51,29130,27139],{"class":175},[51,29132,29133,29136,29139],{"class":53,"line":212},[51,29134,29135],{"class":72},"--group-add ",[51,29137,29138],{"class":282},"audio",[51,29140,25642],{"class":175},[51,29142,29143,29145,29148],{"class":53,"line":227},[51,29144,29135],{"class":72},[51,29146,29147],{"class":282},"video",[51,29149,25642],{"class":175},[51,29151,29152,29154,29157],{"class":53,"line":370},[51,29153,29135],{"class":72},[51,29155,29156],{"class":282},"dialout",[51,29158,25642],{"class":175},[51,29160,29161,29163,29166,29168,29171],{"class":53,"line":387},[51,29162,29092],{"class":72},[51,29164,29165],{"class":282},"XAUTHORITY=",[51,29167,29055],{"class":72},[51,29169,29170],{"class":282},"\u002F.Xauthority",[51,29172,25642],{"class":175},[51,29174,29175,29177,29180,29183],{"class":53,"line":404},[51,29176,29092],{"class":72},[51,29178,29179],{"class":282},"WAYLAND_DISPLAY=",[51,29181,29182],{"class":72},"$WAYLAND_DISPLAY ",[51,29184,27139],{"class":175},[51,29186,29187,29189,29192,29195],{"class":53,"line":415},[51,29188,29092],{"class":72},[51,29190,29191],{"class":282},"XDG_RUNTIME_DIR=",[51,29193,29194],{"class":72},"$XDG_RUNTIME_DIR ",[51,29196,27139],{"class":175},[51,29198,29199,29201,29204],{"class":53,"line":420},[51,29200,29092],{"class":72},[51,29202,29203],{"class":282},"QT_QPA_PLATFORM=xcb",[51,29205,25642],{"class":175},[51,29207,29208,29211,29214],{"class":53,"line":429},[51,29209,29210],{"class":72},"-v ",[51,29212,29213],{"class":282},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[51,29215,25642],{"class":175},[51,29217,29218,29220,29223],{"class":53,"line":434},[51,29219,29210],{"class":72},[51,29221,29222],{"class":282},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[51,29224,25642],{"class":175},[51,29226,29227,29230,29233,29235,29238],{"class":53,"line":448},[51,29228,29229],{"class":72},"-v $HOME",[51,29231,29232],{"class":282},"\u002F.Xauthority:",[51,29234,29055],{"class":72},[51,29236,29237],{"class":282},"\u002F.Xauthority:ro",[51,29239,25642],{"class":175},[51,29241,29242,29244,29247,29249,29252,29255,29257,29260,29262,29264,29266,29268,29271],{"class":53,"line":462},[51,29243,29210],{"class":72},[51,29245,29246],{"class":282},"\u002Frun\u002Fuser\u002F",[51,29248,26063],{"class":72},[51,29250,29251],{"class":68},"id",[51,29253,29254],{"class":175}," -u",[51,29256,1677],{"class":72},[51,29258,29259],{"class":282},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[51,29261,26063],{"class":72},[51,29263,29251],{"class":68},[51,29265,29254],{"class":175},[51,29267,1677],{"class":72},[51,29269,29270],{"class":282},"\u002Fwayland-0",[51,29272,25642],{"class":175},[51,29274,29275,29277,29279,29281,29283,29285,29287,29290,29292,29294,29296,29298],{"class":53,"line":470},[51,29276,29210],{"class":72},[51,29278,29246],{"class":282},[51,29280,26063],{"class":72},[51,29282,29251],{"class":68},[51,29284,29254],{"class":175},[51,29286,1677],{"class":72},[51,29288,29289],{"class":282},":\u002Frun\u002Fuser\u002F",[51,29291,26063],{"class":72},[51,29293,29251],{"class":68},[51,29295,29254],{"class":175},[51,29297,14676],{"class":72},[51,29299,27139],{"class":175},[51,29301,29302,29304,29306,29309],{"class":53,"line":2783},[51,29303,29229],{"class":72},[51,29305,984],{"class":282},[51,29307,29308],{"class":72},"$HOME ",[51,29310,27139],{"class":175},[51,29312,29313,29316],{"class":53,"line":2788},[51,29314,29315],{"class":72},"-w $HOME ",[51,29317,27139],{"class":175},[51,29319,29320],{"class":53,"line":2817},[51,29321,29322],{"class":72},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[40,29324,9987],{},[19,29326,29327,29335,29338,29341],{},[22,29328,29329,14757,29331,29334],{},[37,29330,29095],{},[37,29332,29333],{},"--gpus all","没有英伟达显卡请注释。",[22,29336,29337],{},"--name后面请自己为容器起名。",[22,29339,29340],{},"最后一行仓库名称请你自己找对应的镜像填上。",[22,29342,29343,29344,29349],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24516,29345,29346],{},[840,29347,29348],{},"请不要加","。",[29,29351,29353],{"className":24785,"code":29352,"language":24787,"meta":35,"style":35},"--ulimit nofile=1024:524288 \\\n",[37,29354,29355],{"__ignoreMap":35},[51,29356,29357,29360,29363],{"class":53,"line":54},[51,29358,29359],{"class":68},"--ulimit",[51,29361,29362],{"class":282}," nofile=1024:524288",[51,29364,25642],{"class":175},[40,29366,29367,29368,29373],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24516,29369,29370],{},[840,29371,29372],{},"不建议","**.**",[29,29375,29377],{"className":24785,"code":29376,"language":24787,"meta":35,"style":35},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[37,29378,29379,29406,29415],{"__ignoreMap":35},[51,29380,29381,29384,29387,29389,29391,29393,29395,29397,29399,29402,29404],{"class":53,"line":54},[51,29382,29383],{"class":68},"--user",[51,29385,29386],{"class":72}," $(",[51,29388,29251],{"class":68},[51,29390,29254],{"class":175},[51,29392,1677],{"class":72},[51,29394,984],{"class":282},[51,29396,26063],{"class":72},[51,29398,29251],{"class":68},[51,29400,29401],{"class":175}," -g",[51,29403,14676],{"class":72},[51,29405,27139],{"class":175},[51,29407,29408,29410,29413],{"class":53,"line":61},[51,29409,29210],{"class":72},[51,29411,29412],{"class":282},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[51,29414,25642],{"class":175},[51,29416,29417,29419,29422],{"class":53,"line":93},[51,29418,29210],{"class":72},[51,29420,29421],{"class":282},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[51,29423,25642],{"class":175},[1179,29425,29426],{},"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":35,"searchDepth":61,"depth":61,"links":29428},[29429,29430,29431],{"id":28427,"depth":93,"text":28428},{"id":28437,"depth":93,"text":28438},{"id":28848,"depth":93,"text":28851},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28419,"description":35},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29438,"title":29439,"body":29440,"description":35,"extension":1190,"meta":31063,"navigation":1192,"path":31064,"seo":31065,"stem":31066,"__hash__":31067},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29441,"toc":31058},[29442,29445,29449,29452,29674,29678,29682,29685,29791,29796,29799,29804,29807,29812,29815,29820,29823,29835,29838,29843,29850,29878,29885,29961,29966,29969,29992,29994,30069,30074,30077,30081,30089,30094,30099,30103,30114,30120,30123,30126,30150,30153,30156,30184,30187,30190,30655,30658,30663,30668,30672,30695,30700,30704,30708,30711,30714,30717,30744,30747,30750,30768,30771,30774,30796,30804,30809,30814,30818,30821,30824,30827,30830,30875,30878,30896,30899,30904,30907,30928,30931,30987,30990,30995,30999,31002,31009,31012,31015,31020,31023,31039,31042,31055],[10,29443,29439],{"id":29444},"_6手动创建docker镜像",[1233,29446,29448],{"id":29447},"_61dockerfile","6.1.DockerFile",[40,29450,29451],{},"常用命令：",[1393,29453,29454,29465],{},[1396,29455,29456],{},[1399,29457,29458,29461,29463],{},[1402,29459,29460],{"align":24699},"指令",[1402,29462,26833],{"align":24699},[1402,29464,28456],{"align":24699},[1439,29466,29467,29477,29493,29504,29515,29526,29537,29548,29559,29573,29587,29598,29612,29623,29634,29648,29663],{},[1399,29468,29469,29471,29474],{},[1444,29470,28334],{"align":24699},[1444,29472,29473],{"align":24699},"指定基础镜像，是 Dockerfile 的起点",[1444,29475,29476],{"align":24699},"FROM ubuntu:22.04",[1399,29478,29479,29482,29485],{},[1444,29480,29481],{"align":24699},"LABEL",[1444,29483,29484],{"align":24699},"添加元数据（如作者、版本等）",[1444,29486,29487,29488,29492],{"align":24699},"LABEL maintainer=”",[981,29489,29491],{"href":29490},"mailto:you@example.com","you@example.com","”",[1399,29494,29495,29498,29501],{},[1444,29496,29497],{"align":24699},"ENV",[1444,29499,29500],{"align":24699},"设置环境变量",[1444,29502,29503],{"align":24699},"ENV PORT=8080",[1399,29505,29506,29509,29512],{},[1444,29507,29508],{"align":24699},"ARG",[1444,29510,29511],{"align":24699},"构建参数，只在构建期间可用",[1444,29513,29514],{"align":24699},"ARG VERSION=1.0",[1399,29516,29517,29520,29523],{},[1444,29518,29519],{"align":24699},"RUN",[1444,29521,29522],{"align":24699},"构建镜像时运行命令",[1444,29524,29525],{"align":24699},"RUN apt-get update && apt-get install -y curl",[1399,29527,29528,29531,29534],{},[1444,29529,29530],{"align":24699},"COPY",[1444,29532,29533],{"align":24699},"复制文件到镜像中",[1444,29535,29536],{"align":24699},"COPY . \u002Fapp",[1399,29538,29539,29542,29545],{},[1444,29540,29541],{"align":24699},"ADD",[1444,29543,29544],{"align":24699},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1444,29546,29547],{"align":24699},"ADD archive.tar.gz \u002Fdata\u002F",[1399,29549,29550,29553,29556],{},[1444,29551,29552],{"align":24699},"WORKDIR",[1444,29554,29555],{"align":24699},"设置工作目录",[1444,29557,29558],{"align":24699},"WORKDIR \u002Fopt",[1399,29560,29561,29564,29567],{},[1444,29562,29563],{"align":24699},"CMD",[1444,29565,29566],{"align":24699},"设置容器启动时默认命令（可被 docker run 覆盖）",[1444,29568,29569,29570],{"align":24699},"CMD ",[51,29571,29572],{},"“node”, “index.js”",[1399,29574,29575,29578,29581],{},[1444,29576,29577],{"align":24699},"ENTRYPOINT",[1444,29579,29580],{"align":24699},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1444,29582,29583,29584],{"align":24699},"ENTRYPOINT ",[51,29585,29586],{},"“python3”",[1399,29588,29589,29592,29595],{},[1444,29590,29591],{"align":24699},"EXPOSE",[1444,29593,29594],{"align":24699},"声明镜像内服务监听的端口（不会自动映射）",[1444,29596,29597],{"align":24699},"EXPOSE 80",[1399,29599,29600,29603,29606],{},[1444,29601,29602],{"align":24699},"VOLUME",[1444,29604,29605],{"align":24699},"声明数据卷挂载点",[1444,29607,29608,29609],{"align":24699},"VOLUME ",[51,29610,29611],{},"“\u002Fdata”",[1399,29613,29614,29617,29620],{},[1444,29615,29616],{"align":24699},"USER",[1444,29618,29619],{"align":24699},"设置后续命令执行的用户",[1444,29621,29622],{"align":24699},"USER appuser",[1399,29624,29625,29628,29631],{},[1444,29626,29627],{"align":24699},"ONBUILD",[1444,29629,29630],{"align":24699},"当镜像作为其他镜像基础镜像时触发的构建指令",[1444,29632,29633],{"align":24699},"ONBUILD COPY . \u002Fsrc",[1399,29635,29636,29639,29642],{},[1444,29637,29638],{"align":24699},"SHELL",[1444,29640,29641],{"align":24699},"更改默认 shell，比如将 sh -c 改为 bash -c",[1444,29643,29644,29645],{"align":24699},"SHELL ",[51,29646,29647],{},"“\u002Fbin\u002Fbash”, “-c”",[1399,29649,29650,29653,29656],{},[1444,29651,29652],{"align":24699},"HEALTHCHECK",[1444,29654,29655],{"align":24699},"定义容器运行时的健康检查命令",[1444,29657,29658,29659],{"align":24699},"`HEALTHCHECK CMD curl –fail ",[981,29660,29661],{"href":29661,"rel":29662},"http:\u002F\u002Flocalhost:8080",[24828],[1399,29664,29665,29668,29671],{},[1444,29666,29667],{"align":24699},"STOPSIGNAL",[1444,29669,29670],{"align":24699},"容器停止时发送的信号",[1444,29672,29673],{"align":24699},"STOPSIGNAL SIGKILL",[1233,29675,29677],{"id":29676},"_62自己创建容器","6.2.自己创建容器",[22960,29679,29681],{"id":29680},"_621手动创建","6.2.1.手动创建",[40,29683,29684],{},"在x86电脑上编译x86的：",[29,29686,29688],{"className":24785,"code":29687,"language":24787,"meta":35,"style":35},"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",[37,29689,29690,29706,29710,29723,29727,29740,29744,29757,29761,29774,29778],{"__ignoreMap":35},[51,29691,29692,29694,29697,29700,29703],{"class":53,"line":54},[51,29693,27517],{"class":68},[51,29695,29696],{"class":282}," build",[51,29698,29699],{"class":175}," -t",[51,29701,29702],{"class":282}," ros-melodic-cuda118-cudnn8-bionic:latest",[51,29704,29705],{"class":282}," .\n",[51,29707,29708],{"class":53,"line":61},[51,29709,3480],{"emptyLinePlaceholder":1192},[51,29711,29712,29714,29716,29718,29721],{"class":53,"line":93},[51,29713,27517],{"class":68},[51,29715,29696],{"class":282},[51,29717,29699],{"class":175},[51,29719,29720],{"class":282}," ros-noetic-focal:latest",[51,29722,29705],{"class":282},[51,29724,29725],{"class":53,"line":99},[51,29726,3480],{"emptyLinePlaceholder":1192},[51,29728,29729,29731,29733,29735,29738],{"class":53,"line":120},[51,29730,27517],{"class":68},[51,29732,29696],{"class":282},[51,29734,29699],{"class":175},[51,29736,29737],{"class":282}," ros-humble-jammy:latest",[51,29739,29705],{"class":282},[51,29741,29742],{"class":53,"line":129},[51,29743,3480],{"emptyLinePlaceholder":1192},[51,29745,29746,29748,29750,29752,29755],{"class":53,"line":206},[51,29747,27517],{"class":68},[51,29749,29696],{"class":282},[51,29751,29699],{"class":175},[51,29753,29754],{"class":282}," ros-jazzy-noble:latest",[51,29756,29705],{"class":282},[51,29758,29759],{"class":53,"line":212},[51,29760,3480],{"emptyLinePlaceholder":1192},[51,29762,29763,29765,29767,29769,29772],{"class":53,"line":227},[51,29764,27517],{"class":68},[51,29766,29696],{"class":282},[51,29768,29699],{"class":175},[51,29770,29771],{"class":282}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[51,29773,29705],{"class":282},[51,29775,29776],{"class":53,"line":370},[51,29777,3480],{"emptyLinePlaceholder":1192},[51,29779,29780,29782,29784,29786,29789],{"class":53,"line":387},[51,29781,27517],{"class":68},[51,29783,29696],{"class":282},[51,29785,29699],{"class":175},[51,29787,29788],{"class":282}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[51,29790,29705],{"class":282},[40,29792,29793],{},[2564,29794],{"alt":35,"src":29795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[40,29797,29798],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[40,29800,29801],{},[2564,29802],{"alt":35,"src":29803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[40,29805,29806],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[19,29808,29809],{},[22,29810,29811],{},"创建 Docker Hub 账户",[40,29813,29814],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[19,29816,29817],{"start":61},[22,29818,29819],{},"登录 Docker Hub",[40,29821,29822],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[29,29824,29826],{"className":24785,"code":29825,"language":24787,"meta":35,"style":35},"docker login\n",[37,29827,29828],{"__ignoreMap":35},[51,29829,29830,29832],{"class":53,"line":54},[51,29831,27517],{"class":68},[51,29833,29834],{"class":282}," login\n",[40,29836,29837],{},"输入你的 Docker Hub 用户名和密码进行验证。",[19,29839,29840],{},[22,29841,29842],{},"为你的镜像打标签",[40,29844,29845,29846,29849],{},"Docker Hub 使用 ",[37,29847,29848],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[29,29851,29853],{"className":24785,"code":29852,"language":24787,"meta":35,"style":35},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[37,29854,29855],{"__ignoreMap":35},[51,29856,29857,29859,29862,29864,29867,29870,29873,29875],{"class":53,"line":54},[51,29858,27517],{"class":68},[51,29860,29861],{"class":282}," tag",[51,29863,29754],{"class":282},[51,29865,29866],{"class":64}," \u003C",[51,29868,29869],{"class":282},"你的用户",[51,29871,29872],{"class":72},"名",[51,29874,972],{"class":64},[51,29876,29877],{"class":282},"\u002Fros-jazzy-noble:latest\n",[40,29879,29880,29881,29884],{},"例如，如果你的 Docker Hub 用户名是 ",[37,29882,29883],{},"tungchiahui","，你应该执行：",[29,29886,29888],{"className":24785,"code":29887,"language":24787,"meta":35,"style":35},"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",[37,29889,29890,29901,29905,29916,29920,29931,29935,29946,29950],{"__ignoreMap":35},[51,29891,29892,29894,29896,29898],{"class":53,"line":54},[51,29893,27517],{"class":68},[51,29895,29861],{"class":282},[51,29897,29720],{"class":282},[51,29899,29900],{"class":282}," tungchiahui\u002Fros-noetic-focal:latest\n",[51,29902,29903],{"class":53,"line":61},[51,29904,3480],{"emptyLinePlaceholder":1192},[51,29906,29907,29909,29911,29913],{"class":53,"line":93},[51,29908,27517],{"class":68},[51,29910,29861],{"class":282},[51,29912,29737],{"class":282},[51,29914,29915],{"class":282}," tungchiahui\u002Fros-humble-jammy:latest\n",[51,29917,29918],{"class":53,"line":99},[51,29919,3480],{"emptyLinePlaceholder":1192},[51,29921,29922,29924,29926,29928],{"class":53,"line":120},[51,29923,27517],{"class":68},[51,29925,29861],{"class":282},[51,29927,29754],{"class":282},[51,29929,29930],{"class":282}," tungchiahui\u002Fros-jazzy-noble:latest\n",[51,29932,29933],{"class":53,"line":129},[51,29934,3480],{"emptyLinePlaceholder":1192},[51,29936,29937,29939,29941,29943],{"class":53,"line":206},[51,29938,27517],{"class":68},[51,29940,29861],{"class":282},[51,29942,29771],{"class":282},[51,29944,29945],{"class":282}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[51,29947,29948],{"class":53,"line":212},[51,29949,3480],{"emptyLinePlaceholder":1192},[51,29951,29952,29954,29956,29958],{"class":53,"line":227},[51,29953,27517],{"class":68},[51,29955,29861],{"class":282},[51,29957,29788],{"class":282},[51,29959,29960],{"class":282}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[19,29962,29963],{"start":61},[22,29964,29965],{},"推送镜像到 Docker Hub",[40,29967,29968],{},"使用以下命令将镜像推送到 Docker Hub：",[29,29970,29972],{"className":24785,"code":29971,"language":24787,"meta":35,"style":35},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[37,29973,29974],{"__ignoreMap":35},[51,29975,29976,29978,29981,29983,29985,29987,29989],{"class":53,"line":54},[51,29977,27517],{"class":68},[51,29979,29980],{"class":282}," push",[51,29982,29866],{"class":64},[51,29984,29869],{"class":282},[51,29986,29872],{"class":72},[51,29988,972],{"class":64},[51,29990,29991],{"class":282},"\u002Fros-noetic-jazzy-noble:latest\n",[40,29993,15595],{},[29,29995,29997],{"className":24785,"code":29996,"language":24787,"meta":35,"style":35},"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",[37,29998,29999,30007,30011,30019,30023,30031,30035,30044,30048,30056,30060],{"__ignoreMap":35},[51,30000,30001,30003,30005],{"class":53,"line":54},[51,30002,27517],{"class":68},[51,30004,29980],{"class":282},[51,30006,29900],{"class":282},[51,30008,30009],{"class":53,"line":61},[51,30010,3480],{"emptyLinePlaceholder":1192},[51,30012,30013,30015,30017],{"class":53,"line":93},[51,30014,27517],{"class":68},[51,30016,29980],{"class":282},[51,30018,29915],{"class":282},[51,30020,30021],{"class":53,"line":99},[51,30022,3480],{"emptyLinePlaceholder":1192},[51,30024,30025,30027,30029],{"class":53,"line":120},[51,30026,27517],{"class":68},[51,30028,29980],{"class":282},[51,30030,29930],{"class":282},[51,30032,30033],{"class":53,"line":129},[51,30034,3480],{"emptyLinePlaceholder":1192},[51,30036,30037,30039,30041],{"class":53,"line":206},[51,30038,27517],{"class":68},[51,30040,29980],{"class":282},[51,30042,30043],{"class":282}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[51,30045,30046],{"class":53,"line":212},[51,30047,3480],{"emptyLinePlaceholder":1192},[51,30049,30050,30052,30054],{"class":53,"line":227},[51,30051,27517],{"class":68},[51,30053,29980],{"class":282},[51,30055,29960],{"class":282},[51,30057,30058],{"class":53,"line":370},[51,30059,3480],{"emptyLinePlaceholder":1192},[51,30061,30062,30064,30066],{"class":53,"line":387},[51,30063,27517],{"class":68},[51,30065,29980],{"class":282},[51,30067,30068],{"class":282}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[19,30070,30071],{"start":93},[22,30072,30073],{},"验证推送成功",[40,30075,30076],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[40,30078,30079],{},[840,30080,4861],{},[1000,30082,30083,30086],{},[22,30084,30085],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[22,30087,30088],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[40,30090,30091],{},[2564,30092],{"alt":35,"src":30093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[40,30095,30096],{},[2564,30097],{"alt":35,"src":30098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22960,30100,30102],{"id":30101},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[40,30104,30105,30106,30109,30110,30113],{},"如果您想在 ",[840,30107,30108],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[840,30111,30112],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[40,30115,30116,30117],{},"1. ",[840,30118,30119],{},"启用 Docker 跨平台构建",[40,30121,30122],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[40,30124,30125],{},"第一步：启用 buildx（只需执行一次）",[29,30127,30129],{"className":24785,"code":30128,"language":24787,"meta":35,"style":35},"docker buildx create --name multiarch_builder --use\n",[37,30130,30131],{"__ignoreMap":35},[51,30132,30133,30135,30138,30141,30144,30147],{"class":53,"line":54},[51,30134,27517],{"class":68},[51,30136,30137],{"class":282}," buildx",[51,30139,30140],{"class":282}," create",[51,30142,30143],{"class":175}," --name",[51,30145,30146],{"class":282}," multiarch_builder",[51,30148,30149],{"class":175}," --use\n",[40,30151,30152],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[40,30154,30155],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[29,30157,30159],{"className":24785,"code":30158,"language":24787,"meta":35,"style":35},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[37,30160,30161],{"__ignoreMap":35},[51,30162,30163,30165,30167,30169,30172,30175,30178,30181],{"class":53,"line":54},[51,30164,27517],{"class":68},[51,30166,28194],{"class":282},[51,30168,28197],{"class":175},[51,30170,30171],{"class":175}," --privileged",[51,30173,30174],{"class":282}," multiarch\u002Fqemu-user-static",[51,30176,30177],{"class":175}," --reset",[51,30179,30180],{"class":175}," -p",[51,30182,30183],{"class":282}," yes\n",[40,30185,30186],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[40,30188,30189],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[29,30191,30193],{"className":24785,"code":30192,"language":24787,"meta":35,"style":35},"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",[37,30194,30195,30237,30241,30246,30256,30266,30275,30281,30285,30289,30299,30307,30316,30322,30326,30330,30340,30348,30357,30363,30367,30371,30381,30389,30398,30404,30408,30412,30422,30430,30439,30445,30449,30453,30463,30471,30480,30486,30490,30494,30504,30512,30521,30527,30531,30535,30545,30553,30562,30568,30572,30576,30586,30594,30603,30609,30613,30617,30628,30636,30645,30651],{"__ignoreMap":35},[51,30196,30197,30199,30201,30203,30206,30209,30211,30213,30216,30218,30220,30222,30224,30227,30230,30232,30235],{"class":53,"line":54},[51,30198,27517],{"class":68},[51,30200,30137],{"class":282},[51,30202,29696],{"class":282},[51,30204,30205],{"class":175}," --platform",[51,30207,30208],{"class":282}," linux\u002Famd64,linux\u002Farm64",[51,30210,29699],{"class":175},[51,30212,29866],{"class":64},[51,30214,30215],{"class":282},"你的镜像",[51,30217,29872],{"class":72},[51,30219,972],{"class":64},[51,30221,984],{"class":282},[51,30223,2154],{"class":64},[51,30225,30226],{"class":282},"标",[51,30228,30229],{"class":72},"签",[51,30231,972],{"class":64},[51,30233,30234],{"class":175}," --push",[51,30236,29705],{"class":282},[51,30238,30239],{"class":53,"line":61},[51,30240,3480],{"emptyLinePlaceholder":1192},[51,30242,30243],{"class":53,"line":93},[51,30244,30245],{"class":57},"# 例子：\n",[51,30247,30248,30250,30252,30254],{"class":53,"line":99},[51,30249,27517],{"class":68},[51,30251,30137],{"class":282},[51,30253,29696],{"class":282},[51,30255,25642],{"class":175},[51,30257,30258,30261,30264],{"class":53,"line":120},[51,30259,30260],{"class":72},"--platform ",[51,30262,30263],{"class":282},"linux\u002Famd64,linux\u002Farm64",[51,30265,25642],{"class":175},[51,30267,30268,30270,30273],{"class":53,"line":129},[51,30269,29699],{"class":175},[51,30271,30272],{"class":282}," tungchiahui\u002Fros:noetic-focal",[51,30274,25642],{"class":175},[51,30276,30277,30279],{"class":53,"line":206},[51,30278,30234],{"class":175},[51,30280,25642],{"class":175},[51,30282,30283],{"class":53,"line":212},[51,30284,29705],{"class":282},[51,30286,30287],{"class":53,"line":227},[51,30288,3480],{"emptyLinePlaceholder":1192},[51,30290,30291,30293,30295,30297],{"class":53,"line":370},[51,30292,27517],{"class":68},[51,30294,30137],{"class":282},[51,30296,29696],{"class":282},[51,30298,25642],{"class":175},[51,30300,30301,30303,30305],{"class":53,"line":387},[51,30302,30260],{"class":72},[51,30304,30263],{"class":282},[51,30306,25642],{"class":175},[51,30308,30309,30311,30314],{"class":53,"line":404},[51,30310,29699],{"class":175},[51,30312,30313],{"class":282}," tungchiahui\u002Fros:humble-jammy",[51,30315,25642],{"class":175},[51,30317,30318,30320],{"class":53,"line":415},[51,30319,30234],{"class":175},[51,30321,25642],{"class":175},[51,30323,30324],{"class":53,"line":420},[51,30325,29705],{"class":282},[51,30327,30328],{"class":53,"line":429},[51,30329,3480],{"emptyLinePlaceholder":1192},[51,30331,30332,30334,30336,30338],{"class":53,"line":434},[51,30333,27517],{"class":68},[51,30335,30137],{"class":282},[51,30337,29696],{"class":282},[51,30339,25642],{"class":175},[51,30341,30342,30344,30346],{"class":53,"line":448},[51,30343,30260],{"class":72},[51,30345,30263],{"class":282},[51,30347,25642],{"class":175},[51,30349,30350,30352,30355],{"class":53,"line":462},[51,30351,29699],{"class":175},[51,30353,30354],{"class":282}," tungchiahui\u002Fros:jazzy-noble",[51,30356,25642],{"class":175},[51,30358,30359,30361],{"class":53,"line":470},[51,30360,30234],{"class":175},[51,30362,25642],{"class":175},[51,30364,30365],{"class":53,"line":2783},[51,30366,29705],{"class":282},[51,30368,30369],{"class":53,"line":2788},[51,30370,3480],{"emptyLinePlaceholder":1192},[51,30372,30373,30375,30377,30379],{"class":53,"line":2817},[51,30374,27284],{"class":68},[51,30376,30137],{"class":282},[51,30378,29696],{"class":282},[51,30380,25642],{"class":175},[51,30382,30383,30385,30387],{"class":53,"line":2822},[51,30384,30260],{"class":72},[51,30386,30263],{"class":282},[51,30388,25642],{"class":175},[51,30390,30391,30393,30396],{"class":53,"line":2839},[51,30392,29699],{"class":175},[51,30394,30395],{"class":282}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[51,30397,25642],{"class":175},[51,30399,30400,30402],{"class":53,"line":2844},[51,30401,30234],{"class":175},[51,30403,25642],{"class":175},[51,30405,30406],{"class":53,"line":2849},[51,30407,29705],{"class":282},[51,30409,30410],{"class":53,"line":2854},[51,30411,3480],{"emptyLinePlaceholder":1192},[51,30413,30414,30416,30418,30420],{"class":53,"line":2868},[51,30415,27517],{"class":68},[51,30417,30137],{"class":282},[51,30419,29696],{"class":282},[51,30421,25642],{"class":175},[51,30423,30424,30426,30428],{"class":53,"line":2873},[51,30425,30260],{"class":72},[51,30427,30263],{"class":282},[51,30429,25642],{"class":175},[51,30431,30432,30434,30437],{"class":53,"line":3657},[51,30433,29699],{"class":175},[51,30435,30436],{"class":282}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[51,30438,25642],{"class":175},[51,30440,30441,30443],{"class":53,"line":3671},[51,30442,30234],{"class":175},[51,30444,25642],{"class":175},[51,30446,30447],{"class":53,"line":3679},[51,30448,29705],{"class":282},[51,30450,30451],{"class":53,"line":3684},[51,30452,3480],{"emptyLinePlaceholder":1192},[51,30454,30455,30457,30459,30461],{"class":53,"line":3690},[51,30456,27284],{"class":68},[51,30458,30137],{"class":282},[51,30460,29696],{"class":282},[51,30462,25642],{"class":175},[51,30464,30465,30467,30469],{"class":53,"line":3696},[51,30466,30260],{"class":72},[51,30468,30263],{"class":282},[51,30470,25642],{"class":175},[51,30472,30473,30475,30478],{"class":53,"line":3701},[51,30474,29699],{"class":175},[51,30476,30477],{"class":282}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[51,30479,25642],{"class":175},[51,30481,30482,30484],{"class":53,"line":8910},[51,30483,30234],{"class":175},[51,30485,25642],{"class":175},[51,30487,30488],{"class":53,"line":8934},[51,30489,29705],{"class":282},[51,30491,30492],{"class":53,"line":8939},[51,30493,3480],{"emptyLinePlaceholder":1192},[51,30495,30496,30498,30500,30502],{"class":53,"line":8945},[51,30497,27517],{"class":68},[51,30499,30137],{"class":282},[51,30501,29696],{"class":282},[51,30503,25642],{"class":175},[51,30505,30506,30508,30510],{"class":53,"line":8972},[51,30507,30260],{"class":72},[51,30509,30263],{"class":282},[51,30511,25642],{"class":175},[51,30513,30514,30516,30519],{"class":53,"line":8977},[51,30515,29699],{"class":175},[51,30517,30518],{"class":282}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[51,30520,25642],{"class":175},[51,30522,30523,30525],{"class":53,"line":8983},[51,30524,30234],{"class":175},[51,30526,25642],{"class":175},[51,30528,30529],{"class":53,"line":8995},[51,30530,29705],{"class":282},[51,30532,30533],{"class":53,"line":9007},[51,30534,3480],{"emptyLinePlaceholder":1192},[51,30536,30537,30539,30541,30543],{"class":53,"line":9019},[51,30538,27517],{"class":68},[51,30540,30137],{"class":282},[51,30542,29696],{"class":282},[51,30544,25642],{"class":175},[51,30546,30547,30549,30551],{"class":53,"line":10678},[51,30548,30260],{"class":72},[51,30550,30263],{"class":282},[51,30552,25642],{"class":175},[51,30554,30555,30557,30560],{"class":53,"line":10703},[51,30556,29699],{"class":175},[51,30558,30559],{"class":282}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[51,30561,25642],{"class":175},[51,30563,30564,30566],{"class":53,"line":10726},[51,30565,30234],{"class":175},[51,30567,25642],{"class":175},[51,30569,30570],{"class":53,"line":10750},[51,30571,29705],{"class":282},[51,30573,30574],{"class":53,"line":10755},[51,30575,3480],{"emptyLinePlaceholder":1192},[51,30577,30578,30580,30582,30584],{"class":53,"line":10760},[51,30579,27284],{"class":68},[51,30581,30137],{"class":282},[51,30583,29696],{"class":282},[51,30585,25642],{"class":175},[51,30587,30588,30590,30592],{"class":53,"line":10765},[51,30589,30260],{"class":72},[51,30591,30263],{"class":282},[51,30593,25642],{"class":175},[51,30595,30596,30598,30601],{"class":53,"line":10774},[51,30597,29699],{"class":175},[51,30599,30600],{"class":282}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[51,30602,25642],{"class":175},[51,30604,30605,30607],{"class":53,"line":10779},[51,30606,30234],{"class":175},[51,30608,25642],{"class":175},[51,30610,30611],{"class":53,"line":10785},[51,30612,29705],{"class":282},[51,30614,30615],{"class":53,"line":10806},[51,30616,3480],{"emptyLinePlaceholder":1192},[51,30618,30619,30622,30624,30626],{"class":53,"line":10812},[51,30620,30621],{"class":68},"  docker",[51,30623,30137],{"class":282},[51,30625,29696],{"class":282},[51,30627,25642],{"class":175},[51,30629,30630,30632,30634],{"class":53,"line":10826},[51,30631,30260],{"class":72},[51,30633,30263],{"class":282},[51,30635,25642],{"class":175},[51,30637,30638,30640,30643],{"class":53,"line":10832},[51,30639,29699],{"class":175},[51,30641,30642],{"class":282}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[51,30644,25642],{"class":175},[51,30646,30647,30649],{"class":53,"line":10859},[51,30648,30234],{"class":175},[51,30650,25642],{"class":175},[51,30652,30653],{"class":53,"line":10868},[51,30654,29705],{"class":282},[40,30656,30657],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[40,30659,30660],{},[2564,30661],{"alt":35,"src":30662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[40,30664,30665],{},[2564,30666],{"alt":35,"src":30667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22960,30669,30671],{"id":30670},"_623清除构建缓存","6.2.3.清除构建缓存",[29,30673,30675],{"className":24785,"code":30674,"language":24787,"meta":35,"style":35},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[37,30676,30677,30682],{"__ignoreMap":35},[51,30678,30679],{"class":53,"line":54},[51,30680,30681],{"class":57},"# 清理BuildKit构建缓存\n",[51,30683,30684,30686,30689,30692],{"class":53,"line":61},[51,30685,27517],{"class":68},[51,30687,30688],{"class":282}," builder",[51,30690,30691],{"class":282}," prune",[51,30693,30694],{"class":175}," -f\n",[40,30696,30697],{},[2564,30698],{"alt":35,"src":30699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[1233,30701,30703],{"id":30702},"_63补充","6.3.补充",[22960,30705,30707],{"id":30706},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[40,30709,30710],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[40,30712,30713],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[40,30715,30716],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[29,30718,30720],{"className":24785,"code":30719,"language":24787,"meta":35,"style":35},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[37,30721,30722,30729],{"__ignoreMap":35},[51,30723,30724,30726],{"class":53,"line":54},[51,30725,28334],{"class":68},[51,30727,30728],{"class":282}," nginx\n",[51,30730,30731,30733,30736,30739,30741],{"class":53,"line":61},[51,30732,29519],{"class":68},[51,30734,30735],{"class":282}," echo",[51,30737,30738],{"class":282}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[51,30740,27186],{"class":64},[51,30742,30743],{"class":282}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[40,30745,30746],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[40,30748,30749],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[29,30751,30753],{"className":24785,"code":30752,"language":24787,"meta":35,"style":35},"docker build -t nginx:tuling .\n",[37,30754,30755],{"__ignoreMap":35},[51,30756,30757,30759,30761,30763,30766],{"class":53,"line":54},[51,30758,27517],{"class":68},[51,30760,29696],{"class":282},[51,30762,29699],{"class":175},[51,30764,30765],{"class":282}," nginx:tuling",[51,30767,29705],{"class":282},[40,30769,30770],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[40,30772,30773],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[29,30775,30777],{"className":24785,"code":30776,"language":24787,"meta":35,"style":35},"docker run -d -p 92:80 nginx:tuling\n",[37,30778,30779],{"__ignoreMap":35},[51,30780,30781,30783,30785,30788,30790,30793],{"class":53,"line":54},[51,30782,27517],{"class":68},[51,30784,28194],{"class":282},[51,30786,30787],{"class":175}," -d",[51,30789,30180],{"class":175},[51,30791,30792],{"class":282}," 92:80",[51,30794,30795],{"class":282}," nginx:tuling\n",[40,30797,30798,30799],{},"4、访问 ",[981,30800,30803],{"href":30801,"rel":30802},"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",[24828],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[40,30805,30806],{},[2564,30807],{"alt":35,"src":30808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[40,30810,30811],{},[2564,30812],{"alt":35,"src":30813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22960,30815,30817],{"id":30816},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[40,30819,30820],{},"只需要知道大体流程即可",[40,30822,30823],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[40,30825,30826],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[40,30828,30829],{},"2、在Dockerfile中添加以下内容",[29,30831,30833],{"className":27055,"code":30832,"language":27057,"meta":35,"style":35},"# 基于哪个镜像\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",[37,30834,30835,30840,30845,30850,30855,30860,30865,30870],{"__ignoreMap":35},[51,30836,30837],{"class":53,"line":54},[51,30838,30839],{},"# 基于哪个镜像\n",[51,30841,30842],{"class":53,"line":61},[51,30843,30844],{},"From java:8\n",[51,30846,30847],{"class":53,"line":93},[51,30848,30849],{},"# 复制文件到容器\n",[51,30851,30852],{"class":53,"line":99},[51,30853,30854],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[51,30856,30857],{"class":53,"line":120},[51,30858,30859],{},"# 声明需要暴露的端口\n",[51,30861,30862],{"class":53,"line":129},[51,30863,30864],{},"EXPOSE 8877\n",[51,30866,30867],{"class":53,"line":206},[51,30868,30869],{},"# 配置容器启动后执行的命令\n",[51,30871,30872],{"class":53,"line":212},[51,30873,30874],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[40,30876,30877],{},"3、使用docker build命令构建镜像",[29,30879,30881],{"className":24785,"code":30880,"language":24787,"meta":35,"style":35},"docker build -t tulingmall-member:0.0.5 .\n",[37,30882,30883],{"__ignoreMap":35},[51,30884,30885,30887,30889,30891,30894],{"class":53,"line":54},[51,30886,27517],{"class":68},[51,30888,29696],{"class":282},[51,30890,29699],{"class":175},[51,30892,30893],{"class":282}," tulingmall-member:0.0.5",[51,30895,29705],{"class":282},[40,30897,30898],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[40,30900,30901],{},[2564,30902],{"alt":35,"src":30903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[40,30905,30906],{},"4、启动镜像，加-d可在后台启动",[29,30908,30910],{"className":24785,"code":30909,"language":24787,"meta":35,"style":35},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[37,30911,30912],{"__ignoreMap":35},[51,30913,30914,30916,30918,30920,30922,30925],{"class":53,"line":54},[51,30915,27517],{"class":68},[51,30917,28194],{"class":282},[51,30919,30787],{"class":175},[51,30921,30180],{"class":175},[51,30923,30924],{"class":282}," 8877:8877",[51,30926,30927],{"class":282}," tulingmall-member:0.0.5\n",[40,30929,30930],{},"加上JVM参数：",[29,30932,30934],{"className":24785,"code":30933,"language":24787,"meta":35,"style":35},"# --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",[37,30935,30936,30941,30956,30966,30975,30982],{"__ignoreMap":35},[51,30937,30938],{"class":53,"line":54},[51,30939,30940],{"class":57},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[51,30942,30943,30945,30947,30950,30952,30954],{"class":53,"line":61},[51,30944,27517],{"class":68},[51,30946,28194],{"class":282},[51,30948,30949],{"class":175},"  -d",[51,30951,30180],{"class":175},[51,30953,30924],{"class":282},[51,30955,25642],{"class":175},[51,30957,30958,30960,30963],{"class":53,"line":93},[51,30959,29092],{"class":72},[51,30961,30962],{"class":282},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[51,30964,30965],{"class":175},"  \\\n",[51,30967,30968,30970,30973],{"class":53,"line":99},[51,30969,29092],{"class":72},[51,30971,30972],{"class":282},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[51,30974,30965],{"class":175},[51,30976,30977,30980],{"class":53,"line":120},[51,30978,30979],{"class":72},"--cap-add=SYS_PTRACE  ",[51,30981,27139],{"class":175},[51,30983,30984],{"class":53,"line":129},[51,30985,30986],{"class":72},"tulingmall-member:0.0.5\n",[40,30988,30989],{},"5、访问会员服务接口",[40,30991,30992],{},[2564,30993],{"alt":35,"src":30994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22960,30996,30998],{"id":30997},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[40,31000,31001],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[40,31003,31004,31005],{},"阿里云docker镜像仓库：",[981,31006,31007],{"href":31007,"rel":31008},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24828],[40,31010,31011],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[40,31013,31014],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[40,31016,31017],{},[2564,31018],{"alt":35,"src":31019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[40,31021,31022],{},"要把镜像推送到镜像仓库",[29,31024,31026],{"className":24785,"code":31025,"language":24787,"meta":35,"style":35},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[37,31027,31028],{"__ignoreMap":35},[51,31029,31030,31032,31034,31036],{"class":53,"line":54},[51,31031,27517],{"class":68},[51,31033,29861],{"class":282},[51,31035,30893],{"class":282},[51,31037,31038],{"class":282}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[40,31040,31041],{},"最后将镜像推送到远程仓库",[29,31043,31045],{"className":24785,"code":31044,"language":24787,"meta":35,"style":35},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[37,31046,31047],{"__ignoreMap":35},[51,31048,31049,31051,31053],{"class":53,"line":54},[51,31050,27517],{"class":68},[51,31052,29980],{"class":282},[51,31054,31038],{"class":282},[1179,31056,31057],{},"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":35,"searchDepth":61,"depth":61,"links":31059},[31060,31061,31062],{"id":29447,"depth":93,"text":29448},{"id":29676,"depth":93,"text":29677},{"id":30702,"depth":93,"text":30703},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29439,"description":35},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31069,"title":31070,"body":31071,"description":35,"extension":1190,"meta":31214,"navigation":1192,"path":31215,"seo":31216,"stem":31217,"__hash__":31218},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31072,"toc":31212},[31073,31076,31081,31086,31089,31094,31099,31102,31107,31112,31115,31120,31123,31126,31129,31132,31135,31138,31158,31180,31183,31186,31206,31209],[10,31074,31070],{"id":31075},"_7vscode远程开发",[19,31077,31078],{},[22,31079,31080],{},"插件1：微软Docker工具",[40,31082,31083],{},[2564,31084],{"alt":35,"src":31085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[40,31087,31088],{},"docker扩展插件已经进化为container tools了，请安装container tools",[40,31090,31091],{},[2564,31092],{"alt":35,"src":31093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[19,31095,31096],{"start":61},[22,31097,31098],{},"插件2：微软Docker远程开发工具",[40,31100,31101],{},"下面这是远程开发的插件。",[40,31103,31104],{},[2564,31105],{"alt":35,"src":31106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[40,31108,31109],{},[2564,31110],{"alt":35,"src":31111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[40,31113,31114],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[40,31116,31117],{},[2564,31118],{"alt":35,"src":31119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[40,31121,31122],{},"安装完拓展之后，vscode进行链接：",[40,31124,31125],{},"1.按ctrl+shift+p",[40,31127,31128],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[40,31130,31131],{},"3.选择目前运行的容器",[40,31133,31134],{},"4.VS Code 会在新窗口中打开并连接到容器",[40,31136,31137],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[29,31139,31141],{"className":24785,"code":31140,"language":24787,"meta":35,"style":35},"docker run -v 主机目录:容器目录 image-name\n",[37,31142,31143],{"__ignoreMap":35},[51,31144,31145,31147,31149,31152,31155],{"class":53,"line":54},[51,31146,27517],{"class":68},[51,31148,28194],{"class":282},[51,31150,31151],{"class":175}," -v",[51,31153,31154],{"class":282}," 主机目录:容器目录",[51,31156,31157],{"class":282}," image-name\n",[29,31159,31161],{"className":24785,"code":31160,"language":24787,"meta":35,"style":35},"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",[37,31162,31163],{"__ignoreMap":35},[51,31164,31165,31167,31169,31172,31174,31177],{"class":53,"line":54},[51,31166,27517],{"class":68},[51,31168,28194],{"class":282},[51,31170,31171],{"class":175}," -it",[51,31173,31151],{"class":175},[51,31175,31176],{"class":282}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[51,31178,31179],{"class":282}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[40,31181,31182],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[40,31184,31185],{},"查看挂载情况：",[29,31187,31189],{"className":24785,"code":31188,"language":24787,"meta":35,"style":35},"mount | grep -i project\n",[37,31190,31191],{"__ignoreMap":35},[51,31192,31193,31196,31198,31201,31203],{"class":53,"line":54},[51,31194,31195],{"class":68},"mount",[51,31197,26073],{"class":64},[51,31199,31200],{"class":68}," grep",[51,31202,27394],{"class":175},[51,31204,31205],{"class":282}," project\n",[40,31207,31208],{},"也可以通过ls来进行查看",[1179,31210,31211],{},"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":35,"searchDepth":61,"depth":61,"links":31213},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31070,"description":35},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31220,"title":31221,"body":31222,"description":24339,"extension":1190,"meta":31226,"navigation":1192,"path":31228,"seo":31229,"stem":31230,"__hash__":31231},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31223,"toc":31224},[],{"title":35,"searchDepth":61,"depth":61,"links":31225},[],{"category":31227},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31221,"description":24339},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31233,"title":31234,"body":31235,"description":24339,"extension":1190,"meta":31239,"navigation":1192,"path":31240,"seo":31241,"stem":31242,"__hash__":31243},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31236,"toc":31237},[],{"title":35,"searchDepth":61,"depth":61,"links":31238},[],{"category":31227},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31234,"description":24339},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31245,"title":31246,"body":31247,"description":24339,"extension":1190,"meta":31540,"navigation":1192,"path":31541,"seo":31542,"stem":31543,"__hash__":31544},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31248,"toc":31538},[31249,31252,31260,31275,31280,31331,31334,31340,31527,31532,31535],[10,31250,31246],{"id":31251},"_1验证深度学习环境",[40,31253,31254,31255],{},"关于环境的安装，看",[981,31256,31259],{"href":31257,"rel":31258},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24828],"Pytorch-->深度学习",[40,31261,31262,31263,31266,31267,31270,31271,31274],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[37,31264,31265],{},"pytorch-cuda=12.4"," 是一个“ ",[840,31268,31269],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[840,31272,31273],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[40,31276,31277],{},[2564,31278],{"alt":35,"src":31279},"\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",[29,31281,31283],{"className":24785,"code":31282,"language":24787,"meta":35,"style":35},"# 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",[37,31284,31285,31290],{"__ignoreMap":35},[51,31286,31287],{"class":53,"line":54},[51,31288,31289],{"class":57},"# CUDA 12.4\n",[51,31291,31292,31295,31297,31300,31303,31306,31309,31312,31314,31317,31320,31323,31326,31328],{"class":53,"line":61},[51,31293,31294],{"class":68},"conda",[51,31296,24797],{"class":282},[51,31298,31299],{"class":282}," pytorch==",[51,31301,31302],{"class":175},"2.5.1",[51,31304,31305],{"class":282}," torchvision==",[51,31307,31308],{"class":175},"0.20.1",[51,31310,31311],{"class":282}," torchaudio==",[51,31313,31302],{"class":175},[51,31315,31316],{"class":282}," pytorch-cuda=",[51,31318,31319],{"class":175},"12.4",[51,31321,31322],{"class":175}," -c",[51,31324,31325],{"class":282}," pytorch",[51,31327,31322],{"class":175},[51,31329,31330],{"class":282}," nvidia\n",[40,31332,31333],{},"）：",[40,31335,31336],{},[981,31337,31338],{"href":31338,"rel":31339},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24828],[29,31341,31345],{"className":31342,"code":31343,"language":31344,"meta":35,"style":35},"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",[37,31346,31347,31352,31360,31365,31375,31391,31396,31406,31443,31450,31462,31478,31483,31493,31505,31515],{"__ignoreMap":35},[51,31348,31349],{"class":53,"line":54},[51,31350,31351],{"class":57},"# 对深度学习环境进行测试\n",[51,31353,31354,31357],{"class":53,"line":61},[51,31355,31356],{"class":64},"import",[51,31358,31359],{"class":72}," torch\n",[51,31361,31362],{"class":53,"line":93},[51,31363,31364],{"class":57},"# 查看cuda是否被激活\n",[51,31366,31367,31370,31372],{"class":53,"line":99},[51,31368,31369],{"class":72},"flag",[51,31371,108],{"class":64},[51,31373,31374],{"class":72},"torch.cuda.is_available()\n",[51,31376,31377,31380,31382,31385,31388],{"class":53,"line":120},[51,31378,31379],{"class":175},"print",[51,31381,73],{"class":72},[51,31383,31384],{"class":282},"\"cuda:\"",[51,31386,31387],{"class":72},", flag)   ",[51,31389,31390],{"class":57},"#返回true的话说明被激活\n",[51,31392,31393],{"class":53,"line":129},[51,31394,31395],{"class":57},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[51,31397,31398,31401,31403],{"class":53,"line":206},[51,31399,31400],{"class":72},"ngpu",[51,31402,108],{"class":64},[51,31404,31405],{"class":175},"1\n",[51,31407,31408,31411,31413,31416,31419,31421,31424,31427,31430,31432,31434,31436,31438,31441],{"class":53,"line":212},[51,31409,31410],{"class":72},"device",[51,31412,108],{"class":64},[51,31414,31415],{"class":72},"torch.device(",[51,31417,31418],{"class":282},"\"cuda:0\"",[51,31420,2794],{"class":64},[51,31422,31423],{"class":72},"(torch.cuda.is_available() ",[51,31425,31426],{"class":64},"and",[51,31428,31429],{"class":72}," ngpu",[51,31431,972],{"class":64},[51,31433,176],{"class":175},[51,31435,14676],{"class":72},[51,31437,2791],{"class":64},[51,31439,31440],{"class":282}," \"cpu\"",[51,31442,90],{"class":72},[51,31444,31445,31447],{"class":53,"line":227},[51,31446,31379],{"class":175},[51,31448,31449],{"class":72},"(device)\n",[51,31451,31452,31454,31457,31459],{"class":53,"line":370},[51,31453,31379],{"class":175},[51,31455,31456],{"class":72},"(torch.cuda.get_device_name(",[51,31458,176],{"class":175},[51,31460,31461],{"class":72},"))\n",[51,31463,31464,31466,31469,31471,31473,31475],{"class":53,"line":387},[51,31465,31379],{"class":175},[51,31467,31468],{"class":72},"(torch.rand(",[51,31470,1328],{"class":175},[51,31472,82],{"class":72},[51,31474,1328],{"class":175},[51,31476,31477],{"class":72},").cuda())\n",[51,31479,31480],{"class":53,"line":404},[51,31481,31482],{"class":57},"# 查看cuda和cudnn的版本\n",[51,31484,31485,31488,31490],{"class":53,"line":415},[51,31486,31487],{"class":72},"cuda_version",[51,31489,108],{"class":64},[51,31491,31492],{"class":72},"torch.version.cuda\n",[51,31494,31495,31497,31499,31502],{"class":53,"line":420},[51,31496,31379],{"class":175},[51,31498,73],{"class":72},[51,31500,31501],{"class":282},"\"cuda version\"",[51,31503,31504],{"class":72},",cuda_version)\n",[51,31506,31507,31510,31512],{"class":53,"line":429},[51,31508,31509],{"class":72},"cudnn_version",[51,31511,108],{"class":64},[51,31513,31514],{"class":72},"torch.backends.cudnn.version()\n",[51,31516,31517,31519,31521,31524],{"class":53,"line":434},[51,31518,31379],{"class":175},[51,31520,73],{"class":72},[51,31522,31523],{"class":282},"\"cudnn version\"",[51,31525,31526],{"class":72},",cudnn_version)\n",[40,31528,31529],{},[2564,31530],{"alt":35,"src":31531},"\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",[40,31533,31534],{},"cuda:0 指的是一块显卡",[1179,31536,31537],{},"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":35,"searchDepth":61,"depth":61,"links":31539},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31246,"description":24339},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31546,"title":31547,"body":31548,"description":24339,"extension":1190,"meta":51352,"navigation":1192,"path":51353,"seo":51354,"stem":51355,"__hash__":51356},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31549,"toc":51346},[31550,31553,31557,31561,31564,31569,31574,31577,31582,31587,31592,31595,31599,31604,31608,31613,31616,31621,31624,31627,31630,31633,31638,31641,31646,31651,31656,31661,31664,31668,31671,31676,32280,32285,32288,32293,32296,32299,32763,32766,32769,32772,32775,34826,34829,34834,34839,35634,35637,35642,36420,36424,38083,38087,38801,38805,38809,38814,38819,38824,38827,38832,38837,38842,38847,38852,38856,38861,40143,40148,40151,40154,40157,40312,40315,40318,41534,41539,42234,42238,42242,42247,42252,42255,42260,42265,42270,42275,42280,42285,42290,42295,42300,42305,42310,42315,42320,42325,42330,42335,42340,42345,42350,42355,42360,42365,42370,42375,42380,42385,42390,42395,42400,42405,42409,42413,42416,43894,43898,45545,45549,46243,46247,46250,46253,46797,46800,46804,46807,48204,48208,48211,48789,50576,50580,50583,51343],[10,31551,31547],{"id":31552},"_2经典神经网络",[1233,31554,31556],{"id":31555},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22960,31558,31560],{"id":31559},"_211原理介绍","2.1.1.原理介绍",[40,31562,31563],{},"LeNet-5",[19,31565,31566],{},[22,31567,31568],{},"原理",[40,31570,31571],{},[2564,31572],{"alt":35,"src":31573},"\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",[40,31575,31576],{},"B是batch批次；C是channel通道",[19,31578,31579],{"start":61},[22,31580,31581],{},"网络参数详细",[40,31583,31584],{},[2564,31585],{"alt":35,"src":31586},"\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",[40,31588,31589],{},[2564,31590],{"alt":35,"src":31591},"\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",[40,31593,31594],{},"AlexNet",[19,31596,31597],{},[22,31598,31568],{},[40,31600,31601],{},[2564,31602],{"alt":35,"src":31603},"\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",[19,31605,31606],{"start":61},[22,31607,31581],{},[40,31609,31610],{},[2564,31611],{"alt":35,"src":31612},"\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",[40,31614,31615],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[40,31617,31618],{},[2564,31619],{"alt":35,"src":31620},"\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",[40,31622,31623],{},"数据处理中的图像增强操作:",[40,31625,31626],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[40,31628,31629],{},"①增加数据量，保证训练数据充足；②防止过拟合",[40,31631,31632],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[40,31634,31635],{},[2564,31636],{"alt":35,"src":31637},"\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",[40,31639,31640],{},"提升网络精确度的方法：LRN正则化",[40,31642,31643],{},[2564,31644],{"alt":35,"src":31645},"\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",[40,31647,31648],{},[2564,31649],{"alt":35,"src":31650},"\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",[19,31652,31653],{"start":93},[22,31654,31655],{},"AlexNet的总结",[40,31657,31658],{},[2564,31659],{"alt":35,"src":31660},"\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",[40,31662,31663],{},"比LeNet模型要深一丢丢",[22960,31665,31667],{"id":31666},"_212代码实现","2.1.2.代码实现",[40,31669,31670],{},"（1）LeNet",[19,31672,31673],{},[22,31674,31675],{},"模型搭建",[29,31677,31679],{"className":31342,"code":31678,"language":31344,"meta":35,"style":35},"# 导入库\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",[37,31680,31681,31686,31692,31697,31710,31715,31727,31731,31751,31756,31761,31772,31777,31796,31800,31805,31854,31866,31871,31900,31935,31962,31967,31979,31984,32004,32023,32042,32046,32051,32061,32078,32089,32104,32115,32126,32141,32156,32167,32174,32178,32192,32197,32220,32225,32230,32235,32239,32244,32249,32259],{"__ignoreMap":35},[51,31682,31683],{"class":53,"line":54},[51,31684,31685],{"class":57},"# 导入库\n",[51,31687,31688,31690],{"class":53,"line":61},[51,31689,31356],{"class":64},[51,31691,31359],{"class":72},[51,31693,31694],{"class":53,"line":93},[51,31695,31696],{"class":57},"# 导入神经网络层\n",[51,31698,31699,31702,31705,31707],{"class":53,"line":99},[51,31700,31701],{"class":64},"from",[51,31703,31704],{"class":72}," torch ",[51,31706,31356],{"class":64},[51,31708,31709],{"class":72}," nn\n",[51,31711,31712],{"class":53,"line":120},[51,31713,31714],{"class":57},"# 导入展示神经网络参数的包\n",[51,31716,31717,31719,31722,31724],{"class":53,"line":129},[51,31718,31701],{"class":64},[51,31720,31721],{"class":72}," torchsummary ",[51,31723,31356],{"class":64},[51,31725,31726],{"class":72}," summary\n",[51,31728,31729],{"class":53,"line":206},[51,31730,3480],{"emptyLinePlaceholder":1192},[51,31732,31733,31735,31738,31740,31743,31745,31748],{"class":53,"line":212},[51,31734,15656],{"class":64},[51,31736,31737],{"class":68}," LeNet",[51,31739,73],{"class":72},[51,31741,31742],{"class":68},"nn",[51,31744,1804],{"class":72},[51,31746,31747],{"class":68},"Module",[51,31749,31750],{"class":72},"):\n",[51,31752,31753],{"class":53,"line":227},[51,31754,31755],{"class":57},"    # 模型初始化:\n",[51,31757,31758],{"class":53,"line":370},[51,31759,31760],{"class":57},"    # 定义一些网络层和激活函数\n",[51,31762,31763,31766,31769],{"class":53,"line":387},[51,31764,31765],{"class":64},"    def",[51,31767,31768],{"class":175}," __init__",[51,31770,31771],{"class":72},"(self):\n",[51,31773,31774],{"class":53,"line":404},[51,31775,31776],{"class":57},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[51,31778,31779,31782,31785,31788,31791,31794],{"class":53,"line":415},[51,31780,31781],{"class":175},"        super",[51,31783,31784],{"class":72},"(LeNet,",[51,31786,31787],{"class":175},"self",[51,31789,31790],{"class":72},").",[51,31792,31793],{"class":175},"__init__",[51,31795,154],{"class":72},[51,31797,31798],{"class":53,"line":420},[51,31799,3480],{"emptyLinePlaceholder":1192},[51,31801,31802],{"class":53,"line":429},[51,31803,31804],{"class":57},"        # 定义网络层\n",[51,31806,31807,31810,31813,31815,31818,31821,31823,31825,31827,31830,31832,31834,31836,31839,31841,31843,31845,31848,31850,31852],{"class":53,"line":434},[51,31808,31809],{"class":175},"        self",[51,31811,31812],{"class":72},".c1",[51,31814,108],{"class":64},[51,31816,31817],{"class":72},"nn.Conv2d(",[51,31819,31820],{"class":78},"in_channels",[51,31822,108],{"class":64},[51,31824,791],{"class":175},[51,31826,82],{"class":72},[51,31828,31829],{"class":78},"out_channels",[51,31831,108],{"class":64},[51,31833,1593],{"class":175},[51,31835,82],{"class":72},[51,31837,31838],{"class":78},"kernel_size",[51,31840,108],{"class":64},[51,31842,1568],{"class":175},[51,31844,82],{"class":72},[51,31846,31847],{"class":78},"padding",[51,31849,108],{"class":64},[51,31851,1334],{"class":175},[51,31853,90],{"class":72},[51,31855,31856,31858,31861,31863],{"class":53,"line":448},[51,31857,31809],{"class":175},[51,31859,31860],{"class":72},".sig",[51,31862,108],{"class":64},[51,31864,31865],{"class":72},"nn.Sigmoid()\n",[51,31867,31868],{"class":53,"line":462},[51,31869,31870],{"class":57},"        # 定义池化\n",[51,31872,31873,31875,31878,31880,31883,31885,31887,31889,31891,31894,31896,31898],{"class":53,"line":470},[51,31874,31809],{"class":175},[51,31876,31877],{"class":72},".s2",[51,31879,108],{"class":64},[51,31881,31882],{"class":72},"nn.AvgPool2d(",[51,31884,31838],{"class":78},[51,31886,108],{"class":64},[51,31888,1334],{"class":175},[51,31890,82],{"class":72},[51,31892,31893],{"class":78},"stride",[51,31895,108],{"class":64},[51,31897,1334],{"class":175},[51,31899,90],{"class":72},[51,31901,31902,31904,31907,31909,31911,31913,31915,31917,31919,31921,31923,31925,31927,31929,31931,31933],{"class":53,"line":2783},[51,31903,31809],{"class":175},[51,31905,31906],{"class":72},".c3",[51,31908,108],{"class":64},[51,31910,31817],{"class":72},[51,31912,31820],{"class":78},[51,31914,108],{"class":64},[51,31916,1593],{"class":175},[51,31918,82],{"class":72},[51,31920,31829],{"class":78},[51,31922,108],{"class":64},[51,31924,1847],{"class":175},[51,31926,82],{"class":72},[51,31928,31838],{"class":78},[51,31930,108],{"class":64},[51,31932,1568],{"class":175},[51,31934,90],{"class":72},[51,31936,31937,31939,31942,31944,31946,31948,31950,31952,31954,31956,31958,31960],{"class":53,"line":2788},[51,31938,31809],{"class":175},[51,31940,31941],{"class":72},".s4",[51,31943,108],{"class":64},[51,31945,31882],{"class":72},[51,31947,31838],{"class":78},[51,31949,108],{"class":64},[51,31951,1334],{"class":175},[51,31953,82],{"class":72},[51,31955,31893],{"class":78},[51,31957,108],{"class":64},[51,31959,1334],{"class":175},[51,31961,90],{"class":72},[51,31963,31964],{"class":53,"line":2817},[51,31965,31966],{"class":57},"        # 定义平展层\n",[51,31968,31969,31971,31974,31976],{"class":53,"line":2822},[51,31970,31809],{"class":175},[51,31972,31973],{"class":72},".flatten",[51,31975,108],{"class":64},[51,31977,31978],{"class":72},"nn.Flatten()\n",[51,31980,31981],{"class":53,"line":2839},[51,31982,31983],{"class":57},"        # 定义全连接层\n",[51,31985,31986,31988,31991,31993,31996,31998,32000,32002],{"class":53,"line":2844},[51,31987,31809],{"class":175},[51,31989,31990],{"class":72},".f5",[51,31992,108],{"class":64},[51,31994,31995],{"class":72},"nn.Linear(",[51,31997,5064],{"class":175},[51,31999,82],{"class":72},[51,32001,2062],{"class":175},[51,32003,90],{"class":72},[51,32005,32006,32008,32011,32013,32015,32017,32019,32021],{"class":53,"line":2849},[51,32007,31809],{"class":175},[51,32009,32010],{"class":72},".f6",[51,32012,108],{"class":64},[51,32014,31995],{"class":72},[51,32016,2062],{"class":175},[51,32018,82],{"class":72},[51,32020,1956],{"class":175},[51,32022,90],{"class":72},[51,32024,32025,32027,32030,32032,32034,32036,32038,32040],{"class":53,"line":2854},[51,32026,31809],{"class":175},[51,32028,32029],{"class":72},".f7",[51,32031,108],{"class":64},[51,32033,31995],{"class":72},[51,32035,1956],{"class":175},[51,32037,82],{"class":72},[51,32039,443],{"class":175},[51,32041,90],{"class":72},[51,32043,32044],{"class":53,"line":2868},[51,32045,3480],{"emptyLinePlaceholder":1192},[51,32047,32048],{"class":53,"line":2873},[51,32049,32050],{"class":57},"    # 写工具->写前向传播\n",[51,32052,32053,32055,32058],{"class":53,"line":3657},[51,32054,31765],{"class":64},[51,32056,32057],{"class":68}," forward",[51,32059,32060],{"class":72},"(self,x):\n",[51,32062,32063,32066,32068,32070,32073,32075],{"class":53,"line":3671},[51,32064,32065],{"class":72},"        x",[51,32067,108],{"class":64},[51,32069,31787],{"class":175},[51,32071,32072],{"class":72},".sig(",[51,32074,31787],{"class":175},[51,32076,32077],{"class":72},".c1(x))\n",[51,32079,32080,32082,32084,32086],{"class":53,"line":3679},[51,32081,32065],{"class":72},[51,32083,108],{"class":64},[51,32085,31787],{"class":175},[51,32087,32088],{"class":72},".s2(x)\n",[51,32090,32091,32093,32095,32097,32099,32101],{"class":53,"line":3684},[51,32092,32065],{"class":72},[51,32094,108],{"class":64},[51,32096,31787],{"class":175},[51,32098,32072],{"class":72},[51,32100,31787],{"class":175},[51,32102,32103],{"class":72},".c3(x))\n",[51,32105,32106,32108,32110,32112],{"class":53,"line":3690},[51,32107,32065],{"class":72},[51,32109,108],{"class":64},[51,32111,31787],{"class":175},[51,32113,32114],{"class":72},".s4(x)\n",[51,32116,32117,32119,32121,32123],{"class":53,"line":3696},[51,32118,32065],{"class":72},[51,32120,108],{"class":64},[51,32122,31787],{"class":175},[51,32124,32125],{"class":72},".flatten(x)\n",[51,32127,32128,32130,32132,32134,32136,32138],{"class":53,"line":3701},[51,32129,32065],{"class":72},[51,32131,108],{"class":64},[51,32133,31787],{"class":175},[51,32135,32072],{"class":72},[51,32137,31787],{"class":175},[51,32139,32140],{"class":72},".f5(x))\n",[51,32142,32143,32145,32147,32149,32151,32153],{"class":53,"line":8910},[51,32144,32065],{"class":72},[51,32146,108],{"class":64},[51,32148,31787],{"class":175},[51,32150,32072],{"class":72},[51,32152,31787],{"class":175},[51,32154,32155],{"class":72},".f6(x))\n",[51,32157,32158,32160,32162,32164],{"class":53,"line":8934},[51,32159,32065],{"class":72},[51,32161,108],{"class":64},[51,32163,31787],{"class":175},[51,32165,32166],{"class":72},".f7(x)\n",[51,32168,32169,32171],{"class":53,"line":8939},[51,32170,15714],{"class":64},[51,32172,32173],{"class":72}," x\n",[51,32175,32176],{"class":53,"line":8945},[51,32177,3480],{"emptyLinePlaceholder":1192},[51,32179,32180,32182,32185,32187,32190],{"class":53,"line":8972},[51,32181,2633],{"class":64},[51,32183,32184],{"class":175}," __name__",[51,32186,4026],{"class":64},[51,32188,32189],{"class":282},"\"__main__\"",[51,32191,4816],{"class":72},[51,32193,32194],{"class":53,"line":8977},[51,32195,32196],{"class":57},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[51,32198,32199,32202,32204,32206,32209,32211,32214,32216,32218],{"class":53,"line":8983},[51,32200,32201],{"class":72},"    device",[51,32203,108],{"class":64},[51,32205,31415],{"class":72},[51,32207,32208],{"class":282},"\"cuda\"",[51,32210,2794],{"class":64},[51,32212,32213],{"class":72}," torch.cuda.is_available() ",[51,32215,2791],{"class":64},[51,32217,31440],{"class":282},[51,32219,90],{"class":72},[51,32221,32222],{"class":53,"line":8995},[51,32223,32224],{"class":57},"    # 如果就是想指定用cpu用下方代码:\n",[51,32226,32227],{"class":53,"line":9007},[51,32228,32229],{"class":57},"    # device=\"cpu\"\n",[51,32231,32232],{"class":53,"line":9019},[51,32233,32234],{"class":57},"    # print(device)\n",[51,32236,32237],{"class":53,"line":10678},[51,32238,3480],{"emptyLinePlaceholder":1192},[51,32240,32241],{"class":53,"line":10703},[51,32242,32243],{"class":57},"    # 实例化模型\n",[51,32245,32246],{"class":53,"line":10726},[51,32247,32248],{"class":57},"    # 将模型放到设备中去运行\n",[51,32250,32251,32254,32256],{"class":53,"line":10750},[51,32252,32253],{"class":72},"    model",[51,32255,108],{"class":64},[51,32257,32258],{"class":72},"LeNet().to(device)\n",[51,32260,32261,32264,32267,32269,32271,32273,32275,32277],{"class":53,"line":10755},[51,32262,32263],{"class":175},"    print",[51,32265,32266],{"class":72},"(summary(model,(",[51,32268,791],{"class":175},[51,32270,82],{"class":72},[51,32272,2145],{"class":175},[51,32274,82],{"class":72},[51,32276,2145],{"class":175},[51,32278,32279],{"class":72},")))\n",[40,32281,32282],{},[2564,32283],{"alt":35,"src":32284},"\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",[40,32286,32287],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[19,32289,32290],{"start":61},[22,32291,32292],{},"训练",[40,32294,32295],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[40,32297,32298],{},"在训练之前可以将数据展示看一下",[29,32300,32302],{"className":31342,"code":32301,"language":31344,"meta":35,"style":35},"# 建立画图的函数，用于展示数据\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",[37,32303,32304,32309,32314,32326,32338,32351,32356,32368,32373,32385,32390,32402,32406,32410,32431,32443,32448,32469,32480,32484,32489,32507,32518,32523,32534,32539,32550,32554,32559,32574,32587,32592,32597,32610,32623,32636,32641,32645,32650,32670,32687,32707,32720,32733,32743,32758],{"__ignoreMap":35},[51,32305,32306],{"class":53,"line":54},[51,32307,32308],{"class":57},"# 建立画图的函数，用于展示数据\n",[51,32310,32311],{"class":53,"line":61},[51,32312,32313],{"class":57},"# torchvision中包含很多内置的数据集\n",[51,32315,32316,32318,32321,32323],{"class":53,"line":93},[51,32317,31701],{"class":64},[51,32319,32320],{"class":72}," sklearn.externals.array_api_compat.torch ",[51,32322,31356],{"class":64},[51,32324,32325],{"class":72}," squeeze\n",[51,32327,32328,32330,32333,32335],{"class":53,"line":99},[51,32329,31701],{"class":64},[51,32331,32332],{"class":72}," torchvision.datasets ",[51,32334,31356],{"class":64},[51,32336,32337],{"class":72}," FashionMNIST\n",[51,32339,32340,32342,32345,32348],{"class":53,"line":120},[51,32341,31356],{"class":64},[51,32343,32344],{"class":72}," numpy ",[51,32346,32347],{"class":64},"as",[51,32349,32350],{"class":72}," np\n",[51,32352,32353],{"class":53,"line":129},[51,32354,32355],{"class":57},"# 引入处理数据集的包\n",[51,32357,32358,32360,32363,32365],{"class":53,"line":206},[51,32359,31701],{"class":64},[51,32361,32362],{"class":72}," torchvision ",[51,32364,31356],{"class":64},[51,32366,32367],{"class":72}," transforms\n",[51,32369,32370],{"class":53,"line":212},[51,32371,32372],{"class":57},"# 从torch库中引入数据处理的包\n",[51,32374,32375,32377,32380,32382],{"class":53,"line":227},[51,32376,31356],{"class":64},[51,32378,32379],{"class":72}," torch.utils.data ",[51,32381,32347],{"class":64},[51,32383,32384],{"class":72}," Data\n",[51,32386,32387],{"class":53,"line":370},[51,32388,32389],{"class":57},"# 导入画图的库\n",[51,32391,32392,32394,32397,32399],{"class":53,"line":387},[51,32393,31356],{"class":64},[51,32395,32396],{"class":72}," matplotlib.pyplot ",[51,32398,32347],{"class":64},[51,32400,32401],{"class":72}," plt\n",[51,32403,32404],{"class":53,"line":404},[51,32405,3480],{"emptyLinePlaceholder":1192},[51,32407,32408],{"class":53,"line":415},[51,32409,3480],{"emptyLinePlaceholder":1192},[51,32411,32412,32415,32417,32420,32423,32425,32428],{"class":53,"line":420},[51,32413,32414],{"class":72},"train_data",[51,32416,108],{"class":64},[51,32418,32419],{"class":72},"FashionMNIST(",[51,32421,32422],{"class":78},"root",[51,32424,108],{"class":64},[51,32426,32427],{"class":282},"'.\u002Fdata'",[51,32429,32430],{"class":72},",\n",[51,32432,32433,32436,32438,32441],{"class":53,"line":429},[51,32434,32435],{"class":78},"                        train",[51,32437,108],{"class":64},[51,32439,32440],{"class":175},"True",[51,32442,32430],{"class":72},[51,32444,32445],{"class":53,"line":434},[51,32446,32447],{"class":57},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[51,32449,32450,32453,32455,32458,32461,32463,32466],{"class":53,"line":448},[51,32451,32452],{"class":78},"                        transform",[51,32454,108],{"class":64},[51,32456,32457],{"class":72},"transforms.Compose([transforms.Resize(",[51,32459,32460],{"class":78},"size",[51,32462,108],{"class":64},[51,32464,32465],{"class":175},"224",[51,32467,32468],{"class":72},"),transforms.ToTensor()]),\n",[51,32470,32471,32474,32476,32478],{"class":53,"line":462},[51,32472,32473],{"class":78},"                        download",[51,32475,108],{"class":64},[51,32477,32440],{"class":175},[51,32479,90],{"class":72},[51,32481,32482],{"class":53,"line":470},[51,32483,3480],{"emptyLinePlaceholder":1192},[51,32485,32486],{"class":53,"line":2783},[51,32487,32488],{"class":57},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[51,32490,32491,32494,32496,32499,32502,32504],{"class":53,"line":2788},[51,32492,32493],{"class":72},"train_loader",[51,32495,108],{"class":64},[51,32497,32498],{"class":72},"Data.DataLoader(",[51,32500,32501],{"class":78},"dataset",[51,32503,108],{"class":64},[51,32505,32506],{"class":72},"train_data,\n",[51,32508,32509,32512,32514,32516],{"class":53,"line":2817},[51,32510,32511],{"class":78},"                             batch_size",[51,32513,108],{"class":64},[51,32515,1457],{"class":175},[51,32517,32430],{"class":72},[51,32519,32520],{"class":53,"line":2822},[51,32521,32522],{"class":57},"                             # 数据是否打乱\n",[51,32524,32525,32528,32530,32532],{"class":53,"line":2839},[51,32526,32527],{"class":78},"                             shuffle",[51,32529,108],{"class":64},[51,32531,32440],{"class":175},[51,32533,32430],{"class":72},[51,32535,32536],{"class":53,"line":2844},[51,32537,32538],{"class":57},"                             # 规定加载数据的进程\n",[51,32540,32541,32544,32546,32548],{"class":53,"line":2849},[51,32542,32543],{"class":78},"                             num_workers",[51,32545,108],{"class":64},[51,32547,176],{"class":175},[51,32549,90],{"class":72},[51,32551,32552],{"class":53,"line":2854},[51,32553,3480],{"emptyLinePlaceholder":1192},[51,32555,32556],{"class":53,"line":2868},[51,32557,32558],{"class":57},"# 获得一个batch的数据\n",[51,32560,32561,32563,32566,32568,32571],{"class":53,"line":2873},[51,32562,4102],{"class":64},[51,32564,32565],{"class":72}," step,(b_x,b_y) ",[51,32567,27007],{"class":64},[51,32569,32570],{"class":175}," enumerate",[51,32572,32573],{"class":72},"(train_loader):\n",[51,32575,32576,32578,32581,32583,32585],{"class":53,"line":3657},[51,32577,4178],{"class":64},[51,32579,32580],{"class":72}," step ",[51,32582,972],{"class":64},[51,32584,5169],{"class":175},[51,32586,4816],{"class":72},[51,32588,32589],{"class":53,"line":3671},[51,32590,32591],{"class":64},"        break\n",[51,32593,32594],{"class":53,"line":3679},[51,32595,32596],{"class":57},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[51,32598,32599,32602,32604,32607],{"class":53,"line":3684},[51,32600,32601],{"class":72},"batch_x",[51,32603,108],{"class":64},[51,32605,32606],{"class":72},"b_x.squeeze().numpy()  ",[51,32608,32609],{"class":57},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[51,32611,32612,32615,32617,32620],{"class":53,"line":3690},[51,32613,32614],{"class":72},"batch_y",[51,32616,108],{"class":64},[51,32618,32619],{"class":72},"b_y.numpy()   ",[51,32621,32622],{"class":57},"#将张量转换成功numpy数组\n",[51,32624,32625,32628,32630,32633],{"class":53,"line":3696},[51,32626,32627],{"class":72},"class_label",[51,32629,108],{"class":64},[51,32631,32632],{"class":72},"train_data.classes  ",[51,32634,32635],{"class":57},"#训练集标签\n",[51,32637,32638],{"class":53,"line":3701},[51,32639,32640],{"class":57},"# print(class_label)\n",[51,32642,32643],{"class":53,"line":8910},[51,32644,3480],{"emptyLinePlaceholder":1192},[51,32646,32647],{"class":53,"line":8934},[51,32648,32649],{"class":57},"# 可视化一个batch的图像\n",[51,32651,32652,32655,32658,32660,32662,32664,32666,32668],{"class":53,"line":8939},[51,32653,32654],{"class":72},"plt.figure(",[51,32656,32657],{"class":78},"figsize",[51,32659,108],{"class":64},[51,32661,73],{"class":72},[51,32663,1744],{"class":175},[51,32665,82],{"class":72},[51,32667,1568],{"class":175},[51,32669,31461],{"class":72},[51,32671,32672,32674,32677,32679,32682,32684],{"class":53,"line":8945},[51,32673,4102],{"class":64},[51,32675,32676],{"class":72}," ii ",[51,32678,27007],{"class":64},[51,32680,32681],{"class":72}," np.arange(",[51,32683,8320],{"class":175},[51,32685,32686],{"class":72},"(batch_y)):\n",[51,32688,32689,32692,32694,32696,32698,32701,32703,32705],{"class":53,"line":8972},[51,32690,32691],{"class":72},"    plt.subplot(",[51,32693,1543],{"class":175},[51,32695,82],{"class":72},[51,32697,1847],{"class":175},[51,32699,32700],{"class":72},",ii ",[51,32702,114],{"class":64},[51,32704,26082],{"class":175},[51,32706,90],{"class":72},[51,32708,32709,32712,32715,32717],{"class":53,"line":8977},[51,32710,32711],{"class":72},"    plt.imshow(batch_x[ii,:,:],",[51,32713,32714],{"class":78},"cmap",[51,32716,108],{"class":64},[51,32718,32719],{"class":72},"plt.cm.gray)\n",[51,32721,32722,32725,32727,32729,32731],{"class":53,"line":8983},[51,32723,32724],{"class":72},"    plt.title(class_label[batch_y[ii]],",[51,32726,32460],{"class":78},[51,32728,108],{"class":64},[51,32730,443],{"class":175},[51,32732,90],{"class":72},[51,32734,32735,32738,32741],{"class":53,"line":8995},[51,32736,32737],{"class":72},"    plt.axis(",[51,32739,32740],{"class":282},"\"off\"",[51,32742,90],{"class":72},[51,32744,32745,32748,32751,32753,32756],{"class":53,"line":9007},[51,32746,32747],{"class":72},"    plt.subplots_adjust(",[51,32749,32750],{"class":78},"wspace",[51,32752,108],{"class":64},[51,32754,32755],{"class":175},"0.05",[51,32757,90],{"class":72},[51,32759,32760],{"class":53,"line":9019},[51,32761,32762],{"class":72},"plt.show()\n",[40,32764,32765],{},"用matplotlib进行展示的过程可以后续再补",[40,32767,32768],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[40,32770,32771],{},"训练次数就是按照批次过整个训练集数据的次数",[40,32773,32774],{},"模型训练：",[29,32776,32778],{"className":31342,"code":32777,"language":31344,"meta":35,"style":35},"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",[37,32779,32780,32787,32794,32798,32810,32816,32827,32837,32847,32857,32867,32872,32884,32894,32898,32902,32907,32918,32931,32942,32959,32970,33009,33025,33037,33048,33053,33064,33080,33091,33102,33113,33120,33124,33129,33134,33138,33143,33153,33174,33178,33182,33187,33192,33197,33217,33221,33226,33236,33240,33245,33254,33259,33264,33269,33279,33283,33287,33292,33297,33307,33312,33322,33327,33336,33341,33350,33355,33364,33368,33373,33383,33387,33391,33396,33411,33439,33454,33458,33463,33468,33477,33482,33491,33496,33505,33510,33519,33524,33533,33538,33547,33552,33565,33570,33580,33585,33595,33601,33607,33613,33619,33630,33636,33656,33662,33673,33679,33685,33691,33697,33703,33709,33715,33735,33741,33757,33763,33777,33783,33798,33804,33813,33819,33828,33834,33840,33849,33855,33866,33872,33891,33897,33908,33914,33934,33950,33956,33970,33976,33982,33993,33999,34005,34015,34021,34032,34038,34048,34053,34059,34108,34155,34160,34166,34185,34191,34211,34217,34223,34233,34238,34244,34260,34305,34311,34317,34323,34334,34340,34346,34352,34370,34384,34393,34402,34411,34420,34426,34432,34440,34445,34451,34462,34468,34488,34494,34500,34506,34523,34529,34535,34541,34547,34553,34580,34604,34610,34616,34622,34633,34644,34650,34667,34690,34713,34719,34724,34733,34743,34749,34754,34760,34773,34779,34790,34801,34820],{"__ignoreMap":35},[51,32781,32782,32784],{"class":53,"line":54},[51,32783,31356],{"class":64},[51,32785,32786],{"class":72}," copy\n",[51,32788,32789,32791],{"class":53,"line":61},[51,32790,31356],{"class":64},[51,32792,32793],{"class":72}," time\n",[51,32795,32796],{"class":53,"line":93},[51,32797,3480],{"emptyLinePlaceholder":1192},[51,32799,32800,32802,32805,32807],{"class":53,"line":99},[51,32801,31356],{"class":64},[51,32803,32804],{"class":72}," pandas ",[51,32806,32347],{"class":64},[51,32808,32809],{"class":72}," pd\n",[51,32811,32812,32814],{"class":53,"line":120},[51,32813,31356],{"class":64},[51,32815,31359],{"class":72},[51,32817,32818,32820,32822,32824],{"class":53,"line":129},[51,32819,31701],{"class":64},[51,32821,32379],{"class":72},[51,32823,31356],{"class":64},[51,32825,32826],{"class":72}," Dataset\n",[51,32828,32829,32831,32833,32835],{"class":53,"line":206},[51,32830,31701],{"class":64},[51,32832,32332],{"class":72},[51,32834,31356],{"class":64},[51,32836,32337],{"class":72},[51,32838,32839,32841,32843,32845],{"class":53,"line":212},[51,32840,31701],{"class":64},[51,32842,32362],{"class":72},[51,32844,31356],{"class":64},[51,32846,32367],{"class":72},[51,32848,32849,32851,32853,32855],{"class":53,"line":227},[51,32850,31356],{"class":64},[51,32852,32379],{"class":72},[51,32854,32347],{"class":64},[51,32856,32384],{"class":72},[51,32858,32859,32861,32863,32865],{"class":53,"line":370},[51,32860,31356],{"class":64},[51,32862,32396],{"class":72},[51,32864,32347],{"class":64},[51,32866,32401],{"class":72},[51,32868,32869],{"class":53,"line":387},[51,32870,32871],{"class":57},"# 导入模型\n",[51,32873,32874,32876,32879,32881],{"class":53,"line":404},[51,32875,31701],{"class":64},[51,32877,32878],{"class":72}," model ",[51,32880,31356],{"class":64},[51,32882,32883],{"class":72}," LeNet\n",[51,32885,32886,32888,32890,32892],{"class":53,"line":415},[51,32887,31701],{"class":64},[51,32889,31704],{"class":72},[51,32891,31356],{"class":64},[51,32893,31709],{"class":72},[51,32895,32896],{"class":53,"line":420},[51,32897,3480],{"emptyLinePlaceholder":1192},[51,32899,32900],{"class":53,"line":429},[51,32901,3480],{"emptyLinePlaceholder":1192},[51,32903,32904],{"class":53,"line":434},[51,32905,32906],{"class":57},"# 处理训练集与验证集函数--->划分数据集\n",[51,32908,32909,32912,32915],{"class":53,"line":448},[51,32910,32911],{"class":64},"def",[51,32913,32914],{"class":68}," train_val_data_process",[51,32916,32917],{"class":72},"():\n",[51,32919,32920,32923,32925,32927,32929],{"class":53,"line":462},[51,32921,32922],{"class":72},"    train_data",[51,32924,108],{"class":64},[51,32926,32419],{"class":72},[51,32928,32427],{"class":282},[51,32930,32430],{"class":72},[51,32932,32933,32936,32938,32940],{"class":53,"line":470},[51,32934,32935],{"class":78},"                            train",[51,32937,108],{"class":64},[51,32939,32440],{"class":175},[51,32941,32430],{"class":72},[51,32943,32944,32947,32949,32951,32953,32955,32957],{"class":53,"line":2783},[51,32945,32946],{"class":78},"                            transform",[51,32948,108],{"class":64},[51,32950,32457],{"class":72},[51,32952,32460],{"class":78},[51,32954,108],{"class":64},[51,32956,2145],{"class":175},[51,32958,32468],{"class":72},[51,32960,32961,32964,32966,32968],{"class":53,"line":2788},[51,32962,32963],{"class":78},"                            download",[51,32965,108],{"class":64},[51,32967,32440],{"class":175},[51,32969,90],{"class":72},[51,32971,32972,32975,32977,32980,32983,32985,32988,32990,32992,32995,32997,32999,33002,33004,33006],{"class":53,"line":2817},[51,32973,32974],{"class":72},"    train_data,val_data",[51,32976,108],{"class":64},[51,32978,32979],{"class":72},"Data.random_split(train_data,[",[51,32981,32982],{"class":175},"round",[51,32984,73],{"class":72},[51,32986,32987],{"class":175},"0.8",[51,32989,1702],{"class":64},[51,32991,8320],{"class":175},[51,32993,32994],{"class":72},"(train_data)),",[51,32996,32982],{"class":175},[51,32998,73],{"class":72},[51,33000,33001],{"class":175},"0.2",[51,33003,1702],{"class":64},[51,33005,8320],{"class":175},[51,33007,33008],{"class":72},"(train_data))])\n",[51,33010,33011,33014,33016,33019,33021,33023],{"class":53,"line":2822},[51,33012,33013],{"class":72},"    train_dataloader ",[51,33015,108],{"class":64},[51,33017,33018],{"class":72}," Data.DataLoader(",[51,33020,32501],{"class":78},[51,33022,108],{"class":64},[51,33024,32506],{"class":72},[51,33026,33027,33030,33032,33035],{"class":53,"line":2839},[51,33028,33029],{"class":78},"                                       batch_size",[51,33031,108],{"class":64},[51,33033,33034],{"class":175},"128",[51,33036,32430],{"class":72},[51,33038,33039,33042,33044,33046],{"class":53,"line":2844},[51,33040,33041],{"class":78},"                                       shuffle",[51,33043,108],{"class":64},[51,33045,32440],{"class":175},[51,33047,32430],{"class":72},[51,33049,33050],{"class":53,"line":2849},[51,33051,33052],{"class":57},"                                       # 规定8个进程\n",[51,33054,33055,33058,33060,33062],{"class":53,"line":2854},[51,33056,33057],{"class":78},"                                       num_workers",[51,33059,108],{"class":64},[51,33061,1643],{"class":175},[51,33063,90],{"class":72},[51,33065,33066,33069,33071,33073,33075,33077],{"class":53,"line":2868},[51,33067,33068],{"class":72},"    val_dataloader",[51,33070,108],{"class":64},[51,33072,32498],{"class":72},[51,33074,32501],{"class":78},[51,33076,108],{"class":64},[51,33078,33079],{"class":72},"val_data,\n",[51,33081,33082,33085,33087,33089],{"class":53,"line":2873},[51,33083,33084],{"class":78},"                                   batch_size",[51,33086,108],{"class":64},[51,33088,33034],{"class":175},[51,33090,32430],{"class":72},[51,33092,33093,33096,33098,33100],{"class":53,"line":3657},[51,33094,33095],{"class":78},"                                   shuffle",[51,33097,108],{"class":64},[51,33099,32440],{"class":175},[51,33101,32430],{"class":72},[51,33103,33104,33107,33109,33111],{"class":53,"line":3671},[51,33105,33106],{"class":78},"                                   num_workers",[51,33108,108],{"class":64},[51,33110,1643],{"class":175},[51,33112,90],{"class":72},[51,33114,33115,33117],{"class":53,"line":3679},[51,33116,123],{"class":64},[51,33118,33119],{"class":72}," train_dataloader,val_dataloader\n",[51,33121,33122],{"class":53,"line":3684},[51,33123,3480],{"emptyLinePlaceholder":1192},[51,33125,33126],{"class":53,"line":3690},[51,33127,33128],{"class":57},"# 验证是否出错\n",[51,33130,33131],{"class":53,"line":3696},[51,33132,33133],{"class":57},"# train_val_data_process()\n",[51,33135,33136],{"class":53,"line":3701},[51,33137,3480],{"emptyLinePlaceholder":1192},[51,33139,33140],{"class":53,"line":8910},[51,33141,33142],{"class":57},"# 定义模型训练函数\n",[51,33144,33145,33147,33150],{"class":53,"line":8934},[51,33146,32911],{"class":64},[51,33148,33149],{"class":68}," train_model_process",[51,33151,33152],{"class":72},"(model,train_dataloader,val_dataloader,num_epochs):\n",[51,33154,33155,33157,33159,33161,33163,33165,33167,33169,33172],{"class":53,"line":8939},[51,33156,32201],{"class":72},[51,33158,108],{"class":64},[51,33160,31415],{"class":72},[51,33162,32208],{"class":282},[51,33164,2794],{"class":64},[51,33166,32213],{"class":72},[51,33168,2791],{"class":64},[51,33170,33171],{"class":282}," 'cpu'",[51,33173,90],{"class":72},[51,33175,33176],{"class":53,"line":8945},[51,33177,3480],{"emptyLinePlaceholder":1192},[51,33179,33180],{"class":53,"line":8972},[51,33181,3480],{"emptyLinePlaceholder":1192},[51,33183,33184],{"class":53,"line":8977},[51,33185,33186],{"class":57},"    # 定义优化器\n",[51,33188,33189],{"class":53,"line":8983},[51,33190,33191],{"class":57},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[51,33193,33194],{"class":53,"line":8995},[51,33195,33196],{"class":57},"    # lr为学习率\n",[51,33198,33199,33202,33204,33207,33210,33212,33215],{"class":53,"line":9007},[51,33200,33201],{"class":72},"    optimizer",[51,33203,108],{"class":64},[51,33205,33206],{"class":72},"torch.optim.Adam(model.parameters(),",[51,33208,33209],{"class":78},"lr",[51,33211,108],{"class":64},[51,33213,33214],{"class":175},"0.001",[51,33216,90],{"class":72},[51,33218,33219],{"class":53,"line":9019},[51,33220,3480],{"emptyLinePlaceholder":1192},[51,33222,33223],{"class":53,"line":10678},[51,33224,33225],{"class":57},"    # 定义损失函数使用交叉熵损失函数\n",[51,33227,33228,33231,33233],{"class":53,"line":10703},[51,33229,33230],{"class":72},"    criterion",[51,33232,108],{"class":64},[51,33234,33235],{"class":72},"nn.CrossEntropyLoss()\n",[51,33237,33238],{"class":53,"line":10726},[51,33239,3480],{"emptyLinePlaceholder":1192},[51,33241,33242],{"class":53,"line":10750},[51,33243,33244],{"class":57},"    # 将模型放到GPU中进行训练\n",[51,33246,33247,33249,33251],{"class":53,"line":10755},[51,33248,32253],{"class":72},[51,33250,108],{"class":64},[51,33252,33253],{"class":72},"model.to(device)\n",[51,33255,33256],{"class":53,"line":10760},[51,33257,33258],{"class":57},"    # 复制当前模型的参数\n",[51,33260,33261],{"class":53,"line":10765},[51,33262,33263],{"class":57},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[51,33265,33266],{"class":53,"line":10774},[51,33267,33268],{"class":57},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[51,33270,33271,33274,33276],{"class":53,"line":10779},[51,33272,33273],{"class":72},"    best_model_wts",[51,33275,108],{"class":64},[51,33277,33278],{"class":72},"copy.deepcopy(model.state_dict())\n",[51,33280,33281],{"class":53,"line":10785},[51,33282,3480],{"emptyLinePlaceholder":1192},[51,33284,33285],{"class":53,"line":10806},[51,33286,3480],{"emptyLinePlaceholder":1192},[51,33288,33289],{"class":53,"line":10812},[51,33290,33291],{"class":57},"    # 初始化参数\n",[51,33293,33294],{"class":53,"line":10826},[51,33295,33296],{"class":57},"    # 最高准确度\n",[51,33298,33299,33302,33304],{"class":53,"line":10832},[51,33300,33301],{"class":72},"    best_acc",[51,33303,108],{"class":64},[51,33305,33306],{"class":175},"0.0\n",[51,33308,33309],{"class":53,"line":10859},[51,33310,33311],{"class":57},"    # 训练集损失列表\n",[51,33313,33314,33317,33319],{"class":53,"line":10868},[51,33315,33316],{"class":72},"    train_loss_all",[51,33318,108],{"class":64},[51,33320,33321],{"class":72},"[]\n",[51,33323,33324],{"class":53,"line":10874},[51,33325,33326],{"class":57},"    # 验证集函数列表\n",[51,33328,33329,33332,33334],{"class":53,"line":10882},[51,33330,33331],{"class":72},"    val_loss_all",[51,33333,108],{"class":64},[51,33335,33321],{"class":72},[51,33337,33338],{"class":53,"line":10887},[51,33339,33340],{"class":57},"    # 训练集准确度列表\n",[51,33342,33343,33346,33348],{"class":53,"line":17566},[51,33344,33345],{"class":72},"    train_acc_all",[51,33347,108],{"class":64},[51,33349,33321],{"class":72},[51,33351,33352],{"class":53,"line":17572},[51,33353,33354],{"class":57},"    # 验证集准确度列表\n",[51,33356,33357,33360,33362],{"class":53,"line":17595},[51,33358,33359],{"class":72},"    val_acc_all",[51,33361,108],{"class":64},[51,33363,33321],{"class":72},[51,33365,33366],{"class":53,"line":17601},[51,33367,3480],{"emptyLinePlaceholder":1192},[51,33369,33370],{"class":53,"line":17624},[51,33371,33372],{"class":57},"    # 保存当前时间--->方便看每轮训练的时间\n",[51,33374,33375,33378,33380],{"class":53,"line":17638},[51,33376,33377],{"class":72},"    since",[51,33379,108],{"class":64},[51,33381,33382],{"class":72},"time.time()\n",[51,33384,33385],{"class":53,"line":17658},[51,33386,3480],{"emptyLinePlaceholder":1192},[51,33388,33389],{"class":53,"line":17664},[51,33390,3480],{"emptyLinePlaceholder":1192},[51,33392,33393],{"class":53,"line":17675},[51,33394,33395],{"class":57},"    # 准备工作完成--->开始训练模型\n",[51,33397,33398,33400,33403,33405,33408],{"class":53,"line":17698},[51,33399,4278],{"class":64},[51,33401,33402],{"class":72}," epoch ",[51,33404,27007],{"class":64},[51,33406,33407],{"class":175}," range",[51,33409,33410],{"class":72},"(num_epochs):\n",[51,33412,33413,33416,33418,33421,33424,33426,33428,33430,33433,33435,33437],{"class":53,"line":17720},[51,33414,33415],{"class":175},"        print",[51,33417,73],{"class":72},[51,33419,33420],{"class":282},"\"Epoch ",[51,33422,33423],{"class":175},"{}",[51,33425,1830],{"class":282},[51,33427,33423],{"class":175},[51,33429,1503],{"class":282},[51,33431,33432],{"class":72},".format(epoch,num_epochs",[51,33434,1778],{"class":64},[51,33436,791],{"class":175},[51,33438,31461],{"class":72},[51,33440,33441,33443,33445,33448,33450,33452],{"class":53,"line":17725},[51,33442,33415],{"class":175},[51,33444,73],{"class":72},[51,33446,33447],{"class":282},"\"-\"",[51,33449,1702],{"class":64},[51,33451,443],{"class":175},[51,33453,90],{"class":72},[51,33455,33456],{"class":53,"line":17731},[51,33457,3480],{"emptyLinePlaceholder":1192},[51,33459,33460],{"class":53,"line":17745},[51,33461,33462],{"class":57},"        # 初始化参数\n",[51,33464,33465],{"class":53,"line":17758},[51,33466,33467],{"class":57},"        # 训练集损失函数\n",[51,33469,33470,33473,33475],{"class":53,"line":17763},[51,33471,33472],{"class":72},"        train_loss",[51,33474,108],{"class":64},[51,33476,33306],{"class":175},[51,33478,33479],{"class":53,"line":17777},[51,33480,33481],{"class":57},"        # 训练集准确度\n",[51,33483,33484,33487,33489],{"class":53,"line":17782},[51,33485,33486],{"class":72},"        train_corrects",[51,33488,108],{"class":64},[51,33490,4162],{"class":175},[51,33492,33493],{"class":53,"line":17788},[51,33494,33495],{"class":57},"        # 验证集损失函数\n",[51,33497,33498,33501,33503],{"class":53,"line":17793},[51,33499,33500],{"class":72},"        val_loss",[51,33502,108],{"class":64},[51,33504,33306],{"class":175},[51,33506,33507],{"class":53,"line":17807},[51,33508,33509],{"class":57},"        # 验证集准确度\n",[51,33511,33512,33515,33517],{"class":53,"line":17812},[51,33513,33514],{"class":72},"        val_corrects",[51,33516,108],{"class":64},[51,33518,4162],{"class":175},[51,33520,33521],{"class":53,"line":17817},[51,33522,33523],{"class":57},"        # 训练集样本数量\n",[51,33525,33526,33529,33531],{"class":53,"line":17831},[51,33527,33528],{"class":72},"        train_num",[51,33530,108],{"class":64},[51,33532,4162],{"class":175},[51,33534,33535],{"class":53,"line":17843},[51,33536,33537],{"class":57},"        # 验证集样本数量\n",[51,33539,33540,33543,33545],{"class":53,"line":17848},[51,33541,33542],{"class":72},"        val_num",[51,33544,108],{"class":64},[51,33546,4162],{"class":175},[51,33548,33549],{"class":53,"line":17861},[51,33550,33551],{"class":57},"        # 将数据放到设备,并开始训练\n",[51,33553,33554,33556,33558,33560,33562],{"class":53,"line":17866},[51,33555,4480],{"class":64},[51,33557,32565],{"class":72},[51,33559,27007],{"class":64},[51,33561,32570],{"class":175},[51,33563,33564],{"class":72},"(train_dataloader):\n",[51,33566,33567],{"class":53,"line":17871},[51,33568,33569],{"class":57},"            # 将特征放入到训练设备\n",[51,33571,33572,33575,33577],{"class":53,"line":17876},[51,33573,33574],{"class":72},"            b_x",[51,33576,108],{"class":64},[51,33578,33579],{"class":72},"b_x.to(device)\n",[51,33581,33582],{"class":53,"line":17889},[51,33583,33584],{"class":57},"            # 将标签放入到训练设备当中\n",[51,33586,33587,33590,33592],{"class":53,"line":17894},[51,33588,33589],{"class":72},"            b_y",[51,33591,108],{"class":64},[51,33593,33594],{"class":72},"b_y.to(device)\n",[51,33596,33598],{"class":53,"line":33597},98,[51,33599,33600],{"class":57},"            # 设置模型为训练模式\n",[51,33602,33604],{"class":53,"line":33603},99,[51,33605,33606],{"class":72},"            model.train()\n",[51,33608,33610],{"class":53,"line":33609},100,[51,33611,33612],{"class":57},"            # 将数据放到模型当中,开始前向传播\n",[51,33614,33616],{"class":53,"line":33615},101,[51,33617,33618],{"class":57},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[51,33620,33622,33625,33627],{"class":53,"line":33621},102,[51,33623,33624],{"class":72},"            output",[51,33626,108],{"class":64},[51,33628,33629],{"class":72},"model(b_x)\n",[51,33631,33633],{"class":53,"line":33632},103,[51,33634,33635],{"class":57},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[51,33637,33639,33642,33644,33647,33650,33652,33654],{"class":53,"line":33638},104,[51,33640,33641],{"class":72},"            pre_lab",[51,33643,108],{"class":64},[51,33645,33646],{"class":72},"torch.argmax(output,",[51,33648,33649],{"class":78},"dim",[51,33651,108],{"class":64},[51,33653,791],{"class":175},[51,33655,90],{"class":72},[51,33657,33659],{"class":53,"line":33658},105,[51,33660,33661],{"class":57},"            # 计算每一个batch的损失函数\n",[51,33663,33665,33668,33670],{"class":53,"line":33664},106,[51,33666,33667],{"class":72},"            loss",[51,33669,108],{"class":64},[51,33671,33672],{"class":72},"criterion(output,b_y)\n",[51,33674,33676],{"class":53,"line":33675},107,[51,33677,33678],{"class":57},"            # 将梯度初始化为0\n",[51,33680,33682],{"class":53,"line":33681},108,[51,33683,33684],{"class":72},"            optimizer.zero_grad()\n",[51,33686,33688],{"class":53,"line":33687},109,[51,33689,33690],{"class":57},"            # 梯度置为0后再进行反向传播\n",[51,33692,33694],{"class":53,"line":33693},110,[51,33695,33696],{"class":72},"            loss.backward()\n",[51,33698,33700],{"class":53,"line":33699},111,[51,33701,33702],{"class":57},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[51,33704,33706],{"class":53,"line":33705},112,[51,33707,33708],{"class":72},"            optimizer.step()\n",[51,33710,33712],{"class":53,"line":33711},113,[51,33713,33714],{"class":57},"            # loss.item()指的是batch的平均损失\n",[51,33716,33718,33721,33723,33726,33728,33731,33733],{"class":53,"line":33717},114,[51,33719,33720],{"class":72},"            train_loss",[51,33722,10439],{"class":64},[51,33724,33725],{"class":72},"loss.item()",[51,33727,1702],{"class":64},[51,33729,33730],{"class":72},"b_x.size(",[51,33732,176],{"class":175},[51,33734,90],{"class":72},[51,33736,33738],{"class":53,"line":33737},115,[51,33739,33740],{"class":57},"            # 计算每个批次中正确预测的数量\n",[51,33742,33744,33747,33749,33752,33754],{"class":53,"line":33743},116,[51,33745,33746],{"class":72},"            train_corrects",[51,33748,10439],{"class":64},[51,33750,33751],{"class":72},"torch.sum(pre_lab",[51,33753,4026],{"class":64},[51,33755,33756],{"class":72},"b_y.data)\n",[51,33758,33760],{"class":53,"line":33759},117,[51,33761,33762],{"class":57},"            # 计算目前为止一共处理了多少样本\n",[51,33764,33766,33769,33771,33773,33775],{"class":53,"line":33765},118,[51,33767,33768],{"class":72},"            train_num",[51,33770,10439],{"class":64},[51,33772,33730],{"class":72},[51,33774,176],{"class":175},[51,33776,90],{"class":72},[51,33778,33780],{"class":53,"line":33779},119,[51,33781,33782],{"class":57},"        # 验证数据\n",[51,33784,33786,33788,33791,33793,33795],{"class":53,"line":33785},120,[51,33787,4480],{"class":64},[51,33789,33790],{"class":72}," step ,(b_x,b_y) ",[51,33792,27007],{"class":64},[51,33794,32570],{"class":175},[51,33796,33797],{"class":72},"(val_dataloader):\n",[51,33799,33801],{"class":53,"line":33800},121,[51,33802,33803],{"class":57},"            # 将特征放到验证设备当中\n",[51,33805,33807,33809,33811],{"class":53,"line":33806},122,[51,33808,33574],{"class":72},[51,33810,108],{"class":64},[51,33812,33579],{"class":72},[51,33814,33816],{"class":53,"line":33815},123,[51,33817,33818],{"class":57},"            # 将标签放到放到训练设备当中\n",[51,33820,33822,33824,33826],{"class":53,"line":33821},124,[51,33823,33589],{"class":72},[51,33825,108],{"class":64},[51,33827,33594],{"class":72},[51,33829,33831],{"class":53,"line":33830},125,[51,33832,33833],{"class":57},"            # 开启验证模式，设置模型为评估模式\n",[51,33835,33837],{"class":53,"line":33836},126,[51,33838,33839],{"class":72},"            model.eval()\n",[51,33841,33843,33846],{"class":53,"line":33842},127,[51,33844,33845],{"class":64},"            with",[51,33847,33848],{"class":72}," torch.no_grad():\n",[51,33850,33852],{"class":53,"line":33851},128,[51,33853,33854],{"class":57},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[51,33856,33858,33861,33863],{"class":53,"line":33857},129,[51,33859,33860],{"class":72},"                output ",[51,33862,108],{"class":64},[51,33864,33865],{"class":72}," model(b_x)\n",[51,33867,33869],{"class":53,"line":33868},130,[51,33870,33871],{"class":57},"                # 查找每一行中最大值对应的下标\n",[51,33873,33875,33878,33880,33883,33885,33887,33889],{"class":53,"line":33874},131,[51,33876,33877],{"class":72},"                pre_lab ",[51,33879,108],{"class":64},[51,33881,33882],{"class":72}," torch.argmax(output, ",[51,33884,33649],{"class":78},[51,33886,108],{"class":64},[51,33888,791],{"class":175},[51,33890,90],{"class":72},[51,33892,33894],{"class":53,"line":33893},132,[51,33895,33896],{"class":57},"                # 计算验证集上的当前 batch 损失\n",[51,33898,33900,33903,33905],{"class":53,"line":33899},133,[51,33901,33902],{"class":72},"                val_batch_loss ",[51,33904,108],{"class":64},[51,33906,33907],{"class":72}," criterion(output, b_y)\n",[51,33909,33911],{"class":53,"line":33910},134,[51,33912,33913],{"class":57},"                # 对损失函数进行累加（按样本数加权）\n",[51,33915,33917,33920,33922,33925,33927,33930,33932],{"class":53,"line":33916},135,[51,33918,33919],{"class":72},"                val_loss ",[51,33921,10439],{"class":64},[51,33923,33924],{"class":72}," val_batch_loss.item() ",[51,33926,1702],{"class":64},[51,33928,33929],{"class":72}," b_x.size(",[51,33931,176],{"class":175},[51,33933,90],{"class":72},[51,33935,33937,33940,33942,33945,33947],{"class":53,"line":33936},136,[51,33938,33939],{"class":72},"                val_corrects ",[51,33941,10439],{"class":64},[51,33943,33944],{"class":72}," torch.sum(pre_lab ",[51,33946,4026],{"class":64},[51,33948,33949],{"class":72}," b_y.data)\n",[51,33951,33953],{"class":53,"line":33952},137,[51,33954,33955],{"class":57},"                # 当前用于验证的样本数量\n",[51,33957,33959,33962,33964,33966,33968],{"class":53,"line":33958},138,[51,33960,33961],{"class":72},"            val_num ",[51,33963,10439],{"class":64},[51,33965,33929],{"class":72},[51,33967,176],{"class":175},[51,33969,90],{"class":72},[51,33971,33973],{"class":53,"line":33972},139,[51,33974,33975],{"class":57},"        # 计算并保存每一次迭代的loss值和准确率\n",[51,33977,33979],{"class":53,"line":33978},140,[51,33980,33981],{"class":57},"        # 计算并保存训练集的loss值\n",[51,33983,33985,33988,33990],{"class":53,"line":33984},141,[51,33986,33987],{"class":72},"        train_loss_all.append(train_loss",[51,33989,1830],{"class":64},[51,33991,33992],{"class":72},"train_num)\n",[51,33994,33996],{"class":53,"line":33995},142,[51,33997,33998],{"class":57},"        # 取双精度\n",[51,34000,34002],{"class":53,"line":34001},143,[51,34003,34004],{"class":57},"        # 计算并保存训练集的准确率\n",[51,34006,34008,34011,34013],{"class":53,"line":34007},144,[51,34009,34010],{"class":72},"        train_acc_all.append(train_corrects.double().item()",[51,34012,1830],{"class":64},[51,34014,33992],{"class":72},[51,34016,34018],{"class":53,"line":34017},145,[51,34019,34020],{"class":57},"        # 计算并保存验证集的loss值\n",[51,34022,34024,34027,34029],{"class":53,"line":34023},146,[51,34025,34026],{"class":72},"        val_loss_all.append(val_loss",[51,34028,1830],{"class":64},[51,34030,34031],{"class":72},"val_num)\n",[51,34033,34035],{"class":53,"line":34034},147,[51,34036,34037],{"class":57},"        # 计算并保存验证集的准确率\n",[51,34039,34041,34044,34046],{"class":53,"line":34040},148,[51,34042,34043],{"class":72},"        val_acc_all.append(val_corrects.double().item()",[51,34045,1830],{"class":64},[51,34047,34031],{"class":72},[51,34049,34051],{"class":53,"line":34050},149,[51,34052,3480],{"emptyLinePlaceholder":1192},[51,34054,34056],{"class":53,"line":34055},150,[51,34057,34058],{"class":57},"        # 打印训练一轮的loss值和准确率\n",[51,34060,34062,34064,34066,34068,34070,34073,34075,34078,34080,34083,34085,34087,34089,34091,34094,34096,34098,34101,34103,34105],{"class":53,"line":34061},151,[51,34063,33415],{"class":175},[51,34065,73],{"class":72},[51,34067,4669],{"class":282},[51,34069,33423],{"class":175},[51,34071,34072],{"class":282},"train loss:",[51,34074,2140],{"class":175},[51,34076,34077],{"class":64},":.4f",[51,34079,2190],{"class":175},[51,34081,34082],{"class":282}," train acc:",[51,34084,2140],{"class":175},[51,34086,34077],{"class":64},[51,34088,2190],{"class":175},[51,34090,4669],{"class":282},[51,34092,34093],{"class":72},".format(epoch,train_loss_all[",[51,34095,1778],{"class":64},[51,34097,791],{"class":175},[51,34099,34100],{"class":72},"],train_acc_all[",[51,34102,1778],{"class":64},[51,34104,791],{"class":175},[51,34106,34107],{"class":72},"]))\n",[51,34109,34111,34113,34115,34117,34119,34122,34124,34126,34128,34131,34133,34135,34137,34139,34142,34144,34146,34149,34151,34153],{"class":53,"line":34110},152,[51,34112,33415],{"class":175},[51,34114,73],{"class":72},[51,34116,4669],{"class":282},[51,34118,33423],{"class":175},[51,34120,34121],{"class":282},"val loss:",[51,34123,2140],{"class":175},[51,34125,34077],{"class":64},[51,34127,2190],{"class":175},[51,34129,34130],{"class":282}," val acc:",[51,34132,2140],{"class":175},[51,34134,34077],{"class":64},[51,34136,2190],{"class":175},[51,34138,4669],{"class":282},[51,34140,34141],{"class":72},".format(epoch,val_loss_all[",[51,34143,1778],{"class":64},[51,34145,791],{"class":175},[51,34147,34148],{"class":72},"],val_acc_all[",[51,34150,1778],{"class":64},[51,34152,791],{"class":175},[51,34154,34107],{"class":72},[51,34156,34158],{"class":53,"line":34157},153,[51,34159,3480],{"emptyLinePlaceholder":1192},[51,34161,34163],{"class":53,"line":34162},154,[51,34164,34165],{"class":57},"        # 判断准确度--->保存最优模型\n",[51,34167,34169,34171,34174,34176,34178,34180,34182],{"class":53,"line":34168},155,[51,34170,3577],{"class":64},[51,34172,34173],{"class":72}," val_acc_all[",[51,34175,1778],{"class":64},[51,34177,791],{"class":175},[51,34179,2184],{"class":72},[51,34181,972],{"class":64},[51,34183,34184],{"class":72},"best_acc:\n",[51,34186,34188],{"class":53,"line":34187},156,[51,34189,34190],{"class":57},"            # 保存当前模型准确度\n",[51,34192,34194,34197,34199,34201,34204,34206,34208],{"class":53,"line":34193},157,[51,34195,34196],{"class":72},"            best_acc:",[51,34198,1300],{"class":175},[51,34200,108],{"class":64},[51,34202,34203],{"class":72},"val_acc_all[",[51,34205,1778],{"class":64},[51,34207,791],{"class":175},[51,34209,34210],{"class":72},"]\n",[51,34212,34214],{"class":53,"line":34213},158,[51,34215,34216],{"class":57},"            # 保存当前的准确度\n",[51,34218,34220],{"class":53,"line":34219},159,[51,34221,34222],{"class":57},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[51,34224,34226,34229,34231],{"class":53,"line":34225},160,[51,34227,34228],{"class":72},"            best_model_wts",[51,34230,108],{"class":64},[51,34232,33278],{"class":72},[51,34234,34236],{"class":53,"line":34235},161,[51,34237,3480],{"emptyLinePlaceholder":1192},[51,34239,34241],{"class":53,"line":34240},162,[51,34242,34243],{"class":57},"        # 计算耗时\n",[51,34245,34247,34250,34252,34255,34257],{"class":53,"line":34246},163,[51,34248,34249],{"class":72},"        time_use",[51,34251,108],{"class":64},[51,34253,34254],{"class":72},"time.time()",[51,34256,1778],{"class":64},[51,34258,34259],{"class":72},"since\n",[51,34261,34263,34265,34267,34270,34272,34275,34277,34279,34281,34283,34285,34288,34291,34294,34296,34299,34301,34303],{"class":53,"line":34262},164,[51,34264,33415],{"class":175},[51,34266,73],{"class":72},[51,34268,34269],{"class":282},"'训练和验证耗费的时间",[51,34271,2140],{"class":175},[51,34273,34274],{"class":64},":.0f",[51,34276,2190],{"class":175},[51,34278,1790],{"class":282},[51,34280,2140],{"class":175},[51,34282,34274],{"class":64},[51,34284,2190],{"class":175},[51,34286,34287],{"class":282},"s'",[51,34289,34290],{"class":72},".format(time_use",[51,34292,34293],{"class":64},"\u002F\u002F",[51,34295,2151],{"class":175},[51,34297,34298],{"class":72},",time_use",[51,34300,1577],{"class":64},[51,34302,2151],{"class":175},[51,34304,31461],{"class":72},[51,34306,34308],{"class":53,"line":34307},165,[51,34309,34310],{"class":57},"    # 选择最优参数\n",[51,34312,34314],{"class":53,"line":34313},166,[51,34315,34316],{"class":57},"    # 加载最高准确率下的模型参数\n",[51,34318,34320],{"class":53,"line":34319},167,[51,34321,34322],{"class":57},"    # model.load_state_dict(best_model_wts)\n",[51,34324,34326,34329,34332],{"class":53,"line":34325},168,[51,34327,34328],{"class":72},"    torch.save(model.state_dict(best_model_wts), ",[51,34330,34331],{"class":282},"'.\u002Fbest_model.pth'",[51,34333,90],{"class":72},[51,34335,34337],{"class":53,"line":34336},169,[51,34338,34339],{"class":57},"    # 或者写成\n",[51,34341,34343],{"class":53,"line":34342},170,[51,34344,34345],{"class":57},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[51,34347,34349],{"class":53,"line":34348},171,[51,34350,34351],{"class":57},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[51,34353,34355,34358,34360,34363,34366,34368],{"class":53,"line":34354},172,[51,34356,34357],{"class":72},"    train_process",[51,34359,108],{"class":64},[51,34361,34362],{"class":72},"pd.DataFrame(",[51,34364,34365],{"class":78},"data",[51,34367,108],{"class":64},[51,34369,96],{"class":72},[51,34371,34373,34376,34378,34381],{"class":53,"line":34372},173,[51,34374,34375],{"class":282},"        \"epoch\"",[51,34377,984],{"class":72},[51,34379,34380],{"class":175},"range",[51,34382,34383],{"class":72},"(num_epochs),\n",[51,34385,34387,34390],{"class":53,"line":34386},174,[51,34388,34389],{"class":282},"        \"train_loss_all\"",[51,34391,34392],{"class":72},":train_loss_all,\n",[51,34394,34396,34399],{"class":53,"line":34395},175,[51,34397,34398],{"class":282},"        \"val_loss_all\"",[51,34400,34401],{"class":72},":val_loss_all,\n",[51,34403,34405,34408],{"class":53,"line":34404},176,[51,34406,34407],{"class":282},"        \"train_acc_all\"",[51,34409,34410],{"class":72},":train_acc_all,\n",[51,34412,34414,34417],{"class":53,"line":34413},177,[51,34415,34416],{"class":282},"        \"val_acc_all\"",[51,34418,34419],{"class":72},":val_acc_all\n",[51,34421,34423],{"class":53,"line":34422},178,[51,34424,34425],{"class":72},"    })\n",[51,34427,34429],{"class":53,"line":34428},179,[51,34430,34431],{"class":57},"    # 返回训练保存的过程\n",[51,34433,34435,34437],{"class":53,"line":34434},180,[51,34436,123],{"class":64},[51,34438,34439],{"class":72}," train_process\n",[51,34441,34443],{"class":53,"line":34442},181,[51,34444,3480],{"emptyLinePlaceholder":1192},[51,34446,34448],{"class":53,"line":34447},182,[51,34449,34450],{"class":57},"# 将loss值和精度按照图片的形式展示出来\n",[51,34452,34454,34456,34459],{"class":53,"line":34453},183,[51,34455,32911],{"class":64},[51,34457,34458],{"class":68}," matplot_acc_loss",[51,34460,34461],{"class":72},"(train_process):\n",[51,34463,34465],{"class":53,"line":34464},184,[51,34466,34467],{"class":57},"    # 设置图的大小\n",[51,34469,34471,34474,34476,34478,34480,34482,34484,34486],{"class":53,"line":34470},185,[51,34472,34473],{"class":72},"    plt.figure(",[51,34475,32657],{"class":78},[51,34477,108],{"class":64},[51,34479,73],{"class":72},[51,34481,1744],{"class":175},[51,34483,82],{"class":72},[51,34485,1543],{"class":175},[51,34487,31461],{"class":72},[51,34489,34491],{"class":53,"line":34490},186,[51,34492,34493],{"class":57},"    # 设置图中有几张图\n",[51,34495,34497],{"class":53,"line":34496},187,[51,34498,34499],{"class":57},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[51,34501,34503],{"class":53,"line":34502},188,[51,34504,34505],{"class":57},"    # ①loss图\n",[51,34507,34509,34511,34513,34515,34517,34519,34521],{"class":53,"line":34508},189,[51,34510,32691],{"class":72},[51,34512,791],{"class":175},[51,34514,82],{"class":72},[51,34516,1334],{"class":175},[51,34518,82],{"class":72},[51,34520,791],{"class":175},[51,34522,90],{"class":72},[51,34524,34526],{"class":53,"line":34525},190,[51,34527,34528],{"class":57},"    # 补充:\n",[51,34530,34532],{"class":53,"line":34531},191,[51,34533,34534],{"class":57},"    # plt.subplot(nrows, ncols, index)\n",[51,34536,34538],{"class":53,"line":34537},192,[51,34539,34540],{"class":57},"    # nrows：行数\n",[51,34542,34544],{"class":53,"line":34543},193,[51,34545,34546],{"class":57},"    # ncols：列数\n",[51,34548,34550],{"class":53,"line":34549},194,[51,34551,34552],{"class":57},"    # index：目前选中第几个子图（从1开始）\n",[51,34554,34556,34559,34562,34565,34568,34570,34573,34575,34578],{"class":53,"line":34555},195,[51,34557,34558],{"class":72},"    plt.plot(train_process[",[51,34560,34561],{"class":282},"\"epoch\"",[51,34563,34564],{"class":72},"],train_process.train_loss_all,",[51,34566,34567],{"class":282},"'ro-'",[51,34569,82],{"class":72},[51,34571,34572],{"class":78},"label",[51,34574,108],{"class":64},[51,34576,34577],{"class":282},"'train loss'",[51,34579,90],{"class":72},[51,34581,34583,34585,34587,34590,34593,34595,34597,34599,34602],{"class":53,"line":34582},196,[51,34584,34558],{"class":72},[51,34586,34561],{"class":282},[51,34588,34589],{"class":72},"],train_process.val_loss_all,",[51,34591,34592],{"class":282},"'bs--'",[51,34594,82],{"class":72},[51,34596,34572],{"class":78},[51,34598,108],{"class":64},[51,34600,34601],{"class":282},"'val loss'",[51,34603,90],{"class":72},[51,34605,34607],{"class":53,"line":34606},197,[51,34608,34609],{"class":57},"    # 添加一个图例\n",[51,34611,34613],{"class":53,"line":34612},198,[51,34614,34615],{"class":72},"    plt.legend()\n",[51,34617,34619],{"class":53,"line":34618},199,[51,34620,34621],{"class":57},"    # 给轴添加标签\n",[51,34623,34625,34628,34631],{"class":53,"line":34624},200,[51,34626,34627],{"class":72},"    plt.xlabel(",[51,34629,34630],{"class":282},"'epoch'",[51,34632,90],{"class":72},[51,34634,34636,34639,34642],{"class":53,"line":34635},201,[51,34637,34638],{"class":72},"    plt.ylabel(",[51,34640,34641],{"class":282},"'loss'",[51,34643,90],{"class":72},[51,34645,34647],{"class":53,"line":34646},202,[51,34648,34649],{"class":57},"    # ②准确度图\n",[51,34651,34653,34655,34657,34659,34661,34663,34665],{"class":53,"line":34652},203,[51,34654,32691],{"class":72},[51,34656,791],{"class":175},[51,34658,82],{"class":72},[51,34660,1334],{"class":175},[51,34662,82],{"class":72},[51,34664,1334],{"class":175},[51,34666,90],{"class":72},[51,34668,34670,34672,34674,34677,34679,34681,34683,34685,34688],{"class":53,"line":34669},204,[51,34671,34558],{"class":72},[51,34673,34561],{"class":282},[51,34675,34676],{"class":72},"],train_process.train_acc_all,",[51,34678,34567],{"class":282},[51,34680,82],{"class":72},[51,34682,34572],{"class":78},[51,34684,108],{"class":64},[51,34686,34687],{"class":282},"'train acc'",[51,34689,90],{"class":72},[51,34691,34693,34695,34697,34700,34702,34704,34706,34708,34711],{"class":53,"line":34692},205,[51,34694,34558],{"class":72},[51,34696,34561],{"class":282},[51,34698,34699],{"class":72},"],train_process.val_acc_all,",[51,34701,34592],{"class":282},[51,34703,82],{"class":72},[51,34705,34572],{"class":78},[51,34707,108],{"class":64},[51,34709,34710],{"class":282},"'val acc'",[51,34712,90],{"class":72},[51,34714,34716],{"class":53,"line":34715},206,[51,34717,34718],{"class":57},"    # 添加图例\n",[51,34720,34722],{"class":53,"line":34721},207,[51,34723,34615],{"class":72},[51,34725,34727,34729,34731],{"class":53,"line":34726},208,[51,34728,34627],{"class":72},[51,34730,34561],{"class":282},[51,34732,90],{"class":72},[51,34734,34736,34738,34741],{"class":53,"line":34735},209,[51,34737,34638],{"class":72},[51,34739,34740],{"class":282},"\"acc\"",[51,34742,90],{"class":72},[51,34744,34746],{"class":53,"line":34745},210,[51,34747,34748],{"class":72},"    plt.show()\n",[51,34750,34752],{"class":53,"line":34751},211,[51,34753,3480],{"emptyLinePlaceholder":1192},[51,34755,34757],{"class":53,"line":34756},212,[51,34758,34759],{"class":57},"# 正式开始训练:\n",[51,34761,34763,34765,34767,34769,34771],{"class":53,"line":34762},213,[51,34764,2633],{"class":64},[51,34766,32184],{"class":175},[51,34768,4026],{"class":64},[51,34770,32189],{"class":282},[51,34772,4816],{"class":72},[51,34774,34776],{"class":53,"line":34775},214,[51,34777,34778],{"class":57},"    # 将模型实例化\n",[51,34780,34782,34785,34787],{"class":53,"line":34781},215,[51,34783,34784],{"class":72},"    LeNet",[51,34786,108],{"class":64},[51,34788,34789],{"class":72},"LeNet()\n",[51,34791,34793,34796,34798],{"class":53,"line":34792},216,[51,34794,34795],{"class":72},"    train_dataloader,val_dataloader",[51,34797,108],{"class":64},[51,34799,34800],{"class":72},"train_val_data_process()\n",[51,34802,34804,34806,34808,34811,34814,34816,34818],{"class":53,"line":34803},217,[51,34805,34357],{"class":72},[51,34807,108],{"class":64},[51,34809,34810],{"class":72},"train_model_process(LeNet,train_dataloader,val_dataloader,",[51,34812,34813],{"class":78},"num_epochs",[51,34815,108],{"class":64},[51,34817,457],{"class":175},[51,34819,90],{"class":72},[51,34821,34823],{"class":53,"line":34822},218,[51,34824,34825],{"class":72},"    matplot_acc_loss(train_process)\n",[40,34827,34828],{},"画图的补充点学习：",[40,34830,34831],{},[2564,34832],{"alt":35,"src":34833},"\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",[19,34835,34836],{"start":93},[22,34837,34838],{},"测试",[29,34840,34842],{"className":31342,"code":34841,"language":31344,"meta":35,"style":35},"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",[37,34843,34844,34850,34860,34872,34882,34887,34897,34907,34911,34916,34925,34942,34954,34971,34982,34998,35003,35014,35025,35036,35043,35047,35052,35062,35067,35084,35092,35096,35101,35110,35119,35123,35128,35133,35138,35145,35150,35162,35172,35182,35187,35191,35196,35205,35210,35226,35231,35236,35241,35255,35260,35274,35278,35283,35298,35303,35315,35319,35324,35336,35341,35349,35354,35359,35369,35374,35383,35388,35393,35397,35402,35407,35423,35431,35436,35441,35500,35506,35511,35522,35530,35538,35542,35547,35551,35556,35564,35569,35585,35590,35600,35610],{"__ignoreMap":35},[51,34845,34846,34848],{"class":53,"line":54},[51,34847,31356],{"class":64},[51,34849,31359],{"class":72},[51,34851,34852,34854,34856,34858],{"class":53,"line":61},[51,34853,31356],{"class":64},[51,34855,32379],{"class":72},[51,34857,32347],{"class":64},[51,34859,32384],{"class":72},[51,34861,34862,34864,34867,34869],{"class":53,"line":93},[51,34863,31701],{"class":64},[51,34865,34866],{"class":72}," jupyter_client.consoleapp ",[51,34868,31356],{"class":64},[51,34870,34871],{"class":72}," classes\n",[51,34873,34874,34876,34878,34880],{"class":53,"line":99},[51,34875,31701],{"class":64},[51,34877,32362],{"class":72},[51,34879,31356],{"class":64},[51,34881,32367],{"class":72},[51,34883,34884],{"class":53,"line":120},[51,34885,34886],{"class":57},"# 导入数据集\n",[51,34888,34889,34891,34893,34895],{"class":53,"line":129},[51,34890,31701],{"class":64},[51,34892,32332],{"class":72},[51,34894,31356],{"class":64},[51,34896,32337],{"class":72},[51,34898,34899,34901,34903,34905],{"class":53,"line":206},[51,34900,31701],{"class":64},[51,34902,32878],{"class":72},[51,34904,31356],{"class":64},[51,34906,32883],{"class":72},[51,34908,34909],{"class":53,"line":212},[51,34910,3480],{"emptyLinePlaceholder":1192},[51,34912,34913],{"class":53,"line":227},[51,34914,34915],{"class":57},"# 测试数据处理\n",[51,34917,34918,34920,34923],{"class":53,"line":370},[51,34919,32911],{"class":64},[51,34921,34922],{"class":68}," test_data_process",[51,34924,32917],{"class":72},[51,34926,34927,34930,34932,34934,34936,34938,34940],{"class":53,"line":387},[51,34928,34929],{"class":72},"    test_data",[51,34931,108],{"class":64},[51,34933,32419],{"class":72},[51,34935,32422],{"class":78},[51,34937,108],{"class":64},[51,34939,32427],{"class":282},[51,34941,32430],{"class":72},[51,34943,34944,34947,34949,34952],{"class":53,"line":404},[51,34945,34946],{"class":78},"                           train",[51,34948,108],{"class":64},[51,34950,34951],{"class":175},"False",[51,34953,32430],{"class":72},[51,34955,34956,34959,34961,34963,34965,34967,34969],{"class":53,"line":415},[51,34957,34958],{"class":78},"                           transform",[51,34960,108],{"class":64},[51,34962,32457],{"class":72},[51,34964,32460],{"class":78},[51,34966,108],{"class":64},[51,34968,2145],{"class":175},[51,34970,32468],{"class":72},[51,34972,34973,34976,34978,34980],{"class":53,"line":420},[51,34974,34975],{"class":78},"                           download",[51,34977,108],{"class":64},[51,34979,32440],{"class":175},[51,34981,90],{"class":72},[51,34983,34984,34987,34989,34991,34993,34995],{"class":53,"line":429},[51,34985,34986],{"class":72},"    test_dataloader",[51,34988,108],{"class":64},[51,34990,32498],{"class":72},[51,34992,32501],{"class":78},[51,34994,108],{"class":64},[51,34996,34997],{"class":72},"test_data,\n",[51,34999,35000],{"class":53,"line":434},[51,35001,35002],{"class":57},"                                    # 这里是一张一张进行测试\n",[51,35004,35005,35008,35010,35012],{"class":53,"line":448},[51,35006,35007],{"class":78},"                                    batch_size",[51,35009,108],{"class":64},[51,35011,791],{"class":175},[51,35013,32430],{"class":72},[51,35015,35016,35019,35021,35023],{"class":53,"line":462},[51,35017,35018],{"class":78},"                                    shuffle",[51,35020,108],{"class":64},[51,35022,32440],{"class":175},[51,35024,32430],{"class":72},[51,35026,35027,35030,35032,35034],{"class":53,"line":470},[51,35028,35029],{"class":78},"                                    num_workers",[51,35031,108],{"class":64},[51,35033,176],{"class":175},[51,35035,90],{"class":72},[51,35037,35038,35040],{"class":53,"line":2783},[51,35039,123],{"class":64},[51,35041,35042],{"class":72}," test_dataloader\n",[51,35044,35045],{"class":53,"line":2788},[51,35046,3480],{"emptyLinePlaceholder":1192},[51,35048,35049],{"class":53,"line":2817},[51,35050,35051],{"class":57},"# 定义模型测试函数\n",[51,35053,35054,35056,35059],{"class":53,"line":2822},[51,35055,32911],{"class":64},[51,35057,35058],{"class":68}," test_model_process",[51,35060,35061],{"class":72},"(model,test_dataloader):\n",[51,35063,35064],{"class":53,"line":2839},[51,35065,35066],{"class":57},"    # 将模型放到设备当中，先进行判断\n",[51,35068,35069,35071,35073,35075,35077,35079,35081],{"class":53,"line":2844},[51,35070,32201],{"class":72},[51,35072,108],{"class":64},[51,35074,32208],{"class":282},[51,35076,2794],{"class":64},[51,35078,32213],{"class":72},[51,35080,2791],{"class":64},[51,35082,35083],{"class":282}," \"cpu\"\n",[51,35085,35086,35088,35090],{"class":53,"line":2849},[51,35087,32253],{"class":72},[51,35089,108],{"class":64},[51,35091,33253],{"class":72},[51,35093,35094],{"class":53,"line":2854},[51,35095,3480],{"emptyLinePlaceholder":1192},[51,35097,35098],{"class":53,"line":2868},[51,35099,35100],{"class":57},"    # 设置初始化参数\n",[51,35102,35103,35106,35108],{"class":53,"line":2873},[51,35104,35105],{"class":72},"    test_corrects",[51,35107,108],{"class":64},[51,35109,33306],{"class":175},[51,35111,35112,35115,35117],{"class":53,"line":3657},[51,35113,35114],{"class":72},"    test_num",[51,35116,108],{"class":64},[51,35118,4162],{"class":175},[51,35120,35121],{"class":53,"line":3671},[51,35122,3480],{"emptyLinePlaceholder":1192},[51,35124,35125],{"class":53,"line":3679},[51,35126,35127],{"class":57},"    # 进行模型测试\n",[51,35129,35130],{"class":53,"line":3684},[51,35131,35132],{"class":57},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[51,35134,35135],{"class":53,"line":3690},[51,35136,35137],{"class":57},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[51,35139,35140,35143],{"class":53,"line":3696},[51,35141,35142],{"class":64},"    with",[51,35144,33848],{"class":72},[51,35146,35147],{"class":53,"line":3701},[51,35148,35149],{"class":57},"        # 从数据中进行\n",[51,35151,35152,35154,35157,35159],{"class":53,"line":8910},[51,35153,4480],{"class":64},[51,35155,35156],{"class":72}," test_data_x,test_data_y ",[51,35158,27007],{"class":64},[51,35160,35161],{"class":72}," test_dataloader:\n",[51,35163,35164,35167,35169],{"class":53,"line":8934},[51,35165,35166],{"class":72},"            test_data_x",[51,35168,108],{"class":64},[51,35170,35171],{"class":72},"test_data_x.to(device)\n",[51,35173,35174,35177,35179],{"class":53,"line":8939},[51,35175,35176],{"class":72},"            test_data_y",[51,35178,108],{"class":64},[51,35180,35181],{"class":72},"test_data_y.to(device)\n",[51,35183,35184],{"class":53,"line":8945},[51,35185,35186],{"class":57},"            # 设置为验证模式\n",[51,35188,35189],{"class":53,"line":8972},[51,35190,33839],{"class":72},[51,35192,35193],{"class":53,"line":8977},[51,35194,35195],{"class":57},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[51,35197,35198,35200,35202],{"class":53,"line":8983},[51,35199,33624],{"class":72},[51,35201,108],{"class":64},[51,35203,35204],{"class":72},"model(test_data_x)\n",[51,35206,35207],{"class":53,"line":8995},[51,35208,35209],{"class":57},"            # 查找每一行中最大值对应的下标\n",[51,35211,35212,35214,35216,35218,35220,35222,35224],{"class":53,"line":9007},[51,35213,33641],{"class":72},[51,35215,108],{"class":64},[51,35217,33646],{"class":72},[51,35219,33649],{"class":78},[51,35221,108],{"class":64},[51,35223,791],{"class":175},[51,35225,90],{"class":72},[51,35227,35228],{"class":53,"line":9019},[51,35229,35230],{"class":57},"            # 计算正确率\n",[51,35232,35233],{"class":53,"line":10678},[51,35234,35235],{"class":57},"            # .data表示是一个不带梯度信息的tensor\n",[51,35237,35238],{"class":53,"line":10703},[51,35239,35240],{"class":57},"            # 如果预测正确，则准确度test_corrects加1\n",[51,35242,35243,35246,35248,35250,35252],{"class":53,"line":10726},[51,35244,35245],{"class":72},"            test_corrects",[51,35247,10439],{"class":64},[51,35249,33751],{"class":72},[51,35251,4026],{"class":64},[51,35253,35254],{"class":72},"test_data_y.data)\n",[51,35256,35257],{"class":53,"line":10750},[51,35258,35259],{"class":57},"            # 将所有的测试样本进行累计\n",[51,35261,35262,35265,35267,35270,35272],{"class":53,"line":10755},[51,35263,35264],{"class":72},"            test_num",[51,35266,10439],{"class":64},[51,35268,35269],{"class":72},"test_data_x.size(",[51,35271,176],{"class":175},[51,35273,90],{"class":72},[51,35275,35276],{"class":53,"line":10760},[51,35277,3480],{"emptyLinePlaceholder":1192},[51,35279,35280],{"class":53,"line":10765},[51,35281,35282],{"class":57},"        # 计算准确度\n",[51,35284,35285,35288,35290,35293,35295],{"class":53,"line":10774},[51,35286,35287],{"class":72},"        test_acc",[51,35289,108],{"class":64},[51,35291,35292],{"class":72},"test_corrects.double().item()",[51,35294,1830],{"class":64},[51,35296,35297],{"class":72},"test_num\n",[51,35299,35300],{"class":53,"line":10779},[51,35301,35302],{"class":57},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[51,35304,35305,35307,35309,35312],{"class":53,"line":10785},[51,35306,33415],{"class":175},[51,35308,73],{"class":72},[51,35310,35311],{"class":282},"\"测试的准确率：\"",[51,35313,35314],{"class":72},",test_acc)\n",[51,35316,35317],{"class":53,"line":10806},[51,35318,3480],{"emptyLinePlaceholder":1192},[51,35320,35321],{"class":53,"line":10812},[51,35322,35323],{"class":57},"# 实现模型的测试功能\n",[51,35325,35326,35328,35330,35332,35334],{"class":53,"line":10826},[51,35327,2633],{"class":64},[51,35329,32184],{"class":175},[51,35331,4026],{"class":64},[51,35333,32189],{"class":282},[51,35335,4816],{"class":72},[51,35337,35338],{"class":53,"line":10832},[51,35339,35340],{"class":57},"    # 加载模型\n",[51,35342,35343,35345,35347],{"class":53,"line":10859},[51,35344,32253],{"class":72},[51,35346,108],{"class":64},[51,35348,34789],{"class":72},[51,35350,35351],{"class":53,"line":10868},[51,35352,35353],{"class":57},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[51,35355,35356],{"class":53,"line":10874},[51,35357,35358],{"class":57},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[51,35360,35361,35364,35367],{"class":53,"line":10882},[51,35362,35363],{"class":72},"    model.load_state_dict(torch.load(",[51,35365,35366],{"class":282},"'best_model.pth'",[51,35368,31461],{"class":72},[51,35370,35371],{"class":53,"line":10887},[51,35372,35373],{"class":57},"    # 数据加载\n",[51,35375,35376,35378,35380],{"class":53,"line":17566},[51,35377,34986],{"class":72},[51,35379,108],{"class":64},[51,35381,35382],{"class":72},"test_data_process()\n",[51,35384,35385],{"class":53,"line":17572},[51,35386,35387],{"class":57},"    # 加载模型测试的函数\n",[51,35389,35390],{"class":53,"line":17595},[51,35391,35392],{"class":72},"    test_model_process(model,test_dataloader)\n",[51,35394,35395],{"class":53,"line":17601},[51,35396,3480],{"emptyLinePlaceholder":1192},[51,35398,35399],{"class":53,"line":17624},[51,35400,35401],{"class":57},"    # 验证集推理实现：\n",[51,35403,35404],{"class":53,"line":17638},[51,35405,35406],{"class":57},"    # 加载数据加载的更详细一些\n",[51,35408,35409,35411,35413,35415,35417,35419,35421],{"class":53,"line":17658},[51,35410,32201],{"class":72},[51,35412,108],{"class":64},[51,35414,32208],{"class":282},[51,35416,2794],{"class":64},[51,35418,32213],{"class":72},[51,35420,2791],{"class":64},[51,35422,35083],{"class":282},[51,35424,35425,35427,35429],{"class":53,"line":17664},[51,35426,32253],{"class":72},[51,35428,108],{"class":64},[51,35430,33253],{"class":72},[51,35432,35433],{"class":53,"line":17675},[51,35434,35435],{"class":57},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[51,35437,35438],{"class":53,"line":17698},[51,35439,35440],{"class":57},"    # 顺序不可改变\n",[51,35442,35443,35446,35448,35450,35453,35455,35458,35460,35463,35465,35468,35470,35473,35475,35478,35480,35483,35485,35488,35490,35493,35495,35498],{"class":53,"line":17720},[51,35444,35445],{"class":72},"    classes",[51,35447,108],{"class":64},[51,35449,2134],{"class":72},[51,35451,35452],{"class":282},"'T-shirt\u002Ftop'",[51,35454,82],{"class":72},[51,35456,35457],{"class":282},"'Trouser'",[51,35459,82],{"class":72},[51,35461,35462],{"class":282},"'Pullover'",[51,35464,82],{"class":72},[51,35466,35467],{"class":282},"'Dress'",[51,35469,82],{"class":72},[51,35471,35472],{"class":282},"'Coat'",[51,35474,82],{"class":72},[51,35476,35477],{"class":282},"'Sandal'",[51,35479,82],{"class":72},[51,35481,35482],{"class":282},"'Shirt'",[51,35484,82],{"class":72},[51,35486,35487],{"class":282},"'Sneaker'",[51,35489,82],{"class":72},[51,35491,35492],{"class":282},"'Bag'",[51,35494,82],{"class":72},[51,35496,35497],{"class":282},"'Ankle boot'",[51,35499,34210],{"class":72},[51,35501,35502,35504],{"class":53,"line":17725},[51,35503,35142],{"class":64},[51,35505,33848],{"class":72},[51,35507,35508],{"class":53,"line":17731},[51,35509,35510],{"class":57},"        # 将数据和标签都放到设备当中\n",[51,35512,35513,35515,35518,35520],{"class":53,"line":17745},[51,35514,4480],{"class":64},[51,35516,35517],{"class":72}," b_x,b_y ",[51,35519,27007],{"class":64},[51,35521,35161],{"class":72},[51,35523,35524,35526,35528],{"class":53,"line":17758},[51,35525,33574],{"class":72},[51,35527,108],{"class":64},[51,35529,33579],{"class":72},[51,35531,35532,35534,35536],{"class":53,"line":17763},[51,35533,33589],{"class":72},[51,35535,108],{"class":64},[51,35537,33594],{"class":72},[51,35539,35540],{"class":53,"line":17777},[51,35541,3480],{"emptyLinePlaceholder":1192},[51,35543,35544],{"class":53,"line":17782},[51,35545,35546],{"class":57},"            # 设置模型为验证模式\n",[51,35548,35549],{"class":53,"line":17788},[51,35550,33839],{"class":72},[51,35552,35553],{"class":53,"line":17793},[51,35554,35555],{"class":57},"            # 模型推理结果\n",[51,35557,35558,35560,35562],{"class":53,"line":17807},[51,35559,33624],{"class":72},[51,35561,108],{"class":64},[51,35563,33629],{"class":72},[51,35565,35566],{"class":53,"line":17812},[51,35567,35568],{"class":57},"            # 获取最大下标，最大下标就是类别号\n",[51,35570,35571,35573,35575,35577,35579,35581,35583],{"class":53,"line":17817},[51,35572,33641],{"class":72},[51,35574,108],{"class":64},[51,35576,33646],{"class":72},[51,35578,33649],{"class":78},[51,35580,108],{"class":64},[51,35582,791],{"class":175},[51,35584,90],{"class":72},[51,35586,35587],{"class":53,"line":17831},[51,35588,35589],{"class":57},"            # 取出张量中的数值\n",[51,35591,35592,35595,35597],{"class":53,"line":17843},[51,35593,35594],{"class":72},"            result",[51,35596,108],{"class":64},[51,35598,35599],{"class":72},"pre_lab.item()\n",[51,35601,35602,35605,35607],{"class":53,"line":17848},[51,35603,35604],{"class":72},"            label",[51,35606,108],{"class":64},[51,35608,35609],{"class":72},"b_y.item()\n",[51,35611,35612,35615,35617,35620,35623,35626,35628,35631],{"class":53,"line":17861},[51,35613,35614],{"class":175},"            print",[51,35616,73],{"class":72},[51,35618,35619],{"class":282},"\"预测值：\"",[51,35621,35622],{"class":72},",classes[result],",[51,35624,35625],{"class":282},"\"------\"",[51,35627,82],{"class":72},[51,35629,35630],{"class":282},"\"真实值：\"",[51,35632,35633],{"class":72},",classes[label])\n",[40,35635,35636],{},"（2）AlexNet",[19,35638,35639],{},[22,35640,35641],{},"神经网络构建",[29,35643,35645],{"className":31342,"code":35644,"language":31344,"meta":35,"style":35},"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",[37,35646,35647,35653,35663,35673,35685,35689,35706,35714,35729,35741,35783,35810,35853,35879,35923,35966,36009,36036,36040,36050,36055,36083,36102,36121,36125,36130,36138,36153,36163,36177,36187,36202,36217,36232,36243,36247,36252,36262,36277,36282,36296,36311,36323,36328,36339,36344,36350,36355,36367,36387,36392,36401],{"__ignoreMap":35},[51,35648,35649,35651],{"class":53,"line":54},[51,35650,31356],{"class":64},[51,35652,31359],{"class":72},[51,35654,35655,35657,35659,35661],{"class":53,"line":61},[51,35656,31701],{"class":64},[51,35658,31704],{"class":72},[51,35660,31356],{"class":64},[51,35662,31709],{"class":72},[51,35664,35665,35667,35669,35671],{"class":53,"line":93},[51,35666,31701],{"class":64},[51,35668,31721],{"class":72},[51,35670,31356],{"class":64},[51,35672,31726],{"class":72},[51,35674,35675,35677,35680,35682],{"class":53,"line":99},[51,35676,31356],{"class":64},[51,35678,35679],{"class":72}," torch.nn.functional ",[51,35681,32347],{"class":64},[51,35683,35684],{"class":72}," F\n",[51,35686,35687],{"class":53,"line":120},[51,35688,3480],{"emptyLinePlaceholder":1192},[51,35690,35691,35693,35696,35698,35700,35702,35704],{"class":53,"line":129},[51,35692,15656],{"class":64},[51,35694,35695],{"class":68}," AlexNet",[51,35697,73],{"class":72},[51,35699,31742],{"class":68},[51,35701,1804],{"class":72},[51,35703,31747],{"class":68},[51,35705,31750],{"class":72},[51,35707,35708,35710,35712],{"class":53,"line":206},[51,35709,31765],{"class":64},[51,35711,31768],{"class":175},[51,35713,31771],{"class":72},[51,35715,35716,35718,35721,35723,35725,35727],{"class":53,"line":212},[51,35717,31781],{"class":175},[51,35719,35720],{"class":72},"(AlexNet,",[51,35722,31787],{"class":175},[51,35724,31790],{"class":72},[51,35726,31793],{"class":175},[51,35728,154],{"class":72},[51,35730,35731,35733,35736,35738],{"class":53,"line":227},[51,35732,31809],{"class":175},[51,35734,35735],{"class":72},".ReLu",[51,35737,108],{"class":64},[51,35739,35740],{"class":72},"nn.ReLU()\n",[51,35742,35743,35745,35747,35749,35751,35753,35755,35757,35759,35761,35763,35765,35767,35769,35771,35773,35775,35777,35779,35781],{"class":53,"line":370},[51,35744,31809],{"class":175},[51,35746,31812],{"class":72},[51,35748,108],{"class":64},[51,35750,31817],{"class":72},[51,35752,31820],{"class":78},[51,35754,108],{"class":64},[51,35756,791],{"class":175},[51,35758,82],{"class":72},[51,35760,31829],{"class":78},[51,35762,108],{"class":64},[51,35764,1463],{"class":175},[51,35766,82],{"class":72},[51,35768,31838],{"class":78},[51,35770,108],{"class":64},[51,35772,1719],{"class":175},[51,35774,82],{"class":72},[51,35776,31893],{"class":78},[51,35778,108],{"class":64},[51,35780,1543],{"class":175},[51,35782,90],{"class":72},[51,35784,35785,35787,35789,35791,35794,35796,35798,35800,35802,35804,35806,35808],{"class":53,"line":387},[51,35786,31809],{"class":175},[51,35788,31877],{"class":72},[51,35790,108],{"class":64},[51,35792,35793],{"class":72},"nn.MaxPool2d(",[51,35795,31838],{"class":78},[51,35797,108],{"class":64},[51,35799,1328],{"class":175},[51,35801,82],{"class":72},[51,35803,31893],{"class":78},[51,35805,108],{"class":64},[51,35807,1334],{"class":175},[51,35809,90],{"class":72},[51,35811,35812,35814,35816,35818,35820,35822,35824,35826,35828,35830,35832,35835,35837,35839,35841,35843,35845,35847,35849,35851],{"class":53,"line":404},[51,35813,31809],{"class":175},[51,35815,31906],{"class":72},[51,35817,108],{"class":64},[51,35819,31817],{"class":72},[51,35821,31820],{"class":78},[51,35823,108],{"class":64},[51,35825,1463],{"class":175},[51,35827,82],{"class":72},[51,35829,31829],{"class":78},[51,35831,108],{"class":64},[51,35833,35834],{"class":175},"256",[51,35836,82],{"class":72},[51,35838,31838],{"class":78},[51,35840,108],{"class":64},[51,35842,1568],{"class":175},[51,35844,82],{"class":72},[51,35846,31847],{"class":78},[51,35848,108],{"class":64},[51,35850,1334],{"class":175},[51,35852,90],{"class":72},[51,35854,35855,35857,35859,35861,35863,35865,35867,35869,35871,35873,35875,35877],{"class":53,"line":415},[51,35856,31809],{"class":175},[51,35858,31941],{"class":72},[51,35860,108],{"class":64},[51,35862,35793],{"class":72},[51,35864,31838],{"class":78},[51,35866,108],{"class":64},[51,35868,1328],{"class":175},[51,35870,82],{"class":72},[51,35872,31893],{"class":78},[51,35874,108],{"class":64},[51,35876,1334],{"class":175},[51,35878,90],{"class":72},[51,35880,35881,35883,35886,35888,35890,35892,35894,35896,35898,35900,35902,35905,35907,35909,35911,35913,35915,35917,35919,35921],{"class":53,"line":420},[51,35882,31809],{"class":175},[51,35884,35885],{"class":72},".c5",[51,35887,108],{"class":64},[51,35889,31817],{"class":72},[51,35891,31820],{"class":78},[51,35893,108],{"class":64},[51,35895,35834],{"class":175},[51,35897,82],{"class":72},[51,35899,31829],{"class":78},[51,35901,108],{"class":64},[51,35903,35904],{"class":175},"384",[51,35906,82],{"class":72},[51,35908,31838],{"class":78},[51,35910,108],{"class":64},[51,35912,1328],{"class":175},[51,35914,82],{"class":72},[51,35916,31847],{"class":78},[51,35918,108],{"class":64},[51,35920,791],{"class":175},[51,35922,90],{"class":72},[51,35924,35925,35927,35930,35932,35934,35936,35938,35940,35942,35944,35946,35948,35950,35952,35954,35956,35958,35960,35962,35964],{"class":53,"line":429},[51,35926,31809],{"class":175},[51,35928,35929],{"class":72},".c6",[51,35931,108],{"class":64},[51,35933,31817],{"class":72},[51,35935,31820],{"class":78},[51,35937,108],{"class":64},[51,35939,35904],{"class":175},[51,35941,82],{"class":72},[51,35943,31829],{"class":78},[51,35945,108],{"class":64},[51,35947,35904],{"class":175},[51,35949,82],{"class":72},[51,35951,31838],{"class":78},[51,35953,108],{"class":64},[51,35955,1328],{"class":175},[51,35957,82],{"class":72},[51,35959,31847],{"class":78},[51,35961,108],{"class":64},[51,35963,791],{"class":175},[51,35965,90],{"class":72},[51,35967,35968,35970,35973,35975,35977,35979,35981,35983,35985,35987,35989,35991,35993,35995,35997,35999,36001,36003,36005,36007],{"class":53,"line":434},[51,35969,31809],{"class":175},[51,35971,35972],{"class":72},".c7",[51,35974,108],{"class":64},[51,35976,31817],{"class":72},[51,35978,31820],{"class":78},[51,35980,108],{"class":64},[51,35982,35904],{"class":175},[51,35984,82],{"class":72},[51,35986,31829],{"class":78},[51,35988,108],{"class":64},[51,35990,35834],{"class":175},[51,35992,82],{"class":72},[51,35994,31838],{"class":78},[51,35996,108],{"class":64},[51,35998,1328],{"class":175},[51,36000,82],{"class":72},[51,36002,31847],{"class":78},[51,36004,108],{"class":64},[51,36006,791],{"class":175},[51,36008,90],{"class":72},[51,36010,36011,36013,36016,36018,36020,36022,36024,36026,36028,36030,36032,36034],{"class":53,"line":448},[51,36012,31809],{"class":175},[51,36014,36015],{"class":72},".s8",[51,36017,108],{"class":64},[51,36019,35793],{"class":72},[51,36021,31838],{"class":78},[51,36023,108],{"class":64},[51,36025,1328],{"class":175},[51,36027,82],{"class":72},[51,36029,31893],{"class":78},[51,36031,108],{"class":64},[51,36033,1334],{"class":175},[51,36035,90],{"class":72},[51,36037,36038],{"class":53,"line":462},[51,36039,31966],{"class":57},[51,36041,36042,36044,36046,36048],{"class":53,"line":470},[51,36043,31809],{"class":175},[51,36045,31973],{"class":72},[51,36047,108],{"class":64},[51,36049,31978],{"class":72},[51,36051,36052],{"class":53,"line":2783},[51,36053,36054],{"class":57},"       # 定义全连接层\n",[51,36056,36057,36059,36062,36064,36066,36068,36070,36072,36074,36076,36078,36081],{"class":53,"line":2788},[51,36058,31809],{"class":175},[51,36060,36061],{"class":72},".f1",[51,36063,108],{"class":64},[51,36065,31995],{"class":72},[51,36067,1593],{"class":175},[51,36069,1702],{"class":64},[51,36071,1593],{"class":175},[51,36073,1702],{"class":64},[51,36075,35834],{"class":175},[51,36077,82],{"class":72},[51,36079,36080],{"class":175},"4096",[51,36082,90],{"class":72},[51,36084,36085,36087,36090,36092,36094,36096,36098,36100],{"class":53,"line":2817},[51,36086,31809],{"class":175},[51,36088,36089],{"class":72},".f2",[51,36091,108],{"class":64},[51,36093,31995],{"class":72},[51,36095,36080],{"class":175},[51,36097,82],{"class":72},[51,36099,36080],{"class":175},[51,36101,90],{"class":72},[51,36103,36104,36106,36109,36111,36113,36115,36117,36119],{"class":53,"line":2822},[51,36105,31809],{"class":175},[51,36107,36108],{"class":72},".f3",[51,36110,108],{"class":64},[51,36112,31995],{"class":72},[51,36114,36080],{"class":175},[51,36116,82],{"class":72},[51,36118,443],{"class":175},[51,36120,90],{"class":72},[51,36122,36123],{"class":53,"line":2839},[51,36124,3480],{"emptyLinePlaceholder":1192},[51,36126,36127],{"class":53,"line":2844},[51,36128,36129],{"class":57},"    # 定义前向传播\n",[51,36131,36132,36134,36136],{"class":53,"line":2849},[51,36133,31765],{"class":64},[51,36135,32057],{"class":68},[51,36137,32060],{"class":72},[51,36139,36140,36142,36144,36146,36149,36151],{"class":53,"line":2854},[51,36141,32065],{"class":72},[51,36143,108],{"class":64},[51,36145,31787],{"class":175},[51,36147,36148],{"class":72},".ReLu(",[51,36150,31787],{"class":175},[51,36152,32077],{"class":72},[51,36154,36155,36157,36159,36161],{"class":53,"line":2868},[51,36156,32065],{"class":72},[51,36158,108],{"class":64},[51,36160,31787],{"class":175},[51,36162,32088],{"class":72},[51,36164,36165,36167,36169,36171,36173,36175],{"class":53,"line":2873},[51,36166,32065],{"class":72},[51,36168,108],{"class":64},[51,36170,31787],{"class":175},[51,36172,36148],{"class":72},[51,36174,31787],{"class":175},[51,36176,32103],{"class":72},[51,36178,36179,36181,36183,36185],{"class":53,"line":3657},[51,36180,32065],{"class":72},[51,36182,108],{"class":64},[51,36184,31787],{"class":175},[51,36186,32114],{"class":72},[51,36188,36189,36191,36193,36195,36197,36199],{"class":53,"line":3671},[51,36190,32065],{"class":72},[51,36192,108],{"class":64},[51,36194,31787],{"class":175},[51,36196,36148],{"class":72},[51,36198,31787],{"class":175},[51,36200,36201],{"class":72},".c5(x))\n",[51,36203,36204,36206,36208,36210,36212,36214],{"class":53,"line":3679},[51,36205,32065],{"class":72},[51,36207,108],{"class":64},[51,36209,31787],{"class":175},[51,36211,36148],{"class":72},[51,36213,31787],{"class":175},[51,36215,36216],{"class":72},".c6(x))\n",[51,36218,36219,36221,36223,36225,36227,36229],{"class":53,"line":3684},[51,36220,32065],{"class":72},[51,36222,108],{"class":64},[51,36224,31787],{"class":175},[51,36226,36148],{"class":72},[51,36228,31787],{"class":175},[51,36230,36231],{"class":72},".c7(x))\n",[51,36233,36234,36236,36238,36240],{"class":53,"line":3690},[51,36235,32065],{"class":72},[51,36237,108],{"class":64},[51,36239,31787],{"class":175},[51,36241,36242],{"class":72},".s8(x)\n",[51,36244,36245],{"class":53,"line":3696},[51,36246,3480],{"emptyLinePlaceholder":1192},[51,36248,36249],{"class":53,"line":3701},[51,36250,36251],{"class":57},"        # 展平加线性全连接层\n",[51,36253,36254,36256,36258,36260],{"class":53,"line":8910},[51,36255,32065],{"class":72},[51,36257,108],{"class":64},[51,36259,31787],{"class":175},[51,36261,32125],{"class":72},[51,36263,36264,36266,36268,36270,36272,36274],{"class":53,"line":8934},[51,36265,32065],{"class":72},[51,36267,108],{"class":64},[51,36269,31787],{"class":175},[51,36271,36148],{"class":72},[51,36273,31787],{"class":175},[51,36275,36276],{"class":72},".f1(x))\n",[51,36278,36279],{"class":53,"line":8939},[51,36280,36281],{"class":57},"        # 还需要dropout对神经元随机进行失活\n",[51,36283,36284,36286,36288,36291,36294],{"class":53,"line":8945},[51,36285,32065],{"class":72},[51,36287,108],{"class":64},[51,36289,36290],{"class":72},"F.dropout(x,",[51,36292,36293],{"class":175},"0.5",[51,36295,90],{"class":72},[51,36297,36298,36300,36302,36304,36306,36308],{"class":53,"line":8972},[51,36299,32065],{"class":72},[51,36301,108],{"class":64},[51,36303,31787],{"class":175},[51,36305,36148],{"class":72},[51,36307,31787],{"class":175},[51,36309,36310],{"class":72},".f2(x))\n",[51,36312,36313,36315,36317,36319,36321],{"class":53,"line":8977},[51,36314,32065],{"class":72},[51,36316,108],{"class":64},[51,36318,36290],{"class":72},[51,36320,36293],{"class":175},[51,36322,90],{"class":72},[51,36324,36325],{"class":53,"line":8983},[51,36326,36327],{"class":57},"        # 直接输出\n",[51,36329,36330,36332,36334,36336],{"class":53,"line":8995},[51,36331,32065],{"class":72},[51,36333,108],{"class":64},[51,36335,31787],{"class":175},[51,36337,36338],{"class":72},".f3(x)\n",[51,36340,36341],{"class":53,"line":9007},[51,36342,36343],{"class":57},"        # 前向传播输出\n",[51,36345,36346,36348],{"class":53,"line":9019},[51,36347,15714],{"class":64},[51,36349,32173],{"class":72},[51,36351,36352],{"class":53,"line":10678},[51,36353,36354],{"class":57},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[51,36356,36357,36359,36361,36363,36365],{"class":53,"line":10703},[51,36358,2633],{"class":64},[51,36360,32184],{"class":175},[51,36362,4026],{"class":64},[51,36364,32189],{"class":282},[51,36366,4816],{"class":72},[51,36368,36369,36371,36373,36375,36377,36379,36381,36383,36385],{"class":53,"line":10726},[51,36370,32201],{"class":72},[51,36372,108],{"class":64},[51,36374,31415],{"class":72},[51,36376,32208],{"class":282},[51,36378,2794],{"class":64},[51,36380,32213],{"class":72},[51,36382,2791],{"class":64},[51,36384,31440],{"class":282},[51,36386,90],{"class":72},[51,36388,36389],{"class":53,"line":10750},[51,36390,36391],{"class":57},"    # 模型实例化，然后将实例化的模型放到设备中\n",[51,36393,36394,36396,36398],{"class":53,"line":10755},[51,36395,32253],{"class":72},[51,36397,108],{"class":64},[51,36399,36400],{"class":72},"AlexNet().to(device)\n",[51,36402,36403,36405,36407,36409,36411,36414,36416,36418],{"class":53,"line":10760},[51,36404,32263],{"class":175},[51,36406,32266],{"class":72},[51,36408,791],{"class":175},[51,36410,82],{"class":72},[51,36412,36413],{"class":175},"227",[51,36415,82],{"class":72},[51,36417,36413],{"class":175},[51,36419,32279],{"class":72},[19,36421,36422],{"start":61},[22,36423,32292],{},[29,36425,36427],{"className":31342,"code":36426,"language":31344,"meta":35,"style":35},"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",[37,36428,36429,36435,36441,36451,36457,36467,36477,36487,36497,36507,36511,36522,36532,36536,36540,36544,36552,36564,36574,36590,36600,36632,36646,36656,36666,36670,36680,36694,36704,36714,36724,36730,36734,36738,36742,36746,36750,36758,36778,36782,36786,36790,36794,36798,36814,36818,36822,36830,36834,36838,36846,36850,36854,36858,36866,36870,36874,36878,36882,36890,36894,36902,36906,36914,36918,36926,36930,36938,36942,36946,36954,36958,36962,36966,36978,37002,37016,37020,37024,37028,37036,37040,37048,37052,37060,37064,37072,37076,37084,37088,37096,37100,37112,37116,37124,37128,37136,37140,37144,37148,37152,37160,37164,37180,37184,37192,37196,37200,37204,37208,37212,37216,37220,37236,37240,37252,37256,37268,37272,37284,37288,37296,37300,37308,37312,37316,37321,37327,37331,37340,37344,37361,37365,37374,37378,37396,37409,37414,37427,37431,37435,37443,37447,37451,37459,37463,37471,37475,37483,37487,37491,37533,37575,37579,37583,37599,37603,37619,37623,37627,37635,37639,37643,37655,37693,37698,37703,37712,37716,37730,37740,37746,37752,37758,37764,37768,37772,37778,37782,37786,37794,37798,37816,37820,37824,37828,37844,37848,37852,37856,37860,37864,37884,37904,37908,37912,37916,37924,37932,37936,37952,37972,37992,37996,38000,38008,38016,38020,38024,38028,38040,38044,38054,38062,38079],{"__ignoreMap":35},[51,36430,36431,36433],{"class":53,"line":54},[51,36432,31356],{"class":64},[51,36434,32786],{"class":72},[51,36436,36437,36439],{"class":53,"line":61},[51,36438,31356],{"class":64},[51,36440,32793],{"class":72},[51,36442,36443,36445,36447,36449],{"class":53,"line":93},[51,36444,31356],{"class":64},[51,36446,32804],{"class":72},[51,36448,32347],{"class":64},[51,36450,32809],{"class":72},[51,36452,36453,36455],{"class":53,"line":99},[51,36454,31356],{"class":64},[51,36456,31359],{"class":72},[51,36458,36459,36461,36463,36465],{"class":53,"line":120},[51,36460,31701],{"class":64},[51,36462,32379],{"class":72},[51,36464,31356],{"class":64},[51,36466,32826],{"class":72},[51,36468,36469,36471,36473,36475],{"class":53,"line":129},[51,36470,31701],{"class":64},[51,36472,32332],{"class":72},[51,36474,31356],{"class":64},[51,36476,32337],{"class":72},[51,36478,36479,36481,36483,36485],{"class":53,"line":206},[51,36480,31701],{"class":64},[51,36482,32362],{"class":72},[51,36484,31356],{"class":64},[51,36486,32367],{"class":72},[51,36488,36489,36491,36493,36495],{"class":53,"line":212},[51,36490,31356],{"class":64},[51,36492,32379],{"class":72},[51,36494,32347],{"class":64},[51,36496,32384],{"class":72},[51,36498,36499,36501,36503,36505],{"class":53,"line":227},[51,36500,31356],{"class":64},[51,36502,32396],{"class":72},[51,36504,32347],{"class":64},[51,36506,32401],{"class":72},[51,36508,36509],{"class":53,"line":370},[51,36510,32871],{"class":57},[51,36512,36513,36515,36517,36519],{"class":53,"line":387},[51,36514,31701],{"class":64},[51,36516,32878],{"class":72},[51,36518,31356],{"class":64},[51,36520,36521],{"class":72}," AlexNet\n",[51,36523,36524,36526,36528,36530],{"class":53,"line":404},[51,36525,31701],{"class":64},[51,36527,31704],{"class":72},[51,36529,31356],{"class":64},[51,36531,31709],{"class":72},[51,36533,36534],{"class":53,"line":415},[51,36535,3480],{"emptyLinePlaceholder":1192},[51,36537,36538],{"class":53,"line":420},[51,36539,3480],{"emptyLinePlaceholder":1192},[51,36541,36542],{"class":53,"line":429},[51,36543,32906],{"class":57},[51,36545,36546,36548,36550],{"class":53,"line":434},[51,36547,32911],{"class":64},[51,36549,32914],{"class":68},[51,36551,32917],{"class":72},[51,36553,36554,36556,36558,36560,36562],{"class":53,"line":448},[51,36555,32922],{"class":72},[51,36557,108],{"class":64},[51,36559,32419],{"class":72},[51,36561,32427],{"class":282},[51,36563,32430],{"class":72},[51,36565,36566,36568,36570,36572],{"class":53,"line":462},[51,36567,32935],{"class":78},[51,36569,108],{"class":64},[51,36571,32440],{"class":175},[51,36573,32430],{"class":72},[51,36575,36576,36578,36580,36582,36584,36586,36588],{"class":53,"line":470},[51,36577,32946],{"class":78},[51,36579,108],{"class":64},[51,36581,32457],{"class":72},[51,36583,32460],{"class":78},[51,36585,108],{"class":64},[51,36587,36413],{"class":175},[51,36589,32468],{"class":72},[51,36591,36592,36594,36596,36598],{"class":53,"line":2783},[51,36593,32963],{"class":78},[51,36595,108],{"class":64},[51,36597,32440],{"class":175},[51,36599,90],{"class":72},[51,36601,36602,36604,36606,36608,36610,36612,36614,36616,36618,36620,36622,36624,36626,36628,36630],{"class":53,"line":2788},[51,36603,32974],{"class":72},[51,36605,108],{"class":64},[51,36607,32979],{"class":72},[51,36609,32982],{"class":175},[51,36611,73],{"class":72},[51,36613,32987],{"class":175},[51,36615,1702],{"class":64},[51,36617,8320],{"class":175},[51,36619,32994],{"class":72},[51,36621,32982],{"class":175},[51,36623,73],{"class":72},[51,36625,33001],{"class":175},[51,36627,1702],{"class":64},[51,36629,8320],{"class":175},[51,36631,33008],{"class":72},[51,36633,36634,36636,36638,36640,36642,36644],{"class":53,"line":2817},[51,36635,33013],{"class":72},[51,36637,108],{"class":64},[51,36639,33018],{"class":72},[51,36641,32501],{"class":78},[51,36643,108],{"class":64},[51,36645,32506],{"class":72},[51,36647,36648,36650,36652,36654],{"class":53,"line":2822},[51,36649,33029],{"class":78},[51,36651,108],{"class":64},[51,36653,33034],{"class":175},[51,36655,32430],{"class":72},[51,36657,36658,36660,36662,36664],{"class":53,"line":2839},[51,36659,33041],{"class":78},[51,36661,108],{"class":64},[51,36663,32440],{"class":175},[51,36665,32430],{"class":72},[51,36667,36668],{"class":53,"line":2844},[51,36669,33052],{"class":57},[51,36671,36672,36674,36676,36678],{"class":53,"line":2849},[51,36673,33057],{"class":78},[51,36675,108],{"class":64},[51,36677,1643],{"class":175},[51,36679,90],{"class":72},[51,36681,36682,36684,36686,36688,36690,36692],{"class":53,"line":2854},[51,36683,33068],{"class":72},[51,36685,108],{"class":64},[51,36687,32498],{"class":72},[51,36689,32501],{"class":78},[51,36691,108],{"class":64},[51,36693,33079],{"class":72},[51,36695,36696,36698,36700,36702],{"class":53,"line":2868},[51,36697,33084],{"class":78},[51,36699,108],{"class":64},[51,36701,33034],{"class":175},[51,36703,32430],{"class":72},[51,36705,36706,36708,36710,36712],{"class":53,"line":2873},[51,36707,33095],{"class":78},[51,36709,108],{"class":64},[51,36711,32440],{"class":175},[51,36713,32430],{"class":72},[51,36715,36716,36718,36720,36722],{"class":53,"line":3657},[51,36717,33106],{"class":78},[51,36719,108],{"class":64},[51,36721,1643],{"class":175},[51,36723,90],{"class":72},[51,36725,36726,36728],{"class":53,"line":3671},[51,36727,123],{"class":64},[51,36729,33119],{"class":72},[51,36731,36732],{"class":53,"line":3679},[51,36733,3480],{"emptyLinePlaceholder":1192},[51,36735,36736],{"class":53,"line":3684},[51,36737,33128],{"class":57},[51,36739,36740],{"class":53,"line":3690},[51,36741,33133],{"class":57},[51,36743,36744],{"class":53,"line":3696},[51,36745,3480],{"emptyLinePlaceholder":1192},[51,36747,36748],{"class":53,"line":3701},[51,36749,33142],{"class":57},[51,36751,36752,36754,36756],{"class":53,"line":8910},[51,36753,32911],{"class":64},[51,36755,33149],{"class":68},[51,36757,33152],{"class":72},[51,36759,36760,36762,36764,36766,36768,36770,36772,36774,36776],{"class":53,"line":8934},[51,36761,32201],{"class":72},[51,36763,108],{"class":64},[51,36765,31415],{"class":72},[51,36767,32208],{"class":282},[51,36769,2794],{"class":64},[51,36771,32213],{"class":72},[51,36773,2791],{"class":64},[51,36775,33171],{"class":282},[51,36777,90],{"class":72},[51,36779,36780],{"class":53,"line":8939},[51,36781,3480],{"emptyLinePlaceholder":1192},[51,36783,36784],{"class":53,"line":8945},[51,36785,3480],{"emptyLinePlaceholder":1192},[51,36787,36788],{"class":53,"line":8972},[51,36789,33186],{"class":57},[51,36791,36792],{"class":53,"line":8977},[51,36793,33191],{"class":57},[51,36795,36796],{"class":53,"line":8983},[51,36797,33196],{"class":57},[51,36799,36800,36802,36804,36806,36808,36810,36812],{"class":53,"line":8995},[51,36801,33201],{"class":72},[51,36803,108],{"class":64},[51,36805,33206],{"class":72},[51,36807,33209],{"class":78},[51,36809,108],{"class":64},[51,36811,33214],{"class":175},[51,36813,90],{"class":72},[51,36815,36816],{"class":53,"line":9007},[51,36817,3480],{"emptyLinePlaceholder":1192},[51,36819,36820],{"class":53,"line":9019},[51,36821,33225],{"class":57},[51,36823,36824,36826,36828],{"class":53,"line":10678},[51,36825,33230],{"class":72},[51,36827,108],{"class":64},[51,36829,33235],{"class":72},[51,36831,36832],{"class":53,"line":10703},[51,36833,3480],{"emptyLinePlaceholder":1192},[51,36835,36836],{"class":53,"line":10726},[51,36837,33244],{"class":57},[51,36839,36840,36842,36844],{"class":53,"line":10750},[51,36841,32253],{"class":72},[51,36843,108],{"class":64},[51,36845,33253],{"class":72},[51,36847,36848],{"class":53,"line":10755},[51,36849,33258],{"class":57},[51,36851,36852],{"class":53,"line":10760},[51,36853,33263],{"class":57},[51,36855,36856],{"class":53,"line":10765},[51,36857,33268],{"class":57},[51,36859,36860,36862,36864],{"class":53,"line":10774},[51,36861,33273],{"class":72},[51,36863,108],{"class":64},[51,36865,33278],{"class":72},[51,36867,36868],{"class":53,"line":10779},[51,36869,3480],{"emptyLinePlaceholder":1192},[51,36871,36872],{"class":53,"line":10785},[51,36873,3480],{"emptyLinePlaceholder":1192},[51,36875,36876],{"class":53,"line":10806},[51,36877,33291],{"class":57},[51,36879,36880],{"class":53,"line":10812},[51,36881,33296],{"class":57},[51,36883,36884,36886,36888],{"class":53,"line":10826},[51,36885,33301],{"class":72},[51,36887,108],{"class":64},[51,36889,33306],{"class":175},[51,36891,36892],{"class":53,"line":10832},[51,36893,33311],{"class":57},[51,36895,36896,36898,36900],{"class":53,"line":10859},[51,36897,33316],{"class":72},[51,36899,108],{"class":64},[51,36901,33321],{"class":72},[51,36903,36904],{"class":53,"line":10868},[51,36905,33326],{"class":57},[51,36907,36908,36910,36912],{"class":53,"line":10874},[51,36909,33331],{"class":72},[51,36911,108],{"class":64},[51,36913,33321],{"class":72},[51,36915,36916],{"class":53,"line":10882},[51,36917,33340],{"class":57},[51,36919,36920,36922,36924],{"class":53,"line":10887},[51,36921,33345],{"class":72},[51,36923,108],{"class":64},[51,36925,33321],{"class":72},[51,36927,36928],{"class":53,"line":17566},[51,36929,33354],{"class":57},[51,36931,36932,36934,36936],{"class":53,"line":17572},[51,36933,33359],{"class":72},[51,36935,108],{"class":64},[51,36937,33321],{"class":72},[51,36939,36940],{"class":53,"line":17595},[51,36941,3480],{"emptyLinePlaceholder":1192},[51,36943,36944],{"class":53,"line":17601},[51,36945,33372],{"class":57},[51,36947,36948,36950,36952],{"class":53,"line":17624},[51,36949,33377],{"class":72},[51,36951,108],{"class":64},[51,36953,33382],{"class":72},[51,36955,36956],{"class":53,"line":17638},[51,36957,3480],{"emptyLinePlaceholder":1192},[51,36959,36960],{"class":53,"line":17658},[51,36961,3480],{"emptyLinePlaceholder":1192},[51,36963,36964],{"class":53,"line":17664},[51,36965,33395],{"class":57},[51,36967,36968,36970,36972,36974,36976],{"class":53,"line":17675},[51,36969,4278],{"class":64},[51,36971,33402],{"class":72},[51,36973,27007],{"class":64},[51,36975,33407],{"class":175},[51,36977,33410],{"class":72},[51,36979,36980,36982,36984,36986,36988,36990,36992,36994,36996,36998,37000],{"class":53,"line":17698},[51,36981,33415],{"class":175},[51,36983,73],{"class":72},[51,36985,33420],{"class":282},[51,36987,33423],{"class":175},[51,36989,1830],{"class":282},[51,36991,33423],{"class":175},[51,36993,1503],{"class":282},[51,36995,33432],{"class":72},[51,36997,1778],{"class":64},[51,36999,791],{"class":175},[51,37001,31461],{"class":72},[51,37003,37004,37006,37008,37010,37012,37014],{"class":53,"line":17720},[51,37005,33415],{"class":175},[51,37007,73],{"class":72},[51,37009,33447],{"class":282},[51,37011,1702],{"class":64},[51,37013,443],{"class":175},[51,37015,90],{"class":72},[51,37017,37018],{"class":53,"line":17725},[51,37019,3480],{"emptyLinePlaceholder":1192},[51,37021,37022],{"class":53,"line":17731},[51,37023,33462],{"class":57},[51,37025,37026],{"class":53,"line":17745},[51,37027,33467],{"class":57},[51,37029,37030,37032,37034],{"class":53,"line":17758},[51,37031,33472],{"class":72},[51,37033,108],{"class":64},[51,37035,33306],{"class":175},[51,37037,37038],{"class":53,"line":17763},[51,37039,33481],{"class":57},[51,37041,37042,37044,37046],{"class":53,"line":17777},[51,37043,33486],{"class":72},[51,37045,108],{"class":64},[51,37047,4162],{"class":175},[51,37049,37050],{"class":53,"line":17782},[51,37051,33495],{"class":57},[51,37053,37054,37056,37058],{"class":53,"line":17788},[51,37055,33500],{"class":72},[51,37057,108],{"class":64},[51,37059,33306],{"class":175},[51,37061,37062],{"class":53,"line":17793},[51,37063,33509],{"class":57},[51,37065,37066,37068,37070],{"class":53,"line":17807},[51,37067,33514],{"class":72},[51,37069,108],{"class":64},[51,37071,4162],{"class":175},[51,37073,37074],{"class":53,"line":17812},[51,37075,33523],{"class":57},[51,37077,37078,37080,37082],{"class":53,"line":17817},[51,37079,33528],{"class":72},[51,37081,108],{"class":64},[51,37083,4162],{"class":175},[51,37085,37086],{"class":53,"line":17831},[51,37087,33537],{"class":57},[51,37089,37090,37092,37094],{"class":53,"line":17843},[51,37091,33542],{"class":72},[51,37093,108],{"class":64},[51,37095,4162],{"class":175},[51,37097,37098],{"class":53,"line":17848},[51,37099,33551],{"class":57},[51,37101,37102,37104,37106,37108,37110],{"class":53,"line":17861},[51,37103,4480],{"class":64},[51,37105,32565],{"class":72},[51,37107,27007],{"class":64},[51,37109,32570],{"class":175},[51,37111,33564],{"class":72},[51,37113,37114],{"class":53,"line":17866},[51,37115,33569],{"class":57},[51,37117,37118,37120,37122],{"class":53,"line":17871},[51,37119,33574],{"class":72},[51,37121,108],{"class":64},[51,37123,33579],{"class":72},[51,37125,37126],{"class":53,"line":17876},[51,37127,33584],{"class":57},[51,37129,37130,37132,37134],{"class":53,"line":17889},[51,37131,33589],{"class":72},[51,37133,108],{"class":64},[51,37135,33594],{"class":72},[51,37137,37138],{"class":53,"line":17894},[51,37139,33600],{"class":57},[51,37141,37142],{"class":53,"line":33597},[51,37143,33606],{"class":72},[51,37145,37146],{"class":53,"line":33603},[51,37147,33612],{"class":57},[51,37149,37150],{"class":53,"line":33609},[51,37151,33618],{"class":57},[51,37153,37154,37156,37158],{"class":53,"line":33615},[51,37155,33624],{"class":72},[51,37157,108],{"class":64},[51,37159,33629],{"class":72},[51,37161,37162],{"class":53,"line":33621},[51,37163,33635],{"class":57},[51,37165,37166,37168,37170,37172,37174,37176,37178],{"class":53,"line":33632},[51,37167,33641],{"class":72},[51,37169,108],{"class":64},[51,37171,33646],{"class":72},[51,37173,33649],{"class":78},[51,37175,108],{"class":64},[51,37177,791],{"class":175},[51,37179,90],{"class":72},[51,37181,37182],{"class":53,"line":33638},[51,37183,33661],{"class":57},[51,37185,37186,37188,37190],{"class":53,"line":33658},[51,37187,33667],{"class":72},[51,37189,108],{"class":64},[51,37191,33672],{"class":72},[51,37193,37194],{"class":53,"line":33664},[51,37195,33678],{"class":57},[51,37197,37198],{"class":53,"line":33675},[51,37199,33684],{"class":72},[51,37201,37202],{"class":53,"line":33681},[51,37203,33690],{"class":57},[51,37205,37206],{"class":53,"line":33687},[51,37207,33696],{"class":72},[51,37209,37210],{"class":53,"line":33693},[51,37211,33702],{"class":57},[51,37213,37214],{"class":53,"line":33699},[51,37215,33708],{"class":72},[51,37217,37218],{"class":53,"line":33705},[51,37219,33714],{"class":57},[51,37221,37222,37224,37226,37228,37230,37232,37234],{"class":53,"line":33711},[51,37223,33720],{"class":72},[51,37225,10439],{"class":64},[51,37227,33725],{"class":72},[51,37229,1702],{"class":64},[51,37231,33730],{"class":72},[51,37233,176],{"class":175},[51,37235,90],{"class":72},[51,37237,37238],{"class":53,"line":33717},[51,37239,33740],{"class":57},[51,37241,37242,37244,37246,37248,37250],{"class":53,"line":33737},[51,37243,33746],{"class":72},[51,37245,10439],{"class":64},[51,37247,33751],{"class":72},[51,37249,4026],{"class":64},[51,37251,33756],{"class":72},[51,37253,37254],{"class":53,"line":33743},[51,37255,33762],{"class":57},[51,37257,37258,37260,37262,37264,37266],{"class":53,"line":33759},[51,37259,33768],{"class":72},[51,37261,10439],{"class":64},[51,37263,33730],{"class":72},[51,37265,176],{"class":175},[51,37267,90],{"class":72},[51,37269,37270],{"class":53,"line":33765},[51,37271,33782],{"class":57},[51,37273,37274,37276,37278,37280,37282],{"class":53,"line":33779},[51,37275,4480],{"class":64},[51,37277,33790],{"class":72},[51,37279,27007],{"class":64},[51,37281,32570],{"class":175},[51,37283,33797],{"class":72},[51,37285,37286],{"class":53,"line":33785},[51,37287,33803],{"class":57},[51,37289,37290,37292,37294],{"class":53,"line":33800},[51,37291,33574],{"class":72},[51,37293,108],{"class":64},[51,37295,33579],{"class":72},[51,37297,37298],{"class":53,"line":33806},[51,37299,33818],{"class":57},[51,37301,37302,37304,37306],{"class":53,"line":33815},[51,37303,33589],{"class":72},[51,37305,108],{"class":64},[51,37307,33594],{"class":72},[51,37309,37310],{"class":53,"line":33821},[51,37311,33833],{"class":57},[51,37313,37314],{"class":53,"line":33830},[51,37315,33839],{"class":72},[51,37317,37318],{"class":53,"line":33836},[51,37319,37320],{"class":57},"            # 验证时不计算梯度以节省内存\u002F计算\n",[51,37322,37323,37325],{"class":53,"line":33842},[51,37324,33845],{"class":64},[51,37326,33848],{"class":72},[51,37328,37329],{"class":53,"line":33851},[51,37330,33854],{"class":57},[51,37332,37333,37336,37338],{"class":53,"line":33857},[51,37334,37335],{"class":72},"                output",[51,37337,108],{"class":64},[51,37339,33629],{"class":72},[51,37341,37342],{"class":53,"line":33868},[51,37343,33871],{"class":57},[51,37345,37346,37349,37351,37353,37355,37357,37359],{"class":53,"line":33874},[51,37347,37348],{"class":72},"                pre_lab",[51,37350,108],{"class":64},[51,37352,33646],{"class":72},[51,37354,33649],{"class":78},[51,37356,108],{"class":64},[51,37358,791],{"class":175},[51,37360,90],{"class":72},[51,37362,37363],{"class":53,"line":33893},[51,37364,33896],{"class":57},[51,37366,37367,37370,37372],{"class":53,"line":33899},[51,37368,37369],{"class":72},"                val_batch_loss",[51,37371,108],{"class":64},[51,37373,33672],{"class":72},[51,37375,37376],{"class":53,"line":33910},[51,37377,33913],{"class":57},[51,37379,37380,37383,37385,37388,37390,37392,37394],{"class":53,"line":33916},[51,37381,37382],{"class":72},"                val_loss",[51,37384,10439],{"class":64},[51,37386,37387],{"class":72},"val_batch_loss.item()",[51,37389,1702],{"class":64},[51,37391,33730],{"class":72},[51,37393,176],{"class":175},[51,37395,90],{"class":72},[51,37397,37398,37401,37403,37405,37407],{"class":53,"line":33936},[51,37399,37400],{"class":72},"                val_corrects",[51,37402,10439],{"class":64},[51,37404,33751],{"class":72},[51,37406,4026],{"class":64},[51,37408,33756],{"class":72},[51,37410,37411],{"class":53,"line":33952},[51,37412,37413],{"class":57},"            # 当前用于验证的样本数量\n",[51,37415,37416,37419,37421,37423,37425],{"class":53,"line":33958},[51,37417,37418],{"class":72},"            val_num",[51,37420,10439],{"class":64},[51,37422,33730],{"class":72},[51,37424,176],{"class":175},[51,37426,90],{"class":72},[51,37428,37429],{"class":53,"line":33972},[51,37430,33975],{"class":57},[51,37432,37433],{"class":53,"line":33978},[51,37434,33981],{"class":57},[51,37436,37437,37439,37441],{"class":53,"line":33984},[51,37438,33987],{"class":72},[51,37440,1830],{"class":64},[51,37442,33992],{"class":72},[51,37444,37445],{"class":53,"line":33995},[51,37446,33998],{"class":57},[51,37448,37449],{"class":53,"line":34001},[51,37450,34004],{"class":57},[51,37452,37453,37455,37457],{"class":53,"line":34007},[51,37454,34010],{"class":72},[51,37456,1830],{"class":64},[51,37458,33992],{"class":72},[51,37460,37461],{"class":53,"line":34017},[51,37462,34020],{"class":57},[51,37464,37465,37467,37469],{"class":53,"line":34023},[51,37466,34026],{"class":72},[51,37468,1830],{"class":64},[51,37470,34031],{"class":72},[51,37472,37473],{"class":53,"line":34034},[51,37474,34037],{"class":57},[51,37476,37477,37479,37481],{"class":53,"line":34040},[51,37478,34043],{"class":72},[51,37480,1830],{"class":64},[51,37482,34031],{"class":72},[51,37484,37485],{"class":53,"line":34050},[51,37486,3480],{"emptyLinePlaceholder":1192},[51,37488,37489],{"class":53,"line":34055},[51,37490,34058],{"class":57},[51,37492,37493,37495,37497,37499,37501,37503,37505,37507,37509,37511,37513,37515,37517,37519,37521,37523,37525,37527,37529,37531],{"class":53,"line":34061},[51,37494,33415],{"class":175},[51,37496,73],{"class":72},[51,37498,4669],{"class":282},[51,37500,33423],{"class":175},[51,37502,34072],{"class":282},[51,37504,2140],{"class":175},[51,37506,34077],{"class":64},[51,37508,2190],{"class":175},[51,37510,34082],{"class":282},[51,37512,2140],{"class":175},[51,37514,34077],{"class":64},[51,37516,2190],{"class":175},[51,37518,4669],{"class":282},[51,37520,34093],{"class":72},[51,37522,1778],{"class":64},[51,37524,791],{"class":175},[51,37526,34100],{"class":72},[51,37528,1778],{"class":64},[51,37530,791],{"class":175},[51,37532,34107],{"class":72},[51,37534,37535,37537,37539,37541,37543,37545,37547,37549,37551,37553,37555,37557,37559,37561,37563,37565,37567,37569,37571,37573],{"class":53,"line":34110},[51,37536,33415],{"class":175},[51,37538,73],{"class":72},[51,37540,4669],{"class":282},[51,37542,33423],{"class":175},[51,37544,34121],{"class":282},[51,37546,2140],{"class":175},[51,37548,34077],{"class":64},[51,37550,2190],{"class":175},[51,37552,34130],{"class":282},[51,37554,2140],{"class":175},[51,37556,34077],{"class":64},[51,37558,2190],{"class":175},[51,37560,4669],{"class":282},[51,37562,34141],{"class":72},[51,37564,1778],{"class":64},[51,37566,791],{"class":175},[51,37568,34148],{"class":72},[51,37570,1778],{"class":64},[51,37572,791],{"class":175},[51,37574,34107],{"class":72},[51,37576,37577],{"class":53,"line":34157},[51,37578,3480],{"emptyLinePlaceholder":1192},[51,37580,37581],{"class":53,"line":34162},[51,37582,34165],{"class":57},[51,37584,37585,37587,37589,37591,37593,37595,37597],{"class":53,"line":34168},[51,37586,3577],{"class":64},[51,37588,34173],{"class":72},[51,37590,1778],{"class":64},[51,37592,791],{"class":175},[51,37594,2184],{"class":72},[51,37596,972],{"class":64},[51,37598,34184],{"class":72},[51,37600,37601],{"class":53,"line":34187},[51,37602,34190],{"class":57},[51,37604,37605,37607,37609,37611,37613,37615,37617],{"class":53,"line":34193},[51,37606,34196],{"class":72},[51,37608,1300],{"class":175},[51,37610,108],{"class":64},[51,37612,34203],{"class":72},[51,37614,1778],{"class":64},[51,37616,791],{"class":175},[51,37618,34210],{"class":72},[51,37620,37621],{"class":53,"line":34213},[51,37622,34216],{"class":57},[51,37624,37625],{"class":53,"line":34219},[51,37626,34222],{"class":57},[51,37628,37629,37631,37633],{"class":53,"line":34225},[51,37630,34228],{"class":72},[51,37632,108],{"class":64},[51,37634,33278],{"class":72},[51,37636,37637],{"class":53,"line":34235},[51,37638,3480],{"emptyLinePlaceholder":1192},[51,37640,37641],{"class":53,"line":34240},[51,37642,34243],{"class":57},[51,37644,37645,37647,37649,37651,37653],{"class":53,"line":34246},[51,37646,34249],{"class":72},[51,37648,108],{"class":64},[51,37650,34254],{"class":72},[51,37652,1778],{"class":64},[51,37654,34259],{"class":72},[51,37656,37657,37659,37661,37663,37665,37667,37669,37671,37673,37675,37677,37679,37681,37683,37685,37687,37689,37691],{"class":53,"line":34262},[51,37658,33415],{"class":175},[51,37660,73],{"class":72},[51,37662,34269],{"class":282},[51,37664,2140],{"class":175},[51,37666,34274],{"class":64},[51,37668,2190],{"class":175},[51,37670,1790],{"class":282},[51,37672,2140],{"class":175},[51,37674,34274],{"class":64},[51,37676,2190],{"class":175},[51,37678,34287],{"class":282},[51,37680,34290],{"class":72},[51,37682,34293],{"class":64},[51,37684,2151],{"class":175},[51,37686,34298],{"class":72},[51,37688,1577],{"class":64},[51,37690,2151],{"class":175},[51,37692,31461],{"class":72},[51,37694,37695],{"class":53,"line":34307},[51,37696,37697],{"class":57},"    # 选择最优参数并保存\n",[51,37699,37700],{"class":53,"line":34313},[51,37701,37702],{"class":57},"    # 保存最佳模型权重字典\n",[51,37704,37705,37708,37710],{"class":53,"line":34319},[51,37706,37707],{"class":72},"    torch.save(best_model_wts,",[51,37709,34331],{"class":282},[51,37711,90],{"class":72},[51,37713,37714],{"class":53,"line":34325},[51,37715,34351],{"class":57},[51,37717,37718,37720,37722,37724,37726,37728],{"class":53,"line":34336},[51,37719,34357],{"class":72},[51,37721,108],{"class":64},[51,37723,34362],{"class":72},[51,37725,34365],{"class":78},[51,37727,108],{"class":64},[51,37729,96],{"class":72},[51,37731,37732,37734,37736,37738],{"class":53,"line":34342},[51,37733,34375],{"class":282},[51,37735,984],{"class":72},[51,37737,34380],{"class":175},[51,37739,34383],{"class":72},[51,37741,37742,37744],{"class":53,"line":34348},[51,37743,34389],{"class":282},[51,37745,34392],{"class":72},[51,37747,37748,37750],{"class":53,"line":34354},[51,37749,34398],{"class":282},[51,37751,34401],{"class":72},[51,37753,37754,37756],{"class":53,"line":34372},[51,37755,34407],{"class":282},[51,37757,34410],{"class":72},[51,37759,37760,37762],{"class":53,"line":34386},[51,37761,34416],{"class":282},[51,37763,34419],{"class":72},[51,37765,37766],{"class":53,"line":34395},[51,37767,34425],{"class":72},[51,37769,37770],{"class":53,"line":34404},[51,37771,34431],{"class":57},[51,37773,37774,37776],{"class":53,"line":34413},[51,37775,123],{"class":64},[51,37777,34439],{"class":72},[51,37779,37780],{"class":53,"line":34422},[51,37781,3480],{"emptyLinePlaceholder":1192},[51,37783,37784],{"class":53,"line":34428},[51,37785,34450],{"class":57},[51,37787,37788,37790,37792],{"class":53,"line":34434},[51,37789,32911],{"class":64},[51,37791,34458],{"class":68},[51,37793,34461],{"class":72},[51,37795,37796],{"class":53,"line":34442},[51,37797,34467],{"class":57},[51,37799,37800,37802,37804,37806,37808,37810,37812,37814],{"class":53,"line":34447},[51,37801,34473],{"class":72},[51,37803,32657],{"class":78},[51,37805,108],{"class":64},[51,37807,73],{"class":72},[51,37809,1744],{"class":175},[51,37811,82],{"class":72},[51,37813,1543],{"class":175},[51,37815,31461],{"class":72},[51,37817,37818],{"class":53,"line":34453},[51,37819,34493],{"class":57},[51,37821,37822],{"class":53,"line":34464},[51,37823,34499],{"class":57},[51,37825,37826],{"class":53,"line":34470},[51,37827,34505],{"class":57},[51,37829,37830,37832,37834,37836,37838,37840,37842],{"class":53,"line":34490},[51,37831,32691],{"class":72},[51,37833,791],{"class":175},[51,37835,82],{"class":72},[51,37837,1334],{"class":175},[51,37839,82],{"class":72},[51,37841,791],{"class":175},[51,37843,90],{"class":72},[51,37845,37846],{"class":53,"line":34496},[51,37847,34528],{"class":57},[51,37849,37850],{"class":53,"line":34502},[51,37851,34534],{"class":57},[51,37853,37854],{"class":53,"line":34508},[51,37855,34540],{"class":57},[51,37857,37858],{"class":53,"line":34525},[51,37859,34546],{"class":57},[51,37861,37862],{"class":53,"line":34531},[51,37863,34552],{"class":57},[51,37865,37866,37868,37870,37872,37874,37876,37878,37880,37882],{"class":53,"line":34537},[51,37867,34558],{"class":72},[51,37869,34561],{"class":282},[51,37871,34564],{"class":72},[51,37873,34567],{"class":282},[51,37875,82],{"class":72},[51,37877,34572],{"class":78},[51,37879,108],{"class":64},[51,37881,34577],{"class":282},[51,37883,90],{"class":72},[51,37885,37886,37888,37890,37892,37894,37896,37898,37900,37902],{"class":53,"line":34543},[51,37887,34558],{"class":72},[51,37889,34561],{"class":282},[51,37891,34589],{"class":72},[51,37893,34592],{"class":282},[51,37895,82],{"class":72},[51,37897,34572],{"class":78},[51,37899,108],{"class":64},[51,37901,34601],{"class":282},[51,37903,90],{"class":72},[51,37905,37906],{"class":53,"line":34549},[51,37907,34609],{"class":57},[51,37909,37910],{"class":53,"line":34555},[51,37911,34615],{"class":72},[51,37913,37914],{"class":53,"line":34582},[51,37915,34621],{"class":57},[51,37917,37918,37920,37922],{"class":53,"line":34606},[51,37919,34627],{"class":72},[51,37921,34630],{"class":282},[51,37923,90],{"class":72},[51,37925,37926,37928,37930],{"class":53,"line":34612},[51,37927,34638],{"class":72},[51,37929,34641],{"class":282},[51,37931,90],{"class":72},[51,37933,37934],{"class":53,"line":34618},[51,37935,34649],{"class":57},[51,37937,37938,37940,37942,37944,37946,37948,37950],{"class":53,"line":34624},[51,37939,32691],{"class":72},[51,37941,791],{"class":175},[51,37943,82],{"class":72},[51,37945,1334],{"class":175},[51,37947,82],{"class":72},[51,37949,1334],{"class":175},[51,37951,90],{"class":72},[51,37953,37954,37956,37958,37960,37962,37964,37966,37968,37970],{"class":53,"line":34635},[51,37955,34558],{"class":72},[51,37957,34561],{"class":282},[51,37959,34676],{"class":72},[51,37961,34567],{"class":282},[51,37963,82],{"class":72},[51,37965,34572],{"class":78},[51,37967,108],{"class":64},[51,37969,34687],{"class":282},[51,37971,90],{"class":72},[51,37973,37974,37976,37978,37980,37982,37984,37986,37988,37990],{"class":53,"line":34646},[51,37975,34558],{"class":72},[51,37977,34561],{"class":282},[51,37979,34699],{"class":72},[51,37981,34592],{"class":282},[51,37983,82],{"class":72},[51,37985,34572],{"class":78},[51,37987,108],{"class":64},[51,37989,34710],{"class":282},[51,37991,90],{"class":72},[51,37993,37994],{"class":53,"line":34652},[51,37995,34718],{"class":57},[51,37997,37998],{"class":53,"line":34669},[51,37999,34615],{"class":72},[51,38001,38002,38004,38006],{"class":53,"line":34692},[51,38003,34627],{"class":72},[51,38005,34561],{"class":282},[51,38007,90],{"class":72},[51,38009,38010,38012,38014],{"class":53,"line":34715},[51,38011,34638],{"class":72},[51,38013,34740],{"class":282},[51,38015,90],{"class":72},[51,38017,38018],{"class":53,"line":34721},[51,38019,34748],{"class":72},[51,38021,38022],{"class":53,"line":34726},[51,38023,3480],{"emptyLinePlaceholder":1192},[51,38025,38026],{"class":53,"line":34735},[51,38027,34759],{"class":57},[51,38029,38030,38032,38034,38036,38038],{"class":53,"line":34745},[51,38031,2633],{"class":64},[51,38033,32184],{"class":175},[51,38035,4026],{"class":64},[51,38037,32189],{"class":282},[51,38039,4816],{"class":72},[51,38041,38042],{"class":53,"line":34751},[51,38043,34778],{"class":57},[51,38045,38046,38049,38051],{"class":53,"line":34756},[51,38047,38048],{"class":72},"    AlexNet",[51,38050,108],{"class":64},[51,38052,38053],{"class":72},"AlexNet()\n",[51,38055,38056,38058,38060],{"class":53,"line":34762},[51,38057,34795],{"class":72},[51,38059,108],{"class":64},[51,38061,34800],{"class":72},[51,38063,38064,38066,38068,38071,38073,38075,38077],{"class":53,"line":34775},[51,38065,34357],{"class":72},[51,38067,108],{"class":64},[51,38069,38070],{"class":72},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[51,38072,34813],{"class":78},[51,38074,108],{"class":64},[51,38076,457],{"class":175},[51,38078,90],{"class":72},[51,38080,38081],{"class":53,"line":34781},[51,38082,34825],{"class":72},[19,38084,38085],{"start":93},[22,38086,34838],{},[29,38088,38090],{"className":31342,"code":38089,"language":31344,"meta":35,"style":35},"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",[37,38091,38092,38098,38108,38118,38128,38132,38142,38152,38163,38167,38171,38175,38183,38199,38209,38225,38235,38249,38253,38263,38273,38283,38289,38293,38297,38305,38309,38325,38333,38337,38341,38349,38357,38361,38365,38369,38373,38379,38383,38393,38401,38409,38413,38417,38421,38429,38433,38449,38453,38457,38461,38473,38477,38489,38493,38497,38509,38513,38523,38527,38531,38543,38547,38555,38559,38563,38571,38575,38583,38587,38591,38595,38599,38603,38619,38627,38631,38635,38683,38689,38693,38703,38711,38719,38723,38727,38731,38735,38743,38747,38763,38767,38775,38783],{"__ignoreMap":35},[51,38093,38094,38096],{"class":53,"line":54},[51,38095,31356],{"class":64},[51,38097,31359],{"class":72},[51,38099,38100,38102,38104,38106],{"class":53,"line":61},[51,38101,31356],{"class":64},[51,38103,32379],{"class":72},[51,38105,32347],{"class":64},[51,38107,32384],{"class":72},[51,38109,38110,38112,38114,38116],{"class":53,"line":93},[51,38111,31701],{"class":64},[51,38113,34866],{"class":72},[51,38115,31356],{"class":64},[51,38117,34871],{"class":72},[51,38119,38120,38122,38124,38126],{"class":53,"line":99},[51,38121,31701],{"class":64},[51,38123,32362],{"class":72},[51,38125,31356],{"class":64},[51,38127,32367],{"class":72},[51,38129,38130],{"class":53,"line":120},[51,38131,34886],{"class":57},[51,38133,38134,38136,38138,38140],{"class":53,"line":129},[51,38135,31701],{"class":64},[51,38137,32332],{"class":72},[51,38139,31356],{"class":64},[51,38141,32337],{"class":72},[51,38143,38144,38146,38148,38150],{"class":53,"line":206},[51,38145,31701],{"class":64},[51,38147,32878],{"class":72},[51,38149,31356],{"class":64},[51,38151,36521],{"class":72},[51,38153,38154,38156,38159,38161],{"class":53,"line":212},[51,38155,31701],{"class":64},[51,38157,38158],{"class":72}," 练习.AlexNet.model ",[51,38160,31356],{"class":64},[51,38162,36521],{"class":72},[51,38164,38165],{"class":53,"line":227},[51,38166,3480],{"emptyLinePlaceholder":1192},[51,38168,38169],{"class":53,"line":370},[51,38170,3480],{"emptyLinePlaceholder":1192},[51,38172,38173],{"class":53,"line":387},[51,38174,34915],{"class":57},[51,38176,38177,38179,38181],{"class":53,"line":404},[51,38178,32911],{"class":64},[51,38180,34922],{"class":68},[51,38182,32917],{"class":72},[51,38184,38185,38187,38189,38191,38193,38195,38197],{"class":53,"line":415},[51,38186,34929],{"class":72},[51,38188,108],{"class":64},[51,38190,32419],{"class":72},[51,38192,32422],{"class":78},[51,38194,108],{"class":64},[51,38196,32427],{"class":282},[51,38198,32430],{"class":72},[51,38200,38201,38203,38205,38207],{"class":53,"line":420},[51,38202,34946],{"class":78},[51,38204,108],{"class":64},[51,38206,34951],{"class":175},[51,38208,32430],{"class":72},[51,38210,38211,38213,38215,38217,38219,38221,38223],{"class":53,"line":429},[51,38212,34958],{"class":78},[51,38214,108],{"class":64},[51,38216,32457],{"class":72},[51,38218,32460],{"class":78},[51,38220,108],{"class":64},[51,38222,36413],{"class":175},[51,38224,32468],{"class":72},[51,38226,38227,38229,38231,38233],{"class":53,"line":434},[51,38228,34975],{"class":78},[51,38230,108],{"class":64},[51,38232,32440],{"class":175},[51,38234,90],{"class":72},[51,38236,38237,38239,38241,38243,38245,38247],{"class":53,"line":448},[51,38238,34986],{"class":72},[51,38240,108],{"class":64},[51,38242,32498],{"class":72},[51,38244,32501],{"class":78},[51,38246,108],{"class":64},[51,38248,34997],{"class":72},[51,38250,38251],{"class":53,"line":462},[51,38252,35002],{"class":57},[51,38254,38255,38257,38259,38261],{"class":53,"line":470},[51,38256,35007],{"class":78},[51,38258,108],{"class":64},[51,38260,791],{"class":175},[51,38262,32430],{"class":72},[51,38264,38265,38267,38269,38271],{"class":53,"line":2783},[51,38266,35018],{"class":78},[51,38268,108],{"class":64},[51,38270,32440],{"class":175},[51,38272,32430],{"class":72},[51,38274,38275,38277,38279,38281],{"class":53,"line":2788},[51,38276,35029],{"class":78},[51,38278,108],{"class":64},[51,38280,176],{"class":175},[51,38282,90],{"class":72},[51,38284,38285,38287],{"class":53,"line":2817},[51,38286,123],{"class":64},[51,38288,35042],{"class":72},[51,38290,38291],{"class":53,"line":2822},[51,38292,3480],{"emptyLinePlaceholder":1192},[51,38294,38295],{"class":53,"line":2839},[51,38296,35051],{"class":57},[51,38298,38299,38301,38303],{"class":53,"line":2844},[51,38300,32911],{"class":64},[51,38302,35058],{"class":68},[51,38304,35061],{"class":72},[51,38306,38307],{"class":53,"line":2849},[51,38308,35066],{"class":57},[51,38310,38311,38313,38315,38317,38319,38321,38323],{"class":53,"line":2854},[51,38312,32201],{"class":72},[51,38314,108],{"class":64},[51,38316,32208],{"class":282},[51,38318,2794],{"class":64},[51,38320,32213],{"class":72},[51,38322,2791],{"class":64},[51,38324,35083],{"class":282},[51,38326,38327,38329,38331],{"class":53,"line":2868},[51,38328,32253],{"class":72},[51,38330,108],{"class":64},[51,38332,33253],{"class":72},[51,38334,38335],{"class":53,"line":2873},[51,38336,3480],{"emptyLinePlaceholder":1192},[51,38338,38339],{"class":53,"line":3657},[51,38340,35100],{"class":57},[51,38342,38343,38345,38347],{"class":53,"line":3671},[51,38344,35105],{"class":72},[51,38346,108],{"class":64},[51,38348,33306],{"class":175},[51,38350,38351,38353,38355],{"class":53,"line":3679},[51,38352,35114],{"class":72},[51,38354,108],{"class":64},[51,38356,4162],{"class":175},[51,38358,38359],{"class":53,"line":3684},[51,38360,3480],{"emptyLinePlaceholder":1192},[51,38362,38363],{"class":53,"line":3690},[51,38364,35127],{"class":57},[51,38366,38367],{"class":53,"line":3696},[51,38368,35132],{"class":57},[51,38370,38371],{"class":53,"line":3701},[51,38372,35137],{"class":57},[51,38374,38375,38377],{"class":53,"line":8910},[51,38376,35142],{"class":64},[51,38378,33848],{"class":72},[51,38380,38381],{"class":53,"line":8934},[51,38382,35149],{"class":57},[51,38384,38385,38387,38389,38391],{"class":53,"line":8939},[51,38386,4480],{"class":64},[51,38388,35156],{"class":72},[51,38390,27007],{"class":64},[51,38392,35161],{"class":72},[51,38394,38395,38397,38399],{"class":53,"line":8945},[51,38396,35166],{"class":72},[51,38398,108],{"class":64},[51,38400,35171],{"class":72},[51,38402,38403,38405,38407],{"class":53,"line":8972},[51,38404,35176],{"class":72},[51,38406,108],{"class":64},[51,38408,35181],{"class":72},[51,38410,38411],{"class":53,"line":8977},[51,38412,35186],{"class":57},[51,38414,38415],{"class":53,"line":8983},[51,38416,33839],{"class":72},[51,38418,38419],{"class":53,"line":8995},[51,38420,35195],{"class":57},[51,38422,38423,38425,38427],{"class":53,"line":9007},[51,38424,33624],{"class":72},[51,38426,108],{"class":64},[51,38428,35204],{"class":72},[51,38430,38431],{"class":53,"line":9019},[51,38432,35209],{"class":57},[51,38434,38435,38437,38439,38441,38443,38445,38447],{"class":53,"line":10678},[51,38436,33641],{"class":72},[51,38438,108],{"class":64},[51,38440,33646],{"class":72},[51,38442,33649],{"class":78},[51,38444,108],{"class":64},[51,38446,791],{"class":175},[51,38448,90],{"class":72},[51,38450,38451],{"class":53,"line":10703},[51,38452,35230],{"class":57},[51,38454,38455],{"class":53,"line":10726},[51,38456,35235],{"class":57},[51,38458,38459],{"class":53,"line":10750},[51,38460,35240],{"class":57},[51,38462,38463,38465,38467,38469,38471],{"class":53,"line":10755},[51,38464,35245],{"class":72},[51,38466,10439],{"class":64},[51,38468,33751],{"class":72},[51,38470,4026],{"class":64},[51,38472,35254],{"class":72},[51,38474,38475],{"class":53,"line":10760},[51,38476,35259],{"class":57},[51,38478,38479,38481,38483,38485,38487],{"class":53,"line":10765},[51,38480,35264],{"class":72},[51,38482,10439],{"class":64},[51,38484,35269],{"class":72},[51,38486,176],{"class":175},[51,38488,90],{"class":72},[51,38490,38491],{"class":53,"line":10774},[51,38492,3480],{"emptyLinePlaceholder":1192},[51,38494,38495],{"class":53,"line":10779},[51,38496,35282],{"class":57},[51,38498,38499,38501,38503,38505,38507],{"class":53,"line":10785},[51,38500,35287],{"class":72},[51,38502,108],{"class":64},[51,38504,35292],{"class":72},[51,38506,1830],{"class":64},[51,38508,35297],{"class":72},[51,38510,38511],{"class":53,"line":10806},[51,38512,35302],{"class":57},[51,38514,38515,38517,38519,38521],{"class":53,"line":10812},[51,38516,33415],{"class":175},[51,38518,73],{"class":72},[51,38520,35311],{"class":282},[51,38522,35314],{"class":72},[51,38524,38525],{"class":53,"line":10826},[51,38526,3480],{"emptyLinePlaceholder":1192},[51,38528,38529],{"class":53,"line":10832},[51,38530,35323],{"class":57},[51,38532,38533,38535,38537,38539,38541],{"class":53,"line":10859},[51,38534,2633],{"class":64},[51,38536,32184],{"class":175},[51,38538,4026],{"class":64},[51,38540,32189],{"class":282},[51,38542,4816],{"class":72},[51,38544,38545],{"class":53,"line":10868},[51,38546,35340],{"class":57},[51,38548,38549,38551,38553],{"class":53,"line":10874},[51,38550,32253],{"class":72},[51,38552,108],{"class":64},[51,38554,38053],{"class":72},[51,38556,38557],{"class":53,"line":10882},[51,38558,35353],{"class":57},[51,38560,38561],{"class":53,"line":10887},[51,38562,35358],{"class":57},[51,38564,38565,38567,38569],{"class":53,"line":17566},[51,38566,35363],{"class":72},[51,38568,35366],{"class":282},[51,38570,31461],{"class":72},[51,38572,38573],{"class":53,"line":17572},[51,38574,35373],{"class":57},[51,38576,38577,38579,38581],{"class":53,"line":17595},[51,38578,34986],{"class":72},[51,38580,108],{"class":64},[51,38582,35382],{"class":72},[51,38584,38585],{"class":53,"line":17601},[51,38586,35387],{"class":57},[51,38588,38589],{"class":53,"line":17624},[51,38590,35392],{"class":72},[51,38592,38593],{"class":53,"line":17638},[51,38594,3480],{"emptyLinePlaceholder":1192},[51,38596,38597],{"class":53,"line":17658},[51,38598,35401],{"class":57},[51,38600,38601],{"class":53,"line":17664},[51,38602,35406],{"class":57},[51,38604,38605,38607,38609,38611,38613,38615,38617],{"class":53,"line":17675},[51,38606,32201],{"class":72},[51,38608,108],{"class":64},[51,38610,32208],{"class":282},[51,38612,2794],{"class":64},[51,38614,32213],{"class":72},[51,38616,2791],{"class":64},[51,38618,35083],{"class":282},[51,38620,38621,38623,38625],{"class":53,"line":17698},[51,38622,32253],{"class":72},[51,38624,108],{"class":64},[51,38626,33253],{"class":72},[51,38628,38629],{"class":53,"line":17720},[51,38630,35435],{"class":57},[51,38632,38633],{"class":53,"line":17725},[51,38634,35440],{"class":57},[51,38636,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673,38675,38677,38679,38681],{"class":53,"line":17731},[51,38638,35445],{"class":72},[51,38640,108],{"class":64},[51,38642,2134],{"class":72},[51,38644,35452],{"class":282},[51,38646,82],{"class":72},[51,38648,35457],{"class":282},[51,38650,82],{"class":72},[51,38652,35462],{"class":282},[51,38654,82],{"class":72},[51,38656,35467],{"class":282},[51,38658,82],{"class":72},[51,38660,35472],{"class":282},[51,38662,82],{"class":72},[51,38664,35477],{"class":282},[51,38666,82],{"class":72},[51,38668,35482],{"class":282},[51,38670,82],{"class":72},[51,38672,35487],{"class":282},[51,38674,82],{"class":72},[51,38676,35492],{"class":282},[51,38678,82],{"class":72},[51,38680,35497],{"class":282},[51,38682,34210],{"class":72},[51,38684,38685,38687],{"class":53,"line":17745},[51,38686,35142],{"class":64},[51,38688,33848],{"class":72},[51,38690,38691],{"class":53,"line":17758},[51,38692,35510],{"class":57},[51,38694,38695,38697,38699,38701],{"class":53,"line":17763},[51,38696,4480],{"class":64},[51,38698,35517],{"class":72},[51,38700,27007],{"class":64},[51,38702,35161],{"class":72},[51,38704,38705,38707,38709],{"class":53,"line":17777},[51,38706,33574],{"class":72},[51,38708,108],{"class":64},[51,38710,33579],{"class":72},[51,38712,38713,38715,38717],{"class":53,"line":17782},[51,38714,33589],{"class":72},[51,38716,108],{"class":64},[51,38718,33594],{"class":72},[51,38720,38721],{"class":53,"line":17788},[51,38722,3480],{"emptyLinePlaceholder":1192},[51,38724,38725],{"class":53,"line":17793},[51,38726,35546],{"class":57},[51,38728,38729],{"class":53,"line":17807},[51,38730,33839],{"class":72},[51,38732,38733],{"class":53,"line":17812},[51,38734,35555],{"class":57},[51,38736,38737,38739,38741],{"class":53,"line":17817},[51,38738,33624],{"class":72},[51,38740,108],{"class":64},[51,38742,33629],{"class":72},[51,38744,38745],{"class":53,"line":17831},[51,38746,35568],{"class":57},[51,38748,38749,38751,38753,38755,38757,38759,38761],{"class":53,"line":17843},[51,38750,33641],{"class":72},[51,38752,108],{"class":64},[51,38754,33646],{"class":72},[51,38756,33649],{"class":78},[51,38758,108],{"class":64},[51,38760,791],{"class":175},[51,38762,90],{"class":72},[51,38764,38765],{"class":53,"line":17848},[51,38766,35589],{"class":57},[51,38768,38769,38771,38773],{"class":53,"line":17861},[51,38770,35594],{"class":72},[51,38772,108],{"class":64},[51,38774,35599],{"class":72},[51,38776,38777,38779,38781],{"class":53,"line":17866},[51,38778,35604],{"class":72},[51,38780,108],{"class":64},[51,38782,35609],{"class":72},[51,38784,38785,38787,38789,38791,38793,38795,38797,38799],{"class":53,"line":17871},[51,38786,35614],{"class":175},[51,38788,73],{"class":72},[51,38790,35619],{"class":282},[51,38792,35622],{"class":72},[51,38794,35625],{"class":282},[51,38796,82],{"class":72},[51,38798,35630],{"class":282},[51,38800,35633],{"class":72},[1233,38802,38804],{"id":38803},"_22vgg","2.2.VGG",[22960,38806,38808],{"id":38807},"_221原理","2.2.1.原理",[40,38810,38811],{},[2564,38812],{"alt":35,"src":38813},"\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",[40,38815,38816],{},[2564,38817],{"alt":35,"src":38818},"\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",[40,38820,38821],{},[2564,38822],{"alt":35,"src":38823},"\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",[40,38825,38826],{},"参数详细描述：",[40,38828,38829],{},[2564,38830],{"alt":35,"src":38831},"\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",[40,38833,38834],{},[2564,38835],{"alt":35,"src":38836},"\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",[40,38838,38839],{},[2564,38840],{"alt":35,"src":38841},"\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",[40,38843,38844],{},[2564,38845],{"alt":35,"src":38846},"\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",[40,38848,38849],{},[2564,38850],{"alt":35,"src":38851},"\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",[22960,38853,38855],{"id":38854},"_222代码实现","2.2.2.代码实现",[19,38857,38858],{},[22,38859,38860],{},"网络搭建",[29,38862,38864],{"className":31342,"code":38863,"language":31344,"meta":35,"style":35},"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",[37,38865,38866,38872,38884,38894,38904,38908,38925,38933,38952,38957,38962,38974,39012,39017,39053,39057,39086,39091,39096,39107,39143,39147,39183,39187,39215,39219,39224,39235,39271,39275,39311,39315,39351,39355,39383,39387,39392,39403,39440,39444,39480,39484,39520,39524,39552,39556,39561,39572,39608,39612,39648,39652,39688,39692,39720,39724,39729,39740,39745,39750,39755,39776,39780,39792,39796,39808,39812,39816,39821,39826,39841,39846,39856,39861,39876,39881,39900,39905,39914,39919,39929,39934,39939,39953,39958,39972,39980,39984,39988,39996,40007,40018,40029,40040,40051,40062,40068,40072,40077,40090,40110,40116,40125],{"__ignoreMap":35},[51,38867,38868,38870],{"class":53,"line":54},[51,38869,31356],{"class":64},[51,38871,31359],{"class":72},[51,38873,38874,38876,38879,38881],{"class":53,"line":61},[51,38875,31701],{"class":64},[51,38877,38878],{"class":72}," sympy.core.sympify ",[51,38880,31356],{"class":64},[51,38882,38883],{"class":72}," kernS\n",[51,38885,38886,38888,38890,38892],{"class":53,"line":93},[51,38887,31701],{"class":64},[51,38889,31704],{"class":72},[51,38891,31356],{"class":64},[51,38893,31709],{"class":72},[51,38895,38896,38898,38900,38902],{"class":53,"line":99},[51,38897,31701],{"class":64},[51,38899,31721],{"class":72},[51,38901,31356],{"class":64},[51,38903,31726],{"class":72},[51,38905,38906],{"class":53,"line":120},[51,38907,3480],{"emptyLinePlaceholder":1192},[51,38909,38910,38912,38915,38917,38919,38921,38923],{"class":53,"line":129},[51,38911,15656],{"class":64},[51,38913,38914],{"class":68}," VGG16",[51,38916,73],{"class":72},[51,38918,31742],{"class":68},[51,38920,1804],{"class":72},[51,38922,31747],{"class":68},[51,38924,31750],{"class":72},[51,38926,38927,38929,38931],{"class":53,"line":206},[51,38928,31765],{"class":64},[51,38930,31768],{"class":175},[51,38932,31771],{"class":72},[51,38934,38935,38937,38939,38942,38944,38946,38948,38950],{"class":53,"line":212},[51,38936,31781],{"class":175},[51,38938,73],{"class":72},[51,38940,38941],{"class":175},"VGG16",[51,38943,13397],{"class":72},[51,38945,31787],{"class":175},[51,38947,31790],{"class":72},[51,38949,31793],{"class":175},[51,38951,154],{"class":72},[51,38953,38954],{"class":53,"line":227},[51,38955,38956],{"class":57},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[51,38958,38959],{"class":53,"line":370},[51,38960,38961],{"class":57},"        # 这里用的是灰度图\n",[51,38963,38964,38966,38969,38971],{"class":53,"line":387},[51,38965,31809],{"class":175},[51,38967,38968],{"class":72},".block1",[51,38970,108],{"class":64},[51,38972,38973],{"class":72},"nn.Sequential(\n",[51,38975,38976,38979,38981,38983,38985,38987,38989,38991,38993,38995,38997,38999,39001,39003,39005,39007,39009],{"class":53,"line":404},[51,38977,38978],{"class":72},"            nn.Conv2d(",[51,38980,31820],{"class":78},[51,38982,108],{"class":64},[51,38984,791],{"class":175},[51,38986,82],{"class":72},[51,38988,31829],{"class":78},[51,38990,108],{"class":64},[51,38992,1457],{"class":175},[51,38994,82],{"class":72},[51,38996,31838],{"class":78},[51,38998,108],{"class":64},[51,39000,1328],{"class":175},[51,39002,82],{"class":72},[51,39004,31847],{"class":78},[51,39006,108],{"class":64},[51,39008,791],{"class":175},[51,39010,39011],{"class":72},"),\n",[51,39013,39014],{"class":53,"line":415},[51,39015,39016],{"class":72},"            nn.ReLU(),\n",[51,39018,39019,39021,39023,39025,39027,39029,39031,39033,39035,39037,39039,39041,39043,39045,39047,39049,39051],{"class":53,"line":420},[51,39020,38978],{"class":72},[51,39022,31820],{"class":78},[51,39024,108],{"class":64},[51,39026,1457],{"class":175},[51,39028,82],{"class":72},[51,39030,31829],{"class":78},[51,39032,108],{"class":64},[51,39034,1457],{"class":175},[51,39036,82],{"class":72},[51,39038,31838],{"class":78},[51,39040,108],{"class":64},[51,39042,1328],{"class":175},[51,39044,82],{"class":72},[51,39046,31847],{"class":78},[51,39048,108],{"class":64},[51,39050,791],{"class":175},[51,39052,39011],{"class":72},[51,39054,39055],{"class":53,"line":429},[51,39056,39016],{"class":72},[51,39058,39059,39062,39064,39066,39068,39070,39072,39074,39076,39078,39080,39082,39084],{"class":53,"line":434},[51,39060,39061],{"class":72},"            nn.MaxPool2d(",[51,39063,31838],{"class":78},[51,39065,108],{"class":64},[51,39067,1334],{"class":175},[51,39069,82],{"class":72},[51,39071,31893],{"class":78},[51,39073,108],{"class":64},[51,39075,1334],{"class":175},[51,39077,82],{"class":72},[51,39079,31847],{"class":78},[51,39081,108],{"class":64},[51,39083,176],{"class":175},[51,39085,90],{"class":72},[51,39087,39088],{"class":53,"line":448},[51,39089,39090],{"class":72},"        )\n",[51,39092,39093],{"class":53,"line":462},[51,39094,39095],{"class":57},"        # 第二层\n",[51,39097,39098,39100,39103,39105],{"class":53,"line":470},[51,39099,31809],{"class":175},[51,39101,39102],{"class":72},".block2",[51,39104,108],{"class":64},[51,39106,38973],{"class":72},[51,39108,39109,39111,39113,39115,39117,39119,39121,39123,39125,39127,39129,39131,39133,39135,39137,39139,39141],{"class":53,"line":2783},[51,39110,38978],{"class":72},[51,39112,31820],{"class":78},[51,39114,108],{"class":64},[51,39116,1457],{"class":175},[51,39118,82],{"class":72},[51,39120,31829],{"class":78},[51,39122,108],{"class":64},[51,39124,33034],{"class":175},[51,39126,82],{"class":72},[51,39128,31838],{"class":78},[51,39130,108],{"class":64},[51,39132,1328],{"class":175},[51,39134,82],{"class":72},[51,39136,31847],{"class":78},[51,39138,108],{"class":64},[51,39140,791],{"class":175},[51,39142,39011],{"class":72},[51,39144,39145],{"class":53,"line":2788},[51,39146,39016],{"class":72},[51,39148,39149,39151,39153,39155,39157,39159,39161,39163,39165,39167,39169,39171,39173,39175,39177,39179,39181],{"class":53,"line":2817},[51,39150,38978],{"class":72},[51,39152,31820],{"class":78},[51,39154,108],{"class":64},[51,39156,33034],{"class":175},[51,39158,82],{"class":72},[51,39160,31829],{"class":78},[51,39162,108],{"class":64},[51,39164,33034],{"class":175},[51,39166,82],{"class":72},[51,39168,31838],{"class":78},[51,39170,108],{"class":64},[51,39172,1328],{"class":175},[51,39174,82],{"class":72},[51,39176,31847],{"class":78},[51,39178,108],{"class":64},[51,39180,791],{"class":175},[51,39182,39011],{"class":72},[51,39184,39185],{"class":53,"line":2822},[51,39186,39016],{"class":72},[51,39188,39189,39191,39193,39195,39197,39199,39201,39203,39205,39207,39209,39211,39213],{"class":53,"line":2839},[51,39190,39061],{"class":72},[51,39192,31838],{"class":78},[51,39194,108],{"class":64},[51,39196,1334],{"class":175},[51,39198,82],{"class":72},[51,39200,31893],{"class":78},[51,39202,108],{"class":64},[51,39204,1334],{"class":175},[51,39206,82],{"class":72},[51,39208,31847],{"class":78},[51,39210,108],{"class":64},[51,39212,176],{"class":175},[51,39214,90],{"class":72},[51,39216,39217],{"class":53,"line":2844},[51,39218,39090],{"class":72},[51,39220,39221],{"class":53,"line":2849},[51,39222,39223],{"class":57},"        # 第三层\n",[51,39225,39226,39228,39231,39233],{"class":53,"line":2854},[51,39227,31809],{"class":175},[51,39229,39230],{"class":72},".block3",[51,39232,108],{"class":64},[51,39234,38973],{"class":72},[51,39236,39237,39239,39241,39243,39245,39247,39249,39251,39253,39255,39257,39259,39261,39263,39265,39267,39269],{"class":53,"line":2868},[51,39238,38978],{"class":72},[51,39240,31820],{"class":78},[51,39242,108],{"class":64},[51,39244,33034],{"class":175},[51,39246,82],{"class":72},[51,39248,31829],{"class":78},[51,39250,108],{"class":64},[51,39252,35834],{"class":175},[51,39254,82],{"class":72},[51,39256,31838],{"class":78},[51,39258,108],{"class":64},[51,39260,1328],{"class":175},[51,39262,82],{"class":72},[51,39264,31847],{"class":78},[51,39266,108],{"class":64},[51,39268,791],{"class":175},[51,39270,39011],{"class":72},[51,39272,39273],{"class":53,"line":2873},[51,39274,39016],{"class":72},[51,39276,39277,39279,39281,39283,39285,39287,39289,39291,39293,39295,39297,39299,39301,39303,39305,39307,39309],{"class":53,"line":3657},[51,39278,38978],{"class":72},[51,39280,31820],{"class":78},[51,39282,108],{"class":64},[51,39284,35834],{"class":175},[51,39286,82],{"class":72},[51,39288,31829],{"class":78},[51,39290,108],{"class":64},[51,39292,35834],{"class":175},[51,39294,82],{"class":72},[51,39296,31838],{"class":78},[51,39298,108],{"class":64},[51,39300,1328],{"class":175},[51,39302,82],{"class":72},[51,39304,31847],{"class":78},[51,39306,108],{"class":64},[51,39308,791],{"class":175},[51,39310,39011],{"class":72},[51,39312,39313],{"class":53,"line":3671},[51,39314,39016],{"class":72},[51,39316,39317,39319,39321,39323,39325,39327,39329,39331,39333,39335,39337,39339,39341,39343,39345,39347,39349],{"class":53,"line":3679},[51,39318,38978],{"class":72},[51,39320,31820],{"class":78},[51,39322,108],{"class":64},[51,39324,35834],{"class":175},[51,39326,82],{"class":72},[51,39328,31829],{"class":78},[51,39330,108],{"class":64},[51,39332,35834],{"class":175},[51,39334,82],{"class":72},[51,39336,31838],{"class":78},[51,39338,108],{"class":64},[51,39340,1328],{"class":175},[51,39342,82],{"class":72},[51,39344,31847],{"class":78},[51,39346,108],{"class":64},[51,39348,791],{"class":175},[51,39350,39011],{"class":72},[51,39352,39353],{"class":53,"line":3684},[51,39354,39016],{"class":72},[51,39356,39357,39359,39361,39363,39365,39367,39369,39371,39373,39375,39377,39379,39381],{"class":53,"line":3690},[51,39358,39061],{"class":72},[51,39360,31838],{"class":78},[51,39362,108],{"class":64},[51,39364,1334],{"class":175},[51,39366,82],{"class":72},[51,39368,31893],{"class":78},[51,39370,108],{"class":64},[51,39372,1334],{"class":175},[51,39374,82],{"class":72},[51,39376,31847],{"class":78},[51,39378,108],{"class":64},[51,39380,176],{"class":175},[51,39382,90],{"class":72},[51,39384,39385],{"class":53,"line":3696},[51,39386,39090],{"class":72},[51,39388,39389],{"class":53,"line":3701},[51,39390,39391],{"class":57},"        # 第四层\n",[51,39393,39394,39396,39399,39401],{"class":53,"line":8910},[51,39395,31809],{"class":175},[51,39397,39398],{"class":72},".block4",[51,39400,108],{"class":64},[51,39402,38973],{"class":72},[51,39404,39405,39407,39409,39411,39413,39415,39417,39419,39422,39424,39426,39428,39430,39432,39434,39436,39438],{"class":53,"line":8934},[51,39406,38978],{"class":72},[51,39408,31820],{"class":78},[51,39410,108],{"class":64},[51,39412,35834],{"class":175},[51,39414,82],{"class":72},[51,39416,31829],{"class":78},[51,39418,108],{"class":64},[51,39420,39421],{"class":175},"512",[51,39423,82],{"class":72},[51,39425,31838],{"class":78},[51,39427,108],{"class":64},[51,39429,1328],{"class":175},[51,39431,82],{"class":72},[51,39433,31847],{"class":78},[51,39435,108],{"class":64},[51,39437,791],{"class":175},[51,39439,39011],{"class":72},[51,39441,39442],{"class":53,"line":8939},[51,39443,39016],{"class":72},[51,39445,39446,39448,39450,39452,39454,39456,39458,39460,39462,39464,39466,39468,39470,39472,39474,39476,39478],{"class":53,"line":8945},[51,39447,38978],{"class":72},[51,39449,31820],{"class":78},[51,39451,108],{"class":64},[51,39453,39421],{"class":175},[51,39455,82],{"class":72},[51,39457,31829],{"class":78},[51,39459,108],{"class":64},[51,39461,39421],{"class":175},[51,39463,82],{"class":72},[51,39465,31838],{"class":78},[51,39467,108],{"class":64},[51,39469,1328],{"class":175},[51,39471,82],{"class":72},[51,39473,31847],{"class":78},[51,39475,108],{"class":64},[51,39477,791],{"class":175},[51,39479,39011],{"class":72},[51,39481,39482],{"class":53,"line":8972},[51,39483,39016],{"class":72},[51,39485,39486,39488,39490,39492,39494,39496,39498,39500,39502,39504,39506,39508,39510,39512,39514,39516,39518],{"class":53,"line":8977},[51,39487,38978],{"class":72},[51,39489,31820],{"class":78},[51,39491,108],{"class":64},[51,39493,39421],{"class":175},[51,39495,82],{"class":72},[51,39497,31829],{"class":78},[51,39499,108],{"class":64},[51,39501,39421],{"class":175},[51,39503,82],{"class":72},[51,39505,31838],{"class":78},[51,39507,108],{"class":64},[51,39509,1328],{"class":175},[51,39511,82],{"class":72},[51,39513,31847],{"class":78},[51,39515,108],{"class":64},[51,39517,791],{"class":175},[51,39519,39011],{"class":72},[51,39521,39522],{"class":53,"line":8983},[51,39523,39016],{"class":72},[51,39525,39526,39528,39530,39532,39534,39536,39538,39540,39542,39544,39546,39548,39550],{"class":53,"line":8995},[51,39527,39061],{"class":72},[51,39529,31838],{"class":78},[51,39531,108],{"class":64},[51,39533,1334],{"class":175},[51,39535,82],{"class":72},[51,39537,31893],{"class":78},[51,39539,108],{"class":64},[51,39541,1334],{"class":175},[51,39543,82],{"class":72},[51,39545,31847],{"class":78},[51,39547,108],{"class":64},[51,39549,176],{"class":175},[51,39551,90],{"class":72},[51,39553,39554],{"class":53,"line":9007},[51,39555,39090],{"class":72},[51,39557,39558],{"class":53,"line":9019},[51,39559,39560],{"class":57},"        # 第五层\n",[51,39562,39563,39565,39568,39570],{"class":53,"line":10678},[51,39564,31809],{"class":175},[51,39566,39567],{"class":72},".block5",[51,39569,108],{"class":64},[51,39571,38973],{"class":72},[51,39573,39574,39576,39578,39580,39582,39584,39586,39588,39590,39592,39594,39596,39598,39600,39602,39604,39606],{"class":53,"line":10703},[51,39575,38978],{"class":72},[51,39577,31820],{"class":78},[51,39579,108],{"class":64},[51,39581,39421],{"class":175},[51,39583,82],{"class":72},[51,39585,31829],{"class":78},[51,39587,108],{"class":64},[51,39589,39421],{"class":175},[51,39591,82],{"class":72},[51,39593,31838],{"class":78},[51,39595,108],{"class":64},[51,39597,1328],{"class":175},[51,39599,82],{"class":72},[51,39601,31847],{"class":78},[51,39603,108],{"class":64},[51,39605,791],{"class":175},[51,39607,39011],{"class":72},[51,39609,39610],{"class":53,"line":10726},[51,39611,39016],{"class":72},[51,39613,39614,39616,39618,39620,39622,39624,39626,39628,39630,39632,39634,39636,39638,39640,39642,39644,39646],{"class":53,"line":10750},[51,39615,38978],{"class":72},[51,39617,31820],{"class":78},[51,39619,108],{"class":64},[51,39621,39421],{"class":175},[51,39623,82],{"class":72},[51,39625,31829],{"class":78},[51,39627,108],{"class":64},[51,39629,39421],{"class":175},[51,39631,82],{"class":72},[51,39633,31838],{"class":78},[51,39635,108],{"class":64},[51,39637,1328],{"class":175},[51,39639,82],{"class":72},[51,39641,31847],{"class":78},[51,39643,108],{"class":64},[51,39645,791],{"class":175},[51,39647,39011],{"class":72},[51,39649,39650],{"class":53,"line":10755},[51,39651,39016],{"class":72},[51,39653,39654,39656,39658,39660,39662,39664,39666,39668,39670,39672,39674,39676,39678,39680,39682,39684,39686],{"class":53,"line":10760},[51,39655,38978],{"class":72},[51,39657,31820],{"class":78},[51,39659,108],{"class":64},[51,39661,39421],{"class":175},[51,39663,82],{"class":72},[51,39665,31829],{"class":78},[51,39667,108],{"class":64},[51,39669,39421],{"class":175},[51,39671,82],{"class":72},[51,39673,31838],{"class":78},[51,39675,108],{"class":64},[51,39677,1328],{"class":175},[51,39679,82],{"class":72},[51,39681,31847],{"class":78},[51,39683,108],{"class":64},[51,39685,791],{"class":175},[51,39687,39011],{"class":72},[51,39689,39690],{"class":53,"line":10765},[51,39691,39016],{"class":72},[51,39693,39694,39696,39698,39700,39702,39704,39706,39708,39710,39712,39714,39716,39718],{"class":53,"line":10774},[51,39695,39061],{"class":72},[51,39697,31838],{"class":78},[51,39699,108],{"class":64},[51,39701,1334],{"class":175},[51,39703,82],{"class":72},[51,39705,31893],{"class":78},[51,39707,108],{"class":64},[51,39709,1334],{"class":175},[51,39711,82],{"class":72},[51,39713,31847],{"class":78},[51,39715,108],{"class":64},[51,39717,176],{"class":175},[51,39719,90],{"class":72},[51,39721,39722],{"class":53,"line":10779},[51,39723,39090],{"class":72},[51,39725,39726],{"class":53,"line":10785},[51,39727,39728],{"class":57},"        # 全连接层\n",[51,39730,39731,39733,39736,39738],{"class":53,"line":10806},[51,39732,31809],{"class":175},[51,39734,39735],{"class":72},".block6",[51,39737,108],{"class":64},[51,39739,38973],{"class":72},[51,39741,39742],{"class":53,"line":10812},[51,39743,39744],{"class":57},"            # 平展操作\n",[51,39746,39747],{"class":53,"line":10826},[51,39748,39749],{"class":57},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[51,39751,39752],{"class":53,"line":10832},[51,39753,39754],{"class":72},"            nn.Flatten(),\n",[51,39756,39757,39760,39762,39764,39766,39768,39770,39772,39774],{"class":53,"line":10859},[51,39758,39759],{"class":72},"            nn.Linear(",[51,39761,1618],{"class":175},[51,39763,1702],{"class":64},[51,39765,1618],{"class":175},[51,39767,1702],{"class":64},[51,39769,39421],{"class":175},[51,39771,82],{"class":72},[51,39773,35834],{"class":175},[51,39775,39011],{"class":72},[51,39777,39778],{"class":53,"line":10868},[51,39779,39016],{"class":72},[51,39781,39782,39784,39786,39788,39790],{"class":53,"line":10874},[51,39783,39759],{"class":72},[51,39785,35834],{"class":175},[51,39787,82],{"class":72},[51,39789,33034],{"class":175},[51,39791,39011],{"class":72},[51,39793,39794],{"class":53,"line":10882},[51,39795,39016],{"class":72},[51,39797,39798,39800,39802,39804,39806],{"class":53,"line":10887},[51,39799,39759],{"class":72},[51,39801,33034],{"class":175},[51,39803,82],{"class":72},[51,39805,443],{"class":175},[51,39807,90],{"class":72},[51,39809,39810],{"class":53,"line":17566},[51,39811,39090],{"class":72},[51,39813,39814],{"class":53,"line":17572},[51,39815,3480],{"emptyLinePlaceholder":1192},[51,39817,39818],{"class":53,"line":17595},[51,39819,39820],{"class":57},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[51,39822,39823],{"class":53,"line":17601},[51,39824,39825],{"class":57},"        # 循环遍历模型\n",[51,39827,39828,39830,39833,39835,39838],{"class":53,"line":17624},[51,39829,4480],{"class":64},[51,39831,39832],{"class":72}," m ",[51,39834,27007],{"class":64},[51,39836,39837],{"class":175}," self",[51,39839,39840],{"class":72},".modules():\n",[51,39842,39843],{"class":53,"line":17638},[51,39844,39845],{"class":57},"            # print(m)\n",[51,39847,39848,39850,39853],{"class":53,"line":17658},[51,39849,5716],{"class":64},[51,39851,39852],{"class":175}," isinstance",[51,39854,39855],{"class":72},"(m,nn.Conv2d):\n",[51,39857,39858],{"class":53,"line":17664},[51,39859,39860],{"class":57},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[51,39862,39863,39866,39869,39871,39874],{"class":53,"line":17675},[51,39864,39865],{"class":72},"                nn.init.kaiming_normal_(m.weight,",[51,39867,39868],{"class":78},"nonlinearity",[51,39870,108],{"class":64},[51,39872,39873],{"class":282},"'relu'",[51,39875,90],{"class":72},[51,39877,39878],{"class":53,"line":17698},[51,39879,39880],{"class":57},"                # 判断b参数是否存在\n",[51,39882,39883,39886,39889,39892,39895,39898],{"class":53,"line":17720},[51,39884,39885],{"class":64},"                if",[51,39887,39888],{"class":72}," m.bias ",[51,39890,39891],{"class":64},"is",[51,39893,39894],{"class":64}," not",[51,39896,39897],{"class":175}," None",[51,39899,4816],{"class":72},[51,39901,39902],{"class":53,"line":17725},[51,39903,39904],{"class":57},"                    # 如果参数不存在的化初始化b=0\n",[51,39906,39907,39910,39912],{"class":53,"line":17731},[51,39908,39909],{"class":72},"                    nn.init.constant_(m.bias,",[51,39911,176],{"class":175},[51,39913,90],{"class":72},[51,39915,39916],{"class":53,"line":17745},[51,39917,39918],{"class":57},"            # 全连接层初始化\n",[51,39920,39921,39924,39926],{"class":53,"line":17758},[51,39922,39923],{"class":64},"            elif",[51,39925,39852],{"class":175},[51,39927,39928],{"class":72},"(m,nn.Linear):\n",[51,39930,39931],{"class":53,"line":17763},[51,39932,39933],{"class":57},"                # 这个初始化方法是利用的是正太分布的方式\n",[51,39935,39936],{"class":53,"line":17777},[51,39937,39938],{"class":57},"                # 均值为0，方差为0.01\n",[51,39940,39941,39944,39946,39948,39951],{"class":53,"line":17782},[51,39942,39943],{"class":72},"                nn.init.normal_(m.weight,",[51,39945,176],{"class":175},[51,39947,82],{"class":72},[51,39949,39950],{"class":175},"0.01",[51,39952,90],{"class":72},[51,39954,39955],{"class":53,"line":17788},[51,39956,39957],{"class":57},"                # 初始化b参数\n",[51,39959,39960,39962,39964,39966,39968,39970],{"class":53,"line":17793},[51,39961,39885],{"class":64},[51,39963,39888],{"class":72},[51,39965,39891],{"class":64},[51,39967,39894],{"class":64},[51,39969,39897],{"class":175},[51,39971,4816],{"class":72},[51,39973,39974,39976,39978],{"class":53,"line":17807},[51,39975,39909],{"class":72},[51,39977,176],{"class":175},[51,39979,90],{"class":72},[51,39981,39982],{"class":53,"line":17812},[51,39983,3480],{"emptyLinePlaceholder":1192},[51,39985,39986],{"class":53,"line":17817},[51,39987,36129],{"class":57},[51,39989,39990,39992,39994],{"class":53,"line":17831},[51,39991,31765],{"class":64},[51,39993,32057],{"class":68},[51,39995,32060],{"class":72},[51,39997,39998,40000,40002,40004],{"class":53,"line":17843},[51,39999,32065],{"class":72},[51,40001,108],{"class":64},[51,40003,31787],{"class":175},[51,40005,40006],{"class":72},".block1(x)\n",[51,40008,40009,40011,40013,40015],{"class":53,"line":17848},[51,40010,32065],{"class":72},[51,40012,108],{"class":64},[51,40014,31787],{"class":175},[51,40016,40017],{"class":72},".block2(x)\n",[51,40019,40020,40022,40024,40026],{"class":53,"line":17861},[51,40021,32065],{"class":72},[51,40023,108],{"class":64},[51,40025,31787],{"class":175},[51,40027,40028],{"class":72},".block3(x)\n",[51,40030,40031,40033,40035,40037],{"class":53,"line":17866},[51,40032,32065],{"class":72},[51,40034,108],{"class":64},[51,40036,31787],{"class":175},[51,40038,40039],{"class":72},".block4(x)\n",[51,40041,40042,40044,40046,40048],{"class":53,"line":17871},[51,40043,32065],{"class":72},[51,40045,108],{"class":64},[51,40047,31787],{"class":175},[51,40049,40050],{"class":72},".block5(x)\n",[51,40052,40053,40055,40057,40059],{"class":53,"line":17876},[51,40054,32065],{"class":72},[51,40056,108],{"class":64},[51,40058,31787],{"class":175},[51,40060,40061],{"class":72},".block6(x)\n",[51,40063,40064,40066],{"class":53,"line":17889},[51,40065,15714],{"class":64},[51,40067,32173],{"class":72},[51,40069,40070],{"class":53,"line":17894},[51,40071,3480],{"emptyLinePlaceholder":1192},[51,40073,40074],{"class":53,"line":33597},[51,40075,40076],{"class":57},"# 验证模型\n",[51,40078,40079,40081,40083,40085,40088],{"class":53,"line":33603},[51,40080,2633],{"class":64},[51,40082,32184],{"class":175},[51,40084,4026],{"class":64},[51,40086,40087],{"class":282},"'__main__'",[51,40089,4816],{"class":72},[51,40091,40092,40094,40096,40098,40100,40102,40104,40106,40108],{"class":53,"line":33609},[51,40093,32201],{"class":72},[51,40095,108],{"class":64},[51,40097,31415],{"class":72},[51,40099,32208],{"class":282},[51,40101,2794],{"class":64},[51,40103,32213],{"class":72},[51,40105,2791],{"class":64},[51,40107,31440],{"class":282},[51,40109,90],{"class":72},[51,40111,40112,40114],{"class":53,"line":33615},[51,40113,32263],{"class":175},[51,40115,31449],{"class":72},[51,40117,40118,40120,40122],{"class":53,"line":33621},[51,40119,32253],{"class":72},[51,40121,108],{"class":64},[51,40123,40124],{"class":72},"VGG16().to(device)\n",[51,40126,40127,40129,40131,40133,40135,40137,40139,40141],{"class":53,"line":33632},[51,40128,32263],{"class":175},[51,40130,32266],{"class":72},[51,40132,791],{"class":175},[51,40134,82],{"class":72},[51,40136,32465],{"class":175},[51,40138,82],{"class":72},[51,40140,32465],{"class":175},[51,40142,32279],{"class":72},[19,40144,40145],{"start":61},[22,40146,40147],{},"训练代码",[40,40149,40150],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[40,40152,40153],{},"解决方式:",[40,40155,40156],{},"①权重初始化",[29,40158,40160],{"className":31342,"code":40159,"language":31344,"meta":35,"style":35},"# 权重初始化,保证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",[37,40161,40162,40167,40172,40184,40189,40197,40202,40215,40220,40234,40239,40248,40253,40262,40267,40272,40285,40290,40304],{"__ignoreMap":35},[51,40163,40164],{"class":53,"line":54},[51,40165,40166],{"class":57},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[51,40168,40169],{"class":53,"line":61},[51,40170,40171],{"class":57},"# 循环遍历模型\n",[51,40173,40174,40176,40178,40180,40182],{"class":53,"line":93},[51,40175,4102],{"class":64},[51,40177,39832],{"class":72},[51,40179,27007],{"class":64},[51,40181,39837],{"class":175},[51,40183,39840],{"class":72},[51,40185,40186],{"class":53,"line":99},[51,40187,40188],{"class":57},"    # print(m)\n",[51,40190,40191,40193,40195],{"class":53,"line":120},[51,40192,4178],{"class":64},[51,40194,39852],{"class":175},[51,40196,39855],{"class":72},[51,40198,40199],{"class":53,"line":129},[51,40200,40201],{"class":57},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[51,40203,40204,40207,40209,40211,40213],{"class":53,"line":206},[51,40205,40206],{"class":72},"        nn.init.kaiming_normal_(m.weight,",[51,40208,39868],{"class":78},[51,40210,108],{"class":64},[51,40212,39873],{"class":282},[51,40214,90],{"class":72},[51,40216,40217],{"class":53,"line":212},[51,40218,40219],{"class":57},"        # 判断b参数是否存在\n",[51,40221,40222,40224,40226,40228,40230,40232],{"class":53,"line":227},[51,40223,3577],{"class":64},[51,40225,39888],{"class":72},[51,40227,39891],{"class":64},[51,40229,39894],{"class":64},[51,40231,39897],{"class":175},[51,40233,4816],{"class":72},[51,40235,40236],{"class":53,"line":370},[51,40237,40238],{"class":57},"            # 如果参数不存在的化初始化b=0\n",[51,40240,40241,40244,40246],{"class":53,"line":387},[51,40242,40243],{"class":72},"            nn.init.constant_(m.bias,",[51,40245,176],{"class":175},[51,40247,90],{"class":72},[51,40249,40250],{"class":53,"line":404},[51,40251,40252],{"class":57},"    # 全连接层初始化\n",[51,40254,40255,40258,40260],{"class":53,"line":415},[51,40256,40257],{"class":64},"    elif",[51,40259,39852],{"class":175},[51,40261,39928],{"class":72},[51,40263,40264],{"class":53,"line":420},[51,40265,40266],{"class":57},"        # 这个初始化方法是利用的是正太分布的方式\n",[51,40268,40269],{"class":53,"line":429},[51,40270,40271],{"class":57},"        # 均值为0，方差为0.01\n",[51,40273,40274,40277,40279,40281,40283],{"class":53,"line":434},[51,40275,40276],{"class":72},"        nn.init.normal_(m.weight,",[51,40278,176],{"class":175},[51,40280,82],{"class":72},[51,40282,39950],{"class":175},[51,40284,90],{"class":72},[51,40286,40287],{"class":53,"line":448},[51,40288,40289],{"class":57},"        # 初始化b参数\n",[51,40291,40292,40294,40296,40298,40300,40302],{"class":53,"line":462},[51,40293,3577],{"class":64},[51,40295,39888],{"class":72},[51,40297,39891],{"class":64},[51,40299,39894],{"class":64},[51,40301,39897],{"class":175},[51,40303,4816],{"class":72},[51,40305,40306,40308,40310],{"class":53,"line":470},[51,40307,40243],{"class":72},[51,40309,176],{"class":175},[51,40311,90],{"class":72},[40,40313,40314],{},"②尽可能地增加批次",[40,40316,40317],{},"训练完整代码：",[29,40319,40320],{"className":31342,"code":38863,"language":31344,"meta":35,"style":35},[37,40321,40322,40328,40338,40348,40358,40362,40378,40386,40404,40408,40412,40422,40458,40462,40498,40502,40530,40534,40538,40548,40584,40588,40624,40628,40656,40660,40664,40674,40710,40714,40750,40754,40790,40794,40822,40826,40830,40840,40876,40880,40916,40920,40956,40960,40988,40992,40996,41006,41042,41046,41082,41086,41122,41126,41154,41158,41162,41172,41176,41180,41184,41204,41208,41220,41224,41236,41240,41244,41248,41252,41264,41268,41276,41280,41292,41296,41310,41314,41322,41326,41334,41338,41342,41354,41358,41372,41380,41384,41388,41396,41406,41416,41426,41436,41446,41456,41462,41466,41470,41482,41502,41508,41516],{"__ignoreMap":35},[51,40323,40324,40326],{"class":53,"line":54},[51,40325,31356],{"class":64},[51,40327,31359],{"class":72},[51,40329,40330,40332,40334,40336],{"class":53,"line":61},[51,40331,31701],{"class":64},[51,40333,38878],{"class":72},[51,40335,31356],{"class":64},[51,40337,38883],{"class":72},[51,40339,40340,40342,40344,40346],{"class":53,"line":93},[51,40341,31701],{"class":64},[51,40343,31704],{"class":72},[51,40345,31356],{"class":64},[51,40347,31709],{"class":72},[51,40349,40350,40352,40354,40356],{"class":53,"line":99},[51,40351,31701],{"class":64},[51,40353,31721],{"class":72},[51,40355,31356],{"class":64},[51,40357,31726],{"class":72},[51,40359,40360],{"class":53,"line":120},[51,40361,3480],{"emptyLinePlaceholder":1192},[51,40363,40364,40366,40368,40370,40372,40374,40376],{"class":53,"line":129},[51,40365,15656],{"class":64},[51,40367,38914],{"class":68},[51,40369,73],{"class":72},[51,40371,31742],{"class":68},[51,40373,1804],{"class":72},[51,40375,31747],{"class":68},[51,40377,31750],{"class":72},[51,40379,40380,40382,40384],{"class":53,"line":206},[51,40381,31765],{"class":64},[51,40383,31768],{"class":175},[51,40385,31771],{"class":72},[51,40387,40388,40390,40392,40394,40396,40398,40400,40402],{"class":53,"line":212},[51,40389,31781],{"class":175},[51,40391,73],{"class":72},[51,40393,38941],{"class":175},[51,40395,13397],{"class":72},[51,40397,31787],{"class":175},[51,40399,31790],{"class":72},[51,40401,31793],{"class":175},[51,40403,154],{"class":72},[51,40405,40406],{"class":53,"line":227},[51,40407,38956],{"class":57},[51,40409,40410],{"class":53,"line":370},[51,40411,38961],{"class":57},[51,40413,40414,40416,40418,40420],{"class":53,"line":387},[51,40415,31809],{"class":175},[51,40417,38968],{"class":72},[51,40419,108],{"class":64},[51,40421,38973],{"class":72},[51,40423,40424,40426,40428,40430,40432,40434,40436,40438,40440,40442,40444,40446,40448,40450,40452,40454,40456],{"class":53,"line":404},[51,40425,38978],{"class":72},[51,40427,31820],{"class":78},[51,40429,108],{"class":64},[51,40431,791],{"class":175},[51,40433,82],{"class":72},[51,40435,31829],{"class":78},[51,40437,108],{"class":64},[51,40439,1457],{"class":175},[51,40441,82],{"class":72},[51,40443,31838],{"class":78},[51,40445,108],{"class":64},[51,40447,1328],{"class":175},[51,40449,82],{"class":72},[51,40451,31847],{"class":78},[51,40453,108],{"class":64},[51,40455,791],{"class":175},[51,40457,39011],{"class":72},[51,40459,40460],{"class":53,"line":415},[51,40461,39016],{"class":72},[51,40463,40464,40466,40468,40470,40472,40474,40476,40478,40480,40482,40484,40486,40488,40490,40492,40494,40496],{"class":53,"line":420},[51,40465,38978],{"class":72},[51,40467,31820],{"class":78},[51,40469,108],{"class":64},[51,40471,1457],{"class":175},[51,40473,82],{"class":72},[51,40475,31829],{"class":78},[51,40477,108],{"class":64},[51,40479,1457],{"class":175},[51,40481,82],{"class":72},[51,40483,31838],{"class":78},[51,40485,108],{"class":64},[51,40487,1328],{"class":175},[51,40489,82],{"class":72},[51,40491,31847],{"class":78},[51,40493,108],{"class":64},[51,40495,791],{"class":175},[51,40497,39011],{"class":72},[51,40499,40500],{"class":53,"line":429},[51,40501,39016],{"class":72},[51,40503,40504,40506,40508,40510,40512,40514,40516,40518,40520,40522,40524,40526,40528],{"class":53,"line":434},[51,40505,39061],{"class":72},[51,40507,31838],{"class":78},[51,40509,108],{"class":64},[51,40511,1334],{"class":175},[51,40513,82],{"class":72},[51,40515,31893],{"class":78},[51,40517,108],{"class":64},[51,40519,1334],{"class":175},[51,40521,82],{"class":72},[51,40523,31847],{"class":78},[51,40525,108],{"class":64},[51,40527,176],{"class":175},[51,40529,90],{"class":72},[51,40531,40532],{"class":53,"line":448},[51,40533,39090],{"class":72},[51,40535,40536],{"class":53,"line":462},[51,40537,39095],{"class":57},[51,40539,40540,40542,40544,40546],{"class":53,"line":470},[51,40541,31809],{"class":175},[51,40543,39102],{"class":72},[51,40545,108],{"class":64},[51,40547,38973],{"class":72},[51,40549,40550,40552,40554,40556,40558,40560,40562,40564,40566,40568,40570,40572,40574,40576,40578,40580,40582],{"class":53,"line":2783},[51,40551,38978],{"class":72},[51,40553,31820],{"class":78},[51,40555,108],{"class":64},[51,40557,1457],{"class":175},[51,40559,82],{"class":72},[51,40561,31829],{"class":78},[51,40563,108],{"class":64},[51,40565,33034],{"class":175},[51,40567,82],{"class":72},[51,40569,31838],{"class":78},[51,40571,108],{"class":64},[51,40573,1328],{"class":175},[51,40575,82],{"class":72},[51,40577,31847],{"class":78},[51,40579,108],{"class":64},[51,40581,791],{"class":175},[51,40583,39011],{"class":72},[51,40585,40586],{"class":53,"line":2788},[51,40587,39016],{"class":72},[51,40589,40590,40592,40594,40596,40598,40600,40602,40604,40606,40608,40610,40612,40614,40616,40618,40620,40622],{"class":53,"line":2817},[51,40591,38978],{"class":72},[51,40593,31820],{"class":78},[51,40595,108],{"class":64},[51,40597,33034],{"class":175},[51,40599,82],{"class":72},[51,40601,31829],{"class":78},[51,40603,108],{"class":64},[51,40605,33034],{"class":175},[51,40607,82],{"class":72},[51,40609,31838],{"class":78},[51,40611,108],{"class":64},[51,40613,1328],{"class":175},[51,40615,82],{"class":72},[51,40617,31847],{"class":78},[51,40619,108],{"class":64},[51,40621,791],{"class":175},[51,40623,39011],{"class":72},[51,40625,40626],{"class":53,"line":2822},[51,40627,39016],{"class":72},[51,40629,40630,40632,40634,40636,40638,40640,40642,40644,40646,40648,40650,40652,40654],{"class":53,"line":2839},[51,40631,39061],{"class":72},[51,40633,31838],{"class":78},[51,40635,108],{"class":64},[51,40637,1334],{"class":175},[51,40639,82],{"class":72},[51,40641,31893],{"class":78},[51,40643,108],{"class":64},[51,40645,1334],{"class":175},[51,40647,82],{"class":72},[51,40649,31847],{"class":78},[51,40651,108],{"class":64},[51,40653,176],{"class":175},[51,40655,90],{"class":72},[51,40657,40658],{"class":53,"line":2844},[51,40659,39090],{"class":72},[51,40661,40662],{"class":53,"line":2849},[51,40663,39223],{"class":57},[51,40665,40666,40668,40670,40672],{"class":53,"line":2854},[51,40667,31809],{"class":175},[51,40669,39230],{"class":72},[51,40671,108],{"class":64},[51,40673,38973],{"class":72},[51,40675,40676,40678,40680,40682,40684,40686,40688,40690,40692,40694,40696,40698,40700,40702,40704,40706,40708],{"class":53,"line":2868},[51,40677,38978],{"class":72},[51,40679,31820],{"class":78},[51,40681,108],{"class":64},[51,40683,33034],{"class":175},[51,40685,82],{"class":72},[51,40687,31829],{"class":78},[51,40689,108],{"class":64},[51,40691,35834],{"class":175},[51,40693,82],{"class":72},[51,40695,31838],{"class":78},[51,40697,108],{"class":64},[51,40699,1328],{"class":175},[51,40701,82],{"class":72},[51,40703,31847],{"class":78},[51,40705,108],{"class":64},[51,40707,791],{"class":175},[51,40709,39011],{"class":72},[51,40711,40712],{"class":53,"line":2873},[51,40713,39016],{"class":72},[51,40715,40716,40718,40720,40722,40724,40726,40728,40730,40732,40734,40736,40738,40740,40742,40744,40746,40748],{"class":53,"line":3657},[51,40717,38978],{"class":72},[51,40719,31820],{"class":78},[51,40721,108],{"class":64},[51,40723,35834],{"class":175},[51,40725,82],{"class":72},[51,40727,31829],{"class":78},[51,40729,108],{"class":64},[51,40731,35834],{"class":175},[51,40733,82],{"class":72},[51,40735,31838],{"class":78},[51,40737,108],{"class":64},[51,40739,1328],{"class":175},[51,40741,82],{"class":72},[51,40743,31847],{"class":78},[51,40745,108],{"class":64},[51,40747,791],{"class":175},[51,40749,39011],{"class":72},[51,40751,40752],{"class":53,"line":3671},[51,40753,39016],{"class":72},[51,40755,40756,40758,40760,40762,40764,40766,40768,40770,40772,40774,40776,40778,40780,40782,40784,40786,40788],{"class":53,"line":3679},[51,40757,38978],{"class":72},[51,40759,31820],{"class":78},[51,40761,108],{"class":64},[51,40763,35834],{"class":175},[51,40765,82],{"class":72},[51,40767,31829],{"class":78},[51,40769,108],{"class":64},[51,40771,35834],{"class":175},[51,40773,82],{"class":72},[51,40775,31838],{"class":78},[51,40777,108],{"class":64},[51,40779,1328],{"class":175},[51,40781,82],{"class":72},[51,40783,31847],{"class":78},[51,40785,108],{"class":64},[51,40787,791],{"class":175},[51,40789,39011],{"class":72},[51,40791,40792],{"class":53,"line":3684},[51,40793,39016],{"class":72},[51,40795,40796,40798,40800,40802,40804,40806,40808,40810,40812,40814,40816,40818,40820],{"class":53,"line":3690},[51,40797,39061],{"class":72},[51,40799,31838],{"class":78},[51,40801,108],{"class":64},[51,40803,1334],{"class":175},[51,40805,82],{"class":72},[51,40807,31893],{"class":78},[51,40809,108],{"class":64},[51,40811,1334],{"class":175},[51,40813,82],{"class":72},[51,40815,31847],{"class":78},[51,40817,108],{"class":64},[51,40819,176],{"class":175},[51,40821,90],{"class":72},[51,40823,40824],{"class":53,"line":3696},[51,40825,39090],{"class":72},[51,40827,40828],{"class":53,"line":3701},[51,40829,39391],{"class":57},[51,40831,40832,40834,40836,40838],{"class":53,"line":8910},[51,40833,31809],{"class":175},[51,40835,39398],{"class":72},[51,40837,108],{"class":64},[51,40839,38973],{"class":72},[51,40841,40842,40844,40846,40848,40850,40852,40854,40856,40858,40860,40862,40864,40866,40868,40870,40872,40874],{"class":53,"line":8934},[51,40843,38978],{"class":72},[51,40845,31820],{"class":78},[51,40847,108],{"class":64},[51,40849,35834],{"class":175},[51,40851,82],{"class":72},[51,40853,31829],{"class":78},[51,40855,108],{"class":64},[51,40857,39421],{"class":175},[51,40859,82],{"class":72},[51,40861,31838],{"class":78},[51,40863,108],{"class":64},[51,40865,1328],{"class":175},[51,40867,82],{"class":72},[51,40869,31847],{"class":78},[51,40871,108],{"class":64},[51,40873,791],{"class":175},[51,40875,39011],{"class":72},[51,40877,40878],{"class":53,"line":8939},[51,40879,39016],{"class":72},[51,40881,40882,40884,40886,40888,40890,40892,40894,40896,40898,40900,40902,40904,40906,40908,40910,40912,40914],{"class":53,"line":8945},[51,40883,38978],{"class":72},[51,40885,31820],{"class":78},[51,40887,108],{"class":64},[51,40889,39421],{"class":175},[51,40891,82],{"class":72},[51,40893,31829],{"class":78},[51,40895,108],{"class":64},[51,40897,39421],{"class":175},[51,40899,82],{"class":72},[51,40901,31838],{"class":78},[51,40903,108],{"class":64},[51,40905,1328],{"class":175},[51,40907,82],{"class":72},[51,40909,31847],{"class":78},[51,40911,108],{"class":64},[51,40913,791],{"class":175},[51,40915,39011],{"class":72},[51,40917,40918],{"class":53,"line":8972},[51,40919,39016],{"class":72},[51,40921,40922,40924,40926,40928,40930,40932,40934,40936,40938,40940,40942,40944,40946,40948,40950,40952,40954],{"class":53,"line":8977},[51,40923,38978],{"class":72},[51,40925,31820],{"class":78},[51,40927,108],{"class":64},[51,40929,39421],{"class":175},[51,40931,82],{"class":72},[51,40933,31829],{"class":78},[51,40935,108],{"class":64},[51,40937,39421],{"class":175},[51,40939,82],{"class":72},[51,40941,31838],{"class":78},[51,40943,108],{"class":64},[51,40945,1328],{"class":175},[51,40947,82],{"class":72},[51,40949,31847],{"class":78},[51,40951,108],{"class":64},[51,40953,791],{"class":175},[51,40955,39011],{"class":72},[51,40957,40958],{"class":53,"line":8983},[51,40959,39016],{"class":72},[51,40961,40962,40964,40966,40968,40970,40972,40974,40976,40978,40980,40982,40984,40986],{"class":53,"line":8995},[51,40963,39061],{"class":72},[51,40965,31838],{"class":78},[51,40967,108],{"class":64},[51,40969,1334],{"class":175},[51,40971,82],{"class":72},[51,40973,31893],{"class":78},[51,40975,108],{"class":64},[51,40977,1334],{"class":175},[51,40979,82],{"class":72},[51,40981,31847],{"class":78},[51,40983,108],{"class":64},[51,40985,176],{"class":175},[51,40987,90],{"class":72},[51,40989,40990],{"class":53,"line":9007},[51,40991,39090],{"class":72},[51,40993,40994],{"class":53,"line":9019},[51,40995,39560],{"class":57},[51,40997,40998,41000,41002,41004],{"class":53,"line":10678},[51,40999,31809],{"class":175},[51,41001,39567],{"class":72},[51,41003,108],{"class":64},[51,41005,38973],{"class":72},[51,41007,41008,41010,41012,41014,41016,41018,41020,41022,41024,41026,41028,41030,41032,41034,41036,41038,41040],{"class":53,"line":10703},[51,41009,38978],{"class":72},[51,41011,31820],{"class":78},[51,41013,108],{"class":64},[51,41015,39421],{"class":175},[51,41017,82],{"class":72},[51,41019,31829],{"class":78},[51,41021,108],{"class":64},[51,41023,39421],{"class":175},[51,41025,82],{"class":72},[51,41027,31838],{"class":78},[51,41029,108],{"class":64},[51,41031,1328],{"class":175},[51,41033,82],{"class":72},[51,41035,31847],{"class":78},[51,41037,108],{"class":64},[51,41039,791],{"class":175},[51,41041,39011],{"class":72},[51,41043,41044],{"class":53,"line":10726},[51,41045,39016],{"class":72},[51,41047,41048,41050,41052,41054,41056,41058,41060,41062,41064,41066,41068,41070,41072,41074,41076,41078,41080],{"class":53,"line":10750},[51,41049,38978],{"class":72},[51,41051,31820],{"class":78},[51,41053,108],{"class":64},[51,41055,39421],{"class":175},[51,41057,82],{"class":72},[51,41059,31829],{"class":78},[51,41061,108],{"class":64},[51,41063,39421],{"class":175},[51,41065,82],{"class":72},[51,41067,31838],{"class":78},[51,41069,108],{"class":64},[51,41071,1328],{"class":175},[51,41073,82],{"class":72},[51,41075,31847],{"class":78},[51,41077,108],{"class":64},[51,41079,791],{"class":175},[51,41081,39011],{"class":72},[51,41083,41084],{"class":53,"line":10755},[51,41085,39016],{"class":72},[51,41087,41088,41090,41092,41094,41096,41098,41100,41102,41104,41106,41108,41110,41112,41114,41116,41118,41120],{"class":53,"line":10760},[51,41089,38978],{"class":72},[51,41091,31820],{"class":78},[51,41093,108],{"class":64},[51,41095,39421],{"class":175},[51,41097,82],{"class":72},[51,41099,31829],{"class":78},[51,41101,108],{"class":64},[51,41103,39421],{"class":175},[51,41105,82],{"class":72},[51,41107,31838],{"class":78},[51,41109,108],{"class":64},[51,41111,1328],{"class":175},[51,41113,82],{"class":72},[51,41115,31847],{"class":78},[51,41117,108],{"class":64},[51,41119,791],{"class":175},[51,41121,39011],{"class":72},[51,41123,41124],{"class":53,"line":10765},[51,41125,39016],{"class":72},[51,41127,41128,41130,41132,41134,41136,41138,41140,41142,41144,41146,41148,41150,41152],{"class":53,"line":10774},[51,41129,39061],{"class":72},[51,41131,31838],{"class":78},[51,41133,108],{"class":64},[51,41135,1334],{"class":175},[51,41137,82],{"class":72},[51,41139,31893],{"class":78},[51,41141,108],{"class":64},[51,41143,1334],{"class":175},[51,41145,82],{"class":72},[51,41147,31847],{"class":78},[51,41149,108],{"class":64},[51,41151,176],{"class":175},[51,41153,90],{"class":72},[51,41155,41156],{"class":53,"line":10779},[51,41157,39090],{"class":72},[51,41159,41160],{"class":53,"line":10785},[51,41161,39728],{"class":57},[51,41163,41164,41166,41168,41170],{"class":53,"line":10806},[51,41165,31809],{"class":175},[51,41167,39735],{"class":72},[51,41169,108],{"class":64},[51,41171,38973],{"class":72},[51,41173,41174],{"class":53,"line":10812},[51,41175,39744],{"class":57},[51,41177,41178],{"class":53,"line":10826},[51,41179,39749],{"class":57},[51,41181,41182],{"class":53,"line":10832},[51,41183,39754],{"class":72},[51,41185,41186,41188,41190,41192,41194,41196,41198,41200,41202],{"class":53,"line":10859},[51,41187,39759],{"class":72},[51,41189,1618],{"class":175},[51,41191,1702],{"class":64},[51,41193,1618],{"class":175},[51,41195,1702],{"class":64},[51,41197,39421],{"class":175},[51,41199,82],{"class":72},[51,41201,35834],{"class":175},[51,41203,39011],{"class":72},[51,41205,41206],{"class":53,"line":10868},[51,41207,39016],{"class":72},[51,41209,41210,41212,41214,41216,41218],{"class":53,"line":10874},[51,41211,39759],{"class":72},[51,41213,35834],{"class":175},[51,41215,82],{"class":72},[51,41217,33034],{"class":175},[51,41219,39011],{"class":72},[51,41221,41222],{"class":53,"line":10882},[51,41223,39016],{"class":72},[51,41225,41226,41228,41230,41232,41234],{"class":53,"line":10887},[51,41227,39759],{"class":72},[51,41229,33034],{"class":175},[51,41231,82],{"class":72},[51,41233,443],{"class":175},[51,41235,90],{"class":72},[51,41237,41238],{"class":53,"line":17566},[51,41239,39090],{"class":72},[51,41241,41242],{"class":53,"line":17572},[51,41243,3480],{"emptyLinePlaceholder":1192},[51,41245,41246],{"class":53,"line":17595},[51,41247,39820],{"class":57},[51,41249,41250],{"class":53,"line":17601},[51,41251,39825],{"class":57},[51,41253,41254,41256,41258,41260,41262],{"class":53,"line":17624},[51,41255,4480],{"class":64},[51,41257,39832],{"class":72},[51,41259,27007],{"class":64},[51,41261,39837],{"class":175},[51,41263,39840],{"class":72},[51,41265,41266],{"class":53,"line":17638},[51,41267,39845],{"class":57},[51,41269,41270,41272,41274],{"class":53,"line":17658},[51,41271,5716],{"class":64},[51,41273,39852],{"class":175},[51,41275,39855],{"class":72},[51,41277,41278],{"class":53,"line":17664},[51,41279,39860],{"class":57},[51,41281,41282,41284,41286,41288,41290],{"class":53,"line":17675},[51,41283,39865],{"class":72},[51,41285,39868],{"class":78},[51,41287,108],{"class":64},[51,41289,39873],{"class":282},[51,41291,90],{"class":72},[51,41293,41294],{"class":53,"line":17698},[51,41295,39880],{"class":57},[51,41297,41298,41300,41302,41304,41306,41308],{"class":53,"line":17720},[51,41299,39885],{"class":64},[51,41301,39888],{"class":72},[51,41303,39891],{"class":64},[51,41305,39894],{"class":64},[51,41307,39897],{"class":175},[51,41309,4816],{"class":72},[51,41311,41312],{"class":53,"line":17725},[51,41313,39904],{"class":57},[51,41315,41316,41318,41320],{"class":53,"line":17731},[51,41317,39909],{"class":72},[51,41319,176],{"class":175},[51,41321,90],{"class":72},[51,41323,41324],{"class":53,"line":17745},[51,41325,39918],{"class":57},[51,41327,41328,41330,41332],{"class":53,"line":17758},[51,41329,39923],{"class":64},[51,41331,39852],{"class":175},[51,41333,39928],{"class":72},[51,41335,41336],{"class":53,"line":17763},[51,41337,39933],{"class":57},[51,41339,41340],{"class":53,"line":17777},[51,41341,39938],{"class":57},[51,41343,41344,41346,41348,41350,41352],{"class":53,"line":17782},[51,41345,39943],{"class":72},[51,41347,176],{"class":175},[51,41349,82],{"class":72},[51,41351,39950],{"class":175},[51,41353,90],{"class":72},[51,41355,41356],{"class":53,"line":17788},[51,41357,39957],{"class":57},[51,41359,41360,41362,41364,41366,41368,41370],{"class":53,"line":17793},[51,41361,39885],{"class":64},[51,41363,39888],{"class":72},[51,41365,39891],{"class":64},[51,41367,39894],{"class":64},[51,41369,39897],{"class":175},[51,41371,4816],{"class":72},[51,41373,41374,41376,41378],{"class":53,"line":17807},[51,41375,39909],{"class":72},[51,41377,176],{"class":175},[51,41379,90],{"class":72},[51,41381,41382],{"class":53,"line":17812},[51,41383,3480],{"emptyLinePlaceholder":1192},[51,41385,41386],{"class":53,"line":17817},[51,41387,36129],{"class":57},[51,41389,41390,41392,41394],{"class":53,"line":17831},[51,41391,31765],{"class":64},[51,41393,32057],{"class":68},[51,41395,32060],{"class":72},[51,41397,41398,41400,41402,41404],{"class":53,"line":17843},[51,41399,32065],{"class":72},[51,41401,108],{"class":64},[51,41403,31787],{"class":175},[51,41405,40006],{"class":72},[51,41407,41408,41410,41412,41414],{"class":53,"line":17848},[51,41409,32065],{"class":72},[51,41411,108],{"class":64},[51,41413,31787],{"class":175},[51,41415,40017],{"class":72},[51,41417,41418,41420,41422,41424],{"class":53,"line":17861},[51,41419,32065],{"class":72},[51,41421,108],{"class":64},[51,41423,31787],{"class":175},[51,41425,40028],{"class":72},[51,41427,41428,41430,41432,41434],{"class":53,"line":17866},[51,41429,32065],{"class":72},[51,41431,108],{"class":64},[51,41433,31787],{"class":175},[51,41435,40039],{"class":72},[51,41437,41438,41440,41442,41444],{"class":53,"line":17871},[51,41439,32065],{"class":72},[51,41441,108],{"class":64},[51,41443,31787],{"class":175},[51,41445,40050],{"class":72},[51,41447,41448,41450,41452,41454],{"class":53,"line":17876},[51,41449,32065],{"class":72},[51,41451,108],{"class":64},[51,41453,31787],{"class":175},[51,41455,40061],{"class":72},[51,41457,41458,41460],{"class":53,"line":17889},[51,41459,15714],{"class":64},[51,41461,32173],{"class":72},[51,41463,41464],{"class":53,"line":17894},[51,41465,3480],{"emptyLinePlaceholder":1192},[51,41467,41468],{"class":53,"line":33597},[51,41469,40076],{"class":57},[51,41471,41472,41474,41476,41478,41480],{"class":53,"line":33603},[51,41473,2633],{"class":64},[51,41475,32184],{"class":175},[51,41477,4026],{"class":64},[51,41479,40087],{"class":282},[51,41481,4816],{"class":72},[51,41483,41484,41486,41488,41490,41492,41494,41496,41498,41500],{"class":53,"line":33609},[51,41485,32201],{"class":72},[51,41487,108],{"class":64},[51,41489,31415],{"class":72},[51,41491,32208],{"class":282},[51,41493,2794],{"class":64},[51,41495,32213],{"class":72},[51,41497,2791],{"class":64},[51,41499,31440],{"class":282},[51,41501,90],{"class":72},[51,41503,41504,41506],{"class":53,"line":33615},[51,41505,32263],{"class":175},[51,41507,31449],{"class":72},[51,41509,41510,41512,41514],{"class":53,"line":33621},[51,41511,32253],{"class":72},[51,41513,108],{"class":64},[51,41515,40124],{"class":72},[51,41517,41518,41520,41522,41524,41526,41528,41530,41532],{"class":53,"line":33632},[51,41519,32263],{"class":175},[51,41521,32266],{"class":72},[51,41523,791],{"class":175},[51,41525,82],{"class":72},[51,41527,32465],{"class":175},[51,41529,82],{"class":72},[51,41531,32465],{"class":175},[51,41533,32279],{"class":72},[19,41535,41536],{"start":93},[22,41537,41538],{},"测试代码",[29,41540,41542],{"className":31342,"code":41541,"language":31344,"meta":35,"style":35},"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",[37,41543,41544,41550,41560,41570,41574,41584,41595,41599,41603,41607,41615,41631,41641,41657,41667,41681,41685,41695,41705,41715,41721,41725,41729,41737,41741,41757,41765,41769,41773,41781,41789,41793,41797,41801,41805,41811,41815,41825,41833,41841,41845,41849,41853,41861,41865,41881,41885,41889,41893,41905,41909,41921,41925,41929,41941,41945,41955,41959,41963,41975,41979,41988,41992,41996,42004,42008,42016,42020,42024,42028,42032,42036,42052,42060,42064,42068,42116,42122,42126,42136,42144,42152,42156,42160,42164,42168,42176,42180,42196,42200,42208,42216],{"__ignoreMap":35},[51,41545,41546,41548],{"class":53,"line":54},[51,41547,31356],{"class":64},[51,41549,31359],{"class":72},[51,41551,41552,41554,41556,41558],{"class":53,"line":61},[51,41553,31356],{"class":64},[51,41555,32379],{"class":72},[51,41557,32347],{"class":64},[51,41559,32384],{"class":72},[51,41561,41562,41564,41566,41568],{"class":53,"line":93},[51,41563,31701],{"class":64},[51,41565,32362],{"class":72},[51,41567,31356],{"class":64},[51,41569,32367],{"class":72},[51,41571,41572],{"class":53,"line":99},[51,41573,34886],{"class":57},[51,41575,41576,41578,41580,41582],{"class":53,"line":120},[51,41577,31701],{"class":64},[51,41579,32332],{"class":72},[51,41581,31356],{"class":64},[51,41583,32337],{"class":72},[51,41585,41586,41588,41590,41592],{"class":53,"line":129},[51,41587,31701],{"class":64},[51,41589,32878],{"class":72},[51,41591,31356],{"class":64},[51,41593,41594],{"class":175}," VGG16\n",[51,41596,41597],{"class":53,"line":206},[51,41598,3480],{"emptyLinePlaceholder":1192},[51,41600,41601],{"class":53,"line":212},[51,41602,3480],{"emptyLinePlaceholder":1192},[51,41604,41605],{"class":53,"line":227},[51,41606,34915],{"class":57},[51,41608,41609,41611,41613],{"class":53,"line":370},[51,41610,32911],{"class":64},[51,41612,34922],{"class":68},[51,41614,32917],{"class":72},[51,41616,41617,41619,41621,41623,41625,41627,41629],{"class":53,"line":387},[51,41618,34929],{"class":72},[51,41620,108],{"class":64},[51,41622,32419],{"class":72},[51,41624,32422],{"class":78},[51,41626,108],{"class":64},[51,41628,32427],{"class":282},[51,41630,32430],{"class":72},[51,41632,41633,41635,41637,41639],{"class":53,"line":404},[51,41634,34946],{"class":78},[51,41636,108],{"class":64},[51,41638,34951],{"class":175},[51,41640,32430],{"class":72},[51,41642,41643,41645,41647,41649,41651,41653,41655],{"class":53,"line":415},[51,41644,34958],{"class":78},[51,41646,108],{"class":64},[51,41648,32457],{"class":72},[51,41650,32460],{"class":78},[51,41652,108],{"class":64},[51,41654,32465],{"class":175},[51,41656,32468],{"class":72},[51,41658,41659,41661,41663,41665],{"class":53,"line":420},[51,41660,34975],{"class":78},[51,41662,108],{"class":64},[51,41664,32440],{"class":175},[51,41666,90],{"class":72},[51,41668,41669,41671,41673,41675,41677,41679],{"class":53,"line":429},[51,41670,34986],{"class":72},[51,41672,108],{"class":64},[51,41674,32498],{"class":72},[51,41676,32501],{"class":78},[51,41678,108],{"class":64},[51,41680,34997],{"class":72},[51,41682,41683],{"class":53,"line":434},[51,41684,35002],{"class":57},[51,41686,41687,41689,41691,41693],{"class":53,"line":448},[51,41688,35007],{"class":78},[51,41690,108],{"class":64},[51,41692,791],{"class":175},[51,41694,32430],{"class":72},[51,41696,41697,41699,41701,41703],{"class":53,"line":462},[51,41698,35018],{"class":78},[51,41700,108],{"class":64},[51,41702,32440],{"class":175},[51,41704,32430],{"class":72},[51,41706,41707,41709,41711,41713],{"class":53,"line":470},[51,41708,35029],{"class":78},[51,41710,108],{"class":64},[51,41712,176],{"class":175},[51,41714,90],{"class":72},[51,41716,41717,41719],{"class":53,"line":2783},[51,41718,123],{"class":64},[51,41720,35042],{"class":72},[51,41722,41723],{"class":53,"line":2788},[51,41724,3480],{"emptyLinePlaceholder":1192},[51,41726,41727],{"class":53,"line":2817},[51,41728,35051],{"class":57},[51,41730,41731,41733,41735],{"class":53,"line":2822},[51,41732,32911],{"class":64},[51,41734,35058],{"class":68},[51,41736,35061],{"class":72},[51,41738,41739],{"class":53,"line":2839},[51,41740,35066],{"class":57},[51,41742,41743,41745,41747,41749,41751,41753,41755],{"class":53,"line":2844},[51,41744,32201],{"class":72},[51,41746,108],{"class":64},[51,41748,32208],{"class":282},[51,41750,2794],{"class":64},[51,41752,32213],{"class":72},[51,41754,2791],{"class":64},[51,41756,35083],{"class":282},[51,41758,41759,41761,41763],{"class":53,"line":2849},[51,41760,32253],{"class":72},[51,41762,108],{"class":64},[51,41764,33253],{"class":72},[51,41766,41767],{"class":53,"line":2854},[51,41768,3480],{"emptyLinePlaceholder":1192},[51,41770,41771],{"class":53,"line":2868},[51,41772,35100],{"class":57},[51,41774,41775,41777,41779],{"class":53,"line":2873},[51,41776,35105],{"class":72},[51,41778,108],{"class":64},[51,41780,33306],{"class":175},[51,41782,41783,41785,41787],{"class":53,"line":3657},[51,41784,35114],{"class":72},[51,41786,108],{"class":64},[51,41788,4162],{"class":175},[51,41790,41791],{"class":53,"line":3671},[51,41792,3480],{"emptyLinePlaceholder":1192},[51,41794,41795],{"class":53,"line":3679},[51,41796,35127],{"class":57},[51,41798,41799],{"class":53,"line":3684},[51,41800,35132],{"class":57},[51,41802,41803],{"class":53,"line":3690},[51,41804,35137],{"class":57},[51,41806,41807,41809],{"class":53,"line":3696},[51,41808,35142],{"class":64},[51,41810,33848],{"class":72},[51,41812,41813],{"class":53,"line":3701},[51,41814,35149],{"class":57},[51,41816,41817,41819,41821,41823],{"class":53,"line":8910},[51,41818,4480],{"class":64},[51,41820,35156],{"class":72},[51,41822,27007],{"class":64},[51,41824,35161],{"class":72},[51,41826,41827,41829,41831],{"class":53,"line":8934},[51,41828,35166],{"class":72},[51,41830,108],{"class":64},[51,41832,35171],{"class":72},[51,41834,41835,41837,41839],{"class":53,"line":8939},[51,41836,35176],{"class":72},[51,41838,108],{"class":64},[51,41840,35181],{"class":72},[51,41842,41843],{"class":53,"line":8945},[51,41844,35186],{"class":57},[51,41846,41847],{"class":53,"line":8972},[51,41848,33839],{"class":72},[51,41850,41851],{"class":53,"line":8977},[51,41852,35195],{"class":57},[51,41854,41855,41857,41859],{"class":53,"line":8983},[51,41856,33624],{"class":72},[51,41858,108],{"class":64},[51,41860,35204],{"class":72},[51,41862,41863],{"class":53,"line":8995},[51,41864,35209],{"class":57},[51,41866,41867,41869,41871,41873,41875,41877,41879],{"class":53,"line":9007},[51,41868,33641],{"class":72},[51,41870,108],{"class":64},[51,41872,33646],{"class":72},[51,41874,33649],{"class":78},[51,41876,108],{"class":64},[51,41878,791],{"class":175},[51,41880,90],{"class":72},[51,41882,41883],{"class":53,"line":9019},[51,41884,35230],{"class":57},[51,41886,41887],{"class":53,"line":10678},[51,41888,35235],{"class":57},[51,41890,41891],{"class":53,"line":10703},[51,41892,35240],{"class":57},[51,41894,41895,41897,41899,41901,41903],{"class":53,"line":10726},[51,41896,35245],{"class":72},[51,41898,10439],{"class":64},[51,41900,33751],{"class":72},[51,41902,4026],{"class":64},[51,41904,35254],{"class":72},[51,41906,41907],{"class":53,"line":10750},[51,41908,35259],{"class":57},[51,41910,41911,41913,41915,41917,41919],{"class":53,"line":10755},[51,41912,35264],{"class":72},[51,41914,10439],{"class":64},[51,41916,35269],{"class":72},[51,41918,176],{"class":175},[51,41920,90],{"class":72},[51,41922,41923],{"class":53,"line":10760},[51,41924,3480],{"emptyLinePlaceholder":1192},[51,41926,41927],{"class":53,"line":10765},[51,41928,35282],{"class":57},[51,41930,41931,41933,41935,41937,41939],{"class":53,"line":10774},[51,41932,35287],{"class":72},[51,41934,108],{"class":64},[51,41936,35292],{"class":72},[51,41938,1830],{"class":64},[51,41940,35297],{"class":72},[51,41942,41943],{"class":53,"line":10779},[51,41944,35302],{"class":57},[51,41946,41947,41949,41951,41953],{"class":53,"line":10785},[51,41948,33415],{"class":175},[51,41950,73],{"class":72},[51,41952,35311],{"class":282},[51,41954,35314],{"class":72},[51,41956,41957],{"class":53,"line":10806},[51,41958,3480],{"emptyLinePlaceholder":1192},[51,41960,41961],{"class":53,"line":10812},[51,41962,35323],{"class":57},[51,41964,41965,41967,41969,41971,41973],{"class":53,"line":10826},[51,41966,2633],{"class":64},[51,41968,32184],{"class":175},[51,41970,4026],{"class":64},[51,41972,32189],{"class":282},[51,41974,4816],{"class":72},[51,41976,41977],{"class":53,"line":10832},[51,41978,35340],{"class":57},[51,41980,41981,41983,41985],{"class":53,"line":10859},[51,41982,32253],{"class":72},[51,41984,108],{"class":64},[51,41986,41987],{"class":72},"VGG16()\n",[51,41989,41990],{"class":53,"line":10868},[51,41991,35353],{"class":57},[51,41993,41994],{"class":53,"line":10874},[51,41995,35358],{"class":57},[51,41997,41998,42000,42002],{"class":53,"line":10882},[51,41999,35363],{"class":72},[51,42001,35366],{"class":282},[51,42003,31461],{"class":72},[51,42005,42006],{"class":53,"line":10887},[51,42007,35373],{"class":57},[51,42009,42010,42012,42014],{"class":53,"line":17566},[51,42011,34986],{"class":72},[51,42013,108],{"class":64},[51,42015,35382],{"class":72},[51,42017,42018],{"class":53,"line":17572},[51,42019,35387],{"class":57},[51,42021,42022],{"class":53,"line":17595},[51,42023,35392],{"class":72},[51,42025,42026],{"class":53,"line":17601},[51,42027,3480],{"emptyLinePlaceholder":1192},[51,42029,42030],{"class":53,"line":17624},[51,42031,35401],{"class":57},[51,42033,42034],{"class":53,"line":17638},[51,42035,35406],{"class":57},[51,42037,42038,42040,42042,42044,42046,42048,42050],{"class":53,"line":17658},[51,42039,32201],{"class":72},[51,42041,108],{"class":64},[51,42043,32208],{"class":282},[51,42045,2794],{"class":64},[51,42047,32213],{"class":72},[51,42049,2791],{"class":64},[51,42051,35083],{"class":282},[51,42053,42054,42056,42058],{"class":53,"line":17664},[51,42055,32253],{"class":72},[51,42057,108],{"class":64},[51,42059,33253],{"class":72},[51,42061,42062],{"class":53,"line":17675},[51,42063,35435],{"class":57},[51,42065,42066],{"class":53,"line":17698},[51,42067,35440],{"class":57},[51,42069,42070,42072,42074,42076,42078,42080,42082,42084,42086,42088,42090,42092,42094,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114],{"class":53,"line":17720},[51,42071,35445],{"class":72},[51,42073,108],{"class":64},[51,42075,2134],{"class":72},[51,42077,35452],{"class":282},[51,42079,82],{"class":72},[51,42081,35457],{"class":282},[51,42083,82],{"class":72},[51,42085,35462],{"class":282},[51,42087,82],{"class":72},[51,42089,35467],{"class":282},[51,42091,82],{"class":72},[51,42093,35472],{"class":282},[51,42095,82],{"class":72},[51,42097,35477],{"class":282},[51,42099,82],{"class":72},[51,42101,35482],{"class":282},[51,42103,82],{"class":72},[51,42105,35487],{"class":282},[51,42107,82],{"class":72},[51,42109,35492],{"class":282},[51,42111,82],{"class":72},[51,42113,35497],{"class":282},[51,42115,34210],{"class":72},[51,42117,42118,42120],{"class":53,"line":17725},[51,42119,35142],{"class":64},[51,42121,33848],{"class":72},[51,42123,42124],{"class":53,"line":17731},[51,42125,35510],{"class":57},[51,42127,42128,42130,42132,42134],{"class":53,"line":17745},[51,42129,4480],{"class":64},[51,42131,35517],{"class":72},[51,42133,27007],{"class":64},[51,42135,35161],{"class":72},[51,42137,42138,42140,42142],{"class":53,"line":17758},[51,42139,33574],{"class":72},[51,42141,108],{"class":64},[51,42143,33579],{"class":72},[51,42145,42146,42148,42150],{"class":53,"line":17763},[51,42147,33589],{"class":72},[51,42149,108],{"class":64},[51,42151,33594],{"class":72},[51,42153,42154],{"class":53,"line":17777},[51,42155,3480],{"emptyLinePlaceholder":1192},[51,42157,42158],{"class":53,"line":17782},[51,42159,35546],{"class":57},[51,42161,42162],{"class":53,"line":17788},[51,42163,33839],{"class":72},[51,42165,42166],{"class":53,"line":17793},[51,42167,35555],{"class":57},[51,42169,42170,42172,42174],{"class":53,"line":17807},[51,42171,33624],{"class":72},[51,42173,108],{"class":64},[51,42175,33629],{"class":72},[51,42177,42178],{"class":53,"line":17812},[51,42179,35568],{"class":57},[51,42181,42182,42184,42186,42188,42190,42192,42194],{"class":53,"line":17817},[51,42183,33641],{"class":72},[51,42185,108],{"class":64},[51,42187,33646],{"class":72},[51,42189,33649],{"class":78},[51,42191,108],{"class":64},[51,42193,791],{"class":175},[51,42195,90],{"class":72},[51,42197,42198],{"class":53,"line":17831},[51,42199,35589],{"class":57},[51,42201,42202,42204,42206],{"class":53,"line":17843},[51,42203,35594],{"class":72},[51,42205,108],{"class":64},[51,42207,35599],{"class":72},[51,42209,42210,42212,42214],{"class":53,"line":17848},[51,42211,35604],{"class":72},[51,42213,108],{"class":64},[51,42215,35609],{"class":72},[51,42217,42218,42220,42222,42224,42226,42228,42230,42232],{"class":53,"line":17861},[51,42219,35614],{"class":175},[51,42221,73],{"class":72},[51,42223,35619],{"class":282},[51,42225,35622],{"class":72},[51,42227,35625],{"class":282},[51,42229,82],{"class":72},[51,42231,35630],{"class":282},[51,42233,35633],{"class":72},[1233,42235,42237],{"id":42236},"_23googlenet","2.3.GoogLeNet",[22960,42239,42241],{"id":42240},"_231原理","2.3.1.原理",[19,42243,42244],{},[22,42245,42246],{},"网络结构",[40,42248,42249],{},[2564,42250],{"alt":35,"src":42251},"\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",[40,42253,42254],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[40,42256,42257],{},[2564,42258],{"alt":35,"src":42259},"\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",[40,42261,42262],{},[2564,42263],{"alt":35,"src":42264},"\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",[40,42266,42267],{},[2564,42268],{"alt":35,"src":42269},"\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",[19,42271,42272],{"start":61},[22,42273,42274],{},"1x1卷积的优点",[40,42276,42277],{},[2564,42278],{"alt":35,"src":42279},"\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",[19,42281,42282],{"start":93},[22,42283,42284],{},"全局平均池化层优点",[40,42286,42287],{},[2564,42288],{"alt":35,"src":42289},"\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",[40,42291,42292],{},[2564,42293],{"alt":35,"src":42294},"\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",[19,42296,42297],{"start":99},[22,42298,42299],{},"参数详细描述",[40,42301,42302],{},[2564,42303],{"alt":35,"src":42304},"\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",[40,42306,42307],{},[2564,42308],{"alt":35,"src":42309},"\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",[40,42311,42312],{},[2564,42313],{"alt":35,"src":42314},"\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",[40,42316,42317],{},[2564,42318],{"alt":35,"src":42319},"\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",[40,42321,42322],{},[2564,42323],{"alt":35,"src":42324},"\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",[40,42326,42327],{},[2564,42328],{"alt":35,"src":42329},"\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",[40,42331,42332],{},[2564,42333],{"alt":35,"src":42334},"\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",[40,42336,42337],{},[2564,42338],{"alt":35,"src":42339},"\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",[40,42341,42342],{},[2564,42343],{"alt":35,"src":42344},"\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",[40,42346,42347],{},[2564,42348],{"alt":35,"src":42349},"\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",[40,42351,42352],{},[2564,42353],{"alt":35,"src":42354},"\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",[40,42356,42357],{},[2564,42358],{"alt":35,"src":42359},"\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",[40,42361,42362],{},[2564,42363],{"alt":35,"src":42364},"\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",[40,42366,42367],{},[2564,42368],{"alt":35,"src":42369},"\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",[40,42371,42372],{},[2564,42373],{"alt":35,"src":42374},"\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",[40,42376,42377],{},[2564,42378],{"alt":35,"src":42379},"\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",[40,42381,42382],{},[2564,42383],{"alt":35,"src":42384},"\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",[40,42386,42387],{},[2564,42388],{"alt":35,"src":42389},"\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",[40,42391,42392],{},[2564,42393],{"alt":35,"src":42394},"\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",[40,42396,42397],{},[2564,42398],{"alt":35,"src":42399},"\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",[40,42401,42402],{},[2564,42403],{"alt":35,"src":42404},"\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",[22960,42406,42408],{"id":42407},"_232代码实现","2.3.2.代码实现",[19,42410,42411],{},[22,42412,31675],{},[40,42414,42415],{},"根据原理一步一步搭建即可",[29,42417,42419],{"className":31342,"code":42418,"language":31344,"meta":35,"style":35},"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",[37,42420,42421,42427,42437,42447,42451,42468,42477,42492,42502,42507,42540,42545,42582,42629,42634,42670,42717,42722,42727,42762,42794,42798,42806,42822,42846,42871,42892,42897,42912,42916,42920,42925,42942,42947,42956,42971,42982,43026,43030,43058,43062,43073,43101,43105,43142,43146,43174,43178,43189,43225,43257,43285,43289,43300,43334,43366,43398,43431,43465,43493,43497,43508,43541,43573,43587,43591,43604,43608,43613,43625,43633,43655,43660,43665,43670,43675,43680,43685,43699,43707,43716,43729,43744,43753,43757,43765,43776,43787,43798,43809,43820,43826,43830,43835,43847,43867,43876],{"__ignoreMap":35},[51,42422,42423,42425],{"class":53,"line":54},[51,42424,31356],{"class":64},[51,42426,31359],{"class":72},[51,42428,42429,42431,42433,42435],{"class":53,"line":61},[51,42430,31701],{"class":64},[51,42432,31704],{"class":72},[51,42434,31356],{"class":64},[51,42436,31709],{"class":72},[51,42438,42439,42441,42443,42445],{"class":53,"line":93},[51,42440,31701],{"class":64},[51,42442,31721],{"class":72},[51,42444,31356],{"class":64},[51,42446,31726],{"class":72},[51,42448,42449],{"class":53,"line":99},[51,42450,3480],{"emptyLinePlaceholder":1192},[51,42452,42453,42455,42458,42460,42462,42464,42466],{"class":53,"line":120},[51,42454,15656],{"class":64},[51,42456,42457],{"class":68}," Inception",[51,42459,73],{"class":72},[51,42461,31742],{"class":68},[51,42463,1804],{"class":72},[51,42465,31747],{"class":68},[51,42467,31750],{"class":72},[51,42469,42470,42472,42474],{"class":53,"line":129},[51,42471,31765],{"class":64},[51,42473,31768],{"class":175},[51,42475,42476],{"class":72},"(self,in_channels,c1,c2,c3,c4):\n",[51,42478,42479,42481,42484,42486,42488,42490],{"class":53,"line":206},[51,42480,31781],{"class":175},[51,42482,42483],{"class":72},"(Inception,",[51,42485,31787],{"class":175},[51,42487,31790],{"class":72},[51,42489,31793],{"class":175},[51,42491,154],{"class":72},[51,42493,42494,42496,42498,42500],{"class":53,"line":212},[51,42495,31809],{"class":175},[51,42497,35735],{"class":72},[51,42499,108],{"class":64},[51,42501,35740],{"class":72},[51,42503,42504],{"class":53,"line":227},[51,42505,42506],{"class":57},"        # 路线1：定义1*1卷积\n",[51,42508,42509,42511,42514,42516,42518,42520,42522,42525,42527,42529,42532,42534,42536,42538],{"class":53,"line":370},[51,42510,31809],{"class":175},[51,42512,42513],{"class":72},".p1_1",[51,42515,108],{"class":64},[51,42517,31817],{"class":72},[51,42519,31820],{"class":78},[51,42521,108],{"class":64},[51,42523,42524],{"class":72},"in_channels,",[51,42526,31829],{"class":78},[51,42528,108],{"class":64},[51,42530,42531],{"class":72},"c1,",[51,42533,31838],{"class":78},[51,42535,108],{"class":64},[51,42537,791],{"class":175},[51,42539,90],{"class":72},[51,42541,42542],{"class":53,"line":387},[51,42543,42544],{"class":57},"        # 路线2：定义1*1卷积和3*3\n",[51,42546,42547,42549,42552,42554,42556,42558,42560,42562,42564,42566,42569,42571,42574,42576,42578,42580],{"class":53,"line":404},[51,42548,31809],{"class":175},[51,42550,42551],{"class":72},".p2_1",[51,42553,108],{"class":64},[51,42555,31817],{"class":72},[51,42557,31820],{"class":78},[51,42559,108],{"class":64},[51,42561,42524],{"class":72},[51,42563,31829],{"class":78},[51,42565,108],{"class":64},[51,42567,42568],{"class":72},"c2[",[51,42570,176],{"class":175},[51,42572,42573],{"class":72},"],",[51,42575,31838],{"class":78},[51,42577,108],{"class":64},[51,42579,791],{"class":175},[51,42581,90],{"class":72},[51,42583,42584,42586,42589,42591,42593,42595,42597,42599,42601,42603,42605,42607,42609,42611,42613,42615,42617,42619,42621,42623,42625,42627],{"class":53,"line":415},[51,42585,31809],{"class":175},[51,42587,42588],{"class":72},".p2_2",[51,42590,108],{"class":64},[51,42592,31817],{"class":72},[51,42594,31820],{"class":78},[51,42596,108],{"class":64},[51,42598,42568],{"class":72},[51,42600,176],{"class":175},[51,42602,42573],{"class":72},[51,42604,31829],{"class":78},[51,42606,108],{"class":64},[51,42608,42568],{"class":72},[51,42610,791],{"class":175},[51,42612,42573],{"class":72},[51,42614,31838],{"class":78},[51,42616,108],{"class":64},[51,42618,1328],{"class":175},[51,42620,82],{"class":72},[51,42622,31847],{"class":78},[51,42624,108],{"class":64},[51,42626,791],{"class":175},[51,42628,90],{"class":72},[51,42630,42631],{"class":53,"line":420},[51,42632,42633],{"class":57},"        # 路线3：定义1*1卷积和5*5\n",[51,42635,42636,42638,42641,42643,42645,42647,42649,42651,42653,42655,42658,42660,42662,42664,42666,42668],{"class":53,"line":429},[51,42637,31809],{"class":175},[51,42639,42640],{"class":72},".p3_1",[51,42642,108],{"class":64},[51,42644,31817],{"class":72},[51,42646,31820],{"class":78},[51,42648,108],{"class":64},[51,42650,42524],{"class":72},[51,42652,31829],{"class":78},[51,42654,108],{"class":64},[51,42656,42657],{"class":72},"c3[",[51,42659,176],{"class":175},[51,42661,42573],{"class":72},[51,42663,31838],{"class":78},[51,42665,108],{"class":64},[51,42667,791],{"class":175},[51,42669,90],{"class":72},[51,42671,42672,42674,42677,42679,42681,42683,42685,42687,42689,42691,42693,42695,42697,42699,42701,42703,42705,42707,42709,42711,42713,42715],{"class":53,"line":434},[51,42673,31809],{"class":175},[51,42675,42676],{"class":72},".p3_2",[51,42678,108],{"class":64},[51,42680,31817],{"class":72},[51,42682,31820],{"class":78},[51,42684,108],{"class":64},[51,42686,42657],{"class":72},[51,42688,176],{"class":175},[51,42690,42573],{"class":72},[51,42692,31829],{"class":78},[51,42694,108],{"class":64},[51,42696,42657],{"class":72},[51,42698,791],{"class":175},[51,42700,42573],{"class":72},[51,42702,31838],{"class":78},[51,42704,108],{"class":64},[51,42706,1568],{"class":175},[51,42708,82],{"class":72},[51,42710,31847],{"class":78},[51,42712,108],{"class":64},[51,42714,1334],{"class":175},[51,42716,90],{"class":72},[51,42718,42719],{"class":53,"line":448},[51,42720,42721],{"class":57},"        # 路线4：定义3*3最大池化和1*1卷积\n",[51,42723,42724],{"class":53,"line":462},[51,42725,42726],{"class":57},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[51,42728,42729,42731,42734,42736,42738,42740,42742,42744,42746,42748,42750,42752,42754,42756,42758,42760],{"class":53,"line":470},[51,42730,31809],{"class":175},[51,42732,42733],{"class":72},".p4_1",[51,42735,108],{"class":64},[51,42737,35793],{"class":72},[51,42739,31838],{"class":78},[51,42741,108],{"class":64},[51,42743,1328],{"class":175},[51,42745,82],{"class":72},[51,42747,31893],{"class":78},[51,42749,108],{"class":64},[51,42751,791],{"class":175},[51,42753,82],{"class":72},[51,42755,31847],{"class":78},[51,42757,108],{"class":64},[51,42759,791],{"class":175},[51,42761,90],{"class":72},[51,42763,42764,42766,42769,42771,42773,42775,42777,42779,42781,42783,42786,42788,42790,42792],{"class":53,"line":2783},[51,42765,31809],{"class":175},[51,42767,42768],{"class":72},".p4_2",[51,42770,108],{"class":64},[51,42772,31817],{"class":72},[51,42774,31820],{"class":78},[51,42776,108],{"class":64},[51,42778,42524],{"class":72},[51,42780,31829],{"class":78},[51,42782,108],{"class":64},[51,42784,42785],{"class":72},"c4,",[51,42787,31838],{"class":78},[51,42789,108],{"class":64},[51,42791,791],{"class":175},[51,42793,90],{"class":72},[51,42795,42796],{"class":53,"line":2788},[51,42797,3480],{"emptyLinePlaceholder":1192},[51,42799,42800,42802,42804],{"class":53,"line":2817},[51,42801,31765],{"class":64},[51,42803,32057],{"class":68},[51,42805,32060],{"class":72},[51,42807,42808,42811,42813,42815,42817,42819],{"class":53,"line":2822},[51,42809,42810],{"class":72},"        p1",[51,42812,108],{"class":64},[51,42814,31787],{"class":175},[51,42816,36148],{"class":72},[51,42818,31787],{"class":175},[51,42820,42821],{"class":72},".p1_1(x))\n",[51,42823,42824,42826,42828,42830,42832,42834,42837,42839,42841,42843],{"class":53,"line":2839},[51,42825,8047],{"class":72},[51,42827,108],{"class":64},[51,42829,31787],{"class":175},[51,42831,36148],{"class":72},[51,42833,31787],{"class":175},[51,42835,42836],{"class":72},".p2_2(",[51,42838,31787],{"class":175},[51,42840,36148],{"class":72},[51,42842,31787],{"class":175},[51,42844,42845],{"class":72},".p2_1(x))))\n",[51,42847,42848,42851,42853,42855,42857,42859,42862,42864,42866,42868],{"class":53,"line":2844},[51,42849,42850],{"class":72},"        p3",[51,42852,108],{"class":64},[51,42854,31787],{"class":175},[51,42856,36148],{"class":72},[51,42858,31787],{"class":175},[51,42860,42861],{"class":72},".p3_2(",[51,42863,31787],{"class":175},[51,42865,36148],{"class":72},[51,42867,31787],{"class":175},[51,42869,42870],{"class":72},".p3_1(x))))\n",[51,42872,42873,42876,42878,42880,42882,42884,42887,42889],{"class":53,"line":2849},[51,42874,42875],{"class":72},"        p4",[51,42877,108],{"class":64},[51,42879,31787],{"class":175},[51,42881,36148],{"class":72},[51,42883,31787],{"class":175},[51,42885,42886],{"class":72},".p4_2(",[51,42888,31787],{"class":175},[51,42890,42891],{"class":72},".p4_1(x)))\n",[51,42893,42894],{"class":53,"line":2854},[51,42895,42896],{"class":57},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[51,42898,42899,42901,42904,42906,42908,42910],{"class":53,"line":2868},[51,42900,15714],{"class":64},[51,42902,42903],{"class":72}," torch.cat((p1,p2,p3,p4),",[51,42905,33649],{"class":78},[51,42907,108],{"class":64},[51,42909,791],{"class":175},[51,42911,90],{"class":72},[51,42913,42914],{"class":53,"line":2873},[51,42915,3480],{"emptyLinePlaceholder":1192},[51,42917,42918],{"class":53,"line":3657},[51,42919,3480],{"emptyLinePlaceholder":1192},[51,42921,42922],{"class":53,"line":3671},[51,42923,42924],{"class":57},"# 搭建GoogLeNet网络\n",[51,42926,42927,42929,42932,42934,42936,42938,42940],{"class":53,"line":3679},[51,42928,15656],{"class":64},[51,42930,42931],{"class":68}," GoogLeNet",[51,42933,73],{"class":72},[51,42935,31742],{"class":68},[51,42937,1804],{"class":72},[51,42939,31747],{"class":68},[51,42941,31750],{"class":72},[51,42943,42944],{"class":53,"line":3684},[51,42945,42946],{"class":57},"    # 必须把Inception导入到里边\n",[51,42948,42949,42951,42953],{"class":53,"line":3690},[51,42950,31765],{"class":64},[51,42952,31768],{"class":175},[51,42954,42955],{"class":72},"(self,Inception):\n",[51,42957,42958,42960,42963,42965,42967,42969],{"class":53,"line":3696},[51,42959,31781],{"class":175},[51,42961,42962],{"class":72},"(GoogLeNet,",[51,42964,31787],{"class":175},[51,42966,31790],{"class":72},[51,42968,31793],{"class":175},[51,42970,154],{"class":72},[51,42972,42973,42975,42978,42980],{"class":53,"line":3701},[51,42974,31809],{"class":175},[51,42976,42977],{"class":72},".b1",[51,42979,108],{"class":64},[51,42981,38973],{"class":72},[51,42983,42984,42986,42988,42990,42992,42994,42996,42998,43000,43002,43004,43006,43008,43010,43012,43014,43016,43018,43020,43022,43024],{"class":53,"line":8910},[51,42985,38978],{"class":72},[51,42987,31820],{"class":78},[51,42989,108],{"class":64},[51,42991,791],{"class":175},[51,42993,82],{"class":72},[51,42995,31829],{"class":78},[51,42997,108],{"class":64},[51,42999,1457],{"class":175},[51,43001,82],{"class":72},[51,43003,31838],{"class":78},[51,43005,108],{"class":64},[51,43007,1618],{"class":175},[51,43009,82],{"class":72},[51,43011,31893],{"class":78},[51,43013,108],{"class":64},[51,43015,1334],{"class":175},[51,43017,82],{"class":72},[51,43019,31847],{"class":78},[51,43021,108],{"class":64},[51,43023,1328],{"class":175},[51,43025,39011],{"class":72},[51,43027,43028],{"class":53,"line":8934},[51,43029,39016],{"class":72},[51,43031,43032,43034,43036,43038,43040,43042,43044,43046,43048,43050,43052,43054,43056],{"class":53,"line":8939},[51,43033,39061],{"class":72},[51,43035,31838],{"class":78},[51,43037,108],{"class":64},[51,43039,1328],{"class":175},[51,43041,82],{"class":72},[51,43043,31893],{"class":78},[51,43045,108],{"class":64},[51,43047,1334],{"class":175},[51,43049,82],{"class":72},[51,43051,31847],{"class":78},[51,43053,108],{"class":64},[51,43055,791],{"class":175},[51,43057,90],{"class":72},[51,43059,43060],{"class":53,"line":8945},[51,43061,39090],{"class":72},[51,43063,43064,43066,43069,43071],{"class":53,"line":8972},[51,43065,31809],{"class":175},[51,43067,43068],{"class":72},".b2",[51,43070,108],{"class":64},[51,43072,38973],{"class":72},[51,43074,43075,43077,43079,43081,43083,43085,43087,43089,43091,43093,43095,43097,43099],{"class":53,"line":8977},[51,43076,38978],{"class":72},[51,43078,31820],{"class":78},[51,43080,108],{"class":64},[51,43082,1457],{"class":175},[51,43084,82],{"class":72},[51,43086,31829],{"class":78},[51,43088,108],{"class":64},[51,43090,1457],{"class":175},[51,43092,82],{"class":72},[51,43094,31838],{"class":78},[51,43096,108],{"class":64},[51,43098,791],{"class":175},[51,43100,39011],{"class":72},[51,43102,43103],{"class":53,"line":8983},[51,43104,39016],{"class":72},[51,43106,43107,43109,43111,43113,43115,43117,43119,43121,43124,43126,43128,43130,43132,43134,43136,43138,43140],{"class":53,"line":8995},[51,43108,38978],{"class":72},[51,43110,31820],{"class":78},[51,43112,108],{"class":64},[51,43114,1457],{"class":175},[51,43116,82],{"class":72},[51,43118,31829],{"class":78},[51,43120,108],{"class":64},[51,43122,43123],{"class":175},"192",[51,43125,82],{"class":72},[51,43127,31838],{"class":78},[51,43129,108],{"class":64},[51,43131,1328],{"class":175},[51,43133,82],{"class":72},[51,43135,31847],{"class":78},[51,43137,108],{"class":64},[51,43139,791],{"class":175},[51,43141,39011],{"class":72},[51,43143,43144],{"class":53,"line":9007},[51,43145,39016],{"class":72},[51,43147,43148,43150,43152,43154,43156,43158,43160,43162,43164,43166,43168,43170,43172],{"class":53,"line":9019},[51,43149,39061],{"class":72},[51,43151,31838],{"class":78},[51,43153,108],{"class":64},[51,43155,1328],{"class":175},[51,43157,82],{"class":72},[51,43159,31893],{"class":78},[51,43161,108],{"class":64},[51,43163,1334],{"class":175},[51,43165,82],{"class":72},[51,43167,31847],{"class":78},[51,43169,108],{"class":64},[51,43171,791],{"class":175},[51,43173,90],{"class":72},[51,43175,43176],{"class":53,"line":10678},[51,43177,39090],{"class":72},[51,43179,43180,43182,43185,43187],{"class":53,"line":10703},[51,43181,31809],{"class":175},[51,43183,43184],{"class":72},".b3",[51,43186,108],{"class":64},[51,43188,38973],{"class":72},[51,43190,43191,43194,43196,43198,43200,43203,43205,43207,43209,43212,43214,43216,43218,43221,43223],{"class":53,"line":10726},[51,43192,43193],{"class":72},"            Inception(",[51,43195,43123],{"class":175},[51,43197,82],{"class":72},[51,43199,1457],{"class":175},[51,43201,43202],{"class":72},",(",[51,43204,1463],{"class":175},[51,43206,82],{"class":72},[51,43208,33034],{"class":175},[51,43210,43211],{"class":72},"),(",[51,43213,1847],{"class":175},[51,43215,82],{"class":72},[51,43217,1451],{"class":175},[51,43219,43220],{"class":72},"),",[51,43222,1451],{"class":175},[51,43224,39011],{"class":72},[51,43226,43227,43229,43231,43233,43235,43237,43239,43241,43243,43245,43247,43249,43251,43253,43255],{"class":53,"line":10750},[51,43228,43193],{"class":72},[51,43230,35834],{"class":175},[51,43232,82],{"class":72},[51,43234,33034],{"class":175},[51,43236,43202],{"class":72},[51,43238,33034],{"class":175},[51,43240,82],{"class":72},[51,43242,43123],{"class":175},[51,43244,43211],{"class":72},[51,43246,1451],{"class":175},[51,43248,82],{"class":72},[51,43250,1463],{"class":175},[51,43252,43220],{"class":72},[51,43254,1457],{"class":175},[51,43256,39011],{"class":72},[51,43258,43259,43261,43263,43265,43267,43269,43271,43273,43275,43277,43279,43281,43283],{"class":53,"line":10755},[51,43260,39061],{"class":72},[51,43262,31838],{"class":78},[51,43264,108],{"class":64},[51,43266,1328],{"class":175},[51,43268,82],{"class":72},[51,43270,31893],{"class":78},[51,43272,108],{"class":64},[51,43274,1334],{"class":175},[51,43276,82],{"class":72},[51,43278,31847],{"class":78},[51,43280,108],{"class":64},[51,43282,791],{"class":175},[51,43284,90],{"class":72},[51,43286,43287],{"class":53,"line":10760},[51,43288,39090],{"class":72},[51,43290,43291,43293,43296,43298],{"class":53,"line":10765},[51,43292,31809],{"class":175},[51,43294,43295],{"class":72},".b4",[51,43297,108],{"class":64},[51,43299,38973],{"class":72},[51,43301,43302,43304,43307,43309,43311,43313,43315,43317,43320,43322,43324,43326,43328,43330,43332],{"class":53,"line":10774},[51,43303,43193],{"class":72},[51,43305,43306],{"class":175},"480",[51,43308,82],{"class":72},[51,43310,43123],{"class":175},[51,43312,43202],{"class":72},[51,43314,1463],{"class":175},[51,43316,82],{"class":72},[51,43318,43319],{"class":175},"208",[51,43321,43211],{"class":72},[51,43323,1847],{"class":175},[51,43325,82],{"class":72},[51,43327,1853],{"class":175},[51,43329,43220],{"class":72},[51,43331,1457],{"class":175},[51,43333,39011],{"class":72},[51,43335,43336,43338,43340,43342,43344,43346,43348,43350,43352,43354,43356,43358,43360,43362,43364],{"class":53,"line":10779},[51,43337,43193],{"class":72},[51,43339,39421],{"class":175},[51,43341,82],{"class":72},[51,43343,22010],{"class":175},[51,43345,43202],{"class":72},[51,43347,1864],{"class":175},[51,43349,82],{"class":72},[51,43351,32465],{"class":175},[51,43353,43211],{"class":72},[51,43355,2045],{"class":175},[51,43357,82],{"class":72},[51,43359,1457],{"class":175},[51,43361,43220],{"class":72},[51,43363,1457],{"class":175},[51,43365,39011],{"class":72},[51,43367,43368,43370,43372,43374,43376,43378,43380,43382,43384,43386,43388,43390,43392,43394,43396],{"class":53,"line":10785},[51,43369,43193],{"class":72},[51,43371,39421],{"class":175},[51,43373,82],{"class":72},[51,43375,33034],{"class":175},[51,43377,43202],{"class":72},[51,43379,33034],{"class":175},[51,43381,82],{"class":72},[51,43383,35834],{"class":175},[51,43385,43211],{"class":72},[51,43387,2045],{"class":175},[51,43389,82],{"class":72},[51,43391,1457],{"class":175},[51,43393,43220],{"class":72},[51,43395,1457],{"class":175},[51,43397,39011],{"class":72},[51,43399,43400,43402,43404,43406,43408,43410,43412,43414,43417,43419,43421,43423,43425,43427,43429],{"class":53,"line":10806},[51,43401,43193],{"class":72},[51,43403,39421],{"class":175},[51,43405,82],{"class":72},[51,43407,1864],{"class":175},[51,43409,43202],{"class":72},[51,43411,33034],{"class":175},[51,43413,82],{"class":72},[51,43415,43416],{"class":175},"288",[51,43418,43211],{"class":72},[51,43420,1451],{"class":175},[51,43422,82],{"class":72},[51,43424,1457],{"class":175},[51,43426,43220],{"class":72},[51,43428,1457],{"class":175},[51,43430,39011],{"class":72},[51,43432,43433,43435,43438,43440,43442,43444,43446,43448,43451,43453,43455,43457,43459,43461,43463],{"class":53,"line":10812},[51,43434,43193],{"class":72},[51,43436,43437],{"class":175},"528",[51,43439,82],{"class":72},[51,43441,35834],{"class":175},[51,43443,43202],{"class":72},[51,43445,22010],{"class":175},[51,43447,82],{"class":72},[51,43449,43450],{"class":175},"320",[51,43452,43211],{"class":72},[51,43454,1451],{"class":175},[51,43456,82],{"class":72},[51,43458,33034],{"class":175},[51,43460,43220],{"class":72},[51,43462,33034],{"class":175},[51,43464,39011],{"class":72},[51,43466,43467,43469,43471,43473,43475,43477,43479,43481,43483,43485,43487,43489,43491],{"class":53,"line":10826},[51,43468,39061],{"class":72},[51,43470,31838],{"class":78},[51,43472,108],{"class":64},[51,43474,1328],{"class":175},[51,43476,82],{"class":72},[51,43478,31893],{"class":78},[51,43480,108],{"class":64},[51,43482,1334],{"class":175},[51,43484,82],{"class":72},[51,43486,31847],{"class":78},[51,43488,108],{"class":64},[51,43490,791],{"class":175},[51,43492,90],{"class":72},[51,43494,43495],{"class":53,"line":10832},[51,43496,39090],{"class":72},[51,43498,43499,43501,43504,43506],{"class":53,"line":10859},[51,43500,31809],{"class":175},[51,43502,43503],{"class":72},".b5",[51,43505,108],{"class":64},[51,43507,38973],{"class":72},[51,43509,43510,43512,43515,43517,43519,43521,43523,43525,43527,43529,43531,43533,43535,43537,43539],{"class":53,"line":10868},[51,43511,43193],{"class":72},[51,43513,43514],{"class":175},"832",[51,43516,82],{"class":72},[51,43518,35834],{"class":175},[51,43520,43202],{"class":72},[51,43522,22010],{"class":175},[51,43524,82],{"class":72},[51,43526,43450],{"class":175},[51,43528,43211],{"class":72},[51,43530,1451],{"class":175},[51,43532,82],{"class":72},[51,43534,33034],{"class":175},[51,43536,43220],{"class":72},[51,43538,33034],{"class":175},[51,43540,39011],{"class":72},[51,43542,43543,43545,43547,43549,43551,43553,43555,43557,43559,43561,43563,43565,43567,43569,43571],{"class":53,"line":10874},[51,43544,43193],{"class":72},[51,43546,43514],{"class":175},[51,43548,82],{"class":72},[51,43550,35904],{"class":175},[51,43552,43202],{"class":72},[51,43554,43123],{"class":175},[51,43556,82],{"class":72},[51,43558,35904],{"class":175},[51,43560,43211],{"class":72},[51,43562,1853],{"class":175},[51,43564,82],{"class":72},[51,43566,33034],{"class":175},[51,43568,43220],{"class":72},[51,43570,33034],{"class":175},[51,43572,39011],{"class":72},[51,43574,43575,43578,43580,43582,43584],{"class":53,"line":10882},[51,43576,43577],{"class":72},"            nn.AdaptiveAvgPool2d((",[51,43579,791],{"class":175},[51,43581,82],{"class":72},[51,43583,791],{"class":175},[51,43585,43586],{"class":72},")),\n",[51,43588,43589],{"class":53,"line":10887},[51,43590,39754],{"class":72},[51,43592,43593,43595,43598,43600,43602],{"class":53,"line":17566},[51,43594,39759],{"class":72},[51,43596,43597],{"class":175},"1024",[51,43599,82],{"class":72},[51,43601,443],{"class":175},[51,43603,90],{"class":72},[51,43605,43606],{"class":53,"line":17572},[51,43607,39090],{"class":72},[51,43609,43610],{"class":53,"line":17595},[51,43611,43612],{"class":57},"        # 对模型参数初始化\n",[51,43614,43615,43617,43619,43621,43623],{"class":53,"line":17601},[51,43616,4480],{"class":64},[51,43618,39832],{"class":72},[51,43620,27007],{"class":64},[51,43622,39837],{"class":175},[51,43624,39840],{"class":72},[51,43626,43627,43629,43631],{"class":53,"line":17624},[51,43628,5716],{"class":64},[51,43630,39852],{"class":175},[51,43632,39855],{"class":72},[51,43634,43635,43637,43640,43642,43645,43647,43649,43651,43653],{"class":53,"line":17638},[51,43636,39865],{"class":72},[51,43638,43639],{"class":78},"mode",[51,43641,108],{"class":64},[51,43643,43644],{"class":282},"'fan_out'",[51,43646,82],{"class":72},[51,43648,39868],{"class":78},[51,43650,108],{"class":64},[51,43652,39873],{"class":282},[51,43654,90],{"class":72},[51,43656,43657],{"class":53,"line":17658},[51,43658,43659],{"class":57},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[51,43661,43662],{"class":53,"line":17664},[51,43663,43664],{"class":57},"                # ② mode = 'fan_out'决定使用的fan值：\n",[51,43666,43667],{"class":53,"line":17675},[51,43668,43669],{"class":57},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[51,43671,43672],{"class":53,"line":17698},[51,43673,43674],{"class":57},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[51,43676,43677],{"class":53,"line":17720},[51,43678,43679],{"class":57},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[51,43681,43682],{"class":53,"line":17725},[51,43683,43684],{"class":57},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[51,43686,43687,43689,43691,43693,43695,43697],{"class":53,"line":17731},[51,43688,39885],{"class":64},[51,43690,39888],{"class":72},[51,43692,39891],{"class":64},[51,43694,39894],{"class":64},[51,43696,39897],{"class":175},[51,43698,4816],{"class":72},[51,43700,43701,43703,43705],{"class":53,"line":17745},[51,43702,39909],{"class":72},[51,43704,176],{"class":175},[51,43706,90],{"class":72},[51,43708,43709,43712,43714],{"class":53,"line":17758},[51,43710,43711],{"class":64},"                elif",[51,43713,39852],{"class":175},[51,43715,39928],{"class":72},[51,43717,43718,43721,43723,43725,43727],{"class":53,"line":17763},[51,43719,43720],{"class":72},"                    nn.init.normal_(m.weight,",[51,43722,176],{"class":175},[51,43724,82],{"class":72},[51,43726,39950],{"class":175},[51,43728,90],{"class":72},[51,43730,43731,43734,43736,43738,43740,43742],{"class":53,"line":17777},[51,43732,43733],{"class":64},"                    if",[51,43735,39888],{"class":72},[51,43737,39891],{"class":64},[51,43739,39894],{"class":64},[51,43741,39897],{"class":175},[51,43743,4816],{"class":72},[51,43745,43746,43749,43751],{"class":53,"line":17782},[51,43747,43748],{"class":72},"                        nn.init.constant_(m.bias,",[51,43750,176],{"class":175},[51,43752,90],{"class":72},[51,43754,43755],{"class":53,"line":17788},[51,43756,36129],{"class":57},[51,43758,43759,43761,43763],{"class":53,"line":17793},[51,43760,31765],{"class":64},[51,43762,32057],{"class":68},[51,43764,32060],{"class":72},[51,43766,43767,43769,43771,43773],{"class":53,"line":17807},[51,43768,32065],{"class":72},[51,43770,108],{"class":64},[51,43772,31787],{"class":175},[51,43774,43775],{"class":72},".b1(x)\n",[51,43777,43778,43780,43782,43784],{"class":53,"line":17812},[51,43779,32065],{"class":72},[51,43781,108],{"class":64},[51,43783,31787],{"class":175},[51,43785,43786],{"class":72},".b2(x)\n",[51,43788,43789,43791,43793,43795],{"class":53,"line":17817},[51,43790,32065],{"class":72},[51,43792,108],{"class":64},[51,43794,31787],{"class":175},[51,43796,43797],{"class":72},".b3(x)\n",[51,43799,43800,43802,43804,43806],{"class":53,"line":17831},[51,43801,32065],{"class":72},[51,43803,108],{"class":64},[51,43805,31787],{"class":175},[51,43807,43808],{"class":72},".b4(x)\n",[51,43810,43811,43813,43815,43817],{"class":53,"line":17843},[51,43812,32065],{"class":72},[51,43814,108],{"class":64},[51,43816,31787],{"class":175},[51,43818,43819],{"class":72},".b5(x)\n",[51,43821,43822,43824],{"class":53,"line":17848},[51,43823,15714],{"class":64},[51,43825,32173],{"class":72},[51,43827,43828],{"class":53,"line":17861},[51,43829,3480],{"emptyLinePlaceholder":1192},[51,43831,43832],{"class":53,"line":17866},[51,43833,43834],{"class":57},"# 模型展示\n",[51,43836,43837,43839,43841,43843,43845],{"class":53,"line":17871},[51,43838,2633],{"class":64},[51,43840,32184],{"class":175},[51,43842,4026],{"class":64},[51,43844,32189],{"class":282},[51,43846,4816],{"class":72},[51,43848,43849,43851,43853,43855,43857,43859,43861,43863,43865],{"class":53,"line":17876},[51,43850,32201],{"class":72},[51,43852,108],{"class":64},[51,43854,31415],{"class":72},[51,43856,32208],{"class":282},[51,43858,2794],{"class":64},[51,43860,32213],{"class":72},[51,43862,2791],{"class":64},[51,43864,31440],{"class":282},[51,43866,90],{"class":72},[51,43868,43869,43871,43873],{"class":53,"line":17889},[51,43870,32253],{"class":72},[51,43872,108],{"class":64},[51,43874,43875],{"class":72},"GoogLeNet(Inception).to(device)\n",[51,43877,43878,43880,43882,43884,43886,43888,43890,43892],{"class":53,"line":17894},[51,43879,32263],{"class":175},[51,43881,32266],{"class":72},[51,43883,791],{"class":175},[51,43885,82],{"class":72},[51,43887,32465],{"class":175},[51,43889,82],{"class":72},[51,43891,32465],{"class":175},[51,43893,32279],{"class":72},[19,43895,43896],{"start":61},[22,43897,40147],{},[29,43899,43901],{"className":31342,"code":43900,"language":31344,"meta":35,"style":35},"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",[37,43902,43903,43909,43915,43925,43931,43941,43951,43961,43971,43981,43985,43996,44006,44010,44014,44018,44026,44038,44048,44064,44074,44106,44120,44130,44140,44144,44154,44168,44178,44188,44198,44204,44208,44212,44216,44220,44224,44232,44252,44256,44260,44264,44268,44272,44288,44292,44296,44304,44308,44312,44320,44324,44328,44332,44340,44344,44348,44352,44356,44364,44368,44376,44380,44388,44392,44400,44404,44412,44416,44420,44428,44432,44436,44440,44452,44476,44490,44494,44498,44502,44510,44514,44522,44526,44534,44538,44546,44550,44558,44562,44570,44574,44586,44590,44598,44602,44610,44614,44618,44622,44626,44634,44638,44654,44658,44666,44670,44674,44678,44682,44686,44690,44694,44710,44714,44726,44730,44742,44746,44758,44762,44770,44774,44782,44786,44790,44794,44800,44804,44812,44816,44832,44836,44844,44848,44864,44876,44880,44892,44896,44900,44908,44912,44916,44924,44928,44936,44940,44948,44952,44956,44998,45040,45044,45048,45064,45068,45084,45088,45092,45100,45104,45108,45120,45158,45162,45166,45174,45178,45192,45202,45208,45214,45220,45226,45230,45234,45240,45244,45248,45256,45260,45278,45282,45286,45290,45306,45310,45314,45318,45322,45326,45346,45366,45370,45374,45378,45386,45394,45398,45414,45434,45454,45458,45462,45470,45478,45482,45486,45490,45502,45506,45516,45524,45541],{"__ignoreMap":35},[51,43904,43905,43907],{"class":53,"line":54},[51,43906,31356],{"class":64},[51,43908,32786],{"class":72},[51,43910,43911,43913],{"class":53,"line":61},[51,43912,31356],{"class":64},[51,43914,32793],{"class":72},[51,43916,43917,43919,43921,43923],{"class":53,"line":93},[51,43918,31356],{"class":64},[51,43920,32804],{"class":72},[51,43922,32347],{"class":64},[51,43924,32809],{"class":72},[51,43926,43927,43929],{"class":53,"line":99},[51,43928,31356],{"class":64},[51,43930,31359],{"class":72},[51,43932,43933,43935,43937,43939],{"class":53,"line":120},[51,43934,31701],{"class":64},[51,43936,32379],{"class":72},[51,43938,31356],{"class":64},[51,43940,32826],{"class":72},[51,43942,43943,43945,43947,43949],{"class":53,"line":129},[51,43944,31701],{"class":64},[51,43946,32332],{"class":72},[51,43948,31356],{"class":64},[51,43950,32337],{"class":72},[51,43952,43953,43955,43957,43959],{"class":53,"line":206},[51,43954,31701],{"class":64},[51,43956,32362],{"class":72},[51,43958,31356],{"class":64},[51,43960,32367],{"class":72},[51,43962,43963,43965,43967,43969],{"class":53,"line":212},[51,43964,31356],{"class":64},[51,43966,32379],{"class":72},[51,43968,32347],{"class":64},[51,43970,32384],{"class":72},[51,43972,43973,43975,43977,43979],{"class":53,"line":227},[51,43974,31356],{"class":64},[51,43976,32396],{"class":72},[51,43978,32347],{"class":64},[51,43980,32401],{"class":72},[51,43982,43983],{"class":53,"line":370},[51,43984,32871],{"class":57},[51,43986,43987,43989,43991,43993],{"class":53,"line":387},[51,43988,31701],{"class":64},[51,43990,32878],{"class":72},[51,43992,31356],{"class":64},[51,43994,43995],{"class":72}," GoogLeNet, Inception\n",[51,43997,43998,44000,44002,44004],{"class":53,"line":404},[51,43999,31701],{"class":64},[51,44001,31704],{"class":72},[51,44003,31356],{"class":64},[51,44005,31709],{"class":72},[51,44007,44008],{"class":53,"line":415},[51,44009,3480],{"emptyLinePlaceholder":1192},[51,44011,44012],{"class":53,"line":420},[51,44013,3480],{"emptyLinePlaceholder":1192},[51,44015,44016],{"class":53,"line":429},[51,44017,32906],{"class":57},[51,44019,44020,44022,44024],{"class":53,"line":434},[51,44021,32911],{"class":64},[51,44023,32914],{"class":68},[51,44025,32917],{"class":72},[51,44027,44028,44030,44032,44034,44036],{"class":53,"line":448},[51,44029,32922],{"class":72},[51,44031,108],{"class":64},[51,44033,32419],{"class":72},[51,44035,32427],{"class":282},[51,44037,32430],{"class":72},[51,44039,44040,44042,44044,44046],{"class":53,"line":462},[51,44041,32935],{"class":78},[51,44043,108],{"class":64},[51,44045,32440],{"class":175},[51,44047,32430],{"class":72},[51,44049,44050,44052,44054,44056,44058,44060,44062],{"class":53,"line":470},[51,44051,32946],{"class":78},[51,44053,108],{"class":64},[51,44055,32457],{"class":72},[51,44057,32460],{"class":78},[51,44059,108],{"class":64},[51,44061,36413],{"class":175},[51,44063,32468],{"class":72},[51,44065,44066,44068,44070,44072],{"class":53,"line":2783},[51,44067,32963],{"class":78},[51,44069,108],{"class":64},[51,44071,32440],{"class":175},[51,44073,90],{"class":72},[51,44075,44076,44078,44080,44082,44084,44086,44088,44090,44092,44094,44096,44098,44100,44102,44104],{"class":53,"line":2788},[51,44077,32974],{"class":72},[51,44079,108],{"class":64},[51,44081,32979],{"class":72},[51,44083,32982],{"class":175},[51,44085,73],{"class":72},[51,44087,32987],{"class":175},[51,44089,1702],{"class":64},[51,44091,8320],{"class":175},[51,44093,32994],{"class":72},[51,44095,32982],{"class":175},[51,44097,73],{"class":72},[51,44099,33001],{"class":175},[51,44101,1702],{"class":64},[51,44103,8320],{"class":175},[51,44105,33008],{"class":72},[51,44107,44108,44110,44112,44114,44116,44118],{"class":53,"line":2817},[51,44109,33013],{"class":72},[51,44111,108],{"class":64},[51,44113,33018],{"class":72},[51,44115,32501],{"class":78},[51,44117,108],{"class":64},[51,44119,32506],{"class":72},[51,44121,44122,44124,44126,44128],{"class":53,"line":2822},[51,44123,33029],{"class":78},[51,44125,108],{"class":64},[51,44127,1451],{"class":175},[51,44129,32430],{"class":72},[51,44131,44132,44134,44136,44138],{"class":53,"line":2839},[51,44133,33041],{"class":78},[51,44135,108],{"class":64},[51,44137,32440],{"class":175},[51,44139,32430],{"class":72},[51,44141,44142],{"class":53,"line":2844},[51,44143,33052],{"class":57},[51,44145,44146,44148,44150,44152],{"class":53,"line":2849},[51,44147,33057],{"class":78},[51,44149,108],{"class":64},[51,44151,1643],{"class":175},[51,44153,90],{"class":72},[51,44155,44156,44158,44160,44162,44164,44166],{"class":53,"line":2854},[51,44157,33068],{"class":72},[51,44159,108],{"class":64},[51,44161,32498],{"class":72},[51,44163,32501],{"class":78},[51,44165,108],{"class":64},[51,44167,33079],{"class":72},[51,44169,44170,44172,44174,44176],{"class":53,"line":2868},[51,44171,33084],{"class":78},[51,44173,108],{"class":64},[51,44175,1451],{"class":175},[51,44177,32430],{"class":72},[51,44179,44180,44182,44184,44186],{"class":53,"line":2873},[51,44181,33095],{"class":78},[51,44183,108],{"class":64},[51,44185,32440],{"class":175},[51,44187,32430],{"class":72},[51,44189,44190,44192,44194,44196],{"class":53,"line":3657},[51,44191,33106],{"class":78},[51,44193,108],{"class":64},[51,44195,1643],{"class":175},[51,44197,90],{"class":72},[51,44199,44200,44202],{"class":53,"line":3671},[51,44201,123],{"class":64},[51,44203,33119],{"class":72},[51,44205,44206],{"class":53,"line":3679},[51,44207,3480],{"emptyLinePlaceholder":1192},[51,44209,44210],{"class":53,"line":3684},[51,44211,33128],{"class":57},[51,44213,44214],{"class":53,"line":3690},[51,44215,33133],{"class":57},[51,44217,44218],{"class":53,"line":3696},[51,44219,3480],{"emptyLinePlaceholder":1192},[51,44221,44222],{"class":53,"line":3701},[51,44223,33142],{"class":57},[51,44225,44226,44228,44230],{"class":53,"line":8910},[51,44227,32911],{"class":64},[51,44229,33149],{"class":68},[51,44231,33152],{"class":72},[51,44233,44234,44236,44238,44240,44242,44244,44246,44248,44250],{"class":53,"line":8934},[51,44235,32201],{"class":72},[51,44237,108],{"class":64},[51,44239,31415],{"class":72},[51,44241,32208],{"class":282},[51,44243,2794],{"class":64},[51,44245,32213],{"class":72},[51,44247,2791],{"class":64},[51,44249,33171],{"class":282},[51,44251,90],{"class":72},[51,44253,44254],{"class":53,"line":8939},[51,44255,3480],{"emptyLinePlaceholder":1192},[51,44257,44258],{"class":53,"line":8945},[51,44259,3480],{"emptyLinePlaceholder":1192},[51,44261,44262],{"class":53,"line":8972},[51,44263,33186],{"class":57},[51,44265,44266],{"class":53,"line":8977},[51,44267,33191],{"class":57},[51,44269,44270],{"class":53,"line":8983},[51,44271,33196],{"class":57},[51,44273,44274,44276,44278,44280,44282,44284,44286],{"class":53,"line":8995},[51,44275,33201],{"class":72},[51,44277,108],{"class":64},[51,44279,33206],{"class":72},[51,44281,33209],{"class":78},[51,44283,108],{"class":64},[51,44285,33214],{"class":175},[51,44287,90],{"class":72},[51,44289,44290],{"class":53,"line":9007},[51,44291,3480],{"emptyLinePlaceholder":1192},[51,44293,44294],{"class":53,"line":9019},[51,44295,33225],{"class":57},[51,44297,44298,44300,44302],{"class":53,"line":10678},[51,44299,33230],{"class":72},[51,44301,108],{"class":64},[51,44303,33235],{"class":72},[51,44305,44306],{"class":53,"line":10703},[51,44307,3480],{"emptyLinePlaceholder":1192},[51,44309,44310],{"class":53,"line":10726},[51,44311,33244],{"class":57},[51,44313,44314,44316,44318],{"class":53,"line":10750},[51,44315,32253],{"class":72},[51,44317,108],{"class":64},[51,44319,33253],{"class":72},[51,44321,44322],{"class":53,"line":10755},[51,44323,33258],{"class":57},[51,44325,44326],{"class":53,"line":10760},[51,44327,33263],{"class":57},[51,44329,44330],{"class":53,"line":10765},[51,44331,33268],{"class":57},[51,44333,44334,44336,44338],{"class":53,"line":10774},[51,44335,33273],{"class":72},[51,44337,108],{"class":64},[51,44339,33278],{"class":72},[51,44341,44342],{"class":53,"line":10779},[51,44343,3480],{"emptyLinePlaceholder":1192},[51,44345,44346],{"class":53,"line":10785},[51,44347,3480],{"emptyLinePlaceholder":1192},[51,44349,44350],{"class":53,"line":10806},[51,44351,33291],{"class":57},[51,44353,44354],{"class":53,"line":10812},[51,44355,33296],{"class":57},[51,44357,44358,44360,44362],{"class":53,"line":10826},[51,44359,33301],{"class":72},[51,44361,108],{"class":64},[51,44363,33306],{"class":175},[51,44365,44366],{"class":53,"line":10832},[51,44367,33311],{"class":57},[51,44369,44370,44372,44374],{"class":53,"line":10859},[51,44371,33316],{"class":72},[51,44373,108],{"class":64},[51,44375,33321],{"class":72},[51,44377,44378],{"class":53,"line":10868},[51,44379,33326],{"class":57},[51,44381,44382,44384,44386],{"class":53,"line":10874},[51,44383,33331],{"class":72},[51,44385,108],{"class":64},[51,44387,33321],{"class":72},[51,44389,44390],{"class":53,"line":10882},[51,44391,33340],{"class":57},[51,44393,44394,44396,44398],{"class":53,"line":10887},[51,44395,33345],{"class":72},[51,44397,108],{"class":64},[51,44399,33321],{"class":72},[51,44401,44402],{"class":53,"line":17566},[51,44403,33354],{"class":57},[51,44405,44406,44408,44410],{"class":53,"line":17572},[51,44407,33359],{"class":72},[51,44409,108],{"class":64},[51,44411,33321],{"class":72},[51,44413,44414],{"class":53,"line":17595},[51,44415,3480],{"emptyLinePlaceholder":1192},[51,44417,44418],{"class":53,"line":17601},[51,44419,33372],{"class":57},[51,44421,44422,44424,44426],{"class":53,"line":17624},[51,44423,33377],{"class":72},[51,44425,108],{"class":64},[51,44427,33382],{"class":72},[51,44429,44430],{"class":53,"line":17638},[51,44431,3480],{"emptyLinePlaceholder":1192},[51,44433,44434],{"class":53,"line":17658},[51,44435,3480],{"emptyLinePlaceholder":1192},[51,44437,44438],{"class":53,"line":17664},[51,44439,33395],{"class":57},[51,44441,44442,44444,44446,44448,44450],{"class":53,"line":17675},[51,44443,4278],{"class":64},[51,44445,33402],{"class":72},[51,44447,27007],{"class":64},[51,44449,33407],{"class":175},[51,44451,33410],{"class":72},[51,44453,44454,44456,44458,44460,44462,44464,44466,44468,44470,44472,44474],{"class":53,"line":17698},[51,44455,33415],{"class":175},[51,44457,73],{"class":72},[51,44459,33420],{"class":282},[51,44461,33423],{"class":175},[51,44463,1830],{"class":282},[51,44465,33423],{"class":175},[51,44467,1503],{"class":282},[51,44469,33432],{"class":72},[51,44471,1778],{"class":64},[51,44473,791],{"class":175},[51,44475,31461],{"class":72},[51,44477,44478,44480,44482,44484,44486,44488],{"class":53,"line":17720},[51,44479,33415],{"class":175},[51,44481,73],{"class":72},[51,44483,33447],{"class":282},[51,44485,1702],{"class":64},[51,44487,443],{"class":175},[51,44489,90],{"class":72},[51,44491,44492],{"class":53,"line":17725},[51,44493,3480],{"emptyLinePlaceholder":1192},[51,44495,44496],{"class":53,"line":17731},[51,44497,33462],{"class":57},[51,44499,44500],{"class":53,"line":17745},[51,44501,33467],{"class":57},[51,44503,44504,44506,44508],{"class":53,"line":17758},[51,44505,33472],{"class":72},[51,44507,108],{"class":64},[51,44509,33306],{"class":175},[51,44511,44512],{"class":53,"line":17763},[51,44513,33481],{"class":57},[51,44515,44516,44518,44520],{"class":53,"line":17777},[51,44517,33486],{"class":72},[51,44519,108],{"class":64},[51,44521,4162],{"class":175},[51,44523,44524],{"class":53,"line":17782},[51,44525,33495],{"class":57},[51,44527,44528,44530,44532],{"class":53,"line":17788},[51,44529,33500],{"class":72},[51,44531,108],{"class":64},[51,44533,33306],{"class":175},[51,44535,44536],{"class":53,"line":17793},[51,44537,33509],{"class":57},[51,44539,44540,44542,44544],{"class":53,"line":17807},[51,44541,33514],{"class":72},[51,44543,108],{"class":64},[51,44545,4162],{"class":175},[51,44547,44548],{"class":53,"line":17812},[51,44549,33523],{"class":57},[51,44551,44552,44554,44556],{"class":53,"line":17817},[51,44553,33528],{"class":72},[51,44555,108],{"class":64},[51,44557,4162],{"class":175},[51,44559,44560],{"class":53,"line":17831},[51,44561,33537],{"class":57},[51,44563,44564,44566,44568],{"class":53,"line":17843},[51,44565,33542],{"class":72},[51,44567,108],{"class":64},[51,44569,4162],{"class":175},[51,44571,44572],{"class":53,"line":17848},[51,44573,33551],{"class":57},[51,44575,44576,44578,44580,44582,44584],{"class":53,"line":17861},[51,44577,4480],{"class":64},[51,44579,32565],{"class":72},[51,44581,27007],{"class":64},[51,44583,32570],{"class":175},[51,44585,33564],{"class":72},[51,44587,44588],{"class":53,"line":17866},[51,44589,33569],{"class":57},[51,44591,44592,44594,44596],{"class":53,"line":17871},[51,44593,33574],{"class":72},[51,44595,108],{"class":64},[51,44597,33579],{"class":72},[51,44599,44600],{"class":53,"line":17876},[51,44601,33584],{"class":57},[51,44603,44604,44606,44608],{"class":53,"line":17889},[51,44605,33589],{"class":72},[51,44607,108],{"class":64},[51,44609,33594],{"class":72},[51,44611,44612],{"class":53,"line":17894},[51,44613,33600],{"class":57},[51,44615,44616],{"class":53,"line":33597},[51,44617,33606],{"class":72},[51,44619,44620],{"class":53,"line":33603},[51,44621,33612],{"class":57},[51,44623,44624],{"class":53,"line":33609},[51,44625,33618],{"class":57},[51,44627,44628,44630,44632],{"class":53,"line":33615},[51,44629,33624],{"class":72},[51,44631,108],{"class":64},[51,44633,33629],{"class":72},[51,44635,44636],{"class":53,"line":33621},[51,44637,33635],{"class":57},[51,44639,44640,44642,44644,44646,44648,44650,44652],{"class":53,"line":33632},[51,44641,33641],{"class":72},[51,44643,108],{"class":64},[51,44645,33646],{"class":72},[51,44647,33649],{"class":78},[51,44649,108],{"class":64},[51,44651,791],{"class":175},[51,44653,90],{"class":72},[51,44655,44656],{"class":53,"line":33638},[51,44657,33661],{"class":57},[51,44659,44660,44662,44664],{"class":53,"line":33658},[51,44661,33667],{"class":72},[51,44663,108],{"class":64},[51,44665,33672],{"class":72},[51,44667,44668],{"class":53,"line":33664},[51,44669,33678],{"class":57},[51,44671,44672],{"class":53,"line":33675},[51,44673,33684],{"class":72},[51,44675,44676],{"class":53,"line":33681},[51,44677,33690],{"class":57},[51,44679,44680],{"class":53,"line":33687},[51,44681,33696],{"class":72},[51,44683,44684],{"class":53,"line":33693},[51,44685,33702],{"class":57},[51,44687,44688],{"class":53,"line":33699},[51,44689,33708],{"class":72},[51,44691,44692],{"class":53,"line":33705},[51,44693,33714],{"class":57},[51,44695,44696,44698,44700,44702,44704,44706,44708],{"class":53,"line":33711},[51,44697,33720],{"class":72},[51,44699,10439],{"class":64},[51,44701,33725],{"class":72},[51,44703,1702],{"class":64},[51,44705,33730],{"class":72},[51,44707,176],{"class":175},[51,44709,90],{"class":72},[51,44711,44712],{"class":53,"line":33717},[51,44713,33740],{"class":57},[51,44715,44716,44718,44720,44722,44724],{"class":53,"line":33737},[51,44717,33746],{"class":72},[51,44719,10439],{"class":64},[51,44721,33751],{"class":72},[51,44723,4026],{"class":64},[51,44725,33756],{"class":72},[51,44727,44728],{"class":53,"line":33743},[51,44729,33762],{"class":57},[51,44731,44732,44734,44736,44738,44740],{"class":53,"line":33759},[51,44733,33768],{"class":72},[51,44735,10439],{"class":64},[51,44737,33730],{"class":72},[51,44739,176],{"class":175},[51,44741,90],{"class":72},[51,44743,44744],{"class":53,"line":33765},[51,44745,33782],{"class":57},[51,44747,44748,44750,44752,44754,44756],{"class":53,"line":33779},[51,44749,4480],{"class":64},[51,44751,33790],{"class":72},[51,44753,27007],{"class":64},[51,44755,32570],{"class":175},[51,44757,33797],{"class":72},[51,44759,44760],{"class":53,"line":33785},[51,44761,33803],{"class":57},[51,44763,44764,44766,44768],{"class":53,"line":33800},[51,44765,33574],{"class":72},[51,44767,108],{"class":64},[51,44769,33579],{"class":72},[51,44771,44772],{"class":53,"line":33806},[51,44773,33818],{"class":57},[51,44775,44776,44778,44780],{"class":53,"line":33815},[51,44777,33589],{"class":72},[51,44779,108],{"class":64},[51,44781,33594],{"class":72},[51,44783,44784],{"class":53,"line":33821},[51,44785,33833],{"class":57},[51,44787,44788],{"class":53,"line":33830},[51,44789,33839],{"class":72},[51,44791,44792],{"class":53,"line":33836},[51,44793,37320],{"class":57},[51,44795,44796,44798],{"class":53,"line":33842},[51,44797,33845],{"class":64},[51,44799,33848],{"class":72},[51,44801,44802],{"class":53,"line":33851},[51,44803,33854],{"class":57},[51,44805,44806,44808,44810],{"class":53,"line":33857},[51,44807,37335],{"class":72},[51,44809,108],{"class":64},[51,44811,33629],{"class":72},[51,44813,44814],{"class":53,"line":33868},[51,44815,33871],{"class":57},[51,44817,44818,44820,44822,44824,44826,44828,44830],{"class":53,"line":33874},[51,44819,37348],{"class":72},[51,44821,108],{"class":64},[51,44823,33646],{"class":72},[51,44825,33649],{"class":78},[51,44827,108],{"class":64},[51,44829,791],{"class":175},[51,44831,90],{"class":72},[51,44833,44834],{"class":53,"line":33893},[51,44835,33896],{"class":57},[51,44837,44838,44840,44842],{"class":53,"line":33899},[51,44839,37369],{"class":72},[51,44841,108],{"class":64},[51,44843,33672],{"class":72},[51,44845,44846],{"class":53,"line":33910},[51,44847,33913],{"class":57},[51,44849,44850,44852,44854,44856,44858,44860,44862],{"class":53,"line":33916},[51,44851,37382],{"class":72},[51,44853,10439],{"class":64},[51,44855,37387],{"class":72},[51,44857,1702],{"class":64},[51,44859,33730],{"class":72},[51,44861,176],{"class":175},[51,44863,90],{"class":72},[51,44865,44866,44868,44870,44872,44874],{"class":53,"line":33936},[51,44867,37400],{"class":72},[51,44869,10439],{"class":64},[51,44871,33751],{"class":72},[51,44873,4026],{"class":64},[51,44875,33756],{"class":72},[51,44877,44878],{"class":53,"line":33952},[51,44879,37413],{"class":57},[51,44881,44882,44884,44886,44888,44890],{"class":53,"line":33958},[51,44883,37418],{"class":72},[51,44885,10439],{"class":64},[51,44887,33730],{"class":72},[51,44889,176],{"class":175},[51,44891,90],{"class":72},[51,44893,44894],{"class":53,"line":33972},[51,44895,33975],{"class":57},[51,44897,44898],{"class":53,"line":33978},[51,44899,33981],{"class":57},[51,44901,44902,44904,44906],{"class":53,"line":33984},[51,44903,33987],{"class":72},[51,44905,1830],{"class":64},[51,44907,33992],{"class":72},[51,44909,44910],{"class":53,"line":33995},[51,44911,33998],{"class":57},[51,44913,44914],{"class":53,"line":34001},[51,44915,34004],{"class":57},[51,44917,44918,44920,44922],{"class":53,"line":34007},[51,44919,34010],{"class":72},[51,44921,1830],{"class":64},[51,44923,33992],{"class":72},[51,44925,44926],{"class":53,"line":34017},[51,44927,34020],{"class":57},[51,44929,44930,44932,44934],{"class":53,"line":34023},[51,44931,34026],{"class":72},[51,44933,1830],{"class":64},[51,44935,34031],{"class":72},[51,44937,44938],{"class":53,"line":34034},[51,44939,34037],{"class":57},[51,44941,44942,44944,44946],{"class":53,"line":34040},[51,44943,34043],{"class":72},[51,44945,1830],{"class":64},[51,44947,34031],{"class":72},[51,44949,44950],{"class":53,"line":34050},[51,44951,3480],{"emptyLinePlaceholder":1192},[51,44953,44954],{"class":53,"line":34055},[51,44955,34058],{"class":57},[51,44957,44958,44960,44962,44964,44966,44968,44970,44972,44974,44976,44978,44980,44982,44984,44986,44988,44990,44992,44994,44996],{"class":53,"line":34061},[51,44959,33415],{"class":175},[51,44961,73],{"class":72},[51,44963,4669],{"class":282},[51,44965,33423],{"class":175},[51,44967,34072],{"class":282},[51,44969,2140],{"class":175},[51,44971,34077],{"class":64},[51,44973,2190],{"class":175},[51,44975,34082],{"class":282},[51,44977,2140],{"class":175},[51,44979,34077],{"class":64},[51,44981,2190],{"class":175},[51,44983,4669],{"class":282},[51,44985,34093],{"class":72},[51,44987,1778],{"class":64},[51,44989,791],{"class":175},[51,44991,34100],{"class":72},[51,44993,1778],{"class":64},[51,44995,791],{"class":175},[51,44997,34107],{"class":72},[51,44999,45000,45002,45004,45006,45008,45010,45012,45014,45016,45018,45020,45022,45024,45026,45028,45030,45032,45034,45036,45038],{"class":53,"line":34110},[51,45001,33415],{"class":175},[51,45003,73],{"class":72},[51,45005,4669],{"class":282},[51,45007,33423],{"class":175},[51,45009,34121],{"class":282},[51,45011,2140],{"class":175},[51,45013,34077],{"class":64},[51,45015,2190],{"class":175},[51,45017,34130],{"class":282},[51,45019,2140],{"class":175},[51,45021,34077],{"class":64},[51,45023,2190],{"class":175},[51,45025,4669],{"class":282},[51,45027,34141],{"class":72},[51,45029,1778],{"class":64},[51,45031,791],{"class":175},[51,45033,34148],{"class":72},[51,45035,1778],{"class":64},[51,45037,791],{"class":175},[51,45039,34107],{"class":72},[51,45041,45042],{"class":53,"line":34157},[51,45043,3480],{"emptyLinePlaceholder":1192},[51,45045,45046],{"class":53,"line":34162},[51,45047,34165],{"class":57},[51,45049,45050,45052,45054,45056,45058,45060,45062],{"class":53,"line":34168},[51,45051,3577],{"class":64},[51,45053,34173],{"class":72},[51,45055,1778],{"class":64},[51,45057,791],{"class":175},[51,45059,2184],{"class":72},[51,45061,972],{"class":64},[51,45063,34184],{"class":72},[51,45065,45066],{"class":53,"line":34187},[51,45067,34190],{"class":57},[51,45069,45070,45072,45074,45076,45078,45080,45082],{"class":53,"line":34193},[51,45071,34196],{"class":72},[51,45073,1300],{"class":175},[51,45075,108],{"class":64},[51,45077,34203],{"class":72},[51,45079,1778],{"class":64},[51,45081,791],{"class":175},[51,45083,34210],{"class":72},[51,45085,45086],{"class":53,"line":34213},[51,45087,34216],{"class":57},[51,45089,45090],{"class":53,"line":34219},[51,45091,34222],{"class":57},[51,45093,45094,45096,45098],{"class":53,"line":34225},[51,45095,34228],{"class":72},[51,45097,108],{"class":64},[51,45099,33278],{"class":72},[51,45101,45102],{"class":53,"line":34235},[51,45103,3480],{"emptyLinePlaceholder":1192},[51,45105,45106],{"class":53,"line":34240},[51,45107,34243],{"class":57},[51,45109,45110,45112,45114,45116,45118],{"class":53,"line":34246},[51,45111,34249],{"class":72},[51,45113,108],{"class":64},[51,45115,34254],{"class":72},[51,45117,1778],{"class":64},[51,45119,34259],{"class":72},[51,45121,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140,45142,45144,45146,45148,45150,45152,45154,45156],{"class":53,"line":34262},[51,45123,33415],{"class":175},[51,45125,73],{"class":72},[51,45127,34269],{"class":282},[51,45129,2140],{"class":175},[51,45131,34274],{"class":64},[51,45133,2190],{"class":175},[51,45135,1790],{"class":282},[51,45137,2140],{"class":175},[51,45139,34274],{"class":64},[51,45141,2190],{"class":175},[51,45143,34287],{"class":282},[51,45145,34290],{"class":72},[51,45147,34293],{"class":64},[51,45149,2151],{"class":175},[51,45151,34298],{"class":72},[51,45153,1577],{"class":64},[51,45155,2151],{"class":175},[51,45157,31461],{"class":72},[51,45159,45160],{"class":53,"line":34307},[51,45161,37697],{"class":57},[51,45163,45164],{"class":53,"line":34313},[51,45165,37702],{"class":57},[51,45167,45168,45170,45172],{"class":53,"line":34319},[51,45169,37707],{"class":72},[51,45171,34331],{"class":282},[51,45173,90],{"class":72},[51,45175,45176],{"class":53,"line":34325},[51,45177,34351],{"class":57},[51,45179,45180,45182,45184,45186,45188,45190],{"class":53,"line":34336},[51,45181,34357],{"class":72},[51,45183,108],{"class":64},[51,45185,34362],{"class":72},[51,45187,34365],{"class":78},[51,45189,108],{"class":64},[51,45191,96],{"class":72},[51,45193,45194,45196,45198,45200],{"class":53,"line":34342},[51,45195,34375],{"class":282},[51,45197,984],{"class":72},[51,45199,34380],{"class":175},[51,45201,34383],{"class":72},[51,45203,45204,45206],{"class":53,"line":34348},[51,45205,34389],{"class":282},[51,45207,34392],{"class":72},[51,45209,45210,45212],{"class":53,"line":34354},[51,45211,34398],{"class":282},[51,45213,34401],{"class":72},[51,45215,45216,45218],{"class":53,"line":34372},[51,45217,34407],{"class":282},[51,45219,34410],{"class":72},[51,45221,45222,45224],{"class":53,"line":34386},[51,45223,34416],{"class":282},[51,45225,34419],{"class":72},[51,45227,45228],{"class":53,"line":34395},[51,45229,34425],{"class":72},[51,45231,45232],{"class":53,"line":34404},[51,45233,34431],{"class":57},[51,45235,45236,45238],{"class":53,"line":34413},[51,45237,123],{"class":64},[51,45239,34439],{"class":72},[51,45241,45242],{"class":53,"line":34422},[51,45243,3480],{"emptyLinePlaceholder":1192},[51,45245,45246],{"class":53,"line":34428},[51,45247,34450],{"class":57},[51,45249,45250,45252,45254],{"class":53,"line":34434},[51,45251,32911],{"class":64},[51,45253,34458],{"class":68},[51,45255,34461],{"class":72},[51,45257,45258],{"class":53,"line":34442},[51,45259,34467],{"class":57},[51,45261,45262,45264,45266,45268,45270,45272,45274,45276],{"class":53,"line":34447},[51,45263,34473],{"class":72},[51,45265,32657],{"class":78},[51,45267,108],{"class":64},[51,45269,73],{"class":72},[51,45271,1744],{"class":175},[51,45273,82],{"class":72},[51,45275,1543],{"class":175},[51,45277,31461],{"class":72},[51,45279,45280],{"class":53,"line":34453},[51,45281,34493],{"class":57},[51,45283,45284],{"class":53,"line":34464},[51,45285,34499],{"class":57},[51,45287,45288],{"class":53,"line":34470},[51,45289,34505],{"class":57},[51,45291,45292,45294,45296,45298,45300,45302,45304],{"class":53,"line":34490},[51,45293,32691],{"class":72},[51,45295,791],{"class":175},[51,45297,82],{"class":72},[51,45299,1334],{"class":175},[51,45301,82],{"class":72},[51,45303,791],{"class":175},[51,45305,90],{"class":72},[51,45307,45308],{"class":53,"line":34496},[51,45309,34528],{"class":57},[51,45311,45312],{"class":53,"line":34502},[51,45313,34534],{"class":57},[51,45315,45316],{"class":53,"line":34508},[51,45317,34540],{"class":57},[51,45319,45320],{"class":53,"line":34525},[51,45321,34546],{"class":57},[51,45323,45324],{"class":53,"line":34531},[51,45325,34552],{"class":57},[51,45327,45328,45330,45332,45334,45336,45338,45340,45342,45344],{"class":53,"line":34537},[51,45329,34558],{"class":72},[51,45331,34561],{"class":282},[51,45333,34564],{"class":72},[51,45335,34567],{"class":282},[51,45337,82],{"class":72},[51,45339,34572],{"class":78},[51,45341,108],{"class":64},[51,45343,34577],{"class":282},[51,45345,90],{"class":72},[51,45347,45348,45350,45352,45354,45356,45358,45360,45362,45364],{"class":53,"line":34543},[51,45349,34558],{"class":72},[51,45351,34561],{"class":282},[51,45353,34589],{"class":72},[51,45355,34592],{"class":282},[51,45357,82],{"class":72},[51,45359,34572],{"class":78},[51,45361,108],{"class":64},[51,45363,34601],{"class":282},[51,45365,90],{"class":72},[51,45367,45368],{"class":53,"line":34549},[51,45369,34609],{"class":57},[51,45371,45372],{"class":53,"line":34555},[51,45373,34615],{"class":72},[51,45375,45376],{"class":53,"line":34582},[51,45377,34621],{"class":57},[51,45379,45380,45382,45384],{"class":53,"line":34606},[51,45381,34627],{"class":72},[51,45383,34630],{"class":282},[51,45385,90],{"class":72},[51,45387,45388,45390,45392],{"class":53,"line":34612},[51,45389,34638],{"class":72},[51,45391,34641],{"class":282},[51,45393,90],{"class":72},[51,45395,45396],{"class":53,"line":34618},[51,45397,34649],{"class":57},[51,45399,45400,45402,45404,45406,45408,45410,45412],{"class":53,"line":34624},[51,45401,32691],{"class":72},[51,45403,791],{"class":175},[51,45405,82],{"class":72},[51,45407,1334],{"class":175},[51,45409,82],{"class":72},[51,45411,1334],{"class":175},[51,45413,90],{"class":72},[51,45415,45416,45418,45420,45422,45424,45426,45428,45430,45432],{"class":53,"line":34635},[51,45417,34558],{"class":72},[51,45419,34561],{"class":282},[51,45421,34676],{"class":72},[51,45423,34567],{"class":282},[51,45425,82],{"class":72},[51,45427,34572],{"class":78},[51,45429,108],{"class":64},[51,45431,34687],{"class":282},[51,45433,90],{"class":72},[51,45435,45436,45438,45440,45442,45444,45446,45448,45450,45452],{"class":53,"line":34646},[51,45437,34558],{"class":72},[51,45439,34561],{"class":282},[51,45441,34699],{"class":72},[51,45443,34592],{"class":282},[51,45445,82],{"class":72},[51,45447,34572],{"class":78},[51,45449,108],{"class":64},[51,45451,34710],{"class":282},[51,45453,90],{"class":72},[51,45455,45456],{"class":53,"line":34652},[51,45457,34718],{"class":57},[51,45459,45460],{"class":53,"line":34669},[51,45461,34615],{"class":72},[51,45463,45464,45466,45468],{"class":53,"line":34692},[51,45465,34627],{"class":72},[51,45467,34561],{"class":282},[51,45469,90],{"class":72},[51,45471,45472,45474,45476],{"class":53,"line":34715},[51,45473,34638],{"class":72},[51,45475,34740],{"class":282},[51,45477,90],{"class":72},[51,45479,45480],{"class":53,"line":34721},[51,45481,34748],{"class":72},[51,45483,45484],{"class":53,"line":34726},[51,45485,3480],{"emptyLinePlaceholder":1192},[51,45487,45488],{"class":53,"line":34735},[51,45489,34759],{"class":57},[51,45491,45492,45494,45496,45498,45500],{"class":53,"line":34745},[51,45493,2633],{"class":64},[51,45495,32184],{"class":175},[51,45497,4026],{"class":64},[51,45499,32189],{"class":282},[51,45501,4816],{"class":72},[51,45503,45504],{"class":53,"line":34751},[51,45505,34778],{"class":57},[51,45507,45508,45511,45513],{"class":53,"line":34756},[51,45509,45510],{"class":72},"    GoogLeNet",[51,45512,108],{"class":64},[51,45514,45515],{"class":72},"GoogLeNet(Inception)\n",[51,45517,45518,45520,45522],{"class":53,"line":34762},[51,45519,34795],{"class":72},[51,45521,108],{"class":64},[51,45523,34800],{"class":72},[51,45525,45526,45528,45530,45533,45535,45537,45539],{"class":53,"line":34775},[51,45527,34357],{"class":72},[51,45529,108],{"class":64},[51,45531,45532],{"class":72},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[51,45534,34813],{"class":78},[51,45536,108],{"class":64},[51,45538,2195],{"class":175},[51,45540,90],{"class":72},[51,45542,45543],{"class":53,"line":34781},[51,45544,34825],{"class":72},[19,45546,45547],{"start":93},[22,45548,41538],{},[29,45550,45552],{"className":31342,"code":45551,"language":31344,"meta":35,"style":35},"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",[37,45553,45554,45560,45570,45580,45584,45594,45605,45609,45613,45617,45625,45641,45651,45667,45677,45691,45695,45705,45715,45725,45731,45735,45739,45747,45751,45767,45775,45779,45783,45791,45799,45803,45807,45811,45815,45821,45825,45835,45843,45851,45855,45859,45863,45871,45875,45891,45895,45899,45903,45915,45919,45931,45935,45939,45951,45955,45965,45969,45973,45985,45989,45997,46001,46005,46013,46017,46025,46029,46033,46037,46041,46045,46061,46069,46073,46077,46125,46131,46135,46145,46153,46161,46165,46169,46173,46177,46185,46189,46205,46209,46217,46225],{"__ignoreMap":35},[51,45555,45556,45558],{"class":53,"line":54},[51,45557,31356],{"class":64},[51,45559,31359],{"class":72},[51,45561,45562,45564,45566,45568],{"class":53,"line":61},[51,45563,31356],{"class":64},[51,45565,32379],{"class":72},[51,45567,32347],{"class":64},[51,45569,32384],{"class":72},[51,45571,45572,45574,45576,45578],{"class":53,"line":93},[51,45573,31701],{"class":64},[51,45575,32362],{"class":72},[51,45577,31356],{"class":64},[51,45579,32367],{"class":72},[51,45581,45582],{"class":53,"line":99},[51,45583,34886],{"class":57},[51,45585,45586,45588,45590,45592],{"class":53,"line":120},[51,45587,31701],{"class":64},[51,45589,32332],{"class":72},[51,45591,31356],{"class":64},[51,45593,32337],{"class":72},[51,45595,45596,45598,45600,45602],{"class":53,"line":129},[51,45597,31701],{"class":64},[51,45599,32878],{"class":72},[51,45601,31356],{"class":64},[51,45603,45604],{"class":72}," GoogLeNet,Inception\n",[51,45606,45607],{"class":53,"line":206},[51,45608,3480],{"emptyLinePlaceholder":1192},[51,45610,45611],{"class":53,"line":212},[51,45612,3480],{"emptyLinePlaceholder":1192},[51,45614,45615],{"class":53,"line":227},[51,45616,34915],{"class":57},[51,45618,45619,45621,45623],{"class":53,"line":370},[51,45620,32911],{"class":64},[51,45622,34922],{"class":68},[51,45624,32917],{"class":72},[51,45626,45627,45629,45631,45633,45635,45637,45639],{"class":53,"line":387},[51,45628,34929],{"class":72},[51,45630,108],{"class":64},[51,45632,32419],{"class":72},[51,45634,32422],{"class":78},[51,45636,108],{"class":64},[51,45638,32427],{"class":282},[51,45640,32430],{"class":72},[51,45642,45643,45645,45647,45649],{"class":53,"line":404},[51,45644,34946],{"class":78},[51,45646,108],{"class":64},[51,45648,34951],{"class":175},[51,45650,32430],{"class":72},[51,45652,45653,45655,45657,45659,45661,45663,45665],{"class":53,"line":415},[51,45654,34958],{"class":78},[51,45656,108],{"class":64},[51,45658,32457],{"class":72},[51,45660,32460],{"class":78},[51,45662,108],{"class":64},[51,45664,36413],{"class":175},[51,45666,32468],{"class":72},[51,45668,45669,45671,45673,45675],{"class":53,"line":420},[51,45670,34975],{"class":78},[51,45672,108],{"class":64},[51,45674,32440],{"class":175},[51,45676,90],{"class":72},[51,45678,45679,45681,45683,45685,45687,45689],{"class":53,"line":429},[51,45680,34986],{"class":72},[51,45682,108],{"class":64},[51,45684,32498],{"class":72},[51,45686,32501],{"class":78},[51,45688,108],{"class":64},[51,45690,34997],{"class":72},[51,45692,45693],{"class":53,"line":434},[51,45694,35002],{"class":57},[51,45696,45697,45699,45701,45703],{"class":53,"line":448},[51,45698,35007],{"class":78},[51,45700,108],{"class":64},[51,45702,791],{"class":175},[51,45704,32430],{"class":72},[51,45706,45707,45709,45711,45713],{"class":53,"line":462},[51,45708,35018],{"class":78},[51,45710,108],{"class":64},[51,45712,32440],{"class":175},[51,45714,32430],{"class":72},[51,45716,45717,45719,45721,45723],{"class":53,"line":470},[51,45718,35029],{"class":78},[51,45720,108],{"class":64},[51,45722,176],{"class":175},[51,45724,90],{"class":72},[51,45726,45727,45729],{"class":53,"line":2783},[51,45728,123],{"class":64},[51,45730,35042],{"class":72},[51,45732,45733],{"class":53,"line":2788},[51,45734,3480],{"emptyLinePlaceholder":1192},[51,45736,45737],{"class":53,"line":2817},[51,45738,35051],{"class":57},[51,45740,45741,45743,45745],{"class":53,"line":2822},[51,45742,32911],{"class":64},[51,45744,35058],{"class":68},[51,45746,35061],{"class":72},[51,45748,45749],{"class":53,"line":2839},[51,45750,35066],{"class":57},[51,45752,45753,45755,45757,45759,45761,45763,45765],{"class":53,"line":2844},[51,45754,32201],{"class":72},[51,45756,108],{"class":64},[51,45758,32208],{"class":282},[51,45760,2794],{"class":64},[51,45762,32213],{"class":72},[51,45764,2791],{"class":64},[51,45766,35083],{"class":282},[51,45768,45769,45771,45773],{"class":53,"line":2849},[51,45770,32253],{"class":72},[51,45772,108],{"class":64},[51,45774,33253],{"class":72},[51,45776,45777],{"class":53,"line":2854},[51,45778,3480],{"emptyLinePlaceholder":1192},[51,45780,45781],{"class":53,"line":2868},[51,45782,35100],{"class":57},[51,45784,45785,45787,45789],{"class":53,"line":2873},[51,45786,35105],{"class":72},[51,45788,108],{"class":64},[51,45790,33306],{"class":175},[51,45792,45793,45795,45797],{"class":53,"line":3657},[51,45794,35114],{"class":72},[51,45796,108],{"class":64},[51,45798,4162],{"class":175},[51,45800,45801],{"class":53,"line":3671},[51,45802,3480],{"emptyLinePlaceholder":1192},[51,45804,45805],{"class":53,"line":3679},[51,45806,35127],{"class":57},[51,45808,45809],{"class":53,"line":3684},[51,45810,35132],{"class":57},[51,45812,45813],{"class":53,"line":3690},[51,45814,35137],{"class":57},[51,45816,45817,45819],{"class":53,"line":3696},[51,45818,35142],{"class":64},[51,45820,33848],{"class":72},[51,45822,45823],{"class":53,"line":3701},[51,45824,35149],{"class":57},[51,45826,45827,45829,45831,45833],{"class":53,"line":8910},[51,45828,4480],{"class":64},[51,45830,35156],{"class":72},[51,45832,27007],{"class":64},[51,45834,35161],{"class":72},[51,45836,45837,45839,45841],{"class":53,"line":8934},[51,45838,35166],{"class":72},[51,45840,108],{"class":64},[51,45842,35171],{"class":72},[51,45844,45845,45847,45849],{"class":53,"line":8939},[51,45846,35176],{"class":72},[51,45848,108],{"class":64},[51,45850,35181],{"class":72},[51,45852,45853],{"class":53,"line":8945},[51,45854,35186],{"class":57},[51,45856,45857],{"class":53,"line":8972},[51,45858,33839],{"class":72},[51,45860,45861],{"class":53,"line":8977},[51,45862,35195],{"class":57},[51,45864,45865,45867,45869],{"class":53,"line":8983},[51,45866,33624],{"class":72},[51,45868,108],{"class":64},[51,45870,35204],{"class":72},[51,45872,45873],{"class":53,"line":8995},[51,45874,35209],{"class":57},[51,45876,45877,45879,45881,45883,45885,45887,45889],{"class":53,"line":9007},[51,45878,33641],{"class":72},[51,45880,108],{"class":64},[51,45882,33646],{"class":72},[51,45884,33649],{"class":78},[51,45886,108],{"class":64},[51,45888,791],{"class":175},[51,45890,90],{"class":72},[51,45892,45893],{"class":53,"line":9019},[51,45894,35230],{"class":57},[51,45896,45897],{"class":53,"line":10678},[51,45898,35235],{"class":57},[51,45900,45901],{"class":53,"line":10703},[51,45902,35240],{"class":57},[51,45904,45905,45907,45909,45911,45913],{"class":53,"line":10726},[51,45906,35245],{"class":72},[51,45908,10439],{"class":64},[51,45910,33751],{"class":72},[51,45912,4026],{"class":64},[51,45914,35254],{"class":72},[51,45916,45917],{"class":53,"line":10750},[51,45918,35259],{"class":57},[51,45920,45921,45923,45925,45927,45929],{"class":53,"line":10755},[51,45922,35264],{"class":72},[51,45924,10439],{"class":64},[51,45926,35269],{"class":72},[51,45928,176],{"class":175},[51,45930,90],{"class":72},[51,45932,45933],{"class":53,"line":10760},[51,45934,3480],{"emptyLinePlaceholder":1192},[51,45936,45937],{"class":53,"line":10765},[51,45938,35282],{"class":57},[51,45940,45941,45943,45945,45947,45949],{"class":53,"line":10774},[51,45942,35287],{"class":72},[51,45944,108],{"class":64},[51,45946,35292],{"class":72},[51,45948,1830],{"class":64},[51,45950,35297],{"class":72},[51,45952,45953],{"class":53,"line":10779},[51,45954,35302],{"class":57},[51,45956,45957,45959,45961,45963],{"class":53,"line":10785},[51,45958,33415],{"class":175},[51,45960,73],{"class":72},[51,45962,35311],{"class":282},[51,45964,35314],{"class":72},[51,45966,45967],{"class":53,"line":10806},[51,45968,3480],{"emptyLinePlaceholder":1192},[51,45970,45971],{"class":53,"line":10812},[51,45972,35323],{"class":57},[51,45974,45975,45977,45979,45981,45983],{"class":53,"line":10826},[51,45976,2633],{"class":64},[51,45978,32184],{"class":175},[51,45980,4026],{"class":64},[51,45982,32189],{"class":282},[51,45984,4816],{"class":72},[51,45986,45987],{"class":53,"line":10832},[51,45988,35340],{"class":57},[51,45990,45991,45993,45995],{"class":53,"line":10859},[51,45992,32253],{"class":72},[51,45994,108],{"class":64},[51,45996,45515],{"class":72},[51,45998,45999],{"class":53,"line":10868},[51,46000,35353],{"class":57},[51,46002,46003],{"class":53,"line":10874},[51,46004,35358],{"class":57},[51,46006,46007,46009,46011],{"class":53,"line":10882},[51,46008,35363],{"class":72},[51,46010,35366],{"class":282},[51,46012,31461],{"class":72},[51,46014,46015],{"class":53,"line":10887},[51,46016,35373],{"class":57},[51,46018,46019,46021,46023],{"class":53,"line":17566},[51,46020,34986],{"class":72},[51,46022,108],{"class":64},[51,46024,35382],{"class":72},[51,46026,46027],{"class":53,"line":17572},[51,46028,35387],{"class":57},[51,46030,46031],{"class":53,"line":17595},[51,46032,35392],{"class":72},[51,46034,46035],{"class":53,"line":17601},[51,46036,3480],{"emptyLinePlaceholder":1192},[51,46038,46039],{"class":53,"line":17624},[51,46040,35401],{"class":57},[51,46042,46043],{"class":53,"line":17638},[51,46044,35406],{"class":57},[51,46046,46047,46049,46051,46053,46055,46057,46059],{"class":53,"line":17658},[51,46048,32201],{"class":72},[51,46050,108],{"class":64},[51,46052,32208],{"class":282},[51,46054,2794],{"class":64},[51,46056,32213],{"class":72},[51,46058,2791],{"class":64},[51,46060,35083],{"class":282},[51,46062,46063,46065,46067],{"class":53,"line":17664},[51,46064,32253],{"class":72},[51,46066,108],{"class":64},[51,46068,33253],{"class":72},[51,46070,46071],{"class":53,"line":17675},[51,46072,35435],{"class":57},[51,46074,46075],{"class":53,"line":17698},[51,46076,35440],{"class":57},[51,46078,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109,46111,46113,46115,46117,46119,46121,46123],{"class":53,"line":17720},[51,46080,35445],{"class":72},[51,46082,108],{"class":64},[51,46084,2134],{"class":72},[51,46086,35452],{"class":282},[51,46088,82],{"class":72},[51,46090,35457],{"class":282},[51,46092,82],{"class":72},[51,46094,35462],{"class":282},[51,46096,82],{"class":72},[51,46098,35467],{"class":282},[51,46100,82],{"class":72},[51,46102,35472],{"class":282},[51,46104,82],{"class":72},[51,46106,35477],{"class":282},[51,46108,82],{"class":72},[51,46110,35482],{"class":282},[51,46112,82],{"class":72},[51,46114,35487],{"class":282},[51,46116,82],{"class":72},[51,46118,35492],{"class":282},[51,46120,82],{"class":72},[51,46122,35497],{"class":282},[51,46124,34210],{"class":72},[51,46126,46127,46129],{"class":53,"line":17725},[51,46128,35142],{"class":64},[51,46130,33848],{"class":72},[51,46132,46133],{"class":53,"line":17731},[51,46134,35510],{"class":57},[51,46136,46137,46139,46141,46143],{"class":53,"line":17745},[51,46138,4480],{"class":64},[51,46140,35517],{"class":72},[51,46142,27007],{"class":64},[51,46144,35161],{"class":72},[51,46146,46147,46149,46151],{"class":53,"line":17758},[51,46148,33574],{"class":72},[51,46150,108],{"class":64},[51,46152,33579],{"class":72},[51,46154,46155,46157,46159],{"class":53,"line":17763},[51,46156,33589],{"class":72},[51,46158,108],{"class":64},[51,46160,33594],{"class":72},[51,46162,46163],{"class":53,"line":17777},[51,46164,3480],{"emptyLinePlaceholder":1192},[51,46166,46167],{"class":53,"line":17782},[51,46168,35546],{"class":57},[51,46170,46171],{"class":53,"line":17788},[51,46172,33839],{"class":72},[51,46174,46175],{"class":53,"line":17793},[51,46176,35555],{"class":57},[51,46178,46179,46181,46183],{"class":53,"line":17807},[51,46180,33624],{"class":72},[51,46182,108],{"class":64},[51,46184,33629],{"class":72},[51,46186,46187],{"class":53,"line":17812},[51,46188,35568],{"class":57},[51,46190,46191,46193,46195,46197,46199,46201,46203],{"class":53,"line":17817},[51,46192,33641],{"class":72},[51,46194,108],{"class":64},[51,46196,33646],{"class":72},[51,46198,33649],{"class":78},[51,46200,108],{"class":64},[51,46202,791],{"class":175},[51,46204,90],{"class":72},[51,46206,46207],{"class":53,"line":17831},[51,46208,35589],{"class":57},[51,46210,46211,46213,46215],{"class":53,"line":17843},[51,46212,35594],{"class":72},[51,46214,108],{"class":64},[51,46216,35599],{"class":72},[51,46218,46219,46221,46223],{"class":53,"line":17848},[51,46220,35604],{"class":72},[51,46222,108],{"class":64},[51,46224,35609],{"class":72},[51,46226,46227,46229,46231,46233,46235,46237,46239,46241],{"class":53,"line":17861},[51,46228,35614],{"class":175},[51,46230,73],{"class":72},[51,46232,35619],{"class":282},[51,46234,35622],{"class":72},[51,46236,35625],{"class":282},[51,46238,82],{"class":72},[51,46240,35630],{"class":282},[51,46242,35633],{"class":72},[1233,46244,46246],{"id":46245},"_24训练自己的数据集","2.4.训练自己的数据集",[40,46248,46249],{},"猫狗分类任务",[40,46251,46252],{},"划分数据集和验证集",[29,46254,46256],{"className":31342,"code":46255,"language":31344,"meta":35,"style":35},"# 创建脚本，用于划分数据集和验证集\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",[37,46257,46258,46263,46270,46275,46286,46293,46297,46307,46321,46330,46334,46339,46349,46369,46373,46378,46388,46399,46412,46416,46421,46430,46440,46451,46455,46460,46470,46474,46479,46484,46489,46494,46499,46503,46513,46540,46553,46565,46592,46597,46602,46616,46621,46633,46648,46663,46671,46675,46680,46686,46698,46711,46716,46721,46726,46776,46782,46786],{"__ignoreMap":35},[51,46259,46260],{"class":53,"line":54},[51,46261,46262],{"class":57},"# 创建脚本，用于划分数据集和验证集\n",[51,46264,46265,46267],{"class":53,"line":61},[51,46266,31356],{"class":64},[51,46268,46269],{"class":72}," os\n",[51,46271,46272],{"class":53,"line":93},[51,46273,46274],{"class":57},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[51,46276,46277,46279,46282,46284],{"class":53,"line":99},[51,46278,31701],{"class":64},[51,46280,46281],{"class":72}," shutil ",[51,46283,31356],{"class":64},[51,46285,32786],{"class":72},[51,46287,46288,46290],{"class":53,"line":120},[51,46289,31356],{"class":64},[51,46291,46292],{"class":72}," random\n",[51,46294,46295],{"class":53,"line":129},[51,46296,3480],{"emptyLinePlaceholder":1192},[51,46298,46299,46301,46304],{"class":53,"line":206},[51,46300,32911],{"class":64},[51,46302,46303],{"class":68}," mkfile",[51,46305,46306],{"class":72},"(file):\n",[51,46308,46309,46311,46313,46316,46319],{"class":53,"line":212},[51,46310,4178],{"class":64},[51,46312,39894],{"class":64},[51,46314,46315],{"class":72}," os.path.exists(",[51,46317,46318],{"class":78},"file",[51,46320,31750],{"class":72},[51,46322,46323,46326,46328],{"class":53,"line":227},[51,46324,46325],{"class":72},"        os.makedirs(",[51,46327,46318],{"class":78},[51,46329,90],{"class":72},[51,46331,46332],{"class":53,"line":370},[51,46333,3480],{"emptyLinePlaceholder":1192},[51,46335,46336],{"class":53,"line":387},[51,46337,46338],{"class":57},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[51,46340,46341,46344,46346],{"class":53,"line":404},[51,46342,46343],{"class":72},"file_path",[51,46345,108],{"class":64},[51,46347,46348],{"class":282},"'data_cat_dog'\n",[51,46350,46351,46354,46356,46359,46361,46364,46366],{"class":53,"line":415},[51,46352,46353],{"class":72},"flower_class",[51,46355,108],{"class":64},[51,46357,46358],{"class":72},"[cla ",[51,46360,4102],{"class":64},[51,46362,46363],{"class":72}," cla ",[51,46365,27007],{"class":64},[51,46367,46368],{"class":72}," os.listdir(file_path)]\n",[51,46370,46371],{"class":53,"line":420},[51,46372,3480],{"emptyLinePlaceholder":1192},[51,46374,46375],{"class":53,"line":429},[51,46376,46377],{"class":57},"# 创建训练集train文件夹\n",[51,46379,46380,46383,46386],{"class":53,"line":434},[51,46381,46382],{"class":72},"mkfile(",[51,46384,46385],{"class":282},"'data\u002Ftrain'",[51,46387,90],{"class":72},[51,46389,46390,46392,46394,46396],{"class":53,"line":448},[51,46391,4102],{"class":64},[51,46393,46363],{"class":72},[51,46395,27007],{"class":64},[51,46397,46398],{"class":72}," flower_class:\n",[51,46400,46401,46404,46407,46409],{"class":53,"line":462},[51,46402,46403],{"class":72},"    mkfile(",[51,46405,46406],{"class":282},"'data\u002Ftrain\u002F'",[51,46408,114],{"class":64},[51,46410,46411],{"class":72},"cla)\n",[51,46413,46414],{"class":53,"line":470},[51,46415,3480],{"emptyLinePlaceholder":1192},[51,46417,46418],{"class":53,"line":2783},[51,46419,46420],{"class":57},"# 创建验证集val文件夹\n",[51,46422,46423,46425,46428],{"class":53,"line":2788},[51,46424,46382],{"class":72},[51,46426,46427],{"class":282},"'data\u002Ftest'",[51,46429,90],{"class":72},[51,46431,46432,46434,46436,46438],{"class":53,"line":2817},[51,46433,4102],{"class":64},[51,46435,46363],{"class":72},[51,46437,27007],{"class":64},[51,46439,46398],{"class":72},[51,46441,46442,46444,46447,46449],{"class":53,"line":2822},[51,46443,46403],{"class":72},[51,46445,46446],{"class":282},"'data\u002Ftest\u002F'",[51,46448,114],{"class":64},[51,46450,46411],{"class":72},[51,46452,46453],{"class":53,"line":2839},[51,46454,3480],{"emptyLinePlaceholder":1192},[51,46456,46457],{"class":53,"line":2844},[51,46458,46459],{"class":57},"# 划分比例，训练集：测试集=9：1\n",[51,46461,46462,46465,46467],{"class":53,"line":2849},[51,46463,46464],{"class":72},"split_rate",[51,46466,108],{"class":64},[51,46468,46469],{"class":175},"0.1\n",[51,46471,46472],{"class":53,"line":2854},[51,46473,3480],{"emptyLinePlaceholder":1192},[51,46475,46476],{"class":53,"line":2868},[51,46477,46478],{"class":57},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[51,46480,46481],{"class":53,"line":2873},[51,46482,46483],{"class":57},"# cla_path：当前类别的原始图片路径\n",[51,46485,46486],{"class":53,"line":3657},[51,46487,46488],{"class":57},"# images：当前类别下所有图片的文件名列表\n",[51,46490,46491],{"class":53,"line":3671},[51,46492,46493],{"class":57},"# num：该类别图片总数\n",[51,46495,46496],{"class":53,"line":3679},[51,46497,46498],{"class":57},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[51,46500,46501],{"class":53,"line":3684},[51,46502,3480],{"emptyLinePlaceholder":1192},[51,46504,46505,46507,46509,46511],{"class":53,"line":3690},[51,46506,4102],{"class":64},[51,46508,46363],{"class":72},[51,46510,27007],{"class":64},[51,46512,46398],{"class":72},[51,46514,46515,46518,46520,46523,46525,46528,46531,46533,46535,46537],{"class":53,"line":3696},[51,46516,46517],{"class":72},"    cla_path ",[51,46519,108],{"class":64},[51,46521,46522],{"class":72}," file_path ",[51,46524,114],{"class":64},[51,46526,46527],{"class":282}," '\u002F'",[51,46529,46530],{"class":64}," +",[51,46532,46363],{"class":72},[51,46534,114],{"class":64},[51,46536,46527],{"class":282},[51,46538,46539],{"class":57},"  # 某一类别的子目录\n",[51,46541,46542,46545,46547,46550],{"class":53,"line":3701},[51,46543,46544],{"class":72},"    images ",[51,46546,108],{"class":64},[51,46548,46549],{"class":72}," os.listdir(cla_path)  ",[51,46551,46552],{"class":57},"# iamges 列表存储了该目录下所有图像的名称\n",[51,46554,46555,46558,46560,46562],{"class":53,"line":8910},[51,46556,46557],{"class":72},"    num ",[51,46559,108],{"class":64},[51,46561,8293],{"class":175},[51,46563,46564],{"class":72},"(images)\n",[51,46566,46567,46570,46572,46575,46577,46579,46581,46584,46586,46589],{"class":53,"line":8934},[51,46568,46569],{"class":72},"    eval_index ",[51,46571,108],{"class":64},[51,46573,46574],{"class":72}," random.sample(images, ",[51,46576,1739],{"class":78},[51,46578,108],{"class":64},[51,46580,65],{"class":175},[51,46582,46583],{"class":72},"(num ",[51,46585,1702],{"class":64},[51,46587,46588],{"class":72}," split_rate))  ",[51,46590,46591],{"class":57},"# 从images列表中随机抽取 k 个图像名称\n",[51,46593,46594],{"class":53,"line":8939},[51,46595,46596],{"class":57},"    # 遍历该类别下的所有图片\n",[51,46598,46599],{"class":53,"line":8945},[51,46600,46601],{"class":57},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[51,46603,46604,46606,46609,46611,46613],{"class":53,"line":8972},[51,46605,4278],{"class":64},[51,46607,46608],{"class":72}," index, image ",[51,46610,27007],{"class":64},[51,46612,32570],{"class":175},[51,46614,46615],{"class":72},"(images):\n",[51,46617,46618],{"class":53,"line":8977},[51,46619,46620],{"class":57},"        # eval_index 中保存验证集val的图像名称\n",[51,46622,46623,46625,46628,46630],{"class":53,"line":8983},[51,46624,3577],{"class":64},[51,46626,46627],{"class":72}," image ",[51,46629,27007],{"class":64},[51,46631,46632],{"class":72}," eval_index:\n",[51,46634,46635,46638,46640,46643,46645],{"class":53,"line":8995},[51,46636,46637],{"class":72},"            image_path ",[51,46639,108],{"class":64},[51,46641,46642],{"class":72}," cla_path ",[51,46644,114],{"class":64},[51,46646,46647],{"class":72}," image\n",[51,46649,46650,46653,46655,46658,46660],{"class":53,"line":9007},[51,46651,46652],{"class":72},"            new_path ",[51,46654,108],{"class":64},[51,46656,46657],{"class":282}," 'data\u002Ftest\u002F'",[51,46659,46530],{"class":64},[51,46661,46662],{"class":72}," cla\n",[51,46664,46665,46668],{"class":53,"line":9019},[51,46666,46667],{"class":72},"            copy(image_path, new_path)  ",[51,46669,46670],{"class":57},"# 将选中的图像复制到新路径\n",[51,46672,46673],{"class":53,"line":10678},[51,46674,3480],{"emptyLinePlaceholder":1192},[51,46676,46677],{"class":53,"line":10703},[51,46678,46679],{"class":57},"        # 其余的图像保存在训练集train中\n",[51,46681,46682,46684],{"class":53,"line":10726},[51,46683,3614],{"class":64},[51,46685,4816],{"class":72},[51,46687,46688,46690,46692,46694,46696],{"class":53,"line":10750},[51,46689,46637],{"class":72},[51,46691,108],{"class":64},[51,46693,46642],{"class":72},[51,46695,114],{"class":64},[51,46697,46647],{"class":72},[51,46699,46700,46702,46704,46707,46709],{"class":53,"line":10755},[51,46701,46652],{"class":72},[51,46703,108],{"class":64},[51,46705,46706],{"class":282}," 'data\u002Ftrain\u002F'",[51,46708,46530],{"class":64},[51,46710,46662],{"class":72},[51,46712,46713],{"class":53,"line":10760},[51,46714,46715],{"class":72},"            copy(image_path, new_path)\n",[51,46717,46718],{"class":53,"line":10765},[51,46719,46720],{"class":57},"            # 打印进度条信息\n",[51,46722,46723],{"class":53,"line":10774},[51,46724,46725],{"class":57},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[51,46727,46728,46730,46732,46734,46737,46739,46741,46744,46746,46748,46750,46753,46756,46758,46760,46763,46766,46768,46770,46773],{"class":53,"line":10779},[51,46729,33415],{"class":175},[51,46731,73],{"class":72},[51,46733,1503],{"class":282},[51,46735,46736],{"class":175},"\\r",[51,46738,2134],{"class":282},[51,46740,33423],{"class":175},[51,46742,46743],{"class":282},"] processing [",[51,46745,33423],{"class":175},[51,46747,1830],{"class":282},[51,46749,33423],{"class":175},[51,46751,46752],{"class":282},"]\"",[51,46754,46755],{"class":72},".format(cla, index ",[51,46757,114],{"class":64},[51,46759,26082],{"class":175},[51,46761,46762],{"class":72},", num), ",[51,46764,46765],{"class":78},"end",[51,46767,108],{"class":64},[51,46769,8614],{"class":282},[51,46771,46772],{"class":72},")  ",[51,46774,46775],{"class":57},"# processing bar\n",[51,46777,46778,46780],{"class":53,"line":10785},[51,46779,32263],{"class":175},[51,46781,154],{"class":72},[51,46783,46784],{"class":53,"line":10806},[51,46785,3480],{"emptyLinePlaceholder":1192},[51,46787,46788,46790,46792,46795],{"class":53,"line":10812},[51,46789,31379],{"class":175},[51,46791,73],{"class":72},[51,46793,46794],{"class":282},"\"processing done!\"",[51,46796,90],{"class":72},[40,46798,46799],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22960,46801,46803],{"id":46802},"_242模型代码","2.4.2.模型代码",[40,46805,46806],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[29,46808,46810],{"className":31342,"code":46809,"language":31344,"meta":35,"style":35},"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",[37,46811,46812,46818,46828,46838,46842,46858,46866,46880,46890,46894,46924,46928,46962,47008,47012,47046,47092,47096,47100,47134,47164,47168,47176,47190,47212,47234,47252,47256,47270,47274,47278,47294,47298,47306,47320,47330,47374,47378,47406,47410,47420,47448,47452,47488,47492,47520,47524,47534,47566,47598,47626,47630,47640,47672,47704,47736,47768,47800,47828,47832,47842,47874,47906,47918,47922,47934,47938,47942,47954,47962,47982,47986,47990,47994,47998,48002,48006,48020,48028,48036,48048,48062,48070,48074,48082,48092,48102,48112,48122,48132,48138,48142,48146,48158,48178,48186],{"__ignoreMap":35},[51,46813,46814,46816],{"class":53,"line":54},[51,46815,31356],{"class":64},[51,46817,31359],{"class":72},[51,46819,46820,46822,46824,46826],{"class":53,"line":61},[51,46821,31701],{"class":64},[51,46823,31704],{"class":72},[51,46825,31356],{"class":64},[51,46827,31709],{"class":72},[51,46829,46830,46832,46834,46836],{"class":53,"line":93},[51,46831,31701],{"class":64},[51,46833,31721],{"class":72},[51,46835,31356],{"class":64},[51,46837,31726],{"class":72},[51,46839,46840],{"class":53,"line":99},[51,46841,3480],{"emptyLinePlaceholder":1192},[51,46843,46844,46846,46848,46850,46852,46854,46856],{"class":53,"line":120},[51,46845,15656],{"class":64},[51,46847,42457],{"class":68},[51,46849,73],{"class":72},[51,46851,31742],{"class":68},[51,46853,1804],{"class":72},[51,46855,31747],{"class":68},[51,46857,31750],{"class":72},[51,46859,46860,46862,46864],{"class":53,"line":129},[51,46861,31765],{"class":64},[51,46863,31768],{"class":175},[51,46865,42476],{"class":72},[51,46867,46868,46870,46872,46874,46876,46878],{"class":53,"line":206},[51,46869,31781],{"class":175},[51,46871,42483],{"class":72},[51,46873,31787],{"class":175},[51,46875,31790],{"class":72},[51,46877,31793],{"class":175},[51,46879,154],{"class":72},[51,46881,46882,46884,46886,46888],{"class":53,"line":212},[51,46883,31809],{"class":175},[51,46885,35735],{"class":72},[51,46887,108],{"class":64},[51,46889,35740],{"class":72},[51,46891,46892],{"class":53,"line":227},[51,46893,42506],{"class":57},[51,46895,46896,46898,46900,46902,46904,46906,46908,46910,46912,46914,46916,46918,46920,46922],{"class":53,"line":370},[51,46897,31809],{"class":175},[51,46899,42513],{"class":72},[51,46901,108],{"class":64},[51,46903,31817],{"class":72},[51,46905,31820],{"class":78},[51,46907,108],{"class":64},[51,46909,42524],{"class":72},[51,46911,31829],{"class":78},[51,46913,108],{"class":64},[51,46915,42531],{"class":72},[51,46917,31838],{"class":78},[51,46919,108],{"class":64},[51,46921,791],{"class":175},[51,46923,90],{"class":72},[51,46925,46926],{"class":53,"line":387},[51,46927,42544],{"class":57},[51,46929,46930,46932,46934,46936,46938,46940,46942,46944,46946,46948,46950,46952,46954,46956,46958,46960],{"class":53,"line":404},[51,46931,31809],{"class":175},[51,46933,42551],{"class":72},[51,46935,108],{"class":64},[51,46937,31817],{"class":72},[51,46939,31820],{"class":78},[51,46941,108],{"class":64},[51,46943,42524],{"class":72},[51,46945,31829],{"class":78},[51,46947,108],{"class":64},[51,46949,42568],{"class":72},[51,46951,176],{"class":175},[51,46953,42573],{"class":72},[51,46955,31838],{"class":78},[51,46957,108],{"class":64},[51,46959,791],{"class":175},[51,46961,90],{"class":72},[51,46963,46964,46966,46968,46970,46972,46974,46976,46978,46980,46982,46984,46986,46988,46990,46992,46994,46996,46998,47000,47002,47004,47006],{"class":53,"line":415},[51,46965,31809],{"class":175},[51,46967,42588],{"class":72},[51,46969,108],{"class":64},[51,46971,31817],{"class":72},[51,46973,31820],{"class":78},[51,46975,108],{"class":64},[51,46977,42568],{"class":72},[51,46979,176],{"class":175},[51,46981,42573],{"class":72},[51,46983,31829],{"class":78},[51,46985,108],{"class":64},[51,46987,42568],{"class":72},[51,46989,791],{"class":175},[51,46991,42573],{"class":72},[51,46993,31838],{"class":78},[51,46995,108],{"class":64},[51,46997,1328],{"class":175},[51,46999,82],{"class":72},[51,47001,31847],{"class":78},[51,47003,108],{"class":64},[51,47005,791],{"class":175},[51,47007,90],{"class":72},[51,47009,47010],{"class":53,"line":420},[51,47011,42633],{"class":57},[51,47013,47014,47016,47018,47020,47022,47024,47026,47028,47030,47032,47034,47036,47038,47040,47042,47044],{"class":53,"line":429},[51,47015,31809],{"class":175},[51,47017,42640],{"class":72},[51,47019,108],{"class":64},[51,47021,31817],{"class":72},[51,47023,31820],{"class":78},[51,47025,108],{"class":64},[51,47027,42524],{"class":72},[51,47029,31829],{"class":78},[51,47031,108],{"class":64},[51,47033,42657],{"class":72},[51,47035,176],{"class":175},[51,47037,42573],{"class":72},[51,47039,31838],{"class":78},[51,47041,108],{"class":64},[51,47043,791],{"class":175},[51,47045,90],{"class":72},[51,47047,47048,47050,47052,47054,47056,47058,47060,47062,47064,47066,47068,47070,47072,47074,47076,47078,47080,47082,47084,47086,47088,47090],{"class":53,"line":434},[51,47049,31809],{"class":175},[51,47051,42676],{"class":72},[51,47053,108],{"class":64},[51,47055,31817],{"class":72},[51,47057,31820],{"class":78},[51,47059,108],{"class":64},[51,47061,42657],{"class":72},[51,47063,176],{"class":175},[51,47065,42573],{"class":72},[51,47067,31829],{"class":78},[51,47069,108],{"class":64},[51,47071,42657],{"class":72},[51,47073,791],{"class":175},[51,47075,42573],{"class":72},[51,47077,31838],{"class":78},[51,47079,108],{"class":64},[51,47081,1568],{"class":175},[51,47083,82],{"class":72},[51,47085,31847],{"class":78},[51,47087,108],{"class":64},[51,47089,1334],{"class":175},[51,47091,90],{"class":72},[51,47093,47094],{"class":53,"line":448},[51,47095,42721],{"class":57},[51,47097,47098],{"class":53,"line":462},[51,47099,42726],{"class":57},[51,47101,47102,47104,47106,47108,47110,47112,47114,47116,47118,47120,47122,47124,47126,47128,47130,47132],{"class":53,"line":470},[51,47103,31809],{"class":175},[51,47105,42733],{"class":72},[51,47107,108],{"class":64},[51,47109,35793],{"class":72},[51,47111,31838],{"class":78},[51,47113,108],{"class":64},[51,47115,1328],{"class":175},[51,47117,82],{"class":72},[51,47119,31893],{"class":78},[51,47121,108],{"class":64},[51,47123,791],{"class":175},[51,47125,82],{"class":72},[51,47127,31847],{"class":78},[51,47129,108],{"class":64},[51,47131,791],{"class":175},[51,47133,90],{"class":72},[51,47135,47136,47138,47140,47142,47144,47146,47148,47150,47152,47154,47156,47158,47160,47162],{"class":53,"line":2783},[51,47137,31809],{"class":175},[51,47139,42768],{"class":72},[51,47141,108],{"class":64},[51,47143,31817],{"class":72},[51,47145,31820],{"class":78},[51,47147,108],{"class":64},[51,47149,42524],{"class":72},[51,47151,31829],{"class":78},[51,47153,108],{"class":64},[51,47155,42785],{"class":72},[51,47157,31838],{"class":78},[51,47159,108],{"class":64},[51,47161,791],{"class":175},[51,47163,90],{"class":72},[51,47165,47166],{"class":53,"line":2788},[51,47167,3480],{"emptyLinePlaceholder":1192},[51,47169,47170,47172,47174],{"class":53,"line":2817},[51,47171,31765],{"class":64},[51,47173,32057],{"class":68},[51,47175,32060],{"class":72},[51,47177,47178,47180,47182,47184,47186,47188],{"class":53,"line":2822},[51,47179,42810],{"class":72},[51,47181,108],{"class":64},[51,47183,31787],{"class":175},[51,47185,36148],{"class":72},[51,47187,31787],{"class":175},[51,47189,42821],{"class":72},[51,47191,47192,47194,47196,47198,47200,47202,47204,47206,47208,47210],{"class":53,"line":2839},[51,47193,8047],{"class":72},[51,47195,108],{"class":64},[51,47197,31787],{"class":175},[51,47199,36148],{"class":72},[51,47201,31787],{"class":175},[51,47203,42836],{"class":72},[51,47205,31787],{"class":175},[51,47207,36148],{"class":72},[51,47209,31787],{"class":175},[51,47211,42845],{"class":72},[51,47213,47214,47216,47218,47220,47222,47224,47226,47228,47230,47232],{"class":53,"line":2844},[51,47215,42850],{"class":72},[51,47217,108],{"class":64},[51,47219,31787],{"class":175},[51,47221,36148],{"class":72},[51,47223,31787],{"class":175},[51,47225,42861],{"class":72},[51,47227,31787],{"class":175},[51,47229,36148],{"class":72},[51,47231,31787],{"class":175},[51,47233,42870],{"class":72},[51,47235,47236,47238,47240,47242,47244,47246,47248,47250],{"class":53,"line":2849},[51,47237,42875],{"class":72},[51,47239,108],{"class":64},[51,47241,31787],{"class":175},[51,47243,36148],{"class":72},[51,47245,31787],{"class":175},[51,47247,42886],{"class":72},[51,47249,31787],{"class":175},[51,47251,42891],{"class":72},[51,47253,47254],{"class":53,"line":2854},[51,47255,42896],{"class":57},[51,47257,47258,47260,47262,47264,47266,47268],{"class":53,"line":2868},[51,47259,15714],{"class":64},[51,47261,42903],{"class":72},[51,47263,33649],{"class":78},[51,47265,108],{"class":64},[51,47267,791],{"class":175},[51,47269,90],{"class":72},[51,47271,47272],{"class":53,"line":2873},[51,47273,3480],{"emptyLinePlaceholder":1192},[51,47275,47276],{"class":53,"line":3657},[51,47277,42924],{"class":57},[51,47279,47280,47282,47284,47286,47288,47290,47292],{"class":53,"line":3671},[51,47281,15656],{"class":64},[51,47283,42931],{"class":68},[51,47285,73],{"class":72},[51,47287,31742],{"class":68},[51,47289,1804],{"class":72},[51,47291,31747],{"class":68},[51,47293,31750],{"class":72},[51,47295,47296],{"class":53,"line":3679},[51,47297,42946],{"class":57},[51,47299,47300,47302,47304],{"class":53,"line":3684},[51,47301,31765],{"class":64},[51,47303,31768],{"class":175},[51,47305,42955],{"class":72},[51,47307,47308,47310,47312,47314,47316,47318],{"class":53,"line":3690},[51,47309,31781],{"class":175},[51,47311,42962],{"class":72},[51,47313,31787],{"class":175},[51,47315,31790],{"class":72},[51,47317,31793],{"class":175},[51,47319,154],{"class":72},[51,47321,47322,47324,47326,47328],{"class":53,"line":3696},[51,47323,31809],{"class":175},[51,47325,42977],{"class":72},[51,47327,108],{"class":64},[51,47329,38973],{"class":72},[51,47331,47332,47334,47336,47338,47340,47342,47344,47346,47348,47350,47352,47354,47356,47358,47360,47362,47364,47366,47368,47370,47372],{"class":53,"line":3701},[51,47333,38978],{"class":72},[51,47335,31820],{"class":78},[51,47337,108],{"class":64},[51,47339,1328],{"class":175},[51,47341,82],{"class":72},[51,47343,31829],{"class":78},[51,47345,108],{"class":64},[51,47347,1457],{"class":175},[51,47349,82],{"class":72},[51,47351,31838],{"class":78},[51,47353,108],{"class":64},[51,47355,1618],{"class":175},[51,47357,82],{"class":72},[51,47359,31893],{"class":78},[51,47361,108],{"class":64},[51,47363,1334],{"class":175},[51,47365,82],{"class":72},[51,47367,31847],{"class":78},[51,47369,108],{"class":64},[51,47371,1328],{"class":175},[51,47373,39011],{"class":72},[51,47375,47376],{"class":53,"line":8910},[51,47377,39016],{"class":72},[51,47379,47380,47382,47384,47386,47388,47390,47392,47394,47396,47398,47400,47402,47404],{"class":53,"line":8934},[51,47381,39061],{"class":72},[51,47383,31838],{"class":78},[51,47385,108],{"class":64},[51,47387,1328],{"class":175},[51,47389,82],{"class":72},[51,47391,31893],{"class":78},[51,47393,108],{"class":64},[51,47395,1334],{"class":175},[51,47397,82],{"class":72},[51,47399,31847],{"class":78},[51,47401,108],{"class":64},[51,47403,791],{"class":175},[51,47405,90],{"class":72},[51,47407,47408],{"class":53,"line":8939},[51,47409,39090],{"class":72},[51,47411,47412,47414,47416,47418],{"class":53,"line":8945},[51,47413,31809],{"class":175},[51,47415,43068],{"class":72},[51,47417,108],{"class":64},[51,47419,38973],{"class":72},[51,47421,47422,47424,47426,47428,47430,47432,47434,47436,47438,47440,47442,47444,47446],{"class":53,"line":8972},[51,47423,38978],{"class":72},[51,47425,31820],{"class":78},[51,47427,108],{"class":64},[51,47429,1457],{"class":175},[51,47431,82],{"class":72},[51,47433,31829],{"class":78},[51,47435,108],{"class":64},[51,47437,1457],{"class":175},[51,47439,82],{"class":72},[51,47441,31838],{"class":78},[51,47443,108],{"class":64},[51,47445,791],{"class":175},[51,47447,39011],{"class":72},[51,47449,47450],{"class":53,"line":8977},[51,47451,39016],{"class":72},[51,47453,47454,47456,47458,47460,47462,47464,47466,47468,47470,47472,47474,47476,47478,47480,47482,47484,47486],{"class":53,"line":8983},[51,47455,38978],{"class":72},[51,47457,31820],{"class":78},[51,47459,108],{"class":64},[51,47461,1457],{"class":175},[51,47463,82],{"class":72},[51,47465,31829],{"class":78},[51,47467,108],{"class":64},[51,47469,43123],{"class":175},[51,47471,82],{"class":72},[51,47473,31838],{"class":78},[51,47475,108],{"class":64},[51,47477,1328],{"class":175},[51,47479,82],{"class":72},[51,47481,31847],{"class":78},[51,47483,108],{"class":64},[51,47485,791],{"class":175},[51,47487,39011],{"class":72},[51,47489,47490],{"class":53,"line":8995},[51,47491,39016],{"class":72},[51,47493,47494,47496,47498,47500,47502,47504,47506,47508,47510,47512,47514,47516,47518],{"class":53,"line":9007},[51,47495,39061],{"class":72},[51,47497,31838],{"class":78},[51,47499,108],{"class":64},[51,47501,1328],{"class":175},[51,47503,82],{"class":72},[51,47505,31893],{"class":78},[51,47507,108],{"class":64},[51,47509,1334],{"class":175},[51,47511,82],{"class":72},[51,47513,31847],{"class":78},[51,47515,108],{"class":64},[51,47517,791],{"class":175},[51,47519,90],{"class":72},[51,47521,47522],{"class":53,"line":9019},[51,47523,39090],{"class":72},[51,47525,47526,47528,47530,47532],{"class":53,"line":10678},[51,47527,31809],{"class":175},[51,47529,43184],{"class":72},[51,47531,108],{"class":64},[51,47533,38973],{"class":72},[51,47535,47536,47538,47540,47542,47544,47546,47548,47550,47552,47554,47556,47558,47560,47562,47564],{"class":53,"line":10703},[51,47537,43193],{"class":72},[51,47539,43123],{"class":175},[51,47541,82],{"class":72},[51,47543,1457],{"class":175},[51,47545,43202],{"class":72},[51,47547,1463],{"class":175},[51,47549,82],{"class":72},[51,47551,33034],{"class":175},[51,47553,43211],{"class":72},[51,47555,1847],{"class":175},[51,47557,82],{"class":72},[51,47559,1451],{"class":175},[51,47561,43220],{"class":72},[51,47563,1451],{"class":175},[51,47565,39011],{"class":72},[51,47567,47568,47570,47572,47574,47576,47578,47580,47582,47584,47586,47588,47590,47592,47594,47596],{"class":53,"line":10726},[51,47569,43193],{"class":72},[51,47571,35834],{"class":175},[51,47573,82],{"class":72},[51,47575,33034],{"class":175},[51,47577,43202],{"class":72},[51,47579,33034],{"class":175},[51,47581,82],{"class":72},[51,47583,43123],{"class":175},[51,47585,43211],{"class":72},[51,47587,1451],{"class":175},[51,47589,82],{"class":72},[51,47591,1463],{"class":175},[51,47593,43220],{"class":72},[51,47595,1457],{"class":175},[51,47597,39011],{"class":72},[51,47599,47600,47602,47604,47606,47608,47610,47612,47614,47616,47618,47620,47622,47624],{"class":53,"line":10750},[51,47601,39061],{"class":72},[51,47603,31838],{"class":78},[51,47605,108],{"class":64},[51,47607,1328],{"class":175},[51,47609,82],{"class":72},[51,47611,31893],{"class":78},[51,47613,108],{"class":64},[51,47615,1334],{"class":175},[51,47617,82],{"class":72},[51,47619,31847],{"class":78},[51,47621,108],{"class":64},[51,47623,791],{"class":175},[51,47625,90],{"class":72},[51,47627,47628],{"class":53,"line":10755},[51,47629,39090],{"class":72},[51,47631,47632,47634,47636,47638],{"class":53,"line":10760},[51,47633,31809],{"class":175},[51,47635,43295],{"class":72},[51,47637,108],{"class":64},[51,47639,38973],{"class":72},[51,47641,47642,47644,47646,47648,47650,47652,47654,47656,47658,47660,47662,47664,47666,47668,47670],{"class":53,"line":10765},[51,47643,43193],{"class":72},[51,47645,43306],{"class":175},[51,47647,82],{"class":72},[51,47649,43123],{"class":175},[51,47651,43202],{"class":72},[51,47653,1463],{"class":175},[51,47655,82],{"class":72},[51,47657,43319],{"class":175},[51,47659,43211],{"class":72},[51,47661,1847],{"class":175},[51,47663,82],{"class":72},[51,47665,1853],{"class":175},[51,47667,43220],{"class":72},[51,47669,1457],{"class":175},[51,47671,39011],{"class":72},[51,47673,47674,47676,47678,47680,47682,47684,47686,47688,47690,47692,47694,47696,47698,47700,47702],{"class":53,"line":10774},[51,47675,43193],{"class":72},[51,47677,39421],{"class":175},[51,47679,82],{"class":72},[51,47681,22010],{"class":175},[51,47683,43202],{"class":72},[51,47685,1864],{"class":175},[51,47687,82],{"class":72},[51,47689,32465],{"class":175},[51,47691,43211],{"class":72},[51,47693,2045],{"class":175},[51,47695,82],{"class":72},[51,47697,1457],{"class":175},[51,47699,43220],{"class":72},[51,47701,1457],{"class":175},[51,47703,39011],{"class":72},[51,47705,47706,47708,47710,47712,47714,47716,47718,47720,47722,47724,47726,47728,47730,47732,47734],{"class":53,"line":10779},[51,47707,43193],{"class":72},[51,47709,39421],{"class":175},[51,47711,82],{"class":72},[51,47713,33034],{"class":175},[51,47715,43202],{"class":72},[51,47717,33034],{"class":175},[51,47719,82],{"class":72},[51,47721,35834],{"class":175},[51,47723,43211],{"class":72},[51,47725,2045],{"class":175},[51,47727,82],{"class":72},[51,47729,1457],{"class":175},[51,47731,43220],{"class":72},[51,47733,1457],{"class":175},[51,47735,39011],{"class":72},[51,47737,47738,47740,47742,47744,47746,47748,47750,47752,47754,47756,47758,47760,47762,47764,47766],{"class":53,"line":10785},[51,47739,43193],{"class":72},[51,47741,39421],{"class":175},[51,47743,82],{"class":72},[51,47745,1864],{"class":175},[51,47747,43202],{"class":72},[51,47749,33034],{"class":175},[51,47751,82],{"class":72},[51,47753,43416],{"class":175},[51,47755,43211],{"class":72},[51,47757,1451],{"class":175},[51,47759,82],{"class":72},[51,47761,1457],{"class":175},[51,47763,43220],{"class":72},[51,47765,1457],{"class":175},[51,47767,39011],{"class":72},[51,47769,47770,47772,47774,47776,47778,47780,47782,47784,47786,47788,47790,47792,47794,47796,47798],{"class":53,"line":10806},[51,47771,43193],{"class":72},[51,47773,43437],{"class":175},[51,47775,82],{"class":72},[51,47777,35834],{"class":175},[51,47779,43202],{"class":72},[51,47781,22010],{"class":175},[51,47783,82],{"class":72},[51,47785,43450],{"class":175},[51,47787,43211],{"class":72},[51,47789,1451],{"class":175},[51,47791,82],{"class":72},[51,47793,33034],{"class":175},[51,47795,43220],{"class":72},[51,47797,33034],{"class":175},[51,47799,39011],{"class":72},[51,47801,47802,47804,47806,47808,47810,47812,47814,47816,47818,47820,47822,47824,47826],{"class":53,"line":10812},[51,47803,39061],{"class":72},[51,47805,31838],{"class":78},[51,47807,108],{"class":64},[51,47809,1328],{"class":175},[51,47811,82],{"class":72},[51,47813,31893],{"class":78},[51,47815,108],{"class":64},[51,47817,1334],{"class":175},[51,47819,82],{"class":72},[51,47821,31847],{"class":78},[51,47823,108],{"class":64},[51,47825,791],{"class":175},[51,47827,90],{"class":72},[51,47829,47830],{"class":53,"line":10826},[51,47831,39090],{"class":72},[51,47833,47834,47836,47838,47840],{"class":53,"line":10832},[51,47835,31809],{"class":175},[51,47837,43503],{"class":72},[51,47839,108],{"class":64},[51,47841,38973],{"class":72},[51,47843,47844,47846,47848,47850,47852,47854,47856,47858,47860,47862,47864,47866,47868,47870,47872],{"class":53,"line":10859},[51,47845,43193],{"class":72},[51,47847,43514],{"class":175},[51,47849,82],{"class":72},[51,47851,35834],{"class":175},[51,47853,43202],{"class":72},[51,47855,22010],{"class":175},[51,47857,82],{"class":72},[51,47859,43450],{"class":175},[51,47861,43211],{"class":72},[51,47863,1451],{"class":175},[51,47865,82],{"class":72},[51,47867,33034],{"class":175},[51,47869,43220],{"class":72},[51,47871,33034],{"class":175},[51,47873,39011],{"class":72},[51,47875,47876,47878,47880,47882,47884,47886,47888,47890,47892,47894,47896,47898,47900,47902,47904],{"class":53,"line":10868},[51,47877,43193],{"class":72},[51,47879,43514],{"class":175},[51,47881,82],{"class":72},[51,47883,35904],{"class":175},[51,47885,43202],{"class":72},[51,47887,43123],{"class":175},[51,47889,82],{"class":72},[51,47891,35904],{"class":175},[51,47893,43211],{"class":72},[51,47895,1853],{"class":175},[51,47897,82],{"class":72},[51,47899,33034],{"class":175},[51,47901,43220],{"class":72},[51,47903,33034],{"class":175},[51,47905,39011],{"class":72},[51,47907,47908,47910,47912,47914,47916],{"class":53,"line":10874},[51,47909,43577],{"class":72},[51,47911,791],{"class":175},[51,47913,82],{"class":72},[51,47915,791],{"class":175},[51,47917,43586],{"class":72},[51,47919,47920],{"class":53,"line":10882},[51,47921,39754],{"class":72},[51,47923,47924,47926,47928,47930,47932],{"class":53,"line":10887},[51,47925,39759],{"class":72},[51,47927,43597],{"class":175},[51,47929,82],{"class":72},[51,47931,1334],{"class":175},[51,47933,90],{"class":72},[51,47935,47936],{"class":53,"line":17566},[51,47937,39090],{"class":72},[51,47939,47940],{"class":53,"line":17572},[51,47941,43612],{"class":57},[51,47943,47944,47946,47948,47950,47952],{"class":53,"line":17595},[51,47945,4480],{"class":64},[51,47947,39832],{"class":72},[51,47949,27007],{"class":64},[51,47951,39837],{"class":175},[51,47953,39840],{"class":72},[51,47955,47956,47958,47960],{"class":53,"line":17601},[51,47957,5716],{"class":64},[51,47959,39852],{"class":175},[51,47961,39855],{"class":72},[51,47963,47964,47966,47968,47970,47972,47974,47976,47978,47980],{"class":53,"line":17624},[51,47965,39865],{"class":72},[51,47967,43639],{"class":78},[51,47969,108],{"class":64},[51,47971,43644],{"class":282},[51,47973,82],{"class":72},[51,47975,39868],{"class":78},[51,47977,108],{"class":64},[51,47979,39873],{"class":282},[51,47981,90],{"class":72},[51,47983,47984],{"class":53,"line":17638},[51,47985,43659],{"class":57},[51,47987,47988],{"class":53,"line":17658},[51,47989,43664],{"class":57},[51,47991,47992],{"class":53,"line":17664},[51,47993,43669],{"class":57},[51,47995,47996],{"class":53,"line":17675},[51,47997,43674],{"class":57},[51,47999,48000],{"class":53,"line":17698},[51,48001,43679],{"class":57},[51,48003,48004],{"class":53,"line":17720},[51,48005,43684],{"class":57},[51,48007,48008,48010,48012,48014,48016,48018],{"class":53,"line":17725},[51,48009,39885],{"class":64},[51,48011,39888],{"class":72},[51,48013,39891],{"class":64},[51,48015,39894],{"class":64},[51,48017,39897],{"class":175},[51,48019,4816],{"class":72},[51,48021,48022,48024,48026],{"class":53,"line":17731},[51,48023,39909],{"class":72},[51,48025,176],{"class":175},[51,48027,90],{"class":72},[51,48029,48030,48032,48034],{"class":53,"line":17745},[51,48031,43711],{"class":64},[51,48033,39852],{"class":175},[51,48035,39928],{"class":72},[51,48037,48038,48040,48042,48044,48046],{"class":53,"line":17758},[51,48039,43720],{"class":72},[51,48041,176],{"class":175},[51,48043,82],{"class":72},[51,48045,39950],{"class":175},[51,48047,90],{"class":72},[51,48049,48050,48052,48054,48056,48058,48060],{"class":53,"line":17763},[51,48051,43733],{"class":64},[51,48053,39888],{"class":72},[51,48055,39891],{"class":64},[51,48057,39894],{"class":64},[51,48059,39897],{"class":175},[51,48061,4816],{"class":72},[51,48063,48064,48066,48068],{"class":53,"line":17777},[51,48065,43748],{"class":72},[51,48067,176],{"class":175},[51,48069,90],{"class":72},[51,48071,48072],{"class":53,"line":17782},[51,48073,36129],{"class":57},[51,48075,48076,48078,48080],{"class":53,"line":17788},[51,48077,31765],{"class":64},[51,48079,32057],{"class":68},[51,48081,32060],{"class":72},[51,48083,48084,48086,48088,48090],{"class":53,"line":17793},[51,48085,32065],{"class":72},[51,48087,108],{"class":64},[51,48089,31787],{"class":175},[51,48091,43775],{"class":72},[51,48093,48094,48096,48098,48100],{"class":53,"line":17807},[51,48095,32065],{"class":72},[51,48097,108],{"class":64},[51,48099,31787],{"class":175},[51,48101,43786],{"class":72},[51,48103,48104,48106,48108,48110],{"class":53,"line":17812},[51,48105,32065],{"class":72},[51,48107,108],{"class":64},[51,48109,31787],{"class":175},[51,48111,43797],{"class":72},[51,48113,48114,48116,48118,48120],{"class":53,"line":17817},[51,48115,32065],{"class":72},[51,48117,108],{"class":64},[51,48119,31787],{"class":175},[51,48121,43808],{"class":72},[51,48123,48124,48126,48128,48130],{"class":53,"line":17831},[51,48125,32065],{"class":72},[51,48127,108],{"class":64},[51,48129,31787],{"class":175},[51,48131,43819],{"class":72},[51,48133,48134,48136],{"class":53,"line":17843},[51,48135,15714],{"class":64},[51,48137,32173],{"class":72},[51,48139,48140],{"class":53,"line":17848},[51,48141,3480],{"emptyLinePlaceholder":1192},[51,48143,48144],{"class":53,"line":17861},[51,48145,43834],{"class":57},[51,48147,48148,48150,48152,48154,48156],{"class":53,"line":17866},[51,48149,2633],{"class":64},[51,48151,32184],{"class":175},[51,48153,4026],{"class":64},[51,48155,32189],{"class":282},[51,48157,4816],{"class":72},[51,48159,48160,48162,48164,48166,48168,48170,48172,48174,48176],{"class":53,"line":17871},[51,48161,32201],{"class":72},[51,48163,108],{"class":64},[51,48165,31415],{"class":72},[51,48167,32208],{"class":282},[51,48169,2794],{"class":64},[51,48171,32213],{"class":72},[51,48173,2791],{"class":64},[51,48175,31440],{"class":282},[51,48177,90],{"class":72},[51,48179,48180,48182,48184],{"class":53,"line":17876},[51,48181,32253],{"class":72},[51,48183,108],{"class":64},[51,48185,43875],{"class":72},[51,48187,48188,48190,48192,48194,48196,48198,48200,48202],{"class":53,"line":17889},[51,48189,32263],{"class":175},[51,48191,32266],{"class":72},[51,48193,791],{"class":175},[51,48195,82],{"class":72},[51,48197,32465],{"class":175},[51,48199,82],{"class":72},[51,48201,32465],{"class":175},[51,48203,32279],{"class":72},[22960,48205,48207],{"id":48206},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[40,48209,48210],{},"计算图片的均值与方差，用于训练中归一化处理操作",[29,48212,48214],{"className":31342,"code":48213,"language":31344,"meta":35,"style":35},"# 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",[37,48215,48216,48221,48234,48239,48245,48250,48260,48264,48269,48279,48283,48288,48298,48315,48319,48324,48336,48348,48379,48388,48398,48408,48412,48417,48432,48436,48441,48446,48451,48461,48466,48491,48495,48500,48515,48519,48532,48536,48541,48546,48551,48556,48561,48571,48581,48604,48612,48620,48628,48632,48644,48648,48653,48657,48661,48668,48688,48712,48719,48733,48738,48743,48747,48761,48765,48777],{"__ignoreMap":35},[51,48217,48218],{"class":53,"line":54},[51,48219,48220],{"class":57},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[51,48222,48223,48225,48228,48231],{"class":53,"line":61},[51,48224,31701],{"class":64},[51,48226,48227],{"class":175}," PIL",[51,48229,48230],{"class":64}," import",[51,48232,48233],{"class":72}," Image\n",[51,48235,48236],{"class":53,"line":93},[51,48237,48238],{"class":57},"# os 用来处理文件夹和文件路径\n",[51,48240,48241,48243],{"class":53,"line":99},[51,48242,31356],{"class":64},[51,48244,46269],{"class":72},[51,48246,48247],{"class":53,"line":120},[51,48248,48249],{"class":57},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[51,48251,48252,48254,48256,48258],{"class":53,"line":129},[51,48253,31356],{"class":64},[51,48255,32344],{"class":72},[51,48257,32347],{"class":64},[51,48259,32350],{"class":72},[51,48261,48262],{"class":53,"line":206},[51,48263,3480],{"emptyLinePlaceholder":1192},[51,48265,48266],{"class":53,"line":212},[51,48267,48268],{"class":57},"# 文件夹路径，包含所有图片文件\n",[51,48270,48271,48274,48276],{"class":53,"line":227},[51,48272,48273],{"class":72},"folder_path ",[51,48275,108],{"class":64},[51,48277,48278],{"class":282}," 'data_cat_dog'\n",[51,48280,48281],{"class":53,"line":370},[51,48282,3480],{"emptyLinePlaceholder":1192},[51,48284,48285],{"class":53,"line":387},[51,48286,48287],{"class":57},"# 初始化累积变量\n",[51,48289,48290,48293,48295],{"class":53,"line":404},[51,48291,48292],{"class":72},"total_pixels ",[51,48294,108],{"class":64},[51,48296,48297],{"class":175}," 0\n",[51,48299,48300,48303,48305,48308,48310,48312],{"class":53,"line":415},[51,48301,48302],{"class":72},"sum_normalized_pixel_values ",[51,48304,108],{"class":64},[51,48306,48307],{"class":72}," np.zeros(",[51,48309,1328],{"class":175},[51,48311,46772],{"class":72},[51,48313,48314],{"class":57},"# 如果是RGB图像，需要三个通道的均值和方差\n",[51,48316,48317],{"class":53,"line":420},[51,48318,3480],{"emptyLinePlaceholder":1192},[51,48320,48321],{"class":53,"line":429},[51,48322,48323],{"class":57},"# 遍历文件夹中的图片文件\n",[51,48325,48326,48328,48331,48333],{"class":53,"line":434},[51,48327,4102],{"class":64},[51,48329,48330],{"class":72}," root, dirs, files ",[51,48332,27007],{"class":64},[51,48334,48335],{"class":72}," os.walk(folder_path):\n",[51,48337,48338,48340,48343,48345],{"class":53,"line":448},[51,48339,4278],{"class":64},[51,48341,48342],{"class":72}," filename ",[51,48344,27007],{"class":64},[51,48346,48347],{"class":72}," files:\n",[51,48349,48350,48352,48355,48358,48360,48363,48365,48368,48370,48373,48376],{"class":53,"line":462},[51,48351,3577],{"class":64},[51,48353,48354],{"class":72}," filename.endswith((",[51,48356,48357],{"class":282},"'.jpg'",[51,48359,13397],{"class":72},[51,48361,48362],{"class":282},"'.jpeg'",[51,48364,13397],{"class":72},[51,48366,48367],{"class":282},"'.png'",[51,48369,13397],{"class":72},[51,48371,48372],{"class":282},"'.bmp'",[51,48374,48375],{"class":72},")):  ",[51,48377,48378],{"class":57},"# 可根据实际情况添加其他格式\n",[51,48380,48381,48383,48385],{"class":53,"line":470},[51,48382,46637],{"class":72},[51,48384,108],{"class":64},[51,48386,48387],{"class":72}," os.path.join(root, filename)\n",[51,48389,48390,48393,48395],{"class":53,"line":2783},[51,48391,48392],{"class":72},"            image ",[51,48394,108],{"class":64},[51,48396,48397],{"class":72}," Image.open(image_path)\n",[51,48399,48400,48403,48405],{"class":53,"line":2788},[51,48401,48402],{"class":72},"            image_array ",[51,48404,108],{"class":64},[51,48406,48407],{"class":72}," np.array(image)\n",[51,48409,48410],{"class":53,"line":2817},[51,48411,3480],{"emptyLinePlaceholder":1192},[51,48413,48414],{"class":53,"line":2822},[51,48415,48416],{"class":57},"            # 归一化像素值到0-1之间\n",[51,48418,48419,48422,48424,48427,48429],{"class":53,"line":2839},[51,48420,48421],{"class":72},"            normalized_image_array ",[51,48423,108],{"class":64},[51,48425,48426],{"class":72}," image_array ",[51,48428,1830],{"class":64},[51,48430,48431],{"class":175}," 255.0\n",[51,48433,48434],{"class":53,"line":2844},[51,48435,3480],{"emptyLinePlaceholder":1192},[51,48437,48438],{"class":53,"line":2849},[51,48439,48440],{"class":57},"            # print(image_path)\n",[51,48442,48443],{"class":53,"line":2854},[51,48444,48445],{"class":57},"            # print(normalized_image_array.shape)\n",[51,48447,48448],{"class":53,"line":2868},[51,48449,48450],{"class":57},"            # 累积归一化后的像素值和像素数量\n",[51,48452,48453,48456,48458],{"class":53,"line":2873},[51,48454,48455],{"class":72},"            total_pixels ",[51,48457,10439],{"class":64},[51,48459,48460],{"class":72}," normalized_image_array.size\n",[51,48462,48463],{"class":53,"line":3657},[51,48464,48465],{"class":57},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[51,48467,48468,48471,48473,48476,48479,48481,48483,48485,48487,48489],{"class":53,"line":3671},[51,48469,48470],{"class":72},"            sum_normalized_pixel_values ",[51,48472,10439],{"class":64},[51,48474,48475],{"class":72}," np.sum(normalized_image_array, ",[51,48477,48478],{"class":78},"axis",[51,48480,108],{"class":64},[51,48482,73],{"class":72},[51,48484,176],{"class":175},[51,48486,13397],{"class":72},[51,48488,791],{"class":175},[51,48490,31461],{"class":72},[51,48492,48493],{"class":53,"line":3679},[51,48494,3480],{"emptyLinePlaceholder":1192},[51,48496,48497],{"class":53,"line":3684},[51,48498,48499],{"class":57},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[51,48501,48502,48505,48507,48510,48512],{"class":53,"line":3690},[51,48503,48504],{"class":72},"mean ",[51,48506,108],{"class":64},[51,48508,48509],{"class":72}," sum_normalized_pixel_values ",[51,48511,1830],{"class":64},[51,48513,48514],{"class":72}," total_pixels\n",[51,48516,48517],{"class":53,"line":3696},[51,48518,3480],{"emptyLinePlaceholder":1192},[51,48520,48521,48524,48526,48528,48530],{"class":53,"line":3701},[51,48522,48523],{"class":72},"sum_squared_diff ",[51,48525,108],{"class":64},[51,48527,48307],{"class":72},[51,48529,1328],{"class":175},[51,48531,90],{"class":72},[51,48533,48534],{"class":53,"line":8910},[51,48535,3480],{"emptyLinePlaceholder":1192},[51,48537,48538],{"class":53,"line":8934},[51,48539,48540],{"class":57},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[51,48542,48543],{"class":53,"line":8939},[51,48544,48545],{"class":57},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[51,48547,48548],{"class":53,"line":8945},[51,48549,48550],{"class":57},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[51,48552,48553],{"class":53,"line":8972},[51,48554,48555],{"class":57},"# Image.open(image_path)：打开图片\n",[51,48557,48558],{"class":53,"line":8977},[51,48559,48560],{"class":57},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[51,48562,48563,48565,48567,48569],{"class":53,"line":8983},[51,48564,4102],{"class":64},[51,48566,48330],{"class":72},[51,48568,27007],{"class":64},[51,48570,48335],{"class":72},[51,48572,48573,48575,48577,48579],{"class":53,"line":8995},[51,48574,4278],{"class":64},[51,48576,48342],{"class":72},[51,48578,27007],{"class":64},[51,48580,48347],{"class":72},[51,48582,48583,48585,48587,48589,48591,48593,48595,48597,48599,48601],{"class":53,"line":9007},[51,48584,3577],{"class":64},[51,48586,48354],{"class":72},[51,48588,48357],{"class":282},[51,48590,13397],{"class":72},[51,48592,48362],{"class":282},[51,48594,13397],{"class":72},[51,48596,48367],{"class":282},[51,48598,13397],{"class":72},[51,48600,48372],{"class":282},[51,48602,48603],{"class":72},")):\n",[51,48605,48606,48608,48610],{"class":53,"line":9019},[51,48607,46637],{"class":72},[51,48609,108],{"class":64},[51,48611,48387],{"class":72},[51,48613,48614,48616,48618],{"class":53,"line":10678},[51,48615,48392],{"class":72},[51,48617,108],{"class":64},[51,48619,48397],{"class":72},[51,48621,48622,48624,48626],{"class":53,"line":10703},[51,48623,48402],{"class":72},[51,48625,108],{"class":64},[51,48627,48407],{"class":72},[51,48629,48630],{"class":53,"line":10726},[51,48631,48416],{"class":57},[51,48633,48634,48636,48638,48640,48642],{"class":53,"line":10750},[51,48635,48421],{"class":72},[51,48637,108],{"class":64},[51,48639,48426],{"class":72},[51,48641,1830],{"class":64},[51,48643,48431],{"class":175},[51,48645,48646],{"class":53,"line":10755},[51,48647,48445],{"class":57},[51,48649,48650],{"class":53,"line":10760},[51,48651,48652],{"class":57},"            # print(mean.shape)\n",[51,48654,48655],{"class":53,"line":10765},[51,48656,48440],{"class":57},[51,48658,48659],{"class":53,"line":10774},[51,48660,3480],{"emptyLinePlaceholder":1192},[51,48662,48663,48666],{"class":53,"line":10779},[51,48664,48665],{"class":64},"            try",[51,48667,4816],{"class":72},[51,48669,48670,48673,48675,48678,48680,48683,48685],{"class":53,"line":10785},[51,48671,48672],{"class":72},"                diff ",[51,48674,108],{"class":64},[51,48676,48677],{"class":72}," (normalized_image_array ",[51,48679,1778],{"class":64},[51,48681,48682],{"class":72}," mean) ",[51,48684,11623],{"class":64},[51,48686,48687],{"class":175}," 2\n",[51,48689,48690,48693,48695,48698,48700,48702,48704,48706,48708,48710],{"class":53,"line":10806},[51,48691,48692],{"class":72},"                sum_squared_diff ",[51,48694,10439],{"class":64},[51,48696,48697],{"class":72}," np.sum(diff, ",[51,48699,48478],{"class":78},[51,48701,108],{"class":64},[51,48703,73],{"class":72},[51,48705,176],{"class":175},[51,48707,13397],{"class":72},[51,48709,791],{"class":175},[51,48711,31461],{"class":72},[51,48713,48714,48717],{"class":53,"line":10812},[51,48715,48716],{"class":64},"            except",[51,48718,4816],{"class":72},[51,48720,48721,48724,48726,48728,48731],{"class":53,"line":10826},[51,48722,48723],{"class":175},"                print",[51,48725,73],{"class":72},[51,48727,1311],{"class":64},[51,48729,48730],{"class":282},"\"捕获到自定义异常\"",[51,48732,90],{"class":72},[51,48734,48735],{"class":53,"line":10832},[51,48736,48737],{"class":57},"            # diff = (normalized_image_array - mean) ** 2\n",[51,48739,48740],{"class":53,"line":10859},[51,48741,48742],{"class":57},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[51,48744,48745],{"class":53,"line":10868},[51,48746,3480],{"emptyLinePlaceholder":1192},[51,48748,48749,48752,48754,48757,48759],{"class":53,"line":10874},[51,48750,48751],{"class":72},"variance ",[51,48753,108],{"class":64},[51,48755,48756],{"class":72}," sum_squared_diff ",[51,48758,1830],{"class":64},[51,48760,48514],{"class":72},[51,48762,48763],{"class":53,"line":10882},[51,48764,3480],{"emptyLinePlaceholder":1192},[51,48766,48767,48769,48771,48774],{"class":53,"line":10887},[51,48768,31379],{"class":175},[51,48770,73],{"class":72},[51,48772,48773],{"class":282},"\"Mean:\"",[51,48775,48776],{"class":72},", mean)\n",[51,48778,48779,48781,48783,48786],{"class":53,"line":17566},[51,48780,31379],{"class":175},[51,48782,73],{"class":72},[51,48784,48785],{"class":282},"\"Variance:\"",[51,48787,48788],{"class":72},", variance)\n",[29,48790,48792],{"className":31342,"code":48791,"language":31344,"meta":35,"style":35},"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",[37,48793,48794,48800,48806,48816,48822,48832,48846,48856,48866,48876,48880,48890,48900,48904,48908,48916,48921,48926,48945,48949,48954,48959,48964,48969,49010,49015,49025,49030,49043,49048,49053,49058,49063,49068,49072,49077,49082,49104,49108,49140,49154,49164,49174,49178,49188,49202,49212,49222,49232,49238,49242,49246,49250,49254,49258,49266,49286,49290,49294,49298,49302,49318,49322,49326,49334,49338,49342,49350,49354,49358,49362,49370,49374,49378,49382,49390,49394,49402,49406,49414,49418,49426,49430,49438,49442,49446,49454,49458,49462,49474,49498,49512,49516,49520,49524,49532,49536,49544,49548,49556,49560,49568,49572,49580,49584,49592,49596,49608,49612,49620,49624,49632,49636,49640,49644,49648,49656,49660,49676,49680,49688,49692,49696,49700,49704,49708,49712,49716,49732,49736,49748,49752,49764,49768,49780,49784,49792,49796,49804,49808,49812,49816,49822,49826,49834,49838,49854,49858,49866,49870,49886,49898,49902,49914,49918,49922,49930,49934,49938,49946,49950,49958,49962,49970,49974,49978,50020,50062,50066,50070,50086,50090,50106,50110,50114,50122,50126,50130,50142,50180,50184,50188,50196,50200,50214,50224,50230,50236,50242,50248,50252,50256,50262,50266,50270,50278,50282,50300,50304,50308,50312,50328,50332,50336,50340,50344,50348,50368,50388,50392,50396,50400,50408,50416,50420,50436,50456,50476,50480,50485,50494,50503,50508,50513,50518,50531,50536,50545,50554,50571],{"__ignoreMap":35},[51,48795,48796,48798],{"class":53,"line":54},[51,48797,31356],{"class":64},[51,48799,32786],{"class":72},[51,48801,48802,48804],{"class":53,"line":61},[51,48803,31356],{"class":64},[51,48805,32793],{"class":72},[51,48807,48808,48810,48812,48814],{"class":53,"line":93},[51,48809,31356],{"class":64},[51,48811,32804],{"class":72},[51,48813,32347],{"class":64},[51,48815,32809],{"class":72},[51,48817,48818,48820],{"class":53,"line":99},[51,48819,31356],{"class":64},[51,48821,31359],{"class":72},[51,48823,48824,48826,48828,48830],{"class":53,"line":120},[51,48825,31701],{"class":64},[51,48827,32379],{"class":72},[51,48829,31356],{"class":64},[51,48831,32826],{"class":72},[51,48833,48834,48836,48838,48840,48843],{"class":53,"line":129},[51,48835,31701],{"class":64},[51,48837,32332],{"class":72},[51,48839,31356],{"class":64},[51,48841,48842],{"class":72}," ImageFolder ",[51,48844,48845],{"class":57},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[51,48847,48848,48850,48852,48854],{"class":53,"line":206},[51,48849,31701],{"class":64},[51,48851,32362],{"class":72},[51,48853,31356],{"class":64},[51,48855,32367],{"class":72},[51,48857,48858,48860,48862,48864],{"class":53,"line":212},[51,48859,31356],{"class":64},[51,48861,32379],{"class":72},[51,48863,32347],{"class":64},[51,48865,32384],{"class":72},[51,48867,48868,48870,48872,48874],{"class":53,"line":227},[51,48869,31356],{"class":64},[51,48871,32396],{"class":72},[51,48873,32347],{"class":64},[51,48875,32401],{"class":72},[51,48877,48878],{"class":53,"line":370},[51,48879,32871],{"class":57},[51,48881,48882,48884,48886,48888],{"class":53,"line":387},[51,48883,31701],{"class":64},[51,48885,32878],{"class":72},[51,48887,31356],{"class":64},[51,48889,43995],{"class":72},[51,48891,48892,48894,48896,48898],{"class":53,"line":404},[51,48893,31701],{"class":64},[51,48895,31704],{"class":72},[51,48897,31356],{"class":64},[51,48899,31709],{"class":72},[51,48901,48902],{"class":53,"line":415},[51,48903,3480],{"emptyLinePlaceholder":1192},[51,48905,48906],{"class":53,"line":420},[51,48907,32906],{"class":57},[51,48909,48910,48912,48914],{"class":53,"line":429},[51,48911,32911],{"class":64},[51,48913,32914],{"class":68},[51,48915,32917],{"class":72},[51,48917,48918],{"class":53,"line":434},[51,48919,48920],{"class":57},"    # 导入自己的数据集，并进行数据处理\n",[51,48922,48923],{"class":53,"line":448},[51,48924,48925],{"class":57},"    # 定义数据集的路径\n",[51,48927,48928,48931,48933,48935,48937,48939,48943],{"class":53,"line":462},[51,48929,48930],{"class":175},"    ROOT_PATH",[51,48932,108],{"class":64},[51,48934,1916],{"class":64},[51,48936,1503],{"class":282},[51,48938,1804],{"class":175},[51,48940,48942],{"class":48941},"sA_wV","\u002Fdata\u002Ftrain",[51,48944,26097],{"class":282},[51,48946,48947],{"class":53,"line":470},[51,48948,3480],{"emptyLinePlaceholder":1192},[51,48950,48951],{"class":53,"line":2783},[51,48952,48953],{"class":57},"    # 定义归一化方法\n",[51,48955,48956],{"class":53,"line":2788},[51,48957,48958],{"class":57},"    # 这里需要先计算一下数据集的均值和方差\n",[51,48960,48961],{"class":53,"line":2817},[51,48962,48963],{"class":57},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[51,48965,48966],{"class":53,"line":2822},[51,48967,48968],{"class":57},"    # 第一个参数是均值，第二个参数是方差\n",[51,48970,48971,48974,48976,48979,48982,48984,48987,48989,48992,48995,48998,49000,49003,49005,49008],{"class":53,"line":2839},[51,48972,48973],{"class":72},"    normalize",[51,48975,108],{"class":64},[51,48977,48978],{"class":72},"transforms.Normalize([",[51,48980,48981],{"class":175},"0.162",[51,48983,82],{"class":72},[51,48985,48986],{"class":175},"0.151",[51,48988,82],{"class":72},[51,48990,48991],{"class":175},"0.138",[51,48993,48994],{"class":72},"],[",[51,48996,48997],{"class":175},"0.058",[51,48999,82],{"class":72},[51,49001,49002],{"class":175},"0.052",[51,49004,82],{"class":72},[51,49006,49007],{"class":175},"0.048",[51,49009,5731],{"class":72},[51,49011,49012],{"class":53,"line":2844},[51,49013,49014],{"class":57},"    # 定义数据集处理方法变量\n",[51,49016,49017,49020,49022],{"class":53,"line":2849},[51,49018,49019],{"class":72},"    train_transform",[51,49021,108],{"class":64},[51,49023,49024],{"class":72},"transforms.Compose([\n",[51,49026,49027],{"class":53,"line":2854},[51,49028,49029],{"class":57},"        # 调整图像大小为224*224\n",[51,49031,49032,49035,49037,49039,49041],{"class":53,"line":2868},[51,49033,49034],{"class":72},"        transforms.Resize((",[51,49036,32465],{"class":175},[51,49038,82],{"class":72},[51,49040,32465],{"class":175},[51,49042,43586],{"class":72},[51,49044,49045],{"class":53,"line":2873},[51,49046,49047],{"class":57},"        # 将图像转换为张量\n",[51,49049,49050],{"class":53,"line":3657},[51,49051,49052],{"class":72},"        transforms.ToTensor(),\n",[51,49054,49055],{"class":53,"line":3671},[51,49056,49057],{"class":72},"        normalize])\n",[51,49059,49060],{"class":53,"line":3679},[51,49061,49062],{"class":57},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[51,49064,49065],{"class":53,"line":3684},[51,49066,49067],{"class":57},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[51,49069,49070],{"class":53,"line":3690},[51,49071,3480],{"emptyLinePlaceholder":1192},[51,49073,49074],{"class":53,"line":3696},[51,49075,49076],{"class":57},"    # 加载数据集\n",[51,49078,49079],{"class":53,"line":3701},[51,49080,49081],{"class":57},"    # 传入数据集路径与处理方法\n",[51,49083,49084,49086,49088,49091,49094,49096,49099,49101],{"class":53,"line":8910},[51,49085,32922],{"class":72},[51,49087,108],{"class":64},[51,49089,49090],{"class":72},"ImageFolder(",[51,49092,49093],{"class":175},"ROOT_PATH",[51,49095,82],{"class":72},[51,49097,49098],{"class":78},"transform",[51,49100,108],{"class":64},[51,49102,49103],{"class":72},"train_transform)\n",[51,49105,49106],{"class":53,"line":8934},[51,49107,3480],{"emptyLinePlaceholder":1192},[51,49109,49110,49112,49114,49116,49118,49120,49122,49124,49126,49128,49130,49132,49134,49136,49138],{"class":53,"line":8939},[51,49111,32974],{"class":72},[51,49113,108],{"class":64},[51,49115,32979],{"class":72},[51,49117,32982],{"class":175},[51,49119,73],{"class":72},[51,49121,32987],{"class":175},[51,49123,1702],{"class":64},[51,49125,8320],{"class":175},[51,49127,32994],{"class":72},[51,49129,32982],{"class":175},[51,49131,73],{"class":72},[51,49133,33001],{"class":175},[51,49135,1702],{"class":64},[51,49137,8320],{"class":175},[51,49139,33008],{"class":72},[51,49141,49142,49144,49146,49148,49150,49152],{"class":53,"line":8945},[51,49143,33013],{"class":72},[51,49145,108],{"class":64},[51,49147,33018],{"class":72},[51,49149,32501],{"class":78},[51,49151,108],{"class":64},[51,49153,32506],{"class":72},[51,49155,49156,49158,49160,49162],{"class":53,"line":8972},[51,49157,33029],{"class":78},[51,49159,108],{"class":64},[51,49161,1451],{"class":175},[51,49163,32430],{"class":72},[51,49165,49166,49168,49170,49172],{"class":53,"line":8977},[51,49167,33041],{"class":78},[51,49169,108],{"class":64},[51,49171,32440],{"class":175},[51,49173,32430],{"class":72},[51,49175,49176],{"class":53,"line":8983},[51,49177,33052],{"class":57},[51,49179,49180,49182,49184,49186],{"class":53,"line":8995},[51,49181,33057],{"class":78},[51,49183,108],{"class":64},[51,49185,1643],{"class":175},[51,49187,90],{"class":72},[51,49189,49190,49192,49194,49196,49198,49200],{"class":53,"line":9007},[51,49191,33068],{"class":72},[51,49193,108],{"class":64},[51,49195,32498],{"class":72},[51,49197,32501],{"class":78},[51,49199,108],{"class":64},[51,49201,33079],{"class":72},[51,49203,49204,49206,49208,49210],{"class":53,"line":9019},[51,49205,33084],{"class":78},[51,49207,108],{"class":64},[51,49209,1451],{"class":175},[51,49211,32430],{"class":72},[51,49213,49214,49216,49218,49220],{"class":53,"line":10678},[51,49215,33095],{"class":78},[51,49217,108],{"class":64},[51,49219,32440],{"class":175},[51,49221,32430],{"class":72},[51,49223,49224,49226,49228,49230],{"class":53,"line":10703},[51,49225,33106],{"class":78},[51,49227,108],{"class":64},[51,49229,1643],{"class":175},[51,49231,90],{"class":72},[51,49233,49234,49236],{"class":53,"line":10726},[51,49235,123],{"class":64},[51,49237,33119],{"class":72},[51,49239,49240],{"class":53,"line":10750},[51,49241,3480],{"emptyLinePlaceholder":1192},[51,49243,49244],{"class":53,"line":10755},[51,49245,33128],{"class":57},[51,49247,49248],{"class":53,"line":10760},[51,49249,33133],{"class":57},[51,49251,49252],{"class":53,"line":10765},[51,49253,3480],{"emptyLinePlaceholder":1192},[51,49255,49256],{"class":53,"line":10774},[51,49257,33142],{"class":57},[51,49259,49260,49262,49264],{"class":53,"line":10779},[51,49261,32911],{"class":64},[51,49263,33149],{"class":68},[51,49265,33152],{"class":72},[51,49267,49268,49270,49272,49274,49276,49278,49280,49282,49284],{"class":53,"line":10785},[51,49269,32201],{"class":72},[51,49271,108],{"class":64},[51,49273,31415],{"class":72},[51,49275,32208],{"class":282},[51,49277,2794],{"class":64},[51,49279,32213],{"class":72},[51,49281,2791],{"class":64},[51,49283,33171],{"class":282},[51,49285,90],{"class":72},[51,49287,49288],{"class":53,"line":10806},[51,49289,3480],{"emptyLinePlaceholder":1192},[51,49291,49292],{"class":53,"line":10812},[51,49293,33186],{"class":57},[51,49295,49296],{"class":53,"line":10826},[51,49297,33191],{"class":57},[51,49299,49300],{"class":53,"line":10832},[51,49301,33196],{"class":57},[51,49303,49304,49306,49308,49310,49312,49314,49316],{"class":53,"line":10859},[51,49305,33201],{"class":72},[51,49307,108],{"class":64},[51,49309,33206],{"class":72},[51,49311,33209],{"class":78},[51,49313,108],{"class":64},[51,49315,33214],{"class":175},[51,49317,90],{"class":72},[51,49319,49320],{"class":53,"line":10868},[51,49321,3480],{"emptyLinePlaceholder":1192},[51,49323,49324],{"class":53,"line":10874},[51,49325,33225],{"class":57},[51,49327,49328,49330,49332],{"class":53,"line":10882},[51,49329,33230],{"class":72},[51,49331,108],{"class":64},[51,49333,33235],{"class":72},[51,49335,49336],{"class":53,"line":10887},[51,49337,3480],{"emptyLinePlaceholder":1192},[51,49339,49340],{"class":53,"line":17566},[51,49341,33244],{"class":57},[51,49343,49344,49346,49348],{"class":53,"line":17572},[51,49345,32253],{"class":72},[51,49347,108],{"class":64},[51,49349,33253],{"class":72},[51,49351,49352],{"class":53,"line":17595},[51,49353,33258],{"class":57},[51,49355,49356],{"class":53,"line":17601},[51,49357,33263],{"class":57},[51,49359,49360],{"class":53,"line":17624},[51,49361,33268],{"class":57},[51,49363,49364,49366,49368],{"class":53,"line":17638},[51,49365,33273],{"class":72},[51,49367,108],{"class":64},[51,49369,33278],{"class":72},[51,49371,49372],{"class":53,"line":17658},[51,49373,3480],{"emptyLinePlaceholder":1192},[51,49375,49376],{"class":53,"line":17664},[51,49377,33291],{"class":57},[51,49379,49380],{"class":53,"line":17675},[51,49381,33296],{"class":57},[51,49383,49384,49386,49388],{"class":53,"line":17698},[51,49385,33301],{"class":72},[51,49387,108],{"class":64},[51,49389,33306],{"class":175},[51,49391,49392],{"class":53,"line":17720},[51,49393,33311],{"class":57},[51,49395,49396,49398,49400],{"class":53,"line":17725},[51,49397,33316],{"class":72},[51,49399,108],{"class":64},[51,49401,33321],{"class":72},[51,49403,49404],{"class":53,"line":17731},[51,49405,33326],{"class":57},[51,49407,49408,49410,49412],{"class":53,"line":17745},[51,49409,33331],{"class":72},[51,49411,108],{"class":64},[51,49413,33321],{"class":72},[51,49415,49416],{"class":53,"line":17758},[51,49417,33340],{"class":57},[51,49419,49420,49422,49424],{"class":53,"line":17763},[51,49421,33345],{"class":72},[51,49423,108],{"class":64},[51,49425,33321],{"class":72},[51,49427,49428],{"class":53,"line":17777},[51,49429,33354],{"class":57},[51,49431,49432,49434,49436],{"class":53,"line":17782},[51,49433,33359],{"class":72},[51,49435,108],{"class":64},[51,49437,33321],{"class":72},[51,49439,49440],{"class":53,"line":17788},[51,49441,3480],{"emptyLinePlaceholder":1192},[51,49443,49444],{"class":53,"line":17793},[51,49445,33372],{"class":57},[51,49447,49448,49450,49452],{"class":53,"line":17807},[51,49449,33377],{"class":72},[51,49451,108],{"class":64},[51,49453,33382],{"class":72},[51,49455,49456],{"class":53,"line":17812},[51,49457,3480],{"emptyLinePlaceholder":1192},[51,49459,49460],{"class":53,"line":17817},[51,49461,33395],{"class":57},[51,49463,49464,49466,49468,49470,49472],{"class":53,"line":17831},[51,49465,4278],{"class":64},[51,49467,33402],{"class":72},[51,49469,27007],{"class":64},[51,49471,33407],{"class":175},[51,49473,33410],{"class":72},[51,49475,49476,49478,49480,49482,49484,49486,49488,49490,49492,49494,49496],{"class":53,"line":17843},[51,49477,33415],{"class":175},[51,49479,73],{"class":72},[51,49481,33420],{"class":282},[51,49483,33423],{"class":175},[51,49485,1830],{"class":282},[51,49487,33423],{"class":175},[51,49489,1503],{"class":282},[51,49491,33432],{"class":72},[51,49493,1778],{"class":64},[51,49495,791],{"class":175},[51,49497,31461],{"class":72},[51,49499,49500,49502,49504,49506,49508,49510],{"class":53,"line":17848},[51,49501,33415],{"class":175},[51,49503,73],{"class":72},[51,49505,33447],{"class":282},[51,49507,1702],{"class":64},[51,49509,443],{"class":175},[51,49511,90],{"class":72},[51,49513,49514],{"class":53,"line":17861},[51,49515,3480],{"emptyLinePlaceholder":1192},[51,49517,49518],{"class":53,"line":17866},[51,49519,33462],{"class":57},[51,49521,49522],{"class":53,"line":17871},[51,49523,33467],{"class":57},[51,49525,49526,49528,49530],{"class":53,"line":17876},[51,49527,33472],{"class":72},[51,49529,108],{"class":64},[51,49531,33306],{"class":175},[51,49533,49534],{"class":53,"line":17889},[51,49535,33481],{"class":57},[51,49537,49538,49540,49542],{"class":53,"line":17894},[51,49539,33486],{"class":72},[51,49541,108],{"class":64},[51,49543,4162],{"class":175},[51,49545,49546],{"class":53,"line":33597},[51,49547,33495],{"class":57},[51,49549,49550,49552,49554],{"class":53,"line":33603},[51,49551,33500],{"class":72},[51,49553,108],{"class":64},[51,49555,33306],{"class":175},[51,49557,49558],{"class":53,"line":33609},[51,49559,33509],{"class":57},[51,49561,49562,49564,49566],{"class":53,"line":33615},[51,49563,33514],{"class":72},[51,49565,108],{"class":64},[51,49567,4162],{"class":175},[51,49569,49570],{"class":53,"line":33621},[51,49571,33523],{"class":57},[51,49573,49574,49576,49578],{"class":53,"line":33632},[51,49575,33528],{"class":72},[51,49577,108],{"class":64},[51,49579,4162],{"class":175},[51,49581,49582],{"class":53,"line":33638},[51,49583,33537],{"class":57},[51,49585,49586,49588,49590],{"class":53,"line":33658},[51,49587,33542],{"class":72},[51,49589,108],{"class":64},[51,49591,4162],{"class":175},[51,49593,49594],{"class":53,"line":33664},[51,49595,33551],{"class":57},[51,49597,49598,49600,49602,49604,49606],{"class":53,"line":33675},[51,49599,4480],{"class":64},[51,49601,32565],{"class":72},[51,49603,27007],{"class":64},[51,49605,32570],{"class":175},[51,49607,33564],{"class":72},[51,49609,49610],{"class":53,"line":33681},[51,49611,33569],{"class":57},[51,49613,49614,49616,49618],{"class":53,"line":33687},[51,49615,33574],{"class":72},[51,49617,108],{"class":64},[51,49619,33579],{"class":72},[51,49621,49622],{"class":53,"line":33693},[51,49623,33584],{"class":57},[51,49625,49626,49628,49630],{"class":53,"line":33699},[51,49627,33589],{"class":72},[51,49629,108],{"class":64},[51,49631,33594],{"class":72},[51,49633,49634],{"class":53,"line":33705},[51,49635,33600],{"class":57},[51,49637,49638],{"class":53,"line":33711},[51,49639,33606],{"class":72},[51,49641,49642],{"class":53,"line":33717},[51,49643,33612],{"class":57},[51,49645,49646],{"class":53,"line":33737},[51,49647,33618],{"class":57},[51,49649,49650,49652,49654],{"class":53,"line":33743},[51,49651,33624],{"class":72},[51,49653,108],{"class":64},[51,49655,33629],{"class":72},[51,49657,49658],{"class":53,"line":33759},[51,49659,33635],{"class":57},[51,49661,49662,49664,49666,49668,49670,49672,49674],{"class":53,"line":33765},[51,49663,33641],{"class":72},[51,49665,108],{"class":64},[51,49667,33646],{"class":72},[51,49669,33649],{"class":78},[51,49671,108],{"class":64},[51,49673,791],{"class":175},[51,49675,90],{"class":72},[51,49677,49678],{"class":53,"line":33779},[51,49679,33661],{"class":57},[51,49681,49682,49684,49686],{"class":53,"line":33785},[51,49683,33667],{"class":72},[51,49685,108],{"class":64},[51,49687,33672],{"class":72},[51,49689,49690],{"class":53,"line":33800},[51,49691,33678],{"class":57},[51,49693,49694],{"class":53,"line":33806},[51,49695,33684],{"class":72},[51,49697,49698],{"class":53,"line":33815},[51,49699,33690],{"class":57},[51,49701,49702],{"class":53,"line":33821},[51,49703,33696],{"class":72},[51,49705,49706],{"class":53,"line":33830},[51,49707,33702],{"class":57},[51,49709,49710],{"class":53,"line":33836},[51,49711,33708],{"class":72},[51,49713,49714],{"class":53,"line":33842},[51,49715,33714],{"class":57},[51,49717,49718,49720,49722,49724,49726,49728,49730],{"class":53,"line":33851},[51,49719,33720],{"class":72},[51,49721,10439],{"class":64},[51,49723,33725],{"class":72},[51,49725,1702],{"class":64},[51,49727,33730],{"class":72},[51,49729,176],{"class":175},[51,49731,90],{"class":72},[51,49733,49734],{"class":53,"line":33857},[51,49735,33740],{"class":57},[51,49737,49738,49740,49742,49744,49746],{"class":53,"line":33868},[51,49739,33746],{"class":72},[51,49741,10439],{"class":64},[51,49743,33751],{"class":72},[51,49745,4026],{"class":64},[51,49747,33756],{"class":72},[51,49749,49750],{"class":53,"line":33874},[51,49751,33762],{"class":57},[51,49753,49754,49756,49758,49760,49762],{"class":53,"line":33893},[51,49755,33768],{"class":72},[51,49757,10439],{"class":64},[51,49759,33730],{"class":72},[51,49761,176],{"class":175},[51,49763,90],{"class":72},[51,49765,49766],{"class":53,"line":33899},[51,49767,33782],{"class":57},[51,49769,49770,49772,49774,49776,49778],{"class":53,"line":33910},[51,49771,4480],{"class":64},[51,49773,33790],{"class":72},[51,49775,27007],{"class":64},[51,49777,32570],{"class":175},[51,49779,33797],{"class":72},[51,49781,49782],{"class":53,"line":33916},[51,49783,33803],{"class":57},[51,49785,49786,49788,49790],{"class":53,"line":33936},[51,49787,33574],{"class":72},[51,49789,108],{"class":64},[51,49791,33579],{"class":72},[51,49793,49794],{"class":53,"line":33952},[51,49795,33818],{"class":57},[51,49797,49798,49800,49802],{"class":53,"line":33958},[51,49799,33589],{"class":72},[51,49801,108],{"class":64},[51,49803,33594],{"class":72},[51,49805,49806],{"class":53,"line":33972},[51,49807,33833],{"class":57},[51,49809,49810],{"class":53,"line":33978},[51,49811,33839],{"class":72},[51,49813,49814],{"class":53,"line":33984},[51,49815,37320],{"class":57},[51,49817,49818,49820],{"class":53,"line":33995},[51,49819,33845],{"class":64},[51,49821,33848],{"class":72},[51,49823,49824],{"class":53,"line":34001},[51,49825,33854],{"class":57},[51,49827,49828,49830,49832],{"class":53,"line":34007},[51,49829,37335],{"class":72},[51,49831,108],{"class":64},[51,49833,33629],{"class":72},[51,49835,49836],{"class":53,"line":34017},[51,49837,33871],{"class":57},[51,49839,49840,49842,49844,49846,49848,49850,49852],{"class":53,"line":34023},[51,49841,37348],{"class":72},[51,49843,108],{"class":64},[51,49845,33646],{"class":72},[51,49847,33649],{"class":78},[51,49849,108],{"class":64},[51,49851,791],{"class":175},[51,49853,90],{"class":72},[51,49855,49856],{"class":53,"line":34034},[51,49857,33896],{"class":57},[51,49859,49860,49862,49864],{"class":53,"line":34040},[51,49861,37369],{"class":72},[51,49863,108],{"class":64},[51,49865,33672],{"class":72},[51,49867,49868],{"class":53,"line":34050},[51,49869,33913],{"class":57},[51,49871,49872,49874,49876,49878,49880,49882,49884],{"class":53,"line":34055},[51,49873,37382],{"class":72},[51,49875,10439],{"class":64},[51,49877,37387],{"class":72},[51,49879,1702],{"class":64},[51,49881,33730],{"class":72},[51,49883,176],{"class":175},[51,49885,90],{"class":72},[51,49887,49888,49890,49892,49894,49896],{"class":53,"line":34061},[51,49889,37400],{"class":72},[51,49891,10439],{"class":64},[51,49893,33751],{"class":72},[51,49895,4026],{"class":64},[51,49897,33756],{"class":72},[51,49899,49900],{"class":53,"line":34110},[51,49901,37413],{"class":57},[51,49903,49904,49906,49908,49910,49912],{"class":53,"line":34157},[51,49905,37418],{"class":72},[51,49907,10439],{"class":64},[51,49909,33730],{"class":72},[51,49911,176],{"class":175},[51,49913,90],{"class":72},[51,49915,49916],{"class":53,"line":34162},[51,49917,33975],{"class":57},[51,49919,49920],{"class":53,"line":34168},[51,49921,33981],{"class":57},[51,49923,49924,49926,49928],{"class":53,"line":34187},[51,49925,33987],{"class":72},[51,49927,1830],{"class":64},[51,49929,33992],{"class":72},[51,49931,49932],{"class":53,"line":34193},[51,49933,33998],{"class":57},[51,49935,49936],{"class":53,"line":34213},[51,49937,34004],{"class":57},[51,49939,49940,49942,49944],{"class":53,"line":34219},[51,49941,34010],{"class":72},[51,49943,1830],{"class":64},[51,49945,33992],{"class":72},[51,49947,49948],{"class":53,"line":34225},[51,49949,34020],{"class":57},[51,49951,49952,49954,49956],{"class":53,"line":34235},[51,49953,34026],{"class":72},[51,49955,1830],{"class":64},[51,49957,34031],{"class":72},[51,49959,49960],{"class":53,"line":34240},[51,49961,34037],{"class":57},[51,49963,49964,49966,49968],{"class":53,"line":34246},[51,49965,34043],{"class":72},[51,49967,1830],{"class":64},[51,49969,34031],{"class":72},[51,49971,49972],{"class":53,"line":34262},[51,49973,3480],{"emptyLinePlaceholder":1192},[51,49975,49976],{"class":53,"line":34307},[51,49977,34058],{"class":57},[51,49979,49980,49982,49984,49986,49988,49990,49992,49994,49996,49998,50000,50002,50004,50006,50008,50010,50012,50014,50016,50018],{"class":53,"line":34313},[51,49981,33415],{"class":175},[51,49983,73],{"class":72},[51,49985,4669],{"class":282},[51,49987,33423],{"class":175},[51,49989,34072],{"class":282},[51,49991,2140],{"class":175},[51,49993,34077],{"class":64},[51,49995,2190],{"class":175},[51,49997,34082],{"class":282},[51,49999,2140],{"class":175},[51,50001,34077],{"class":64},[51,50003,2190],{"class":175},[51,50005,4669],{"class":282},[51,50007,34093],{"class":72},[51,50009,1778],{"class":64},[51,50011,791],{"class":175},[51,50013,34100],{"class":72},[51,50015,1778],{"class":64},[51,50017,791],{"class":175},[51,50019,34107],{"class":72},[51,50021,50022,50024,50026,50028,50030,50032,50034,50036,50038,50040,50042,50044,50046,50048,50050,50052,50054,50056,50058,50060],{"class":53,"line":34319},[51,50023,33415],{"class":175},[51,50025,73],{"class":72},[51,50027,4669],{"class":282},[51,50029,33423],{"class":175},[51,50031,34121],{"class":282},[51,50033,2140],{"class":175},[51,50035,34077],{"class":64},[51,50037,2190],{"class":175},[51,50039,34130],{"class":282},[51,50041,2140],{"class":175},[51,50043,34077],{"class":64},[51,50045,2190],{"class":175},[51,50047,4669],{"class":282},[51,50049,34141],{"class":72},[51,50051,1778],{"class":64},[51,50053,791],{"class":175},[51,50055,34148],{"class":72},[51,50057,1778],{"class":64},[51,50059,791],{"class":175},[51,50061,34107],{"class":72},[51,50063,50064],{"class":53,"line":34325},[51,50065,3480],{"emptyLinePlaceholder":1192},[51,50067,50068],{"class":53,"line":34336},[51,50069,34165],{"class":57},[51,50071,50072,50074,50076,50078,50080,50082,50084],{"class":53,"line":34342},[51,50073,3577],{"class":64},[51,50075,34173],{"class":72},[51,50077,1778],{"class":64},[51,50079,791],{"class":175},[51,50081,2184],{"class":72},[51,50083,972],{"class":64},[51,50085,34184],{"class":72},[51,50087,50088],{"class":53,"line":34348},[51,50089,34190],{"class":57},[51,50091,50092,50094,50096,50098,50100,50102,50104],{"class":53,"line":34354},[51,50093,34196],{"class":72},[51,50095,1300],{"class":175},[51,50097,108],{"class":64},[51,50099,34203],{"class":72},[51,50101,1778],{"class":64},[51,50103,791],{"class":175},[51,50105,34210],{"class":72},[51,50107,50108],{"class":53,"line":34372},[51,50109,34216],{"class":57},[51,50111,50112],{"class":53,"line":34386},[51,50113,34222],{"class":57},[51,50115,50116,50118,50120],{"class":53,"line":34395},[51,50117,34228],{"class":72},[51,50119,108],{"class":64},[51,50121,33278],{"class":72},[51,50123,50124],{"class":53,"line":34404},[51,50125,3480],{"emptyLinePlaceholder":1192},[51,50127,50128],{"class":53,"line":34413},[51,50129,34243],{"class":57},[51,50131,50132,50134,50136,50138,50140],{"class":53,"line":34422},[51,50133,34249],{"class":72},[51,50135,108],{"class":64},[51,50137,34254],{"class":72},[51,50139,1778],{"class":64},[51,50141,34259],{"class":72},[51,50143,50144,50146,50148,50150,50152,50154,50156,50158,50160,50162,50164,50166,50168,50170,50172,50174,50176,50178],{"class":53,"line":34428},[51,50145,33415],{"class":175},[51,50147,73],{"class":72},[51,50149,34269],{"class":282},[51,50151,2140],{"class":175},[51,50153,34274],{"class":64},[51,50155,2190],{"class":175},[51,50157,1790],{"class":282},[51,50159,2140],{"class":175},[51,50161,34274],{"class":64},[51,50163,2190],{"class":175},[51,50165,34287],{"class":282},[51,50167,34290],{"class":72},[51,50169,34293],{"class":64},[51,50171,2151],{"class":175},[51,50173,34298],{"class":72},[51,50175,1577],{"class":64},[51,50177,2151],{"class":175},[51,50179,31461],{"class":72},[51,50181,50182],{"class":53,"line":34434},[51,50183,37697],{"class":57},[51,50185,50186],{"class":53,"line":34442},[51,50187,37702],{"class":57},[51,50189,50190,50192,50194],{"class":53,"line":34447},[51,50191,37707],{"class":72},[51,50193,34331],{"class":282},[51,50195,90],{"class":72},[51,50197,50198],{"class":53,"line":34453},[51,50199,34351],{"class":57},[51,50201,50202,50204,50206,50208,50210,50212],{"class":53,"line":34464},[51,50203,34357],{"class":72},[51,50205,108],{"class":64},[51,50207,34362],{"class":72},[51,50209,34365],{"class":78},[51,50211,108],{"class":64},[51,50213,96],{"class":72},[51,50215,50216,50218,50220,50222],{"class":53,"line":34470},[51,50217,34375],{"class":282},[51,50219,984],{"class":72},[51,50221,34380],{"class":175},[51,50223,34383],{"class":72},[51,50225,50226,50228],{"class":53,"line":34490},[51,50227,34389],{"class":282},[51,50229,34392],{"class":72},[51,50231,50232,50234],{"class":53,"line":34496},[51,50233,34398],{"class":282},[51,50235,34401],{"class":72},[51,50237,50238,50240],{"class":53,"line":34502},[51,50239,34407],{"class":282},[51,50241,34410],{"class":72},[51,50243,50244,50246],{"class":53,"line":34508},[51,50245,34416],{"class":282},[51,50247,34419],{"class":72},[51,50249,50250],{"class":53,"line":34525},[51,50251,34425],{"class":72},[51,50253,50254],{"class":53,"line":34531},[51,50255,34431],{"class":57},[51,50257,50258,50260],{"class":53,"line":34537},[51,50259,123],{"class":64},[51,50261,34439],{"class":72},[51,50263,50264],{"class":53,"line":34543},[51,50265,3480],{"emptyLinePlaceholder":1192},[51,50267,50268],{"class":53,"line":34549},[51,50269,34450],{"class":57},[51,50271,50272,50274,50276],{"class":53,"line":34555},[51,50273,32911],{"class":64},[51,50275,34458],{"class":68},[51,50277,34461],{"class":72},[51,50279,50280],{"class":53,"line":34582},[51,50281,34467],{"class":57},[51,50283,50284,50286,50288,50290,50292,50294,50296,50298],{"class":53,"line":34606},[51,50285,34473],{"class":72},[51,50287,32657],{"class":78},[51,50289,108],{"class":64},[51,50291,73],{"class":72},[51,50293,1744],{"class":175},[51,50295,82],{"class":72},[51,50297,1543],{"class":175},[51,50299,31461],{"class":72},[51,50301,50302],{"class":53,"line":34612},[51,50303,34493],{"class":57},[51,50305,50306],{"class":53,"line":34618},[51,50307,34499],{"class":57},[51,50309,50310],{"class":53,"line":34624},[51,50311,34505],{"class":57},[51,50313,50314,50316,50318,50320,50322,50324,50326],{"class":53,"line":34635},[51,50315,32691],{"class":72},[51,50317,791],{"class":175},[51,50319,82],{"class":72},[51,50321,1334],{"class":175},[51,50323,82],{"class":72},[51,50325,791],{"class":175},[51,50327,90],{"class":72},[51,50329,50330],{"class":53,"line":34646},[51,50331,34528],{"class":57},[51,50333,50334],{"class":53,"line":34652},[51,50335,34534],{"class":57},[51,50337,50338],{"class":53,"line":34669},[51,50339,34540],{"class":57},[51,50341,50342],{"class":53,"line":34692},[51,50343,34546],{"class":57},[51,50345,50346],{"class":53,"line":34715},[51,50347,34552],{"class":57},[51,50349,50350,50352,50354,50356,50358,50360,50362,50364,50366],{"class":53,"line":34721},[51,50351,34558],{"class":72},[51,50353,34561],{"class":282},[51,50355,34564],{"class":72},[51,50357,34567],{"class":282},[51,50359,82],{"class":72},[51,50361,34572],{"class":78},[51,50363,108],{"class":64},[51,50365,34577],{"class":282},[51,50367,90],{"class":72},[51,50369,50370,50372,50374,50376,50378,50380,50382,50384,50386],{"class":53,"line":34726},[51,50371,34558],{"class":72},[51,50373,34561],{"class":282},[51,50375,34589],{"class":72},[51,50377,34592],{"class":282},[51,50379,82],{"class":72},[51,50381,34572],{"class":78},[51,50383,108],{"class":64},[51,50385,34601],{"class":282},[51,50387,90],{"class":72},[51,50389,50390],{"class":53,"line":34735},[51,50391,34609],{"class":57},[51,50393,50394],{"class":53,"line":34745},[51,50395,34615],{"class":72},[51,50397,50398],{"class":53,"line":34751},[51,50399,34621],{"class":57},[51,50401,50402,50404,50406],{"class":53,"line":34756},[51,50403,34627],{"class":72},[51,50405,34630],{"class":282},[51,50407,90],{"class":72},[51,50409,50410,50412,50414],{"class":53,"line":34762},[51,50411,34638],{"class":72},[51,50413,34641],{"class":282},[51,50415,90],{"class":72},[51,50417,50418],{"class":53,"line":34775},[51,50419,34649],{"class":57},[51,50421,50422,50424,50426,50428,50430,50432,50434],{"class":53,"line":34781},[51,50423,32691],{"class":72},[51,50425,791],{"class":175},[51,50427,82],{"class":72},[51,50429,1334],{"class":175},[51,50431,82],{"class":72},[51,50433,1334],{"class":175},[51,50435,90],{"class":72},[51,50437,50438,50440,50442,50444,50446,50448,50450,50452,50454],{"class":53,"line":34792},[51,50439,34558],{"class":72},[51,50441,34561],{"class":282},[51,50443,34676],{"class":72},[51,50445,34567],{"class":282},[51,50447,82],{"class":72},[51,50449,34572],{"class":78},[51,50451,108],{"class":64},[51,50453,34687],{"class":282},[51,50455,90],{"class":72},[51,50457,50458,50460,50462,50464,50466,50468,50470,50472,50474],{"class":53,"line":34803},[51,50459,34558],{"class":72},[51,50461,34561],{"class":282},[51,50463,34699],{"class":72},[51,50465,34592],{"class":282},[51,50467,82],{"class":72},[51,50469,34572],{"class":78},[51,50471,108],{"class":64},[51,50473,34710],{"class":282},[51,50475,90],{"class":72},[51,50477,50478],{"class":53,"line":34822},[51,50479,34718],{"class":57},[51,50481,50483],{"class":53,"line":50482},219,[51,50484,34615],{"class":72},[51,50486,50488,50490,50492],{"class":53,"line":50487},220,[51,50489,34627],{"class":72},[51,50491,34561],{"class":282},[51,50493,90],{"class":72},[51,50495,50497,50499,50501],{"class":53,"line":50496},221,[51,50498,34638],{"class":72},[51,50500,34740],{"class":282},[51,50502,90],{"class":72},[51,50504,50506],{"class":53,"line":50505},222,[51,50507,34748],{"class":72},[51,50509,50511],{"class":53,"line":50510},223,[51,50512,3480],{"emptyLinePlaceholder":1192},[51,50514,50516],{"class":53,"line":50515},224,[51,50517,34759],{"class":57},[51,50519,50521,50523,50525,50527,50529],{"class":53,"line":50520},225,[51,50522,2633],{"class":64},[51,50524,32184],{"class":175},[51,50526,4026],{"class":64},[51,50528,32189],{"class":282},[51,50530,4816],{"class":72},[51,50532,50534],{"class":53,"line":50533},226,[51,50535,34778],{"class":57},[51,50537,50539,50541,50543],{"class":53,"line":50538},227,[51,50540,45510],{"class":72},[51,50542,108],{"class":64},[51,50544,45515],{"class":72},[51,50546,50548,50550,50552],{"class":53,"line":50547},228,[51,50549,34795],{"class":72},[51,50551,108],{"class":64},[51,50553,34800],{"class":72},[51,50555,50557,50559,50561,50563,50565,50567,50569],{"class":53,"line":50556},229,[51,50558,34357],{"class":72},[51,50560,108],{"class":64},[51,50562,45532],{"class":72},[51,50564,34813],{"class":78},[51,50566,108],{"class":64},[51,50568,2151],{"class":175},[51,50570,90],{"class":72},[51,50572,50574],{"class":53,"line":50573},230,[51,50575,34825],{"class":72},[22960,50577,50579],{"id":50578},"_242测试代码","2.4.2.测试代码",[40,50581,50582],{},"使用测试集进行测试与推理",[29,50584,50586],{"className":31342,"code":50585,"language":31344,"meta":35,"style":35},"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",[37,50587,50588,50594,50604,50614,50625,50635,50639,50643,50651,50656,50660,50677,50681,50685,50689,50693,50697,50729,50733,50741,50745,50757,50761,50765,50769,50773,50777,50781,50785,50789,50807,50821,50825,50835,50845,50855,50861,50865,50869,50877,50881,50897,50905,50909,50913,50921,50929,50933,50937,50941,50945,50951,50955,50965,50973,50981,50985,50989,50993,51001,51005,51021,51025,51029,51033,51045,51049,51061,51065,51069,51081,51085,51095,51099,51103,51115,51119,51127,51131,51135,51143,51147,51155,51159,51163,51167,51171,51175,51191,51199,51203,51207,51225,51231,51235,51245,51253,51261,51265,51269,51273,51277,51285,51289,51305,51309,51317,51325],{"__ignoreMap":35},[51,50589,50590,50592],{"class":53,"line":54},[51,50591,31356],{"class":64},[51,50593,31359],{"class":72},[51,50595,50596,50598,50600,50602],{"class":53,"line":61},[51,50597,31356],{"class":64},[51,50599,32379],{"class":72},[51,50601,32347],{"class":64},[51,50603,32384],{"class":72},[51,50605,50606,50608,50610,50612],{"class":53,"line":93},[51,50607,31701],{"class":64},[51,50609,32362],{"class":72},[51,50611,31356],{"class":64},[51,50613,32367],{"class":72},[51,50615,50616,50618,50620,50622],{"class":53,"line":99},[51,50617,31701],{"class":64},[51,50619,32332],{"class":72},[51,50621,31356],{"class":64},[51,50623,50624],{"class":72}," ImageFolder\n",[51,50626,50627,50629,50631,50633],{"class":53,"line":120},[51,50628,31701],{"class":64},[51,50630,32878],{"class":72},[51,50632,31356],{"class":64},[51,50634,45604],{"class":72},[51,50636,50637],{"class":53,"line":129},[51,50638,3480],{"emptyLinePlaceholder":1192},[51,50640,50641],{"class":53,"line":206},[51,50642,34915],{"class":57},[51,50644,50645,50647,50649],{"class":53,"line":212},[51,50646,32911],{"class":64},[51,50648,34922],{"class":68},[51,50650,32917],{"class":72},[51,50652,50653],{"class":53,"line":227},[51,50654,50655],{"class":57},"   # 导入自己的数据集，并进行数据处理\n",[51,50657,50658],{"class":53,"line":370},[51,50659,48925],{"class":57},[51,50661,50662,50664,50666,50668,50670,50672,50675],{"class":53,"line":387},[51,50663,48930],{"class":175},[51,50665,108],{"class":64},[51,50667,1916],{"class":64},[51,50669,1503],{"class":282},[51,50671,1804],{"class":175},[51,50673,50674],{"class":48941},"\u002Fdata\u002Ftest",[51,50676,26097],{"class":282},[51,50678,50679],{"class":53,"line":404},[51,50680,3480],{"emptyLinePlaceholder":1192},[51,50682,50683],{"class":53,"line":415},[51,50684,48953],{"class":57},[51,50686,50687],{"class":53,"line":420},[51,50688,48958],{"class":57},[51,50690,50691],{"class":53,"line":429},[51,50692,48963],{"class":57},[51,50694,50695],{"class":53,"line":434},[51,50696,48968],{"class":57},[51,50698,50699,50701,50703,50705,50707,50709,50711,50713,50715,50717,50719,50721,50723,50725,50727],{"class":53,"line":448},[51,50700,48973],{"class":72},[51,50702,108],{"class":64},[51,50704,48978],{"class":72},[51,50706,48981],{"class":175},[51,50708,82],{"class":72},[51,50710,48986],{"class":175},[51,50712,82],{"class":72},[51,50714,48991],{"class":175},[51,50716,48994],{"class":72},[51,50718,48997],{"class":175},[51,50720,82],{"class":72},[51,50722,49002],{"class":175},[51,50724,82],{"class":72},[51,50726,49007],{"class":175},[51,50728,5731],{"class":72},[51,50730,50731],{"class":53,"line":462},[51,50732,49014],{"class":57},[51,50734,50735,50737,50739],{"class":53,"line":470},[51,50736,49019],{"class":72},[51,50738,108],{"class":64},[51,50740,49024],{"class":72},[51,50742,50743],{"class":53,"line":2783},[51,50744,49029],{"class":57},[51,50746,50747,50749,50751,50753,50755],{"class":53,"line":2788},[51,50748,49034],{"class":72},[51,50750,32465],{"class":175},[51,50752,82],{"class":72},[51,50754,32465],{"class":175},[51,50756,43586],{"class":72},[51,50758,50759],{"class":53,"line":2817},[51,50760,49047],{"class":57},[51,50762,50763],{"class":53,"line":2822},[51,50764,49052],{"class":72},[51,50766,50767],{"class":53,"line":2839},[51,50768,49057],{"class":72},[51,50770,50771],{"class":53,"line":2844},[51,50772,49062],{"class":57},[51,50774,50775],{"class":53,"line":2849},[51,50776,49067],{"class":57},[51,50778,50779],{"class":53,"line":2854},[51,50780,3480],{"emptyLinePlaceholder":1192},[51,50782,50783],{"class":53,"line":2868},[51,50784,49076],{"class":57},[51,50786,50787],{"class":53,"line":2873},[51,50788,49081],{"class":57},[51,50790,50791,50793,50795,50797,50799,50801,50803,50805],{"class":53,"line":3657},[51,50792,34929],{"class":72},[51,50794,108],{"class":64},[51,50796,49090],{"class":72},[51,50798,49093],{"class":175},[51,50800,82],{"class":72},[51,50802,49098],{"class":78},[51,50804,108],{"class":64},[51,50806,49103],{"class":72},[51,50808,50809,50811,50813,50815,50817,50819],{"class":53,"line":3671},[51,50810,34986],{"class":72},[51,50812,108],{"class":64},[51,50814,32498],{"class":72},[51,50816,32501],{"class":78},[51,50818,108],{"class":64},[51,50820,34997],{"class":72},[51,50822,50823],{"class":53,"line":3679},[51,50824,35002],{"class":57},[51,50826,50827,50829,50831,50833],{"class":53,"line":3684},[51,50828,35007],{"class":78},[51,50830,108],{"class":64},[51,50832,791],{"class":175},[51,50834,32430],{"class":72},[51,50836,50837,50839,50841,50843],{"class":53,"line":3690},[51,50838,35018],{"class":78},[51,50840,108],{"class":64},[51,50842,32440],{"class":175},[51,50844,32430],{"class":72},[51,50846,50847,50849,50851,50853],{"class":53,"line":3696},[51,50848,35029],{"class":78},[51,50850,108],{"class":64},[51,50852,176],{"class":175},[51,50854,90],{"class":72},[51,50856,50857,50859],{"class":53,"line":3701},[51,50858,123],{"class":64},[51,50860,35042],{"class":72},[51,50862,50863],{"class":53,"line":8910},[51,50864,3480],{"emptyLinePlaceholder":1192},[51,50866,50867],{"class":53,"line":8934},[51,50868,35051],{"class":57},[51,50870,50871,50873,50875],{"class":53,"line":8939},[51,50872,32911],{"class":64},[51,50874,35058],{"class":68},[51,50876,35061],{"class":72},[51,50878,50879],{"class":53,"line":8945},[51,50880,35066],{"class":57},[51,50882,50883,50885,50887,50889,50891,50893,50895],{"class":53,"line":8972},[51,50884,32201],{"class":72},[51,50886,108],{"class":64},[51,50888,32208],{"class":282},[51,50890,2794],{"class":64},[51,50892,32213],{"class":72},[51,50894,2791],{"class":64},[51,50896,35083],{"class":282},[51,50898,50899,50901,50903],{"class":53,"line":8977},[51,50900,32253],{"class":72},[51,50902,108],{"class":64},[51,50904,33253],{"class":72},[51,50906,50907],{"class":53,"line":8983},[51,50908,3480],{"emptyLinePlaceholder":1192},[51,50910,50911],{"class":53,"line":8995},[51,50912,35100],{"class":57},[51,50914,50915,50917,50919],{"class":53,"line":9007},[51,50916,35105],{"class":72},[51,50918,108],{"class":64},[51,50920,33306],{"class":175},[51,50922,50923,50925,50927],{"class":53,"line":9019},[51,50924,35114],{"class":72},[51,50926,108],{"class":64},[51,50928,4162],{"class":175},[51,50930,50931],{"class":53,"line":10678},[51,50932,3480],{"emptyLinePlaceholder":1192},[51,50934,50935],{"class":53,"line":10703},[51,50936,35127],{"class":57},[51,50938,50939],{"class":53,"line":10726},[51,50940,35132],{"class":57},[51,50942,50943],{"class":53,"line":10750},[51,50944,35137],{"class":57},[51,50946,50947,50949],{"class":53,"line":10755},[51,50948,35142],{"class":64},[51,50950,33848],{"class":72},[51,50952,50953],{"class":53,"line":10760},[51,50954,35149],{"class":57},[51,50956,50957,50959,50961,50963],{"class":53,"line":10765},[51,50958,4480],{"class":64},[51,50960,35156],{"class":72},[51,50962,27007],{"class":64},[51,50964,35161],{"class":72},[51,50966,50967,50969,50971],{"class":53,"line":10774},[51,50968,35166],{"class":72},[51,50970,108],{"class":64},[51,50972,35171],{"class":72},[51,50974,50975,50977,50979],{"class":53,"line":10779},[51,50976,35176],{"class":72},[51,50978,108],{"class":64},[51,50980,35181],{"class":72},[51,50982,50983],{"class":53,"line":10785},[51,50984,35186],{"class":57},[51,50986,50987],{"class":53,"line":10806},[51,50988,33839],{"class":72},[51,50990,50991],{"class":53,"line":10812},[51,50992,35195],{"class":57},[51,50994,50995,50997,50999],{"class":53,"line":10826},[51,50996,33624],{"class":72},[51,50998,108],{"class":64},[51,51000,35204],{"class":72},[51,51002,51003],{"class":53,"line":10832},[51,51004,35209],{"class":57},[51,51006,51007,51009,51011,51013,51015,51017,51019],{"class":53,"line":10859},[51,51008,33641],{"class":72},[51,51010,108],{"class":64},[51,51012,33646],{"class":72},[51,51014,33649],{"class":78},[51,51016,108],{"class":64},[51,51018,791],{"class":175},[51,51020,90],{"class":72},[51,51022,51023],{"class":53,"line":10868},[51,51024,35230],{"class":57},[51,51026,51027],{"class":53,"line":10874},[51,51028,35235],{"class":57},[51,51030,51031],{"class":53,"line":10882},[51,51032,35240],{"class":57},[51,51034,51035,51037,51039,51041,51043],{"class":53,"line":10887},[51,51036,35245],{"class":72},[51,51038,10439],{"class":64},[51,51040,33751],{"class":72},[51,51042,4026],{"class":64},[51,51044,35254],{"class":72},[51,51046,51047],{"class":53,"line":17566},[51,51048,35259],{"class":57},[51,51050,51051,51053,51055,51057,51059],{"class":53,"line":17572},[51,51052,35264],{"class":72},[51,51054,10439],{"class":64},[51,51056,35269],{"class":72},[51,51058,176],{"class":175},[51,51060,90],{"class":72},[51,51062,51063],{"class":53,"line":17595},[51,51064,3480],{"emptyLinePlaceholder":1192},[51,51066,51067],{"class":53,"line":17601},[51,51068,35282],{"class":57},[51,51070,51071,51073,51075,51077,51079],{"class":53,"line":17624},[51,51072,35287],{"class":72},[51,51074,108],{"class":64},[51,51076,35292],{"class":72},[51,51078,1830],{"class":64},[51,51080,35297],{"class":72},[51,51082,51083],{"class":53,"line":17638},[51,51084,35302],{"class":57},[51,51086,51087,51089,51091,51093],{"class":53,"line":17658},[51,51088,33415],{"class":175},[51,51090,73],{"class":72},[51,51092,35311],{"class":282},[51,51094,35314],{"class":72},[51,51096,51097],{"class":53,"line":17664},[51,51098,3480],{"emptyLinePlaceholder":1192},[51,51100,51101],{"class":53,"line":17675},[51,51102,35323],{"class":57},[51,51104,51105,51107,51109,51111,51113],{"class":53,"line":17698},[51,51106,2633],{"class":64},[51,51108,32184],{"class":175},[51,51110,4026],{"class":64},[51,51112,32189],{"class":282},[51,51114,4816],{"class":72},[51,51116,51117],{"class":53,"line":17720},[51,51118,35340],{"class":57},[51,51120,51121,51123,51125],{"class":53,"line":17725},[51,51122,32253],{"class":72},[51,51124,108],{"class":64},[51,51126,45515],{"class":72},[51,51128,51129],{"class":53,"line":17731},[51,51130,35353],{"class":57},[51,51132,51133],{"class":53,"line":17745},[51,51134,35358],{"class":57},[51,51136,51137,51139,51141],{"class":53,"line":17758},[51,51138,35363],{"class":72},[51,51140,35366],{"class":282},[51,51142,31461],{"class":72},[51,51144,51145],{"class":53,"line":17763},[51,51146,35373],{"class":57},[51,51148,51149,51151,51153],{"class":53,"line":17777},[51,51150,34986],{"class":72},[51,51152,108],{"class":64},[51,51154,35382],{"class":72},[51,51156,51157],{"class":53,"line":17782},[51,51158,35387],{"class":57},[51,51160,51161],{"class":53,"line":17788},[51,51162,35392],{"class":72},[51,51164,51165],{"class":53,"line":17793},[51,51166,3480],{"emptyLinePlaceholder":1192},[51,51168,51169],{"class":53,"line":17807},[51,51170,35401],{"class":57},[51,51172,51173],{"class":53,"line":17812},[51,51174,35406],{"class":57},[51,51176,51177,51179,51181,51183,51185,51187,51189],{"class":53,"line":17817},[51,51178,32201],{"class":72},[51,51180,108],{"class":64},[51,51182,32208],{"class":282},[51,51184,2794],{"class":64},[51,51186,32213],{"class":72},[51,51188,2791],{"class":64},[51,51190,35083],{"class":282},[51,51192,51193,51195,51197],{"class":53,"line":17831},[51,51194,32253],{"class":72},[51,51196,108],{"class":64},[51,51198,33253],{"class":72},[51,51200,51201],{"class":53,"line":17843},[51,51202,35435],{"class":57},[51,51204,51205],{"class":53,"line":17848},[51,51206,35440],{"class":57},[51,51208,51209,51211,51213,51215,51218,51220,51223],{"class":53,"line":17861},[51,51210,35445],{"class":72},[51,51212,108],{"class":64},[51,51214,2134],{"class":72},[51,51216,51217],{"class":282},"'猫'",[51,51219,82],{"class":72},[51,51221,51222],{"class":282},"'狗'",[51,51224,34210],{"class":72},[51,51226,51227,51229],{"class":53,"line":17866},[51,51228,35142],{"class":64},[51,51230,33848],{"class":72},[51,51232,51233],{"class":53,"line":17871},[51,51234,35510],{"class":57},[51,51236,51237,51239,51241,51243],{"class":53,"line":17876},[51,51238,4480],{"class":64},[51,51240,35517],{"class":72},[51,51242,27007],{"class":64},[51,51244,35161],{"class":72},[51,51246,51247,51249,51251],{"class":53,"line":17889},[51,51248,33574],{"class":72},[51,51250,108],{"class":64},[51,51252,33579],{"class":72},[51,51254,51255,51257,51259],{"class":53,"line":17894},[51,51256,33589],{"class":72},[51,51258,108],{"class":64},[51,51260,33594],{"class":72},[51,51262,51263],{"class":53,"line":33597},[51,51264,3480],{"emptyLinePlaceholder":1192},[51,51266,51267],{"class":53,"line":33603},[51,51268,35546],{"class":57},[51,51270,51271],{"class":53,"line":33609},[51,51272,33839],{"class":72},[51,51274,51275],{"class":53,"line":33615},[51,51276,35555],{"class":57},[51,51278,51279,51281,51283],{"class":53,"line":33621},[51,51280,33624],{"class":72},[51,51282,108],{"class":64},[51,51284,33629],{"class":72},[51,51286,51287],{"class":53,"line":33632},[51,51288,35568],{"class":57},[51,51290,51291,51293,51295,51297,51299,51301,51303],{"class":53,"line":33638},[51,51292,33641],{"class":72},[51,51294,108],{"class":64},[51,51296,33646],{"class":72},[51,51298,33649],{"class":78},[51,51300,108],{"class":64},[51,51302,791],{"class":175},[51,51304,90],{"class":72},[51,51306,51307],{"class":53,"line":33658},[51,51308,35589],{"class":57},[51,51310,51311,51313,51315],{"class":53,"line":33664},[51,51312,35594],{"class":72},[51,51314,108],{"class":64},[51,51316,35599],{"class":72},[51,51318,51319,51321,51323],{"class":53,"line":33675},[51,51320,35604],{"class":72},[51,51322,108],{"class":64},[51,51324,35609],{"class":72},[51,51326,51327,51329,51331,51333,51335,51337,51339,51341],{"class":53,"line":33681},[51,51328,35614],{"class":175},[51,51330,73],{"class":72},[51,51332,35619],{"class":282},[51,51334,35622],{"class":72},[51,51336,35625],{"class":282},[51,51338,82],{"class":72},[51,51340,35630],{"class":282},[51,51342,35633],{"class":72},[1179,51344,51345],{},"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":35,"searchDepth":61,"depth":61,"links":51347},[51348,51349,51350,51351],{"id":31555,"depth":93,"text":31556},{"id":38803,"depth":93,"text":38804},{"id":42236,"depth":93,"text":42237},{"id":46245,"depth":93,"text":46246},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31547,"description":24339},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51358,"title":51359,"body":51360,"description":24339,"extension":1190,"meta":51367,"navigation":1192,"path":51368,"seo":51369,"stem":51370,"__hash__":51371},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51361,"toc":51365},[51362],[10,51363,51359],{"id":51364},"_3yolo模型学习",{"title":35,"searchDepth":61,"depth":61,"links":51366},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51359,"description":24339},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51373,"title":51374,"body":51375,"description":51382,"extension":1190,"meta":51383,"navigation":1192,"path":51385,"seo":51386,"stem":51387,"__hash__":51388},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51376,"toc":51380},[51377],[40,51378,51379],{},"yolo模型还未补充",{"title":35,"searchDepth":61,"depth":61,"links":51381},[],"深度学习学习",{"category":51384},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51374,"description":51382},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51390,"title":51391,"body":51392,"description":24339,"extension":1190,"meta":51417,"navigation":1192,"path":51418,"seo":51419,"stem":51420,"__hash__":51421},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51393,"toc":51415},[51394,51397,51400,51405,51412],[10,51395,51391],{"id":51396},"_1工具",[40,51398,51399],{},"提示错误插件：有问题会提前报错",[40,51401,51402],{},[2564,51403],{"alt":35,"src":51404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[40,51406,51407],{},[981,51408,51411],{"href":51409,"rel":51410},"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",[24828],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[40,51413,51414],{},"alt键加上下箭头可以实现语句的移动",{"title":35,"searchDepth":61,"depth":61,"links":51416},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51391,"description":24339},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51423,"title":51424,"body":51425,"description":24339,"extension":1190,"meta":54289,"navigation":1192,"path":54290,"seo":54291,"stem":54292,"__hash__":54293},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51426,"toc":54240},[51427,51430,51434,51438,51443,51446,51451,51455,51462,51467,51474,51479,51486,51491,51495,51500,51503,51507,51512,51516,51521,51524,51527,51530,51533,51536,51539,51542,51545,51550,51555,51560,51564,51567,51570,51574,51579,51582,51590,51595,51612,51620,51625,51630,51635,51640,51645,51648,51653,51658,51662,51671,51676,51681,51685,51690,51693,51697,51702,51710,51715,51720,51723,51728,51733,51738,51741,51744,51747,51752,51757,51760,51765,51768,51773,51776,51779,51782,51787,51790,51793,51808,51813,51818,51823,51826,51829,51832,51846,51849,51854,51859,51862,51865,51868,51871,51874,51877,51880,51884,51888,51893,51897,51900,51905,51910,51913,51918,51921,51925,51930,51933,51936,51939,51942,51945,51948,51951,51954,51957,51961,51966,51971,51976,51979,51982,51986,51991,51994,51998,52001,52004,52009,52012,52015,52019,52023,52026,52031,52036,52039,52068,52073,52078,52083,52088,52092,52097,52101,52106,52109,52113,52117,52122,52126,52131,52136,52140,52145,52148,52150,52153,52158,52162,52167,52171,52175,52180,52185,52190,52195,52199,52204,52209,52214,52217,52220,52225,52228,52233,52238,52243,52248,52252,53059,53063,53406,53411,53414,53417,53420,53423,53426,53429,53432,53435,53437,53440,53442,53445,53449,53454,53457,53460,53463,53467,53472,53477,53497,53500,53504,53509,53514,53531,53535,53564,53568,53590,53592,53631,53639,53645,53649,53652,53655,53660,53665,53668,53671,53674,53679,53684,53687,53690,53693,53696,53699,53702,53705,53708,53711,53714,53717,53719,53722,53725,53728,53731,53734,53737,53740,53743,53747,53752,53755,53760,53763,53766,53769,53772,53775,53778,53781,53783,53786,53789,53792,53795,53798,53801,53805,53808,53817,53820,53825,53828,53833,53836,53839,53842,53845,53848,53851,53854,53858,53862,53865,53868,53873,53878,53883,53887,53892,53897,53900,53903,53906,53909,53912,53917,53920,53925,53927,53932,53935,53939,53944,53947,53950,53955,53959,53962,53967,53970,53973,54002,54007,54010,54013,54016,54019,54022,54026,54029,54115,54119,54122,54127,54132,54139,54142,54145,54148,54151,54154,54159,54164,54167,54170,54173,54176,54179,54182,54185,54188,54191,54193,54196,54200,54205,54210,54215,54218,54223,54228,54231,54234,54237],[10,51428,51424],{"id":51429},"_2基础语法",[14,51431,51433],{"id":51432},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[1233,51435,51437],{"id":51436},"_211-js组成","2.1.1 js组成",[19,51439,51440],{},[22,51441,51442],{},"js是编程语言，html和css不是编程语言，是标记语言",[40,51444,51445],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[19,51447,51448],{"start":61},[22,51449,51450],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[1233,51452,51454],{"id":51453},"_212-js书写位置","2.1.2 js书写位置",[19,51456,51457],{},[22,51458,51459],{},[840,51460,51461],{},"内部 JavaScript",[40,51463,51464],{},[2564,51465],{"alt":35,"src":51466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[19,51468,51469],{"start":61},[22,51470,51471],{},[840,51472,51473],{},"外部 JavaScript",[40,51475,51476],{},[2564,51477],{"alt":35,"src":51478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[19,51480,51481],{"start":93},[22,51482,51483],{},[840,51484,51485],{},"内联 JavaScript",[40,51487,51488],{},[2564,51489],{"alt":35,"src":51490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[1233,51492,51494],{"id":51493},"_213-javascript注释","2.1.3 JavaScript注释",[40,51496,51497],{},[2564,51498],{"alt":35,"src":51499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[40,51501,51502],{},"alt+shift+a一定要记住！",[1233,51504,51506],{"id":51505},"_214-javascript结束符","2.1.4 JavaScript结束符",[40,51508,51509],{},[2564,51510],{"alt":35,"src":51511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[1233,51513,51515],{"id":51514},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[19,51517,51518],{},[22,51519,51520],{},"输出语法：",[40,51522,51523],{},"①document.write('要出的内容')",[40,51525,51526],{},"向body内输出内容；",[40,51528,51529],{},"如果输出的内容写的是标签，也会被解析cheng",[40,51531,51532],{},"②alert('要出的内容')",[40,51534,51535],{},"页面弹出警告对话框",[40,51537,51538],{},"③console.log('控制台打印')",[40,51540,51541],{},"控制台输出语法，程序员调试使用",[40,51543,51544],{},"输入log就行，自动生成：",[40,51546,51547],{},[2564,51548],{"alt":35,"src":51549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[19,51551,51552],{"start":61},[22,51553,51554],{},"输入语法：",[40,51556,51557],{},[2564,51558],{"alt":35,"src":51559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[1233,51561,51563],{"id":51562},"_2116-字面量","21.1.6 字面量",[40,51565,51566],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[40,51568,51569],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51571,51573],{"id":51572},"_22-变量","2.2 变量",[19,51575,51576],{},[22,51577,51578],{},"变量声明",[40,51580,51581],{},"let 变量名",[1000,51583,51584,51587],{},[22,51585,51586],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[22,51588,51589],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[19,51591,51592],{"start":61},[22,51593,51594],{},"变量赋值",[29,51596,51600],{"className":51597,"code":51598,"language":51599,"meta":35,"style":35},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[37,51601,51602,51607],{"__ignoreMap":35},[51,51603,51604],{"class":53,"line":54},[51,51605,51606],{"class":72},"let age\n",[51,51608,51609],{"class":53,"line":61},[51,51610,51611],{"class":72},"age=18\n",[19,51613,51614,51617],{"start":93},[22,51615,51616],{},"连这些（变量的初始化）：let age=18",[22,51618,51619],{},"更新变量",[40,51621,51622],{},[2564,51623],{"alt":35,"src":51624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[19,51626,51627],{"start":120},[22,51628,51629],{},"声明多个变量",[40,51631,51632],{},[2564,51633],{"alt":35,"src":51634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[19,51636,51637],{"start":129},[22,51638,51639],{},"变量命名规则与规范",[40,51641,51642],{},[2564,51643],{"alt":35,"src":51644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[40,51646,51647],{},"遵守小驼峰！",[19,51649,51650],{"start":206},[22,51651,51652],{},"变量拓展-let和var的区别",[40,51654,51655],{},[2564,51656],{"alt":35,"src":51657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51659,51661],{"id":51660},"_23-数组","2.3 数组",[29,51663,51665],{"className":51597,"code":51664,"language":51599,"meta":35,"style":35},"let arr = []\n",[37,51666,51667],{"__ignoreMap":35},[51,51668,51669],{"class":53,"line":54},[51,51670,51664],{"class":72},[40,51672,51673],{},[2564,51674],{"alt":35,"src":51675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[40,51677,51678],{},[2564,51679],{"alt":35,"src":51680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51682,51684],{"id":51683},"_24-常量","2.4 常量",[40,51686,51687],{},[2564,51688],{"alt":35,"src":51689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[40,51691,51692],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51694,51696],{"id":51695},"_25-数据类型","2.5 数据类型",[40,51698,51699],{},[2564,51700],{"alt":35,"src":51701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[19,51703,51704,51707],{},[22,51705,51706],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[22,51708,51709],{},"算数运算符：",[40,51711,51712],{},[2564,51713],{"alt":35,"src":51714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[19,51716,51717],{"start":93},[22,51718,51719],{},"数字类型（Number）",[40,51721,51722],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[40,51724,51725],{},[2564,51726],{"alt":35,"src":51727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[19,51729,51730],{"start":99},[22,51731,51732],{},"字符串类型（string）",[40,51734,51735],{},[2564,51736],{"alt":35,"src":51737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[40,51739,51740],{},"反引号也是可以使用的",[40,51742,51743],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[40,51745,51746],{},"例如：document.write(\"我今年\"+age+\"岁\")",[19,51748,51749],{"start":120},[22,51750,51751],{},"模板字符串",[40,51753,51754],{},[2564,51755],{"alt":35,"src":51756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[40,51758,51759],{},"类似于python的字符串格式化",[19,51761,51762],{"start":129},[22,51763,51764],{},"布尔类型",[40,51766,51767],{},"true 和 false",[19,51769,51770],{"start":206},[22,51771,51772],{},"未定义类型（underfined）",[40,51774,51775],{},"表示没有赋值",[40,51777,51778],{},"未定义类型是比较特殊的类型，只有一个值undefined",[40,51780,51781],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[19,51783,51784],{"start":212},[22,51785,51786],{},"null（空类型）",[40,51788,51789],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[40,51791,51792],{},"赋值了，但是内容为空",[29,51794,51796],{"className":51597,"code":51795,"language":51599,"meta":35,"style":35},"typeof null\n输出的是'object'，是一个对象数据类型\n",[37,51797,51798,51803],{"__ignoreMap":35},[51,51799,51800],{"class":53,"line":54},[51,51801,51802],{"class":72},"typeof null\n",[51,51804,51805],{"class":53,"line":61},[51,51806,51807],{"class":72},"输出的是'object'，是一个对象数据类型\n",[19,51809,51810],{"start":227},[22,51811,51812],{},"控制台检测数据类型",[40,51814,51815],{},[2564,51816],{"alt":35,"src":51817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[19,51819,51820],{"start":370},[22,51821,51822],{},"类型转换",[40,51824,51825],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[40,51827,51828],{},"转换方式：隐式转换和显示转换",[40,51830,51831],{},"①隐式转换",[1000,51833,51834,51837,51840,51843],{},[22,51835,51836],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[22,51838,51839],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[22,51841,51842],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[22,51844,51845],{},"任何数据和字符串相加结果都是字符串",[40,51847,51848],{},"②显示转换",[40,51850,51851],{},[2564,51852],{"alt":35,"src":51853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[40,51855,51856],{},[2564,51857],{"alt":35,"src":51858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[40,51860,51861],{},"在输入的时候要用好隐式转换，简单写起来",[40,51863,51864],{},"let num = +prompt(’请输入数字：‘)",[40,51866,51867],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[40,51869,51870],{},"console.log(parseInt('12.333px'))",[40,51872,51873],{},"输出为：12",[40,51875,51876],{},"console.log(parseInt('a'a'a12.333px'))",[40,51878,51879],{},"输出：NaN",[14,51881,51883],{"id":51882},"_26-运算符","2.6 运算符",[1233,51885,51887],{"id":51886},"_261-赋值运算符","2.6.1 赋值运算符",[40,51889,51890],{},[2564,51891],{"alt":35,"src":51892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[1233,51894,51896],{"id":51895},"_262-一元运算符","2.6.2 一元运算符",[40,51898,51899],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[40,51901,51902],{},[2564,51903],{"alt":35,"src":51904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[40,51906,51907],{},[2564,51908],{"alt":35,"src":51909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[40,51911,51912],{},"两者的区别：",[40,51914,51915],{},[2564,51916],{"alt":35,"src":51917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[40,51919,51920],{},"前置先自加；后置后加，代码执行完之后再加",[1233,51922,51924],{"id":51923},"_263-比较运算符","2.6.3 比较运算符",[40,51926,51927],{},[2564,51928],{"alt":35,"src":51929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[40,51931,51932],{},"比较运算符也有隐式转换",[40,51934,51935],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[40,51937,51938],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[40,51940,51941],{},"要使用三等，开发的时候",[40,51943,51944],{},"NaN不等于任何人，包括它自己",[40,51946,51947],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[40,51949,51950],{},"7\u002F10=0.7",[40,51952,51953],{},"最后：0.5+0.2=0.7",[40,51955,51956],{},"字符串比较，比较的是字符对应的ASCII码",[1233,51958,51960],{"id":51959},"_264-逻辑运算符","2.6.4 逻辑运算符",[40,51962,51963],{},[2564,51964],{"alt":35,"src":51965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[40,51967,51968],{},[2564,51969],{"alt":35,"src":51970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[40,51972,51973],{},[2564,51974],{"alt":35,"src":51975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[40,51977,51978],{},"上述题目选D",[40,51980,51981],{},"与真2假1；或真1假2",[1233,51983,51985],{"id":51984},"_265-运算符优先级","2.6.5 运算符优先级",[40,51987,51988],{},[2564,51989],{"alt":35,"src":51990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[40,51992,51993],{},"先算逻辑与，后算逻辑或",[14,51995,51997],{"id":51996},"_27-语句","2.7 语句",[40,51999,52000],{},"表达式：是可以被求值的代码，会有结果给我们",[40,52002,52003],{},"语句：语句是可以被执行的代码，例如prompt()",[40,52005,52006],{},[2564,52007],{"alt":35,"src":52008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[40,52010,52011],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[40,52013,52014],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[1233,52016,52018],{"id":52017},"_271-分支语句","2.7.1 分支语句",[22960,52020,52022],{"id":52021},"_2711-if分支语句","2.7.1.1 if分支语句",[40,52024,52025],{},"if语句单行简单的话，可以不写{}，写在一行就行",[19,52027,52028],{},[22,52029,52030],{},"单分支语句",[40,52032,52033],{},[2564,52034],{"alt":35,"src":52035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[40,52037,52038],{},"除了0，所有数字都为真",[29,52040,52042],{"className":51597,"code":52041,"language":51599,"meta":35,"style":35},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[37,52043,52044,52049,52054,52059,52063],{"__ignoreMap":35},[51,52045,52046],{"class":53,"line":54},[51,52047,52048],{"class":72},"if（0) {\n",[51,52050,52051],{"class":53,"line":61},[51,52052,52053],{"class":72},"    let a=1\n",[51,52055,52056],{"class":53,"line":93},[51,52057,52058],{"class":72},"    alert(typeof a)\n",[51,52060,52061],{"class":53,"line":99},[51,52062,132],{"class":72},[51,52064,52065],{"class":53,"line":120},[51,52066,52067],{"class":72},"不输出，括号为假\n",[19,52069,52070],{"start":61},[22,52071,52072],{},"双分支语句",[40,52074,52075],{},[2564,52076],{"alt":35,"src":52077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[19,52079,52080],{"start":93},[22,52081,52082],{},"多分支语句",[40,52084,52085],{},[2564,52086],{"alt":35,"src":52087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22960,52089,52091],{"id":52090},"_2712-三元运算符","2.7.1.2 三元运算符",[40,52093,52094],{},[2564,52095],{"alt":35,"src":52096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22960,52098,52100],{"id":52099},"_2713-switch语句","2.7.1.3 switch语句",[40,52102,52103],{},[2564,52104],{"alt":35,"src":52105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[40,52107,52108],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[1233,52110,52112],{"id":52111},"_272-循环语句","2.7.2 循环语句",[22960,52114,52116],{"id":52115},"_2721-断点演示","2.7.2.1 断点演示",[40,52118,52119],{},[2564,52120],{"alt":35,"src":52121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22960,52123,52125],{"id":52124},"_2722-while循环","2.7.2.2 while循环",[40,52127,52128],{},[2564,52129],{"alt":35,"src":52130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[40,52132,52133],{},[2564,52134],{"alt":35,"src":52135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22960,52137,52139],{"id":52138},"_2723-for循环","2.7.2.3 for循环",[40,52141,52142],{},[2564,52143],{"alt":35,"src":52144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[40,52146,52147],{},"for(;;) {",[40,52149,2190],{},[40,52151,52152],{},"表示无限循环",[40,52154,52155],{},[2564,52156],{"alt":35,"src":52157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22960,52159,52161],{"id":52160},"_2724-循环的退出","2.7.2.4 循环的退出",[40,52163,52164],{},[2564,52165],{"alt":35,"src":52166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52168,52170],{"id":52169},"_28-数组","2.8 数组",[1233,52172,52174],{"id":52173},"_281-基础认识","2.8.1 基础认识",[40,52176,52177],{},[2564,52178],{"alt":35,"src":52179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[40,52181,52182],{},[2564,52183],{"alt":35,"src":52184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[40,52186,52187],{},[2564,52188],{"alt":35,"src":52189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[40,52191,52192],{},[2564,52193],{"alt":35,"src":52194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[1233,52196,52198],{"id":52197},"_282-操作数组","2.8.2 操作数组",[40,52200,52201],{},[2564,52202],{"alt":35,"src":52203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[19,52205,52206],{},[22,52207,52208],{},"添加元素",[40,52210,52211],{},[2564,52212],{"alt":35,"src":52213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[40,52215,52216],{},"console.log(arr.push('green'))",[40,52218,52219],{},"输出结果：为新数组的长度",[40,52221,52222],{},[2564,52223],{"alt":35,"src":52224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[40,52226,52227],{},"push用的非常多，一定要记住",[19,52229,52230],{},[22,52231,52232],{},"删除元素",[40,52234,52235],{},[2564,52236],{"alt":35,"src":52237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[40,52239,52240],{},[2564,52241],{"alt":35,"src":52242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[40,52244,52245],{},[2564,52246],{"alt":35,"src":52247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[1233,52249,52251],{"id":52250},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[29,52253,52255],{"className":51597,"code":52254,"language":51599,"meta":35,"style":35},"\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",[37,52256,52257,52272,52288,52292,52301,52319,52343,52365,52379,52387,52394,52406,52417,52421,52425,52432,52444,52459,52472,52491,52508,52523,52535,52547,52559,52563,52567,52578,52588,52600,52612,52624,52635,52639,52643,52655,52659,52673,52677,52681,52692,52706,52718,52732,52736,52745,52754,52758,52767,52771,52780,52785,52790,52803,52831,52836,52841,52866,52871,52875,52880,52885,52900,52904,52909,52939,52951,52967,52983,52997,53002,53009,53013,53018,53031,53039,53047,53051],{"__ignoreMap":35},[51,52258,52259,52262,52266,52269],{"class":53,"line":54},[51,52260,52261],{"class":72},"\u003C!",[51,52263,52265],{"class":52264},"s9eBZ","DOCTYPE",[51,52267,52268],{"class":68}," html",[51,52270,52271],{"class":72},">\n",[51,52273,52274,52276,52278,52281,52283,52286],{"class":53,"line":61},[51,52275,2154],{"class":72},[51,52277,51599],{"class":52264},[51,52279,52280],{"class":68}," lang",[51,52282,108],{"class":72},[51,52284,52285],{"class":282},"\"en\"",[51,52287,52271],{"class":72},[51,52289,52290],{"class":53,"line":93},[51,52291,3480],{"emptyLinePlaceholder":1192},[51,52293,52294,52296,52299],{"class":53,"line":99},[51,52295,2154],{"class":72},[51,52297,52298],{"class":52264},"head",[51,52300,52271],{"class":72},[51,52302,52303,52306,52309,52312,52314,52317],{"class":53,"line":120},[51,52304,52305],{"class":72},"    \u003C",[51,52307,52308],{"class":52264},"meta",[51,52310,52311],{"class":68}," charset",[51,52313,108],{"class":72},[51,52315,52316],{"class":282},"\"UTF-8\"",[51,52318,52271],{"class":72},[51,52320,52321,52323,52325,52328,52330,52333,52336,52338,52341],{"class":53,"line":129},[51,52322,52305],{"class":72},[51,52324,52308],{"class":52264},[51,52326,52327],{"class":68}," http-equiv",[51,52329,108],{"class":72},[51,52331,52332],{"class":282},"\"X-UA-Compatible\"",[51,52334,52335],{"class":68}," content",[51,52337,108],{"class":72},[51,52339,52340],{"class":282},"\"IE=edge\"",[51,52342,52271],{"class":72},[51,52344,52345,52347,52349,52351,52353,52356,52358,52360,52363],{"class":53,"line":206},[51,52346,52305],{"class":72},[51,52348,52308],{"class":52264},[51,52350,15882],{"class":68},[51,52352,108],{"class":72},[51,52354,52355],{"class":282},"\"viewport\"",[51,52357,52335],{"class":68},[51,52359,108],{"class":72},[51,52361,52362],{"class":282},"\"width=device-width, initial-scale=1.0\"",[51,52364,52271],{"class":72},[51,52366,52367,52369,52372,52375,52377],{"class":53,"line":212},[51,52368,52305],{"class":72},[51,52370,52371],{"class":52264},"title",[51,52373,52374],{"class":72},">Document\u003C\u002F",[51,52376,52371],{"class":52264},[51,52378,52271],{"class":72},[51,52380,52381,52383,52385],{"class":53,"line":227},[51,52382,52305],{"class":72},[51,52384,1179],{"class":52264},[51,52386,52271],{"class":72},[51,52388,52389,52392],{"class":53,"line":370},[51,52390,52391],{"class":52264},"        *",[51,52393,16534],{"class":72},[51,52395,52396,52399,52402,52404],{"class":53,"line":387},[51,52397,52398],{"class":175},"            margin",[51,52400,52401],{"class":72},": ",[51,52403,176],{"class":175},[51,52405,179],{"class":72},[51,52407,52408,52411,52413,52415],{"class":53,"line":404},[51,52409,52410],{"class":175},"            padding",[51,52412,52401],{"class":72},[51,52414,176],{"class":175},[51,52416,179],{"class":72},[51,52418,52419],{"class":53,"line":415},[51,52420,3609],{"class":72},[51,52422,52423],{"class":53,"line":420},[51,52424,3480],{"emptyLinePlaceholder":1192},[51,52426,52427,52430],{"class":53,"line":429},[51,52428,52429],{"class":68},"        .box",[51,52431,16534],{"class":72},[51,52433,52434,52437,52439,52442],{"class":53,"line":434},[51,52435,52436],{"class":175},"            display",[51,52438,52401],{"class":72},[51,52440,52441],{"class":175},"flex",[51,52443,179],{"class":72},[51,52445,52446,52449,52451,52454,52457],{"class":53,"line":448},[51,52447,52448],{"class":175},"            width",[51,52450,52401],{"class":72},[51,52452,52453],{"class":175},"700",[51,52455,52456],{"class":64},"px",[51,52458,179],{"class":72},[51,52460,52461,52464,52466,52468,52470],{"class":53,"line":462},[51,52462,52463],{"class":175},"            height",[51,52465,52401],{"class":72},[51,52467,5050],{"class":175},[51,52469,52456],{"class":64},[51,52471,179],{"class":72},[51,52473,52474,52477,52479,52481,52483,52486,52489],{"class":53,"line":470},[51,52475,52476],{"class":175},"            border-left",[51,52478,52401],{"class":72},[51,52480,791],{"class":175},[51,52482,52456],{"class":64},[51,52484,52485],{"class":175}," solid",[51,52487,52488],{"class":175}," pink",[51,52490,179],{"class":72},[51,52492,52493,52496,52498,52500,52502,52504,52506],{"class":53,"line":2783},[51,52494,52495],{"class":175},"            border-bottom",[51,52497,52401],{"class":72},[51,52499,791],{"class":175},[51,52501,52456],{"class":64},[51,52503,52485],{"class":175},[51,52505,52488],{"class":175},[51,52507,179],{"class":72},[51,52509,52510,52512,52514,52516,52518,52521],{"class":53,"line":2788},[51,52511,52398],{"class":175},[51,52513,52401],{"class":72},[51,52515,1902],{"class":175},[51,52517,52456],{"class":64},[51,52519,52520],{"class":175}," auto",[51,52522,179],{"class":72},[51,52524,52525,52528,52530,52533],{"class":53,"line":2817},[51,52526,52527],{"class":175},"            justify-content",[51,52529,52401],{"class":72},[51,52531,52532],{"class":175},"space-around",[51,52534,179],{"class":72},[51,52536,52537,52540,52542,52545],{"class":53,"line":2822},[51,52538,52539],{"class":175},"            align-items",[51,52541,52401],{"class":72},[51,52543,52544],{"class":175},"flex-end",[51,52546,179],{"class":72},[51,52548,52549,52552,52554,52557],{"class":53,"line":2839},[51,52550,52551],{"class":175},"            text-align",[51,52553,52401],{"class":72},[51,52555,52556],{"class":175},"center",[51,52558,179],{"class":72},[51,52560,52561],{"class":53,"line":2844},[51,52562,3609],{"class":72},[51,52564,52565],{"class":53,"line":2849},[51,52566,3480],{"emptyLinePlaceholder":1192},[51,52568,52569,52571,52573,52576],{"class":53,"line":2854},[51,52570,52429],{"class":68},[51,52572,972],{"class":64},[51,52574,52575],{"class":52264},"div",[51,52577,16534],{"class":72},[51,52579,52580,52582,52584,52586],{"class":53,"line":2868},[51,52581,52436],{"class":175},[51,52583,52401],{"class":72},[51,52585,52441],{"class":175},[51,52587,179],{"class":72},[51,52589,52590,52592,52594,52596,52598],{"class":53,"line":2873},[51,52591,52448],{"class":175},[51,52593,52401],{"class":72},[51,52595,1902],{"class":175},[51,52597,52456],{"class":64},[51,52599,179],{"class":72},[51,52601,52602,52605,52607,52610],{"class":53,"line":3657},[51,52603,52604],{"class":175},"            background-color",[51,52606,52401],{"class":72},[51,52608,52609],{"class":175},"pink",[51,52611,179],{"class":72},[51,52613,52614,52617,52619,52622],{"class":53,"line":3671},[51,52615,52616],{"class":175},"            flex-direction",[51,52618,52401],{"class":72},[51,52620,52621],{"class":175},"column",[51,52623,179],{"class":72},[51,52625,52626,52628,52630,52633],{"class":53,"line":3679},[51,52627,52527],{"class":175},[51,52629,52401],{"class":72},[51,52631,52632],{"class":175},"space-between",[51,52634,179],{"class":72},[51,52636,52637],{"class":53,"line":3684},[51,52638,3609],{"class":72},[51,52640,52641],{"class":53,"line":3690},[51,52642,3480],{"emptyLinePlaceholder":1192},[51,52644,52645,52647,52650,52653],{"class":53,"line":3696},[51,52646,52429],{"class":68},[51,52648,52649],{"class":52264}," div",[51,52651,52652],{"class":52264}," span",[51,52654,16534],{"class":72},[51,52656,52657],{"class":53,"line":3701},[51,52658,3480],{"emptyLinePlaceholder":1192},[51,52660,52661,52664,52666,52669,52671],{"class":53,"line":8910},[51,52662,52663],{"class":175},"            margin-top",[51,52665,52401],{"class":72},[51,52667,52668],{"class":175},"-20",[51,52670,52456],{"class":64},[51,52672,179],{"class":72},[51,52674,52675],{"class":53,"line":8934},[51,52676,3609],{"class":72},[51,52678,52679],{"class":53,"line":8939},[51,52680,3480],{"emptyLinePlaceholder":1192},[51,52682,52683,52685,52687,52690],{"class":53,"line":8945},[51,52684,52429],{"class":68},[51,52686,52649],{"class":52264},[51,52688,52689],{"class":52264}," h4",[51,52691,16534],{"class":72},[51,52693,52694,52697,52699,52702,52704],{"class":53,"line":8972},[51,52695,52696],{"class":175},"            margin-bottom",[51,52698,52401],{"class":72},[51,52700,52701],{"class":175},"-35",[51,52703,52456],{"class":64},[51,52705,179],{"class":72},[51,52707,52708,52710,52712,52714,52716],{"class":53,"line":8977},[51,52709,52448],{"class":175},[51,52711,52401],{"class":72},[51,52713,1605],{"class":175},[51,52715,52456],{"class":64},[51,52717,179],{"class":72},[51,52719,52720,52723,52725,52728,52730],{"class":53,"line":8983},[51,52721,52722],{"class":175},"            margin-left",[51,52724,52401],{"class":72},[51,52726,52727],{"class":175},"-10",[51,52729,52456],{"class":64},[51,52731,179],{"class":72},[51,52733,52734],{"class":53,"line":8995},[51,52735,3609],{"class":72},[51,52737,52738,52741,52743],{"class":53,"line":9007},[51,52739,52740],{"class":72},"    \u003C\u002F",[51,52742,1179],{"class":52264},[51,52744,52271],{"class":72},[51,52746,52747,52750,52752],{"class":53,"line":9019},[51,52748,52749],{"class":72},"\u003C\u002F",[51,52751,52298],{"class":52264},[51,52753,52271],{"class":72},[51,52755,52756],{"class":53,"line":10678},[51,52757,3480],{"emptyLinePlaceholder":1192},[51,52759,52760,52762,52765],{"class":53,"line":10703},[51,52761,2154],{"class":72},[51,52763,52764],{"class":52264},"body",[51,52766,52271],{"class":72},[51,52768,52769],{"class":53,"line":10726},[51,52770,3480],{"emptyLinePlaceholder":1192},[51,52772,52773,52775,52778],{"class":53,"line":10750},[51,52774,52305],{"class":72},[51,52776,52777],{"class":52264},"script",[51,52779,52271],{"class":72},[51,52781,52782],{"class":53,"line":10755},[51,52783,52784],{"class":57},"        \u002F\u002F 1. 四次弹框效果\n",[51,52786,52787],{"class":53,"line":10760},[51,52788,52789],{"class":57},"        \u002F\u002F 声明一个新的数组\n",[51,52791,52792,52795,52798,52800],{"class":53,"line":10765},[51,52793,52794],{"class":64},"        let",[51,52796,52797],{"class":72}," arr ",[51,52799,108],{"class":64},[51,52801,52802],{"class":72}," []\n",[51,52804,52805,52807,52809,52812,52814,52816,52818,52820,52822,52825,52827,52829],{"class":53,"line":10774},[51,52806,4480],{"class":64},[51,52808,2750],{"class":72},[51,52810,52811],{"class":64},"let",[51,52813,10400],{"class":72},[51,52815,108],{"class":64},[51,52817,26082],{"class":175},[51,52819,10407],{"class":72},[51,52821,2687],{"class":64},[51,52823,52824],{"class":175}," 4",[51,52826,4291],{"class":72},[51,52828,3372],{"class":64},[51,52830,13404],{"class":72},[51,52832,52833],{"class":53,"line":10779},[51,52834,52835],{"class":57},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[51,52837,52838],{"class":53,"line":10785},[51,52839,52840],{"class":57},"            \u002F\u002F arr.push(num)\n",[51,52842,52843,52846,52849,52851,52854,52856,52859,52861,52864],{"class":53,"line":10806},[51,52844,52845],{"class":72},"            arr.",[51,52847,52848],{"class":68},"push",[51,52850,73],{"class":72},[51,52852,52853],{"class":68},"prompt",[51,52855,73],{"class":72},[51,52857,52858],{"class":282},"`请输入第${",[51,52860,1689],{"class":72},[51,52862,52863],{"class":282},"}季度的数据:`",[51,52865,31461],{"class":72},[51,52867,52868],{"class":53,"line":10812},[51,52869,52870],{"class":57},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[51,52872,52873],{"class":53,"line":10826},[51,52874,3609],{"class":72},[51,52876,52877],{"class":53,"line":10832},[51,52878,52879],{"class":57},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[51,52881,52882],{"class":53,"line":10859},[51,52883,52884],{"class":57},"        \u002F\u002F 盒子开头\n",[51,52886,52887,52890,52893,52895,52898],{"class":53,"line":10868},[51,52888,52889],{"class":72},"        document.",[51,52891,52892],{"class":68},"write",[51,52894,73],{"class":72},[51,52896,52897],{"class":282},"` \u003Cdiv class=\"box\">`",[51,52899,90],{"class":72},[51,52901,52902],{"class":53,"line":10874},[51,52903,3480],{"emptyLinePlaceholder":1192},[51,52905,52906],{"class":53,"line":10882},[51,52907,52908],{"class":57},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[51,52910,52911,52913,52915,52917,52919,52921,52923,52925,52927,52930,52933,52935,52937],{"class":53,"line":10887},[51,52912,4480],{"class":64},[51,52914,2750],{"class":72},[51,52916,52811],{"class":64},[51,52918,10400],{"class":72},[51,52920,108],{"class":64},[51,52922,5169],{"class":175},[51,52924,10407],{"class":72},[51,52926,2154],{"class":64},[51,52928,52929],{"class":72}," arr.",[51,52931,52932],{"class":175},"length",[51,52934,4291],{"class":72},[51,52936,3372],{"class":64},[51,52938,13404],{"class":72},[51,52940,52941,52944,52946,52948],{"class":53,"line":17566},[51,52942,52943],{"class":72},"            document.",[51,52945,52892],{"class":68},[51,52947,73],{"class":72},[51,52949,52950],{"class":282},"`\n",[51,52952,52953,52956,52958,52960,52962,52964],{"class":53,"line":17572},[51,52954,52955],{"class":282},"              \u003Cdiv style=\"height: ${",[51,52957,4957],{"class":72},[51,52959,2134],{"class":282},[51,52961,1689],{"class":72},[51,52963,2184],{"class":282},[51,52965,52966],{"class":282},"}px;\">\n",[51,52968,52969,52972,52974,52976,52978,52980],{"class":53,"line":17595},[51,52970,52971],{"class":282},"                \u003Cspan>${",[51,52973,4957],{"class":72},[51,52975,2134],{"class":282},[51,52977,1689],{"class":72},[51,52979,2184],{"class":282},[51,52981,52982],{"class":282},"}\u003C\u002Fspan>\n",[51,52984,52985,52988,52990,52992,52994],{"class":53,"line":17601},[51,52986,52987],{"class":282},"                \u003Ch4>第${",[51,52989,1689],{"class":72},[51,52991,46530],{"class":64},[51,52993,26082],{"class":175},[51,52995,52996],{"class":282},"}季度\u003C\u002Fh4>\n",[51,52998,52999],{"class":53,"line":17624},[51,53000,53001],{"class":282},"              \u003C\u002Fdiv>          \n",[51,53003,53004,53007],{"class":53,"line":17638},[51,53005,53006],{"class":282},"            `",[51,53008,90],{"class":72},[51,53010,53011],{"class":53,"line":17658},[51,53012,3609],{"class":72},[51,53014,53015],{"class":53,"line":17664},[51,53016,53017],{"class":57},"        \u002F\u002F 盒子结尾\n",[51,53019,53020,53022,53024,53026,53029],{"class":53,"line":17675},[51,53021,52889],{"class":72},[51,53023,52892],{"class":68},[51,53025,73],{"class":72},[51,53027,53028],{"class":282},"` \u003C\u002Fdiv>`",[51,53030,90],{"class":72},[51,53032,53033,53035,53037],{"class":53,"line":17698},[51,53034,52740],{"class":72},[51,53036,52777],{"class":52264},[51,53038,52271],{"class":72},[51,53040,53041,53043,53045],{"class":53,"line":17720},[51,53042,52749],{"class":72},[51,53044,52764],{"class":52264},[51,53046,52271],{"class":72},[51,53048,53049],{"class":53,"line":17725},[51,53050,3480],{"emptyLinePlaceholder":1192},[51,53052,53053,53055,53057],{"class":53,"line":17731},[51,53054,52749],{"class":72},[51,53056,51599],{"class":52264},[51,53058,52271],{"class":72},[1233,53060,53062],{"id":53061},"_284-冒泡排序","2.8.4 冒泡排序",[29,53064,53066],{"className":51597,"code":53065,"language":51599,"meta":35,"style":35},"\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",[37,53067,53068,53078,53092,53096,53104,53119,53139,53151,53159,53163,53171,53179,53211,53244,53281,53286,53305,53310,53323,53338,53354,53358,53363,53367,53377,53386,53394,53398],{"__ignoreMap":35},[51,53069,53070,53072,53074,53076],{"class":53,"line":54},[51,53071,52261],{"class":72},[51,53073,52265],{"class":52264},[51,53075,52268],{"class":68},[51,53077,52271],{"class":72},[51,53079,53080,53082,53084,53086,53088,53090],{"class":53,"line":61},[51,53081,2154],{"class":72},[51,53083,51599],{"class":52264},[51,53085,52280],{"class":68},[51,53087,108],{"class":72},[51,53089,52285],{"class":282},[51,53091,52271],{"class":72},[51,53093,53094],{"class":53,"line":93},[51,53095,3480],{"emptyLinePlaceholder":1192},[51,53097,53098,53100,53102],{"class":53,"line":99},[51,53099,2154],{"class":72},[51,53101,52298],{"class":52264},[51,53103,52271],{"class":72},[51,53105,53106,53109,53111,53113,53115,53117],{"class":53,"line":120},[51,53107,53108],{"class":72},"  \u003C",[51,53110,52308],{"class":52264},[51,53112,52311],{"class":68},[51,53114,108],{"class":72},[51,53116,52316],{"class":282},[51,53118,52271],{"class":72},[51,53120,53121,53123,53125,53127,53129,53131,53133,53135,53137],{"class":53,"line":129},[51,53122,53108],{"class":72},[51,53124,52308],{"class":52264},[51,53126,15882],{"class":68},[51,53128,108],{"class":72},[51,53130,52355],{"class":282},[51,53132,52335],{"class":68},[51,53134,108],{"class":72},[51,53136,52362],{"class":282},[51,53138,52271],{"class":72},[51,53140,53141,53143,53145,53147,53149],{"class":53,"line":206},[51,53142,53108],{"class":72},[51,53144,52371],{"class":52264},[51,53146,52374],{"class":72},[51,53148,52371],{"class":52264},[51,53150,52271],{"class":72},[51,53152,53153,53155,53157],{"class":53,"line":212},[51,53154,52749],{"class":72},[51,53156,52298],{"class":52264},[51,53158,52271],{"class":72},[51,53160,53161],{"class":53,"line":227},[51,53162,3480],{"emptyLinePlaceholder":1192},[51,53164,53165,53167,53169],{"class":53,"line":370},[51,53166,2154],{"class":72},[51,53168,52764],{"class":52264},[51,53170,52271],{"class":72},[51,53172,53173,53175,53177],{"class":53,"line":387},[51,53174,53108],{"class":72},[51,53176,52777],{"class":52264},[51,53178,52271],{"class":72},[51,53180,53181,53184,53186,53188,53191,53193,53195,53197,53199,53201,53203,53205,53207,53209],{"class":53,"line":404},[51,53182,53183],{"class":64},"    let",[51,53185,52797],{"class":72},[51,53187,108],{"class":64},[51,53189,53190],{"class":72}," [",[51,53192,1568],{"class":175},[51,53194,13397],{"class":72},[51,53196,1543],{"class":175},[51,53198,13397],{"class":72},[51,53200,1328],{"class":175},[51,53202,13397],{"class":72},[51,53204,1334],{"class":175},[51,53206,13397],{"class":72},[51,53208,791],{"class":175},[51,53210,34210],{"class":72},[51,53212,53213,53215,53217,53219,53221,53223,53225,53227,53229,53231,53233,53236,53238,53240,53242],{"class":53,"line":415},[51,53214,4278],{"class":64},[51,53216,2750],{"class":72},[51,53218,52811],{"class":64},[51,53220,10400],{"class":72},[51,53222,108],{"class":64},[51,53224,5169],{"class":175},[51,53226,10407],{"class":72},[51,53228,2154],{"class":64},[51,53230,52929],{"class":72},[51,53232,52932],{"class":175},[51,53234,53235],{"class":64}," -",[51,53237,26082],{"class":175},[51,53239,4291],{"class":72},[51,53241,3372],{"class":64},[51,53243,13404],{"class":72},[51,53245,53246,53249,53251,53253,53255,53257,53259,53261,53263,53265,53267,53269,53271,53273,53275,53277,53279],{"class":53,"line":420},[51,53247,53248],{"class":64},"      for",[51,53250,2750],{"class":72},[51,53252,52811],{"class":64},[51,53254,10462],{"class":72},[51,53256,108],{"class":64},[51,53258,5169],{"class":175},[51,53260,10469],{"class":72},[51,53262,2154],{"class":64},[51,53264,52929],{"class":72},[51,53266,52932],{"class":175},[51,53268,53235],{"class":64},[51,53270,10400],{"class":72},[51,53272,1778],{"class":64},[51,53274,26082],{"class":175},[51,53276,10476],{"class":72},[51,53278,3372],{"class":64},[51,53280,13404],{"class":72},[51,53282,53283],{"class":53,"line":429},[51,53284,53285],{"class":57},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[51,53287,53288,53290,53293,53295,53298,53300,53302],{"class":53,"line":434},[51,53289,3577],{"class":64},[51,53291,53292],{"class":72}," (arr[j] ",[51,53294,972],{"class":64},[51,53296,53297],{"class":72}," arr[j ",[51,53299,114],{"class":64},[51,53301,26082],{"class":175},[51,53303,53304],{"class":72},"]) {\n",[51,53306,53307],{"class":53,"line":448},[51,53308,53309],{"class":57},"          \u002F\u002F 交换两个变量\n",[51,53311,53312,53315,53318,53320],{"class":53,"line":462},[51,53313,53314],{"class":64},"          let",[51,53316,53317],{"class":72}," tmp ",[51,53319,108],{"class":64},[51,53321,53322],{"class":72}," arr[j]\n",[51,53324,53325,53328,53330,53332,53334,53336],{"class":53,"line":470},[51,53326,53327],{"class":72},"          arr[j] ",[51,53329,108],{"class":64},[51,53331,53297],{"class":72},[51,53333,114],{"class":64},[51,53335,26082],{"class":175},[51,53337,34210],{"class":72},[51,53339,53340,53343,53345,53347,53349,53351],{"class":53,"line":2783},[51,53341,53342],{"class":72},"          arr[j ",[51,53344,114],{"class":64},[51,53346,26082],{"class":175},[51,53348,5517],{"class":72},[51,53350,108],{"class":64},[51,53352,53353],{"class":72}," tmp\n",[51,53355,53356],{"class":53,"line":2788},[51,53357,3609],{"class":72},[51,53359,53360],{"class":53,"line":2817},[51,53361,53362],{"class":72},"      }\n",[51,53364,53365],{"class":53,"line":2822},[51,53366,3267],{"class":72},[51,53368,53369,53372,53374],{"class":53,"line":2839},[51,53370,53371],{"class":72},"    document.",[51,53373,52892],{"class":68},[51,53375,53376],{"class":72},"(arr)\n",[51,53378,53379,53382,53384],{"class":53,"line":2844},[51,53380,53381],{"class":72},"  \u003C\u002F",[51,53383,52777],{"class":52264},[51,53385,52271],{"class":72},[51,53387,53388,53390,53392],{"class":53,"line":2849},[51,53389,52749],{"class":72},[51,53391,52764],{"class":52264},[51,53393,52271],{"class":72},[51,53395,53396],{"class":53,"line":2854},[51,53397,3480],{"emptyLinePlaceholder":1192},[51,53399,53400,53402,53404],{"class":53,"line":2868},[51,53401,52749],{"class":72},[51,53403,51599],{"class":52264},[51,53405,52271],{"class":72},[40,53407,53408],{},[2564,53409],{"alt":35,"src":53410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[40,53412,53413],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[40,53415,53416],{},"let arr = [4, 2, 5, 1, 3]",[40,53418,53419],{},"\u002F\u002F 1.升序排列写法",[40,53421,53422],{},"arr.sort(function (a, b) {",[40,53424,53425],{},"return a - b",[40,53427,53428],{},"})",[40,53430,53431],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[40,53433,53434],{},"\u002F\u002F 降序排列写法",[40,53436,53422],{},[40,53438,53439],{},"return b - a",[40,53441,53428],{},[40,53443,53444],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53446,53448],{"id":53447},"_29-函数","2.9 函数",[40,53450,53451],{},[2564,53452],{"alt":35,"src":53453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[40,53455,53456],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[40,53458,53459],{},"函数的声明用function",[40,53461,53462],{},"函数里边可以嵌套函数",[1233,53464,53466],{"id":53465},"_291-函数传参","2.9.1 函数传参",[40,53468,53469],{},[2564,53470],{"alt":35,"src":53471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[40,53473,53474],{},[2564,53475],{"alt":35,"src":53476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1000,53478,53479,53482,53485,53488,53491,53494],{},[22,53480,53481],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[22,53483,53484],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[22,53486,53487],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[22,53489,53490],{},"开发中尽量保持形参和实参个数一致",[22,53492,53493],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[22,53495,53496],{},"形参只在函数中有用，所以不需要进行声明这个变量",[40,53498,53499],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[1233,53501,53503],{"id":53502},"_292-函数的返回值","2.9.2 函数的返回值",[40,53505,53506],{},[2564,53507],{"alt":35,"src":53508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[40,53510,53511],{},[2564,53512],{"alt":35,"src":53513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1000,53515,53516,53519,53522,53525,53528],{},[22,53517,53518],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[22,53520,53521],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[22,53523,53524],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[22,53526,53527],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[22,53529,53530],{},"断点调试:进入函数内部看执行过程F11",[1233,53532,53534],{"id":53533},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[29,53536,53538],{"className":51597,"code":53537,"language":51599,"meta":35,"style":35},"    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",[37,53539,53540,53545,53550,53554,53559],{"__ignoreMap":35},[51,53541,53542],{"class":53,"line":54},[51,53543,53544],{"class":72},"    function fn(a, b) {\n",[51,53546,53547],{"class":53,"line":61},[51,53548,53549],{"class":72},"      console.log(a + b);\n",[51,53551,53552],{"class":53,"line":93},[51,53553,3267],{"class":72},[51,53555,53556],{"class":53,"line":99},[51,53557,53558],{"class":72},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[51,53560,53561],{"class":53,"line":120},[51,53562,53563],{"class":72},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[1233,53565,53567],{"id":53566},"_294-作用域","2.9.4 作用域",[1000,53569,53570,53576,53581,53584,53587],{},[22,53571,53572,53573],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[840,53574,53575],{},"作用域",[22,53577,53578],{},[840,53579,53580],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[22,53582,53583],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[22,53585,53586],{},"函数内部可以直接所使用全局变量",[22,53588,53589],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[40,53591,15595],{},[29,53593,53595],{"className":51597,"code":53594,"language":51599,"meta":35,"style":35},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[37,53596,53597,53602,53607,53611,53616,53621,53626],{"__ignoreMap":35},[51,53598,53599],{"class":53,"line":54},[51,53600,53601],{"class":72},"    function fun() {\n",[51,53603,53604],{"class":53,"line":61},[51,53605,53606],{"class":72},"      num = 10\n",[51,53608,53609],{"class":53,"line":93},[51,53610,3267],{"class":72},[51,53612,53613],{"class":53,"line":99},[51,53614,53615],{"class":72},"    fun()\n",[51,53617,53618],{"class":53,"line":120},[51,53619,53620],{"class":72},"    console.log(num)\n",[51,53622,53623],{"class":53,"line":129},[51,53624,53625],{"class":72},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[51,53627,53628],{"class":53,"line":206},[51,53629,53630],{"class":72},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1000,53632,53633,53636],{},[22,53634,53635],{},"函数内部的形参可以看做是局部变量",[22,53637,53638],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[40,53640,53641,53642],{},"变量访问原则： ",[840,53643,53644],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[1233,53646,53648],{"id":53647},"_295-匿名函数","2.9.5 匿名函数",[40,53650,53651],{},"函数可以分为具名函数和匿名函数",[40,53653,53654],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[19,53656,53657],{},[22,53658,53659],{},"函数表达式",[40,53661,53662],{},[2564,53663],{"alt":35,"src":53664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[40,53666,53667],{},"里边也可以写参数",[40,53669,53670],{},"具名函数调用位置可以随意调整；",[40,53672,53673],{},"匿名函数函数表达式形式只能在声明后才可以使用",[19,53675,53676],{"start":61},[22,53677,53678],{},"立即执行函数",[40,53680,53681],{},[2564,53682],{"alt":35,"src":53683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[40,53685,53686],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[40,53688,53689],{},"写法：两个小括号，然后在第一个小括号中写function",[40,53691,53692],{},"(function () {})();",[40,53694,53695],{},"不要落下最后的;",[40,53697,53698],{},"立即执行函数必须要加;",[40,53700,53701],{},"分号写前写后都没问题",[40,53703,53704],{},"写前：",[40,53706,53707],{},"(function() {})()",[40,53709,53710],{},";(function () {})();",[40,53712,53713],{},"写后:",[40,53715,53716],{},"(function() {})();",[40,53718,53692],{},[40,53720,53721],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[40,53723,53724],{},"还有一种写法：",[40,53726,53727],{},"(function(){}());",[40,53729,53730],{},"或者:",[40,53732,53733],{},"!function(){}();",[40,53735,53736],{},"立即执行函数有时候也是可以加名字的：",[40,53738,53739],{},"(function flexible(window,document) {}(window,document));",[40,53741,53742],{},"省一些调用方法",[1233,53744,53746],{"id":53745},"_296-逻辑中断","2.9.6 逻辑中断!!!",[40,53748,53749],{},[2564,53750],{"alt":35,"src":53751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[40,53753,53754],{},"这样就不用非得给x,y初始化了",[40,53756,53757],{},[2564,53758],{"alt":35,"src":53759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[40,53761,53762],{},"代码执行时先看左边",[40,53764,53765],{},"例如：console.log(false && 3+5)",[40,53767,53768],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[40,53770,53771],{},"&&都是真时，就返回最后一个真值",[40,53773,53774],{},"console.log(11 && 22)",[40,53776,53777],{},"输出22",[40,53779,53780],{},"逻辑与：遇真则真",[40,53782,15595],{},[40,53784,53785],{},"let age=1",[40,53787,53788],{},"console.log(11 || age++)",[40,53790,53791],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[40,53793,53794],{},"console.log(11 || 22)",[40,53796,53797],{},"||逻辑或遇到真就直接输出，输出结果为11",[40,53799,53800],{},"||如果都是假的话，就取最后一个假的值了",[1233,53802,53804],{"id":53803},"_297-转换为boolean型","2.9.7 转换为Boolean型",[40,53806,53807],{},"显示转换：",[40,53809,53810,53813,53814],{},[840,53811,53812],{},"记忆","： ",[840,53815,53816],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[40,53818,53819],{},"空字符串为假，其他字符串全为真",[40,53821,53822],{},[2564,53823],{"alt":35,"src":53824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[40,53826,53827],{},"隐式转换：",[40,53829,53830],{},[2564,53831],{"alt":35,"src":53832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[40,53834,53835],{},"隐式转换:",[40,53837,53838],{},"null+3=3",[40,53840,53841],{},"undefined+3=NaN",[40,53843,53844],{},"null==undefined 输出true,他两个都当0看",[40,53846,53847],{},"null===undefined 输出false",[40,53849,53850],{},"undefined做任何操作都是NaN",[40,53852,53853],{},"NaN不等于NaN，NaN表示计算错误",[14,53855,53857],{"id":53856},"_210-对象","2.10 对象",[1233,53859,53861],{"id":53860},"_2101-对象的介绍","2.10.1 对象的介绍",[40,53863,53864],{},"对象也是一种数据类型，里边的数据是无序的",[40,53866,53867],{},"对象由属性和方法组成",[40,53869,53870],{},[2564,53871],{"alt":35,"src":53872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[40,53874,53875],{},[2564,53876],{"alt":35,"src":53877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[40,53879,53880],{},[2564,53881],{"alt":35,"src":53882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[1233,53884,53886],{"id":53885},"_2102-对象属性","2.10.2 对象属性",[40,53888,53889],{},[2564,53890],{"alt":35,"src":53891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[19,53893,53894],{},[22,53895,53896],{},"查询对象",[40,53898,53899],{},"对象名.属性 goods.uname",[40,53901,53902],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[40,53904,53905],{},"不带字符串的属性名也可以使用 对象名['属性名']",[40,53907,53908],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[40,53910,53911],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[19,53913,53914],{"start":61},[22,53915,53916],{},"重新赋值",[40,53918,53919],{},"对象名.属性=新值",[19,53921,53922],{"start":93},[22,53923,53924],{},"增加新数据",[40,53926,53919],{},[19,53928,53929],{"start":99},[22,53930,53931],{},"删除对象中的属性",[40,53933,53934],{},"delete 对象名.属性",[1233,53936,53938],{"id":53937},"_2103-对象方法","2.10.3 对象方法",[40,53940,53941],{},[2564,53942],{"alt":35,"src":53943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[40,53945,53946],{},"后边跟的是匿名函数",[40,53948,53949],{},"对象外面的叫函数；对象内部的叫方法",[40,53951,53952],{},[2564,53953],{"alt":35,"src":53954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[1233,53956,53958],{"id":53957},"_2104-遍历对象","2.10.4 遍历对象",[40,53960,53961],{},"理解为加括号的python字典遍历",[40,53963,53964],{},[2564,53965],{"alt":35,"src":53966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[40,53968,53969],{},"k是字符串类型",[40,53971,53972],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[29,53974,53976],{"className":51597,"code":53975,"language":51599,"meta":35,"style":35},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[37,53977,53978,53983,53988,53993,53998],{"__ignoreMap":35},[51,53979,53980],{"class":53,"line":54},[51,53981,53982],{"class":72},"   let arr = [1, 2, 3]\n",[51,53984,53985],{"class":53,"line":61},[51,53986,53987],{"class":72},"    for (let k in arr) {\n",[51,53989,53990],{"class":53,"line":93},[51,53991,53992],{"class":72},"      console.log(k)\n",[51,53994,53995],{"class":53,"line":99},[51,53996,53997],{"class":72},"      console.log(arr[k])\n",[51,53999,54000],{"class":53,"line":120},[51,54001,3267],{"class":72},[40,54003,54004],{},[2564,54005],{"alt":35,"src":54006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[40,54008,54009],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[40,54011,54012],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[40,54014,54015],{},"for in 得到的k是属性名",[52777,54017,54018],{},"\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",[40,54020,54021],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[1233,54023,54025],{"id":54024},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[40,54027,54028],{},"数组中放对象信息",[29,54030,54034],{"className":54031,"code":54032,"language":54033,"meta":35,"style":35},"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",[37,54035,54036,54044,54049,54054,54059,54064,54069,54074,54079,54084,54089,54094,54099,54103,54107],{"__ignoreMap":35},[51,54037,54038,54040,54042],{"class":53,"line":54},[51,54039,2154],{"class":72},[51,54041,52777],{"class":52264},[51,54043,52271],{"class":72},[51,54045,54046],{"class":53,"line":61},[51,54047,54048],{"class":72},"    let students = [\n",[51,54050,54051],{"class":53,"line":93},[51,54052,54053],{"class":72},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[51,54055,54056],{"class":53,"line":99},[51,54057,54058],{"class":72},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[51,54060,54061],{"class":53,"line":120},[51,54062,54063],{"class":72},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[51,54065,54066],{"class":53,"line":129},[51,54067,54068],{"class":72},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[51,54070,54071],{"class":53,"line":206},[51,54072,54073],{"class":72},"    ]\n",[51,54075,54076],{"class":53,"line":212},[51,54077,54078],{"class":72},"    for (let i = 0; i \u003C students.length; i++) {\n",[51,54080,54081],{"class":53,"line":227},[51,54082,54083],{"class":72},"      for (let k in students[i]) {\n",[51,54085,54086],{"class":53,"line":370},[51,54087,54088],{"class":72},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[51,54090,54091],{"class":53,"line":387},[51,54092,54093],{"class":72},"        \u002F\u002F输出每个人的名字：\n",[51,54095,54096],{"class":53,"line":404},[51,54097,54098],{"class":72},"        \u002F\u002Fconsole.log(students[i].name)\n",[51,54100,54101],{"class":53,"line":415},[51,54102,53362],{"class":72},[51,54104,54105],{"class":53,"line":420},[51,54106,3267],{"class":72},[51,54108,54109,54111,54113],{"class":53,"line":429},[51,54110,53381],{"class":72},[51,54112,52777],{"class":52264},[51,54114,52271],{"class":72},[1233,54116,54118],{"id":54117},"_2106-内置对象","2.10.6 内置对象",[40,54120,54121],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[19,54123,54124],{},[22,54125,54126],{},"数学对象Math",[40,54128,54129],{},[2564,54130],{"alt":35,"src":54131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[40,54133,54134],{},[981,54135,54138],{"href":54136,"rel":54137},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24828],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[40,54140,54141],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[40,54143,54144],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[40,54146,54147],{},"数组不可以使用Math中的max,min来求最大值与最小值",[40,54149,54150],{},"null是一个空对象，可以认为：null类似于let obj={}",[40,54152,54153],{},"null属于对象数据类型",[19,54155,54156],{"start":61},[22,54157,54158],{},"生成任意范围随机数",[40,54160,54161],{},[2564,54162],{"alt":35,"src":54163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[40,54165,54166],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[40,54168,54169],{},"乘以几就取不到几",[40,54171,54172],{},"取数组中的随机元素：",[40,54174,54175],{},"let arr = ['red', 'green', 'blue']",[40,54177,54178],{},"let random = Math.floor(Math.random() * arr.length)",[40,54180,54181],{},"console.log(arr[random])",[40,54183,54184],{},"这个函数得到的是全闭区间",[40,54186,54187],{},"function getRandom(N, M) {",[40,54189,54190],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[40,54192,2190],{},[40,54194,54195],{},"console.log(getRandom(4, 8))",[1233,54197,54199],{"id":54198},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[40,54201,54202],{},[2564,54203],{"alt":35,"src":54204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[40,54206,54207],{},[2564,54208],{"alt":35,"src":54209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[40,54211,54212],{},[2564,54213],{"alt":35,"src":54214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[40,54216,54217],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[40,54219,54220],{},[2564,54221],{"alt":35,"src":54222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[40,54224,54225],{},[2564,54226],{"alt":35,"src":54227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[40,54229,54230],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[40,54232,54233],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[40,54235,54236],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1179,54238,54239],{},"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":35,"searchDepth":61,"depth":61,"links":54241},[54242,54250,54251,54252,54253,54254,54261,54265,54271,54280],{"id":51432,"depth":61,"text":51433,"children":54243},[54244,54245,54246,54247,54248,54249],{"id":51436,"depth":93,"text":51437},{"id":51453,"depth":93,"text":51454},{"id":51493,"depth":93,"text":51494},{"id":51505,"depth":93,"text":51506},{"id":51514,"depth":93,"text":51515},{"id":51562,"depth":93,"text":51563},{"id":51572,"depth":61,"text":51573},{"id":51660,"depth":61,"text":51661},{"id":51683,"depth":61,"text":51684},{"id":51695,"depth":61,"text":51696},{"id":51882,"depth":61,"text":51883,"children":54255},[54256,54257,54258,54259,54260],{"id":51886,"depth":93,"text":51887},{"id":51895,"depth":93,"text":51896},{"id":51923,"depth":93,"text":51924},{"id":51959,"depth":93,"text":51960},{"id":51984,"depth":93,"text":51985},{"id":51996,"depth":61,"text":51997,"children":54262},[54263,54264],{"id":52017,"depth":93,"text":52018},{"id":52111,"depth":93,"text":52112},{"id":52169,"depth":61,"text":52170,"children":54266},[54267,54268,54269,54270],{"id":52173,"depth":93,"text":52174},{"id":52197,"depth":93,"text":52198},{"id":52250,"depth":93,"text":52251},{"id":53061,"depth":93,"text":53062},{"id":53447,"depth":61,"text":53448,"children":54272},[54273,54274,54275,54276,54277,54278,54279],{"id":53465,"depth":93,"text":53466},{"id":53502,"depth":93,"text":53503},{"id":53533,"depth":93,"text":53534},{"id":53566,"depth":93,"text":53567},{"id":53647,"depth":93,"text":53648},{"id":53745,"depth":93,"text":53746},{"id":53803,"depth":93,"text":53804},{"id":53856,"depth":61,"text":53857,"children":54281},[54282,54283,54284,54285,54286,54287,54288],{"id":53860,"depth":93,"text":53861},{"id":53885,"depth":93,"text":53886},{"id":53937,"depth":93,"text":53938},{"id":53957,"depth":93,"text":53958},{"id":54024,"depth":93,"text":54025},{"id":54117,"depth":93,"text":54118},{"id":54198,"depth":93,"text":54199},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51424,"description":24339},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54295,"title":54296,"body":54297,"description":24339,"extension":1190,"meta":77637,"navigation":1192,"path":77638,"seo":77639,"stem":77640,"__hash__":77641},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54298,"toc":77577},[54299,54302,54305,54308,54313,54316,54319,54322,54326,54330,54336,54341,54349,54356,54359,54363,54368,54373,54378,54381,54384,54395,54398,54402,54405,54408,54413,54418,54423,54426,54429,54521,54524,54529,54532,54537,54540,54543,54548,54551,54556,54560,54563,54577,54581,54586,54589,54592,54596,54601,54604,54608,54612,54617,54621,54626,54629,54632,54635,54638,54641,54644,54649,54654,54682,54685,54688,54691,54696,54699,54702,54705,54708,54712,54741,54745,54750,54755,54758,54761,54764,54769,54884,54889,54894,55055,55060,55063,55067,55072,55077,55080,55083,55086,55089,55092,55095,55098,55101,55104,55107,55110,55113,55116,55119,55121,55124,55127,55130,55135,55139,55536,55539,55545,55549,55554,56836,56841,56844,56847,56850,56855,58051,58055,58061,58066,58069,58074,58079,58083,58087,58092,58095,58100,58103,58106,58110,59018,59021,59025,59246,59249,59252,59255,59481,59484,59708,59711,59715,59720,59723,59726,59954,59957,59990,59993,59997,60002,60006,60009,60012,60015,60018,60021,60024,60027,60032,61312,61316,61319,62412,62416,62419,62422,62425,62428,62432,62435,62438,62440,62448,63929,63933,63936,63939,63942,64151,64154,64158,64162,64167,64172,64175,64178,64183,64187,64192,64195,64304,64308,64313,64318,64321,64324,64328,64333,64338,64343,64346,64349,64360,64363,64368,64373,64376,64379,64452,64456,64461,64464,64466,64477,64481,64486,65812,65815,65818,65821,65823,65826,65829,65832,65835,65838,65841,65844,65847,65850,65853,65856,65859,65861,65863,65866,65870,66964,66967,66970,66986,67000,67003,67008,67014,67019,67023,67027,67032,67036,67041,67483,67488,67491,67495,67500,67503,67506,67510,67515,67519,67524,67529,67533,67538,67543,67546,67551,67556,67560,67565,67570,67674,67677,67681,67686,68052,68055,68058,68061,68064,68067,68070,68073,68076,69372,69376,69381,69386,69389,69392,69395,69398,69400,69405,69410,69413,69417,69422,69427,69432,69435,69438,69441,69444,69447,69452,69455,69459,69464,69469,69473,69478,69481,69486,69489,69492,69495,69498,69501,69506,69509,69512,69515,69518,69522,69527,69530,69534,69539,69542,69545,69549,69578,69581,69585,69589,69594,69598,69603,69606,69609,69612,69615,69618,69621,69624,69627,69630,69633,69636,69639,69642,69645,69649,69654,69659,69662,69666,69670,69675,69678,69682,69685,69688,69693,69698,69703,69708,69713,69716,69719,69724,69729,69733,69738,69741,69746,69749,69752,69755,69758,69763,69766,69775,69779,69784,69787,69790,69794,69797,69802,69806,69809,69815,69821,69825,69851,69854,71415,71418,71914,71917,71922,71927,71932,71936,71941,71946,71951,71955,71960,71963,71966,71969,71972,71976,71979,71984,71987,71992,71996,72001,72004,72009,72014,72019,72022,72025,72030,72035,72038,72041,72045,72048,72053,72056,72061,72064,72069,72074,72079,72082,72087,72152,72155,72166,72170,72175,72347,72351,72356,72359,72362,72365,72369,72380,72384,72387,72392,72397,72400,72403,72406,72409,72412,72414,72417,72420,72423,72428,72431,72436,72439,72443,72446,72449,72463,72467,72470,72525,72530,72533,72536,72541,72544,72548,72553,72683,72687,72692,72697,72778,72783,72787,72790,72795,72800,72806,72809,72812,72815,72819,72824,72827,72838,72842,72859,75906,75910,75913,75916,75919,75940,75944,75947,75955,75958,75963,75966,75969,75974,75979,75983,76004,76008,76013,76016,76019,76022,76025,76029,76034,76037,76041,76046,76049,76054,76057,76062,76065,76070,77273,77277,77282,77285,77290,77574],[10,54300,54296],{"id":54301},"_3web-apis",[40,54303,54304],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[40,54306,54307],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[40,54309,54310],{},[2564,54311],{"alt":35,"src":54312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[40,54314,54315],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[40,54317,54318],{},"建议数组和对象使用 const 来声明",[40,54320,54321],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54323,54325],{"id":54324},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[1233,54327,54329],{"id":54328},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[40,54331,54332,54335],{},[37,54333,54334],{},"document"," = HTML 文件解析后的对象化表示；",[40,54337,54338,54340],{},[37,54339,54334],{}," ≠ HTML 文件本身",[40,54342,54343,54348],{},[840,54344,54345],{},[37,54346,54347],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[40,54350,54351,54355],{},[840,54352,54353],{},[37,54354,54334],{}," ：容器里的内容，代表当前加载的网页（DOM）",[40,54357,54358],{},"document实际上为window.document的简写",[1233,54360,54362],{"id":54361},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[40,54364,54365],{},[2564,54366],{"alt":35,"src":54367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[40,54369,54370],{},[2564,54371],{"alt":35,"src":54372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[40,54374,54375],{},[2564,54376],{"alt":35,"src":54377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[40,54379,54380],{},"console.dir()",[40,54382,54383],{},"dir用来打印对象",[1000,54385,54386,54389,54392],{},[22,54387,54388],{},"任何一个标签，都是一个对象",[22,54390,54391],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[22,54393,54394],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[40,54396,54397],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[1233,54399,54401],{"id":54400},"_312-获取dom对象","3.1.2 获取DoM对象",[40,54403,54404],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[40,54406,54407],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[40,54409,54410],{},[840,54411,54412],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[19,54414,54415],{},[22,54416,54417],{},"利用CSS选择器来获取标签元素",[40,54419,54420],{},[2564,54421],{"alt":35,"src":54422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[40,54424,54425],{},"里边的选择器必须必须加引号！！！",[40,54427,54428],{},"只选择第一个元素",[29,54430,54432],{"className":54031,"code":54431,"language":54033,"meta":35,"style":35},"\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",[37,54433,54434,54442,54463,54482,54490,54495,54500,54505,54513],{"__ignoreMap":35},[51,54435,54436,54438,54440],{"class":53,"line":54},[51,54437,2154],{"class":72},[51,54439,52764],{"class":52264},[51,54441,52271],{"class":72},[51,54443,54444,54446,54448,54451,54453,54456,54459,54461],{"class":53,"line":61},[51,54445,53108],{"class":72},[51,54447,52575],{"class":52264},[51,54449,54450],{"class":68}," class",[51,54452,108],{"class":72},[51,54454,54455],{"class":282},"\"box\"",[51,54457,54458],{"class":72},">123\u003C\u002F",[51,54460,52575],{"class":52264},[51,54462,52271],{"class":72},[51,54464,54465,54467,54469,54471,54473,54475,54478,54480],{"class":53,"line":93},[51,54466,53108],{"class":72},[51,54468,52575],{"class":52264},[51,54470,54450],{"class":68},[51,54472,108],{"class":72},[51,54474,54455],{"class":282},[51,54476,54477],{"class":72},">456\u003C\u002F",[51,54479,52575],{"class":52264},[51,54481,52271],{"class":72},[51,54483,54484,54486,54488],{"class":53,"line":99},[51,54485,53108],{"class":72},[51,54487,52777],{"class":52264},[51,54489,52271],{"class":72},[51,54491,54492],{"class":53,"line":120},[51,54493,54494],{"class":72},"    \u002F\u002F 1.获取匹配的第一个元素\n",[51,54496,54497],{"class":53,"line":129},[51,54498,54499],{"class":72},"    const box = document.querySelector('div')\n",[51,54501,54502],{"class":53,"line":206},[51,54503,54504],{"class":72},"    console.dir(box)\n",[51,54506,54507,54509,54511],{"class":53,"line":212},[51,54508,53381],{"class":72},[51,54510,52777],{"class":52264},[51,54512,52271],{"class":72},[51,54514,54515,54517,54519],{"class":53,"line":227},[51,54516,52749],{"class":72},[51,54518,52764],{"class":52264},[51,54520,52271],{"class":72},[40,54522,54523],{},"只选123，不选456",[40,54525,54526],{},[2564,54527],{"alt":35,"src":54528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[40,54530,54531],{},"返回的是一个数组的集合，不能对其进行直接修改",[40,54533,54534],{},[2564,54535],{"alt":35,"src":54536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[40,54538,54539],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[40,54541,54542],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[19,54544,54545],{"start":61},[22,54546,54547],{},"其他方法来获取标签元素",[40,54549,54550],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[40,54552,54553],{},[2564,54554],{"alt":35,"src":54555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[1233,54557,54559],{"id":54558},"_313-操作元素的内容","3.1.3 操作元素的内容",[40,54561,54562],{},"设置修改DOM元素内容有两种方式：",[1000,54564,54565,54568,54571,54574],{},[22,54566,54567],{},"元素.innerText=''",[22,54569,54570],{},"元素.innerHTML=''",[22,54572,54573],{},"不写字符串输出数字也是可以的",[22,54575,54576],{},"元素.innerHtml=1",[22960,54578,54580],{"id":54579},"_3131-innertext","3.1.3.1 innerText",[40,54582,54583],{},[2564,54584],{"alt":35,"src":54585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[40,54587,54588],{},"思路：实现了修改盒子中的内容！",[40,54590,54591],{},"它只显示纯文本，不解析标签",[22960,54593,54595],{"id":54594},"_3132-innerhtml","3.1.3.2 innerHTML",[40,54597,54598],{},[2564,54599],{"alt":35,"src":54600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[40,54602,54603],{},"相比于innerText，他的强大之处在于可以解析标签",[1233,54605,54607],{"id":54606},"_314-操作元素属性","3.1.4 操作元素属性",[22960,54609,54611],{"id":54610},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[40,54613,54614],{},[2564,54615],{"alt":35,"src":54616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22960,54618,54620],{"id":54619},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[40,54622,54623],{},[2564,54624],{"alt":35,"src":54625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[40,54627,54628],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[40,54630,54631],{},"div.style.backgroundColor = 'hotpink'",[40,54633,54634],{},"如果按照css的写法，-表示减，就会出错",[40,54636,54637],{},"body元素不需要再获取，直接用就行！！！！！！",[40,54639,54640],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[40,54642,54643],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[40,54645,54646],{},[2564,54647],{"alt":35,"src":54648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[40,54650,54651],{},[2564,54652],{"alt":35,"src":54653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[19,54655,54656,54659,54662,54665,54668,54671],{},[22,54657,54658],{},"className这个方式就是修改很多样式的时候来使用的！",[22,54660,54661],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[22,54663,54664],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[22,54666,54667],{},"className为属性名，如果还用class的话就导致与关键字冲突",[22,54669,54670],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[22,54672,54673,54674,54679],{},"解析标签的时候就变为了",[52575,54675],{"className":54676},[54677,54678],"nav","box",[54680,54681],"br",{},[40,54683,54684],{},"例子：",[52575,54686],{"className":54687},[54677],[52777,54689,54690],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[40,54692,54693],{},[2564,54694],{"alt":35,"src":54695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[40,54697,54698],{},"追加和删除类名用classList",[40,54700,54701],{},"常用于类似于开关的操作",[40,54703,54704],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[40,54706,54707],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22960,54709,54711],{"id":54710},"_3143-牢记点","3.1.4.3 牢记点",[19,54713,54714,54717,54720,54723,54726,54729,54732,54735,54738],{},[22,54715,54716],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[22,54718,54719],{},"使用style属性操作css时不要忘记引号",[22,54721,54722],{},"使用className或者classList时也不要忘记引号",[22,54724,54725],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[22,54727,54728],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[22,54730,54731],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[22,54733,54734],{},"若： let arr=['1','2',3] arr[0]=1",[22,54736,54737],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[22,54739,54740],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[1233,54742,54744],{"id":54743},"_315-操作表单元素","3.1.5 操作表单元素",[19,54746,54747],{},[22,54748,54749],{},"天生的属性",[40,54751,54752],{},[2564,54753],{"alt":35,"src":54754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[40,54756,54757],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[40,54759,54760],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[40,54762,54763],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[40,54765,54766],{},[2564,54767],{"alt":35,"src":54768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[29,54770,54772],{"className":51597,"code":54771,"language":51599,"meta":35,"style":35},"在复选框中如果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",[37,54773,54774,54779,54811,54816,54821,54826,54831,54835,54840,54845,54862,54874,54879],{"__ignoreMap":35},[51,54775,54776],{"class":53,"line":54},[51,54777,54778],{"class":72},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[51,54780,54781,54783,54786,54789,54791,54794,54796,54798,54800,54802,54804,54806,54809],{"class":53,"line":61},[51,54782,2154],{"class":72},[51,54784,54785],{"class":52264},"input",[51,54787,54788],{"class":68}," type",[51,54790,108],{"class":72},[51,54792,54793],{"class":282},"\"checkbox\"",[51,54795,15882],{"class":68},[51,54797,108],{"class":72},[51,54799,8614],{"class":282},[51,54801,15921],{"class":68},[51,54803,108],{"class":72},[51,54805,8614],{"class":282},[51,54807,54808],{"class":68}," checked",[51,54810,52271],{"class":72},[51,54812,54813],{"class":53,"line":93},[51,54814,54815],{"class":72},"不选的话：\n",[51,54817,54818],{"class":53,"line":99},[51,54819,54820],{"class":72},"const input = document.querySelector('input')\n",[51,54822,54823],{"class":53,"line":120},[51,54824,54825],{"class":72},"input.checked=false\n",[51,54827,54828],{"class":53,"line":129},[51,54829,54830],{"class":72},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[51,54832,54833],{"class":53,"line":206},[51,54834,3480],{"emptyLinePlaceholder":1192},[51,54836,54837],{"class":53,"line":212},[51,54838,54839],{"class":72},"禁用按钮：\n",[51,54841,54842],{"class":53,"line":227},[51,54843,54844],{"class":72},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[51,54846,54847,54849,54852,54855,54858,54860],{"class":53,"line":370},[51,54848,2154],{"class":72},[51,54850,54851],{"class":52264},"button",[51,54853,54854],{"class":68}," disabled",[51,54856,54857],{"class":72},">点击\u003C\u002F",[51,54859,54851],{"class":52264},[51,54861,52271],{"class":72},[51,54863,54864,54866,54868,54870,54872],{"class":53,"line":387},[51,54865,2154],{"class":72},[51,54867,54851],{"class":52264},[51,54869,54857],{"class":72},[51,54871,54851],{"class":52264},[51,54873,52271],{"class":72},[51,54875,54876],{"class":53,"line":404},[51,54877,54878],{"class":72},"const bt = document.querySelector('button')\n",[51,54880,54881],{"class":53,"line":415},[51,54882,54883],{"class":72},"bt.disabled = false\n",[19,54885,54886],{"start":61},[22,54887,54888],{},"自定义属性",[40,54890,54891],{},[2564,54892],{"alt":35,"src":54893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[29,54895,54897],{"className":54031,"code":54896,"language":54033,"meta":35,"style":35},"\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",[37,54898,54899,54907,54935,54954,54973,54992,55011,55019,55024,55029,55034,55039,55047],{"__ignoreMap":35},[51,54900,54901,54903,54905],{"class":53,"line":54},[51,54902,2154],{"class":72},[51,54904,52764],{"class":52264},[51,54906,52271],{"class":72},[51,54908,54909,54911,54913,54916,54918,54920,54923,54925,54928,54931,54933],{"class":53,"line":61},[51,54910,53108],{"class":72},[51,54912,52575],{"class":52264},[51,54914,54915],{"class":68}," data-id",[51,54917,108],{"class":72},[51,54919,4755],{"class":282},[51,54921,54922],{"class":68}," data-spm",[51,54924,108],{"class":72},[51,54926,54927],{"class":282},"\"我不知道\"",[51,54929,54930],{"class":72},">1\u003C\u002F",[51,54932,52575],{"class":52264},[51,54934,52271],{"class":72},[51,54936,54937,54939,54941,54943,54945,54947,54950,54952],{"class":53,"line":93},[51,54938,53108],{"class":72},[51,54940,52575],{"class":52264},[51,54942,54915],{"class":68},[51,54944,108],{"class":72},[51,54946,4778],{"class":282},[51,54948,54949],{"class":72},">2\u003C\u002F",[51,54951,52575],{"class":52264},[51,54953,52271],{"class":72},[51,54955,54956,54958,54960,54962,54964,54966,54969,54971],{"class":53,"line":99},[51,54957,53108],{"class":72},[51,54959,52575],{"class":52264},[51,54961,54915],{"class":68},[51,54963,108],{"class":72},[51,54965,4791],{"class":282},[51,54967,54968],{"class":72},">3\u003C\u002F",[51,54970,52575],{"class":52264},[51,54972,52271],{"class":72},[51,54974,54975,54977,54979,54981,54983,54985,54988,54990],{"class":53,"line":120},[51,54976,53108],{"class":72},[51,54978,52575],{"class":52264},[51,54980,54915],{"class":68},[51,54982,108],{"class":72},[51,54984,4804],{"class":282},[51,54986,54987],{"class":72},">4\u003C\u002F",[51,54989,52575],{"class":52264},[51,54991,52271],{"class":72},[51,54993,54994,54996,54998,55000,55002,55004,55007,55009],{"class":53,"line":129},[51,54995,53108],{"class":72},[51,54997,52575],{"class":52264},[51,54999,54915],{"class":68},[51,55001,108],{"class":72},[51,55003,4825],{"class":282},[51,55005,55006],{"class":72},">5\u003C\u002F",[51,55008,52575],{"class":52264},[51,55010,52271],{"class":72},[51,55012,55013,55015,55017],{"class":53,"line":206},[51,55014,53108],{"class":72},[51,55016,52777],{"class":52264},[51,55018,52271],{"class":72},[51,55020,55021],{"class":53,"line":212},[51,55022,55023],{"class":72},"    const one = document.querySelector('div')\n",[51,55025,55026],{"class":53,"line":227},[51,55027,55028],{"class":72},"    console.log(one.dataset)\n",[51,55030,55031],{"class":53,"line":370},[51,55032,55033],{"class":72},"    console.log(one.dataset.id)\n",[51,55035,55036],{"class":53,"line":387},[51,55037,55038],{"class":72},"    console.log(one.dataset.spm)\n",[51,55040,55041,55043,55045],{"class":53,"line":404},[51,55042,53381],{"class":72},[51,55044,52777],{"class":52264},[51,55046,52271],{"class":72},[51,55048,55049,55051,55053],{"class":53,"line":415},[51,55050,52749],{"class":72},[51,55052,52764],{"class":52264},[51,55054,52271],{"class":72},[40,55056,55057],{},[2564,55058],{"alt":35,"src":55059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[40,55061,55062],{},"document.querySelector选择的是第一个对象（元素）",[1233,55064,55066],{"id":55065},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[40,55068,55069],{},[2564,55070],{"alt":35,"src":55071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[40,55073,55074],{},[2564,55075],{"alt":35,"src":55076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[40,55078,55079],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52777,55081,55082],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[40,55084,55085],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52777,55087,55088],{},"\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",[40,55090,55091],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[40,55093,55094],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[40,55096,55097],{},"单位为毫秒！！！",[40,55099,55100],{},"可以搭配匿名函数来用！！！",[40,55102,55103],{},"setInterval(function () {",[40,55105,55106],{},"alert('两秒执行一次')",[40,55108,55109],{},"}, 2000)",[40,55111,55112],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[40,55114,55115],{},"function fn() {",[40,55117,55118],{},"document.write(1)",[40,55120,2190],{},[40,55122,55123],{},"setInterval(fn, 1000)",[40,55125,55126],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[40,55128,55129],{},"setInterval('fn()', 1000)",[40,55131,55132],{},[2564,55133],{"alt":35,"src":55134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22960,55136,55138],{"id":55137},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[29,55140,55142],{"className":51597,"code":55141,"language":51599,"meta":35,"style":35},"\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",[37,55143,55144,55154,55168,55172,55180,55194,55214,55226,55234,55238,55246,55283,55288,55293,55298,55306,55314,55336,55344,55349,55371,55376,55381,55392,55397,55417,55425,55440,55455,55466,55471,55481,55491,55495,55504,55508,55516,55524,55528],{"__ignoreMap":35},[51,55145,55146,55148,55150,55152],{"class":53,"line":54},[51,55147,52261],{"class":72},[51,55149,52265],{"class":52264},[51,55151,52268],{"class":68},[51,55153,52271],{"class":72},[51,55155,55156,55158,55160,55162,55164,55166],{"class":53,"line":61},[51,55157,2154],{"class":72},[51,55159,51599],{"class":52264},[51,55161,52280],{"class":68},[51,55163,108],{"class":72},[51,55165,52285],{"class":282},[51,55167,52271],{"class":72},[51,55169,55170],{"class":53,"line":93},[51,55171,3480],{"emptyLinePlaceholder":1192},[51,55173,55174,55176,55178],{"class":53,"line":99},[51,55175,2154],{"class":72},[51,55177,52298],{"class":52264},[51,55179,52271],{"class":72},[51,55181,55182,55184,55186,55188,55190,55192],{"class":53,"line":120},[51,55183,53108],{"class":72},[51,55185,52308],{"class":52264},[51,55187,52311],{"class":68},[51,55189,108],{"class":72},[51,55191,52316],{"class":282},[51,55193,52271],{"class":72},[51,55195,55196,55198,55200,55202,55204,55206,55208,55210,55212],{"class":53,"line":129},[51,55197,53108],{"class":72},[51,55199,52308],{"class":52264},[51,55201,15882],{"class":68},[51,55203,108],{"class":72},[51,55205,52355],{"class":282},[51,55207,52335],{"class":68},[51,55209,108],{"class":72},[51,55211,52362],{"class":282},[51,55213,52271],{"class":72},[51,55215,55216,55218,55220,55222,55224],{"class":53,"line":206},[51,55217,53108],{"class":72},[51,55219,52371],{"class":52264},[51,55221,52374],{"class":72},[51,55223,52371],{"class":52264},[51,55225,52271],{"class":72},[51,55227,55228,55230,55232],{"class":53,"line":212},[51,55229,52749],{"class":72},[51,55231,52298],{"class":52264},[51,55233,52271],{"class":72},[51,55235,55236],{"class":53,"line":227},[51,55237,3480],{"emptyLinePlaceholder":1192},[51,55239,55240,55242,55244],{"class":53,"line":370},[51,55241,2154],{"class":72},[51,55243,52764],{"class":52264},[51,55245,52271],{"class":72},[51,55247,55248,55250,55253,55255,55257,55259,55261,55263,55265,55268,55270,55273,55276,55278,55281],{"class":53,"line":387},[51,55249,53108],{"class":72},[51,55251,55252],{"class":52264},"textarea",[51,55254,15882],{"class":68},[51,55256,108],{"class":72},[51,55258,8614],{"class":282},[51,55260,15921],{"class":68},[51,55262,108],{"class":72},[51,55264,8614],{"class":282},[51,55266,55267],{"class":68}," cols",[51,55269,108],{"class":72},[51,55271,55272],{"class":282},"\"30\"",[51,55274,55275],{"class":68}," rows",[51,55277,108],{"class":72},[51,55279,55280],{"class":282},"\"10\"",[51,55282,52271],{"class":72},[51,55284,55285],{"class":53,"line":404},[51,55286,55287],{"class":72},"        用户注册协议\n",[51,55289,55290],{"class":53,"line":415},[51,55291,55292],{"class":72},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[51,55294,55295],{"class":53,"line":420},[51,55296,55297],{"class":72},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[51,55299,55300,55302,55304],{"class":53,"line":429},[51,55301,52740],{"class":72},[51,55303,55252],{"class":52264},[51,55305,52271],{"class":72},[51,55307,55308,55310,55312],{"class":53,"line":434},[51,55309,53108],{"class":72},[51,55311,54680],{"class":52264},[51,55313,52271],{"class":72},[51,55315,55316,55318,55320,55322,55324,55327,55329,55332,55334],{"class":53,"line":448},[51,55317,53108],{"class":72},[51,55319,54851],{"class":52264},[51,55321,54450],{"class":68},[51,55323,108],{"class":72},[51,55325,55326],{"class":282},"\"btn\"",[51,55328,54854],{"class":68},[51,55330,55331],{"class":72},">我已经阅读用户协议(5)\u003C\u002F",[51,55333,54851],{"class":52264},[51,55335,52271],{"class":72},[51,55337,55338,55340,55342],{"class":53,"line":462},[51,55339,53108],{"class":72},[51,55341,52777],{"class":52264},[51,55343,52271],{"class":72},[51,55345,55346],{"class":53,"line":470},[51,55347,55348],{"class":57},"    \u002F\u002F 1. 获取元素\n",[51,55350,55351,55353,55356,55358,55361,55364,55366,55369],{"class":53,"line":2783},[51,55352,12183],{"class":64},[51,55354,55355],{"class":175}," btn",[51,55357,14526],{"class":64},[51,55359,55360],{"class":72}," document.",[51,55362,55363],{"class":68},"querySelector",[51,55365,73],{"class":72},[51,55367,55368],{"class":282},"'.btn'",[51,55370,90],{"class":72},[51,55372,55373],{"class":53,"line":2788},[51,55374,55375],{"class":57},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[51,55377,55378],{"class":53,"line":2817},[51,55379,55380],{"class":57},"    \u002F\u002F 2. 倒计时\n",[51,55382,55383,55385,55387,55389],{"class":53,"line":2822},[51,55384,53183],{"class":64},[51,55386,10400],{"class":72},[51,55388,108],{"class":64},[51,55390,55391],{"class":175}," 5\n",[51,55393,55394],{"class":53,"line":2839},[51,55395,55396],{"class":57},"    \u002F\u002F 2.1 开启定时器\n",[51,55398,55399,55401,55404,55406,55409,55411,55414],{"class":53,"line":2844},[51,55400,53183],{"class":64},[51,55402,55403],{"class":72}," n ",[51,55405,108],{"class":64},[51,55407,55408],{"class":68}," setInterval",[51,55410,73],{"class":72},[51,55412,55413],{"class":64},"function",[51,55415,55416],{"class":72}," () {\n",[51,55418,55419,55422],{"class":53,"line":2849},[51,55420,55421],{"class":72},"      i",[51,55423,55424],{"class":64},"--\n",[51,55426,55427,55430,55432,55435,55437],{"class":53,"line":2854},[51,55428,55429],{"class":72},"      btn.innerHTML ",[51,55431,108],{"class":64},[51,55433,55434],{"class":282}," `我已经阅读用户协议(${",[51,55436,1689],{"class":72},[51,55438,55439],{"class":282},"})`\n",[51,55441,55442,55445,55448,55451,55453],{"class":53,"line":2868},[51,55443,55444],{"class":64},"      if",[51,55446,55447],{"class":72}," (i ",[51,55449,55450],{"class":64},"===",[51,55452,5169],{"class":175},[51,55454,13404],{"class":72},[51,55456,55457,55460,55463],{"class":53,"line":2873},[51,55458,55459],{"class":68},"        clearInterval",[51,55461,55462],{"class":72},"(n)  ",[51,55464,55465],{"class":57},"\u002F\u002F 关闭定时器\n",[51,55467,55468],{"class":53,"line":3657},[51,55469,55470],{"class":57},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[51,55472,55473,55476,55478],{"class":53,"line":3671},[51,55474,55475],{"class":72},"        btn.disabled ",[51,55477,108],{"class":64},[51,55479,55480],{"class":175}," false\n",[51,55482,55483,55486,55488],{"class":53,"line":3679},[51,55484,55485],{"class":72},"        btn.innerHTML ",[51,55487,108],{"class":64},[51,55489,55490],{"class":282}," '同意'\n",[51,55492,55493],{"class":53,"line":3684},[51,55494,53362],{"class":72},[51,55496,55497,55500,55502],{"class":53,"line":3690},[51,55498,55499],{"class":72},"    }, ",[51,55501,7372],{"class":175},[51,55503,90],{"class":72},[51,55505,55506],{"class":53,"line":3696},[51,55507,3480],{"emptyLinePlaceholder":1192},[51,55509,55510,55512,55514],{"class":53,"line":3701},[51,55511,53381],{"class":72},[51,55513,52777],{"class":52264},[51,55515,52271],{"class":72},[51,55517,55518,55520,55522],{"class":53,"line":8910},[51,55519,52749],{"class":72},[51,55521,52764],{"class":52264},[51,55523,52271],{"class":72},[51,55525,55526],{"class":53,"line":8934},[51,55527,3480],{"emptyLinePlaceholder":1192},[51,55529,55530,55532,55534],{"class":53,"line":8939},[51,55531,52749],{"class":72},[51,55533,51599],{"class":52264},[51,55535,52271],{"class":72},[40,55537,55538],{},"不要一直想着用死循环,避免死循环",[40,55540,55541,55544],{},[37,55542,55543],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22960,55546,55548],{"id":55547},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[19,55550,55551],{},[22,55552,55553],{},"法1",[29,55555,55557],{"className":51597,"code":55556,"language":51599,"meta":35,"style":35},"\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",[37,55558,55559,55569,55583,55587,55595,55609,55629,55641,55649,55655,55666,55677,55681,55685,55692,55704,55708,55712,55719,55731,55745,55758,55772,55776,55780,55787,55798,55809,55820,55832,55844,55856,55860,55864,55872,55882,55895,55907,55920,55924,55928,55935,55945,55957,55969,55980,55991,56001,56013,56025,56029,56033,56042,56054,56066,56094,56107,56111,56115,56122,56133,56137,56145,56153,56157,56165,56179,56194,56218,56226,56241,56254,56262,56283,56295,56307,56319,56331,56343,56355,56367,56376,56384,56392,56400,56412,56435,56454,56473,56492,56511,56530,56549,56569,56573,56593,56612,56632,56653,56664,56681,56691,56701,56711,56716,56721,56726,56731,56756,56769,56773,56796,56800,56808,56816,56824,56828],{"__ignoreMap":35},[51,55560,55561,55563,55565,55567],{"class":53,"line":54},[51,55562,52261],{"class":72},[51,55564,52265],{"class":52264},[51,55566,52268],{"class":68},[51,55568,52271],{"class":72},[51,55570,55571,55573,55575,55577,55579,55581],{"class":53,"line":61},[51,55572,2154],{"class":72},[51,55574,51599],{"class":52264},[51,55576,52280],{"class":68},[51,55578,108],{"class":72},[51,55580,52285],{"class":282},[51,55582,52271],{"class":72},[51,55584,55585],{"class":53,"line":93},[51,55586,3480],{"emptyLinePlaceholder":1192},[51,55588,55589,55591,55593],{"class":53,"line":99},[51,55590,2154],{"class":72},[51,55592,52298],{"class":52264},[51,55594,52271],{"class":72},[51,55596,55597,55599,55601,55603,55605,55607],{"class":53,"line":120},[51,55598,53108],{"class":72},[51,55600,52308],{"class":52264},[51,55602,52311],{"class":68},[51,55604,108],{"class":72},[51,55606,52316],{"class":282},[51,55608,52271],{"class":72},[51,55610,55611,55613,55615,55617,55619,55621,55623,55625,55627],{"class":53,"line":129},[51,55612,53108],{"class":72},[51,55614,52308],{"class":52264},[51,55616,15882],{"class":68},[51,55618,108],{"class":72},[51,55620,52355],{"class":282},[51,55622,52335],{"class":68},[51,55624,108],{"class":72},[51,55626,52362],{"class":282},[51,55628,52271],{"class":72},[51,55630,55631,55633,55635,55637,55639],{"class":53,"line":206},[51,55632,53108],{"class":72},[51,55634,52371],{"class":52264},[51,55636,52374],{"class":72},[51,55638,52371],{"class":52264},[51,55640,52271],{"class":72},[51,55642,55643,55645,55647],{"class":53,"line":212},[51,55644,53108],{"class":72},[51,55646,1179],{"class":52264},[51,55648,52271],{"class":72},[51,55650,55651,55653],{"class":53,"line":227},[51,55652,7365],{"class":52264},[51,55654,16534],{"class":72},[51,55656,55657,55660,55662,55664],{"class":53,"line":370},[51,55658,55659],{"class":175},"      padding",[51,55661,52401],{"class":72},[51,55663,176],{"class":175},[51,55665,179],{"class":72},[51,55667,55668,55671,55673,55675],{"class":53,"line":387},[51,55669,55670],{"class":175},"      margin",[51,55672,52401],{"class":72},[51,55674,176],{"class":175},[51,55676,179],{"class":72},[51,55678,55679],{"class":53,"line":404},[51,55680,3267],{"class":72},[51,55682,55683],{"class":53,"line":415},[51,55684,3480],{"emptyLinePlaceholder":1192},[51,55686,55687,55690],{"class":53,"line":420},[51,55688,55689],{"class":52264},"    li",[51,55691,16534],{"class":72},[51,55693,55694,55697,55699,55702],{"class":53,"line":429},[51,55695,55696],{"class":175},"      list-style",[51,55698,52401],{"class":72},[51,55700,55701],{"class":175},"none",[51,55703,179],{"class":72},[51,55705,55706],{"class":53,"line":434},[51,55707,3267],{"class":72},[51,55709,55710],{"class":53,"line":448},[51,55711,3480],{"emptyLinePlaceholder":1192},[51,55713,55714,55717],{"class":53,"line":462},[51,55715,55716],{"class":68},"    .box",[51,55718,16534],{"class":72},[51,55720,55721,55724,55726,55729],{"class":53,"line":470},[51,55722,55723],{"class":175},"      position",[51,55725,52401],{"class":72},[51,55727,55728],{"class":175},"relative",[51,55730,179],{"class":72},[51,55732,55733,55736,55738,55741,55743],{"class":53,"line":2783},[51,55734,55735],{"class":175},"      width",[51,55737,52401],{"class":72},[51,55739,55740],{"class":175},"976",[51,55742,52456],{"class":64},[51,55744,179],{"class":72},[51,55746,55747,55750,55752,55754,55756],{"class":53,"line":2788},[51,55748,55749],{"class":175},"      height",[51,55751,52401],{"class":72},[51,55753,2641],{"class":175},[51,55755,52456],{"class":64},[51,55757,179],{"class":72},[51,55759,55760,55762,55764,55766,55768,55770],{"class":53,"line":2817},[51,55761,55670],{"class":175},[51,55763,52401],{"class":72},[51,55765,612],{"class":175},[51,55767,52456],{"class":64},[51,55769,52520],{"class":175},[51,55771,179],{"class":72},[51,55773,55774],{"class":53,"line":2822},[51,55775,3267],{"class":72},[51,55777,55778],{"class":53,"line":2839},[51,55779,3480],{"emptyLinePlaceholder":1192},[51,55781,55782,55785],{"class":53,"line":2844},[51,55783,55784],{"class":68},"    .slider-footer",[51,55786,16534],{"class":72},[51,55788,55789,55791,55793,55796],{"class":53,"line":2849},[51,55790,55723],{"class":175},[51,55792,52401],{"class":72},[51,55794,55795],{"class":175},"absolute",[51,55797,179],{"class":72},[51,55799,55800,55803,55805,55807],{"class":53,"line":2854},[51,55801,55802],{"class":175},"      left",[51,55804,52401],{"class":72},[51,55806,176],{"class":175},[51,55808,179],{"class":72},[51,55810,55811,55814,55816,55818],{"class":53,"line":2868},[51,55812,55813],{"class":175},"      bottom",[51,55815,52401],{"class":72},[51,55817,176],{"class":175},[51,55819,179],{"class":72},[51,55821,55822,55824,55826,55828,55830],{"class":53,"line":2873},[51,55823,55735],{"class":175},[51,55825,52401],{"class":72},[51,55827,612],{"class":175},[51,55829,1577],{"class":64},[51,55831,179],{"class":72},[51,55833,55834,55836,55838,55840,55842],{"class":53,"line":3657},[51,55835,55749],{"class":175},[51,55837,52401],{"class":72},[51,55839,1821],{"class":175},[51,55841,1577],{"class":64},[51,55843,179],{"class":72},[51,55845,55846,55849,55851,55854],{"class":53,"line":3671},[51,55847,55848],{"class":175},"      background-color",[51,55850,52401],{"class":72},[51,55852,55853],{"class":175},"skyblue",[51,55855,179],{"class":72},[51,55857,55858],{"class":53,"line":3679},[51,55859,3267],{"class":72},[51,55861,55862],{"class":53,"line":3684},[51,55863,3480],{"emptyLinePlaceholder":1192},[51,55865,55866,55868,55870],{"class":53,"line":3690},[51,55867,55784],{"class":68},[51,55869,7787],{"class":52264},[51,55871,16534],{"class":72},[51,55873,55874,55876,55878,55880],{"class":53,"line":3696},[51,55875,55723],{"class":175},[51,55877,52401],{"class":72},[51,55879,55795],{"class":175},[51,55881,179],{"class":72},[51,55883,55884,55887,55889,55891,55893],{"class":53,"line":3701},[51,55885,55886],{"class":175},"      font-size",[51,55888,52401],{"class":72},[51,55890,2145],{"class":175},[51,55892,52456],{"class":64},[51,55894,179],{"class":72},[51,55896,55897,55899,55901,55903,55905],{"class":53,"line":8910},[51,55898,55802],{"class":175},[51,55900,52401],{"class":72},[51,55902,457],{"class":175},[51,55904,52456],{"class":64},[51,55906,179],{"class":72},[51,55908,55909,55912,55914,55916,55918],{"class":53,"line":8934},[51,55910,55911],{"class":175},"      top",[51,55913,52401],{"class":72},[51,55915,1568],{"class":175},[51,55917,52456],{"class":64},[51,55919,179],{"class":72},[51,55921,55922],{"class":53,"line":8939},[51,55923,3267],{"class":72},[51,55925,55926],{"class":53,"line":8945},[51,55927,3480],{"emptyLinePlaceholder":1192},[51,55929,55930,55933],{"class":53,"line":8972},[51,55931,55932],{"class":52264},"    ul",[51,55934,16534],{"class":72},[51,55936,55937,55939,55941,55943],{"class":53,"line":8977},[51,55938,55723],{"class":175},[51,55940,52401],{"class":72},[51,55942,55795],{"class":175},[51,55944,179],{"class":72},[51,55946,55947,55949,55951,55953,55955],{"class":53,"line":8983},[51,55948,55911],{"class":175},[51,55950,52401],{"class":72},[51,55952,2026],{"class":175},[51,55954,52456],{"class":64},[51,55956,179],{"class":72},[51,55958,55959,55961,55963,55965,55967],{"class":53,"line":8995},[51,55960,55802],{"class":175},[51,55962,52401],{"class":72},[51,55964,457],{"class":175},[51,55966,52456],{"class":64},[51,55968,179],{"class":72},[51,55970,55971,55974,55976,55978],{"class":53,"line":9007},[51,55972,55973],{"class":175},"      display",[51,55975,52401],{"class":72},[51,55977,52441],{"class":175},[51,55979,179],{"class":72},[51,55981,55982,55985,55987,55989],{"class":53,"line":9019},[51,55983,55984],{"class":175},"      justify-content",[51,55986,52401],{"class":72},[51,55988,52632],{"class":175},[51,55990,179],{"class":72},[51,55992,55993,55995,55997,55999],{"class":53,"line":10678},[51,55994,55723],{"class":175},[51,55996,52401],{"class":72},[51,55998,55795],{"class":175},[51,56000,179],{"class":72},[51,56002,56003,56005,56007,56009,56011],{"class":53,"line":10703},[51,56004,55735],{"class":175},[51,56006,52401],{"class":72},[51,56008,5069],{"class":175},[51,56010,52456],{"class":64},[51,56012,179],{"class":72},[51,56014,56015,56017,56019,56021,56023],{"class":53,"line":10726},[51,56016,55749],{"class":175},[51,56018,52401],{"class":72},[51,56020,457],{"class":175},[51,56022,52456],{"class":64},[51,56024,179],{"class":72},[51,56026,56027],{"class":53,"line":10750},[51,56028,3267],{"class":72},[51,56030,56031],{"class":53,"line":10755},[51,56032,3480],{"emptyLinePlaceholder":1192},[51,56034,56035,56037,56040],{"class":53,"line":10760},[51,56036,55932],{"class":52264},[51,56038,56039],{"class":52264}," li",[51,56041,16534],{"class":72},[51,56043,56044,56046,56048,56050,56052],{"class":53,"line":10765},[51,56045,55735],{"class":175},[51,56047,52401],{"class":72},[51,56049,457],{"class":175},[51,56051,52456],{"class":64},[51,56053,179],{"class":72},[51,56055,56056,56058,56060,56062,56064],{"class":53,"line":10774},[51,56057,55749],{"class":175},[51,56059,52401],{"class":72},[51,56061,457],{"class":175},[51,56063,52456],{"class":64},[51,56065,179],{"class":72},[51,56067,56068,56070,56072,56075,56077,56079,56081,56083,56085,56087,56089,56092],{"class":53,"line":10779},[51,56069,55848],{"class":175},[51,56071,52401],{"class":72},[51,56073,56074],{"class":175},"rgba",[51,56076,73],{"class":72},[51,56078,176],{"class":175},[51,56080,13397],{"class":72},[51,56082,176],{"class":175},[51,56084,13397],{"class":72},[51,56086,176],{"class":175},[51,56088,13397],{"class":72},[51,56090,56091],{"class":175},".4",[51,56093,615],{"class":72},[51,56095,56096,56099,56101,56103,56105],{"class":53,"line":10785},[51,56097,56098],{"class":175},"      border-radius",[51,56100,52401],{"class":72},[51,56102,443],{"class":175},[51,56104,52456],{"class":64},[51,56106,179],{"class":72},[51,56108,56109],{"class":53,"line":10806},[51,56110,3267],{"class":72},[51,56112,56113],{"class":53,"line":10812},[51,56114,3480],{"emptyLinePlaceholder":1192},[51,56116,56117,56120],{"class":53,"line":10826},[51,56118,56119],{"class":68},"    .activate",[51,56121,16534],{"class":72},[51,56123,56124,56126,56128,56131],{"class":53,"line":10832},[51,56125,55848],{"class":175},[51,56127,52401],{"class":72},[51,56129,56130],{"class":175},"#f7f7f7",[51,56132,179],{"class":72},[51,56134,56135],{"class":53,"line":10859},[51,56136,3267],{"class":72},[51,56138,56139,56141,56143],{"class":53,"line":10868},[51,56140,53381],{"class":72},[51,56142,1179],{"class":52264},[51,56144,52271],{"class":72},[51,56146,56147,56149,56151],{"class":53,"line":10874},[51,56148,52749],{"class":72},[51,56150,52298],{"class":52264},[51,56152,52271],{"class":72},[51,56154,56155],{"class":53,"line":10882},[51,56156,3480],{"emptyLinePlaceholder":1192},[51,56158,56159,56161,56163],{"class":53,"line":10887},[51,56160,2154],{"class":72},[51,56162,52764],{"class":52264},[51,56164,52271],{"class":72},[51,56166,56167,56169,56171,56173,56175,56177],{"class":53,"line":17566},[51,56168,53108],{"class":72},[51,56170,52575],{"class":52264},[51,56172,54450],{"class":68},[51,56174,108],{"class":72},[51,56176,54455],{"class":282},[51,56178,52271],{"class":72},[51,56180,56181,56183,56185,56187,56189,56192],{"class":53,"line":17572},[51,56182,52305],{"class":72},[51,56184,52575],{"class":52264},[51,56186,54450],{"class":68},[51,56188,108],{"class":72},[51,56190,56191],{"class":282},"\"slider-wrapper\"",[51,56193,52271],{"class":72},[51,56195,56196,56199,56201,56204,56206,56209,56212,56214,56216],{"class":53,"line":17595},[51,56197,56198],{"class":72},"      \u003C",[51,56200,2564],{"class":52264},[51,56202,56203],{"class":68}," src",[51,56205,108],{"class":72},[51,56207,56208],{"class":282},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[51,56210,56211],{"class":68}," alt",[51,56213,108],{"class":72},[51,56215,8614],{"class":282},[51,56217,52271],{"class":72},[51,56219,56220,56222,56224],{"class":53,"line":17601},[51,56221,52740],{"class":72},[51,56223,52575],{"class":52264},[51,56225,52271],{"class":72},[51,56227,56228,56230,56232,56234,56236,56239],{"class":53,"line":17624},[51,56229,52305],{"class":72},[51,56231,52575],{"class":52264},[51,56233,54450],{"class":68},[51,56235,108],{"class":72},[51,56237,56238],{"class":282},"\"slider-footer\"",[51,56240,52271],{"class":72},[51,56242,56243,56245,56247,56250,56252],{"class":53,"line":17638},[51,56244,56198],{"class":72},[51,56246,40],{"class":52264},[51,56248,56249],{"class":72},">对人类来说会不会太超前了?\u003C\u002F",[51,56251,40],{"class":52264},[51,56253,52271],{"class":72},[51,56255,56256,56258,56260],{"class":53,"line":17658},[51,56257,56198],{"class":72},[51,56259,1000],{"class":52264},[51,56261,52271],{"class":72},[51,56263,56264,56267,56269,56271,56273,56276,56279,56281],{"class":53,"line":17664},[51,56265,56266],{"class":72},"        \u003C",[51,56268,22],{"class":52264},[51,56270,54450],{"class":68},[51,56272,108],{"class":72},[51,56274,56275],{"class":282},"\"activate\"",[51,56277,56278],{"class":72},">\u003C\u002F",[51,56280,22],{"class":52264},[51,56282,52271],{"class":72},[51,56284,56285,56287,56289,56291,56293],{"class":53,"line":17675},[51,56286,56266],{"class":72},[51,56288,22],{"class":52264},[51,56290,56278],{"class":72},[51,56292,22],{"class":52264},[51,56294,52271],{"class":72},[51,56296,56297,56299,56301,56303,56305],{"class":53,"line":17698},[51,56298,56266],{"class":72},[51,56300,22],{"class":52264},[51,56302,56278],{"class":72},[51,56304,22],{"class":52264},[51,56306,52271],{"class":72},[51,56308,56309,56311,56313,56315,56317],{"class":53,"line":17720},[51,56310,56266],{"class":72},[51,56312,22],{"class":52264},[51,56314,56278],{"class":72},[51,56316,22],{"class":52264},[51,56318,52271],{"class":72},[51,56320,56321,56323,56325,56327,56329],{"class":53,"line":17725},[51,56322,56266],{"class":72},[51,56324,22],{"class":52264},[51,56326,56278],{"class":72},[51,56328,22],{"class":52264},[51,56330,52271],{"class":72},[51,56332,56333,56335,56337,56339,56341],{"class":53,"line":17731},[51,56334,56266],{"class":72},[51,56336,22],{"class":52264},[51,56338,56278],{"class":72},[51,56340,22],{"class":52264},[51,56342,52271],{"class":72},[51,56344,56345,56347,56349,56351,56353],{"class":53,"line":17745},[51,56346,56266],{"class":72},[51,56348,22],{"class":52264},[51,56350,56278],{"class":72},[51,56352,22],{"class":52264},[51,56354,52271],{"class":72},[51,56356,56357,56359,56361,56363,56365],{"class":53,"line":17758},[51,56358,56266],{"class":72},[51,56360,22],{"class":52264},[51,56362,56278],{"class":72},[51,56364,22],{"class":52264},[51,56366,52271],{"class":72},[51,56368,56369,56372,56374],{"class":53,"line":17763},[51,56370,56371],{"class":72},"      \u003C\u002F",[51,56373,1000],{"class":52264},[51,56375,52271],{"class":72},[51,56377,56378,56380,56382],{"class":53,"line":17777},[51,56379,52740],{"class":72},[51,56381,52575],{"class":52264},[51,56383,52271],{"class":72},[51,56385,56386,56388,56390],{"class":53,"line":17782},[51,56387,53381],{"class":72},[51,56389,52575],{"class":52264},[51,56391,52271],{"class":72},[51,56393,56394,56396,56398],{"class":53,"line":17788},[51,56395,53108],{"class":72},[51,56397,52777],{"class":52264},[51,56399,52271],{"class":72},[51,56401,56402,56404,56407,56409],{"class":53,"line":17793},[51,56403,12183],{"class":64},[51,56405,56406],{"class":175}," arrImage",[51,56408,14526],{"class":64},[51,56410,56411],{"class":72}," [\n",[51,56413,56414,56417,56420,56423,56426,56429,56432],{"class":53,"line":17807},[51,56415,56416],{"class":72},"      { url: ",[51,56418,56419],{"class":282},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[51,56421,56422],{"class":72},", title: ",[51,56424,56425],{"class":282},"'对人类来说会不会太超前了?'",[51,56427,56428],{"class":72},", color: ",[51,56430,56431],{"class":282},"'rgba(100,67,68)'",[51,56433,56434],{"class":72}," },\n",[51,56436,56437,56439,56442,56444,56447,56449,56452],{"class":53,"line":17812},[51,56438,56416],{"class":72},[51,56440,56441],{"class":282},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[51,56443,56422],{"class":72},[51,56445,56446],{"class":282},"'开启剑与雪的黑暗传说!'",[51,56448,56428],{"class":72},[51,56450,56451],{"class":282},"'rgba(43,35,26)'",[51,56453,56434],{"class":72},[51,56455,56456,56458,56461,56463,56466,56468,56471],{"class":53,"line":17817},[51,56457,56416],{"class":72},[51,56459,56460],{"class":282},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[51,56462,56422],{"class":72},[51,56464,56465],{"class":282},"'真正的jo厨出现了!'",[51,56467,56428],{"class":72},[51,56469,56470],{"class":282},"'rgba(36,31,33)'",[51,56472,56434],{"class":72},[51,56474,56475,56477,56480,56482,56485,56487,56490],{"class":53,"line":17831},[51,56476,56416],{"class":72},[51,56478,56479],{"class":282},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[51,56481,56422],{"class":72},[51,56483,56484],{"class":282},"'李玉刚:让世界通过b站看到东方大国文化'",[51,56486,56428],{"class":72},[51,56488,56489],{"class":282},"'rgba(139,98,66)'",[51,56491,56434],{"class":72},[51,56493,56494,56496,56499,56501,56504,56506,56509],{"class":53,"line":17843},[51,56495,56416],{"class":72},[51,56497,56498],{"class":282},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[51,56500,56422],{"class":72},[51,56502,56503],{"class":282},"'快来分享你的寒假日常吧'",[51,56505,56428],{"class":72},[51,56507,56508],{"class":282},"'rgba(67,90,92)'",[51,56510,56434],{"class":72},[51,56512,56513,56515,56518,56520,56523,56525,56528],{"class":53,"line":17848},[51,56514,56416],{"class":72},[51,56516,56517],{"class":282},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[51,56519,56422],{"class":72},[51,56521,56522],{"class":282},"'哔哩哔哩小年YEAR'",[51,56524,56428],{"class":72},[51,56526,56527],{"class":282},"'rgba(166,131,143)'",[51,56529,56434],{"class":72},[51,56531,56532,56534,56537,56539,56542,56544,56547],{"class":53,"line":17861},[51,56533,56416],{"class":72},[51,56535,56536],{"class":282},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[51,56538,56422],{"class":72},[51,56540,56541],{"class":282},"'一站式解决你的电脑配置问题'",[51,56543,56428],{"class":72},[51,56545,56546],{"class":282},"'rgba(53,29,25)'",[51,56548,56434],{"class":72},[51,56550,56551,56553,56556,56558,56561,56563,56566],{"class":53,"line":17866},[51,56552,56416],{"class":72},[51,56554,56555],{"class":282},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[51,56557,56422],{"class":72},[51,56559,56560],{"class":282},"'谁不想和小猫咪贴贴呢?'",[51,56562,56428],{"class":72},[51,56564,56565],{"class":282},"'rgba(99,72,114)'",[51,56567,56568],{"class":72}," }\n",[51,56570,56571],{"class":53,"line":17871},[51,56572,54073],{"class":72},[51,56574,56575,56577,56580,56582,56584,56586,56588,56591],{"class":53,"line":17876},[51,56576,12183],{"class":64},[51,56578,56579],{"class":175}," img",[51,56581,14526],{"class":64},[51,56583,55360],{"class":72},[51,56585,55363],{"class":68},[51,56587,73],{"class":72},[51,56589,56590],{"class":282},"'.slider-wrapper img'",[51,56592,90],{"class":72},[51,56594,56595,56597,56599,56601,56603,56605,56607,56610],{"class":53,"line":17889},[51,56596,12183],{"class":64},[51,56598,7787],{"class":175},[51,56600,14526],{"class":64},[51,56602,55360],{"class":72},[51,56604,55363],{"class":68},[51,56606,73],{"class":72},[51,56608,56609],{"class":282},"'.slider-footer p'",[51,56611,90],{"class":72},[51,56613,56614,56616,56619,56621,56623,56625,56627,56630],{"class":53,"line":17894},[51,56615,12183],{"class":64},[51,56617,56618],{"class":175}," color",[51,56620,14526],{"class":64},[51,56622,55360],{"class":72},[51,56624,55363],{"class":68},[51,56626,73],{"class":72},[51,56628,56629],{"class":282},"'.slider-footer'",[51,56631,90],{"class":72},[51,56633,56634,56636,56639,56641,56643,56646,56648,56651],{"class":53,"line":33597},[51,56635,12183],{"class":64},[51,56637,56638],{"class":175}," lis",[51,56640,14526],{"class":64},[51,56642,55360],{"class":72},[51,56644,56645],{"class":68},"querySelectorAll",[51,56647,73],{"class":72},[51,56649,56650],{"class":282},"'.slider-footer ul li'",[51,56652,90],{"class":72},[51,56654,56655,56657,56659,56661],{"class":53,"line":33603},[51,56656,53183],{"class":64},[51,56658,10400],{"class":72},[51,56660,108],{"class":64},[51,56662,56663],{"class":175}," 1\n",[51,56665,56666,56668,56671,56673,56675,56677,56679],{"class":53,"line":33609},[51,56667,53183],{"class":64},[51,56669,56670],{"class":72}," timer ",[51,56672,108],{"class":64},[51,56674,55408],{"class":68},[51,56676,73],{"class":72},[51,56678,55413],{"class":64},[51,56680,55416],{"class":72},[51,56682,56683,56686,56688],{"class":53,"line":33615},[51,56684,56685],{"class":72},"      img.src ",[51,56687,108],{"class":64},[51,56689,56690],{"class":72}," arrImage[i].url\n",[51,56692,56693,56696,56698],{"class":53,"line":33621},[51,56694,56695],{"class":72},"      p.innerHTML ",[51,56697,108],{"class":64},[51,56699,56700],{"class":72}," arrImage[i].title\n",[51,56702,56703,56706,56708],{"class":53,"line":33632},[51,56704,56705],{"class":72},"      color.style.backgroundColor ",[51,56707,108],{"class":64},[51,56709,56710],{"class":72}," arrImage[i].color\n",[51,56712,56713],{"class":53,"line":33638},[51,56714,56715],{"class":57},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[51,56717,56718],{"class":53,"line":33658},[51,56719,56720],{"class":57},"      \u002F\u002F li.classList.add('activate')\n",[51,56722,56723],{"class":53,"line":33664},[51,56724,56725],{"class":57},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[51,56727,56728],{"class":53,"line":33675},[51,56729,56730],{"class":57},"      \u002F\u002F lis[i].classList.remove('activate')\n",[51,56732,56733,56736,56738,56740,56743,56746,56749,56751,56754],{"class":53,"line":33681},[51,56734,56735],{"class":72},"      document.",[51,56737,55363],{"class":68},[51,56739,73],{"class":72},[51,56741,56742],{"class":282},"'.activate'",[51,56744,56745],{"class":72},")?.classList.",[51,56747,56748],{"class":68},"toggle",[51,56750,73],{"class":72},[51,56752,56753],{"class":282},"'activate'",[51,56755,90],{"class":72},[51,56757,56758,56761,56763,56765,56767],{"class":53,"line":33687},[51,56759,56760],{"class":72},"      lis[i].classList.",[51,56762,221],{"class":68},[51,56764,73],{"class":72},[51,56766,56753],{"class":282},[51,56768,90],{"class":72},[51,56770,56771],{"class":53,"line":33693},[51,56772,3480],{"emptyLinePlaceholder":1192},[51,56774,56775,56778,56780,56782,56784,56786,56788,56790,56793],{"class":53,"line":33699},[51,56776,56777],{"class":72},"      i ",[51,56779,108],{"class":64},[51,56781,55447],{"class":72},[51,56783,114],{"class":64},[51,56785,26082],{"class":175},[51,56787,14676],{"class":72},[51,56789,1577],{"class":64},[51,56791,56792],{"class":72}," arrImage.",[51,56794,56795],{"class":175},"length\n",[51,56797,56798],{"class":53,"line":33705},[51,56799,3480],{"emptyLinePlaceholder":1192},[51,56801,56802,56804,56806],{"class":53,"line":33711},[51,56803,55499],{"class":72},[51,56805,7372],{"class":175},[51,56807,90],{"class":72},[51,56809,56810,56812,56814],{"class":53,"line":33717},[51,56811,53381],{"class":72},[51,56813,52777],{"class":52264},[51,56815,52271],{"class":72},[51,56817,56818,56820,56822],{"class":53,"line":33737},[51,56819,52749],{"class":72},[51,56821,52764],{"class":52264},[51,56823,52271],{"class":72},[51,56825,56826],{"class":53,"line":33743},[51,56827,3480],{"emptyLinePlaceholder":1192},[51,56829,56830,56832,56834],{"class":53,"line":33759},[51,56831,52749],{"class":72},[51,56833,51599],{"class":52264},[51,56835,52271],{"class":72},[40,56837,56838],{},[2564,56839],{"alt":35,"src":56840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[40,56842,56843],{},"?.就是短路保护,确保输出正常进行",[40,56845,56846],{},"不要忘记取余%,有时候可以用",[40,56848,56849],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[19,56851,56852],{"start":61},[22,56853,56854],{},"法2",[29,56856,56858],{"className":51597,"code":56857,"language":51599,"meta":35,"style":35},"\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",[37,56859,56860,56870,56884,56888,56896,56910,56930,56942,56950,56956,56966,56976,56980,56984,56990,57000,57004,57008,57014,57024,57036,57048,57062,57066,57070,57076,57086,57096,57106,57118,57130,57140,57144,57148,57156,57166,57178,57190,57202,57206,57210,57216,57226,57238,57250,57260,57270,57280,57292,57304,57308,57312,57320,57332,57344,57370,57382,57386,57390,57396,57406,57410,57418,57426,57430,57438,57452,57466,57486,57494,57508,57520,57528,57546,57558,57570,57582,57594,57606,57618,57630,57638,57646,57654,57662,57673,57689,57705,57721,57737,57753,57769,57785,57801,57805,57810,57828,57846,57856,57861,57866,57877,57883,57898,57907,57911,57916,57925,57930,57939,57944,57949,57954,57977,58007,58011,58019,58023,58031,58039,58043],{"__ignoreMap":35},[51,56861,56862,56864,56866,56868],{"class":53,"line":54},[51,56863,52261],{"class":72},[51,56865,52265],{"class":52264},[51,56867,52268],{"class":68},[51,56869,52271],{"class":72},[51,56871,56872,56874,56876,56878,56880,56882],{"class":53,"line":61},[51,56873,2154],{"class":72},[51,56875,51599],{"class":52264},[51,56877,52280],{"class":68},[51,56879,108],{"class":72},[51,56881,52285],{"class":282},[51,56883,52271],{"class":72},[51,56885,56886],{"class":53,"line":93},[51,56887,3480],{"emptyLinePlaceholder":1192},[51,56889,56890,56892,56894],{"class":53,"line":99},[51,56891,2154],{"class":72},[51,56893,52298],{"class":52264},[51,56895,52271],{"class":72},[51,56897,56898,56900,56902,56904,56906,56908],{"class":53,"line":120},[51,56899,53108],{"class":72},[51,56901,52308],{"class":52264},[51,56903,52311],{"class":68},[51,56905,108],{"class":72},[51,56907,52316],{"class":282},[51,56909,52271],{"class":72},[51,56911,56912,56914,56916,56918,56920,56922,56924,56926,56928],{"class":53,"line":129},[51,56913,53108],{"class":72},[51,56915,52308],{"class":52264},[51,56917,15882],{"class":68},[51,56919,108],{"class":72},[51,56921,52355],{"class":282},[51,56923,52335],{"class":68},[51,56925,108],{"class":72},[51,56927,52362],{"class":282},[51,56929,52271],{"class":72},[51,56931,56932,56934,56936,56938,56940],{"class":53,"line":206},[51,56933,53108],{"class":72},[51,56935,52371],{"class":52264},[51,56937,52374],{"class":72},[51,56939,52371],{"class":52264},[51,56941,52271],{"class":72},[51,56943,56944,56946,56948],{"class":53,"line":212},[51,56945,53108],{"class":72},[51,56947,1179],{"class":52264},[51,56949,52271],{"class":72},[51,56951,56952,56954],{"class":53,"line":227},[51,56953,7365],{"class":52264},[51,56955,16534],{"class":72},[51,56957,56958,56960,56962,56964],{"class":53,"line":370},[51,56959,55659],{"class":175},[51,56961,52401],{"class":72},[51,56963,176],{"class":175},[51,56965,179],{"class":72},[51,56967,56968,56970,56972,56974],{"class":53,"line":387},[51,56969,55670],{"class":175},[51,56971,52401],{"class":72},[51,56973,176],{"class":175},[51,56975,179],{"class":72},[51,56977,56978],{"class":53,"line":404},[51,56979,3267],{"class":72},[51,56981,56982],{"class":53,"line":415},[51,56983,3480],{"emptyLinePlaceholder":1192},[51,56985,56986,56988],{"class":53,"line":420},[51,56987,55689],{"class":52264},[51,56989,16534],{"class":72},[51,56991,56992,56994,56996,56998],{"class":53,"line":429},[51,56993,55696],{"class":175},[51,56995,52401],{"class":72},[51,56997,55701],{"class":175},[51,56999,179],{"class":72},[51,57001,57002],{"class":53,"line":434},[51,57003,3267],{"class":72},[51,57005,57006],{"class":53,"line":448},[51,57007,3480],{"emptyLinePlaceholder":1192},[51,57009,57010,57012],{"class":53,"line":462},[51,57011,55716],{"class":68},[51,57013,16534],{"class":72},[51,57015,57016,57018,57020,57022],{"class":53,"line":470},[51,57017,55723],{"class":175},[51,57019,52401],{"class":72},[51,57021,55728],{"class":175},[51,57023,179],{"class":72},[51,57025,57026,57028,57030,57032,57034],{"class":53,"line":2783},[51,57027,55735],{"class":175},[51,57029,52401],{"class":72},[51,57031,55740],{"class":175},[51,57033,52456],{"class":64},[51,57035,179],{"class":72},[51,57037,57038,57040,57042,57044,57046],{"class":53,"line":2788},[51,57039,55749],{"class":175},[51,57041,52401],{"class":72},[51,57043,2641],{"class":175},[51,57045,52456],{"class":64},[51,57047,179],{"class":72},[51,57049,57050,57052,57054,57056,57058,57060],{"class":53,"line":2817},[51,57051,55670],{"class":175},[51,57053,52401],{"class":72},[51,57055,612],{"class":175},[51,57057,52456],{"class":64},[51,57059,52520],{"class":175},[51,57061,179],{"class":72},[51,57063,57064],{"class":53,"line":2822},[51,57065,3267],{"class":72},[51,57067,57068],{"class":53,"line":2839},[51,57069,3480],{"emptyLinePlaceholder":1192},[51,57071,57072,57074],{"class":53,"line":2844},[51,57073,55784],{"class":68},[51,57075,16534],{"class":72},[51,57077,57078,57080,57082,57084],{"class":53,"line":2849},[51,57079,55723],{"class":175},[51,57081,52401],{"class":72},[51,57083,55795],{"class":175},[51,57085,179],{"class":72},[51,57087,57088,57090,57092,57094],{"class":53,"line":2854},[51,57089,55802],{"class":175},[51,57091,52401],{"class":72},[51,57093,176],{"class":175},[51,57095,179],{"class":72},[51,57097,57098,57100,57102,57104],{"class":53,"line":2868},[51,57099,55813],{"class":175},[51,57101,52401],{"class":72},[51,57103,176],{"class":175},[51,57105,179],{"class":72},[51,57107,57108,57110,57112,57114,57116],{"class":53,"line":2873},[51,57109,55735],{"class":175},[51,57111,52401],{"class":72},[51,57113,612],{"class":175},[51,57115,1577],{"class":64},[51,57117,179],{"class":72},[51,57119,57120,57122,57124,57126,57128],{"class":53,"line":3657},[51,57121,55749],{"class":175},[51,57123,52401],{"class":72},[51,57125,1821],{"class":175},[51,57127,1577],{"class":64},[51,57129,179],{"class":72},[51,57131,57132,57134,57136,57138],{"class":53,"line":3671},[51,57133,55848],{"class":175},[51,57135,52401],{"class":72},[51,57137,55853],{"class":175},[51,57139,179],{"class":72},[51,57141,57142],{"class":53,"line":3679},[51,57143,3267],{"class":72},[51,57145,57146],{"class":53,"line":3684},[51,57147,3480],{"emptyLinePlaceholder":1192},[51,57149,57150,57152,57154],{"class":53,"line":3690},[51,57151,55784],{"class":68},[51,57153,7787],{"class":52264},[51,57155,16534],{"class":72},[51,57157,57158,57160,57162,57164],{"class":53,"line":3696},[51,57159,55723],{"class":175},[51,57161,52401],{"class":72},[51,57163,55795],{"class":175},[51,57165,179],{"class":72},[51,57167,57168,57170,57172,57174,57176],{"class":53,"line":3701},[51,57169,55886],{"class":175},[51,57171,52401],{"class":72},[51,57173,2145],{"class":175},[51,57175,52456],{"class":64},[51,57177,179],{"class":72},[51,57179,57180,57182,57184,57186,57188],{"class":53,"line":8910},[51,57181,55802],{"class":175},[51,57183,52401],{"class":72},[51,57185,457],{"class":175},[51,57187,52456],{"class":64},[51,57189,179],{"class":72},[51,57191,57192,57194,57196,57198,57200],{"class":53,"line":8934},[51,57193,55911],{"class":175},[51,57195,52401],{"class":72},[51,57197,1568],{"class":175},[51,57199,52456],{"class":64},[51,57201,179],{"class":72},[51,57203,57204],{"class":53,"line":8939},[51,57205,3267],{"class":72},[51,57207,57208],{"class":53,"line":8945},[51,57209,3480],{"emptyLinePlaceholder":1192},[51,57211,57212,57214],{"class":53,"line":8972},[51,57213,55932],{"class":52264},[51,57215,16534],{"class":72},[51,57217,57218,57220,57222,57224],{"class":53,"line":8977},[51,57219,55723],{"class":175},[51,57221,52401],{"class":72},[51,57223,55795],{"class":175},[51,57225,179],{"class":72},[51,57227,57228,57230,57232,57234,57236],{"class":53,"line":8983},[51,57229,55911],{"class":175},[51,57231,52401],{"class":72},[51,57233,2026],{"class":175},[51,57235,52456],{"class":64},[51,57237,179],{"class":72},[51,57239,57240,57242,57244,57246,57248],{"class":53,"line":8995},[51,57241,55802],{"class":175},[51,57243,52401],{"class":72},[51,57245,457],{"class":175},[51,57247,52456],{"class":64},[51,57249,179],{"class":72},[51,57251,57252,57254,57256,57258],{"class":53,"line":9007},[51,57253,55973],{"class":175},[51,57255,52401],{"class":72},[51,57257,52441],{"class":175},[51,57259,179],{"class":72},[51,57261,57262,57264,57266,57268],{"class":53,"line":9019},[51,57263,55984],{"class":175},[51,57265,52401],{"class":72},[51,57267,52632],{"class":175},[51,57269,179],{"class":72},[51,57271,57272,57274,57276,57278],{"class":53,"line":10678},[51,57273,55723],{"class":175},[51,57275,52401],{"class":72},[51,57277,55795],{"class":175},[51,57279,179],{"class":72},[51,57281,57282,57284,57286,57288,57290],{"class":53,"line":10703},[51,57283,55735],{"class":175},[51,57285,52401],{"class":72},[51,57287,5069],{"class":175},[51,57289,52456],{"class":64},[51,57291,179],{"class":72},[51,57293,57294,57296,57298,57300,57302],{"class":53,"line":10726},[51,57295,55749],{"class":175},[51,57297,52401],{"class":72},[51,57299,457],{"class":175},[51,57301,52456],{"class":64},[51,57303,179],{"class":72},[51,57305,57306],{"class":53,"line":10750},[51,57307,3267],{"class":72},[51,57309,57310],{"class":53,"line":10755},[51,57311,3480],{"emptyLinePlaceholder":1192},[51,57313,57314,57316,57318],{"class":53,"line":10760},[51,57315,55932],{"class":52264},[51,57317,56039],{"class":52264},[51,57319,16534],{"class":72},[51,57321,57322,57324,57326,57328,57330],{"class":53,"line":10765},[51,57323,55735],{"class":175},[51,57325,52401],{"class":72},[51,57327,457],{"class":175},[51,57329,52456],{"class":64},[51,57331,179],{"class":72},[51,57333,57334,57336,57338,57340,57342],{"class":53,"line":10774},[51,57335,55749],{"class":175},[51,57337,52401],{"class":72},[51,57339,457],{"class":175},[51,57341,52456],{"class":64},[51,57343,179],{"class":72},[51,57345,57346,57348,57350,57352,57354,57356,57358,57360,57362,57364,57366,57368],{"class":53,"line":10779},[51,57347,55848],{"class":175},[51,57349,52401],{"class":72},[51,57351,56074],{"class":175},[51,57353,73],{"class":72},[51,57355,176],{"class":175},[51,57357,13397],{"class":72},[51,57359,176],{"class":175},[51,57361,13397],{"class":72},[51,57363,176],{"class":175},[51,57365,13397],{"class":72},[51,57367,56091],{"class":175},[51,57369,615],{"class":72},[51,57371,57372,57374,57376,57378,57380],{"class":53,"line":10785},[51,57373,56098],{"class":175},[51,57375,52401],{"class":72},[51,57377,443],{"class":175},[51,57379,52456],{"class":64},[51,57381,179],{"class":72},[51,57383,57384],{"class":53,"line":10806},[51,57385,3267],{"class":72},[51,57387,57388],{"class":53,"line":10812},[51,57389,3480],{"emptyLinePlaceholder":1192},[51,57391,57392,57394],{"class":53,"line":10826},[51,57393,56119],{"class":68},[51,57395,16534],{"class":72},[51,57397,57398,57400,57402,57404],{"class":53,"line":10832},[51,57399,55848],{"class":175},[51,57401,52401],{"class":72},[51,57403,56130],{"class":175},[51,57405,179],{"class":72},[51,57407,57408],{"class":53,"line":10859},[51,57409,3267],{"class":72},[51,57411,57412,57414,57416],{"class":53,"line":10868},[51,57413,53381],{"class":72},[51,57415,1179],{"class":52264},[51,57417,52271],{"class":72},[51,57419,57420,57422,57424],{"class":53,"line":10874},[51,57421,52749],{"class":72},[51,57423,52298],{"class":52264},[51,57425,52271],{"class":72},[51,57427,57428],{"class":53,"line":10882},[51,57429,3480],{"emptyLinePlaceholder":1192},[51,57431,57432,57434,57436],{"class":53,"line":10887},[51,57433,2154],{"class":72},[51,57435,52764],{"class":52264},[51,57437,52271],{"class":72},[51,57439,57440,57442,57444,57446,57448,57450],{"class":53,"line":17566},[51,57441,53108],{"class":72},[51,57443,52575],{"class":52264},[51,57445,54450],{"class":68},[51,57447,108],{"class":72},[51,57449,54455],{"class":282},[51,57451,52271],{"class":72},[51,57453,57454,57456,57458,57460,57462,57464],{"class":53,"line":17572},[51,57455,52305],{"class":72},[51,57457,52575],{"class":52264},[51,57459,54450],{"class":68},[51,57461,108],{"class":72},[51,57463,56191],{"class":282},[51,57465,52271],{"class":72},[51,57467,57468,57470,57472,57474,57476,57478,57480,57482,57484],{"class":53,"line":17595},[51,57469,56198],{"class":72},[51,57471,2564],{"class":52264},[51,57473,56203],{"class":68},[51,57475,108],{"class":72},[51,57477,56208],{"class":282},[51,57479,56211],{"class":68},[51,57481,108],{"class":72},[51,57483,8614],{"class":282},[51,57485,52271],{"class":72},[51,57487,57488,57490,57492],{"class":53,"line":17601},[51,57489,52740],{"class":72},[51,57491,52575],{"class":52264},[51,57493,52271],{"class":72},[51,57495,57496,57498,57500,57502,57504,57506],{"class":53,"line":17624},[51,57497,52305],{"class":72},[51,57499,52575],{"class":52264},[51,57501,54450],{"class":68},[51,57503,108],{"class":72},[51,57505,56238],{"class":282},[51,57507,52271],{"class":72},[51,57509,57510,57512,57514,57516,57518],{"class":53,"line":17638},[51,57511,56198],{"class":72},[51,57513,40],{"class":52264},[51,57515,56249],{"class":72},[51,57517,40],{"class":52264},[51,57519,52271],{"class":72},[51,57521,57522,57524,57526],{"class":53,"line":17658},[51,57523,56198],{"class":72},[51,57525,1000],{"class":52264},[51,57527,52271],{"class":72},[51,57529,57530,57532,57534,57536,57538,57540,57542,57544],{"class":53,"line":17664},[51,57531,56266],{"class":72},[51,57533,22],{"class":52264},[51,57535,54450],{"class":68},[51,57537,108],{"class":72},[51,57539,56275],{"class":282},[51,57541,56278],{"class":72},[51,57543,22],{"class":52264},[51,57545,52271],{"class":72},[51,57547,57548,57550,57552,57554,57556],{"class":53,"line":17675},[51,57549,56266],{"class":72},[51,57551,22],{"class":52264},[51,57553,56278],{"class":72},[51,57555,22],{"class":52264},[51,57557,52271],{"class":72},[51,57559,57560,57562,57564,57566,57568],{"class":53,"line":17698},[51,57561,56266],{"class":72},[51,57563,22],{"class":52264},[51,57565,56278],{"class":72},[51,57567,22],{"class":52264},[51,57569,52271],{"class":72},[51,57571,57572,57574,57576,57578,57580],{"class":53,"line":17720},[51,57573,56266],{"class":72},[51,57575,22],{"class":52264},[51,57577,56278],{"class":72},[51,57579,22],{"class":52264},[51,57581,52271],{"class":72},[51,57583,57584,57586,57588,57590,57592],{"class":53,"line":17725},[51,57585,56266],{"class":72},[51,57587,22],{"class":52264},[51,57589,56278],{"class":72},[51,57591,22],{"class":52264},[51,57593,52271],{"class":72},[51,57595,57596,57598,57600,57602,57604],{"class":53,"line":17731},[51,57597,56266],{"class":72},[51,57599,22],{"class":52264},[51,57601,56278],{"class":72},[51,57603,22],{"class":52264},[51,57605,52271],{"class":72},[51,57607,57608,57610,57612,57614,57616],{"class":53,"line":17745},[51,57609,56266],{"class":72},[51,57611,22],{"class":52264},[51,57613,56278],{"class":72},[51,57615,22],{"class":52264},[51,57617,52271],{"class":72},[51,57619,57620,57622,57624,57626,57628],{"class":53,"line":17758},[51,57621,56266],{"class":72},[51,57623,22],{"class":52264},[51,57625,56278],{"class":72},[51,57627,22],{"class":52264},[51,57629,52271],{"class":72},[51,57631,57632,57634,57636],{"class":53,"line":17763},[51,57633,56371],{"class":72},[51,57635,1000],{"class":52264},[51,57637,52271],{"class":72},[51,57639,57640,57642,57644],{"class":53,"line":17777},[51,57641,52740],{"class":72},[51,57643,52575],{"class":52264},[51,57645,52271],{"class":72},[51,57647,57648,57650,57652],{"class":53,"line":17782},[51,57649,53381],{"class":72},[51,57651,52575],{"class":52264},[51,57653,52271],{"class":72},[51,57655,57656,57658,57660],{"class":53,"line":17788},[51,57657,53108],{"class":72},[51,57659,52777],{"class":52264},[51,57661,52271],{"class":72},[51,57663,57664,57666,57669,57671],{"class":53,"line":17793},[51,57665,12183],{"class":64},[51,57667,57668],{"class":175}," sliderData",[51,57670,14526],{"class":64},[51,57672,56411],{"class":72},[51,57674,57675,57677,57679,57681,57683,57685,57687],{"class":53,"line":17807},[51,57676,56416],{"class":72},[51,57678,56419],{"class":282},[51,57680,56422],{"class":72},[51,57682,56425],{"class":282},[51,57684,56428],{"class":72},[51,57686,56431],{"class":282},[51,57688,56434],{"class":72},[51,57690,57691,57693,57695,57697,57699,57701,57703],{"class":53,"line":17812},[51,57692,56416],{"class":72},[51,57694,56441],{"class":282},[51,57696,56422],{"class":72},[51,57698,56446],{"class":282},[51,57700,56428],{"class":72},[51,57702,56451],{"class":282},[51,57704,56434],{"class":72},[51,57706,57707,57709,57711,57713,57715,57717,57719],{"class":53,"line":17817},[51,57708,56416],{"class":72},[51,57710,56460],{"class":282},[51,57712,56422],{"class":72},[51,57714,56465],{"class":282},[51,57716,56428],{"class":72},[51,57718,56470],{"class":282},[51,57720,56434],{"class":72},[51,57722,57723,57725,57727,57729,57731,57733,57735],{"class":53,"line":17831},[51,57724,56416],{"class":72},[51,57726,56479],{"class":282},[51,57728,56422],{"class":72},[51,57730,56484],{"class":282},[51,57732,56428],{"class":72},[51,57734,56489],{"class":282},[51,57736,56434],{"class":72},[51,57738,57739,57741,57743,57745,57747,57749,57751],{"class":53,"line":17843},[51,57740,56416],{"class":72},[51,57742,56498],{"class":282},[51,57744,56422],{"class":72},[51,57746,56503],{"class":282},[51,57748,56428],{"class":72},[51,57750,56508],{"class":282},[51,57752,56434],{"class":72},[51,57754,57755,57757,57759,57761,57763,57765,57767],{"class":53,"line":17848},[51,57756,56416],{"class":72},[51,57758,56517],{"class":282},[51,57760,56422],{"class":72},[51,57762,56522],{"class":282},[51,57764,56428],{"class":72},[51,57766,56527],{"class":282},[51,57768,56434],{"class":72},[51,57770,57771,57773,57775,57777,57779,57781,57783],{"class":53,"line":17861},[51,57772,56416],{"class":72},[51,57774,56536],{"class":282},[51,57776,56422],{"class":72},[51,57778,56541],{"class":282},[51,57780,56428],{"class":72},[51,57782,56546],{"class":282},[51,57784,56434],{"class":72},[51,57786,57787,57789,57791,57793,57795,57797,57799],{"class":53,"line":17866},[51,57788,56416],{"class":72},[51,57790,56555],{"class":282},[51,57792,56422],{"class":72},[51,57794,56560],{"class":282},[51,57796,56428],{"class":72},[51,57798,56565],{"class":282},[51,57800,56568],{"class":72},[51,57802,57803],{"class":53,"line":17871},[51,57804,54073],{"class":72},[51,57806,57807],{"class":53,"line":17876},[51,57808,57809],{"class":57},"    \u002F\u002F 1.获取元素\n",[51,57811,57812,57814,57816,57818,57820,57822,57824,57826],{"class":53,"line":17889},[51,57813,12183],{"class":64},[51,57815,56579],{"class":175},[51,57817,14526],{"class":64},[51,57819,55360],{"class":72},[51,57821,55363],{"class":68},[51,57823,73],{"class":72},[51,57825,56590],{"class":282},[51,57827,90],{"class":72},[51,57829,57830,57832,57834,57836,57838,57840,57842,57844],{"class":53,"line":17894},[51,57831,12183],{"class":64},[51,57833,7787],{"class":175},[51,57835,14526],{"class":64},[51,57837,55360],{"class":72},[51,57839,55363],{"class":68},[51,57841,73],{"class":72},[51,57843,56609],{"class":282},[51,57845,90],{"class":72},[51,57847,57848,57850,57852,57854],{"class":53,"line":33597},[51,57849,53183],{"class":64},[51,57851,10400],{"class":72},[51,57853,108],{"class":64},[51,57855,48297],{"class":175},[51,57857,57858],{"class":53,"line":33603},[51,57859,57860],{"class":57},"    \u002F\u002F 2.开启定时器\n",[51,57862,57863],{"class":53,"line":33609},[51,57864,57865],{"class":57},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[51,57867,57868,57871,57873,57875],{"class":53,"line":33615},[51,57869,57870],{"class":68},"    setInterval",[51,57872,73],{"class":72},[51,57874,55413],{"class":64},[51,57876,55416],{"class":72},[51,57878,57879,57881],{"class":53,"line":33621},[51,57880,55421],{"class":72},[51,57882,3782],{"class":64},[51,57884,57885,57887,57889,57891,57894,57896],{"class":53,"line":33632},[51,57886,55444],{"class":64},[51,57888,55447],{"class":72},[51,57890,2800],{"class":64},[51,57892,57893],{"class":72}," sliderData.",[51,57895,52932],{"class":175},[51,57897,13404],{"class":72},[51,57899,57900,57903,57905],{"class":53,"line":33638},[51,57901,57902],{"class":72},"        i ",[51,57904,108],{"class":64},[51,57906,48297],{"class":175},[51,57908,57909],{"class":53,"line":33658},[51,57910,53362],{"class":72},[51,57912,57913],{"class":53,"line":33664},[51,57914,57915],{"class":57},"      \u002F\u002F 更换图片路径\n",[51,57917,57918,57920,57922],{"class":53,"line":33675},[51,57919,56685],{"class":72},[51,57921,108],{"class":64},[51,57923,57924],{"class":72}," sliderData[i].url\n",[51,57926,57927],{"class":53,"line":33681},[51,57928,57929],{"class":57},"      \u002F\u002F 把文字写到p里面\n",[51,57931,57932,57934,57936],{"class":53,"line":33687},[51,57933,56695],{"class":72},[51,57935,108],{"class":64},[51,57937,57938],{"class":72}," sliderData[i].title\n",[51,57940,57941],{"class":53,"line":33693},[51,57942,57943],{"class":57},"      \u002F\u002F 小圆点\n",[51,57945,57946],{"class":53,"line":33699},[51,57947,57948],{"class":57},"      \u002F\u002F 先删除以前的active\n",[51,57950,57951],{"class":53,"line":33705},[51,57952,57953],{"class":57},"      \u002F\u002F 只让当前li添加active\n",[51,57955,57956,57958,57960,57962,57965,57968,57971,57973,57975],{"class":53,"line":33711},[51,57957,56735],{"class":72},[51,57959,55363],{"class":68},[51,57961,73],{"class":72},[51,57963,57964],{"class":282},"'.slider-footer .activate'",[51,57966,57967],{"class":72},").classList.",[51,57969,57970],{"class":68},"remove",[51,57972,73],{"class":72},[51,57974,56753],{"class":282},[51,57976,90],{"class":72},[51,57978,57979,57981,57983,57985,57988,57990,57992,57994,57997,57999,58001,58003,58005],{"class":53,"line":33717},[51,57980,56735],{"class":72},[51,57982,55363],{"class":68},[51,57984,73],{"class":72},[51,57986,57987],{"class":282},"`.slider-footer ul li:nth-child(${",[51,57989,1689],{"class":72},[51,57991,46530],{"class":64},[51,57993,26082],{"class":175},[51,57995,57996],{"class":282},"})`",[51,57998,57967],{"class":72},[51,58000,221],{"class":68},[51,58002,73],{"class":72},[51,58004,56753],{"class":282},[51,58006,90],{"class":72},[51,58008,58009],{"class":53,"line":33737},[51,58010,3480],{"emptyLinePlaceholder":1192},[51,58012,58013,58015,58017],{"class":53,"line":33743},[51,58014,55499],{"class":72},[51,58016,7372],{"class":175},[51,58018,90],{"class":72},[51,58020,58021],{"class":53,"line":33759},[51,58022,3480],{"emptyLinePlaceholder":1192},[51,58024,58025,58027,58029],{"class":53,"line":33765},[51,58026,53381],{"class":72},[51,58028,52777],{"class":52264},[51,58030,52271],{"class":72},[51,58032,58033,58035,58037],{"class":53,"line":33779},[51,58034,52749],{"class":72},[51,58036,52764],{"class":52264},[51,58038,52271],{"class":72},[51,58040,58041],{"class":53,"line":33785},[51,58042,3480],{"emptyLinePlaceholder":1192},[51,58044,58045,58047,58049],{"class":53,"line":33800},[51,58046,52749],{"class":72},[51,58048,51599],{"class":52264},[51,58050,52271],{"class":72},[1233,58052,58054],{"id":58053},"_317-重要知识点","3.1.7 重要知识点",[40,58056,58057,58058],{},"浏览器在渲染文本时， ",[840,58059,58060],{},"没有空格或换行符就没有“断行点”",[40,58062,58063],{},[2564,58064],{"alt":35,"src":58065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[40,58067,58068],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[40,58070,58071],{},[2564,58072],{"alt":35,"src":58073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[40,58075,58076],{},[2564,58077],{"alt":35,"src":58078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58080,58082],{"id":58081},"_32-dom事件基础","3.2 DOM事件基础",[1233,58084,58086],{"id":58085},"_321-事件监听","3.2.1 事件监听",[40,58088,58089],{},[2564,58090],{"alt":35,"src":58091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[40,58093,58094],{},"事件监听有响应的发生",[40,58096,58097],{},[2564,58098],{"alt":35,"src":58099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[40,58101,58102],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[40,58104,58105],{},"对于有名函数,要执行的函数名后边不要加()",[1233,58107,58109],{"id":58108},"_322-随机点名案例","3.2.2 随机点名案例",[29,58111,58113],{"className":51597,"code":58112,"language":51599,"meta":35,"style":35},"\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",[37,58114,58115,58125,58139,58143,58151,58165,58185,58197,58205,58211,58221,58231,58235,58239,58246,58257,58261,58265,58271,58283,58297,58307,58319,58332,58336,58340,58347,58351,58364,58376,58388,58392,58396,58400,58407,58417,58421,58425,58434,58446,58458,58473,58477,58485,58493,58497,58505,58518,58532,58545,58565,58573,58588,58608,58628,58636,58640,58648,58653,58689,58709,58714,58733,58738,58749,58754,58765,58770,58789,58804,58809,58835,58845,58854,58859,58875,58880,58885,58890,58905,58909,58913,58918,58937,58954,58962,58967,58982,58986,58990,58998,59006,59010],{"__ignoreMap":35},[51,58116,58117,58119,58121,58123],{"class":53,"line":54},[51,58118,52261],{"class":72},[51,58120,52265],{"class":52264},[51,58122,52268],{"class":68},[51,58124,52271],{"class":72},[51,58126,58127,58129,58131,58133,58135,58137],{"class":53,"line":61},[51,58128,2154],{"class":72},[51,58130,51599],{"class":52264},[51,58132,52280],{"class":68},[51,58134,108],{"class":72},[51,58136,52285],{"class":282},[51,58138,52271],{"class":72},[51,58140,58141],{"class":53,"line":93},[51,58142,3480],{"emptyLinePlaceholder":1192},[51,58144,58145,58147,58149],{"class":53,"line":99},[51,58146,2154],{"class":72},[51,58148,52298],{"class":52264},[51,58150,52271],{"class":72},[51,58152,58153,58155,58157,58159,58161,58163],{"class":53,"line":120},[51,58154,53108],{"class":72},[51,58156,52308],{"class":52264},[51,58158,52311],{"class":68},[51,58160,108],{"class":72},[51,58162,52316],{"class":282},[51,58164,52271],{"class":72},[51,58166,58167,58169,58171,58173,58175,58177,58179,58181,58183],{"class":53,"line":129},[51,58168,53108],{"class":72},[51,58170,52308],{"class":52264},[51,58172,15882],{"class":68},[51,58174,108],{"class":72},[51,58176,52355],{"class":282},[51,58178,52335],{"class":68},[51,58180,108],{"class":72},[51,58182,52362],{"class":282},[51,58184,52271],{"class":72},[51,58186,58187,58189,58191,58193,58195],{"class":53,"line":206},[51,58188,53108],{"class":72},[51,58190,52371],{"class":52264},[51,58192,52374],{"class":72},[51,58194,52371],{"class":52264},[51,58196,52271],{"class":72},[51,58198,58199,58201,58203],{"class":53,"line":212},[51,58200,53108],{"class":72},[51,58202,1179],{"class":52264},[51,58204,52271],{"class":72},[51,58206,58207,58209],{"class":53,"line":227},[51,58208,7365],{"class":52264},[51,58210,16534],{"class":72},[51,58212,58213,58215,58217,58219],{"class":53,"line":370},[51,58214,55670],{"class":175},[51,58216,52401],{"class":72},[51,58218,176],{"class":175},[51,58220,179],{"class":72},[51,58222,58223,58225,58227,58229],{"class":53,"line":387},[51,58224,55659],{"class":175},[51,58226,52401],{"class":72},[51,58228,176],{"class":175},[51,58230,179],{"class":72},[51,58232,58233],{"class":53,"line":404},[51,58234,3267],{"class":72},[51,58236,58237],{"class":53,"line":415},[51,58238,3480],{"emptyLinePlaceholder":1192},[51,58240,58241,58244],{"class":53,"line":420},[51,58242,58243],{"class":52264},"    h2",[51,58245,16534],{"class":72},[51,58247,58248,58251,58253,58255],{"class":53,"line":429},[51,58249,58250],{"class":175},"      text-align",[51,58252,52401],{"class":72},[51,58254,52556],{"class":175},[51,58256,179],{"class":72},[51,58258,58259],{"class":53,"line":434},[51,58260,3267],{"class":72},[51,58262,58263],{"class":53,"line":448},[51,58264,3480],{"emptyLinePlaceholder":1192},[51,58266,58267,58269],{"class":53,"line":462},[51,58268,55716],{"class":68},[51,58270,16534],{"class":72},[51,58272,58273,58275,58277,58279,58281],{"class":53,"line":470},[51,58274,55735],{"class":175},[51,58276,52401],{"class":72},[51,58278,2641],{"class":175},[51,58280,52456],{"class":64},[51,58282,179],{"class":72},[51,58284,58285,58287,58289,58291,58293,58295],{"class":53,"line":2783},[51,58286,55670],{"class":175},[51,58288,52401],{"class":72},[51,58290,1902],{"class":175},[51,58292,52456],{"class":64},[51,58294,52520],{"class":175},[51,58296,179],{"class":72},[51,58298,58299,58301,58303,58305],{"class":53,"line":2788},[51,58300,55973],{"class":175},[51,58302,52401],{"class":72},[51,58304,52441],{"class":175},[51,58306,179],{"class":72},[51,58308,58309,58311,58313,58315,58317],{"class":53,"line":2817},[51,58310,55886],{"class":175},[51,58312,52401],{"class":72},[51,58314,2070],{"class":175},[51,58316,52456],{"class":64},[51,58318,179],{"class":72},[51,58320,58321,58324,58326,58328,58330],{"class":53,"line":2822},[51,58322,58323],{"class":175},"      line-height",[51,58325,52401],{"class":72},[51,58327,1649],{"class":175},[51,58329,52456],{"class":64},[51,58331,179],{"class":72},[51,58333,58334],{"class":53,"line":2839},[51,58335,3267],{"class":72},[51,58337,58338],{"class":53,"line":2844},[51,58339,3480],{"emptyLinePlaceholder":1192},[51,58341,58342,58345],{"class":53,"line":2849},[51,58343,58344],{"class":68},"    .qs",[51,58346,16534],{"class":72},[51,58348,58349],{"class":53,"line":2854},[51,58350,3480],{"emptyLinePlaceholder":1192},[51,58352,58353,58355,58357,58360,58362],{"class":53,"line":2868},[51,58354,55735],{"class":175},[51,58356,52401],{"class":72},[51,58358,58359],{"class":175},"450",[51,58361,52456],{"class":64},[51,58363,179],{"class":72},[51,58365,58366,58368,58370,58372,58374],{"class":53,"line":2873},[51,58367,55749],{"class":175},[51,58369,52401],{"class":72},[51,58371,1649],{"class":175},[51,58373,52456],{"class":64},[51,58375,179],{"class":72},[51,58377,58378,58381,58383,58386],{"class":53,"line":3657},[51,58379,58380],{"class":175},"      color",[51,58382,52401],{"class":72},[51,58384,58385],{"class":175},"red",[51,58387,179],{"class":72},[51,58389,58390],{"class":53,"line":3671},[51,58391,3480],{"emptyLinePlaceholder":1192},[51,58393,58394],{"class":53,"line":3679},[51,58395,3267],{"class":72},[51,58397,58398],{"class":53,"line":3684},[51,58399,3480],{"emptyLinePlaceholder":1192},[51,58401,58402,58405],{"class":53,"line":3690},[51,58403,58404],{"class":68},"    .btns",[51,58406,16534],{"class":72},[51,58408,58409,58411,58413,58415],{"class":53,"line":3696},[51,58410,58250],{"class":175},[51,58412,52401],{"class":72},[51,58414,52556],{"class":175},[51,58416,179],{"class":72},[51,58418,58419],{"class":53,"line":3701},[51,58420,3267],{"class":72},[51,58422,58423],{"class":53,"line":8910},[51,58424,3480],{"emptyLinePlaceholder":1192},[51,58426,58427,58429,58432],{"class":53,"line":8934},[51,58428,58404],{"class":68},[51,58430,58431],{"class":52264}," button",[51,58433,16534],{"class":72},[51,58435,58436,58438,58440,58442,58444],{"class":53,"line":8939},[51,58437,55735],{"class":175},[51,58439,52401],{"class":72},[51,58441,2062],{"class":175},[51,58443,52456],{"class":64},[51,58445,179],{"class":72},[51,58447,58448,58450,58452,58454,58456],{"class":53,"line":8945},[51,58449,55749],{"class":175},[51,58451,52401],{"class":72},[51,58453,1524],{"class":175},[51,58455,52456],{"class":64},[51,58457,179],{"class":72},[51,58459,58460,58462,58464,58466,58469,58471],{"class":53,"line":8972},[51,58461,55670],{"class":175},[51,58463,52401],{"class":72},[51,58465,176],{"class":175},[51,58467,58468],{"class":175}," 50",[51,58470,52456],{"class":64},[51,58472,179],{"class":72},[51,58474,58475],{"class":53,"line":8977},[51,58476,3267],{"class":72},[51,58478,58479,58481,58483],{"class":53,"line":8983},[51,58480,53381],{"class":72},[51,58482,1179],{"class":52264},[51,58484,52271],{"class":72},[51,58486,58487,58489,58491],{"class":53,"line":8995},[51,58488,52749],{"class":72},[51,58490,52298],{"class":52264},[51,58492,52271],{"class":72},[51,58494,58495],{"class":53,"line":9007},[51,58496,3480],{"emptyLinePlaceholder":1192},[51,58498,58499,58501,58503],{"class":53,"line":9019},[51,58500,2154],{"class":72},[51,58502,52764],{"class":52264},[51,58504,52271],{"class":72},[51,58506,58507,58509,58511,58514,58516],{"class":53,"line":10678},[51,58508,53108],{"class":72},[51,58510,14],{"class":52264},[51,58512,58513],{"class":72},">随机点名\u003C\u002F",[51,58515,14],{"class":52264},[51,58517,52271],{"class":72},[51,58519,58520,58522,58524,58526,58528,58530],{"class":53,"line":10703},[51,58521,53108],{"class":72},[51,58523,52575],{"class":52264},[51,58525,54450],{"class":68},[51,58527,108],{"class":72},[51,58529,54455],{"class":282},[51,58531,52271],{"class":72},[51,58533,58534,58536,58538,58541,58543],{"class":53,"line":10726},[51,58535,52305],{"class":72},[51,58537,51],{"class":52264},[51,58539,58540],{"class":72},">名字是：\u003C\u002F",[51,58542,51],{"class":52264},[51,58544,52271],{"class":72},[51,58546,58547,58549,58551,58553,58555,58558,58561,58563],{"class":53,"line":10750},[51,58548,52305],{"class":72},[51,58550,52575],{"class":52264},[51,58552,54450],{"class":68},[51,58554,108],{"class":72},[51,58556,58557],{"class":282},"\"qs\"",[51,58559,58560],{"class":72},">这里显示姓名\u003C\u002F",[51,58562,52575],{"class":52264},[51,58564,52271],{"class":72},[51,58566,58567,58569,58571],{"class":53,"line":10755},[51,58568,53381],{"class":72},[51,58570,52575],{"class":52264},[51,58572,52271],{"class":72},[51,58574,58575,58577,58579,58581,58583,58586],{"class":53,"line":10760},[51,58576,53108],{"class":72},[51,58578,52575],{"class":52264},[51,58580,54450],{"class":68},[51,58582,108],{"class":72},[51,58584,58585],{"class":282},"\"btns\"",[51,58587,52271],{"class":72},[51,58589,58590,58592,58594,58596,58598,58601,58604,58606],{"class":53,"line":10765},[51,58591,52305],{"class":72},[51,58593,54851],{"class":52264},[51,58595,54450],{"class":68},[51,58597,108],{"class":72},[51,58599,58600],{"class":282},"\"start\"",[51,58602,58603],{"class":72},">开始\u003C\u002F",[51,58605,54851],{"class":52264},[51,58607,52271],{"class":72},[51,58609,58610,58612,58614,58616,58618,58621,58624,58626],{"class":53,"line":10774},[51,58611,52305],{"class":72},[51,58613,54851],{"class":52264},[51,58615,54450],{"class":68},[51,58617,108],{"class":72},[51,58619,58620],{"class":282},"\"end\"",[51,58622,58623],{"class":72},">结束\u003C\u002F",[51,58625,54851],{"class":52264},[51,58627,52271],{"class":72},[51,58629,58630,58632,58634],{"class":53,"line":10779},[51,58631,53381],{"class":72},[51,58633,52575],{"class":52264},[51,58635,52271],{"class":72},[51,58637,58638],{"class":53,"line":10785},[51,58639,3480],{"emptyLinePlaceholder":1192},[51,58641,58642,58644,58646],{"class":53,"line":10806},[51,58643,53108],{"class":72},[51,58645,52777],{"class":52264},[51,58647,52271],{"class":72},[51,58649,58650],{"class":53,"line":10812},[51,58651,58652],{"class":57},"    \u002F\u002F 数据数组\n",[51,58654,58655,58657,58660,58662,58664,58667,58669,58672,58674,58677,58679,58682,58684,58687],{"class":53,"line":10826},[51,58656,12183],{"class":64},[51,58658,58659],{"class":175}," arr",[51,58661,14526],{"class":64},[51,58663,53190],{"class":72},[51,58665,58666],{"class":282},"'马超'",[51,58668,13397],{"class":72},[51,58670,58671],{"class":282},"'黄忠'",[51,58673,13397],{"class":72},[51,58675,58676],{"class":282},"'赵云'",[51,58678,13397],{"class":72},[51,58680,58681],{"class":282},"'关羽'",[51,58683,13397],{"class":72},[51,58685,58686],{"class":282},"'张飞'",[51,58688,34210],{"class":72},[51,58690,58691,58693,58696,58698,58700,58702,58704,58707],{"class":53,"line":10832},[51,58692,12183],{"class":64},[51,58694,58695],{"class":175}," qs",[51,58697,14526],{"class":64},[51,58699,55360],{"class":72},[51,58701,55363],{"class":68},[51,58703,73],{"class":72},[51,58705,58706],{"class":282},"'.qs'",[51,58708,90],{"class":72},[51,58710,58711],{"class":53,"line":10859},[51,58712,58713],{"class":57},"    \u002F\u002F 1.业务1.开始按钮模块\n",[51,58715,58716,58718,58720,58722,58724,58726,58728,58731],{"class":53,"line":10868},[51,58717,12183],{"class":64},[51,58719,5260],{"class":175},[51,58721,14526],{"class":64},[51,58723,55360],{"class":72},[51,58725,55363],{"class":68},[51,58727,73],{"class":72},[51,58729,58730],{"class":282},"'.start'",[51,58732,90],{"class":72},[51,58734,58735],{"class":53,"line":10874},[51,58736,58737],{"class":57},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[51,58739,58740,58742,58745,58747],{"class":53,"line":10882},[51,58741,53183],{"class":64},[51,58743,58744],{"class":72}," timerId ",[51,58746,108],{"class":64},[51,58748,48297],{"class":175},[51,58750,58751],{"class":53,"line":10887},[51,58752,58753],{"class":57},"    \u002F\u002F 随机号要全局变量\n",[51,58755,58756,58758,58761,58763],{"class":53,"line":17566},[51,58757,53183],{"class":64},[51,58759,58760],{"class":72}," random ",[51,58762,108],{"class":64},[51,58764,48297],{"class":175},[51,58766,58767],{"class":53,"line":17572},[51,58768,58769],{"class":57},"    \u002F\u002F 1.1 添加点击事件\n",[51,58771,58772,58775,58778,58780,58783,58785,58787],{"class":53,"line":17595},[51,58773,58774],{"class":72},"    start.",[51,58776,58777],{"class":68},"addEventListener",[51,58779,73],{"class":72},[51,58781,58782],{"class":282},"'click'",[51,58784,13397],{"class":72},[51,58786,55413],{"class":64},[51,58788,55416],{"class":72},[51,58790,58791,58794,58796,58798,58800,58802],{"class":53,"line":17601},[51,58792,58793],{"class":72},"      timerId ",[51,58795,108],{"class":64},[51,58797,55408],{"class":68},[51,58799,73],{"class":72},[51,58801,55413],{"class":64},[51,58803,55416],{"class":72},[51,58805,58806],{"class":53,"line":17624},[51,58807,58808],{"class":57},"        \u002F\u002F 随机数\n",[51,58810,58811,58814,58816,58819,58822,58825,58827,58829,58831,58833],{"class":53,"line":17638},[51,58812,58813],{"class":72},"        random ",[51,58815,108],{"class":64},[51,58817,58818],{"class":68}," parseInt",[51,58820,58821],{"class":72},"(Math.",[51,58823,58824],{"class":68},"random",[51,58826,14012],{"class":72},[51,58828,1702],{"class":64},[51,58830,52929],{"class":72},[51,58832,52932],{"class":175},[51,58834,90],{"class":72},[51,58836,58837,58840,58842],{"class":53,"line":17658},[51,58838,58839],{"class":72},"        qs.innerHTML ",[51,58841,108],{"class":64},[51,58843,58844],{"class":72}," arr[random]\n",[51,58846,58847,58850,58852],{"class":53,"line":17664},[51,58848,58849],{"class":72},"      }, ",[51,58851,1524],{"class":175},[51,58853,90],{"class":72},[51,58855,58856],{"class":53,"line":17675},[51,58857,58858],{"class":57},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[51,58860,58861,58863,58866,58868,58871,58873],{"class":53,"line":17698},[51,58862,55444],{"class":64},[51,58864,58865],{"class":72}," (arr.",[51,58867,52932],{"class":175},[51,58869,58870],{"class":64}," ===",[51,58872,26082],{"class":175},[51,58874,13404],{"class":72},[51,58876,58877],{"class":53,"line":17720},[51,58878,58879],{"class":57},"        \u002F\u002F start.disabled = true\n",[51,58881,58882],{"class":53,"line":17725},[51,58883,58884],{"class":57},"        \u002F\u002F end.disabled = true\n",[51,58886,58887],{"class":53,"line":17731},[51,58888,58889],{"class":57},"        \u002F\u002F 可以合起来写\n",[51,58891,58892,58895,58897,58900,58902],{"class":53,"line":17745},[51,58893,58894],{"class":72},"        start.disabled ",[51,58896,108],{"class":64},[51,58898,58899],{"class":72}," end.disabled ",[51,58901,108],{"class":64},[51,58903,58904],{"class":175}," true\n",[51,58906,58907],{"class":53,"line":17758},[51,58908,53362],{"class":72},[51,58910,58911],{"class":53,"line":17763},[51,58912,34425],{"class":72},[51,58914,58915],{"class":53,"line":17777},[51,58916,58917],{"class":57},"    \u002F\u002F 1.2 关闭按钮模块\n",[51,58919,58920,58922,58924,58926,58928,58930,58932,58935],{"class":53,"line":17782},[51,58921,12183],{"class":64},[51,58923,5276],{"class":175},[51,58925,14526],{"class":64},[51,58927,55360],{"class":72},[51,58929,55363],{"class":68},[51,58931,73],{"class":72},[51,58933,58934],{"class":282},"'.end'",[51,58936,90],{"class":72},[51,58938,58939,58942,58944,58946,58948,58950,58952],{"class":53,"line":17788},[51,58940,58941],{"class":72},"    end.",[51,58943,58777],{"class":68},[51,58945,73],{"class":72},[51,58947,58782],{"class":282},[51,58949,13397],{"class":72},[51,58951,55413],{"class":64},[51,58953,55416],{"class":72},[51,58955,58956,58959],{"class":53,"line":17793},[51,58957,58958],{"class":68},"      clearInterval",[51,58960,58961],{"class":72},"(timerId)\n",[51,58963,58964],{"class":53,"line":17807},[51,58965,58966],{"class":57},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[51,58968,58969,58972,58975,58978,58980],{"class":53,"line":17812},[51,58970,58971],{"class":72},"      arr.",[51,58973,58974],{"class":68},"splice",[51,58976,58977],{"class":72},"(random, ",[51,58979,791],{"class":175},[51,58981,90],{"class":72},[51,58983,58984],{"class":53,"line":17817},[51,58985,34425],{"class":72},[51,58987,58988],{"class":53,"line":17831},[51,58989,3480],{"emptyLinePlaceholder":1192},[51,58991,58992,58994,58996],{"class":53,"line":17843},[51,58993,53381],{"class":72},[51,58995,52777],{"class":52264},[51,58997,52271],{"class":72},[51,58999,59000,59002,59004],{"class":53,"line":17848},[51,59001,52749],{"class":72},[51,59003,52764],{"class":52264},[51,59005,52271],{"class":72},[51,59007,59008],{"class":53,"line":17861},[51,59009,3480],{"emptyLinePlaceholder":1192},[51,59011,59012,59014,59016],{"class":53,"line":17866},[51,59013,52749],{"class":72},[51,59015,51599],{"class":52264},[51,59017,52271],{"class":72},[40,59019,59020],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[1233,59022,59024],{"id":59023},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[29,59026,59028],{"className":51597,"code":59027,"language":51599,"meta":35,"style":35},"\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",[37,59029,59030,59040,59054,59058,59066,59080,59100,59112,59120,59124,59132,59144,59152,59171,59188,59204,59214,59218,59226,59234,59238],{"__ignoreMap":35},[51,59031,59032,59034,59036,59038],{"class":53,"line":54},[51,59033,52261],{"class":72},[51,59035,52265],{"class":52264},[51,59037,52268],{"class":68},[51,59039,52271],{"class":72},[51,59041,59042,59044,59046,59048,59050,59052],{"class":53,"line":61},[51,59043,2154],{"class":72},[51,59045,51599],{"class":52264},[51,59047,52280],{"class":68},[51,59049,108],{"class":72},[51,59051,52285],{"class":282},[51,59053,52271],{"class":72},[51,59055,59056],{"class":53,"line":93},[51,59057,3480],{"emptyLinePlaceholder":1192},[51,59059,59060,59062,59064],{"class":53,"line":99},[51,59061,2154],{"class":72},[51,59063,52298],{"class":52264},[51,59065,52271],{"class":72},[51,59067,59068,59070,59072,59074,59076,59078],{"class":53,"line":120},[51,59069,53108],{"class":72},[51,59071,52308],{"class":52264},[51,59073,52311],{"class":68},[51,59075,108],{"class":72},[51,59077,52316],{"class":282},[51,59079,52271],{"class":72},[51,59081,59082,59084,59086,59088,59090,59092,59094,59096,59098],{"class":53,"line":129},[51,59083,53108],{"class":72},[51,59085,52308],{"class":52264},[51,59087,15882],{"class":68},[51,59089,108],{"class":72},[51,59091,52355],{"class":282},[51,59093,52335],{"class":68},[51,59095,108],{"class":72},[51,59097,52362],{"class":282},[51,59099,52271],{"class":72},[51,59101,59102,59104,59106,59108,59110],{"class":53,"line":206},[51,59103,53108],{"class":72},[51,59105,52371],{"class":52264},[51,59107,52374],{"class":72},[51,59109,52371],{"class":52264},[51,59111,52271],{"class":72},[51,59113,59114,59116,59118],{"class":53,"line":212},[51,59115,52749],{"class":72},[51,59117,52298],{"class":52264},[51,59119,52271],{"class":72},[51,59121,59122],{"class":53,"line":227},[51,59123,3480],{"emptyLinePlaceholder":1192},[51,59125,59126,59128,59130],{"class":53,"line":370},[51,59127,2154],{"class":72},[51,59129,52764],{"class":52264},[51,59131,52271],{"class":72},[51,59133,59134,59136,59138,59140,59142],{"class":53,"line":387},[51,59135,53108],{"class":72},[51,59137,54851],{"class":52264},[51,59139,54857],{"class":72},[51,59141,54851],{"class":52264},[51,59143,52271],{"class":72},[51,59145,59146,59148,59150],{"class":53,"line":404},[51,59147,53108],{"class":72},[51,59149,52777],{"class":52264},[51,59151,52271],{"class":72},[51,59153,59154,59156,59158,59160,59162,59164,59166,59169],{"class":53,"line":415},[51,59155,12183],{"class":64},[51,59157,55355],{"class":175},[51,59159,14526],{"class":64},[51,59161,55360],{"class":72},[51,59163,55363],{"class":68},[51,59165,73],{"class":72},[51,59167,59168],{"class":282},"'button'",[51,59170,90],{"class":72},[51,59172,59173,59176,59178,59180,59182,59184,59186],{"class":53,"line":420},[51,59174,59175],{"class":72},"    btn.",[51,59177,58777],{"class":68},[51,59179,73],{"class":72},[51,59181,58782],{"class":282},[51,59183,13397],{"class":72},[51,59185,55413],{"class":64},[51,59187,55416],{"class":72},[51,59189,59190,59193,59195,59197,59200,59202],{"class":53,"line":429},[51,59191,59192],{"class":64},"      const",[51,59194,3320],{"class":175},[51,59196,14526],{"class":64},[51,59198,59199],{"class":72}," Math.",[51,59201,58824],{"class":68},[51,59203,154],{"class":72},[51,59205,59206,59209,59212],{"class":53,"line":434},[51,59207,59208],{"class":72},"      console.",[51,59210,59211],{"class":68},"log",[51,59213,1274],{"class":72},[51,59215,59216],{"class":53,"line":448},[51,59217,34425],{"class":72},[51,59219,59220,59222,59224],{"class":53,"line":462},[51,59221,53381],{"class":72},[51,59223,52777],{"class":52264},[51,59225,52271],{"class":72},[51,59227,59228,59230,59232],{"class":53,"line":470},[51,59229,52749],{"class":72},[51,59231,52764],{"class":52264},[51,59233,52271],{"class":72},[51,59235,59236],{"class":53,"line":2783},[51,59237,3480],{"emptyLinePlaceholder":1192},[51,59239,59240,59242,59244],{"class":53,"line":2788},[51,59241,52749],{"class":72},[51,59243,51599],{"class":52264},[51,59245,52271],{"class":72},[40,59247,59248],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[40,59250,59251],{},"常量不可以重新赋值",[40,59253,59254],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[29,59256,59258],{"className":51597,"code":59257,"language":51599,"meta":35,"style":35},"\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",[37,59259,59260,59270,59284,59288,59296,59310,59330,59342,59350,59354,59362,59374,59382,59393,59411,59427,59441,59449,59453,59461,59469,59473],{"__ignoreMap":35},[51,59261,59262,59264,59266,59268],{"class":53,"line":54},[51,59263,52261],{"class":72},[51,59265,52265],{"class":52264},[51,59267,52268],{"class":68},[51,59269,52271],{"class":72},[51,59271,59272,59274,59276,59278,59280,59282],{"class":53,"line":61},[51,59273,2154],{"class":72},[51,59275,51599],{"class":52264},[51,59277,52280],{"class":68},[51,59279,108],{"class":72},[51,59281,52285],{"class":282},[51,59283,52271],{"class":72},[51,59285,59286],{"class":53,"line":93},[51,59287,3480],{"emptyLinePlaceholder":1192},[51,59289,59290,59292,59294],{"class":53,"line":99},[51,59291,2154],{"class":72},[51,59293,52298],{"class":52264},[51,59295,52271],{"class":72},[51,59297,59298,59300,59302,59304,59306,59308],{"class":53,"line":120},[51,59299,53108],{"class":72},[51,59301,52308],{"class":52264},[51,59303,52311],{"class":68},[51,59305,108],{"class":72},[51,59307,52316],{"class":282},[51,59309,52271],{"class":72},[51,59311,59312,59314,59316,59318,59320,59322,59324,59326,59328],{"class":53,"line":129},[51,59313,53108],{"class":72},[51,59315,52308],{"class":52264},[51,59317,15882],{"class":68},[51,59319,108],{"class":72},[51,59321,52355],{"class":282},[51,59323,52335],{"class":68},[51,59325,108],{"class":72},[51,59327,52362],{"class":282},[51,59329,52271],{"class":72},[51,59331,59332,59334,59336,59338,59340],{"class":53,"line":206},[51,59333,53108],{"class":72},[51,59335,52371],{"class":52264},[51,59337,52374],{"class":72},[51,59339,52371],{"class":52264},[51,59341,52271],{"class":72},[51,59343,59344,59346,59348],{"class":53,"line":212},[51,59345,52749],{"class":72},[51,59347,52298],{"class":52264},[51,59349,52271],{"class":72},[51,59351,59352],{"class":53,"line":227},[51,59353,3480],{"emptyLinePlaceholder":1192},[51,59355,59356,59358,59360],{"class":53,"line":370},[51,59357,2154],{"class":72},[51,59359,52764],{"class":52264},[51,59361,52271],{"class":72},[51,59363,59364,59366,59368,59370,59372],{"class":53,"line":387},[51,59365,53108],{"class":72},[51,59367,54851],{"class":52264},[51,59369,54857],{"class":72},[51,59371,54851],{"class":52264},[51,59373,52271],{"class":72},[51,59375,59376,59378,59380],{"class":53,"line":404},[51,59377,53108],{"class":72},[51,59379,52777],{"class":52264},[51,59381,52271],{"class":72},[51,59383,59384,59386,59388,59390],{"class":53,"line":415},[51,59385,12183],{"class":64},[51,59387,3320],{"class":175},[51,59389,14526],{"class":64},[51,59391,59392],{"class":175}," 10\n",[51,59394,59395,59397,59399,59401,59403,59405,59407,59409],{"class":53,"line":420},[51,59396,12183],{"class":64},[51,59398,55355],{"class":175},[51,59400,14526],{"class":64},[51,59402,55360],{"class":72},[51,59404,55363],{"class":68},[51,59406,73],{"class":72},[51,59408,59168],{"class":282},[51,59410,90],{"class":72},[51,59412,59413,59415,59417,59419,59421,59423,59425],{"class":53,"line":429},[51,59414,59175],{"class":72},[51,59416,58777],{"class":68},[51,59418,73],{"class":72},[51,59420,58782],{"class":282},[51,59422,13397],{"class":72},[51,59424,55413],{"class":64},[51,59426,55416],{"class":72},[51,59428,59429,59431,59433,59435,59437,59439],{"class":53,"line":434},[51,59430,59192],{"class":64},[51,59432,3320],{"class":175},[51,59434,14526],{"class":64},[51,59436,59199],{"class":72},[51,59438,58824],{"class":68},[51,59440,154],{"class":72},[51,59442,59443,59445,59447],{"class":53,"line":448},[51,59444,59208],{"class":72},[51,59446,59211],{"class":68},[51,59448,1274],{"class":72},[51,59450,59451],{"class":53,"line":462},[51,59452,34425],{"class":72},[51,59454,59455,59457,59459],{"class":53,"line":470},[51,59456,53381],{"class":72},[51,59458,52777],{"class":52264},[51,59460,52271],{"class":72},[51,59462,59463,59465,59467],{"class":53,"line":2783},[51,59464,52749],{"class":72},[51,59466,52764],{"class":52264},[51,59468,52271],{"class":72},[51,59470,59471],{"class":53,"line":2788},[51,59472,3480],{"emptyLinePlaceholder":1192},[51,59474,59475,59477,59479],{"class":53,"line":2817},[51,59476,52749],{"class":72},[51,59478,51599],{"class":52264},[51,59480,52271],{"class":72},[40,59482,59483],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[29,59485,59487],{"className":51597,"code":59486,"language":51599,"meta":35,"style":35},"\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",[37,59488,59489,59499,59513,59517,59525,59539,59559,59571,59579,59583,59591,59603,59611,59621,59639,59655,59668,59676,59680,59688,59696,59700],{"__ignoreMap":35},[51,59490,59491,59493,59495,59497],{"class":53,"line":54},[51,59492,52261],{"class":72},[51,59494,52265],{"class":52264},[51,59496,52268],{"class":68},[51,59498,52271],{"class":72},[51,59500,59501,59503,59505,59507,59509,59511],{"class":53,"line":61},[51,59502,2154],{"class":72},[51,59504,51599],{"class":52264},[51,59506,52280],{"class":68},[51,59508,108],{"class":72},[51,59510,52285],{"class":282},[51,59512,52271],{"class":72},[51,59514,59515],{"class":53,"line":93},[51,59516,3480],{"emptyLinePlaceholder":1192},[51,59518,59519,59521,59523],{"class":53,"line":99},[51,59520,2154],{"class":72},[51,59522,52298],{"class":52264},[51,59524,52271],{"class":72},[51,59526,59527,59529,59531,59533,59535,59537],{"class":53,"line":120},[51,59528,53108],{"class":72},[51,59530,52308],{"class":52264},[51,59532,52311],{"class":68},[51,59534,108],{"class":72},[51,59536,52316],{"class":282},[51,59538,52271],{"class":72},[51,59540,59541,59543,59545,59547,59549,59551,59553,59555,59557],{"class":53,"line":129},[51,59542,53108],{"class":72},[51,59544,52308],{"class":52264},[51,59546,15882],{"class":68},[51,59548,108],{"class":72},[51,59550,52355],{"class":282},[51,59552,52335],{"class":68},[51,59554,108],{"class":72},[51,59556,52362],{"class":282},[51,59558,52271],{"class":72},[51,59560,59561,59563,59565,59567,59569],{"class":53,"line":206},[51,59562,53108],{"class":72},[51,59564,52371],{"class":52264},[51,59566,52374],{"class":72},[51,59568,52371],{"class":52264},[51,59570,52271],{"class":72},[51,59572,59573,59575,59577],{"class":53,"line":212},[51,59574,52749],{"class":72},[51,59576,52298],{"class":52264},[51,59578,52271],{"class":72},[51,59580,59581],{"class":53,"line":227},[51,59582,3480],{"emptyLinePlaceholder":1192},[51,59584,59585,59587,59589],{"class":53,"line":370},[51,59586,2154],{"class":72},[51,59588,52764],{"class":52264},[51,59590,52271],{"class":72},[51,59592,59593,59595,59597,59599,59601],{"class":53,"line":387},[51,59594,53108],{"class":72},[51,59596,54851],{"class":52264},[51,59598,54857],{"class":72},[51,59600,54851],{"class":52264},[51,59602,52271],{"class":72},[51,59604,59605,59607,59609],{"class":53,"line":404},[51,59606,53108],{"class":72},[51,59608,52777],{"class":52264},[51,59610,52271],{"class":72},[51,59612,59613,59615,59617,59619],{"class":53,"line":415},[51,59614,12183],{"class":64},[51,59616,3320],{"class":175},[51,59618,14526],{"class":64},[51,59620,59392],{"class":175},[51,59622,59623,59625,59627,59629,59631,59633,59635,59637],{"class":53,"line":420},[51,59624,12183],{"class":64},[51,59626,55355],{"class":175},[51,59628,14526],{"class":64},[51,59630,55360],{"class":72},[51,59632,55363],{"class":68},[51,59634,73],{"class":72},[51,59636,59168],{"class":282},[51,59638,90],{"class":72},[51,59640,59641,59643,59645,59647,59649,59651,59653],{"class":53,"line":429},[51,59642,59175],{"class":72},[51,59644,58777],{"class":68},[51,59646,73],{"class":72},[51,59648,58782],{"class":282},[51,59650,13397],{"class":72},[51,59652,55413],{"class":64},[51,59654,55416],{"class":72},[51,59656,59657,59660,59662,59664,59666],{"class":53,"line":434},[51,59658,59659],{"class":72},"      num ",[51,59661,108],{"class":64},[51,59663,59199],{"class":72},[51,59665,58824],{"class":68},[51,59667,154],{"class":72},[51,59669,59670,59672,59674],{"class":53,"line":448},[51,59671,59208],{"class":72},[51,59673,59211],{"class":68},[51,59675,1274],{"class":72},[51,59677,59678],{"class":53,"line":462},[51,59679,34425],{"class":72},[51,59681,59682,59684,59686],{"class":53,"line":470},[51,59683,53381],{"class":72},[51,59685,52777],{"class":52264},[51,59687,52271],{"class":72},[51,59689,59690,59692,59694],{"class":53,"line":2783},[51,59691,52749],{"class":72},[51,59693,52764],{"class":52264},[51,59695,52271],{"class":72},[51,59697,59698],{"class":53,"line":2788},[51,59699,3480],{"emptyLinePlaceholder":1192},[51,59701,59702,59704,59706],{"class":53,"line":2817},[51,59703,52749],{"class":72},[51,59705,51599],{"class":52264},[51,59707,52271],{"class":72},[40,59709,59710],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[1233,59712,59714],{"id":59713},"_324-事件监听版本","3.2.4 事件监听版本",[40,59716,59717],{},[2564,59718],{"alt":35,"src":59719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[40,59721,59722],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[40,59724,59725],{},"这种方式会覆盖前边的事件监听:",[29,59727,59729],{"className":51597,"code":59728,"language":51599,"meta":35,"style":35},"\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",[37,59730,59731,59741,59755,59759,59767,59781,59801,59813,59821,59825,59833,59845,59853,59871,59885,59896,59900,59912,59922,59926,59934,59942,59946],{"__ignoreMap":35},[51,59732,59733,59735,59737,59739],{"class":53,"line":54},[51,59734,52261],{"class":72},[51,59736,52265],{"class":52264},[51,59738,52268],{"class":68},[51,59740,52271],{"class":72},[51,59742,59743,59745,59747,59749,59751,59753],{"class":53,"line":61},[51,59744,2154],{"class":72},[51,59746,51599],{"class":52264},[51,59748,52280],{"class":68},[51,59750,108],{"class":72},[51,59752,52285],{"class":282},[51,59754,52271],{"class":72},[51,59756,59757],{"class":53,"line":93},[51,59758,3480],{"emptyLinePlaceholder":1192},[51,59760,59761,59763,59765],{"class":53,"line":99},[51,59762,2154],{"class":72},[51,59764,52298],{"class":52264},[51,59766,52271],{"class":72},[51,59768,59769,59771,59773,59775,59777,59779],{"class":53,"line":120},[51,59770,53108],{"class":72},[51,59772,52308],{"class":52264},[51,59774,52311],{"class":68},[51,59776,108],{"class":72},[51,59778,52316],{"class":282},[51,59780,52271],{"class":72},[51,59782,59783,59785,59787,59789,59791,59793,59795,59797,59799],{"class":53,"line":129},[51,59784,53108],{"class":72},[51,59786,52308],{"class":52264},[51,59788,15882],{"class":68},[51,59790,108],{"class":72},[51,59792,52355],{"class":282},[51,59794,52335],{"class":68},[51,59796,108],{"class":72},[51,59798,52362],{"class":282},[51,59800,52271],{"class":72},[51,59802,59803,59805,59807,59809,59811],{"class":53,"line":206},[51,59804,53108],{"class":72},[51,59806,52371],{"class":52264},[51,59808,52374],{"class":72},[51,59810,52371],{"class":52264},[51,59812,52271],{"class":72},[51,59814,59815,59817,59819],{"class":53,"line":212},[51,59816,52749],{"class":72},[51,59818,52298],{"class":52264},[51,59820,52271],{"class":72},[51,59822,59823],{"class":53,"line":227},[51,59824,3480],{"emptyLinePlaceholder":1192},[51,59826,59827,59829,59831],{"class":53,"line":370},[51,59828,2154],{"class":72},[51,59830,52764],{"class":52264},[51,59832,52271],{"class":72},[51,59834,59835,59837,59839,59841,59843],{"class":53,"line":387},[51,59836,53108],{"class":72},[51,59838,54851],{"class":52264},[51,59840,54857],{"class":72},[51,59842,54851],{"class":52264},[51,59844,52271],{"class":72},[51,59846,59847,59849,59851],{"class":53,"line":404},[51,59848,53108],{"class":72},[51,59850,52777],{"class":52264},[51,59852,52271],{"class":72},[51,59854,59855,59857,59859,59861,59863,59865,59867,59869],{"class":53,"line":415},[51,59856,12183],{"class":64},[51,59858,55355],{"class":175},[51,59860,14526],{"class":64},[51,59862,55360],{"class":72},[51,59864,55363],{"class":68},[51,59866,73],{"class":72},[51,59868,59168],{"class":282},[51,59870,90],{"class":72},[51,59872,59873,59875,59878,59880,59883],{"class":53,"line":420},[51,59874,59175],{"class":72},[51,59876,59877],{"class":68},"onclick",[51,59879,14526],{"class":64},[51,59881,59882],{"class":64}," function",[51,59884,55416],{"class":72},[51,59886,59887,59890,59892,59894],{"class":53,"line":429},[51,59888,59889],{"class":68},"      alert",[51,59891,73],{"class":72},[51,59893,1719],{"class":175},[51,59895,90],{"class":72},[51,59897,59898],{"class":53,"line":434},[51,59899,3267],{"class":72},[51,59901,59902,59904,59906,59908,59910],{"class":53,"line":448},[51,59903,59175],{"class":72},[51,59905,59877],{"class":68},[51,59907,14526],{"class":64},[51,59909,59882],{"class":64},[51,59911,55416],{"class":72},[51,59913,59914,59916,59918,59920],{"class":53,"line":462},[51,59915,59889],{"class":68},[51,59917,73],{"class":72},[51,59919,1995],{"class":175},[51,59921,90],{"class":72},[51,59923,59924],{"class":53,"line":470},[51,59925,3267],{"class":72},[51,59927,59928,59930,59932],{"class":53,"line":2783},[51,59929,53381],{"class":72},[51,59931,52777],{"class":52264},[51,59933,52271],{"class":72},[51,59935,59936,59938,59940],{"class":53,"line":2788},[51,59937,52749],{"class":72},[51,59939,52764],{"class":52264},[51,59941,52271],{"class":72},[51,59943,59944],{"class":53,"line":2817},[51,59945,3480],{"emptyLinePlaceholder":1192},[51,59947,59948,59950,59952],{"class":53,"line":2822},[51,59949,52749],{"class":72},[51,59951,51599],{"class":52264},[51,59953,52271],{"class":72},[40,59955,59956],{},"只要点击就输出结果为22,前边11被覆盖了",[29,59958,59960],{"className":51597,"code":59959,"language":51599,"meta":35,"style":35},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[37,59961,59962,59967,59972,59976,59981,59986],{"__ignoreMap":35},[51,59963,59964],{"class":53,"line":54},[51,59965,59966],{"class":72},"  btn.addEventListener('click', function () {\n",[51,59968,59969],{"class":53,"line":61},[51,59970,59971],{"class":72},"      alert(11)\n",[51,59973,59974],{"class":53,"line":93},[51,59975,34425],{"class":72},[51,59977,59978],{"class":53,"line":99},[51,59979,59980],{"class":72},"    btn.addEventListener('click', function () {\n",[51,59982,59983],{"class":53,"line":120},[51,59984,59985],{"class":72},"      alert(22)\n",[51,59987,59988],{"class":53,"line":129},[51,59989,34425],{"class":72},[40,59991,59992],{},"点击第一次输出11,第二次点击为22",[1233,59994,59996],{"id":59995},"_325-事件类型","3.2.5 事件类型",[40,59998,59999],{},[2564,60000],{"alt":35,"src":60001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22960,60003,60005],{"id":60004},"_3251-鼠标事件","3.2.5.1 鼠标事件",[40,60007,60008],{},"补充知识:",[40,60010,60011],{},"轮播图自动播放模块,可以使用",[40,60013,60014],{},"let timerId = setInterval(function () {",[40,60016,60017],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[40,60019,60020],{},"用js方法模拟进行点击事件,click必须加()",[40,60022,60023],{},"next.click()",[40,60025,60026],{},"}, 1000)",[40,60028,60029],{},[2564,60030],{"alt":35,"src":60031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[29,60033,60035],{"className":54031,"code":60034,"language":54033,"meta":35,"style":35},"\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",[37,60036,60037,60041,60051,60065,60069,60077,60092,60112,60132,60145,60153,60158,60163,60167,60171,60176,60181,60186,60191,60195,60199,60204,60209,60214,60218,60222,60227,60231,60236,60241,60245,60249,60254,60259,60264,60269,60274,60278,60282,60287,60292,60297,60302,60307,60311,60315,60320,60325,60330,60335,60340,60345,60350,60355,60360,60365,60369,60373,60378,60383,60387,60391,60396,60401,60405,60410,60415,60419,60423,60428,60432,60437,60442,60446,60451,60455,60459,60464,60469,60474,60479,60484,60489,60494,60498,60502,60506,60511,60516,60521,60526,60530,60538,60546,60550,60558,60573,60587,60608,60616,60630,60643,60658,60677,60689,60701,60713,60725,60737,60749,60761,60769,60784,60808,60832,60840,60848,60856,60864,60869,60874,60879,60884,60889,60894,60899,60904,60909,60914,60918,60923,60928,60933,60938,60943,60948,60953,60958,60963,60967,60972,60977,60982,60987,60992,60997,61002,61007,61012,61017,61022,61027,61031,61035,61040,61045,61050,61054,61059,61064,61069,61074,61079,61083,61088,61092,61096,61100,61104,61108,61112,61117,61122,61127,61132,61137,61142,61147,61152,61157,61161,61165,61170,61175,61180,61185,61190,61194,61199,61204,61209,61214,61219,61224,61228,61232,61237,61241,61246,61250,61255,61260,61265,61270,61275,61280,61284,61292,61300,61304],{"__ignoreMap":35},[51,60038,60039],{"class":53,"line":54},[51,60040,3480],{"emptyLinePlaceholder":1192},[51,60042,60043,60045,60047,60049],{"class":53,"line":61},[51,60044,52261],{"class":72},[51,60046,52265],{"class":64},[51,60048,52268],{"class":175},[51,60050,52271],{"class":72},[51,60052,60053,60055,60057,60059,60061,60063],{"class":53,"line":93},[51,60054,2154],{"class":72},[51,60056,51599],{"class":52264},[51,60058,52280],{"class":68},[51,60060,108],{"class":72},[51,60062,52285],{"class":282},[51,60064,52271],{"class":72},[51,60066,60067],{"class":53,"line":99},[51,60068,3480],{"emptyLinePlaceholder":1192},[51,60070,60071,60073,60075],{"class":53,"line":120},[51,60072,2154],{"class":72},[51,60074,52298],{"class":52264},[51,60076,52271],{"class":72},[51,60078,60079,60081,60083,60085,60087,60089],{"class":53,"line":129},[51,60080,53108],{"class":72},[51,60082,52308],{"class":52264},[51,60084,52311],{"class":68},[51,60086,108],{"class":72},[51,60088,52316],{"class":282},[51,60090,60091],{"class":72}," \u002F>\n",[51,60093,60094,60096,60098,60100,60102,60104,60106,60108,60110],{"class":53,"line":206},[51,60095,53108],{"class":72},[51,60097,52308],{"class":52264},[51,60099,52327],{"class":68},[51,60101,108],{"class":72},[51,60103,52332],{"class":282},[51,60105,52335],{"class":68},[51,60107,108],{"class":72},[51,60109,52340],{"class":282},[51,60111,60091],{"class":72},[51,60113,60114,60116,60118,60120,60122,60124,60126,60128,60130],{"class":53,"line":212},[51,60115,53108],{"class":72},[51,60117,52308],{"class":52264},[51,60119,15882],{"class":68},[51,60121,108],{"class":72},[51,60123,52355],{"class":282},[51,60125,52335],{"class":68},[51,60127,108],{"class":72},[51,60129,52362],{"class":282},[51,60131,60091],{"class":72},[51,60133,60134,60136,60138,60141,60143],{"class":53,"line":227},[51,60135,53108],{"class":72},[51,60137,52371],{"class":52264},[51,60139,60140],{"class":72},">轮播图点击切换\u003C\u002F",[51,60142,52371],{"class":52264},[51,60144,52271],{"class":72},[51,60146,60147,60149,60151],{"class":53,"line":370},[51,60148,53108],{"class":72},[51,60150,1179],{"class":52264},[51,60152,52271],{"class":72},[51,60154,60155],{"class":53,"line":387},[51,60156,60157],{"class":72},"    * {\n",[51,60159,60160],{"class":53,"line":404},[51,60161,60162],{"class":72},"      box-sizing: border-box;\n",[51,60164,60165],{"class":53,"line":415},[51,60166,3267],{"class":72},[51,60168,60169],{"class":53,"line":420},[51,60170,3480],{"emptyLinePlaceholder":1192},[51,60172,60173],{"class":53,"line":429},[51,60174,60175],{"class":72},"    .slider {\n",[51,60177,60178],{"class":53,"line":434},[51,60179,60180],{"class":72},"      width: 560px;\n",[51,60182,60183],{"class":53,"line":448},[51,60184,60185],{"class":72},"      height: 400px;\n",[51,60187,60188],{"class":53,"line":462},[51,60189,60190],{"class":72},"      overflow: hidden;\n",[51,60192,60193],{"class":53,"line":470},[51,60194,3267],{"class":72},[51,60196,60197],{"class":53,"line":2783},[51,60198,3480],{"emptyLinePlaceholder":1192},[51,60200,60201],{"class":53,"line":2788},[51,60202,60203],{"class":72},"    .slider-wrapper {\n",[51,60205,60206],{"class":53,"line":2817},[51,60207,60208],{"class":72},"      width: 100%;\n",[51,60210,60211],{"class":53,"line":2822},[51,60212,60213],{"class":72},"      height: 320px;\n",[51,60215,60216],{"class":53,"line":2839},[51,60217,3267],{"class":72},[51,60219,60220],{"class":53,"line":2844},[51,60221,3480],{"emptyLinePlaceholder":1192},[51,60223,60224],{"class":53,"line":2849},[51,60225,60226],{"class":72},"    .slider-wrapper img {\n",[51,60228,60229],{"class":53,"line":2854},[51,60230,60208],{"class":72},[51,60232,60233],{"class":53,"line":2868},[51,60234,60235],{"class":72},"      height: 100%;\n",[51,60237,60238],{"class":53,"line":2873},[51,60239,60240],{"class":72},"      display: block;\n",[51,60242,60243],{"class":53,"line":3657},[51,60244,3267],{"class":72},[51,60246,60247],{"class":53,"line":3671},[51,60248,3480],{"emptyLinePlaceholder":1192},[51,60250,60251],{"class":53,"line":3679},[51,60252,60253],{"class":72},"    .slider-footer {\n",[51,60255,60256],{"class":53,"line":3684},[51,60257,60258],{"class":72},"      height: 80px;\n",[51,60260,60261],{"class":53,"line":3690},[51,60262,60263],{"class":72},"      background-color: rgb(100, 67, 68);\n",[51,60265,60266],{"class":53,"line":3696},[51,60267,60268],{"class":72},"      padding: 12px 12px 0 12px;\n",[51,60270,60271],{"class":53,"line":3701},[51,60272,60273],{"class":72},"      position: relative;\n",[51,60275,60276],{"class":53,"line":8910},[51,60277,3267],{"class":72},[51,60279,60280],{"class":53,"line":8934},[51,60281,3480],{"emptyLinePlaceholder":1192},[51,60283,60284],{"class":53,"line":8939},[51,60285,60286],{"class":72},"    .slider-footer .toggle {\n",[51,60288,60289],{"class":53,"line":8945},[51,60290,60291],{"class":72},"      position: absolute;\n",[51,60293,60294],{"class":53,"line":8972},[51,60295,60296],{"class":72},"      right: 0;\n",[51,60298,60299],{"class":53,"line":8977},[51,60300,60301],{"class":72},"      top: 12px;\n",[51,60303,60304],{"class":53,"line":8983},[51,60305,60306],{"class":72},"      display: flex;\n",[51,60308,60309],{"class":53,"line":8995},[51,60310,3267],{"class":72},[51,60312,60313],{"class":53,"line":9007},[51,60314,3480],{"emptyLinePlaceholder":1192},[51,60316,60317],{"class":53,"line":9019},[51,60318,60319],{"class":72},"    .slider-footer .toggle button {\n",[51,60321,60322],{"class":53,"line":10678},[51,60323,60324],{"class":72},"      margin-right: 12px;\n",[51,60326,60327],{"class":53,"line":10703},[51,60328,60329],{"class":72},"      width: 28px;\n",[51,60331,60332],{"class":53,"line":10726},[51,60333,60334],{"class":72},"      height: 28px;\n",[51,60336,60337],{"class":53,"line":10750},[51,60338,60339],{"class":72},"      appearance: none;\n",[51,60341,60342],{"class":53,"line":10755},[51,60343,60344],{"class":72},"      border: none;\n",[51,60346,60347],{"class":53,"line":10760},[51,60348,60349],{"class":72},"      background: rgba(255, 255, 255, 0.1);\n",[51,60351,60352],{"class":53,"line":10765},[51,60353,60354],{"class":72},"      color: #fff;\n",[51,60356,60357],{"class":53,"line":10774},[51,60358,60359],{"class":72},"      border-radius: 4px;\n",[51,60361,60362],{"class":53,"line":10779},[51,60363,60364],{"class":72},"      cursor: pointer;\n",[51,60366,60367],{"class":53,"line":10785},[51,60368,3267],{"class":72},[51,60370,60371],{"class":53,"line":10806},[51,60372,3480],{"emptyLinePlaceholder":1192},[51,60374,60375],{"class":53,"line":10812},[51,60376,60377],{"class":72},"    .slider-footer .toggle button:hover {\n",[51,60379,60380],{"class":53,"line":10826},[51,60381,60382],{"class":72},"      background: rgba(255, 255, 255, 0.2);\n",[51,60384,60385],{"class":53,"line":10832},[51,60386,3267],{"class":72},[51,60388,60389],{"class":53,"line":10859},[51,60390,3480],{"emptyLinePlaceholder":1192},[51,60392,60393],{"class":53,"line":10868},[51,60394,60395],{"class":72},"    .slider-footer p {\n",[51,60397,60398],{"class":53,"line":10874},[51,60399,60400],{"class":72},"      margin: 0;\n",[51,60402,60403],{"class":53,"line":10882},[51,60404,60354],{"class":72},[51,60406,60407],{"class":53,"line":10887},[51,60408,60409],{"class":72},"      font-size: 18px;\n",[51,60411,60412],{"class":53,"line":17566},[51,60413,60414],{"class":72},"      margin-bottom: 10px;\n",[51,60416,60417],{"class":53,"line":17572},[51,60418,3267],{"class":72},[51,60420,60421],{"class":53,"line":17595},[51,60422,3480],{"emptyLinePlaceholder":1192},[51,60424,60425],{"class":53,"line":17601},[51,60426,60427],{"class":72},"    .slider-indicator {\n",[51,60429,60430],{"class":53,"line":17624},[51,60431,60400],{"class":72},[51,60433,60434],{"class":53,"line":17638},[51,60435,60436],{"class":72},"      padding: 0;\n",[51,60438,60439],{"class":53,"line":17658},[51,60440,60441],{"class":72},"      list-style: none;\n",[51,60443,60444],{"class":53,"line":17664},[51,60445,60306],{"class":72},[51,60447,60448],{"class":53,"line":17675},[51,60449,60450],{"class":72},"      align-items: center;\n",[51,60452,60453],{"class":53,"line":17698},[51,60454,3267],{"class":72},[51,60456,60457],{"class":53,"line":17720},[51,60458,3480],{"emptyLinePlaceholder":1192},[51,60460,60461],{"class":53,"line":17725},[51,60462,60463],{"class":72},"    .slider-indicator li {\n",[51,60465,60466],{"class":53,"line":17731},[51,60467,60468],{"class":72},"      width: 8px;\n",[51,60470,60471],{"class":53,"line":17745},[51,60472,60473],{"class":72},"      height: 8px;\n",[51,60475,60476],{"class":53,"line":17758},[51,60477,60478],{"class":72},"      margin: 4px;\n",[51,60480,60481],{"class":53,"line":17763},[51,60482,60483],{"class":72},"      border-radius: 50%;\n",[51,60485,60486],{"class":53,"line":17777},[51,60487,60488],{"class":72},"      background: #fff;\n",[51,60490,60491],{"class":53,"line":17782},[51,60492,60493],{"class":72},"      opacity: 0.4;\n",[51,60495,60496],{"class":53,"line":17788},[51,60497,60364],{"class":72},[51,60499,60500],{"class":53,"line":17793},[51,60501,3267],{"class":72},[51,60503,60504],{"class":53,"line":17807},[51,60505,3480],{"emptyLinePlaceholder":1192},[51,60507,60508],{"class":53,"line":17812},[51,60509,60510],{"class":72},"    .slider-indicator li.active {\n",[51,60512,60513],{"class":53,"line":17817},[51,60514,60515],{"class":72},"      width: 12px;\n",[51,60517,60518],{"class":53,"line":17831},[51,60519,60520],{"class":72},"      height: 12px;\n",[51,60522,60523],{"class":53,"line":17843},[51,60524,60525],{"class":72},"      opacity: 1;\n",[51,60527,60528],{"class":53,"line":17848},[51,60529,3267],{"class":72},[51,60531,60532,60534,60536],{"class":53,"line":17861},[51,60533,53381],{"class":72},[51,60535,1179],{"class":52264},[51,60537,52271],{"class":72},[51,60539,60540,60542,60544],{"class":53,"line":17866},[51,60541,52749],{"class":72},[51,60543,52298],{"class":52264},[51,60545,52271],{"class":72},[51,60547,60548],{"class":53,"line":17871},[51,60549,3480],{"emptyLinePlaceholder":1192},[51,60551,60552,60554,60556],{"class":53,"line":17876},[51,60553,2154],{"class":72},[51,60555,52764],{"class":52264},[51,60557,52271],{"class":72},[51,60559,60560,60562,60564,60566,60568,60571],{"class":53,"line":17889},[51,60561,53108],{"class":72},[51,60563,52575],{"class":52264},[51,60565,54450],{"class":68},[51,60567,108],{"class":72},[51,60569,60570],{"class":282},"\"slider\"",[51,60572,52271],{"class":72},[51,60574,60575,60577,60579,60581,60583,60585],{"class":53,"line":17894},[51,60576,52305],{"class":72},[51,60578,52575],{"class":52264},[51,60580,54450],{"class":68},[51,60582,108],{"class":72},[51,60584,56191],{"class":282},[51,60586,52271],{"class":72},[51,60588,60589,60591,60593,60595,60597,60600,60602,60604,60606],{"class":53,"line":33597},[51,60590,56198],{"class":72},[51,60592,2564],{"class":52264},[51,60594,56203],{"class":68},[51,60596,108],{"class":72},[51,60598,60599],{"class":282},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[51,60601,56211],{"class":68},[51,60603,108],{"class":72},[51,60605,8614],{"class":282},[51,60607,60091],{"class":72},[51,60609,60610,60612,60614],{"class":53,"line":33603},[51,60611,52740],{"class":72},[51,60613,52575],{"class":52264},[51,60615,52271],{"class":72},[51,60617,60618,60620,60622,60624,60626,60628],{"class":53,"line":33609},[51,60619,52305],{"class":72},[51,60621,52575],{"class":52264},[51,60623,54450],{"class":68},[51,60625,108],{"class":72},[51,60627,56238],{"class":282},[51,60629,52271],{"class":72},[51,60631,60632,60634,60636,60639,60641],{"class":53,"line":33615},[51,60633,56198],{"class":72},[51,60635,40],{"class":52264},[51,60637,60638],{"class":72},">对人类来说会不会太超前了？\u003C\u002F",[51,60640,40],{"class":52264},[51,60642,52271],{"class":72},[51,60644,60645,60647,60649,60651,60653,60656],{"class":53,"line":33621},[51,60646,56198],{"class":72},[51,60648,1000],{"class":52264},[51,60650,54450],{"class":68},[51,60652,108],{"class":72},[51,60654,60655],{"class":282},"\"slider-indicator\"",[51,60657,52271],{"class":72},[51,60659,60660,60662,60664,60666,60668,60671,60673,60675],{"class":53,"line":33632},[51,60661,56266],{"class":72},[51,60663,22],{"class":52264},[51,60665,54450],{"class":68},[51,60667,108],{"class":72},[51,60669,60670],{"class":282},"\"active\"",[51,60672,56278],{"class":72},[51,60674,22],{"class":52264},[51,60676,52271],{"class":72},[51,60678,60679,60681,60683,60685,60687],{"class":53,"line":33638},[51,60680,56266],{"class":72},[51,60682,22],{"class":52264},[51,60684,56278],{"class":72},[51,60686,22],{"class":52264},[51,60688,52271],{"class":72},[51,60690,60691,60693,60695,60697,60699],{"class":53,"line":33658},[51,60692,56266],{"class":72},[51,60694,22],{"class":52264},[51,60696,56278],{"class":72},[51,60698,22],{"class":52264},[51,60700,52271],{"class":72},[51,60702,60703,60705,60707,60709,60711],{"class":53,"line":33664},[51,60704,56266],{"class":72},[51,60706,22],{"class":52264},[51,60708,56278],{"class":72},[51,60710,22],{"class":52264},[51,60712,52271],{"class":72},[51,60714,60715,60717,60719,60721,60723],{"class":53,"line":33675},[51,60716,56266],{"class":72},[51,60718,22],{"class":52264},[51,60720,56278],{"class":72},[51,60722,22],{"class":52264},[51,60724,52271],{"class":72},[51,60726,60727,60729,60731,60733,60735],{"class":53,"line":33681},[51,60728,56266],{"class":72},[51,60730,22],{"class":52264},[51,60732,56278],{"class":72},[51,60734,22],{"class":52264},[51,60736,52271],{"class":72},[51,60738,60739,60741,60743,60745,60747],{"class":53,"line":33687},[51,60740,56266],{"class":72},[51,60742,22],{"class":52264},[51,60744,56278],{"class":72},[51,60746,22],{"class":52264},[51,60748,52271],{"class":72},[51,60750,60751,60753,60755,60757,60759],{"class":53,"line":33693},[51,60752,56266],{"class":72},[51,60754,22],{"class":52264},[51,60756,56278],{"class":72},[51,60758,22],{"class":52264},[51,60760,52271],{"class":72},[51,60762,60763,60765,60767],{"class":53,"line":33699},[51,60764,56371],{"class":72},[51,60766,1000],{"class":52264},[51,60768,52271],{"class":72},[51,60770,60771,60773,60775,60777,60779,60782],{"class":53,"line":33705},[51,60772,56198],{"class":72},[51,60774,52575],{"class":52264},[51,60776,54450],{"class":68},[51,60778,108],{"class":72},[51,60780,60781],{"class":282},"\"toggle\"",[51,60783,52271],{"class":72},[51,60785,60786,60788,60790,60792,60794,60797,60799,60802,60804,60806],{"class":53,"line":33711},[51,60787,56266],{"class":72},[51,60789,54851],{"class":52264},[51,60791,54450],{"class":68},[51,60793,108],{"class":72},[51,60795,60796],{"class":282},"\"prev\"",[51,60798,972],{"class":72},[51,60800,60801],{"class":175},"&lt;",[51,60803,52749],{"class":72},[51,60805,54851],{"class":52264},[51,60807,52271],{"class":72},[51,60809,60810,60812,60814,60816,60818,60821,60823,60826,60828,60830],{"class":53,"line":33717},[51,60811,56266],{"class":72},[51,60813,54851],{"class":52264},[51,60815,54450],{"class":68},[51,60817,108],{"class":72},[51,60819,60820],{"class":282},"\"next\"",[51,60822,972],{"class":72},[51,60824,60825],{"class":175},"&gt;",[51,60827,52749],{"class":72},[51,60829,54851],{"class":52264},[51,60831,52271],{"class":72},[51,60833,60834,60836,60838],{"class":53,"line":33737},[51,60835,56371],{"class":72},[51,60837,52575],{"class":52264},[51,60839,52271],{"class":72},[51,60841,60842,60844,60846],{"class":53,"line":33743},[51,60843,52740],{"class":72},[51,60845,52575],{"class":52264},[51,60847,52271],{"class":72},[51,60849,60850,60852,60854],{"class":53,"line":33759},[51,60851,53381],{"class":72},[51,60853,52575],{"class":52264},[51,60855,52271],{"class":72},[51,60857,60858,60860,60862],{"class":53,"line":33765},[51,60859,53108],{"class":72},[51,60861,52777],{"class":52264},[51,60863,52271],{"class":72},[51,60865,60866],{"class":53,"line":33779},[51,60867,60868],{"class":72},"    \u002F\u002F 1. 初始数据\n",[51,60870,60871],{"class":53,"line":33785},[51,60872,60873],{"class":72},"    const data = [\n",[51,60875,60876],{"class":53,"line":33800},[51,60877,60878],{"class":72},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[51,60880,60881],{"class":53,"line":33806},[51,60882,60883],{"class":72},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[51,60885,60886],{"class":53,"line":33815},[51,60887,60888],{"class":72},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[51,60890,60891],{"class":53,"line":33821},[51,60892,60893],{"class":72},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[51,60895,60896],{"class":53,"line":33830},[51,60897,60898],{"class":72},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[51,60900,60901],{"class":53,"line":33836},[51,60902,60903],{"class":72},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[51,60905,60906],{"class":53,"line":33842},[51,60907,60908],{"class":72},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[51,60910,60911],{"class":53,"line":33851},[51,60912,60913],{"class":72},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[51,60915,60916],{"class":53,"line":33857},[51,60917,54073],{"class":72},[51,60919,60920],{"class":53,"line":33868},[51,60921,60922],{"class":72},"    \u002F\u002F 获取元素\n",[51,60924,60925],{"class":53,"line":33874},[51,60926,60927],{"class":72},"    const img = document.querySelector('.slider-wrapper img')\n",[51,60929,60930],{"class":53,"line":33893},[51,60931,60932],{"class":72},"    const p = document.querySelector('.slider-footer p')\n",[51,60934,60935],{"class":53,"line":33899},[51,60936,60937],{"class":72},"    const footer = document.querySelector('.slider-footer')\n",[51,60939,60940],{"class":53,"line":33910},[51,60941,60942],{"class":72},"    \u002F\u002F 1. 右按钮业务\n",[51,60944,60945],{"class":53,"line":33916},[51,60946,60947],{"class":72},"    \u002F\u002F 1.1 获取右侧按钮 \n",[51,60949,60950],{"class":53,"line":33936},[51,60951,60952],{"class":72},"    const next = document.querySelector('.next')\n",[51,60954,60955],{"class":53,"line":33952},[51,60956,60957],{"class":72},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[51,60959,60960],{"class":53,"line":33958},[51,60961,60962],{"class":72},"    \u002F\u002F 1.2 注册点击事件\n",[51,60964,60965],{"class":53,"line":33972},[51,60966,3480],{"emptyLinePlaceholder":1192},[51,60968,60969],{"class":53,"line":33978},[51,60970,60971],{"class":72},"    next.addEventListener('click', function () {\n",[51,60973,60974],{"class":53,"line":33984},[51,60975,60976],{"class":72},"      \u002F\u002F console.log(11)\n",[51,60978,60979],{"class":53,"line":33995},[51,60980,60981],{"class":72},"      i++\n",[51,60983,60984],{"class":53,"line":34001},[51,60985,60986],{"class":72},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[51,60988,60989],{"class":53,"line":34007},[51,60990,60991],{"class":72},"      \u002F\u002F if (i >= 8) {\n",[51,60993,60994],{"class":53,"line":34017},[51,60995,60996],{"class":72},"      \u002F\u002F   i = 0\n",[51,60998,60999],{"class":53,"line":34023},[51,61000,61001],{"class":72},"      \u002F\u002F }\n",[51,61003,61004],{"class":53,"line":34034},[51,61005,61006],{"class":72},"      i = i >= data.length ? 0 : i\n",[51,61008,61009],{"class":53,"line":34040},[51,61010,61011],{"class":72},"      \u002F\u002F 1.3 得到对应的对象\n",[51,61013,61014],{"class":53,"line":34050},[51,61015,61016],{"class":72},"      \u002F\u002F console.log(data[i])\n",[51,61018,61019],{"class":53,"line":34055},[51,61020,61021],{"class":72},"      \u002F\u002F 调用函数\n",[51,61023,61024],{"class":53,"line":34061},[51,61025,61026],{"class":72},"      toggle()\n",[51,61028,61029],{"class":53,"line":34110},[51,61030,34425],{"class":72},[51,61032,61033],{"class":53,"line":34157},[51,61034,3480],{"emptyLinePlaceholder":1192},[51,61036,61037],{"class":53,"line":34162},[51,61038,61039],{"class":72},"    \u002F\u002F 2. 左侧按钮业务\n",[51,61041,61042],{"class":53,"line":34168},[51,61043,61044],{"class":72},"    \u002F\u002F 2.1 获取左侧按钮 \n",[51,61046,61047],{"class":53,"line":34187},[51,61048,61049],{"class":72},"    const prev = document.querySelector('.prev')\n",[51,61051,61052],{"class":53,"line":34193},[51,61053,60962],{"class":72},[51,61055,61056],{"class":53,"line":34213},[51,61057,61058],{"class":72},"    prev.addEventListener('click', function () {\n",[51,61060,61061],{"class":53,"line":34219},[51,61062,61063],{"class":72},"      i--\n",[51,61065,61066],{"class":53,"line":34225},[51,61067,61068],{"class":72},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[51,61070,61071],{"class":53,"line":34235},[51,61072,61073],{"class":72},"      \u002F\u002F if (i \u003C 0) {\n",[51,61075,61076],{"class":53,"line":34240},[51,61077,61078],{"class":72},"      \u002F\u002F   i = 7\n",[51,61080,61081],{"class":53,"line":34246},[51,61082,61001],{"class":72},[51,61084,61085],{"class":53,"line":34262},[51,61086,61087],{"class":72},"      i = i \u003C 0 ? data.length - 1 : i\n",[51,61089,61090],{"class":53,"line":34307},[51,61091,61011],{"class":72},[51,61093,61094],{"class":53,"line":34313},[51,61095,61016],{"class":72},[51,61097,61098],{"class":53,"line":34319},[51,61099,61021],{"class":72},[51,61101,61102],{"class":53,"line":34325},[51,61103,61026],{"class":72},[51,61105,61106],{"class":53,"line":34336},[51,61107,34425],{"class":72},[51,61109,61110],{"class":53,"line":34342},[51,61111,3480],{"emptyLinePlaceholder":1192},[51,61113,61114],{"class":53,"line":34348},[51,61115,61116],{"class":72},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[51,61118,61119],{"class":53,"line":34354},[51,61120,61121],{"class":72},"    function toggle() {\n",[51,61123,61124],{"class":53,"line":34372},[51,61125,61126],{"class":72},"      \u002F\u002F 1.4 渲染对应的数据\n",[51,61128,61129],{"class":53,"line":34386},[51,61130,61131],{"class":72},"      img.src = data[i].url\n",[51,61133,61134],{"class":53,"line":34395},[51,61135,61136],{"class":72},"      p.innerHTML = data[i].title\n",[51,61138,61139],{"class":53,"line":34404},[51,61140,61141],{"class":72},"      footer.style.backgroundColor = data[i].color\n",[51,61143,61144],{"class":53,"line":34413},[51,61145,61146],{"class":72},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[51,61148,61149],{"class":53,"line":34422},[51,61150,61151],{"class":72},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[51,61153,61154],{"class":53,"line":34428},[51,61155,61156],{"class":72},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[51,61158,61159],{"class":53,"line":34434},[51,61160,3267],{"class":72},[51,61162,61163],{"class":53,"line":34442},[51,61164,3480],{"emptyLinePlaceholder":1192},[51,61166,61167],{"class":53,"line":34447},[51,61168,61169],{"class":72},"    \u002F\u002F 3. 自动播放模块\n",[51,61171,61172],{"class":53,"line":34453},[51,61173,61174],{"class":72},"    let timerId = setInterval(function () {\n",[51,61176,61177],{"class":53,"line":34464},[51,61178,61179],{"class":72},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[51,61181,61182],{"class":53,"line":34470},[51,61183,61184],{"class":72},"      next.click()\n",[51,61186,61187],{"class":53,"line":34490},[51,61188,61189],{"class":72},"    }, 1000)\n",[51,61191,61192],{"class":53,"line":34496},[51,61193,3480],{"emptyLinePlaceholder":1192},[51,61195,61196],{"class":53,"line":34502},[51,61197,61198],{"class":72},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[51,61200,61201],{"class":53,"line":34508},[51,61202,61203],{"class":72},"    const slider = document.querySelector('.slider')\n",[51,61205,61206],{"class":53,"line":34525},[51,61207,61208],{"class":72},"    \u002F\u002F 注册事件\n",[51,61210,61211],{"class":53,"line":34531},[51,61212,61213],{"class":72},"    slider.addEventListener('mouseenter', function () {\n",[51,61215,61216],{"class":53,"line":34537},[51,61217,61218],{"class":72},"      \u002F\u002F 停止定时器\n",[51,61220,61221],{"class":53,"line":34543},[51,61222,61223],{"class":72},"      clearInterval(timerId)\n",[51,61225,61226],{"class":53,"line":34549},[51,61227,34425],{"class":72},[51,61229,61230],{"class":53,"line":34555},[51,61231,3480],{"emptyLinePlaceholder":1192},[51,61233,61234],{"class":53,"line":34582},[51,61235,61236],{"class":72},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[51,61238,61239],{"class":53,"line":34606},[51,61240,61208],{"class":72},[51,61242,61243],{"class":53,"line":34612},[51,61244,61245],{"class":72},"    slider.addEventListener('mouseleave', function () {\n",[51,61247,61248],{"class":53,"line":34618},[51,61249,61218],{"class":72},[51,61251,61252],{"class":53,"line":34624},[51,61253,61254],{"class":72},"      if (timerId) clearInterval(timerId)\n",[51,61256,61257],{"class":53,"line":34635},[51,61258,61259],{"class":72},"      \u002F\u002F 开启定时器\n",[51,61261,61262],{"class":53,"line":34646},[51,61263,61264],{"class":72},"      timerId = setInterval(function () {\n",[51,61266,61267],{"class":53,"line":34652},[51,61268,61269],{"class":72},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[51,61271,61272],{"class":53,"line":34669},[51,61273,61274],{"class":72},"        next.click()\n",[51,61276,61277],{"class":53,"line":34692},[51,61278,61279],{"class":72},"      }, 1000)\n",[51,61281,61282],{"class":53,"line":34715},[51,61283,34425],{"class":72},[51,61285,61286,61288,61290],{"class":53,"line":34721},[51,61287,53381],{"class":72},[51,61289,52777],{"class":52264},[51,61291,52271],{"class":72},[51,61293,61294,61296,61298],{"class":53,"line":34726},[51,61295,52749],{"class":72},[51,61297,52764],{"class":52264},[51,61299,52271],{"class":72},[51,61301,61302],{"class":53,"line":34735},[51,61303,3480],{"emptyLinePlaceholder":1192},[51,61305,61306,61308,61310],{"class":53,"line":34745},[51,61307,52749],{"class":72},[51,61309,51599],{"class":52264},[51,61311,52271],{"class":72},[22960,61313,61315],{"id":61314},"_3252-焦点事件","3.2.5.2 焦点事件",[40,61317,61318],{},"小米搜索框案例：",[29,61320,61322],{"className":51597,"code":61321,"language":51599,"meta":35,"style":35},"\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",[37,61323,61324,61334,61348,61352,61360,61374,61394,61414,61426,61434,61440,61450,61460,61472,61476,61480,61487,61491,61502,61506,61510,61517,61528,61541,61555,61559,61563,61572,61584,61596,61610,61623,61636,61654,61665,61669,61673,61682,61699,61703,61707,61714,61724,61734,61745,61758,61770,61786,61797,61809,61813,61817,61825,61836,61853,61865,61877,61888,61892,61896,61907,61918,61922,61930,61934,61942,61946,61954,61969,61992,62007,62038,62065,62092,62119,62146,62173,62200,62209,62217,62225,62230,62250,62270,62275,62280,62298,62303,62313,62318,62332,62337,62342,62359,62368,62380,62384,62392,62400,62404],{"__ignoreMap":35},[51,61325,61326,61328,61330,61332],{"class":53,"line":54},[51,61327,52261],{"class":72},[51,61329,52265],{"class":52264},[51,61331,52268],{"class":68},[51,61333,52271],{"class":72},[51,61335,61336,61338,61340,61342,61344,61346],{"class":53,"line":61},[51,61337,2154],{"class":72},[51,61339,51599],{"class":52264},[51,61341,52280],{"class":68},[51,61343,108],{"class":72},[51,61345,52285],{"class":282},[51,61347,52271],{"class":72},[51,61349,61350],{"class":53,"line":93},[51,61351,3480],{"emptyLinePlaceholder":1192},[51,61353,61354,61356,61358],{"class":53,"line":99},[51,61355,2154],{"class":72},[51,61357,52298],{"class":52264},[51,61359,52271],{"class":72},[51,61361,61362,61364,61366,61368,61370,61372],{"class":53,"line":120},[51,61363,52305],{"class":72},[51,61365,52308],{"class":52264},[51,61367,52311],{"class":68},[51,61369,108],{"class":72},[51,61371,52316],{"class":282},[51,61373,52271],{"class":72},[51,61375,61376,61378,61380,61382,61384,61386,61388,61390,61392],{"class":53,"line":129},[51,61377,52305],{"class":72},[51,61379,52308],{"class":52264},[51,61381,52327],{"class":68},[51,61383,108],{"class":72},[51,61385,52332],{"class":282},[51,61387,52335],{"class":68},[51,61389,108],{"class":72},[51,61391,52340],{"class":282},[51,61393,52271],{"class":72},[51,61395,61396,61398,61400,61402,61404,61406,61408,61410,61412],{"class":53,"line":206},[51,61397,52305],{"class":72},[51,61399,52308],{"class":52264},[51,61401,15882],{"class":68},[51,61403,108],{"class":72},[51,61405,52355],{"class":282},[51,61407,52335],{"class":68},[51,61409,108],{"class":72},[51,61411,52362],{"class":282},[51,61413,52271],{"class":72},[51,61415,61416,61418,61420,61422,61424],{"class":53,"line":212},[51,61417,52305],{"class":72},[51,61419,52371],{"class":52264},[51,61421,52374],{"class":72},[51,61423,52371],{"class":52264},[51,61425,52271],{"class":72},[51,61427,61428,61430,61432],{"class":53,"line":227},[51,61429,52305],{"class":72},[51,61431,1179],{"class":52264},[51,61433,52271],{"class":72},[51,61435,61436,61438],{"class":53,"line":370},[51,61437,52391],{"class":52264},[51,61439,16534],{"class":72},[51,61441,61442,61444,61446,61448],{"class":53,"line":387},[51,61443,52398],{"class":175},[51,61445,52401],{"class":72},[51,61447,176],{"class":175},[51,61449,179],{"class":72},[51,61451,61452,61454,61456,61458],{"class":53,"line":404},[51,61453,52410],{"class":175},[51,61455,52401],{"class":72},[51,61457,176],{"class":175},[51,61459,179],{"class":72},[51,61461,61462,61465,61467,61470],{"class":53,"line":415},[51,61463,61464],{"class":175},"            box-sizing",[51,61466,52401],{"class":72},[51,61468,61469],{"class":175},"border-box",[51,61471,179],{"class":72},[51,61473,61474],{"class":53,"line":420},[51,61475,3609],{"class":72},[51,61477,61478],{"class":53,"line":429},[51,61479,3480],{"emptyLinePlaceholder":1192},[51,61481,61482,61485],{"class":53,"line":434},[51,61483,61484],{"class":52264},"        ul",[51,61486,16534],{"class":72},[51,61488,61489],{"class":53,"line":448},[51,61490,3480],{"emptyLinePlaceholder":1192},[51,61492,61493,61496,61498,61500],{"class":53,"line":462},[51,61494,61495],{"class":175},"            list-style",[51,61497,52401],{"class":72},[51,61499,55701],{"class":175},[51,61501,179],{"class":72},[51,61503,61504],{"class":53,"line":470},[51,61505,3609],{"class":72},[51,61507,61508],{"class":53,"line":2783},[51,61509,3480],{"emptyLinePlaceholder":1192},[51,61511,61512,61515],{"class":53,"line":2788},[51,61513,61514],{"class":68},"        .mi",[51,61516,16534],{"class":72},[51,61518,61519,61522,61524,61526],{"class":53,"line":2817},[51,61520,61521],{"class":175},"            position",[51,61523,52401],{"class":72},[51,61525,55728],{"class":175},[51,61527,179],{"class":72},[51,61529,61530,61532,61534,61537,61539],{"class":53,"line":2822},[51,61531,52448],{"class":175},[51,61533,52401],{"class":72},[51,61535,61536],{"class":175},"223",[51,61538,52456],{"class":64},[51,61540,179],{"class":72},[51,61542,61543,61545,61547,61549,61551,61553],{"class":53,"line":2839},[51,61544,52398],{"class":175},[51,61546,52401],{"class":72},[51,61548,612],{"class":175},[51,61550,52456],{"class":64},[51,61552,52520],{"class":175},[51,61554,179],{"class":72},[51,61556,61557],{"class":53,"line":2844},[51,61558,3609],{"class":72},[51,61560,61561],{"class":53,"line":2849},[51,61562,3480],{"emptyLinePlaceholder":1192},[51,61564,61565,61567,61570],{"class":53,"line":2854},[51,61566,61514],{"class":68},[51,61568,61569],{"class":52264}," input",[51,61571,16534],{"class":72},[51,61573,61574,61576,61578,61580,61582],{"class":53,"line":2868},[51,61575,52448],{"class":175},[51,61577,52401],{"class":72},[51,61579,61536],{"class":175},[51,61581,52456],{"class":64},[51,61583,179],{"class":72},[51,61585,61586,61588,61590,61592,61594],{"class":53,"line":2873},[51,61587,52463],{"class":175},[51,61589,52401],{"class":72},[51,61591,1853],{"class":175},[51,61593,52456],{"class":64},[51,61595,179],{"class":72},[51,61597,61598,61600,61602,61604,61606,61608],{"class":53,"line":3657},[51,61599,52410],{"class":175},[51,61601,52401],{"class":72},[51,61603,176],{"class":175},[51,61605,3118],{"class":175},[51,61607,52456],{"class":64},[51,61609,179],{"class":72},[51,61611,61612,61615,61617,61619,61621],{"class":53,"line":3671},[51,61613,61614],{"class":175},"            font-size",[51,61616,52401],{"class":72},[51,61618,1795],{"class":175},[51,61620,52456],{"class":64},[51,61622,179],{"class":72},[51,61624,61625,61628,61630,61632,61634],{"class":53,"line":3679},[51,61626,61627],{"class":175},"            line-height",[51,61629,52401],{"class":72},[51,61631,1853],{"class":175},[51,61633,52456],{"class":64},[51,61635,179],{"class":72},[51,61637,61638,61641,61643,61645,61647,61649,61652],{"class":53,"line":3684},[51,61639,61640],{"class":175},"            border",[51,61642,52401],{"class":72},[51,61644,791],{"class":175},[51,61646,52456],{"class":64},[51,61648,52485],{"class":175},[51,61650,61651],{"class":175}," #e0e0e0",[51,61653,179],{"class":72},[51,61655,61656,61659,61661,61663],{"class":53,"line":3690},[51,61657,61658],{"class":175},"            outline",[51,61660,52401],{"class":72},[51,61662,55701],{"class":175},[51,61664,179],{"class":72},[51,61666,61667],{"class":53,"line":3696},[51,61668,3609],{"class":72},[51,61670,61671],{"class":53,"line":3701},[51,61672,3480],{"emptyLinePlaceholder":1192},[51,61674,61675,61677,61680],{"class":53,"line":8910},[51,61676,61514],{"class":68},[51,61678,61679],{"class":68}," .search",[51,61681,16534],{"class":72},[51,61683,61684,61686,61688,61690,61692,61694,61697],{"class":53,"line":8934},[51,61685,61640],{"class":175},[51,61687,52401],{"class":72},[51,61689,791],{"class":175},[51,61691,52456],{"class":64},[51,61693,52485],{"class":175},[51,61695,61696],{"class":175}," #ff6700",[51,61698,179],{"class":72},[51,61700,61701],{"class":53,"line":8939},[51,61702,3609],{"class":72},[51,61704,61705],{"class":53,"line":8945},[51,61706,3480],{"emptyLinePlaceholder":1192},[51,61708,61709,61712],{"class":53,"line":8972},[51,61710,61711],{"class":68},"        .result-list",[51,61713,16534],{"class":72},[51,61715,61716,61718,61720,61722],{"class":53,"line":8977},[51,61717,52436],{"class":175},[51,61719,52401],{"class":72},[51,61721,55701],{"class":175},[51,61723,179],{"class":72},[51,61725,61726,61728,61730,61732],{"class":53,"line":8983},[51,61727,61521],{"class":175},[51,61729,52401],{"class":72},[51,61731,55795],{"class":175},[51,61733,179],{"class":72},[51,61735,61736,61739,61741,61743],{"class":53,"line":8995},[51,61737,61738],{"class":175},"            left",[51,61740,52401],{"class":72},[51,61742,176],{"class":175},[51,61744,179],{"class":72},[51,61746,61747,61750,61752,61754,61756],{"class":53,"line":9007},[51,61748,61749],{"class":175},"            top",[51,61751,52401],{"class":72},[51,61753,1853],{"class":175},[51,61755,52456],{"class":64},[51,61757,179],{"class":72},[51,61759,61760,61762,61764,61766,61768],{"class":53,"line":9019},[51,61761,52448],{"class":175},[51,61763,52401],{"class":72},[51,61765,61536],{"class":175},[51,61767,52456],{"class":64},[51,61769,179],{"class":72},[51,61771,61772,61774,61776,61778,61780,61782,61784],{"class":53,"line":10678},[51,61773,61640],{"class":175},[51,61775,52401],{"class":72},[51,61777,791],{"class":175},[51,61779,52456],{"class":64},[51,61781,52485],{"class":175},[51,61783,61696],{"class":175},[51,61785,179],{"class":72},[51,61787,61788,61791,61793,61795],{"class":53,"line":10703},[51,61789,61790],{"class":175},"            border-top",[51,61792,52401],{"class":72},[51,61794,176],{"class":175},[51,61796,179],{"class":72},[51,61798,61799,61802,61804,61807],{"class":53,"line":10726},[51,61800,61801],{"class":175},"            background",[51,61803,52401],{"class":72},[51,61805,61806],{"class":175},"#fff",[51,61808,179],{"class":72},[51,61810,61811],{"class":53,"line":10750},[51,61812,3609],{"class":72},[51,61814,61815],{"class":53,"line":10755},[51,61816,3480],{"emptyLinePlaceholder":1192},[51,61818,61819,61821,61823],{"class":53,"line":10760},[51,61820,61711],{"class":68},[51,61822,170],{"class":52264},[51,61824,16534],{"class":72},[51,61826,61827,61829,61831,61834],{"class":53,"line":10765},[51,61828,52436],{"class":175},[51,61830,52401],{"class":72},[51,61832,61833],{"class":175},"block",[51,61835,179],{"class":72},[51,61837,61838,61840,61842,61844,61846,61849,61851],{"class":53,"line":10774},[51,61839,52410],{"class":175},[51,61841,52401],{"class":72},[51,61843,1593],{"class":175},[51,61845,52456],{"class":64},[51,61847,61848],{"class":175}," 15",[51,61850,52456],{"class":64},[51,61852,179],{"class":72},[51,61854,61855,61857,61859,61861,61863],{"class":53,"line":10779},[51,61856,61614],{"class":175},[51,61858,52401],{"class":72},[51,61860,1744],{"class":175},[51,61862,52456],{"class":64},[51,61864,179],{"class":72},[51,61866,61867,61870,61872,61875],{"class":53,"line":10785},[51,61868,61869],{"class":175},"            color",[51,61871,52401],{"class":72},[51,61873,61874],{"class":175},"#424242",[51,61876,179],{"class":72},[51,61878,61879,61882,61884,61886],{"class":53,"line":10806},[51,61880,61881],{"class":175},"            text-decoration",[51,61883,52401],{"class":72},[51,61885,55701],{"class":175},[51,61887,179],{"class":72},[51,61889,61890],{"class":53,"line":10812},[51,61891,3609],{"class":72},[51,61893,61894],{"class":53,"line":10826},[51,61895,3480],{"emptyLinePlaceholder":1192},[51,61897,61898,61900,61902,61905],{"class":53,"line":10832},[51,61899,61711],{"class":68},[51,61901,170],{"class":52264},[51,61903,61904],{"class":68},":hover",[51,61906,16534],{"class":72},[51,61908,61909,61911,61913,61916],{"class":53,"line":10859},[51,61910,52604],{"class":175},[51,61912,52401],{"class":72},[51,61914,61915],{"class":175},"#eee",[51,61917,179],{"class":72},[51,61919,61920],{"class":53,"line":10868},[51,61921,3609],{"class":72},[51,61923,61924,61926,61928],{"class":53,"line":10874},[51,61925,52740],{"class":72},[51,61927,1179],{"class":52264},[51,61929,52271],{"class":72},[51,61931,61932],{"class":53,"line":10882},[51,61933,3480],{"emptyLinePlaceholder":1192},[51,61935,61936,61938,61940],{"class":53,"line":10887},[51,61937,52749],{"class":72},[51,61939,52298],{"class":52264},[51,61941,52271],{"class":72},[51,61943,61944],{"class":53,"line":17566},[51,61945,3480],{"emptyLinePlaceholder":1192},[51,61947,61948,61950,61952],{"class":53,"line":17572},[51,61949,2154],{"class":72},[51,61951,52764],{"class":52264},[51,61953,52271],{"class":72},[51,61955,61956,61958,61960,61962,61964,61967],{"class":53,"line":17595},[51,61957,52305],{"class":72},[51,61959,52575],{"class":52264},[51,61961,54450],{"class":68},[51,61963,108],{"class":72},[51,61965,61966],{"class":282},"\"mi\"",[51,61968,52271],{"class":72},[51,61970,61971,61973,61975,61977,61979,61982,61985,61987,61990],{"class":53,"line":17601},[51,61972,56266],{"class":72},[51,61974,54785],{"class":52264},[51,61976,54788],{"class":68},[51,61978,108],{"class":72},[51,61980,61981],{"class":282},"\"search\"",[51,61983,61984],{"class":68}," placeholder",[51,61986,108],{"class":72},[51,61988,61989],{"class":282},"\"小米笔记本\"",[51,61991,52271],{"class":72},[51,61993,61994,61996,61998,62000,62002,62005],{"class":53,"line":17624},[51,61995,56266],{"class":72},[51,61997,1000],{"class":52264},[51,61999,54450],{"class":68},[51,62001,108],{"class":72},[51,62003,62004],{"class":282},"\"result-list\"",[51,62006,52271],{"class":72},[51,62008,62009,62012,62014,62017,62019,62022,62024,62027,62030,62032,62034,62036],{"class":53,"line":17638},[51,62010,62011],{"class":72},"            \u003C",[51,62013,22],{"class":52264},[51,62015,62016],{"class":72},">\u003C",[51,62018,981],{"class":52264},[51,62020,62021],{"class":68}," href",[51,62023,108],{"class":72},[51,62025,62026],{"class":282},"\"#\"",[51,62028,62029],{"class":72},">全部商品\u003C\u002F",[51,62031,981],{"class":52264},[51,62033,56278],{"class":72},[51,62035,22],{"class":52264},[51,62037,52271],{"class":72},[51,62039,62040,62042,62044,62046,62048,62050,62052,62054,62057,62059,62061,62063],{"class":53,"line":17658},[51,62041,62011],{"class":72},[51,62043,22],{"class":52264},[51,62045,62016],{"class":72},[51,62047,981],{"class":52264},[51,62049,62021],{"class":68},[51,62051,108],{"class":72},[51,62053,62026],{"class":282},[51,62055,62056],{"class":72},">小米11\u003C\u002F",[51,62058,981],{"class":52264},[51,62060,56278],{"class":72},[51,62062,22],{"class":52264},[51,62064,52271],{"class":72},[51,62066,62067,62069,62071,62073,62075,62077,62079,62081,62084,62086,62088,62090],{"class":53,"line":17664},[51,62068,62011],{"class":72},[51,62070,22],{"class":52264},[51,62072,62016],{"class":72},[51,62074,981],{"class":52264},[51,62076,62021],{"class":68},[51,62078,108],{"class":72},[51,62080,62026],{"class":282},[51,62082,62083],{"class":72},">小米10S\u003C\u002F",[51,62085,981],{"class":52264},[51,62087,56278],{"class":72},[51,62089,22],{"class":52264},[51,62091,52271],{"class":72},[51,62093,62094,62096,62098,62100,62102,62104,62106,62108,62111,62113,62115,62117],{"class":53,"line":17675},[51,62095,62011],{"class":72},[51,62097,22],{"class":52264},[51,62099,62016],{"class":72},[51,62101,981],{"class":52264},[51,62103,62021],{"class":68},[51,62105,108],{"class":72},[51,62107,62026],{"class":282},[51,62109,62110],{"class":72},">小米笔记本\u003C\u002F",[51,62112,981],{"class":52264},[51,62114,56278],{"class":72},[51,62116,22],{"class":52264},[51,62118,52271],{"class":72},[51,62120,62121,62123,62125,62127,62129,62131,62133,62135,62138,62140,62142,62144],{"class":53,"line":17698},[51,62122,62011],{"class":72},[51,62124,22],{"class":52264},[51,62126,62016],{"class":72},[51,62128,981],{"class":52264},[51,62130,62021],{"class":68},[51,62132,108],{"class":72},[51,62134,62026],{"class":282},[51,62136,62137],{"class":72},">小米手机\u003C\u002F",[51,62139,981],{"class":52264},[51,62141,56278],{"class":72},[51,62143,22],{"class":52264},[51,62145,52271],{"class":72},[51,62147,62148,62150,62152,62154,62156,62158,62160,62162,62165,62167,62169,62171],{"class":53,"line":17720},[51,62149,62011],{"class":72},[51,62151,22],{"class":52264},[51,62153,62016],{"class":72},[51,62155,981],{"class":52264},[51,62157,62021],{"class":68},[51,62159,108],{"class":72},[51,62161,62026],{"class":282},[51,62163,62164],{"class":72},">黑鲨4\u003C\u002F",[51,62166,981],{"class":52264},[51,62168,56278],{"class":72},[51,62170,22],{"class":52264},[51,62172,52271],{"class":72},[51,62174,62175,62177,62179,62181,62183,62185,62187,62189,62192,62194,62196,62198],{"class":53,"line":17725},[51,62176,62011],{"class":72},[51,62178,22],{"class":52264},[51,62180,62016],{"class":72},[51,62182,981],{"class":52264},[51,62184,62021],{"class":68},[51,62186,108],{"class":72},[51,62188,62026],{"class":282},[51,62190,62191],{"class":72},">空调\u003C\u002F",[51,62193,981],{"class":52264},[51,62195,56278],{"class":72},[51,62197,22],{"class":52264},[51,62199,52271],{"class":72},[51,62201,62202,62205,62207],{"class":53,"line":17731},[51,62203,62204],{"class":72},"        \u003C\u002F",[51,62206,1000],{"class":52264},[51,62208,52271],{"class":72},[51,62210,62211,62213,62215],{"class":53,"line":17745},[51,62212,52740],{"class":72},[51,62214,52575],{"class":52264},[51,62216,52271],{"class":72},[51,62218,62219,62221,62223],{"class":53,"line":17758},[51,62220,52305],{"class":72},[51,62222,52777],{"class":52264},[51,62224,52271],{"class":72},[51,62226,62227],{"class":53,"line":17763},[51,62228,62229],{"class":57},"        \u002F\u002F 1. 获取元素\n",[51,62231,62232,62235,62237,62239,62241,62243,62245,62248],{"class":53,"line":17777},[51,62233,62234],{"class":64},"        const",[51,62236,61569],{"class":175},[51,62238,14526],{"class":64},[51,62240,55360],{"class":72},[51,62242,55363],{"class":68},[51,62244,73],{"class":72},[51,62246,62247],{"class":282},"'[type=search]'",[51,62249,90],{"class":72},[51,62251,62252,62254,62257,62259,62261,62263,62265,62268],{"class":53,"line":17782},[51,62253,62234],{"class":64},[51,62255,62256],{"class":175}," ul",[51,62258,14526],{"class":64},[51,62260,55360],{"class":72},[51,62262,55363],{"class":68},[51,62264,73],{"class":72},[51,62266,62267],{"class":282},"'.result-list'",[51,62269,90],{"class":72},[51,62271,62272],{"class":53,"line":17788},[51,62273,62274],{"class":57},"        \u002F\u002F console.log(input)\n",[51,62276,62277],{"class":53,"line":17793},[51,62278,62279],{"class":57},"        \u002F\u002F 2. 监听事件 获得焦点\n",[51,62281,62282,62285,62287,62289,62292,62294,62296],{"class":53,"line":17807},[51,62283,62284],{"class":72},"        input.",[51,62286,58777],{"class":68},[51,62288,73],{"class":72},[51,62290,62291],{"class":282},"'focus'",[51,62293,13397],{"class":72},[51,62295,55413],{"class":64},[51,62297,55416],{"class":72},[51,62299,62300],{"class":53,"line":17812},[51,62301,62302],{"class":57},"            \u002F\u002F ul显示\n",[51,62304,62305,62308,62310],{"class":53,"line":17817},[51,62306,62307],{"class":72},"            ul.style.display ",[51,62309,108],{"class":64},[51,62311,62312],{"class":282}," 'block'\n",[51,62314,62315],{"class":53,"line":17831},[51,62316,62317],{"class":57},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[51,62319,62320,62323,62325,62327,62330],{"class":53,"line":17843},[51,62321,62322],{"class":72},"            input.classList.",[51,62324,221],{"class":68},[51,62326,73],{"class":72},[51,62328,62329],{"class":282},"'search'",[51,62331,90],{"class":72},[51,62333,62334],{"class":53,"line":17848},[51,62335,62336],{"class":72},"        })\n",[51,62338,62339],{"class":53,"line":17861},[51,62340,62341],{"class":57},"        \u002F\u002F 3. 监听事件 失去焦点\n",[51,62343,62344,62346,62348,62350,62353,62355,62357],{"class":53,"line":17866},[51,62345,62284],{"class":72},[51,62347,58777],{"class":68},[51,62349,73],{"class":72},[51,62351,62352],{"class":282},"'blur'",[51,62354,13397],{"class":72},[51,62356,55413],{"class":64},[51,62358,55416],{"class":72},[51,62360,62361,62363,62365],{"class":53,"line":17871},[51,62362,62307],{"class":72},[51,62364,108],{"class":64},[51,62366,62367],{"class":282}," 'none'\n",[51,62369,62370,62372,62374,62376,62378],{"class":53,"line":17876},[51,62371,62322],{"class":72},[51,62373,57970],{"class":68},[51,62375,73],{"class":72},[51,62377,62329],{"class":282},[51,62379,90],{"class":72},[51,62381,62382],{"class":53,"line":17889},[51,62383,62336],{"class":72},[51,62385,62386,62388,62390],{"class":53,"line":17894},[51,62387,52740],{"class":72},[51,62389,52777],{"class":52264},[51,62391,52271],{"class":72},[51,62393,62394,62396,62398],{"class":53,"line":33597},[51,62395,52749],{"class":72},[51,62397,52764],{"class":52264},[51,62399,52271],{"class":72},[51,62401,62402],{"class":53,"line":33603},[51,62403,3480],{"emptyLinePlaceholder":1192},[51,62405,62406,62408,62410],{"class":53,"line":33609},[51,62407,52749],{"class":72},[51,62409,51599],{"class":52264},[51,62411,52271],{"class":72},[22960,62413,62415],{"id":62414},"_3253-键盘事件","3.2.5.3 键盘事件",[40,62417,62418],{},"评论字数统计案例",[40,62420,62421],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[40,62423,62424],{},"牢记focus伪类选择器",[52308,62426],{"charSet":62427},"UTF-8",[52308,62429],{"name":62430,"content":62431},"viewport","width=device-width, initial-scale=1.0",[52371,62433,62434],{},"Document",[1179,62436,62437],{},"\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",[54785,62439],{"type":34},[1000,62441,62442,62445],{},[22,62443,62444],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[22,62446,62447],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[29,62449,62451],{"className":51597,"code":62450,"language":51599,"meta":35,"style":35},"\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",[37,62452,62453,62463,62477,62481,62489,62503,62523,62543,62556,62564,62571,62584,62598,62608,62618,62622,62626,62633,62645,62657,62669,62681,62710,62723,62727,62731,62740,62751,62763,62774,62785,62797,62808,62820,62836,62848,62852,62856,62867,62878,62888,62900,62904,62908,62916,62927,62937,62948,62960,62973,62985,62997,63001,63005,63014,63026,63037,63050,63061,63075,63079,63083,63090,63102,63114,63124,63128,63132,63141,63153,63163,63167,63171,63182,63192,63211,63224,63228,63232,63242,63252,63256,63260,63271,63282,63294,63306,63310,63314,63325,63336,63350,63354,63358,63369,63379,63391,63395,63403,63411,63415,63423,63438,63457,63497,63510,63518,63532,63552,63560,63575,63598,63616,63631,63651,63671,63691,63699,63707,63715,63723,63743,63763,63768,63785,63794,63798,63803,63819,63827,63831,63836,63853,63858,63883,63887,63891,63896,63901,63909,63917,63921],{"__ignoreMap":35},[51,62454,62455,62457,62459,62461],{"class":53,"line":54},[51,62456,52261],{"class":72},[51,62458,52265],{"class":52264},[51,62460,52268],{"class":68},[51,62462,52271],{"class":72},[51,62464,62465,62467,62469,62471,62473,62475],{"class":53,"line":61},[51,62466,2154],{"class":72},[51,62468,51599],{"class":52264},[51,62470,52280],{"class":68},[51,62472,108],{"class":72},[51,62474,52285],{"class":282},[51,62476,52271],{"class":72},[51,62478,62479],{"class":53,"line":93},[51,62480,3480],{"emptyLinePlaceholder":1192},[51,62482,62483,62485,62487],{"class":53,"line":99},[51,62484,2154],{"class":72},[51,62486,52298],{"class":52264},[51,62488,52271],{"class":72},[51,62490,62491,62493,62495,62497,62499,62501],{"class":53,"line":120},[51,62492,53108],{"class":72},[51,62494,52308],{"class":52264},[51,62496,52311],{"class":68},[51,62498,108],{"class":72},[51,62500,52316],{"class":282},[51,62502,52271],{"class":72},[51,62504,62505,62507,62509,62511,62513,62515,62517,62519,62521],{"class":53,"line":129},[51,62506,53108],{"class":72},[51,62508,52308],{"class":52264},[51,62510,52327],{"class":68},[51,62512,108],{"class":72},[51,62514,52332],{"class":282},[51,62516,52335],{"class":68},[51,62518,108],{"class":72},[51,62520,52340],{"class":282},[51,62522,52271],{"class":72},[51,62524,62525,62527,62529,62531,62533,62535,62537,62539,62541],{"class":53,"line":206},[51,62526,53108],{"class":72},[51,62528,52308],{"class":52264},[51,62530,15882],{"class":68},[51,62532,108],{"class":72},[51,62534,52355],{"class":282},[51,62536,52335],{"class":68},[51,62538,108],{"class":72},[51,62540,52362],{"class":282},[51,62542,52271],{"class":72},[51,62544,62545,62547,62549,62552,62554],{"class":53,"line":212},[51,62546,53108],{"class":72},[51,62548,52371],{"class":52264},[51,62550,62551],{"class":72},">评论回车发布\u003C\u002F",[51,62553,52371],{"class":52264},[51,62555,52271],{"class":72},[51,62557,62558,62560,62562],{"class":53,"line":227},[51,62559,53108],{"class":72},[51,62561,1179],{"class":52264},[51,62563,52271],{"class":72},[51,62565,62566,62569],{"class":53,"line":370},[51,62567,62568],{"class":68},"    .wrapper",[51,62570,16534],{"class":72},[51,62572,62573,62576,62578,62580,62582],{"class":53,"line":387},[51,62574,62575],{"class":175},"      min-width",[51,62577,52401],{"class":72},[51,62579,5064],{"class":175},[51,62581,52456],{"class":64},[51,62583,179],{"class":72},[51,62585,62586,62589,62591,62594,62596],{"class":53,"line":404},[51,62587,62588],{"class":175},"      max-width",[51,62590,52401],{"class":72},[51,62592,62593],{"class":175},"800",[51,62595,52456],{"class":64},[51,62597,179],{"class":72},[51,62599,62600,62602,62604,62606],{"class":53,"line":415},[51,62601,55973],{"class":175},[51,62603,52401],{"class":72},[51,62605,52441],{"class":175},[51,62607,179],{"class":72},[51,62609,62610,62612,62614,62616],{"class":53,"line":420},[51,62611,55984],{"class":175},[51,62613,52401],{"class":72},[51,62615,52544],{"class":175},[51,62617,179],{"class":72},[51,62619,62620],{"class":53,"line":429},[51,62621,3267],{"class":72},[51,62623,62624],{"class":53,"line":434},[51,62625,3480],{"emptyLinePlaceholder":1192},[51,62627,62628,62631],{"class":53,"line":448},[51,62629,62630],{"class":68},"    .avatar",[51,62632,16534],{"class":72},[51,62634,62635,62637,62639,62641,62643],{"class":53,"line":462},[51,62636,55735],{"class":175},[51,62638,52401],{"class":72},[51,62640,1853],{"class":175},[51,62642,52456],{"class":64},[51,62644,179],{"class":72},[51,62646,62647,62649,62651,62653,62655],{"class":53,"line":470},[51,62648,55749],{"class":175},[51,62650,52401],{"class":72},[51,62652,1853],{"class":175},[51,62654,52456],{"class":64},[51,62656,179],{"class":72},[51,62658,62659,62661,62663,62665,62667],{"class":53,"line":2783},[51,62660,56098],{"class":175},[51,62662,52401],{"class":72},[51,62664,1902],{"class":175},[51,62666,1577],{"class":64},[51,62668,179],{"class":72},[51,62670,62671,62674,62676,62679],{"class":53,"line":2788},[51,62672,62673],{"class":175},"      overflow",[51,62675,52401],{"class":72},[51,62677,62678],{"class":175},"hidden",[51,62680,179],{"class":72},[51,62682,62683,62686,62688,62691,62693,62696,62698,62701,62703,62705,62708],{"class":53,"line":2817},[51,62684,62685],{"class":175},"      background",[51,62687,52401],{"class":72},[51,62689,62690],{"class":175},"url",[51,62692,73],{"class":72},[51,62694,62695],{"class":78},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[51,62697,14676],{"class":72},[51,62699,62700],{"class":175},"no-repeat",[51,62702,18106],{"class":175},[51,62704,25942],{"class":72},[51,62706,62707],{"class":175},"cover",[51,62709,179],{"class":72},[51,62711,62712,62715,62717,62719,62721],{"class":53,"line":2822},[51,62713,62714],{"class":175},"      margin-right",[51,62716,52401],{"class":72},[51,62718,457],{"class":175},[51,62720,52456],{"class":64},[51,62722,179],{"class":72},[51,62724,62725],{"class":53,"line":2839},[51,62726,3267],{"class":72},[51,62728,62729],{"class":53,"line":2844},[51,62730,3480],{"emptyLinePlaceholder":1192},[51,62732,62733,62735,62738],{"class":53,"line":2849},[51,62734,62568],{"class":68},[51,62736,62737],{"class":52264}," textarea",[51,62739,16534],{"class":72},[51,62741,62742,62745,62747,62749],{"class":53,"line":2854},[51,62743,62744],{"class":175},"      outline",[51,62746,52401],{"class":72},[51,62748,55701],{"class":175},[51,62750,179],{"class":72},[51,62752,62753,62756,62758,62761],{"class":53,"line":2868},[51,62754,62755],{"class":175},"      border-color",[51,62757,52401],{"class":72},[51,62759,62760],{"class":175},"transparent",[51,62762,179],{"class":72},[51,62764,62765,62768,62770,62772],{"class":53,"line":2873},[51,62766,62767],{"class":175},"      resize",[51,62769,52401],{"class":72},[51,62771,55701],{"class":175},[51,62773,179],{"class":72},[51,62775,62776,62778,62780,62783],{"class":53,"line":3657},[51,62777,62685],{"class":175},[51,62779,52401],{"class":72},[51,62781,62782],{"class":175},"#f5f5f5",[51,62784,179],{"class":72},[51,62786,62787,62789,62791,62793,62795],{"class":53,"line":3671},[51,62788,56098],{"class":175},[51,62790,52401],{"class":72},[51,62792,1543],{"class":175},[51,62794,52456],{"class":64},[51,62796,179],{"class":72},[51,62798,62799,62802,62804,62806],{"class":53,"line":3679},[51,62800,62801],{"class":175},"      flex",[51,62803,52401],{"class":72},[51,62805,791],{"class":175},[51,62807,179],{"class":72},[51,62809,62810,62812,62814,62816,62818],{"class":53,"line":3684},[51,62811,55659],{"class":175},[51,62813,52401],{"class":72},[51,62815,443],{"class":175},[51,62817,52456],{"class":64},[51,62819,179],{"class":72},[51,62821,62822,62825,62827,62829,62832,62834],{"class":53,"line":3690},[51,62823,62824],{"class":175},"      transition",[51,62826,52401],{"class":72},[51,62828,29085],{"class":175},[51,62830,62831],{"class":175}," 0.5",[51,62833,1941],{"class":64},[51,62835,179],{"class":72},[51,62837,62838,62840,62842,62844,62846],{"class":53,"line":3696},[51,62839,55749],{"class":175},[51,62841,52401],{"class":72},[51,62843,2195],{"class":175},[51,62845,52456],{"class":64},[51,62847,179],{"class":72},[51,62849,62850],{"class":53,"line":3701},[51,62851,3267],{"class":72},[51,62853,62854],{"class":53,"line":8910},[51,62855,3480],{"emptyLinePlaceholder":1192},[51,62857,62858,62860,62862,62865],{"class":53,"line":8934},[51,62859,62568],{"class":68},[51,62861,62737],{"class":52264},[51,62863,62864],{"class":68},":focus",[51,62866,16534],{"class":72},[51,62868,62869,62871,62873,62876],{"class":53,"line":8939},[51,62870,62755],{"class":175},[51,62872,52401],{"class":72},[51,62874,62875],{"class":175},"#e4e4e4",[51,62877,179],{"class":72},[51,62879,62880,62882,62884,62886],{"class":53,"line":8945},[51,62881,62685],{"class":175},[51,62883,52401],{"class":72},[51,62885,61806],{"class":175},[51,62887,179],{"class":72},[51,62889,62890,62892,62894,62896,62898],{"class":53,"line":8972},[51,62891,55749],{"class":175},[51,62893,52401],{"class":72},[51,62895,1902],{"class":175},[51,62897,52456],{"class":64},[51,62899,179],{"class":72},[51,62901,62902],{"class":53,"line":8977},[51,62903,3267],{"class":72},[51,62905,62906],{"class":53,"line":8983},[51,62907,3480],{"emptyLinePlaceholder":1192},[51,62909,62910,62912,62914],{"class":53,"line":8995},[51,62911,62568],{"class":68},[51,62913,58431],{"class":52264},[51,62915,16534],{"class":72},[51,62917,62918,62920,62922,62925],{"class":53,"line":9007},[51,62919,62685],{"class":175},[51,62921,52401],{"class":72},[51,62923,62924],{"class":175},"#00aeec",[51,62926,179],{"class":72},[51,62928,62929,62931,62933,62935],{"class":53,"line":9019},[51,62930,58380],{"class":175},[51,62932,52401],{"class":72},[51,62934,61806],{"class":175},[51,62936,179],{"class":72},[51,62938,62939,62942,62944,62946],{"class":53,"line":10678},[51,62940,62941],{"class":175},"      border",[51,62943,52401],{"class":72},[51,62945,55701],{"class":175},[51,62947,179],{"class":72},[51,62949,62950,62952,62954,62956,62958],{"class":53,"line":10703},[51,62951,56098],{"class":175},[51,62953,52401],{"class":72},[51,62955,1543],{"class":175},[51,62957,52456],{"class":64},[51,62959,179],{"class":72},[51,62961,62962,62965,62967,62969,62971],{"class":53,"line":10726},[51,62963,62964],{"class":175},"      margin-left",[51,62966,52401],{"class":72},[51,62968,443],{"class":175},[51,62970,52456],{"class":64},[51,62972,179],{"class":72},[51,62974,62975,62977,62979,62981,62983],{"class":53,"line":10750},[51,62976,55735],{"class":175},[51,62978,52401],{"class":72},[51,62980,1605],{"class":175},[51,62982,52456],{"class":64},[51,62984,179],{"class":72},[51,62986,62987,62990,62992,62995],{"class":53,"line":10755},[51,62988,62989],{"class":175},"      cursor",[51,62991,52401],{"class":72},[51,62993,62994],{"class":175},"pointer",[51,62996,179],{"class":72},[51,62998,62999],{"class":53,"line":10760},[51,63000,3267],{"class":72},[51,63002,63003],{"class":53,"line":10765},[51,63004,3480],{"emptyLinePlaceholder":1192},[51,63006,63007,63009,63012],{"class":53,"line":10774},[51,63008,62568],{"class":68},[51,63010,63011],{"class":68}," .total",[51,63013,16534],{"class":72},[51,63015,63016,63018,63020,63022,63024],{"class":53,"line":10779},[51,63017,62714],{"class":175},[51,63019,52401],{"class":72},[51,63021,1858],{"class":175},[51,63023,52456],{"class":64},[51,63025,179],{"class":72},[51,63027,63028,63030,63032,63035],{"class":53,"line":10785},[51,63029,58380],{"class":175},[51,63031,52401],{"class":72},[51,63033,63034],{"class":175},"#999",[51,63036,179],{"class":72},[51,63038,63039,63042,63044,63046,63048],{"class":53,"line":10806},[51,63040,63041],{"class":175},"      margin-top",[51,63043,52401],{"class":72},[51,63045,1568],{"class":175},[51,63047,52456],{"class":64},[51,63049,179],{"class":72},[51,63051,63052,63055,63057,63059],{"class":53,"line":10812},[51,63053,63054],{"class":175},"      opacity",[51,63056,52401],{"class":72},[51,63058,176],{"class":175},[51,63060,179],{"class":72},[51,63062,63063,63065,63067,63069,63071,63073],{"class":53,"line":10826},[51,63064,62824],{"class":175},[51,63066,52401],{"class":72},[51,63068,29085],{"class":175},[51,63070,62831],{"class":175},[51,63072,1941],{"class":64},[51,63074,179],{"class":72},[51,63076,63077],{"class":53,"line":10832},[51,63078,3267],{"class":72},[51,63080,63081],{"class":53,"line":10859},[51,63082,3480],{"emptyLinePlaceholder":1192},[51,63084,63085,63088],{"class":53,"line":10868},[51,63086,63087],{"class":68},"    .list",[51,63089,16534],{"class":72},[51,63091,63092,63094,63096,63098,63100],{"class":53,"line":10874},[51,63093,62575],{"class":175},[51,63095,52401],{"class":72},[51,63097,5064],{"class":175},[51,63099,52456],{"class":64},[51,63101,179],{"class":72},[51,63103,63104,63106,63108,63110,63112],{"class":53,"line":10882},[51,63105,62588],{"class":175},[51,63107,52401],{"class":72},[51,63109,62593],{"class":175},[51,63111,52456],{"class":64},[51,63113,179],{"class":72},[51,63115,63116,63118,63120,63122],{"class":53,"line":10887},[51,63117,55973],{"class":175},[51,63119,52401],{"class":72},[51,63121,52441],{"class":175},[51,63123,179],{"class":72},[51,63125,63126],{"class":53,"line":17566},[51,63127,3267],{"class":72},[51,63129,63130],{"class":53,"line":17572},[51,63131,3480],{"emptyLinePlaceholder":1192},[51,63133,63134,63136,63139],{"class":53,"line":17595},[51,63135,63087],{"class":68},[51,63137,63138],{"class":68}," .item",[51,63140,16534],{"class":72},[51,63142,63143,63145,63147,63149,63151],{"class":53,"line":17601},[51,63144,55735],{"class":175},[51,63146,52401],{"class":72},[51,63148,612],{"class":175},[51,63150,1577],{"class":64},[51,63152,179],{"class":72},[51,63154,63155,63157,63159,63161],{"class":53,"line":17624},[51,63156,55973],{"class":175},[51,63158,52401],{"class":72},[51,63160,52441],{"class":175},[51,63162,179],{"class":72},[51,63164,63165],{"class":53,"line":17638},[51,63166,3267],{"class":72},[51,63168,63169],{"class":53,"line":17658},[51,63170,3480],{"emptyLinePlaceholder":1192},[51,63172,63173,63175,63177,63180],{"class":53,"line":17664},[51,63174,63087],{"class":68},[51,63176,63138],{"class":68},[51,63178,63179],{"class":68}," .info",[51,63181,16534],{"class":72},[51,63183,63184,63186,63188,63190],{"class":53,"line":17675},[51,63185,62801],{"class":175},[51,63187,52401],{"class":72},[51,63189,791],{"class":175},[51,63191,179],{"class":72},[51,63193,63194,63197,63199,63201,63203,63206,63209],{"class":53,"line":17698},[51,63195,63196],{"class":175},"      border-bottom",[51,63198,52401],{"class":72},[51,63200,791],{"class":175},[51,63202,52456],{"class":64},[51,63204,63205],{"class":175}," dashed",[51,63207,63208],{"class":175}," #e4e4e4",[51,63210,179],{"class":72},[51,63212,63213,63216,63218,63220,63222],{"class":53,"line":17720},[51,63214,63215],{"class":175},"      padding-bottom",[51,63217,52401],{"class":72},[51,63219,443],{"class":175},[51,63221,52456],{"class":64},[51,63223,179],{"class":72},[51,63225,63226],{"class":53,"line":17725},[51,63227,3267],{"class":72},[51,63229,63230],{"class":53,"line":17731},[51,63231,3480],{"emptyLinePlaceholder":1192},[51,63233,63234,63236,63238,63240],{"class":53,"line":17745},[51,63235,63087],{"class":68},[51,63237,63138],{"class":68},[51,63239,7787],{"class":52264},[51,63241,16534],{"class":72},[51,63243,63244,63246,63248,63250],{"class":53,"line":17758},[51,63245,55670],{"class":175},[51,63247,52401],{"class":72},[51,63249,176],{"class":175},[51,63251,179],{"class":72},[51,63253,63254],{"class":53,"line":17763},[51,63255,3267],{"class":72},[51,63257,63258],{"class":53,"line":17777},[51,63259,3480],{"emptyLinePlaceholder":1192},[51,63261,63262,63264,63266,63269],{"class":53,"line":17782},[51,63263,63087],{"class":68},[51,63265,63138],{"class":68},[51,63267,63268],{"class":68}," .name",[51,63270,16534],{"class":72},[51,63272,63273,63275,63277,63280],{"class":53,"line":17788},[51,63274,58380],{"class":175},[51,63276,52401],{"class":72},[51,63278,63279],{"class":175},"#FB7299",[51,63281,179],{"class":72},[51,63283,63284,63286,63288,63290,63292],{"class":53,"line":17793},[51,63285,55886],{"class":175},[51,63287,52401],{"class":72},[51,63289,1795],{"class":175},[51,63291,52456],{"class":64},[51,63293,179],{"class":72},[51,63295,63296,63299,63301,63304],{"class":53,"line":17807},[51,63297,63298],{"class":175},"      font-weight",[51,63300,52401],{"class":72},[51,63302,63303],{"class":175},"bold",[51,63305,179],{"class":72},[51,63307,63308],{"class":53,"line":17812},[51,63309,3267],{"class":72},[51,63311,63312],{"class":53,"line":17817},[51,63313,3480],{"emptyLinePlaceholder":1192},[51,63315,63316,63318,63320,63323],{"class":53,"line":17831},[51,63317,63087],{"class":68},[51,63319,63138],{"class":68},[51,63321,63322],{"class":68}," .text",[51,63324,16534],{"class":72},[51,63326,63327,63329,63331,63334],{"class":53,"line":17843},[51,63328,58380],{"class":175},[51,63330,52401],{"class":72},[51,63332,63333],{"class":175},"#333",[51,63335,179],{"class":72},[51,63337,63338,63340,63342,63344,63346,63348],{"class":53,"line":17848},[51,63339,55659],{"class":175},[51,63341,52401],{"class":72},[51,63343,443],{"class":175},[51,63345,52456],{"class":64},[51,63347,5169],{"class":175},[51,63349,179],{"class":72},[51,63351,63352],{"class":53,"line":17861},[51,63353,3267],{"class":72},[51,63355,63356],{"class":53,"line":17866},[51,63357,3480],{"emptyLinePlaceholder":1192},[51,63359,63360,63362,63364,63367],{"class":53,"line":17871},[51,63361,63087],{"class":68},[51,63363,63138],{"class":68},[51,63365,63366],{"class":68}," .time",[51,63368,16534],{"class":72},[51,63370,63371,63373,63375,63377],{"class":53,"line":17876},[51,63372,58380],{"class":175},[51,63374,52401],{"class":72},[51,63376,63034],{"class":175},[51,63378,179],{"class":72},[51,63380,63381,63383,63385,63387,63389],{"class":53,"line":17889},[51,63382,55886],{"class":175},[51,63384,52401],{"class":72},[51,63386,1744],{"class":175},[51,63388,52456],{"class":64},[51,63390,179],{"class":72},[51,63392,63393],{"class":53,"line":17894},[51,63394,3267],{"class":72},[51,63396,63397,63399,63401],{"class":53,"line":33597},[51,63398,53381],{"class":72},[51,63400,1179],{"class":52264},[51,63402,52271],{"class":72},[51,63404,63405,63407,63409],{"class":53,"line":33603},[51,63406,52749],{"class":72},[51,63408,52298],{"class":52264},[51,63410,52271],{"class":72},[51,63412,63413],{"class":53,"line":33609},[51,63414,3480],{"emptyLinePlaceholder":1192},[51,63416,63417,63419,63421],{"class":53,"line":33615},[51,63418,2154],{"class":72},[51,63420,52764],{"class":52264},[51,63422,52271],{"class":72},[51,63424,63425,63427,63429,63431,63433,63436],{"class":53,"line":33621},[51,63426,53108],{"class":72},[51,63428,52575],{"class":52264},[51,63430,54450],{"class":68},[51,63432,108],{"class":72},[51,63434,63435],{"class":282},"\"wrapper\"",[51,63437,52271],{"class":72},[51,63439,63440,63442,63444,63446,63448,63451,63453,63455],{"class":53,"line":33632},[51,63441,52305],{"class":72},[51,63443,1689],{"class":52264},[51,63445,54450],{"class":68},[51,63447,108],{"class":72},[51,63449,63450],{"class":282},"\"avatar\"",[51,63452,56278],{"class":72},[51,63454,1689],{"class":52264},[51,63456,52271],{"class":72},[51,63458,63459,63461,63463,63465,63467,63470,63472,63474,63477,63479,63481,63483,63486,63488,63491,63493,63495],{"class":53,"line":33638},[51,63460,52305],{"class":72},[51,63462,55252],{"class":52264},[51,63464,15921],{"class":68},[51,63466,108],{"class":72},[51,63468,63469],{"class":282},"\"tx\"",[51,63471,61984],{"class":68},[51,63473,108],{"class":72},[51,63475,63476],{"class":282},"\"发一条友善的评论\"",[51,63478,55275],{"class":68},[51,63480,108],{"class":72},[51,63482,4778],{"class":282},[51,63484,63485],{"class":68}," maxlength",[51,63487,108],{"class":72},[51,63489,63490],{"class":282},"\"200\"",[51,63492,56278],{"class":72},[51,63494,55252],{"class":52264},[51,63496,52271],{"class":72},[51,63498,63499,63501,63503,63506,63508],{"class":53,"line":33658},[51,63500,52305],{"class":72},[51,63502,54851],{"class":52264},[51,63504,63505],{"class":72},">发布\u003C\u002F",[51,63507,54851],{"class":52264},[51,63509,52271],{"class":72},[51,63511,63512,63514,63516],{"class":53,"line":33664},[51,63513,53381],{"class":72},[51,63515,52575],{"class":52264},[51,63517,52271],{"class":72},[51,63519,63520,63522,63524,63526,63528,63530],{"class":53,"line":33675},[51,63521,53108],{"class":72},[51,63523,52575],{"class":52264},[51,63525,54450],{"class":68},[51,63527,108],{"class":72},[51,63529,63435],{"class":282},[51,63531,52271],{"class":72},[51,63533,63534,63536,63538,63540,63542,63545,63548,63550],{"class":53,"line":33681},[51,63535,52305],{"class":72},[51,63537,51],{"class":52264},[51,63539,54450],{"class":68},[51,63541,108],{"class":72},[51,63543,63544],{"class":282},"\"total\"",[51,63546,63547],{"class":72},">0\u002F200字\u003C\u002F",[51,63549,51],{"class":52264},[51,63551,52271],{"class":72},[51,63553,63554,63556,63558],{"class":53,"line":33687},[51,63555,53381],{"class":72},[51,63557,52575],{"class":52264},[51,63559,52271],{"class":72},[51,63561,63562,63564,63566,63568,63570,63573],{"class":53,"line":33693},[51,63563,53108],{"class":72},[51,63565,52575],{"class":52264},[51,63567,54450],{"class":68},[51,63569,108],{"class":72},[51,63571,63572],{"class":282},"\"list\"",[51,63574,52271],{"class":72},[51,63576,63577,63579,63581,63583,63585,63588,63591,63593,63596],{"class":53,"line":33699},[51,63578,52305],{"class":72},[51,63580,52575],{"class":52264},[51,63582,54450],{"class":68},[51,63584,108],{"class":72},[51,63586,63587],{"class":282},"\"item\"",[51,63589,63590],{"class":68}," style",[51,63592,108],{"class":72},[51,63594,63595],{"class":282},"\"display: none;\"",[51,63597,52271],{"class":72},[51,63599,63600,63602,63604,63606,63608,63610,63612,63614],{"class":53,"line":33705},[51,63601,56198],{"class":72},[51,63603,1689],{"class":52264},[51,63605,54450],{"class":68},[51,63607,108],{"class":72},[51,63609,63450],{"class":282},[51,63611,56278],{"class":72},[51,63613,1689],{"class":52264},[51,63615,52271],{"class":72},[51,63617,63618,63620,63622,63624,63626,63629],{"class":53,"line":33711},[51,63619,56198],{"class":72},[51,63621,52575],{"class":52264},[51,63623,54450],{"class":68},[51,63625,108],{"class":72},[51,63627,63628],{"class":282},"\"info\"",[51,63630,52271],{"class":72},[51,63632,63633,63635,63637,63639,63641,63644,63647,63649],{"class":53,"line":33717},[51,63634,56266],{"class":72},[51,63636,40],{"class":52264},[51,63638,54450],{"class":68},[51,63640,108],{"class":72},[51,63642,63643],{"class":282},"\"name\"",[51,63645,63646],{"class":72},">清风徐来\u003C\u002F",[51,63648,40],{"class":52264},[51,63650,52271],{"class":72},[51,63652,63653,63655,63657,63659,63661,63664,63667,63669],{"class":53,"line":33737},[51,63654,56266],{"class":72},[51,63656,40],{"class":52264},[51,63658,54450],{"class":68},[51,63660,108],{"class":72},[51,63662,63663],{"class":282},"\"text\"",[51,63665,63666],{"class":72},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[51,63668,40],{"class":52264},[51,63670,52271],{"class":72},[51,63672,63673,63675,63677,63679,63681,63684,63687,63689],{"class":53,"line":33743},[51,63674,56266],{"class":72},[51,63676,40],{"class":52264},[51,63678,54450],{"class":68},[51,63680,108],{"class":72},[51,63682,63683],{"class":282},"\"time\"",[51,63685,63686],{"class":72},">2022-10-10 20:29:21\u003C\u002F",[51,63688,40],{"class":52264},[51,63690,52271],{"class":72},[51,63692,63693,63695,63697],{"class":53,"line":33759},[51,63694,56371],{"class":72},[51,63696,52575],{"class":52264},[51,63698,52271],{"class":72},[51,63700,63701,63703,63705],{"class":53,"line":33765},[51,63702,52740],{"class":72},[51,63704,52575],{"class":52264},[51,63706,52271],{"class":72},[51,63708,63709,63711,63713],{"class":53,"line":33779},[51,63710,53381],{"class":72},[51,63712,52575],{"class":52264},[51,63714,52271],{"class":72},[51,63716,63717,63719,63721],{"class":53,"line":33785},[51,63718,53108],{"class":72},[51,63720,52777],{"class":52264},[51,63722,52271],{"class":72},[51,63724,63725,63727,63730,63732,63734,63736,63738,63741],{"class":53,"line":33800},[51,63726,12183],{"class":64},[51,63728,63729],{"class":175}," tx",[51,63731,14526],{"class":64},[51,63733,55360],{"class":72},[51,63735,55363],{"class":68},[51,63737,73],{"class":72},[51,63739,63740],{"class":282},"'#tx'",[51,63742,90],{"class":72},[51,63744,63745,63747,63750,63752,63754,63756,63758,63761],{"class":53,"line":33806},[51,63746,12183],{"class":64},[51,63748,63749],{"class":175}," total",[51,63751,14526],{"class":64},[51,63753,55360],{"class":72},[51,63755,55363],{"class":68},[51,63757,73],{"class":72},[51,63759,63760],{"class":282},"'.total'",[51,63762,90],{"class":72},[51,63764,63765],{"class":53,"line":33815},[51,63766,63767],{"class":57},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[51,63769,63770,63773,63775,63777,63779,63781,63783],{"class":53,"line":33821},[51,63771,63772],{"class":72},"    tx.",[51,63774,58777],{"class":68},[51,63776,73],{"class":72},[51,63778,62291],{"class":282},[51,63780,13397],{"class":72},[51,63782,55413],{"class":64},[51,63784,55416],{"class":72},[51,63786,63787,63790,63792],{"class":53,"line":33830},[51,63788,63789],{"class":72},"      total.style.opacity ",[51,63791,108],{"class":64},[51,63793,56663],{"class":175},[51,63795,63796],{"class":53,"line":33836},[51,63797,34425],{"class":72},[51,63799,63800],{"class":53,"line":33842},[51,63801,63802],{"class":57},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[51,63804,63805,63807,63809,63811,63813,63815,63817],{"class":53,"line":33851},[51,63806,63772],{"class":72},[51,63808,58777],{"class":68},[51,63810,73],{"class":72},[51,63812,62352],{"class":282},[51,63814,13397],{"class":72},[51,63816,55413],{"class":64},[51,63818,55416],{"class":72},[51,63820,63821,63823,63825],{"class":53,"line":33857},[51,63822,63789],{"class":72},[51,63824,108],{"class":64},[51,63826,48297],{"class":175},[51,63828,63829],{"class":53,"line":33868},[51,63830,34425],{"class":72},[51,63832,63833],{"class":53,"line":33874},[51,63834,63835],{"class":57},"    \u002F\u002F 3. 检测用户输入\n",[51,63837,63838,63840,63842,63844,63847,63849,63851],{"class":53,"line":33893},[51,63839,63772],{"class":72},[51,63841,58777],{"class":68},[51,63843,73],{"class":72},[51,63845,63846],{"class":282},"'input'",[51,63848,13397],{"class":72},[51,63850,55413],{"class":64},[51,63852,55416],{"class":72},[51,63854,63855],{"class":53,"line":33899},[51,63856,63857],{"class":57},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[51,63859,63860,63863,63865,63868,63871,63873,63876,63878,63880],{"class":53,"line":33910},[51,63861,63862],{"class":72},"      total.innerHTML ",[51,63864,108],{"class":64},[51,63866,63867],{"class":282}," `${",[51,63869,63870],{"class":72},"tx",[51,63872,1804],{"class":282},[51,63874,63875],{"class":72},"value",[51,63877,1804],{"class":282},[51,63879,52932],{"class":175},[51,63881,63882],{"class":282},"}\u002F200字`\n",[51,63884,63885],{"class":53,"line":33916},[51,63886,34425],{"class":72},[51,63888,63889],{"class":53,"line":33936},[51,63890,3480],{"emptyLinePlaceholder":1192},[51,63892,63893],{"class":53,"line":33952},[51,63894,63895],{"class":57},"    \u002F\u002F const str = 'andy'\n",[51,63897,63898],{"class":53,"line":33958},[51,63899,63900],{"class":57},"    \u002F\u002F console.log(str.length)\n",[51,63902,63903,63905,63907],{"class":53,"line":33972},[51,63904,53381],{"class":72},[51,63906,52777],{"class":52264},[51,63908,52271],{"class":72},[51,63910,63911,63913,63915],{"class":53,"line":33978},[51,63912,52749],{"class":72},[51,63914,52764],{"class":52264},[51,63916,52271],{"class":72},[51,63918,63919],{"class":53,"line":33984},[51,63920,3480],{"emptyLinePlaceholder":1192},[51,63922,63923,63925,63927],{"class":53,"line":33995},[51,63924,52749],{"class":72},[51,63926,51599],{"class":52264},[51,63928,52271],{"class":72},[22960,63930,63932],{"id":63931},"_3254-change事件","3.2.5.4 change事件",[40,63934,63935],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[40,63937,63938],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[40,63940,63941],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[29,63943,63945],{"className":51597,"code":63944,"language":51599,"meta":35,"style":35},"\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",[37,63946,63947,63957,63971,63975,63983,63997,64017,64029,64037,64041,64049,64063,64071,64089,64107,64119,64123,64131,64139,64143],{"__ignoreMap":35},[51,63948,63949,63951,63953,63955],{"class":53,"line":54},[51,63950,52261],{"class":72},[51,63952,52265],{"class":52264},[51,63954,52268],{"class":68},[51,63956,52271],{"class":72},[51,63958,63959,63961,63963,63965,63967,63969],{"class":53,"line":61},[51,63960,2154],{"class":72},[51,63962,51599],{"class":52264},[51,63964,52280],{"class":68},[51,63966,108],{"class":72},[51,63968,52285],{"class":282},[51,63970,52271],{"class":72},[51,63972,63973],{"class":53,"line":93},[51,63974,3480],{"emptyLinePlaceholder":1192},[51,63976,63977,63979,63981],{"class":53,"line":99},[51,63978,2154],{"class":72},[51,63980,52298],{"class":52264},[51,63982,52271],{"class":72},[51,63984,63985,63987,63989,63991,63993,63995],{"class":53,"line":120},[51,63986,53108],{"class":72},[51,63988,52308],{"class":52264},[51,63990,52311],{"class":68},[51,63992,108],{"class":72},[51,63994,52316],{"class":282},[51,63996,52271],{"class":72},[51,63998,63999,64001,64003,64005,64007,64009,64011,64013,64015],{"class":53,"line":129},[51,64000,53108],{"class":72},[51,64002,52308],{"class":52264},[51,64004,15882],{"class":68},[51,64006,108],{"class":72},[51,64008,52355],{"class":282},[51,64010,52335],{"class":68},[51,64012,108],{"class":72},[51,64014,52362],{"class":282},[51,64016,52271],{"class":72},[51,64018,64019,64021,64023,64025,64027],{"class":53,"line":206},[51,64020,53108],{"class":72},[51,64022,52371],{"class":52264},[51,64024,52374],{"class":72},[51,64026,52371],{"class":52264},[51,64028,52271],{"class":72},[51,64030,64031,64033,64035],{"class":53,"line":212},[51,64032,52749],{"class":72},[51,64034,52298],{"class":52264},[51,64036,52271],{"class":72},[51,64038,64039],{"class":53,"line":227},[51,64040,3480],{"emptyLinePlaceholder":1192},[51,64042,64043,64045,64047],{"class":53,"line":370},[51,64044,2154],{"class":72},[51,64046,52764],{"class":52264},[51,64048,52271],{"class":72},[51,64050,64051,64053,64055,64057,64059,64061],{"class":53,"line":387},[51,64052,53108],{"class":72},[51,64054,54785],{"class":52264},[51,64056,54788],{"class":68},[51,64058,108],{"class":72},[51,64060,63663],{"class":282},[51,64062,52271],{"class":72},[51,64064,64065,64067,64069],{"class":53,"line":404},[51,64066,53108],{"class":72},[51,64068,52777],{"class":52264},[51,64070,52271],{"class":72},[51,64072,64073,64075,64077,64079,64081,64083,64085,64087],{"class":53,"line":415},[51,64074,12183],{"class":64},[51,64076,61569],{"class":175},[51,64078,14526],{"class":64},[51,64080,55360],{"class":72},[51,64082,55363],{"class":68},[51,64084,73],{"class":72},[51,64086,63846],{"class":282},[51,64088,90],{"class":72},[51,64090,64091,64094,64096,64098,64101,64103,64105],{"class":53,"line":420},[51,64092,64093],{"class":72},"    input.",[51,64095,58777],{"class":68},[51,64097,73],{"class":72},[51,64099,64100],{"class":282},"'change'",[51,64102,13397],{"class":72},[51,64104,55413],{"class":64},[51,64106,55416],{"class":72},[51,64108,64109,64111,64113,64115,64117],{"class":53,"line":429},[51,64110,59208],{"class":72},[51,64112,59211],{"class":68},[51,64114,73],{"class":72},[51,64116,1839],{"class":175},[51,64118,90],{"class":72},[51,64120,64121],{"class":53,"line":434},[51,64122,34425],{"class":72},[51,64124,64125,64127,64129],{"class":53,"line":448},[51,64126,53381],{"class":72},[51,64128,52777],{"class":52264},[51,64130,52271],{"class":72},[51,64132,64133,64135,64137],{"class":53,"line":462},[51,64134,52749],{"class":72},[51,64136,52764],{"class":52264},[51,64138,52271],{"class":72},[51,64140,64141],{"class":53,"line":470},[51,64142,3480],{"emptyLinePlaceholder":1192},[51,64144,64145,64147,64149],{"class":53,"line":2783},[51,64146,52749],{"class":72},[51,64148,51599],{"class":52264},[51,64150,52271],{"class":72},[40,64152,64153],{},"总结：内容发生改变才回去触发",[1233,64155,64157],{"id":64156},"_326-事件对象","3.2.6 事件对象",[22960,64159,64161],{"id":64160},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[40,64163,64164],{},[2564,64165],{"alt":35,"src":64166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[40,64168,64169],{},[2564,64170],{"alt":35,"src":64171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[40,64173,64174],{},"点击一次，就输出了事件对象，它是个对象",[40,64176,64177],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[40,64179,64180],{},[2564,64181],{"alt":35,"src":64182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22960,64184,64186],{"id":64185},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[40,64188,64189],{},[2564,64190],{"alt":35,"src":64191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[40,64193,64194],{},"实现按特殊字符才是实现打印输出效果：",[29,64196,64198],{"className":54031,"code":64197,"language":54033,"meta":35,"style":35},"\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",[37,64199,64200,64208,64213,64227,64235,64240,64245,64250,64255,64260,64265,64270,64275,64280,64284,64288,64296],{"__ignoreMap":35},[51,64201,64202,64204,64206],{"class":53,"line":54},[51,64203,2154],{"class":72},[51,64205,52764],{"class":52264},[51,64207,52271],{"class":72},[51,64209,64210],{"class":53,"line":61},[51,64211,64212],{"class":57},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[51,64214,64215,64217,64219,64221,64223,64225],{"class":53,"line":93},[51,64216,53108],{"class":72},[51,64218,54785],{"class":52264},[51,64220,54788],{"class":68},[51,64222,108],{"class":72},[51,64224,63663],{"class":282},[51,64226,52271],{"class":72},[51,64228,64229,64231,64233],{"class":53,"line":99},[51,64230,53108],{"class":72},[51,64232,52777],{"class":52264},[51,64234,52271],{"class":72},[51,64236,64237],{"class":53,"line":120},[51,64238,64239],{"class":72},"    \u002F\u002F const btn = document.querySelector('button')\n",[51,64241,64242],{"class":53,"line":129},[51,64243,64244],{"class":72},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[51,64246,64247],{"class":53,"line":206},[51,64248,64249],{"class":72},"    \u002F\u002F   console.log(e);\n",[51,64251,64252],{"class":53,"line":212},[51,64253,64254],{"class":72},"    \u002F\u002F })\n",[51,64256,64257],{"class":53,"line":227},[51,64258,64259],{"class":72},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[51,64261,64262],{"class":53,"line":370},[51,64263,64264],{"class":72},"    const input = document.querySelector('input')\n",[51,64266,64267],{"class":53,"line":387},[51,64268,64269],{"class":72},"    input.addEventListener('keyup', function (e) {\n",[51,64271,64272],{"class":53,"line":404},[51,64273,64274],{"class":72},"      if (e.key === 'Enter') {\n",[51,64276,64277],{"class":53,"line":415},[51,64278,64279],{"class":72},"        console.log('我按下了回车键')\n",[51,64281,64282],{"class":53,"line":420},[51,64283,53362],{"class":72},[51,64285,64286],{"class":53,"line":429},[51,64287,34425],{"class":72},[51,64289,64290,64292,64294],{"class":53,"line":434},[51,64291,53381],{"class":72},[51,64293,52777],{"class":52264},[51,64295,52271],{"class":72},[51,64297,64298,64300,64302],{"class":53,"line":448},[51,64299,52749],{"class":72},[51,64301,52764],{"class":52264},[51,64303,52271],{"class":72},[22960,64305,64307],{"id":64306},"_3263-trim方法","3.2.6.3 trim方法",[40,64309,64310],{},[2564,64311],{"alt":35,"src":64312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[40,64314,64315],{},[2564,64316],{"alt":35,"src":64317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[40,64319,64320],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[40,64322,64323],{},"str.trim()",[1233,64325,64327],{"id":64326},"_327-环境对象","3.2.7 环境对象",[40,64329,64330],{},[2564,64331],{"alt":35,"src":64332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[40,64334,64335],{},[2564,64336],{"alt":35,"src":64337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[40,64339,64340],{},[2564,64341],{"alt":35,"src":64342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[40,64344,64345],{},"实际函数调用是window.fn()",[40,64347,64348],{},"普通函数里面this指向的是window",[1000,64350,64351,64354,64357],{},[22,64352,64353],{},"在普通函数下，this指向的是window",[22,64355,64356],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[22,64358,64359],{},"箭头函数没有this",[40,64361,64362],{},"粗略记法就是：谁调用，this就指向谁",[40,64364,64365],{},[2564,64366],{"alt":35,"src":64367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[40,64369,64370],{},[2564,64371],{"alt":35,"src":64372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[40,64374,64375],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[40,64377,64378],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[29,64380,64382],{"className":54031,"code":64381,"language":54033,"meta":35,"style":35},"\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",[37,64383,64384,64392,64404,64412,64417,64422,64427,64432,64436,64444],{"__ignoreMap":35},[51,64385,64386,64388,64390],{"class":53,"line":54},[51,64387,2154],{"class":72},[51,64389,52764],{"class":52264},[51,64391,52271],{"class":72},[51,64393,64394,64396,64398,64400,64402],{"class":53,"line":61},[51,64395,53108],{"class":72},[51,64397,54851],{"class":52264},[51,64399,54857],{"class":72},[51,64401,54851],{"class":52264},[51,64403,52271],{"class":72},[51,64405,64406,64408,64410],{"class":53,"line":93},[51,64407,53108],{"class":72},[51,64409,52777],{"class":52264},[51,64411,52271],{"class":72},[51,64413,64414],{"class":53,"line":99},[51,64415,64416],{"class":72},"    const button = document.querySelector('button')\n",[51,64418,64419],{"class":53,"line":120},[51,64420,64421],{"class":72},"    button.addEventListener('click', function () {\n",[51,64423,64424],{"class":53,"line":129},[51,64425,64426],{"class":72},"      \u002F\u002F console.log(this);\n",[51,64428,64429],{"class":53,"line":206},[51,64430,64431],{"class":72},"      this.style.color = 'pink'\n",[51,64433,64434],{"class":53,"line":212},[51,64435,34425],{"class":72},[51,64437,64438,64440,64442],{"class":53,"line":227},[51,64439,53381],{"class":72},[51,64441,52777],{"class":52264},[51,64443,52271],{"class":72},[51,64445,64446,64448,64450],{"class":53,"line":370},[51,64447,52749],{"class":72},[51,64449,52764],{"class":52264},[51,64451,52271],{"class":72},[1233,64453,64455],{"id":64454},"_328-回调函数","3.2.8 回调函数",[40,64457,64458],{},[2564,64459],{"alt":35,"src":64460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[40,64462,64463],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[40,64465,12294],{},[1000,64467,64468,64471,64474],{},[22,64469,64470],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[22,64472,64473],{},"回调函数本质还是函数，只不过把它当成参数使用",[22,64475,64476],{},"使用匿名函数做为回调函数比较常见",[1233,64478,64480],{"id":64479},"_329-tab栏切换","3.2.9 tab栏切换",[40,64482,64483],{},[2564,64484],{"alt":35,"src":64485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[29,64487,64489],{"className":51597,"code":64488,"language":51599,"meta":35,"style":35},"\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",[37,64490,64491,64501,64515,64519,64527,64541,64561,64581,64594,64602,64608,64618,64628,64632,64636,64643,64656,64669,64681,64697,64701,64705,64712,64724,64736,64748,64758,64768,64772,64776,64785,64797,64808,64820,64824,64828,64836,64846,64856,64866,64870,64874,64884,64898,64910,64914,64918,64930,64941,64958,64968,64972,64976,64991,65002,65012,65016,65020,65027,65042,65046,65050,65058,65068,65072,65076,65085,65095,65099,65107,65115,65119,65127,65142,65157,65170,65178,65212,65239,65266,65293,65320,65328,65336,65351,65388,65423,65458,65493,65528,65536,65544,65552,65557,65562,65582,65587,65616,65621,65626,65644,65649,65654,65659,65681,65686,65702,65706,65711,65716,65737,65742,65771,65775,65780,65784,65792,65800,65804],{"__ignoreMap":35},[51,64492,64493,64495,64497,64499],{"class":53,"line":54},[51,64494,52261],{"class":72},[51,64496,52265],{"class":52264},[51,64498,52268],{"class":68},[51,64500,52271],{"class":72},[51,64502,64503,64505,64507,64509,64511,64513],{"class":53,"line":61},[51,64504,2154],{"class":72},[51,64506,51599],{"class":52264},[51,64508,52280],{"class":68},[51,64510,108],{"class":72},[51,64512,52285],{"class":282},[51,64514,52271],{"class":72},[51,64516,64517],{"class":53,"line":93},[51,64518,3480],{"emptyLinePlaceholder":1192},[51,64520,64521,64523,64525],{"class":53,"line":99},[51,64522,2154],{"class":72},[51,64524,52298],{"class":52264},[51,64526,52271],{"class":72},[51,64528,64529,64531,64533,64535,64537,64539],{"class":53,"line":120},[51,64530,53108],{"class":72},[51,64532,52308],{"class":52264},[51,64534,52311],{"class":68},[51,64536,108],{"class":72},[51,64538,52316],{"class":282},[51,64540,60091],{"class":72},[51,64542,64543,64545,64547,64549,64551,64553,64555,64557,64559],{"class":53,"line":129},[51,64544,53108],{"class":72},[51,64546,52308],{"class":52264},[51,64548,52327],{"class":68},[51,64550,108],{"class":72},[51,64552,52332],{"class":282},[51,64554,52335],{"class":68},[51,64556,108],{"class":72},[51,64558,52340],{"class":282},[51,64560,60091],{"class":72},[51,64562,64563,64565,64567,64569,64571,64573,64575,64577,64579],{"class":53,"line":206},[51,64564,53108],{"class":72},[51,64566,52308],{"class":52264},[51,64568,15882],{"class":68},[51,64570,108],{"class":72},[51,64572,52355],{"class":282},[51,64574,52335],{"class":68},[51,64576,108],{"class":72},[51,64578,52362],{"class":282},[51,64580,60091],{"class":72},[51,64582,64583,64585,64587,64590,64592],{"class":53,"line":212},[51,64584,53108],{"class":72},[51,64586,52371],{"class":52264},[51,64588,64589],{"class":72},">tab栏切换\u003C\u002F",[51,64591,52371],{"class":52264},[51,64593,52271],{"class":72},[51,64595,64596,64598,64600],{"class":53,"line":227},[51,64597,53108],{"class":72},[51,64599,1179],{"class":52264},[51,64601,52271],{"class":72},[51,64603,64604,64606],{"class":53,"line":370},[51,64605,7365],{"class":52264},[51,64607,16534],{"class":72},[51,64609,64610,64612,64614,64616],{"class":53,"line":387},[51,64611,55670],{"class":175},[51,64613,52401],{"class":72},[51,64615,176],{"class":175},[51,64617,179],{"class":72},[51,64619,64620,64622,64624,64626],{"class":53,"line":404},[51,64621,55659],{"class":175},[51,64623,52401],{"class":72},[51,64625,176],{"class":175},[51,64627,179],{"class":72},[51,64629,64630],{"class":53,"line":415},[51,64631,3267],{"class":72},[51,64633,64634],{"class":53,"line":420},[51,64635,3480],{"emptyLinePlaceholder":1192},[51,64637,64638,64641],{"class":53,"line":429},[51,64639,64640],{"class":68},"    .tab",[51,64642,16534],{"class":72},[51,64644,64645,64647,64649,64652,64654],{"class":53,"line":434},[51,64646,55735],{"class":175},[51,64648,52401],{"class":72},[51,64650,64651],{"class":175},"590",[51,64653,52456],{"class":64},[51,64655,179],{"class":72},[51,64657,64658,64660,64662,64665,64667],{"class":53,"line":448},[51,64659,55749],{"class":175},[51,64661,52401],{"class":72},[51,64663,64664],{"class":175},"340",[51,64666,52456],{"class":64},[51,64668,179],{"class":72},[51,64670,64671,64673,64675,64677,64679],{"class":53,"line":462},[51,64672,55670],{"class":175},[51,64674,52401],{"class":72},[51,64676,457],{"class":175},[51,64678,52456],{"class":64},[51,64680,179],{"class":72},[51,64682,64683,64685,64687,64689,64691,64693,64695],{"class":53,"line":470},[51,64684,62941],{"class":175},[51,64686,52401],{"class":72},[51,64688,791],{"class":175},[51,64690,52456],{"class":64},[51,64692,52485],{"class":175},[51,64694,63208],{"class":175},[51,64696,179],{"class":72},[51,64698,64699],{"class":53,"line":2783},[51,64700,3267],{"class":72},[51,64702,64703],{"class":53,"line":2788},[51,64704,3480],{"emptyLinePlaceholder":1192},[51,64706,64707,64710],{"class":53,"line":2817},[51,64708,64709],{"class":68},"    .tab-nav",[51,64711,16534],{"class":72},[51,64713,64714,64716,64718,64720,64722],{"class":53,"line":2822},[51,64715,55735],{"class":175},[51,64717,52401],{"class":72},[51,64719,612],{"class":175},[51,64721,1577],{"class":64},[51,64723,179],{"class":72},[51,64725,64726,64728,64730,64732,64734],{"class":53,"line":2839},[51,64727,55749],{"class":175},[51,64729,52401],{"class":72},[51,64731,2151],{"class":175},[51,64733,52456],{"class":64},[51,64735,179],{"class":72},[51,64737,64738,64740,64742,64744,64746],{"class":53,"line":2844},[51,64739,58323],{"class":175},[51,64741,52401],{"class":72},[51,64743,2151],{"class":175},[51,64745,52456],{"class":64},[51,64747,179],{"class":72},[51,64749,64750,64752,64754,64756],{"class":53,"line":2849},[51,64751,55973],{"class":175},[51,64753,52401],{"class":72},[51,64755,52441],{"class":175},[51,64757,179],{"class":72},[51,64759,64760,64762,64764,64766],{"class":53,"line":2854},[51,64761,55984],{"class":175},[51,64763,52401],{"class":72},[51,64765,52632],{"class":175},[51,64767,179],{"class":72},[51,64769,64770],{"class":53,"line":2868},[51,64771,3267],{"class":72},[51,64773,64774],{"class":53,"line":2873},[51,64775,3480],{"emptyLinePlaceholder":1192},[51,64777,64778,64780,64783],{"class":53,"line":3657},[51,64779,64709],{"class":68},[51,64781,64782],{"class":52264}," h3",[51,64784,16534],{"class":72},[51,64786,64787,64789,64791,64793,64795],{"class":53,"line":3671},[51,64788,55886],{"class":175},[51,64790,52401],{"class":72},[51,64792,2045],{"class":175},[51,64794,52456],{"class":64},[51,64796,179],{"class":72},[51,64798,64799,64801,64803,64806],{"class":53,"line":3679},[51,64800,63298],{"class":175},[51,64802,52401],{"class":72},[51,64804,64805],{"class":175},"normal",[51,64807,179],{"class":72},[51,64809,64810,64812,64814,64816,64818],{"class":53,"line":3684},[51,64811,62964],{"class":175},[51,64813,52401],{"class":72},[51,64815,457],{"class":175},[51,64817,52456],{"class":64},[51,64819,179],{"class":72},[51,64821,64822],{"class":53,"line":3690},[51,64823,3267],{"class":72},[51,64825,64826],{"class":53,"line":3696},[51,64827,3480],{"emptyLinePlaceholder":1192},[51,64829,64830,64832,64834],{"class":53,"line":3701},[51,64831,64709],{"class":68},[51,64833,62256],{"class":52264},[51,64835,16534],{"class":72},[51,64837,64838,64840,64842,64844],{"class":53,"line":8910},[51,64839,55696],{"class":175},[51,64841,52401],{"class":72},[51,64843,55701],{"class":175},[51,64845,179],{"class":72},[51,64847,64848,64850,64852,64854],{"class":53,"line":8934},[51,64849,55973],{"class":175},[51,64851,52401],{"class":72},[51,64853,52441],{"class":175},[51,64855,179],{"class":72},[51,64857,64858,64860,64862,64864],{"class":53,"line":8939},[51,64859,55984],{"class":175},[51,64861,52401],{"class":72},[51,64863,52544],{"class":175},[51,64865,179],{"class":72},[51,64867,64868],{"class":53,"line":8945},[51,64869,3267],{"class":72},[51,64871,64872],{"class":53,"line":8972},[51,64873,3480],{"emptyLinePlaceholder":1192},[51,64875,64876,64878,64880,64882],{"class":53,"line":8977},[51,64877,64709],{"class":68},[51,64879,62256],{"class":52264},[51,64881,56039],{"class":52264},[51,64883,16534],{"class":72},[51,64885,64886,64888,64890,64892,64894,64896],{"class":53,"line":8983},[51,64887,55670],{"class":175},[51,64889,52401],{"class":72},[51,64891,176],{"class":175},[51,64893,9912],{"class":175},[51,64895,52456],{"class":64},[51,64897,179],{"class":72},[51,64899,64900,64902,64904,64906,64908],{"class":53,"line":8995},[51,64901,55886],{"class":175},[51,64903,52401],{"class":72},[51,64905,1795],{"class":175},[51,64907,52456],{"class":64},[51,64909,179],{"class":72},[51,64911,64912],{"class":53,"line":9007},[51,64913,3267],{"class":72},[51,64915,64916],{"class":53,"line":9019},[51,64917,3480],{"emptyLinePlaceholder":1192},[51,64919,64920,64922,64924,64926,64928],{"class":53,"line":10678},[51,64921,64709],{"class":68},[51,64923,62256],{"class":52264},[51,64925,56039],{"class":52264},[51,64927,170],{"class":52264},[51,64929,16534],{"class":72},[51,64931,64932,64935,64937,64939],{"class":53,"line":10703},[51,64933,64934],{"class":175},"      text-decoration",[51,64936,52401],{"class":72},[51,64938,55701],{"class":175},[51,64940,179],{"class":72},[51,64942,64943,64945,64947,64949,64951,64953,64956],{"class":53,"line":10726},[51,64944,63196],{"class":175},[51,64946,52401],{"class":72},[51,64948,1334],{"class":175},[51,64950,52456],{"class":64},[51,64952,52485],{"class":175},[51,64954,64955],{"class":175}," transparent",[51,64957,179],{"class":72},[51,64959,64960,64962,64964,64966],{"class":53,"line":10750},[51,64961,58380],{"class":175},[51,64963,52401],{"class":72},[51,64965,63333],{"class":175},[51,64967,179],{"class":72},[51,64969,64970],{"class":53,"line":10755},[51,64971,3267],{"class":72},[51,64973,64974],{"class":53,"line":10760},[51,64975,3480],{"emptyLinePlaceholder":1192},[51,64977,64978,64980,64982,64984,64986,64989],{"class":53,"line":10765},[51,64979,64709],{"class":68},[51,64981,62256],{"class":52264},[51,64983,56039],{"class":52264},[51,64985,170],{"class":52264},[51,64987,64988],{"class":68},".active",[51,64990,16534],{"class":72},[51,64992,64993,64995,64997,65000],{"class":53,"line":10774},[51,64994,62755],{"class":175},[51,64996,52401],{"class":72},[51,64998,64999],{"class":175},"#e1251b",[51,65001,179],{"class":72},[51,65003,65004,65006,65008,65010],{"class":53,"line":10779},[51,65005,58380],{"class":175},[51,65007,52401],{"class":72},[51,65009,64999],{"class":175},[51,65011,179],{"class":72},[51,65013,65014],{"class":53,"line":10785},[51,65015,3267],{"class":72},[51,65017,65018],{"class":53,"line":10806},[51,65019,3480],{"emptyLinePlaceholder":1192},[51,65021,65022,65025],{"class":53,"line":10812},[51,65023,65024],{"class":68},"    .tab-content",[51,65026,16534],{"class":72},[51,65028,65029,65031,65033,65035,65038,65040],{"class":53,"line":10826},[51,65030,55659],{"class":175},[51,65032,52401],{"class":72},[51,65034,176],{"class":175},[51,65036,65037],{"class":175}," 16",[51,65039,52456],{"class":64},[51,65041,179],{"class":72},[51,65043,65044],{"class":53,"line":10832},[51,65045,3267],{"class":72},[51,65047,65048],{"class":53,"line":10859},[51,65049,3480],{"emptyLinePlaceholder":1192},[51,65051,65052,65054,65056],{"class":53,"line":10868},[51,65053,65024],{"class":68},[51,65055,63138],{"class":68},[51,65057,16534],{"class":72},[51,65059,65060,65062,65064,65066],{"class":53,"line":10874},[51,65061,55973],{"class":175},[51,65063,52401],{"class":72},[51,65065,55701],{"class":175},[51,65067,179],{"class":72},[51,65069,65070],{"class":53,"line":10882},[51,65071,3267],{"class":72},[51,65073,65074],{"class":53,"line":10887},[51,65075,3480],{"emptyLinePlaceholder":1192},[51,65077,65078,65080,65083],{"class":53,"line":17566},[51,65079,65024],{"class":68},[51,65081,65082],{"class":68}," .item.active",[51,65084,16534],{"class":72},[51,65086,65087,65089,65091,65093],{"class":53,"line":17572},[51,65088,55973],{"class":175},[51,65090,52401],{"class":72},[51,65092,61833],{"class":175},[51,65094,179],{"class":72},[51,65096,65097],{"class":53,"line":17595},[51,65098,3267],{"class":72},[51,65100,65101,65103,65105],{"class":53,"line":17601},[51,65102,53381],{"class":72},[51,65104,1179],{"class":52264},[51,65106,52271],{"class":72},[51,65108,65109,65111,65113],{"class":53,"line":17624},[51,65110,52749],{"class":72},[51,65112,52298],{"class":52264},[51,65114,52271],{"class":72},[51,65116,65117],{"class":53,"line":17638},[51,65118,3480],{"emptyLinePlaceholder":1192},[51,65120,65121,65123,65125],{"class":53,"line":17658},[51,65122,2154],{"class":72},[51,65124,52764],{"class":52264},[51,65126,52271],{"class":72},[51,65128,65129,65131,65133,65135,65137,65140],{"class":53,"line":17664},[51,65130,53108],{"class":72},[51,65132,52575],{"class":52264},[51,65134,54450],{"class":68},[51,65136,108],{"class":72},[51,65138,65139],{"class":282},"\"tab\"",[51,65141,52271],{"class":72},[51,65143,65144,65146,65148,65150,65152,65155],{"class":53,"line":17675},[51,65145,52305],{"class":72},[51,65147,52575],{"class":52264},[51,65149,54450],{"class":68},[51,65151,108],{"class":72},[51,65153,65154],{"class":282},"\"tab-nav\"",[51,65156,52271],{"class":72},[51,65158,65159,65161,65163,65166,65168],{"class":53,"line":17698},[51,65160,56198],{"class":72},[51,65162,1233],{"class":52264},[51,65164,65165],{"class":72},">每日特价\u003C\u002F",[51,65167,1233],{"class":52264},[51,65169,52271],{"class":72},[51,65171,65172,65174,65176],{"class":53,"line":17720},[51,65173,56198],{"class":72},[51,65175,1000],{"class":52264},[51,65177,52271],{"class":72},[51,65179,65180,65182,65184,65186,65188,65190,65192,65194,65196,65198,65201,65204,65206,65208,65210],{"class":53,"line":17725},[51,65181,56266],{"class":72},[51,65183,22],{"class":52264},[51,65185,62016],{"class":72},[51,65187,981],{"class":52264},[51,65189,54450],{"class":68},[51,65191,108],{"class":72},[51,65193,60670],{"class":282},[51,65195,62021],{"class":68},[51,65197,108],{"class":72},[51,65199,65200],{"class":282},"\"javascript:;\"",[51,65202,65203],{"class":72},">精选\u003C\u002F",[51,65205,981],{"class":52264},[51,65207,56278],{"class":72},[51,65209,22],{"class":52264},[51,65211,52271],{"class":72},[51,65213,65214,65216,65218,65220,65222,65224,65226,65228,65231,65233,65235,65237],{"class":53,"line":17731},[51,65215,56266],{"class":72},[51,65217,22],{"class":52264},[51,65219,62016],{"class":72},[51,65221,981],{"class":52264},[51,65223,62021],{"class":68},[51,65225,108],{"class":72},[51,65227,65200],{"class":282},[51,65229,65230],{"class":72},">美食\u003C\u002F",[51,65232,981],{"class":52264},[51,65234,56278],{"class":72},[51,65236,22],{"class":52264},[51,65238,52271],{"class":72},[51,65240,65241,65243,65245,65247,65249,65251,65253,65255,65258,65260,65262,65264],{"class":53,"line":17745},[51,65242,56266],{"class":72},[51,65244,22],{"class":52264},[51,65246,62016],{"class":72},[51,65248,981],{"class":52264},[51,65250,62021],{"class":68},[51,65252,108],{"class":72},[51,65254,65200],{"class":282},[51,65256,65257],{"class":72},">百货\u003C\u002F",[51,65259,981],{"class":52264},[51,65261,56278],{"class":72},[51,65263,22],{"class":52264},[51,65265,52271],{"class":72},[51,65267,65268,65270,65272,65274,65276,65278,65280,65282,65285,65287,65289,65291],{"class":53,"line":17758},[51,65269,56266],{"class":72},[51,65271,22],{"class":52264},[51,65273,62016],{"class":72},[51,65275,981],{"class":52264},[51,65277,62021],{"class":68},[51,65279,108],{"class":72},[51,65281,65200],{"class":282},[51,65283,65284],{"class":72},">个护\u003C\u002F",[51,65286,981],{"class":52264},[51,65288,56278],{"class":72},[51,65290,22],{"class":52264},[51,65292,52271],{"class":72},[51,65294,65295,65297,65299,65301,65303,65305,65307,65309,65312,65314,65316,65318],{"class":53,"line":17763},[51,65296,56266],{"class":72},[51,65298,22],{"class":52264},[51,65300,62016],{"class":72},[51,65302,981],{"class":52264},[51,65304,62021],{"class":68},[51,65306,108],{"class":72},[51,65308,65200],{"class":282},[51,65310,65311],{"class":72},">预告\u003C\u002F",[51,65313,981],{"class":52264},[51,65315,56278],{"class":72},[51,65317,22],{"class":52264},[51,65319,52271],{"class":72},[51,65321,65322,65324,65326],{"class":53,"line":17777},[51,65323,56371],{"class":72},[51,65325,1000],{"class":52264},[51,65327,52271],{"class":72},[51,65329,65330,65332,65334],{"class":53,"line":17782},[51,65331,52740],{"class":72},[51,65333,52575],{"class":52264},[51,65335,52271],{"class":72},[51,65337,65338,65340,65342,65344,65346,65349],{"class":53,"line":17788},[51,65339,52305],{"class":72},[51,65341,52575],{"class":52264},[51,65343,54450],{"class":68},[51,65345,108],{"class":72},[51,65347,65348],{"class":282},"\"tab-content\"",[51,65350,52271],{"class":72},[51,65352,65353,65355,65357,65359,65361,65364,65366,65368,65370,65372,65375,65377,65379,65381,65384,65386],{"class":53,"line":17793},[51,65354,56198],{"class":72},[51,65356,52575],{"class":52264},[51,65358,54450],{"class":68},[51,65360,108],{"class":72},[51,65362,65363],{"class":282},"\"item active\"",[51,65365,62016],{"class":72},[51,65367,2564],{"class":52264},[51,65369,56203],{"class":68},[51,65371,108],{"class":72},[51,65373,65374],{"class":282},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[51,65376,56211],{"class":68},[51,65378,108],{"class":72},[51,65380,8614],{"class":282},[51,65382,65383],{"class":72}," \u002F>\u003C\u002F",[51,65385,52575],{"class":52264},[51,65387,52271],{"class":72},[51,65389,65390,65392,65394,65396,65398,65400,65402,65404,65406,65408,65411,65413,65415,65417,65419,65421],{"class":53,"line":17807},[51,65391,56198],{"class":72},[51,65393,52575],{"class":52264},[51,65395,54450],{"class":68},[51,65397,108],{"class":72},[51,65399,63587],{"class":282},[51,65401,62016],{"class":72},[51,65403,2564],{"class":52264},[51,65405,56203],{"class":68},[51,65407,108],{"class":72},[51,65409,65410],{"class":282},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[51,65412,56211],{"class":68},[51,65414,108],{"class":72},[51,65416,8614],{"class":282},[51,65418,65383],{"class":72},[51,65420,52575],{"class":52264},[51,65422,52271],{"class":72},[51,65424,65425,65427,65429,65431,65433,65435,65437,65439,65441,65443,65446,65448,65450,65452,65454,65456],{"class":53,"line":17812},[51,65426,56198],{"class":72},[51,65428,52575],{"class":52264},[51,65430,54450],{"class":68},[51,65432,108],{"class":72},[51,65434,63587],{"class":282},[51,65436,62016],{"class":72},[51,65438,2564],{"class":52264},[51,65440,56203],{"class":68},[51,65442,108],{"class":72},[51,65444,65445],{"class":282},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[51,65447,56211],{"class":68},[51,65449,108],{"class":72},[51,65451,8614],{"class":282},[51,65453,65383],{"class":72},[51,65455,52575],{"class":52264},[51,65457,52271],{"class":72},[51,65459,65460,65462,65464,65466,65468,65470,65472,65474,65476,65478,65481,65483,65485,65487,65489,65491],{"class":53,"line":17817},[51,65461,56198],{"class":72},[51,65463,52575],{"class":52264},[51,65465,54450],{"class":68},[51,65467,108],{"class":72},[51,65469,63587],{"class":282},[51,65471,62016],{"class":72},[51,65473,2564],{"class":52264},[51,65475,56203],{"class":68},[51,65477,108],{"class":72},[51,65479,65480],{"class":282},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[51,65482,56211],{"class":68},[51,65484,108],{"class":72},[51,65486,8614],{"class":282},[51,65488,65383],{"class":72},[51,65490,52575],{"class":52264},[51,65492,52271],{"class":72},[51,65494,65495,65497,65499,65501,65503,65505,65507,65509,65511,65513,65516,65518,65520,65522,65524,65526],{"class":53,"line":17831},[51,65496,56198],{"class":72},[51,65498,52575],{"class":52264},[51,65500,54450],{"class":68},[51,65502,108],{"class":72},[51,65504,63587],{"class":282},[51,65506,62016],{"class":72},[51,65508,2564],{"class":52264},[51,65510,56203],{"class":68},[51,65512,108],{"class":72},[51,65514,65515],{"class":282},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[51,65517,56211],{"class":68},[51,65519,108],{"class":72},[51,65521,8614],{"class":282},[51,65523,65383],{"class":72},[51,65525,52575],{"class":52264},[51,65527,52271],{"class":72},[51,65529,65530,65532,65534],{"class":53,"line":17843},[51,65531,52740],{"class":72},[51,65533,52575],{"class":52264},[51,65535,52271],{"class":72},[51,65537,65538,65540,65542],{"class":53,"line":17848},[51,65539,53381],{"class":72},[51,65541,52575],{"class":52264},[51,65543,52271],{"class":72},[51,65545,65546,65548,65550],{"class":53,"line":17861},[51,65547,53108],{"class":72},[51,65549,52777],{"class":52264},[51,65551,52271],{"class":72},[51,65553,65554],{"class":53,"line":17866},[51,65555,65556],{"class":57},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[51,65558,65559],{"class":53,"line":17871},[51,65560,65561],{"class":57},"    \u002F\u002F 1.1 获取 a 元素 \n",[51,65563,65564,65566,65569,65571,65573,65575,65577,65580],{"class":53,"line":17876},[51,65565,12183],{"class":64},[51,65567,65568],{"class":175}," as",[51,65570,14526],{"class":64},[51,65572,55360],{"class":72},[51,65574,56645],{"class":68},[51,65576,73],{"class":72},[51,65578,65579],{"class":282},"'.tab-nav a'",[51,65581,90],{"class":72},[51,65583,65584],{"class":53,"line":17889},[51,65585,65586],{"class":57},"    \u002F\u002F console.log(as) \n",[51,65588,65589,65591,65593,65595,65597,65599,65601,65603,65605,65608,65610,65612,65614],{"class":53,"line":17894},[51,65590,4278],{"class":64},[51,65592,2750],{"class":72},[51,65594,52811],{"class":64},[51,65596,10400],{"class":72},[51,65598,108],{"class":64},[51,65600,5169],{"class":175},[51,65602,10407],{"class":72},[51,65604,2154],{"class":64},[51,65606,65607],{"class":72}," as.",[51,65609,52932],{"class":175},[51,65611,4291],{"class":72},[51,65613,3372],{"class":64},[51,65615,13404],{"class":72},[51,65617,65618],{"class":53,"line":33597},[51,65619,65620],{"class":57},"      \u002F\u002F console.log(as[i])\n",[51,65622,65623],{"class":53,"line":33603},[51,65624,65625],{"class":57},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[51,65627,65628,65631,65633,65635,65638,65640,65642],{"class":53,"line":33609},[51,65629,65630],{"class":72},"      as[i].",[51,65632,58777],{"class":68},[51,65634,73],{"class":72},[51,65636,65637],{"class":282},"'mouseenter'",[51,65639,13397],{"class":72},[51,65641,55413],{"class":64},[51,65643,55416],{"class":72},[51,65645,65646],{"class":53,"line":33615},[51,65647,65648],{"class":57},"        \u002F\u002F console.log('鼠标经过')\n",[51,65650,65651],{"class":53,"line":33621},[51,65652,65653],{"class":57},"        \u002F\u002F 排他思想  \n",[51,65655,65656],{"class":53,"line":33632},[51,65657,65658],{"class":57},"        \u002F\u002F 干掉别人 移除类active\n",[51,65660,65661,65663,65665,65667,65670,65672,65674,65676,65679],{"class":53,"line":33638},[51,65662,52889],{"class":72},[51,65664,55363],{"class":68},[51,65666,73],{"class":72},[51,65668,65669],{"class":282},"'.tab-nav .active'",[51,65671,57967],{"class":72},[51,65673,57970],{"class":68},[51,65675,73],{"class":72},[51,65677,65678],{"class":282},"'active'",[51,65680,90],{"class":72},[51,65682,65683],{"class":53,"line":33658},[51,65684,65685],{"class":57},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[51,65687,65688,65691,65694,65696,65698,65700],{"class":53,"line":33664},[51,65689,65690],{"class":175},"        this",[51,65692,65693],{"class":72},".classList.",[51,65695,221],{"class":68},[51,65697,73],{"class":72},[51,65699,65678],{"class":282},[51,65701,90],{"class":72},[51,65703,65704],{"class":53,"line":33675},[51,65705,3480],{"emptyLinePlaceholder":1192},[51,65707,65708],{"class":53,"line":33681},[51,65709,65710],{"class":57},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[51,65712,65713],{"class":53,"line":33687},[51,65714,65715],{"class":57},"        \u002F\u002F 干掉别人\n",[51,65717,65718,65720,65722,65724,65727,65729,65731,65733,65735],{"class":53,"line":33693},[51,65719,52889],{"class":72},[51,65721,55363],{"class":68},[51,65723,73],{"class":72},[51,65725,65726],{"class":282},"'.tab-content .active'",[51,65728,57967],{"class":72},[51,65730,57970],{"class":68},[51,65732,73],{"class":72},[51,65734,65678],{"class":282},[51,65736,90],{"class":72},[51,65738,65739],{"class":53,"line":33699},[51,65740,65741],{"class":57},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[51,65743,65744,65746,65748,65750,65753,65755,65757,65759,65761,65763,65765,65767,65769],{"class":53,"line":33705},[51,65745,52889],{"class":72},[51,65747,55363],{"class":68},[51,65749,73],{"class":72},[51,65751,65752],{"class":282},"`.tab-content .item:nth-child(${",[51,65754,1689],{"class":72},[51,65756,46530],{"class":64},[51,65758,26082],{"class":175},[51,65760,57996],{"class":282},[51,65762,57967],{"class":72},[51,65764,221],{"class":68},[51,65766,73],{"class":72},[51,65768,65678],{"class":282},[51,65770,90],{"class":72},[51,65772,65773],{"class":53,"line":33711},[51,65774,3480],{"emptyLinePlaceholder":1192},[51,65776,65777],{"class":53,"line":33717},[51,65778,65779],{"class":72},"      })\n",[51,65781,65782],{"class":53,"line":33737},[51,65783,3267],{"class":72},[51,65785,65786,65788,65790],{"class":53,"line":33743},[51,65787,53381],{"class":72},[51,65789,52777],{"class":52264},[51,65791,52271],{"class":72},[51,65793,65794,65796,65798],{"class":53,"line":33759},[51,65795,52749],{"class":72},[51,65797,52764],{"class":52264},[51,65799,52271],{"class":72},[51,65801,65802],{"class":53,"line":33765},[51,65803,3480],{"emptyLinePlaceholder":1192},[51,65805,65806,65808,65810],{"class":53,"line":33779},[51,65807,52749],{"class":72},[51,65809,51599],{"class":52264},[51,65811,52271],{"class":72},[40,65813,65814],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[40,65816,65817],{},"在监听事件中，this指向的就是他的调用者",[40,65819,65820],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[40,65822,54684],{},[40,65824,65825],{},"(function () {",[40,65827,65828],{},"const list = document.querySelector('.xtx-elevator-list')",[40,65830,65831],{},"list.addEventListener('click', function (e) {",[40,65833,65834],{},"if (e.target.tagName === 'A') {",[40,65836,65837],{},"\u002F\u002F 排他思想",[40,65839,65840],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[40,65842,65843],{},"const old = document.querySelector('.xtx-elevator-list .active')",[40,65845,65846],{},"\u002F\u002F console.log(old);",[40,65848,65849],{},"\u002F\u002F 判断",[40,65851,65852],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[40,65854,65855],{},"if (old) old.classList.remove('active')",[40,65857,65858],{},"e.target.classList.add('active')",[40,65860,2190],{},[40,65862,53428],{},[40,65864,65865],{},"})();",[1233,65867,65869],{"id":65868},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[29,65871,65873],{"className":51597,"code":65872,"language":51599,"meta":35,"style":35},"\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",[37,65874,65875,65885,65889,65897,65901,65915,65929,65941,65949,65955,65965,65975,65979,65983,65990,66002,66013,66030,66043,66057,66067,66071,66075,66082,66093,66111,66121,66133,66137,66141,66148,66165,66176,66188,66192,66196,66203,66215,66219,66227,66235,66239,66247,66255,66263,66278,66322,66330,66343,66356,66369,66377,66385,66393,66421,66429,66441,66454,66467,66475,66483,66491,66517,66525,66538,66550,66563,66571,66579,66587,66613,66621,66634,66646,66659,66667,66675,66683,66688,66708,66713,66733,66738,66755,66760,66768,66773,66802,66815,66819,66823,66828,66832,66860,66865,66882,66887,66892,66897,66902,66928,66932,66936,66944,66952,66956],{"__ignoreMap":35},[51,65876,65877,65879,65881,65883],{"class":53,"line":54},[51,65878,52261],{"class":72},[51,65880,52265],{"class":52264},[51,65882,52268],{"class":68},[51,65884,52271],{"class":72},[51,65886,65887],{"class":53,"line":61},[51,65888,3480],{"emptyLinePlaceholder":1192},[51,65890,65891,65893,65895],{"class":53,"line":93},[51,65892,2154],{"class":72},[51,65894,51599],{"class":52264},[51,65896,52271],{"class":72},[51,65898,65899],{"class":53,"line":99},[51,65900,3480],{"emptyLinePlaceholder":1192},[51,65902,65903,65905,65907,65909,65911,65913],{"class":53,"line":120},[51,65904,2154],{"class":72},[51,65906,52298],{"class":52264},[51,65908,52280],{"class":68},[51,65910,108],{"class":72},[51,65912,52285],{"class":282},[51,65914,52271],{"class":72},[51,65916,65917,65919,65921,65923,65925,65927],{"class":53,"line":129},[51,65918,53108],{"class":72},[51,65920,52308],{"class":52264},[51,65922,52311],{"class":68},[51,65924,108],{"class":72},[51,65926,52316],{"class":282},[51,65928,52271],{"class":72},[51,65930,65931,65933,65935,65937,65939],{"class":53,"line":206},[51,65932,53108],{"class":72},[51,65934,52371],{"class":52264},[51,65936,56278],{"class":72},[51,65938,52371],{"class":52264},[51,65940,52271],{"class":72},[51,65942,65943,65945,65947],{"class":53,"line":212},[51,65944,53108],{"class":72},[51,65946,1179],{"class":52264},[51,65948,52271],{"class":72},[51,65950,65951,65953],{"class":53,"line":227},[51,65952,7365],{"class":52264},[51,65954,16534],{"class":72},[51,65956,65957,65959,65961,65963],{"class":53,"line":370},[51,65958,55670],{"class":175},[51,65960,52401],{"class":72},[51,65962,176],{"class":175},[51,65964,179],{"class":72},[51,65966,65967,65969,65971,65973],{"class":53,"line":387},[51,65968,55659],{"class":175},[51,65970,52401],{"class":72},[51,65972,176],{"class":175},[51,65974,179],{"class":72},[51,65976,65977],{"class":53,"line":404},[51,65978,3267],{"class":72},[51,65980,65981],{"class":53,"line":415},[51,65982,3480],{"emptyLinePlaceholder":1192},[51,65984,65985,65988],{"class":53,"line":420},[51,65986,65987],{"class":52264},"    table",[51,65989,16534],{"class":72},[51,65991,65992,65995,65997,66000],{"class":53,"line":429},[51,65993,65994],{"class":175},"      border-collapse",[51,65996,52401],{"class":72},[51,65998,65999],{"class":175},"collapse",[51,66001,179],{"class":72},[51,66003,66004,66007,66009,66011],{"class":53,"line":434},[51,66005,66006],{"class":175},"      border-spacing",[51,66008,52401],{"class":72},[51,66010,176],{"class":175},[51,66012,179],{"class":72},[51,66014,66015,66017,66019,66021,66023,66025,66028],{"class":53,"line":448},[51,66016,62941],{"class":175},[51,66018,52401],{"class":72},[51,66020,791],{"class":175},[51,66022,52456],{"class":64},[51,66024,52485],{"class":175},[51,66026,66027],{"class":175}," #c0c0c0",[51,66029,179],{"class":72},[51,66031,66032,66034,66036,66039,66041],{"class":53,"line":462},[51,66033,55735],{"class":175},[51,66035,52401],{"class":72},[51,66037,66038],{"class":175},"500",[51,66040,52456],{"class":64},[51,66042,179],{"class":72},[51,66044,66045,66047,66049,66051,66053,66055],{"class":53,"line":470},[51,66046,55670],{"class":175},[51,66048,52401],{"class":72},[51,66050,612],{"class":175},[51,66052,52456],{"class":64},[51,66054,52520],{"class":175},[51,66056,179],{"class":72},[51,66058,66059,66061,66063,66065],{"class":53,"line":2783},[51,66060,58250],{"class":175},[51,66062,52401],{"class":72},[51,66064,52556],{"class":175},[51,66066,179],{"class":72},[51,66068,66069],{"class":53,"line":2788},[51,66070,3267],{"class":72},[51,66072,66073],{"class":53,"line":2817},[51,66074,3480],{"emptyLinePlaceholder":1192},[51,66076,66077,66080],{"class":53,"line":2822},[51,66078,66079],{"class":52264},"    th",[51,66081,16534],{"class":72},[51,66083,66084,66086,66088,66091],{"class":53,"line":2839},[51,66085,55848],{"class":175},[51,66087,52401],{"class":72},[51,66089,66090],{"class":175},"#09c",[51,66092,179],{"class":72},[51,66094,66095,66098,66100,66102,66104,66106,66109],{"class":53,"line":2844},[51,66096,66097],{"class":175},"      font",[51,66099,52401],{"class":72},[51,66101,63303],{"class":175},[51,66103,65037],{"class":175},[51,66105,52456],{"class":64},[51,66107,66108],{"class":282}," \"微软雅黑\"",[51,66110,179],{"class":72},[51,66112,66113,66115,66117,66119],{"class":53,"line":2849},[51,66114,58380],{"class":175},[51,66116,52401],{"class":72},[51,66118,61806],{"class":175},[51,66120,179],{"class":72},[51,66122,66123,66125,66127,66129,66131],{"class":53,"line":2854},[51,66124,55749],{"class":175},[51,66126,52401],{"class":72},[51,66128,2045],{"class":175},[51,66130,52456],{"class":64},[51,66132,179],{"class":72},[51,66134,66135],{"class":53,"line":2868},[51,66136,3267],{"class":72},[51,66138,66139],{"class":53,"line":2873},[51,66140,3480],{"emptyLinePlaceholder":1192},[51,66142,66143,66146],{"class":53,"line":3657},[51,66144,66145],{"class":52264},"    td",[51,66147,16534],{"class":72},[51,66149,66150,66152,66154,66156,66158,66160,66163],{"class":53,"line":3671},[51,66151,62941],{"class":175},[51,66153,52401],{"class":72},[51,66155,791],{"class":175},[51,66157,52456],{"class":64},[51,66159,52485],{"class":175},[51,66161,66162],{"class":175}," #d0d0d0",[51,66164,179],{"class":72},[51,66166,66167,66169,66171,66174],{"class":53,"line":3679},[51,66168,58380],{"class":175},[51,66170,52401],{"class":72},[51,66172,66173],{"class":175},"#404060",[51,66175,179],{"class":72},[51,66177,66178,66180,66182,66184,66186],{"class":53,"line":3684},[51,66179,55659],{"class":175},[51,66181,52401],{"class":72},[51,66183,443],{"class":175},[51,66185,52456],{"class":64},[51,66187,179],{"class":72},[51,66189,66190],{"class":53,"line":3690},[51,66191,3267],{"class":72},[51,66193,66194],{"class":53,"line":3696},[51,66195,3480],{"emptyLinePlaceholder":1192},[51,66197,66198,66201],{"class":53,"line":3701},[51,66199,66200],{"class":68},"    .allCheck",[51,66202,16534],{"class":72},[51,66204,66205,66207,66209,66211,66213],{"class":53,"line":8910},[51,66206,55735],{"class":175},[51,66208,52401],{"class":72},[51,66210,1858],{"class":175},[51,66212,52456],{"class":64},[51,66214,179],{"class":72},[51,66216,66217],{"class":53,"line":8934},[51,66218,3267],{"class":72},[51,66220,66221,66223,66225],{"class":53,"line":8939},[51,66222,53381],{"class":72},[51,66224,1179],{"class":52264},[51,66226,52271],{"class":72},[51,66228,66229,66231,66233],{"class":53,"line":8945},[51,66230,52749],{"class":72},[51,66232,52298],{"class":52264},[51,66234,52271],{"class":72},[51,66236,66237],{"class":53,"line":8972},[51,66238,3480],{"emptyLinePlaceholder":1192},[51,66240,66241,66243,66245],{"class":53,"line":8977},[51,66242,2154],{"class":72},[51,66244,52764],{"class":52264},[51,66246,52271],{"class":72},[51,66248,66249,66251,66253],{"class":53,"line":8983},[51,66250,53108],{"class":72},[51,66252,1393],{"class":52264},[51,66254,52271],{"class":72},[51,66256,66257,66259,66261],{"class":53,"line":8995},[51,66258,52305],{"class":72},[51,66260,1399],{"class":52264},[51,66262,52271],{"class":72},[51,66264,66265,66267,66269,66271,66273,66276],{"class":53,"line":9007},[51,66266,56198],{"class":72},[51,66268,1402],{"class":52264},[51,66270,54450],{"class":68},[51,66272,108],{"class":72},[51,66274,66275],{"class":282},"\"allCheck\"",[51,66277,52271],{"class":72},[51,66279,66280,66282,66284,66286,66288,66290,66292,66294,66296,66298,66300,66303,66306,66308,66310,66312,66315,66318,66320],{"class":53,"line":9019},[51,66281,56266],{"class":72},[51,66283,54785],{"class":52264},[51,66285,54788],{"class":68},[51,66287,108],{"class":72},[51,66289,54793],{"class":282},[51,66291,15882],{"class":68},[51,66293,108],{"class":72},[51,66295,8614],{"class":282},[51,66297,15921],{"class":68},[51,66299,108],{"class":72},[51,66301,66302],{"class":282},"\"checkAll\"",[51,66304,66305],{"class":72},"> \u003C",[51,66307,51],{"class":52264},[51,66309,54450],{"class":68},[51,66311,108],{"class":72},[51,66313,66314],{"class":282},"\"all\"",[51,66316,66317],{"class":72},">全选\u003C\u002F",[51,66319,51],{"class":52264},[51,66321,52271],{"class":72},[51,66323,66324,66326,66328],{"class":53,"line":10678},[51,66325,56371],{"class":72},[51,66327,1402],{"class":52264},[51,66329,52271],{"class":72},[51,66331,66332,66334,66336,66339,66341],{"class":53,"line":10703},[51,66333,56198],{"class":72},[51,66335,1402],{"class":52264},[51,66337,66338],{"class":72},">商品\u003C\u002F",[51,66340,1402],{"class":52264},[51,66342,52271],{"class":72},[51,66344,66345,66347,66349,66352,66354],{"class":53,"line":10726},[51,66346,56198],{"class":72},[51,66348,1402],{"class":52264},[51,66350,66351],{"class":72},">商家\u003C\u002F",[51,66353,1402],{"class":52264},[51,66355,52271],{"class":72},[51,66357,66358,66360,66362,66365,66367],{"class":53,"line":10750},[51,66359,56198],{"class":72},[51,66361,1402],{"class":52264},[51,66363,66364],{"class":72},">价格\u003C\u002F",[51,66366,1402],{"class":52264},[51,66368,52271],{"class":72},[51,66370,66371,66373,66375],{"class":53,"line":10755},[51,66372,52740],{"class":72},[51,66374,1399],{"class":52264},[51,66376,52271],{"class":72},[51,66378,66379,66381,66383],{"class":53,"line":10760},[51,66380,52305],{"class":72},[51,66382,1399],{"class":52264},[51,66384,52271],{"class":72},[51,66386,66387,66389,66391],{"class":53,"line":10765},[51,66388,56198],{"class":72},[51,66390,1444],{"class":52264},[51,66392,52271],{"class":72},[51,66394,66395,66397,66399,66401,66403,66405,66407,66409,66412,66414,66416,66419],{"class":53,"line":10774},[51,66396,56266],{"class":72},[51,66398,54785],{"class":52264},[51,66400,54788],{"class":68},[51,66402,108],{"class":72},[51,66404,54793],{"class":282},[51,66406,15882],{"class":68},[51,66408,108],{"class":72},[51,66410,66411],{"class":282},"\"check\"",[51,66413,54450],{"class":68},[51,66415,108],{"class":72},[51,66417,66418],{"class":282},"\"ck\"",[51,66420,52271],{"class":72},[51,66422,66423,66425,66427],{"class":53,"line":10779},[51,66424,56371],{"class":72},[51,66426,1444],{"class":52264},[51,66428,52271],{"class":72},[51,66430,66431,66433,66435,66437,66439],{"class":53,"line":10785},[51,66432,56198],{"class":72},[51,66434,1444],{"class":52264},[51,66436,62137],{"class":72},[51,66438,1444],{"class":52264},[51,66440,52271],{"class":72},[51,66442,66443,66445,66447,66450,66452],{"class":53,"line":10806},[51,66444,56198],{"class":72},[51,66446,1444],{"class":52264},[51,66448,66449],{"class":72},">小米\u003C\u002F",[51,66451,1444],{"class":52264},[51,66453,52271],{"class":72},[51,66455,66456,66458,66460,66463,66465],{"class":53,"line":10812},[51,66457,56198],{"class":72},[51,66459,1444],{"class":52264},[51,66461,66462],{"class":72},">￥1999\u003C\u002F",[51,66464,1444],{"class":52264},[51,66466,52271],{"class":72},[51,66468,66469,66471,66473],{"class":53,"line":10826},[51,66470,52740],{"class":72},[51,66472,1399],{"class":52264},[51,66474,52271],{"class":72},[51,66476,66477,66479,66481],{"class":53,"line":10832},[51,66478,52305],{"class":72},[51,66480,1399],{"class":52264},[51,66482,52271],{"class":72},[51,66484,66485,66487,66489],{"class":53,"line":10859},[51,66486,56198],{"class":72},[51,66488,1444],{"class":52264},[51,66490,52271],{"class":72},[51,66492,66493,66495,66497,66499,66501,66503,66505,66507,66509,66511,66513,66515],{"class":53,"line":10868},[51,66494,56266],{"class":72},[51,66496,54785],{"class":52264},[51,66498,54788],{"class":68},[51,66500,108],{"class":72},[51,66502,54793],{"class":282},[51,66504,15882],{"class":68},[51,66506,108],{"class":72},[51,66508,66411],{"class":282},[51,66510,54450],{"class":68},[51,66512,108],{"class":72},[51,66514,66418],{"class":282},[51,66516,52271],{"class":72},[51,66518,66519,66521,66523],{"class":53,"line":10874},[51,66520,56371],{"class":72},[51,66522,1444],{"class":52264},[51,66524,52271],{"class":72},[51,66526,66527,66529,66531,66534,66536],{"class":53,"line":10882},[51,66528,56198],{"class":72},[51,66530,1444],{"class":52264},[51,66532,66533],{"class":72},">小米净水器\u003C\u002F",[51,66535,1444],{"class":52264},[51,66537,52271],{"class":72},[51,66539,66540,66542,66544,66546,66548],{"class":53,"line":10887},[51,66541,56198],{"class":72},[51,66543,1444],{"class":52264},[51,66545,66449],{"class":72},[51,66547,1444],{"class":52264},[51,66549,52271],{"class":72},[51,66551,66552,66554,66556,66559,66561],{"class":53,"line":17566},[51,66553,56198],{"class":72},[51,66555,1444],{"class":52264},[51,66557,66558],{"class":72},">￥4999\u003C\u002F",[51,66560,1444],{"class":52264},[51,66562,52271],{"class":72},[51,66564,66565,66567,66569],{"class":53,"line":17572},[51,66566,52740],{"class":72},[51,66568,1399],{"class":52264},[51,66570,52271],{"class":72},[51,66572,66573,66575,66577],{"class":53,"line":17595},[51,66574,52305],{"class":72},[51,66576,1399],{"class":52264},[51,66578,52271],{"class":72},[51,66580,66581,66583,66585],{"class":53,"line":17601},[51,66582,56198],{"class":72},[51,66584,1444],{"class":52264},[51,66586,52271],{"class":72},[51,66588,66589,66591,66593,66595,66597,66599,66601,66603,66605,66607,66609,66611],{"class":53,"line":17624},[51,66590,56266],{"class":72},[51,66592,54785],{"class":52264},[51,66594,54788],{"class":68},[51,66596,108],{"class":72},[51,66598,54793],{"class":282},[51,66600,15882],{"class":68},[51,66602,108],{"class":72},[51,66604,66411],{"class":282},[51,66606,54450],{"class":68},[51,66608,108],{"class":72},[51,66610,66418],{"class":282},[51,66612,52271],{"class":72},[51,66614,66615,66617,66619],{"class":53,"line":17638},[51,66616,56371],{"class":72},[51,66618,1444],{"class":52264},[51,66620,52271],{"class":72},[51,66622,66623,66625,66627,66630,66632],{"class":53,"line":17658},[51,66624,56198],{"class":72},[51,66626,1444],{"class":52264},[51,66628,66629],{"class":72},">小米电视\u003C\u002F",[51,66631,1444],{"class":52264},[51,66633,52271],{"class":72},[51,66635,66636,66638,66640,66642,66644],{"class":53,"line":17664},[51,66637,56198],{"class":72},[51,66639,1444],{"class":52264},[51,66641,66449],{"class":72},[51,66643,1444],{"class":52264},[51,66645,52271],{"class":72},[51,66647,66648,66650,66652,66655,66657],{"class":53,"line":17675},[51,66649,56198],{"class":72},[51,66651,1444],{"class":52264},[51,66653,66654],{"class":72},">￥5999\u003C\u002F",[51,66656,1444],{"class":52264},[51,66658,52271],{"class":72},[51,66660,66661,66663,66665],{"class":53,"line":17698},[51,66662,52740],{"class":72},[51,66664,1399],{"class":52264},[51,66666,52271],{"class":72},[51,66668,66669,66671,66673],{"class":53,"line":17720},[51,66670,53381],{"class":72},[51,66672,1393],{"class":52264},[51,66674,52271],{"class":72},[51,66676,66677,66679,66681],{"class":53,"line":17725},[51,66678,53108],{"class":72},[51,66680,52777],{"class":52264},[51,66682,52271],{"class":72},[51,66684,66685],{"class":53,"line":17731},[51,66686,66687],{"class":57},"    \u002F\u002F 1. 获取大复选框\n",[51,66689,66690,66692,66695,66697,66699,66701,66703,66706],{"class":53,"line":17745},[51,66691,12183],{"class":64},[51,66693,66694],{"class":175}," checkAll",[51,66696,14526],{"class":64},[51,66698,55360],{"class":72},[51,66700,55363],{"class":68},[51,66702,73],{"class":72},[51,66704,66705],{"class":282},"'#checkAll'",[51,66707,90],{"class":72},[51,66709,66710],{"class":53,"line":17758},[51,66711,66712],{"class":57},"    \u002F\u002F 2. 获取所有的小复选框\n",[51,66714,66715,66717,66720,66722,66724,66726,66728,66731],{"class":53,"line":17763},[51,66716,12183],{"class":64},[51,66718,66719],{"class":175}," cks",[51,66721,14526],{"class":64},[51,66723,55360],{"class":72},[51,66725,56645],{"class":68},[51,66727,73],{"class":72},[51,66729,66730],{"class":282},"'.ck'",[51,66732,90],{"class":72},[51,66734,66735],{"class":53,"line":17777},[51,66736,66737],{"class":57},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[51,66739,66740,66743,66745,66747,66749,66751,66753],{"class":53,"line":17782},[51,66741,66742],{"class":72},"    checkAll.",[51,66744,58777],{"class":68},[51,66746,73],{"class":72},[51,66748,58782],{"class":282},[51,66750,13397],{"class":72},[51,66752,55413],{"class":64},[51,66754,55416],{"class":72},[51,66756,66757],{"class":53,"line":17788},[51,66758,66759],{"class":57},"      \u002F\u002F 得到当前大复选框的选中状态\n",[51,66761,66762,66765],{"class":53,"line":17793},[51,66763,66764],{"class":57},"      \u002F\u002F console.log(checkAll.checked)",[51,66766,66767],{"class":57},"  \u002F\u002F 得到 是 true 或者是 false\n",[51,66769,66770],{"class":53,"line":17807},[51,66771,66772],{"class":57},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[51,66774,66775,66777,66779,66781,66783,66785,66787,66789,66791,66794,66796,66798,66800],{"class":53,"line":17812},[51,66776,53248],{"class":64},[51,66778,2750],{"class":72},[51,66780,52811],{"class":64},[51,66782,10400],{"class":72},[51,66784,108],{"class":64},[51,66786,5169],{"class":175},[51,66788,10407],{"class":72},[51,66790,2154],{"class":64},[51,66792,66793],{"class":72}," cks.",[51,66795,52932],{"class":175},[51,66797,4291],{"class":72},[51,66799,3372],{"class":64},[51,66801,13404],{"class":72},[51,66803,66804,66807,66809,66812],{"class":53,"line":17817},[51,66805,66806],{"class":72},"        cks[i].checked ",[51,66808,108],{"class":64},[51,66810,66811],{"class":175}," this",[51,66813,66814],{"class":72},".checked\n",[51,66816,66817],{"class":53,"line":17831},[51,66818,53362],{"class":72},[51,66820,66821],{"class":53,"line":17843},[51,66822,34425],{"class":72},[51,66824,66825],{"class":53,"line":17848},[51,66826,66827],{"class":57},"    \u002F\u002F 5. 小复选框控制大复选框\n",[51,66829,66830],{"class":53,"line":17861},[51,66831,3480],{"emptyLinePlaceholder":1192},[51,66833,66834,66836,66838,66840,66842,66844,66846,66848,66850,66852,66854,66856,66858],{"class":53,"line":17866},[51,66835,4278],{"class":64},[51,66837,2750],{"class":72},[51,66839,52811],{"class":64},[51,66841,10400],{"class":72},[51,66843,108],{"class":64},[51,66845,5169],{"class":175},[51,66847,10407],{"class":72},[51,66849,2154],{"class":64},[51,66851,66793],{"class":72},[51,66853,52932],{"class":175},[51,66855,4291],{"class":72},[51,66857,3372],{"class":64},[51,66859,13404],{"class":72},[51,66861,66862],{"class":53,"line":17871},[51,66863,66864],{"class":57},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[51,66866,66867,66870,66872,66874,66876,66878,66880],{"class":53,"line":17876},[51,66868,66869],{"class":72},"      cks[i].",[51,66871,58777],{"class":68},[51,66873,73],{"class":72},[51,66875,58782],{"class":282},[51,66877,13397],{"class":72},[51,66879,55413],{"class":64},[51,66881,55416],{"class":72},[51,66883,66884],{"class":53,"line":17889},[51,66885,66886],{"class":57},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[51,66888,66889],{"class":53,"line":17894},[51,66890,66891],{"class":57},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[51,66893,66894],{"class":53,"line":33597},[51,66895,66896],{"class":57},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[51,66898,66899],{"class":53,"line":33603},[51,66900,66901],{"class":57},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[51,66903,66904,66907,66909,66911,66913,66915,66918,66920,66922,66924,66926],{"class":53,"line":33609},[51,66905,66906],{"class":72},"        checkAll.checked ",[51,66908,108],{"class":64},[51,66910,55360],{"class":72},[51,66912,56645],{"class":68},[51,66914,73],{"class":72},[51,66916,66917],{"class":282},"'.ck:checked'",[51,66919,31790],{"class":72},[51,66921,52932],{"class":175},[51,66923,58870],{"class":64},[51,66925,66793],{"class":72},[51,66927,56795],{"class":175},[51,66929,66930],{"class":53,"line":33615},[51,66931,65779],{"class":72},[51,66933,66934],{"class":53,"line":33621},[51,66935,3267],{"class":72},[51,66937,66938,66940,66942],{"class":53,"line":33632},[51,66939,53381],{"class":72},[51,66941,52777],{"class":52264},[51,66943,52271],{"class":72},[51,66945,66946,66948,66950],{"class":53,"line":33638},[51,66947,52749],{"class":72},[51,66949,52764],{"class":52264},[51,66951,52271],{"class":72},[51,66953,66954],{"class":53,"line":33658},[51,66955,3480],{"emptyLinePlaceholder":1192},[51,66957,66958,66960,66962],{"class":53,"line":33664},[51,66959,52749],{"class":72},[51,66961,51599],{"class":52264},[51,66963,52271],{"class":72},[40,66965,66966],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[40,66968,66969],{},"用好之间比较得到的布尔值！！！",[40,66971,66972,66973,66976,66977,2750,66980,1830,66982,66985],{},"在 JS 里访问的时候，",[37,66974,66975],{},"checkbox.checked"," 是一个 ",[840,66978,66979],{},"布尔值",[37,66981,2467],{},[37,66983,66984],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[40,66987,66988,66989,66992,66993],{},"HTML 的 ",[37,66990,66991],{},"checked=\"checked\""," 只是 ",[840,66994,66995,66996,66999],{},"初始值；JS 的 ",[37,66997,66998],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[40,67001,67002],{},"：checked是一个伪类选择器",[40,67004,67005],{},[2564,67006],{"alt":35,"src":67007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[40,67009,67010,67013],{},[67011,67012],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[40,67015,67016],{},[2564,67017],{"alt":35,"src":67018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67020,67022],{"id":67021},"_33-dom事件进阶","3.3 DOM事件进阶",[1233,67024,67026],{"id":67025},"_331-事件流","3.3.1 事件流",[40,67028,67029],{},[2564,67030],{"alt":35,"src":67031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22960,67033,67035],{"id":67034},"_3311-事件捕获","3.3.1.1 事件捕获",[40,67037,67038],{},[2564,67039],{"alt":35,"src":67040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[29,67042,67044],{"className":51597,"code":67043,"language":51599,"meta":35,"style":35},"\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",[37,67045,67046,67056,67070,67074,67082,67096,67116,67128,67136,67143,67155,67167,67177,67181,67185,67192,67204,67216,67226,67230,67238,67246,67250,67258,67273,67292,67300,67308,67328,67348,67364,67375,67383,67400,67411,67419,67436,67447,67455,67463,67471,67475],{"__ignoreMap":35},[51,67047,67048,67050,67052,67054],{"class":53,"line":54},[51,67049,52261],{"class":72},[51,67051,52265],{"class":52264},[51,67053,52268],{"class":68},[51,67055,52271],{"class":72},[51,67057,67058,67060,67062,67064,67066,67068],{"class":53,"line":61},[51,67059,2154],{"class":72},[51,67061,51599],{"class":52264},[51,67063,52280],{"class":68},[51,67065,108],{"class":72},[51,67067,52285],{"class":282},[51,67069,52271],{"class":72},[51,67071,67072],{"class":53,"line":93},[51,67073,3480],{"emptyLinePlaceholder":1192},[51,67075,67076,67078,67080],{"class":53,"line":99},[51,67077,2154],{"class":72},[51,67079,52298],{"class":52264},[51,67081,52271],{"class":72},[51,67083,67084,67086,67088,67090,67092,67094],{"class":53,"line":120},[51,67085,53108],{"class":72},[51,67087,52308],{"class":52264},[51,67089,52311],{"class":68},[51,67091,108],{"class":72},[51,67093,52316],{"class":282},[51,67095,52271],{"class":72},[51,67097,67098,67100,67102,67104,67106,67108,67110,67112,67114],{"class":53,"line":129},[51,67099,53108],{"class":72},[51,67101,52308],{"class":52264},[51,67103,15882],{"class":68},[51,67105,108],{"class":72},[51,67107,52355],{"class":282},[51,67109,52335],{"class":68},[51,67111,108],{"class":72},[51,67113,52362],{"class":282},[51,67115,52271],{"class":72},[51,67117,67118,67120,67122,67124,67126],{"class":53,"line":206},[51,67119,53108],{"class":72},[51,67121,52371],{"class":52264},[51,67123,52374],{"class":72},[51,67125,52371],{"class":52264},[51,67127,52271],{"class":72},[51,67129,67130,67132,67134],{"class":53,"line":212},[51,67131,53108],{"class":72},[51,67133,1179],{"class":52264},[51,67135,52271],{"class":72},[51,67137,67138,67141],{"class":53,"line":227},[51,67139,67140],{"class":68},"    .father",[51,67142,16534],{"class":72},[51,67144,67145,67147,67149,67151,67153],{"class":53,"line":370},[51,67146,55735],{"class":175},[51,67148,52401],{"class":72},[51,67150,66038],{"class":175},[51,67152,52456],{"class":64},[51,67154,179],{"class":72},[51,67156,67157,67159,67161,67163,67165],{"class":53,"line":387},[51,67158,55749],{"class":175},[51,67160,52401],{"class":72},[51,67162,66038],{"class":175},[51,67164,52456],{"class":64},[51,67166,179],{"class":72},[51,67168,67169,67171,67173,67175],{"class":53,"line":404},[51,67170,55848],{"class":175},[51,67172,52401],{"class":72},[51,67174,52609],{"class":175},[51,67176,179],{"class":72},[51,67178,67179],{"class":53,"line":415},[51,67180,3267],{"class":72},[51,67182,67183],{"class":53,"line":420},[51,67184,3480],{"emptyLinePlaceholder":1192},[51,67186,67187,67190],{"class":53,"line":429},[51,67188,67189],{"class":68},"    .son",[51,67191,16534],{"class":72},[51,67193,67194,67196,67198,67200,67202],{"class":53,"line":434},[51,67195,55735],{"class":175},[51,67197,52401],{"class":72},[51,67199,2812],{"class":175},[51,67201,52456],{"class":64},[51,67203,179],{"class":72},[51,67205,67206,67208,67210,67212,67214],{"class":53,"line":448},[51,67207,55749],{"class":175},[51,67209,52401],{"class":72},[51,67211,2812],{"class":175},[51,67213,52456],{"class":64},[51,67215,179],{"class":72},[51,67217,67218,67220,67222,67224],{"class":53,"line":462},[51,67219,55848],{"class":175},[51,67221,52401],{"class":72},[51,67223,55853],{"class":175},[51,67225,179],{"class":72},[51,67227,67228],{"class":53,"line":470},[51,67229,3267],{"class":72},[51,67231,67232,67234,67236],{"class":53,"line":2783},[51,67233,53381],{"class":72},[51,67235,1179],{"class":52264},[51,67237,52271],{"class":72},[51,67239,67240,67242,67244],{"class":53,"line":2788},[51,67241,52749],{"class":72},[51,67243,52298],{"class":52264},[51,67245,52271],{"class":72},[51,67247,67248],{"class":53,"line":2817},[51,67249,3480],{"emptyLinePlaceholder":1192},[51,67251,67252,67254,67256],{"class":53,"line":2822},[51,67253,2154],{"class":72},[51,67255,52764],{"class":52264},[51,67257,52271],{"class":72},[51,67259,67260,67262,67264,67266,67268,67271],{"class":53,"line":2839},[51,67261,53108],{"class":72},[51,67263,52575],{"class":52264},[51,67265,54450],{"class":68},[51,67267,108],{"class":72},[51,67269,67270],{"class":282},"\"father\"",[51,67272,52271],{"class":72},[51,67274,67275,67277,67279,67281,67283,67286,67288,67290],{"class":53,"line":2844},[51,67276,52305],{"class":72},[51,67278,52575],{"class":52264},[51,67280,54450],{"class":68},[51,67282,108],{"class":72},[51,67284,67285],{"class":282},"\"son\"",[51,67287,56278],{"class":72},[51,67289,52575],{"class":52264},[51,67291,52271],{"class":72},[51,67293,67294,67296,67298],{"class":53,"line":2849},[51,67295,53381],{"class":72},[51,67297,52575],{"class":52264},[51,67299,52271],{"class":72},[51,67301,67302,67304,67306],{"class":53,"line":2854},[51,67303,53108],{"class":72},[51,67305,52777],{"class":52264},[51,67307,52271],{"class":72},[51,67309,67310,67312,67315,67317,67319,67321,67323,67326],{"class":53,"line":2868},[51,67311,12183],{"class":64},[51,67313,67314],{"class":175}," fa",[51,67316,14526],{"class":64},[51,67318,55360],{"class":72},[51,67320,55363],{"class":68},[51,67322,73],{"class":72},[51,67324,67325],{"class":282},"'.father'",[51,67327,90],{"class":72},[51,67329,67330,67332,67335,67337,67339,67341,67343,67346],{"class":53,"line":2873},[51,67331,12183],{"class":64},[51,67333,67334],{"class":175}," son",[51,67336,14526],{"class":64},[51,67338,55360],{"class":72},[51,67340,55363],{"class":68},[51,67342,73],{"class":72},[51,67344,67345],{"class":282},"'.son'",[51,67347,90],{"class":72},[51,67349,67350,67352,67354,67356,67358,67360,67362],{"class":53,"line":3657},[51,67351,53371],{"class":72},[51,67353,58777],{"class":68},[51,67355,73],{"class":72},[51,67357,58782],{"class":282},[51,67359,13397],{"class":72},[51,67361,55413],{"class":64},[51,67363,55416],{"class":72},[51,67365,67366,67368,67370,67373],{"class":53,"line":3671},[51,67367,59889],{"class":68},[51,67369,73],{"class":72},[51,67371,67372],{"class":282},"'woshiu1'",[51,67374,90],{"class":72},[51,67376,67377,67379,67381],{"class":53,"line":3679},[51,67378,55499],{"class":72},[51,67380,2467],{"class":175},[51,67382,90],{"class":72},[51,67384,67385,67388,67390,67392,67394,67396,67398],{"class":53,"line":3684},[51,67386,67387],{"class":72},"    fa.",[51,67389,58777],{"class":68},[51,67391,73],{"class":72},[51,67393,58782],{"class":282},[51,67395,13397],{"class":72},[51,67397,55413],{"class":64},[51,67399,55416],{"class":72},[51,67401,67402,67404,67406,67409],{"class":53,"line":3690},[51,67403,59889],{"class":68},[51,67405,73],{"class":72},[51,67407,67408],{"class":282},"'1'",[51,67410,90],{"class":72},[51,67412,67413,67415,67417],{"class":53,"line":3696},[51,67414,55499],{"class":72},[51,67416,2467],{"class":175},[51,67418,90],{"class":72},[51,67420,67421,67424,67426,67428,67430,67432,67434],{"class":53,"line":3701},[51,67422,67423],{"class":72},"    son.",[51,67425,58777],{"class":68},[51,67427,73],{"class":72},[51,67429,58782],{"class":282},[51,67431,13397],{"class":72},[51,67433,55413],{"class":64},[51,67435,55416],{"class":72},[51,67437,67438,67440,67442,67445],{"class":53,"line":8910},[51,67439,59889],{"class":68},[51,67441,73],{"class":72},[51,67443,67444],{"class":282},"'2'",[51,67446,90],{"class":72},[51,67448,67449,67451,67453],{"class":53,"line":8934},[51,67450,55499],{"class":72},[51,67452,2467],{"class":175},[51,67454,90],{"class":72},[51,67456,67457,67459,67461],{"class":53,"line":8939},[51,67458,53381],{"class":72},[51,67460,52777],{"class":52264},[51,67462,52271],{"class":72},[51,67464,67465,67467,67469],{"class":53,"line":8945},[51,67466,52749],{"class":72},[51,67468,52764],{"class":52264},[51,67470,52271],{"class":72},[51,67472,67473],{"class":53,"line":8972},[51,67474,3480],{"emptyLinePlaceholder":1192},[51,67476,67477,67479,67481],{"class":53,"line":8977},[51,67478,52749],{"class":72},[51,67480,51599],{"class":52264},[51,67482,52271],{"class":72},[40,67484,67485],{},[2564,67486],{"alt":35,"src":67487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[40,67489,67490],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22960,67492,67494],{"id":67493},"_3312-事件冒泡","3.3.1.2 事件冒泡",[40,67496,67497],{},[2564,67498],{"alt":35,"src":67499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[40,67501,67502],{},"反着来",[40,67504,67505],{},"注意是同名事件，比如都是‘click’",[22960,67507,67509],{"id":67508},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[40,67511,67512],{},[2564,67513],{"alt":35,"src":67514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22960,67516,67518],{"id":67517},"_3314-解绑事件","3.3.1.4 解绑事件",[40,67520,67521],{},[2564,67522],{"alt":35,"src":67523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[40,67525,67526],{},[2564,67527],{"alt":35,"src":67528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22960,67530,67532],{"id":67531},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[19,67534,67535],{},[22,67536,67537],{},"事件类型的区别",[40,67539,67540],{},[2564,67541],{"alt":35,"src":67542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[40,67544,67545],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[19,67547,67548],{"start":61},[22,67549,67550],{},"注册事件的区别",[40,67552,67553],{},[2564,67554],{"alt":35,"src":67555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22960,67557,67559],{"id":67558},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[40,67561,67562],{},[2564,67563],{"alt":35,"src":67564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[40,67566,67567],{},[2564,67568],{"alt":35,"src":67569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[29,67571,67573],{"className":54031,"code":67572,"language":54033,"meta":35,"style":35},"\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",[37,67574,67575,67583,67600,67623,67631,67636,67641,67646,67650,67658,67666],{"__ignoreMap":35},[51,67576,67577,67579,67581],{"class":53,"line":54},[51,67578,2154],{"class":72},[51,67580,52764],{"class":52264},[51,67582,52271],{"class":72},[51,67584,67585,67587,67590,67593,67595,67598],{"class":53,"line":61},[51,67586,53108],{"class":72},[51,67588,67589],{"class":52264},"form",[51,67591,67592],{"class":68}," action",[51,67594,108],{"class":72},[51,67596,67597],{"class":282},"\"http:\u002F\u002Fwww.itcast.cn\"",[51,67599,52271],{"class":72},[51,67601,67602,67604,67606,67608,67610,67613,67616,67618,67621],{"class":53,"line":93},[51,67603,52305],{"class":72},[51,67605,54785],{"class":52264},[51,67607,54788],{"class":68},[51,67609,108],{"class":72},[51,67611,67612],{"class":282},"\"submit\"",[51,67614,67615],{"class":68}," value",[51,67617,108],{"class":72},[51,67619,67620],{"class":282},"\"免费注册\"",[51,67622,52271],{"class":72},[51,67624,67625,67627,67629],{"class":53,"line":99},[51,67626,52305],{"class":72},[51,67628,52777],{"class":52264},[51,67630,52271],{"class":72},[51,67632,67633],{"class":53,"line":120},[51,67634,67635],{"class":72},"      const form = document.querySelector('form')\n",[51,67637,67638],{"class":53,"line":129},[51,67639,67640],{"class":72},"      form.addEventListener('submit', function (e) {\n",[51,67642,67643],{"class":53,"line":206},[51,67644,67645],{"class":72},"        e.preventDefault()\n",[51,67647,67648],{"class":53,"line":212},[51,67649,65779],{"class":72},[51,67651,67652,67654,67656],{"class":53,"line":227},[51,67653,52740],{"class":72},[51,67655,52777],{"class":52264},[51,67657,52271],{"class":72},[51,67659,67660,67662,67664],{"class":53,"line":370},[51,67661,53381],{"class":72},[51,67663,67589],{"class":52264},[51,67665,52271],{"class":72},[51,67667,67668,67670,67672],{"class":53,"line":387},[51,67669,52749],{"class":72},[51,67671,52764],{"class":52264},[51,67673,52271],{"class":72},[40,67675,67676],{},"点击不在跳转！！！",[1233,67678,67680],{"id":67679},"_332-事件委托","3.3.2 事件委托",[40,67682,67683],{},[2564,67684],{"alt":35,"src":67685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[29,67687,67689],{"className":51597,"code":67688,"language":51599,"meta":35,"style":35},"\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",[37,67690,67691,67701,67715,67719,67727,67741,67761,67773,67781,67785,67793,67801,67813,67825,67837,67849,67861,67874,67882,67890,67895,67914,67935,67940,67945,67950,67955,67964,67968,67978,67982,67987,67992,68006,68016,68020,68024,68032,68040,68044],{"__ignoreMap":35},[51,67692,67693,67695,67697,67699],{"class":53,"line":54},[51,67694,52261],{"class":72},[51,67696,52265],{"class":52264},[51,67698,52268],{"class":68},[51,67700,52271],{"class":72},[51,67702,67703,67705,67707,67709,67711,67713],{"class":53,"line":61},[51,67704,2154],{"class":72},[51,67706,51599],{"class":52264},[51,67708,52280],{"class":68},[51,67710,108],{"class":72},[51,67712,52285],{"class":282},[51,67714,52271],{"class":72},[51,67716,67717],{"class":53,"line":93},[51,67718,3480],{"emptyLinePlaceholder":1192},[51,67720,67721,67723,67725],{"class":53,"line":99},[51,67722,2154],{"class":72},[51,67724,52298],{"class":52264},[51,67726,52271],{"class":72},[51,67728,67729,67731,67733,67735,67737,67739],{"class":53,"line":120},[51,67730,53108],{"class":72},[51,67732,52308],{"class":52264},[51,67734,52311],{"class":68},[51,67736,108],{"class":72},[51,67738,52316],{"class":282},[51,67740,52271],{"class":72},[51,67742,67743,67745,67747,67749,67751,67753,67755,67757,67759],{"class":53,"line":129},[51,67744,53108],{"class":72},[51,67746,52308],{"class":52264},[51,67748,15882],{"class":68},[51,67750,108],{"class":72},[51,67752,52355],{"class":282},[51,67754,52335],{"class":68},[51,67756,108],{"class":72},[51,67758,52362],{"class":282},[51,67760,52271],{"class":72},[51,67762,67763,67765,67767,67769,67771],{"class":53,"line":206},[51,67764,53108],{"class":72},[51,67766,52371],{"class":52264},[51,67768,52374],{"class":72},[51,67770,52371],{"class":52264},[51,67772,52271],{"class":72},[51,67774,67775,67777,67779],{"class":53,"line":212},[51,67776,52749],{"class":72},[51,67778,52298],{"class":52264},[51,67780,52271],{"class":72},[51,67782,67783],{"class":53,"line":227},[51,67784,3480],{"emptyLinePlaceholder":1192},[51,67786,67787,67789,67791],{"class":53,"line":370},[51,67788,2154],{"class":72},[51,67790,52764],{"class":52264},[51,67792,52271],{"class":72},[51,67794,67795,67797,67799],{"class":53,"line":387},[51,67796,53108],{"class":72},[51,67798,1000],{"class":52264},[51,67800,52271],{"class":72},[51,67802,67803,67805,67807,67809,67811],{"class":53,"line":404},[51,67804,52305],{"class":72},[51,67806,22],{"class":52264},[51,67808,54930],{"class":72},[51,67810,22],{"class":52264},[51,67812,52271],{"class":72},[51,67814,67815,67817,67819,67821,67823],{"class":53,"line":415},[51,67816,52305],{"class":72},[51,67818,22],{"class":52264},[51,67820,54949],{"class":72},[51,67822,22],{"class":52264},[51,67824,52271],{"class":72},[51,67826,67827,67829,67831,67833,67835],{"class":53,"line":420},[51,67828,52305],{"class":72},[51,67830,22],{"class":52264},[51,67832,54968],{"class":72},[51,67834,22],{"class":52264},[51,67836,52271],{"class":72},[51,67838,67839,67841,67843,67845,67847],{"class":53,"line":429},[51,67840,52305],{"class":72},[51,67842,22],{"class":52264},[51,67844,54987],{"class":72},[51,67846,22],{"class":52264},[51,67848,52271],{"class":72},[51,67850,67851,67853,67855,67857,67859],{"class":53,"line":434},[51,67852,52305],{"class":72},[51,67854,22],{"class":52264},[51,67856,55006],{"class":72},[51,67858,22],{"class":52264},[51,67860,52271],{"class":72},[51,67862,67863,67865,67867,67870,67872],{"class":53,"line":448},[51,67864,52305],{"class":72},[51,67866,40],{"class":52264},[51,67868,67869],{"class":72},">我不需要变色\u003C\u002F",[51,67871,40],{"class":52264},[51,67873,52271],{"class":72},[51,67875,67876,67878,67880],{"class":53,"line":462},[51,67877,53381],{"class":72},[51,67879,1000],{"class":52264},[51,67881,52271],{"class":72},[51,67883,67884,67886,67888],{"class":53,"line":470},[51,67885,53108],{"class":72},[51,67887,52777],{"class":52264},[51,67889,52271],{"class":72},[51,67891,67892],{"class":53,"line":2783},[51,67893,67894],{"class":57},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[51,67896,67897,67899,67901,67903,67905,67907,67909,67912],{"class":53,"line":2788},[51,67898,12183],{"class":64},[51,67900,62256],{"class":175},[51,67902,14526],{"class":64},[51,67904,55360],{"class":72},[51,67906,55363],{"class":68},[51,67908,73],{"class":72},[51,67910,67911],{"class":282},"'ul'",[51,67913,90],{"class":72},[51,67915,67916,67919,67921,67923,67925,67927,67929,67931,67933],{"class":53,"line":2817},[51,67917,67918],{"class":72},"    ul.",[51,67920,58777],{"class":68},[51,67922,73],{"class":72},[51,67924,58782],{"class":282},[51,67926,13397],{"class":72},[51,67928,55413],{"class":64},[51,67930,2750],{"class":72},[51,67932,1331],{"class":78},[51,67934,13404],{"class":72},[51,67936,67937],{"class":53,"line":2822},[51,67938,67939],{"class":57},"      \u002F\u002F alert(1)\n",[51,67941,67942],{"class":53,"line":2839},[51,67943,67944],{"class":57},"      \u002F\u002F e.target就是我们点击的对象\n",[51,67946,67947],{"class":53,"line":2844},[51,67948,67949],{"class":57},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[51,67951,67952],{"class":53,"line":2849},[51,67953,67954],{"class":57},"      \u002F\u002F e.target.style.color = 'red'\n",[51,67956,67957,67959,67961],{"class":53,"line":2854},[51,67958,59208],{"class":72},[51,67960,59211],{"class":68},[51,67962,67963],{"class":72},"(e)\n",[51,67965,67966],{"class":53,"line":2868},[51,67967,3480],{"emptyLinePlaceholder":1192},[51,67969,67970,67972,67975],{"class":53,"line":2873},[51,67971,59208],{"class":72},[51,67973,67974],{"class":68},"dir",[51,67976,67977],{"class":72},"(e.target)\n",[51,67979,67980],{"class":53,"line":3657},[51,67981,3480],{"emptyLinePlaceholder":1192},[51,67983,67984],{"class":53,"line":3671},[51,67985,67986],{"class":57},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[51,67988,67989],{"class":53,"line":3679},[51,67990,67991],{"class":57},"      \u002F\u002F 通过tagName来进行判断\n",[51,67993,67994,67996,67999,68001,68004],{"class":53,"line":3684},[51,67995,55444],{"class":64},[51,67997,67998],{"class":72}," (e.target.tagName ",[51,68000,55450],{"class":64},[51,68002,68003],{"class":282}," 'LI'",[51,68005,13404],{"class":72},[51,68007,68008,68011,68013],{"class":53,"line":3690},[51,68009,68010],{"class":72},"        e.target.style.color ",[51,68012,108],{"class":64},[51,68014,68015],{"class":282}," 'red'\n",[51,68017,68018],{"class":53,"line":3696},[51,68019,53362],{"class":72},[51,68021,68022],{"class":53,"line":3701},[51,68023,34425],{"class":72},[51,68025,68026,68028,68030],{"class":53,"line":8910},[51,68027,53381],{"class":72},[51,68029,52777],{"class":52264},[51,68031,52271],{"class":72},[51,68033,68034,68036,68038],{"class":53,"line":8934},[51,68035,52749],{"class":72},[51,68037,52764],{"class":52264},[51,68039,52271],{"class":72},[51,68041,68042],{"class":53,"line":8939},[51,68043,3480],{"emptyLinePlaceholder":1192},[51,68045,68046,68048,68050],{"class":53,"line":8945},[51,68047,52749],{"class":72},[51,68049,51599],{"class":52264},[51,68051,52271],{"class":72},[40,68053,68054],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[40,68056,68057],{},"if(e.target.ragName==='P') {}",[40,68059,68060],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[40,68062,68063],{},"通过事件委托的方式实现tab栏切换改造：",[40,68065,68066],{},"一定要记住自定义属性！！！！！！",[40,68068,68069],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[40,68071,68072],{},"id是自定义的属性名",[40,68074,68075],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[29,68077,68079],{"className":51597,"code":68078,"language":51599,"meta":35,"style":35},"\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",[37,68080,68081,68091,68105,68109,68117,68131,68151,68171,68183,68191,68197,68207,68217,68221,68225,68231,68243,68255,68267,68283,68287,68291,68297,68309,68321,68333,68343,68353,68357,68361,68369,68381,68391,68403,68407,68411,68419,68429,68439,68449,68453,68457,68467,68481,68493,68497,68501,68513,68523,68539,68549,68553,68557,68571,68581,68591,68595,68599,68605,68619,68623,68627,68635,68645,68649,68653,68662,68672,68676,68684,68692,68696,68704,68718,68732,68744,68752,68791,68823,68855,68887,68919,68927,68935,68949,68983,69017,69051,69085,69119,69127,69135,69143,69148,69153,69172,69177,69197,69205,69210,69223,69244,69257,69261,69266,69271,69284,69304,69332,69336,69340,69344,69352,69360,69364],{"__ignoreMap":35},[51,68082,68083,68085,68087,68089],{"class":53,"line":54},[51,68084,52261],{"class":72},[51,68086,52265],{"class":52264},[51,68088,52268],{"class":68},[51,68090,52271],{"class":72},[51,68092,68093,68095,68097,68099,68101,68103],{"class":53,"line":61},[51,68094,2154],{"class":72},[51,68096,51599],{"class":52264},[51,68098,52280],{"class":68},[51,68100,108],{"class":72},[51,68102,52285],{"class":282},[51,68104,52271],{"class":72},[51,68106,68107],{"class":53,"line":93},[51,68108,3480],{"emptyLinePlaceholder":1192},[51,68110,68111,68113,68115],{"class":53,"line":99},[51,68112,2154],{"class":72},[51,68114,52298],{"class":52264},[51,68116,52271],{"class":72},[51,68118,68119,68121,68123,68125,68127,68129],{"class":53,"line":120},[51,68120,53108],{"class":72},[51,68122,52308],{"class":52264},[51,68124,52311],{"class":68},[51,68126,108],{"class":72},[51,68128,52316],{"class":282},[51,68130,60091],{"class":72},[51,68132,68133,68135,68137,68139,68141,68143,68145,68147,68149],{"class":53,"line":129},[51,68134,53108],{"class":72},[51,68136,52308],{"class":52264},[51,68138,52327],{"class":68},[51,68140,108],{"class":72},[51,68142,52332],{"class":282},[51,68144,52335],{"class":68},[51,68146,108],{"class":72},[51,68148,52340],{"class":282},[51,68150,60091],{"class":72},[51,68152,68153,68155,68157,68159,68161,68163,68165,68167,68169],{"class":53,"line":206},[51,68154,53108],{"class":72},[51,68156,52308],{"class":52264},[51,68158,15882],{"class":68},[51,68160,108],{"class":72},[51,68162,52355],{"class":282},[51,68164,52335],{"class":68},[51,68166,108],{"class":72},[51,68168,52362],{"class":282},[51,68170,60091],{"class":72},[51,68172,68173,68175,68177,68179,68181],{"class":53,"line":212},[51,68174,53108],{"class":72},[51,68176,52371],{"class":52264},[51,68178,64589],{"class":72},[51,68180,52371],{"class":52264},[51,68182,52271],{"class":72},[51,68184,68185,68187,68189],{"class":53,"line":227},[51,68186,53108],{"class":72},[51,68188,1179],{"class":52264},[51,68190,52271],{"class":72},[51,68192,68193,68195],{"class":53,"line":370},[51,68194,7365],{"class":52264},[51,68196,16534],{"class":72},[51,68198,68199,68201,68203,68205],{"class":53,"line":387},[51,68200,55670],{"class":175},[51,68202,52401],{"class":72},[51,68204,176],{"class":175},[51,68206,179],{"class":72},[51,68208,68209,68211,68213,68215],{"class":53,"line":404},[51,68210,55659],{"class":175},[51,68212,52401],{"class":72},[51,68214,176],{"class":175},[51,68216,179],{"class":72},[51,68218,68219],{"class":53,"line":415},[51,68220,3267],{"class":72},[51,68222,68223],{"class":53,"line":420},[51,68224,3480],{"emptyLinePlaceholder":1192},[51,68226,68227,68229],{"class":53,"line":429},[51,68228,64640],{"class":68},[51,68230,16534],{"class":72},[51,68232,68233,68235,68237,68239,68241],{"class":53,"line":434},[51,68234,55735],{"class":175},[51,68236,52401],{"class":72},[51,68238,64651],{"class":175},[51,68240,52456],{"class":64},[51,68242,179],{"class":72},[51,68244,68245,68247,68249,68251,68253],{"class":53,"line":448},[51,68246,55749],{"class":175},[51,68248,52401],{"class":72},[51,68250,64664],{"class":175},[51,68252,52456],{"class":64},[51,68254,179],{"class":72},[51,68256,68257,68259,68261,68263,68265],{"class":53,"line":462},[51,68258,55670],{"class":175},[51,68260,52401],{"class":72},[51,68262,457],{"class":175},[51,68264,52456],{"class":64},[51,68266,179],{"class":72},[51,68268,68269,68271,68273,68275,68277,68279,68281],{"class":53,"line":470},[51,68270,62941],{"class":175},[51,68272,52401],{"class":72},[51,68274,791],{"class":175},[51,68276,52456],{"class":64},[51,68278,52485],{"class":175},[51,68280,63208],{"class":175},[51,68282,179],{"class":72},[51,68284,68285],{"class":53,"line":2783},[51,68286,3267],{"class":72},[51,68288,68289],{"class":53,"line":2788},[51,68290,3480],{"emptyLinePlaceholder":1192},[51,68292,68293,68295],{"class":53,"line":2817},[51,68294,64709],{"class":68},[51,68296,16534],{"class":72},[51,68298,68299,68301,68303,68305,68307],{"class":53,"line":2822},[51,68300,55735],{"class":175},[51,68302,52401],{"class":72},[51,68304,612],{"class":175},[51,68306,1577],{"class":64},[51,68308,179],{"class":72},[51,68310,68311,68313,68315,68317,68319],{"class":53,"line":2839},[51,68312,55749],{"class":175},[51,68314,52401],{"class":72},[51,68316,2151],{"class":175},[51,68318,52456],{"class":64},[51,68320,179],{"class":72},[51,68322,68323,68325,68327,68329,68331],{"class":53,"line":2844},[51,68324,58323],{"class":175},[51,68326,52401],{"class":72},[51,68328,2151],{"class":175},[51,68330,52456],{"class":64},[51,68332,179],{"class":72},[51,68334,68335,68337,68339,68341],{"class":53,"line":2849},[51,68336,55973],{"class":175},[51,68338,52401],{"class":72},[51,68340,52441],{"class":175},[51,68342,179],{"class":72},[51,68344,68345,68347,68349,68351],{"class":53,"line":2854},[51,68346,55984],{"class":175},[51,68348,52401],{"class":72},[51,68350,52632],{"class":175},[51,68352,179],{"class":72},[51,68354,68355],{"class":53,"line":2868},[51,68356,3267],{"class":72},[51,68358,68359],{"class":53,"line":2873},[51,68360,3480],{"emptyLinePlaceholder":1192},[51,68362,68363,68365,68367],{"class":53,"line":3657},[51,68364,64709],{"class":68},[51,68366,64782],{"class":52264},[51,68368,16534],{"class":72},[51,68370,68371,68373,68375,68377,68379],{"class":53,"line":3671},[51,68372,55886],{"class":175},[51,68374,52401],{"class":72},[51,68376,2045],{"class":175},[51,68378,52456],{"class":64},[51,68380,179],{"class":72},[51,68382,68383,68385,68387,68389],{"class":53,"line":3679},[51,68384,63298],{"class":175},[51,68386,52401],{"class":72},[51,68388,64805],{"class":175},[51,68390,179],{"class":72},[51,68392,68393,68395,68397,68399,68401],{"class":53,"line":3684},[51,68394,62964],{"class":175},[51,68396,52401],{"class":72},[51,68398,457],{"class":175},[51,68400,52456],{"class":64},[51,68402,179],{"class":72},[51,68404,68405],{"class":53,"line":3690},[51,68406,3267],{"class":72},[51,68408,68409],{"class":53,"line":3696},[51,68410,3480],{"emptyLinePlaceholder":1192},[51,68412,68413,68415,68417],{"class":53,"line":3701},[51,68414,64709],{"class":68},[51,68416,62256],{"class":52264},[51,68418,16534],{"class":72},[51,68420,68421,68423,68425,68427],{"class":53,"line":8910},[51,68422,55696],{"class":175},[51,68424,52401],{"class":72},[51,68426,55701],{"class":175},[51,68428,179],{"class":72},[51,68430,68431,68433,68435,68437],{"class":53,"line":8934},[51,68432,55973],{"class":175},[51,68434,52401],{"class":72},[51,68436,52441],{"class":175},[51,68438,179],{"class":72},[51,68440,68441,68443,68445,68447],{"class":53,"line":8939},[51,68442,55984],{"class":175},[51,68444,52401],{"class":72},[51,68446,52544],{"class":175},[51,68448,179],{"class":72},[51,68450,68451],{"class":53,"line":8945},[51,68452,3267],{"class":72},[51,68454,68455],{"class":53,"line":8972},[51,68456,3480],{"emptyLinePlaceholder":1192},[51,68458,68459,68461,68463,68465],{"class":53,"line":8977},[51,68460,64709],{"class":68},[51,68462,62256],{"class":52264},[51,68464,56039],{"class":52264},[51,68466,16534],{"class":72},[51,68468,68469,68471,68473,68475,68477,68479],{"class":53,"line":8983},[51,68470,55670],{"class":175},[51,68472,52401],{"class":72},[51,68474,176],{"class":175},[51,68476,9912],{"class":175},[51,68478,52456],{"class":64},[51,68480,179],{"class":72},[51,68482,68483,68485,68487,68489,68491],{"class":53,"line":8995},[51,68484,55886],{"class":175},[51,68486,52401],{"class":72},[51,68488,1795],{"class":175},[51,68490,52456],{"class":64},[51,68492,179],{"class":72},[51,68494,68495],{"class":53,"line":9007},[51,68496,3267],{"class":72},[51,68498,68499],{"class":53,"line":9019},[51,68500,3480],{"emptyLinePlaceholder":1192},[51,68502,68503,68505,68507,68509,68511],{"class":53,"line":10678},[51,68504,64709],{"class":68},[51,68506,62256],{"class":52264},[51,68508,56039],{"class":52264},[51,68510,170],{"class":52264},[51,68512,16534],{"class":72},[51,68514,68515,68517,68519,68521],{"class":53,"line":10703},[51,68516,64934],{"class":175},[51,68518,52401],{"class":72},[51,68520,55701],{"class":175},[51,68522,179],{"class":72},[51,68524,68525,68527,68529,68531,68533,68535,68537],{"class":53,"line":10726},[51,68526,63196],{"class":175},[51,68528,52401],{"class":72},[51,68530,1334],{"class":175},[51,68532,52456],{"class":64},[51,68534,52485],{"class":175},[51,68536,64955],{"class":175},[51,68538,179],{"class":72},[51,68540,68541,68543,68545,68547],{"class":53,"line":10750},[51,68542,58380],{"class":175},[51,68544,52401],{"class":72},[51,68546,63333],{"class":175},[51,68548,179],{"class":72},[51,68550,68551],{"class":53,"line":10755},[51,68552,3267],{"class":72},[51,68554,68555],{"class":53,"line":10760},[51,68556,3480],{"emptyLinePlaceholder":1192},[51,68558,68559,68561,68563,68565,68567,68569],{"class":53,"line":10765},[51,68560,64709],{"class":68},[51,68562,62256],{"class":52264},[51,68564,56039],{"class":52264},[51,68566,170],{"class":52264},[51,68568,64988],{"class":68},[51,68570,16534],{"class":72},[51,68572,68573,68575,68577,68579],{"class":53,"line":10774},[51,68574,62755],{"class":175},[51,68576,52401],{"class":72},[51,68578,64999],{"class":175},[51,68580,179],{"class":72},[51,68582,68583,68585,68587,68589],{"class":53,"line":10779},[51,68584,58380],{"class":175},[51,68586,52401],{"class":72},[51,68588,64999],{"class":175},[51,68590,179],{"class":72},[51,68592,68593],{"class":53,"line":10785},[51,68594,3267],{"class":72},[51,68596,68597],{"class":53,"line":10806},[51,68598,3480],{"emptyLinePlaceholder":1192},[51,68600,68601,68603],{"class":53,"line":10812},[51,68602,65024],{"class":68},[51,68604,16534],{"class":72},[51,68606,68607,68609,68611,68613,68615,68617],{"class":53,"line":10826},[51,68608,55659],{"class":175},[51,68610,52401],{"class":72},[51,68612,176],{"class":175},[51,68614,65037],{"class":175},[51,68616,52456],{"class":64},[51,68618,179],{"class":72},[51,68620,68621],{"class":53,"line":10832},[51,68622,3267],{"class":72},[51,68624,68625],{"class":53,"line":10859},[51,68626,3480],{"emptyLinePlaceholder":1192},[51,68628,68629,68631,68633],{"class":53,"line":10868},[51,68630,65024],{"class":68},[51,68632,63138],{"class":68},[51,68634,16534],{"class":72},[51,68636,68637,68639,68641,68643],{"class":53,"line":10874},[51,68638,55973],{"class":175},[51,68640,52401],{"class":72},[51,68642,55701],{"class":175},[51,68644,179],{"class":72},[51,68646,68647],{"class":53,"line":10882},[51,68648,3267],{"class":72},[51,68650,68651],{"class":53,"line":10887},[51,68652,3480],{"emptyLinePlaceholder":1192},[51,68654,68655,68657,68660],{"class":53,"line":17566},[51,68656,65024],{"class":68},[51,68658,68659],{"class":68}," .active",[51,68661,16534],{"class":72},[51,68663,68664,68666,68668,68670],{"class":53,"line":17572},[51,68665,55973],{"class":175},[51,68667,52401],{"class":72},[51,68669,61833],{"class":175},[51,68671,179],{"class":72},[51,68673,68674],{"class":53,"line":17595},[51,68675,3267],{"class":72},[51,68677,68678,68680,68682],{"class":53,"line":17601},[51,68679,53381],{"class":72},[51,68681,1179],{"class":52264},[51,68683,52271],{"class":72},[51,68685,68686,68688,68690],{"class":53,"line":17624},[51,68687,52749],{"class":72},[51,68689,52298],{"class":52264},[51,68691,52271],{"class":72},[51,68693,68694],{"class":53,"line":17638},[51,68695,3480],{"emptyLinePlaceholder":1192},[51,68697,68698,68700,68702],{"class":53,"line":17658},[51,68699,2154],{"class":72},[51,68701,52764],{"class":52264},[51,68703,52271],{"class":72},[51,68705,68706,68708,68710,68712,68714,68716],{"class":53,"line":17664},[51,68707,53108],{"class":72},[51,68709,52575],{"class":52264},[51,68711,54450],{"class":68},[51,68713,108],{"class":72},[51,68715,65139],{"class":282},[51,68717,52271],{"class":72},[51,68719,68720,68722,68724,68726,68728,68730],{"class":53,"line":17675},[51,68721,52305],{"class":72},[51,68723,52575],{"class":52264},[51,68725,54450],{"class":68},[51,68727,108],{"class":72},[51,68729,65154],{"class":282},[51,68731,52271],{"class":72},[51,68733,68734,68736,68738,68740,68742],{"class":53,"line":17698},[51,68735,56198],{"class":72},[51,68737,1233],{"class":52264},[51,68739,65165],{"class":72},[51,68741,1233],{"class":52264},[51,68743,52271],{"class":72},[51,68745,68746,68748,68750],{"class":53,"line":17720},[51,68747,56198],{"class":72},[51,68749,1000],{"class":52264},[51,68751,52271],{"class":72},[51,68753,68754,68756,68758,68760,68762,68764,68766,68768,68770,68772,68774,68776,68778,68781,68783,68785,68787,68789],{"class":53,"line":17725},[51,68755,56266],{"class":72},[51,68757,22],{"class":52264},[51,68759,62016],{"class":72},[51,68761,981],{"class":52264},[51,68763,54450],{"class":68},[51,68765,108],{"class":72},[51,68767,60670],{"class":282},[51,68769,62021],{"class":68},[51,68771,108],{"class":72},[51,68773,65200],{"class":282},[51,68775,54915],{"class":68},[51,68777,108],{"class":72},[51,68779,68780],{"class":282},"\"0\"",[51,68782,65203],{"class":72},[51,68784,981],{"class":52264},[51,68786,56278],{"class":72},[51,68788,22],{"class":52264},[51,68790,52271],{"class":72},[51,68792,68793,68795,68797,68799,68801,68803,68805,68807,68809,68811,68813,68815,68817,68819,68821],{"class":53,"line":17731},[51,68794,56266],{"class":72},[51,68796,22],{"class":52264},[51,68798,62016],{"class":72},[51,68800,981],{"class":52264},[51,68802,62021],{"class":68},[51,68804,108],{"class":72},[51,68806,65200],{"class":282},[51,68808,54915],{"class":68},[51,68810,108],{"class":72},[51,68812,4755],{"class":282},[51,68814,65230],{"class":72},[51,68816,981],{"class":52264},[51,68818,56278],{"class":72},[51,68820,22],{"class":52264},[51,68822,52271],{"class":72},[51,68824,68825,68827,68829,68831,68833,68835,68837,68839,68841,68843,68845,68847,68849,68851,68853],{"class":53,"line":17745},[51,68826,56266],{"class":72},[51,68828,22],{"class":52264},[51,68830,62016],{"class":72},[51,68832,981],{"class":52264},[51,68834,62021],{"class":68},[51,68836,108],{"class":72},[51,68838,65200],{"class":282},[51,68840,54915],{"class":68},[51,68842,108],{"class":72},[51,68844,4778],{"class":282},[51,68846,65257],{"class":72},[51,68848,981],{"class":52264},[51,68850,56278],{"class":72},[51,68852,22],{"class":52264},[51,68854,52271],{"class":72},[51,68856,68857,68859,68861,68863,68865,68867,68869,68871,68873,68875,68877,68879,68881,68883,68885],{"class":53,"line":17758},[51,68858,56266],{"class":72},[51,68860,22],{"class":52264},[51,68862,62016],{"class":72},[51,68864,981],{"class":52264},[51,68866,62021],{"class":68},[51,68868,108],{"class":72},[51,68870,65200],{"class":282},[51,68872,54915],{"class":68},[51,68874,108],{"class":72},[51,68876,4791],{"class":282},[51,68878,65284],{"class":72},[51,68880,981],{"class":52264},[51,68882,56278],{"class":72},[51,68884,22],{"class":52264},[51,68886,52271],{"class":72},[51,68888,68889,68891,68893,68895,68897,68899,68901,68903,68905,68907,68909,68911,68913,68915,68917],{"class":53,"line":17763},[51,68890,56266],{"class":72},[51,68892,22],{"class":52264},[51,68894,62016],{"class":72},[51,68896,981],{"class":52264},[51,68898,62021],{"class":68},[51,68900,108],{"class":72},[51,68902,65200],{"class":282},[51,68904,54915],{"class":68},[51,68906,108],{"class":72},[51,68908,4804],{"class":282},[51,68910,65311],{"class":72},[51,68912,981],{"class":52264},[51,68914,56278],{"class":72},[51,68916,22],{"class":52264},[51,68918,52271],{"class":72},[51,68920,68921,68923,68925],{"class":53,"line":17777},[51,68922,56371],{"class":72},[51,68924,1000],{"class":52264},[51,68926,52271],{"class":72},[51,68928,68929,68931,68933],{"class":53,"line":17782},[51,68930,52740],{"class":72},[51,68932,52575],{"class":52264},[51,68934,52271],{"class":72},[51,68936,68937,68939,68941,68943,68945,68947],{"class":53,"line":17788},[51,68938,52305],{"class":72},[51,68940,52575],{"class":52264},[51,68942,54450],{"class":68},[51,68944,108],{"class":72},[51,68946,65348],{"class":282},[51,68948,52271],{"class":72},[51,68950,68951,68953,68955,68957,68959,68961,68963,68965,68967,68969,68971,68973,68975,68977,68979,68981],{"class":53,"line":17793},[51,68952,56198],{"class":72},[51,68954,52575],{"class":52264},[51,68956,54450],{"class":68},[51,68958,108],{"class":72},[51,68960,65363],{"class":282},[51,68962,62016],{"class":72},[51,68964,2564],{"class":52264},[51,68966,56203],{"class":68},[51,68968,108],{"class":72},[51,68970,65374],{"class":282},[51,68972,56211],{"class":68},[51,68974,108],{"class":72},[51,68976,8614],{"class":282},[51,68978,65383],{"class":72},[51,68980,52575],{"class":52264},[51,68982,52271],{"class":72},[51,68984,68985,68987,68989,68991,68993,68995,68997,68999,69001,69003,69005,69007,69009,69011,69013,69015],{"class":53,"line":17807},[51,68986,56198],{"class":72},[51,68988,52575],{"class":52264},[51,68990,54450],{"class":68},[51,68992,108],{"class":72},[51,68994,63587],{"class":282},[51,68996,62016],{"class":72},[51,68998,2564],{"class":52264},[51,69000,56203],{"class":68},[51,69002,108],{"class":72},[51,69004,65410],{"class":282},[51,69006,56211],{"class":68},[51,69008,108],{"class":72},[51,69010,8614],{"class":282},[51,69012,65383],{"class":72},[51,69014,52575],{"class":52264},[51,69016,52271],{"class":72},[51,69018,69019,69021,69023,69025,69027,69029,69031,69033,69035,69037,69039,69041,69043,69045,69047,69049],{"class":53,"line":17812},[51,69020,56198],{"class":72},[51,69022,52575],{"class":52264},[51,69024,54450],{"class":68},[51,69026,108],{"class":72},[51,69028,63587],{"class":282},[51,69030,62016],{"class":72},[51,69032,2564],{"class":52264},[51,69034,56203],{"class":68},[51,69036,108],{"class":72},[51,69038,65445],{"class":282},[51,69040,56211],{"class":68},[51,69042,108],{"class":72},[51,69044,8614],{"class":282},[51,69046,65383],{"class":72},[51,69048,52575],{"class":52264},[51,69050,52271],{"class":72},[51,69052,69053,69055,69057,69059,69061,69063,69065,69067,69069,69071,69073,69075,69077,69079,69081,69083],{"class":53,"line":17817},[51,69054,56198],{"class":72},[51,69056,52575],{"class":52264},[51,69058,54450],{"class":68},[51,69060,108],{"class":72},[51,69062,63587],{"class":282},[51,69064,62016],{"class":72},[51,69066,2564],{"class":52264},[51,69068,56203],{"class":68},[51,69070,108],{"class":72},[51,69072,65480],{"class":282},[51,69074,56211],{"class":68},[51,69076,108],{"class":72},[51,69078,8614],{"class":282},[51,69080,65383],{"class":72},[51,69082,52575],{"class":52264},[51,69084,52271],{"class":72},[51,69086,69087,69089,69091,69093,69095,69097,69099,69101,69103,69105,69107,69109,69111,69113,69115,69117],{"class":53,"line":17831},[51,69088,56198],{"class":72},[51,69090,52575],{"class":52264},[51,69092,54450],{"class":68},[51,69094,108],{"class":72},[51,69096,63587],{"class":282},[51,69098,62016],{"class":72},[51,69100,2564],{"class":52264},[51,69102,56203],{"class":68},[51,69104,108],{"class":72},[51,69106,65515],{"class":282},[51,69108,56211],{"class":68},[51,69110,108],{"class":72},[51,69112,8614],{"class":282},[51,69114,65383],{"class":72},[51,69116,52575],{"class":52264},[51,69118,52271],{"class":72},[51,69120,69121,69123,69125],{"class":53,"line":17843},[51,69122,52740],{"class":72},[51,69124,52575],{"class":52264},[51,69126,52271],{"class":72},[51,69128,69129,69131,69133],{"class":53,"line":17848},[51,69130,53381],{"class":72},[51,69132,52575],{"class":52264},[51,69134,52271],{"class":72},[51,69136,69137,69139,69141],{"class":53,"line":17861},[51,69138,53108],{"class":72},[51,69140,52777],{"class":52264},[51,69142,52271],{"class":72},[51,69144,69145],{"class":53,"line":17866},[51,69146,69147],{"class":57},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[51,69149,69150],{"class":53,"line":17871},[51,69151,69152],{"class":57},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[51,69154,69155,69157,69159,69161,69163,69165,69167,69170],{"class":53,"line":17876},[51,69156,12183],{"class":64},[51,69158,62256],{"class":175},[51,69160,14526],{"class":64},[51,69162,55360],{"class":72},[51,69164,55363],{"class":68},[51,69166,73],{"class":72},[51,69168,69169],{"class":282},"'.tab-nav ul'",[51,69171,90],{"class":72},[51,69173,69174],{"class":53,"line":17889},[51,69175,69176],{"class":57},"    \u002F\u002F 2.添加事件\n",[51,69178,69179,69181,69183,69185,69187,69189,69191,69193,69195],{"class":53,"line":17894},[51,69180,67918],{"class":72},[51,69182,58777],{"class":68},[51,69184,73],{"class":72},[51,69186,58782],{"class":282},[51,69188,13397],{"class":72},[51,69190,55413],{"class":64},[51,69192,2750],{"class":72},[51,69194,1331],{"class":78},[51,69196,13404],{"class":72},[51,69198,69199,69201,69203],{"class":53,"line":33597},[51,69200,59208],{"class":72},[51,69202,67974],{"class":68},[51,69204,67977],{"class":72},[51,69206,69207],{"class":53,"line":33603},[51,69208,69209],{"class":57},"      \u002F\u002Fe.targer是我们点击的对象\n",[51,69211,69212,69214,69216,69218,69221],{"class":53,"line":33609},[51,69213,55444],{"class":64},[51,69215,67998],{"class":72},[51,69217,55450],{"class":64},[51,69219,69220],{"class":282}," 'A'",[51,69222,13404],{"class":72},[51,69224,69225,69227,69229,69231,69234,69236,69238,69240,69242],{"class":53,"line":33615},[51,69226,52889],{"class":72},[51,69228,55363],{"class":68},[51,69230,73],{"class":72},[51,69232,69233],{"class":282},"'.active'",[51,69235,57967],{"class":72},[51,69237,57970],{"class":68},[51,69239,73],{"class":72},[51,69241,65678],{"class":282},[51,69243,90],{"class":72},[51,69245,69246,69249,69251,69253,69255],{"class":53,"line":33621},[51,69247,69248],{"class":72},"        e.target.classList.",[51,69250,221],{"class":68},[51,69252,73],{"class":72},[51,69254,65678],{"class":282},[51,69256,90],{"class":72},[51,69258,69259],{"class":53,"line":33632},[51,69260,3480],{"emptyLinePlaceholder":1192},[51,69262,69263],{"class":53,"line":33638},[51,69264,69265],{"class":57},"        \u002F\u002F 下面大盒子模块\n",[51,69267,69268],{"class":53,"line":33658},[51,69269,69270],{"class":57},"        \u002F\u002F console.log(e.target.dataset.id)\n",[51,69272,69273,69275,69277,69279,69281],{"class":53,"line":33664},[51,69274,62234],{"class":64},[51,69276,4109],{"class":175},[51,69278,14526],{"class":64},[51,69280,46530],{"class":64},[51,69282,69283],{"class":72},"e.target.dataset.id\n",[51,69285,69286,69288,69290,69292,69294,69296,69298,69300,69302],{"class":53,"line":33675},[51,69287,52889],{"class":72},[51,69289,55363],{"class":68},[51,69291,73],{"class":72},[51,69293,65726],{"class":282},[51,69295,57967],{"class":72},[51,69297,57970],{"class":68},[51,69299,73],{"class":72},[51,69301,65678],{"class":282},[51,69303,90],{"class":72},[51,69305,69306,69308,69310,69312,69314,69316,69318,69320,69322,69324,69326,69328,69330],{"class":53,"line":33681},[51,69307,52889],{"class":72},[51,69309,55363],{"class":68},[51,69311,73],{"class":72},[51,69313,65752],{"class":282},[51,69315,1689],{"class":72},[51,69317,46530],{"class":64},[51,69319,26082],{"class":175},[51,69321,57996],{"class":282},[51,69323,57967],{"class":72},[51,69325,221],{"class":68},[51,69327,73],{"class":72},[51,69329,65678],{"class":282},[51,69331,90],{"class":72},[51,69333,69334],{"class":53,"line":33687},[51,69335,3480],{"emptyLinePlaceholder":1192},[51,69337,69338],{"class":53,"line":33693},[51,69339,53362],{"class":72},[51,69341,69342],{"class":53,"line":33699},[51,69343,34425],{"class":72},[51,69345,69346,69348,69350],{"class":53,"line":33705},[51,69347,53381],{"class":72},[51,69349,52777],{"class":52264},[51,69351,52271],{"class":72},[51,69353,69354,69356,69358],{"class":53,"line":33711},[51,69355,52749],{"class":72},[51,69357,52764],{"class":52264},[51,69359,52271],{"class":72},[51,69361,69362],{"class":53,"line":33717},[51,69363,3480],{"emptyLinePlaceholder":1192},[51,69365,69366,69368,69370],{"class":53,"line":33737},[51,69367,52749],{"class":72},[51,69369,51599],{"class":52264},[51,69371,52271],{"class":72},[1233,69373,69375],{"id":69374},"_333-页面加载事件","3.3.3 页面加载事件",[19,69377,69378],{},[22,69379,69380],{},"load",[40,69382,69383],{},[2564,69384],{"alt":35,"src":69385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[40,69387,69388],{},"window代表整个窗口，比document还要大",[40,69390,69391],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[40,69393,69394],{},"img.addEventListener('load', function () {",[40,69396,69397],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[40,69399,53428],{},[19,69401,69402],{"start":61},[22,69403,69404],{},"DOMContentLoaded",[40,69406,69407],{},[2564,69408],{"alt":35,"src":69409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[40,69411,69412],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[1233,69414,69416],{"id":69415},"_334-元素滚动事件","3.3.4 元素滚动事件",[40,69418,69419],{},[2564,69420],{"alt":35,"src":69421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[40,69423,69424],{},[2564,69425],{"alt":35,"src":69426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[40,69428,69429],{},[2564,69430],{"alt":35,"src":69431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[40,69433,69434],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[40,69436,69437],{},"获得的是数字型数据，不带单位",[40,69439,69440],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[40,69442,69443],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[40,69445,69446],{},"它是通过document.documentElement来获取",[40,69448,69449],{},[2564,69450],{"alt":35,"src":69451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[40,69453,69454],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[1233,69456,69458],{"id":69457},"_335-页面缩放事件","3.3.5 页面缩放事件",[40,69460,69461],{},[2564,69462],{"alt":35,"src":69463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[40,69465,69466],{},[2564,69467],{"alt":35,"src":69468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[1233,69470,69472],{"id":69471},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[40,69474,69475],{},[2564,69476],{"alt":35,"src":69477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[40,69479,69480],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[40,69482,69483],{},[2564,69484],{"alt":35,"src":69485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[40,69487,69488],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[40,69490,69491],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[40,69493,69494],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[40,69496,69497],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[40,69499,69500],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[40,69502,69503],{},[2564,69504],{"alt":35,"src":69505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[40,69507,69508],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[40,69510,69511],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[40,69513,69514],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[40,69516,69517],{},"e.pageX-box.getBoundingClientRect()",[1233,69519,69521],{"id":69520},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[40,69523,69524],{},[2564,69525],{"alt":35,"src":69526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[40,69528,69529],{},"这个是相对于视口来说的，它是个方法，不是属性值",[1233,69531,69533],{"id":69532},"_338-总结","3.3.8 总结",[40,69535,69536],{},[2564,69537],{"alt":35,"src":69538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[40,69540,69541],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[40,69543,69544],{},"修改盒子的宽高只能通过width和height来实现",[1233,69546,69548],{"id":69547},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[29,69550,69552],{"className":51597,"code":69551,"language":51599,"meta":35,"style":35},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[37,69553,69554,69559,69564,69569,69574],{"__ignoreMap":35},[51,69555,69556],{"class":53,"line":54},[51,69557,69558],{"class":72},"\u002F* 页面滑动 *\u002F\n",[51,69560,69561],{"class":53,"line":61},[51,69562,69563],{"class":72},"html {\n",[51,69565,69566],{"class":53,"line":93},[51,69567,69568],{"class":72},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[51,69570,69571],{"class":53,"line":99},[51,69572,69573],{"class":72},"  scroll-behavior: smooth;\n",[51,69575,69576],{"class":53,"line":120},[51,69577,132],{"class":72},[40,69579,69580],{},"默认是auto",[1233,69582,69584],{"id":69583},"_3310-日期对象","3.3.10 日期对象",[22960,69586,69588],{"id":69587},"_33101-实例化","3.3.10.1 实例化",[40,69590,69591],{},[2564,69592],{"alt":35,"src":69593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22960,69595,69597],{"id":69596},"_33102-时期对象方法","3.3.10.2 时期对象方法",[40,69599,69600],{},[2564,69601],{"alt":35,"src":69602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[40,69604,69605],{},"月份+1",[40,69607,69608],{},"老外认为第一天为0，星期天",[40,69610,69611],{},"方法使用的时候必须要跟括号",[40,69613,69614],{},"快速获得日期",[40,69616,69617],{},"\u002F\u002F 得到年月日",[40,69619,69620],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[40,69622,69623],{},"\u002F\u002F 得到当地日期",[40,69625,69626],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[40,69628,69629],{},"\u002F\u002F 得到当地时间",[40,69631,69632],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[40,69634,69635],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[40,69637,69638],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52777,69640,69641],{},"\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",[40,69643,69644],{},"学会去封装函数！",[22960,69646,69648],{"id":69647},"_33103-时间戳","3.3.10.3 时间戳",[40,69650,69651],{},[2564,69652],{"alt":35,"src":69653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[40,69655,69656],{},[2564,69657],{"alt":35,"src":69658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[40,69660,69661],{},"三种方法记住一个就可以",[1233,69663,69665],{"id":69664},"_3311-节点操作","3.3.11 节点操作",[22960,69667,69669],{"id":69668},"_33111-dom节点","3.3.11.1 DOM节点",[40,69671,69672],{},[2564,69673],{"alt":35,"src":69674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[40,69676,69677],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22960,69679,69681],{"id":69680},"_33112-查找节点","3.3.11.2 查找节点",[40,69683,69684],{},"前边的document.querySelector()是获取的元素",[40,69686,69687],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[40,69689,69690],{},[2564,69691],{"alt":35,"src":69692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[19,69694,69695],{},[22,69696,69697],{},"父节点",[40,69699,69700],{},[2564,69701],{"alt":35,"src":69702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[19,69704,69705],{"start":61},[22,69706,69707],{},"子节点",[40,69709,69710],{},[2564,69711],{"alt":35,"src":69712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[40,69714,69715],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[40,69717,69718],{},"children获得的是伪数组，是亲儿子",[19,69720,69721],{"start":93},[22,69722,69723],{},"兄弟节点",[40,69725,69726],{},[2564,69727],{"alt":35,"src":69728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22960,69730,69732],{"id":69731},"_33113-增加节点","3.3.11.3 增加节点",[40,69734,69735],{},[2564,69736],{"alt":35,"src":69737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[40,69739,69740],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[40,69742,69743],{},[2564,69744],{"alt":35,"src":69745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[40,69747,69748],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[40,69750,69751],{},"下面是写法的部分展示，就按照下边的格式来写",[40,69753,69754],{},"例：",[52777,69756,69757],{},"\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",[40,69759,69760],{},[2564,69761],{"alt":35,"src":69762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[40,69764,69765],{},"false只克隆标签，里边的内容不会克隆过来",[29,69767,69769],{"className":51597,"code":69768,"language":51599,"meta":35,"style":35},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[37,69770,69771],{"__ignoreMap":35},[51,69772,69773],{"class":53,"line":54},[51,69774,69768],{"class":72},[22960,69776,69778],{"id":69777},"_33114-删除节点","3.3.11.4 删除节点",[40,69780,69781],{},[2564,69782],{"alt":35,"src":69783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[40,69785,69786],{},"父亲删儿子",[40,69788,69789],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[1233,69791,69793],{"id":69792},"_3312-m端事件","3.3.12 M端事件",[40,69795,69796],{},"M端就是移动端",[40,69798,69799],{},[2564,69800],{"alt":35,"src":69801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[1233,69803,69805],{"id":69804},"_3313-插件","3.3.13 插件",[40,69807,69808],{},"要熟悉官网！！！",[40,69810,69811],{},[981,69812,69813],{"href":69813,"rel":69814},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24828],[40,69816,69817],{},[981,69818,69819],{"href":69819,"rel":69820},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24828],[1233,69822,69824],{"id":69823},"_3314-学生信息表","3.3.14 学生信息表",[19,69826,69827,69830,69833,69836,69839,69842,69845,69848],{},[22,69828,69829],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[22,69831,69832],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[22,69834,69835],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[22,69837,69838],{},"用好表单元素自带的属性，value,name等",[22,69840,69841],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[22,69843,69844],{},"不要忘记事件对象",[22,69846,69847],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[22,69849,69850],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[40,69852,69853],{},"结构：",[29,69855,69857],{"className":51597,"code":69856,"language":51599,"meta":35,"style":35},"\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",[37,69858,69859,69869,69883,69887,69895,69909,69929,69950,69963,69987,69995,69999,70007,70020,70041,70069,70097,70102,70124,70144,70163,70171,70199,70221,70241,70261,70281,70301,70321,70329,70349,70357,70361,70374,70382,70390,70398,70411,70424,70437,70450,70463,70476,70489,70497,70505,70513,70518,70523,70528,70533,70538,70543,70548,70553,70558,70563,70568,70573,70578,70586,70594,70602,70606,70626,70645,70665,70685,70705,70725,70729,70734,70754,70759,70769,70774,70779,70799,70821,70826,70836,70840,70844,70849,70854,70883,70897,70912,70916,70920,70924,70929,70940,70953,70958,70963,70968,70973,70978,70982,70987,70992,71001,71006,71011,71023,71028,71035,71039,71044,71054,71059,71069,71074,71102,71123,71133,71153,71171,71188,71205,71222,71239,71243,71253,71258,71263,71268,71279,71283,71287,71291,71296,71301,71322,71334,71339,71344,71349,71363,71368,71375,71379,71383,71391,71395,71403,71407],{"__ignoreMap":35},[51,69860,69861,69863,69865,69867],{"class":53,"line":54},[51,69862,52261],{"class":72},[51,69864,52265],{"class":52264},[51,69866,52268],{"class":68},[51,69868,52271],{"class":72},[51,69870,69871,69873,69875,69877,69879,69881],{"class":53,"line":61},[51,69872,2154],{"class":72},[51,69874,51599],{"class":52264},[51,69876,52280],{"class":68},[51,69878,108],{"class":72},[51,69880,52285],{"class":282},[51,69882,52271],{"class":72},[51,69884,69885],{"class":53,"line":93},[51,69886,3480],{"emptyLinePlaceholder":1192},[51,69888,69889,69891,69893],{"class":53,"line":99},[51,69890,2154],{"class":72},[51,69892,52298],{"class":52264},[51,69894,52271],{"class":72},[51,69896,69897,69899,69901,69903,69905,69907],{"class":53,"line":120},[51,69898,53108],{"class":72},[51,69900,52308],{"class":52264},[51,69902,52311],{"class":68},[51,69904,108],{"class":72},[51,69906,52316],{"class":282},[51,69908,60091],{"class":72},[51,69910,69911,69913,69915,69917,69919,69921,69923,69925,69927],{"class":53,"line":129},[51,69912,53108],{"class":72},[51,69914,52308],{"class":52264},[51,69916,15882],{"class":68},[51,69918,108],{"class":72},[51,69920,52355],{"class":282},[51,69922,52335],{"class":68},[51,69924,108],{"class":72},[51,69926,52362],{"class":282},[51,69928,60091],{"class":72},[51,69930,69931,69933,69935,69937,69939,69941,69943,69945,69948],{"class":53,"line":206},[51,69932,53108],{"class":72},[51,69934,52308],{"class":52264},[51,69936,52327],{"class":68},[51,69938,108],{"class":72},[51,69940,52332],{"class":282},[51,69942,52335],{"class":68},[51,69944,108],{"class":72},[51,69946,69947],{"class":282},"\"ie=edge\"",[51,69949,60091],{"class":72},[51,69951,69952,69954,69956,69959,69961],{"class":53,"line":212},[51,69953,53108],{"class":72},[51,69955,52371],{"class":52264},[51,69957,69958],{"class":72},">学生信息管理\u003C\u002F",[51,69960,52371],{"class":52264},[51,69962,52271],{"class":72},[51,69964,69965,69967,69970,69973,69975,69978,69980,69982,69985],{"class":53,"line":227},[51,69966,53108],{"class":72},[51,69968,69969],{"class":52264},"link",[51,69971,69972],{"class":68}," rel",[51,69974,108],{"class":72},[51,69976,69977],{"class":282},"\"stylesheet\"",[51,69979,62021],{"class":68},[51,69981,108],{"class":72},[51,69983,69984],{"class":282},"\"css\u002Findex.css\"",[51,69986,60091],{"class":72},[51,69988,69989,69991,69993],{"class":53,"line":370},[51,69990,52749],{"class":72},[51,69992,52298],{"class":52264},[51,69994,52271],{"class":72},[51,69996,69997],{"class":53,"line":387},[51,69998,3480],{"emptyLinePlaceholder":1192},[51,70000,70001,70003,70005],{"class":53,"line":404},[51,70002,2154],{"class":72},[51,70004,52764],{"class":52264},[51,70006,52271],{"class":72},[51,70008,70009,70011,70013,70016,70018],{"class":53,"line":415},[51,70010,53108],{"class":72},[51,70012,10],{"class":52264},[51,70014,70015],{"class":72},">新增学员\u003C\u002F",[51,70017,10],{"class":52264},[51,70019,52271],{"class":72},[51,70021,70022,70024,70026,70028,70030,70032,70035,70037,70039],{"class":53,"line":420},[51,70023,53108],{"class":72},[51,70025,67589],{"class":52264},[51,70027,54450],{"class":68},[51,70029,108],{"class":72},[51,70031,63628],{"class":282},[51,70033,70034],{"class":68}," autocomplete",[51,70036,108],{"class":72},[51,70038,32740],{"class":282},[51,70040,52271],{"class":72},[51,70042,70043,70046,70048,70050,70052,70054,70056,70058,70061,70063,70065,70067],{"class":53,"line":429},[51,70044,70045],{"class":72},"    姓名：\u003C",[51,70047,54785],{"class":52264},[51,70049,54788],{"class":68},[51,70051,108],{"class":72},[51,70053,63663],{"class":282},[51,70055,54450],{"class":68},[51,70057,108],{"class":72},[51,70059,70060],{"class":282},"\"uname\"",[51,70062,15882],{"class":68},[51,70064,108],{"class":72},[51,70066,70060],{"class":282},[51,70068,60091],{"class":72},[51,70070,70071,70074,70076,70078,70080,70082,70084,70086,70089,70091,70093,70095],{"class":53,"line":434},[51,70072,70073],{"class":72},"    年龄：\u003C",[51,70075,54785],{"class":52264},[51,70077,54788],{"class":68},[51,70079,108],{"class":72},[51,70081,63663],{"class":282},[51,70083,54450],{"class":68},[51,70085,108],{"class":72},[51,70087,70088],{"class":282},"\"age\"",[51,70090,15882],{"class":68},[51,70092,108],{"class":72},[51,70094,70088],{"class":282},[51,70096,60091],{"class":72},[51,70098,70099],{"class":53,"line":448},[51,70100,70101],{"class":72},"    性别:\n",[51,70103,70104,70106,70109,70111,70113,70116,70118,70120,70122],{"class":53,"line":462},[51,70105,52305],{"class":72},[51,70107,70108],{"class":52264},"select",[51,70110,15882],{"class":68},[51,70112,108],{"class":72},[51,70114,70115],{"class":282},"\"gender\"",[51,70117,54450],{"class":68},[51,70119,108],{"class":72},[51,70121,70115],{"class":282},[51,70123,52271],{"class":72},[51,70125,70126,70128,70131,70133,70135,70137,70140,70142],{"class":53,"line":470},[51,70127,56198],{"class":72},[51,70129,70130],{"class":52264},"option",[51,70132,67615],{"class":68},[51,70134,108],{"class":72},[51,70136,10923],{"class":282},[51,70138,70139],{"class":72},">男\u003C\u002F",[51,70141,70130],{"class":52264},[51,70143,52271],{"class":72},[51,70145,70146,70148,70150,70152,70154,70156,70159,70161],{"class":53,"line":2783},[51,70147,56198],{"class":72},[51,70149,70130],{"class":52264},[51,70151,67615],{"class":68},[51,70153,108],{"class":72},[51,70155,10992],{"class":282},[51,70157,70158],{"class":72},">女\u003C\u002F",[51,70160,70130],{"class":52264},[51,70162,52271],{"class":72},[51,70164,70165,70167,70169],{"class":53,"line":2788},[51,70166,52740],{"class":72},[51,70168,70108],{"class":52264},[51,70170,52271],{"class":72},[51,70172,70173,70176,70178,70180,70182,70184,70186,70188,70191,70193,70195,70197],{"class":53,"line":2817},[51,70174,70175],{"class":72},"    薪资：\u003C",[51,70177,54785],{"class":52264},[51,70179,54788],{"class":68},[51,70181,108],{"class":72},[51,70183,63663],{"class":282},[51,70185,54450],{"class":68},[51,70187,108],{"class":72},[51,70189,70190],{"class":282},"\"salary\"",[51,70192,15882],{"class":68},[51,70194,108],{"class":72},[51,70196,70190],{"class":282},[51,70198,60091],{"class":72},[51,70200,70201,70204,70206,70208,70210,70213,70215,70217,70219],{"class":53,"line":2822},[51,70202,70203],{"class":72},"    就业城市：\u003C",[51,70205,70108],{"class":52264},[51,70207,15882],{"class":68},[51,70209,108],{"class":72},[51,70211,70212],{"class":282},"\"city\"",[51,70214,54450],{"class":68},[51,70216,108],{"class":72},[51,70218,70212],{"class":282},[51,70220,52271],{"class":72},[51,70222,70223,70225,70227,70229,70231,70234,70237,70239],{"class":53,"line":2839},[51,70224,56198],{"class":72},[51,70226,70130],{"class":52264},[51,70228,67615],{"class":68},[51,70230,108],{"class":72},[51,70232,70233],{"class":282},"\"北京\"",[51,70235,70236],{"class":72},">北京\u003C\u002F",[51,70238,70130],{"class":52264},[51,70240,52271],{"class":72},[51,70242,70243,70245,70247,70249,70251,70254,70257,70259],{"class":53,"line":2844},[51,70244,56198],{"class":72},[51,70246,70130],{"class":52264},[51,70248,67615],{"class":68},[51,70250,108],{"class":72},[51,70252,70253],{"class":282},"\"上海\"",[51,70255,70256],{"class":72},">上海\u003C\u002F",[51,70258,70130],{"class":52264},[51,70260,52271],{"class":72},[51,70262,70263,70265,70267,70269,70271,70274,70277,70279],{"class":53,"line":2849},[51,70264,56198],{"class":72},[51,70266,70130],{"class":52264},[51,70268,67615],{"class":68},[51,70270,108],{"class":72},[51,70272,70273],{"class":282},"\"广州\"",[51,70275,70276],{"class":72},">广州\u003C\u002F",[51,70278,70130],{"class":52264},[51,70280,52271],{"class":72},[51,70282,70283,70285,70287,70289,70291,70294,70297,70299],{"class":53,"line":2854},[51,70284,56198],{"class":72},[51,70286,70130],{"class":52264},[51,70288,67615],{"class":68},[51,70290,108],{"class":72},[51,70292,70293],{"class":282},"\"深圳\"",[51,70295,70296],{"class":72},">深圳\u003C\u002F",[51,70298,70130],{"class":52264},[51,70300,52271],{"class":72},[51,70302,70303,70305,70307,70309,70311,70314,70317,70319],{"class":53,"line":2868},[51,70304,56198],{"class":72},[51,70306,70130],{"class":52264},[51,70308,67615],{"class":68},[51,70310,108],{"class":72},[51,70312,70313],{"class":282},"\"曹县\"",[51,70315,70316],{"class":72},">曹县\u003C\u002F",[51,70318,70130],{"class":52264},[51,70320,52271],{"class":72},[51,70322,70323,70325,70327],{"class":53,"line":2873},[51,70324,52740],{"class":72},[51,70326,70108],{"class":52264},[51,70328,52271],{"class":72},[51,70330,70331,70333,70335,70337,70339,70342,70345,70347],{"class":53,"line":3657},[51,70332,52305],{"class":72},[51,70334,54851],{"class":52264},[51,70336,54450],{"class":68},[51,70338,108],{"class":72},[51,70340,70341],{"class":282},"\"add\"",[51,70343,70344],{"class":72},">录入\u003C\u002F",[51,70346,54851],{"class":52264},[51,70348,52271],{"class":72},[51,70350,70351,70353,70355],{"class":53,"line":3671},[51,70352,53381],{"class":72},[51,70354,67589],{"class":52264},[51,70356,52271],{"class":72},[51,70358,70359],{"class":53,"line":3679},[51,70360,3480],{"emptyLinePlaceholder":1192},[51,70362,70363,70365,70367,70370,70372],{"class":53,"line":3684},[51,70364,53108],{"class":72},[51,70366,10],{"class":52264},[51,70368,70369],{"class":72},">就业榜\u003C\u002F",[51,70371,10],{"class":52264},[51,70373,52271],{"class":72},[51,70375,70376,70378,70380],{"class":53,"line":3690},[51,70377,53108],{"class":72},[51,70379,1393],{"class":52264},[51,70381,52271],{"class":72},[51,70383,70384,70386,70388],{"class":53,"line":3696},[51,70385,52305],{"class":72},[51,70387,1396],{"class":52264},[51,70389,52271],{"class":72},[51,70391,70392,70394,70396],{"class":53,"line":3701},[51,70393,56198],{"class":72},[51,70395,1399],{"class":52264},[51,70397,52271],{"class":72},[51,70399,70400,70402,70404,70407,70409],{"class":53,"line":8910},[51,70401,56266],{"class":72},[51,70403,1402],{"class":52264},[51,70405,70406],{"class":72},">序号\u003C\u002F",[51,70408,1402],{"class":52264},[51,70410,52271],{"class":72},[51,70412,70413,70415,70417,70420,70422],{"class":53,"line":8934},[51,70414,56266],{"class":72},[51,70416,1402],{"class":52264},[51,70418,70419],{"class":72},">姓名\u003C\u002F",[51,70421,1402],{"class":52264},[51,70423,52271],{"class":72},[51,70425,70426,70428,70430,70433,70435],{"class":53,"line":8939},[51,70427,56266],{"class":72},[51,70429,1402],{"class":52264},[51,70431,70432],{"class":72},">年龄\u003C\u002F",[51,70434,1402],{"class":52264},[51,70436,52271],{"class":72},[51,70438,70439,70441,70443,70446,70448],{"class":53,"line":8945},[51,70440,56266],{"class":72},[51,70442,1402],{"class":52264},[51,70444,70445],{"class":72},">性别\u003C\u002F",[51,70447,1402],{"class":52264},[51,70449,52271],{"class":72},[51,70451,70452,70454,70456,70459,70461],{"class":53,"line":8972},[51,70453,56266],{"class":72},[51,70455,1402],{"class":52264},[51,70457,70458],{"class":72},">薪资\u003C\u002F",[51,70460,1402],{"class":52264},[51,70462,52271],{"class":72},[51,70464,70465,70467,70469,70472,70474],{"class":53,"line":8977},[51,70466,56266],{"class":72},[51,70468,1402],{"class":52264},[51,70470,70471],{"class":72},">就业城市\u003C\u002F",[51,70473,1402],{"class":52264},[51,70475,52271],{"class":72},[51,70477,70478,70480,70482,70485,70487],{"class":53,"line":8983},[51,70479,56266],{"class":72},[51,70481,1402],{"class":52264},[51,70483,70484],{"class":72},">操作\u003C\u002F",[51,70486,1402],{"class":52264},[51,70488,52271],{"class":72},[51,70490,70491,70493,70495],{"class":53,"line":8995},[51,70492,56371],{"class":72},[51,70494,1399],{"class":52264},[51,70496,52271],{"class":72},[51,70498,70499,70501,70503],{"class":53,"line":9007},[51,70500,52740],{"class":72},[51,70502,1396],{"class":52264},[51,70504,52271],{"class":72},[51,70506,70507,70509,70511],{"class":53,"line":9019},[51,70508,52305],{"class":72},[51,70510,1439],{"class":52264},[51,70512,52271],{"class":72},[51,70514,70515],{"class":53,"line":10678},[51,70516,70517],{"class":57},"      \u003C!-- \n",[51,70519,70520],{"class":53,"line":10703},[51,70521,70522],{"class":57},"        \u003Ctr>\n",[51,70524,70525],{"class":53,"line":10726},[51,70526,70527],{"class":57},"          \u003Ctd>1001\u003C\u002Ftd>\n",[51,70529,70530],{"class":53,"line":10750},[51,70531,70532],{"class":57},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[51,70534,70535],{"class":53,"line":10755},[51,70536,70537],{"class":57},"          \u003Ctd>19\u003C\u002Ftd>\n",[51,70539,70540],{"class":53,"line":10760},[51,70541,70542],{"class":57},"          \u003Ctd>男\u003C\u002Ftd>\n",[51,70544,70545],{"class":53,"line":10765},[51,70546,70547],{"class":57},"          \u003Ctd>15000\u003C\u002Ftd>\n",[51,70549,70550],{"class":53,"line":10774},[51,70551,70552],{"class":57},"          \u003Ctd>上海\u003C\u002Ftd>\n",[51,70554,70555],{"class":53,"line":10779},[51,70556,70557],{"class":57},"          \u003Ctd>\n",[51,70559,70560],{"class":53,"line":10785},[51,70561,70562],{"class":57},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[51,70564,70565],{"class":53,"line":10806},[51,70566,70567],{"class":57},"          \u003C\u002Ftd>\n",[51,70569,70570],{"class":53,"line":10812},[51,70571,70572],{"class":57},"        \u003C\u002Ftr> \n",[51,70574,70575],{"class":53,"line":10826},[51,70576,70577],{"class":57},"        -->\n",[51,70579,70580,70582,70584],{"class":53,"line":10832},[51,70581,52740],{"class":72},[51,70583,1439],{"class":52264},[51,70585,52271],{"class":72},[51,70587,70588,70590,70592],{"class":53,"line":10859},[51,70589,53381],{"class":72},[51,70591,1393],{"class":52264},[51,70593,52271],{"class":72},[51,70595,70596,70598,70600],{"class":53,"line":10868},[51,70597,53108],{"class":72},[51,70599,52777],{"class":52264},[51,70601,52271],{"class":72},[51,70603,70604],{"class":53,"line":10874},[51,70605,60922],{"class":57},[51,70607,70608,70610,70613,70615,70617,70619,70621,70624],{"class":53,"line":10882},[51,70609,12183],{"class":64},[51,70611,70612],{"class":175}," uname",[51,70614,14526],{"class":64},[51,70616,55360],{"class":72},[51,70618,55363],{"class":68},[51,70620,73],{"class":72},[51,70622,70623],{"class":282},"'.uname'",[51,70625,90],{"class":72},[51,70627,70628,70630,70632,70634,70636,70638,70640,70643],{"class":53,"line":10887},[51,70629,12183],{"class":64},[51,70631,16651],{"class":175},[51,70633,14526],{"class":64},[51,70635,55360],{"class":72},[51,70637,55363],{"class":68},[51,70639,73],{"class":72},[51,70641,70642],{"class":282},"'.age'",[51,70644,90],{"class":72},[51,70646,70647,70649,70652,70654,70656,70658,70660,70663],{"class":53,"line":17566},[51,70648,12183],{"class":64},[51,70650,70651],{"class":175}," gender",[51,70653,14526],{"class":64},[51,70655,55360],{"class":72},[51,70657,55363],{"class":68},[51,70659,73],{"class":72},[51,70661,70662],{"class":282},"'.gender'",[51,70664,90],{"class":72},[51,70666,70667,70669,70672,70674,70676,70678,70680,70683],{"class":53,"line":17572},[51,70668,12183],{"class":64},[51,70670,70671],{"class":175}," salary",[51,70673,14526],{"class":64},[51,70675,55360],{"class":72},[51,70677,55363],{"class":68},[51,70679,73],{"class":72},[51,70681,70682],{"class":282},"'.salary'",[51,70684,90],{"class":72},[51,70686,70687,70689,70692,70694,70696,70698,70700,70703],{"class":53,"line":17595},[51,70688,12183],{"class":64},[51,70690,70691],{"class":175}," city",[51,70693,14526],{"class":64},[51,70695,55360],{"class":72},[51,70697,55363],{"class":68},[51,70699,73],{"class":72},[51,70701,70702],{"class":282},"'.city'",[51,70704,90],{"class":72},[51,70706,70707,70709,70712,70714,70716,70718,70720,70723],{"class":53,"line":17601},[51,70708,12183],{"class":64},[51,70710,70711],{"class":175}," tbody",[51,70713,14526],{"class":64},[51,70715,55360],{"class":72},[51,70717,55363],{"class":68},[51,70719,73],{"class":72},[51,70721,70722],{"class":282},"'tbody'",[51,70724,90],{"class":72},[51,70726,70727],{"class":53,"line":17624},[51,70728,3480],{"emptyLinePlaceholder":1192},[51,70730,70731],{"class":53,"line":17638},[51,70732,70733],{"class":57},"    \u002F\u002F 获取所有带有name属性的元素\n",[51,70735,70736,70738,70741,70743,70745,70747,70749,70752],{"class":53,"line":17658},[51,70737,12183],{"class":64},[51,70739,70740],{"class":175}," items",[51,70742,14526],{"class":64},[51,70744,55360],{"class":72},[51,70746,56645],{"class":68},[51,70748,73],{"class":72},[51,70750,70751],{"class":282},"'[name]'",[51,70753,90],{"class":72},[51,70755,70756],{"class":53,"line":17664},[51,70757,70758],{"class":57},"    \u002F\u002F 声明一个空的数组\n",[51,70760,70761,70763,70765,70767],{"class":53,"line":17675},[51,70762,12183],{"class":64},[51,70764,58659],{"class":175},[51,70766,14526],{"class":64},[51,70768,52802],{"class":72},[51,70770,70771],{"class":53,"line":17698},[51,70772,70773],{"class":57},"    \u002F\u002F 1.录入模块\n",[51,70775,70776],{"class":53,"line":17720},[51,70777,70778],{"class":57},"    \u002F\u002F 1.1这是一个表单提交事件\n",[51,70780,70781,70783,70786,70788,70790,70792,70794,70797],{"class":53,"line":17725},[51,70782,12183],{"class":64},[51,70784,70785],{"class":175}," info",[51,70787,14526],{"class":64},[51,70789,55360],{"class":72},[51,70791,55363],{"class":68},[51,70793,73],{"class":72},[51,70795,70796],{"class":282},"'.info'",[51,70798,90],{"class":72},[51,70800,70801,70804,70806,70808,70811,70813,70815,70817,70819],{"class":53,"line":17731},[51,70802,70803],{"class":72},"    info.",[51,70805,58777],{"class":68},[51,70807,73],{"class":72},[51,70809,70810],{"class":282},"'submit'",[51,70812,13397],{"class":72},[51,70814,55413],{"class":64},[51,70816,2750],{"class":72},[51,70818,1331],{"class":78},[51,70820,13404],{"class":72},[51,70822,70823],{"class":53,"line":17745},[51,70824,70825],{"class":57},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[51,70827,70828,70831,70834],{"class":53,"line":17758},[51,70829,70830],{"class":72},"      e.",[51,70832,70833],{"class":68},"preventDefault",[51,70835,154],{"class":72},[51,70837,70838],{"class":53,"line":17763},[51,70839,60976],{"class":57},[51,70841,70842],{"class":53,"line":17777},[51,70843,3480],{"emptyLinePlaceholder":1192},[51,70845,70846],{"class":53,"line":17782},[51,70847,70848],{"class":57},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[51,70850,70851],{"class":53,"line":17788},[51,70852,70853],{"class":57},"      \u002F\u002F 先遍历循环\n",[51,70855,70856,70858,70860,70862,70864,70866,70868,70870,70872,70875,70877,70879,70881],{"class":53,"line":17793},[51,70857,53248],{"class":64},[51,70859,2750],{"class":72},[51,70861,52811],{"class":64},[51,70863,10400],{"class":72},[51,70865,108],{"class":64},[51,70867,5169],{"class":175},[51,70869,10407],{"class":72},[51,70871,2154],{"class":64},[51,70873,70874],{"class":72}," items.",[51,70876,52932],{"class":175},[51,70878,4291],{"class":72},[51,70880,3372],{"class":64},[51,70882,13404],{"class":72},[51,70884,70885,70887,70890,70892,70895],{"class":53,"line":17807},[51,70886,3577],{"class":64},[51,70888,70889],{"class":72}," (items[i].value ",[51,70891,55450],{"class":64},[51,70893,70894],{"class":282}," ''",[51,70896,13404],{"class":72},[51,70898,70899,70902,70905,70907,70910],{"class":53,"line":17812},[51,70900,70901],{"class":64},"          return",[51,70903,70904],{"class":68}," alert",[51,70906,73],{"class":72},[51,70908,70909],{"class":282},"'输入内容不能为空'",[51,70911,90],{"class":72},[51,70913,70914],{"class":53,"line":17817},[51,70915,3609],{"class":72},[51,70917,70918],{"class":53,"line":17831},[51,70919,53362],{"class":72},[51,70921,70922],{"class":53,"line":17843},[51,70923,3480],{"emptyLinePlaceholder":1192},[51,70925,70926],{"class":53,"line":17848},[51,70927,70928],{"class":57},"      \u002F\u002F 创建新的对象\n",[51,70930,70931,70933,70936,70938],{"class":53,"line":17861},[51,70932,59192],{"class":64},[51,70934,70935],{"class":175}," obj",[51,70937,14526],{"class":64},[51,70939,16534],{"class":72},[51,70941,70942,70945,70947,70949,70951],{"class":53,"line":17866},[51,70943,70944],{"class":72},"        stuID: arr.",[51,70946,52932],{"class":175},[51,70948,46530],{"class":64},[51,70950,26082],{"class":175},[51,70952,32430],{"class":72},[51,70954,70955],{"class":53,"line":17871},[51,70956,70957],{"class":72},"        uname: uname.value,\n",[51,70959,70960],{"class":53,"line":17876},[51,70961,70962],{"class":72},"        age: age.value,\n",[51,70964,70965],{"class":53,"line":17889},[51,70966,70967],{"class":72},"        gender: gender.value,\n",[51,70969,70970],{"class":53,"line":17894},[51,70971,70972],{"class":72},"        salary: salary.value,\n",[51,70974,70975],{"class":53,"line":33597},[51,70976,70977],{"class":72},"        city: city.value\n",[51,70979,70980],{"class":53,"line":33603},[51,70981,53362],{"class":72},[51,70983,70984],{"class":53,"line":33609},[51,70985,70986],{"class":57},"      \u002F\u002F console.log(obj);\n",[51,70988,70989],{"class":53,"line":33615},[51,70990,70991],{"class":57},"      \u002F\u002F 追加到数组里面\n",[51,70993,70994,70996,70998],{"class":53,"line":33621},[51,70995,58971],{"class":72},[51,70997,52848],{"class":68},[51,70999,71000],{"class":72},"(obj)\n",[51,71002,71003],{"class":53,"line":33632},[51,71004,71005],{"class":57},"      \u002F\u002F console.log(arr);\n",[51,71007,71008],{"class":53,"line":33638},[51,71009,71010],{"class":57},"      \u002F\u002F 清空表单  reset重置表单\n",[51,71012,71013,71016,71018,71021],{"class":53,"line":33658},[51,71014,71015],{"class":175},"      this",[51,71017,1804],{"class":72},[51,71019,71020],{"class":68},"reset",[51,71022,154],{"class":72},[51,71024,71025],{"class":53,"line":33664},[51,71026,71027],{"class":57},"      \u002F\u002F 调用渲染函数\n",[51,71029,71030,71033],{"class":53,"line":33675},[51,71031,71032],{"class":68},"      render",[51,71034,154],{"class":72},[51,71036,71037],{"class":53,"line":33681},[51,71038,34425],{"class":72},[51,71040,71041],{"class":53,"line":33687},[51,71042,71043],{"class":57},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[51,71045,71046,71049,71052],{"class":53,"line":33693},[51,71047,71048],{"class":64},"    function",[51,71050,71051],{"class":68}," render",[51,71053,11815],{"class":72},[51,71055,71056],{"class":53,"line":33699},[51,71057,71058],{"class":57},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[51,71060,71061,71064,71066],{"class":53,"line":33705},[51,71062,71063],{"class":72},"      tbody.innerHTML ",[51,71065,108],{"class":64},[51,71067,71068],{"class":282}," ''\n",[51,71070,71071],{"class":53,"line":33711},[51,71072,71073],{"class":57},"      \u002F\u002F 遍历数组\n",[51,71075,71076,71078,71080,71082,71084,71086,71088,71090,71092,71094,71096,71098,71100],{"class":53,"line":33717},[51,71077,53248],{"class":64},[51,71079,2750],{"class":72},[51,71081,52811],{"class":64},[51,71083,10400],{"class":72},[51,71085,108],{"class":64},[51,71087,5169],{"class":175},[51,71089,10407],{"class":72},[51,71091,2154],{"class":64},[51,71093,52929],{"class":72},[51,71095,52932],{"class":175},[51,71097,4291],{"class":72},[51,71099,3372],{"class":64},[51,71101,13404],{"class":72},[51,71103,71104,71106,71109,71111,71113,71116,71118,71121],{"class":53,"line":33737},[51,71105,62234],{"class":64},[51,71107,71108],{"class":175}," tr",[51,71110,14526],{"class":64},[51,71112,55360],{"class":72},[51,71114,71115],{"class":68},"createElement",[51,71117,73],{"class":72},[51,71119,71120],{"class":282},"'tr'",[51,71122,90],{"class":72},[51,71124,71125,71128,71130],{"class":53,"line":33743},[51,71126,71127],{"class":72},"        tr.innerHTML ",[51,71129,108],{"class":64},[51,71131,71132],{"class":282}," `\n",[51,71134,71135,71138,71140,71142,71144,71147,71150],{"class":53,"line":33759},[51,71136,71137],{"class":282},"        \u003Ctd>${",[51,71139,4957],{"class":72},[51,71141,2134],{"class":282},[51,71143,1689],{"class":72},[51,71145,71146],{"class":282},"].",[51,71148,71149],{"class":72},"stuID",[51,71151,71152],{"class":282},"}\u003C\u002Ftd>\n",[51,71154,71155,71158,71160,71162,71164,71166,71169],{"class":53,"line":33765},[51,71156,71157],{"class":282},"          \u003Ctd>${",[51,71159,4957],{"class":72},[51,71161,2134],{"class":282},[51,71163,1689],{"class":72},[51,71165,71146],{"class":282},[51,71167,71168],{"class":72},"uname",[51,71170,71152],{"class":282},[51,71172,71173,71175,71177,71179,71181,71183,71186],{"class":53,"line":33779},[51,71174,71157],{"class":282},[51,71176,4957],{"class":72},[51,71178,2134],{"class":282},[51,71180,1689],{"class":72},[51,71182,71146],{"class":282},[51,71184,71185],{"class":72},"age",[51,71187,71152],{"class":282},[51,71189,71190,71192,71194,71196,71198,71200,71203],{"class":53,"line":33785},[51,71191,71157],{"class":282},[51,71193,4957],{"class":72},[51,71195,2134],{"class":282},[51,71197,1689],{"class":72},[51,71199,71146],{"class":282},[51,71201,71202],{"class":72},"gender",[51,71204,71152],{"class":282},[51,71206,71207,71209,71211,71213,71215,71217,71220],{"class":53,"line":33800},[51,71208,71157],{"class":282},[51,71210,4957],{"class":72},[51,71212,2134],{"class":282},[51,71214,1689],{"class":72},[51,71216,71146],{"class":282},[51,71218,71219],{"class":72},"salary",[51,71221,71152],{"class":282},[51,71223,71224,71226,71228,71230,71232,71234,71237],{"class":53,"line":33806},[51,71225,71157],{"class":282},[51,71227,4957],{"class":72},[51,71229,2134],{"class":282},[51,71231,1689],{"class":72},[51,71233,71146],{"class":282},[51,71235,71236],{"class":72},"city",[51,71238,71152],{"class":282},[51,71240,71241],{"class":53,"line":33815},[51,71242,70557],{"class":282},[51,71244,71245,71248,71250],{"class":53,"line":33821},[51,71246,71247],{"class":282},"            \u003Ca href=\"javascript:\" data-id=${",[51,71249,1689],{"class":72},[51,71251,71252],{"class":282},"}>删除\u003C\u002Fa>\n",[51,71254,71255],{"class":53,"line":33830},[51,71256,71257],{"class":282},"          \u003C\u002Ftd> \n",[51,71259,71260],{"class":53,"line":33836},[51,71261,71262],{"class":282},"          `\n",[51,71264,71265],{"class":53,"line":33842},[51,71266,71267],{"class":57},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[51,71269,71270,71273,71276],{"class":53,"line":33851},[51,71271,71272],{"class":72},"        tbody.",[51,71274,71275],{"class":68},"appendChild",[51,71277,71278],{"class":72},"(tr)\n",[51,71280,71281],{"class":53,"line":33857},[51,71282,53362],{"class":72},[51,71284,71285],{"class":53,"line":33868},[51,71286,3267],{"class":72},[51,71288,71289],{"class":53,"line":33874},[51,71290,3480],{"emptyLinePlaceholder":1192},[51,71292,71293],{"class":53,"line":33893},[51,71294,71295],{"class":57},"    \u002F\u002F 3.删除委托\n",[51,71297,71298],{"class":53,"line":33899},[51,71299,71300],{"class":57},"    \u002F\u002F 3.1 事件委托 tbody\n",[51,71302,71303,71306,71308,71310,71312,71314,71316,71318,71320],{"class":53,"line":33910},[51,71304,71305],{"class":72},"    tbody.",[51,71307,58777],{"class":68},[51,71309,73],{"class":72},[51,71311,58782],{"class":282},[51,71313,13397],{"class":72},[51,71315,55413],{"class":64},[51,71317,2750],{"class":72},[51,71319,1331],{"class":78},[51,71321,13404],{"class":72},[51,71323,71324,71326,71328,71330,71332],{"class":53,"line":33916},[51,71325,55444],{"class":64},[51,71327,67998],{"class":72},[51,71329,55450],{"class":64},[51,71331,69220],{"class":282},[51,71333,13404],{"class":72},[51,71335,71336],{"class":53,"line":33936},[51,71337,71338],{"class":57},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[51,71340,71341],{"class":53,"line":33952},[51,71342,71343],{"class":57},"        \u002F\u002F console.log(e.target.dataset.id);\n",[51,71345,71346],{"class":53,"line":33958},[51,71347,71348],{"class":57},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[51,71350,71351,71354,71356,71359,71361],{"class":53,"line":33972},[51,71352,71353],{"class":72},"        arr.",[51,71355,58974],{"class":68},[51,71357,71358],{"class":72},"(e.target.dataset.id, ",[51,71360,791],{"class":175},[51,71362,90],{"class":72},[51,71364,71365],{"class":53,"line":33978},[51,71366,71367],{"class":57},"        \u002F\u002F 重新渲染一次\n",[51,71369,71370,71373],{"class":53,"line":33984},[51,71371,71372],{"class":68},"        render",[51,71374,154],{"class":72},[51,71376,71377],{"class":53,"line":33995},[51,71378,53362],{"class":72},[51,71380,71381],{"class":53,"line":34001},[51,71382,34425],{"class":72},[51,71384,71385,71387,71389],{"class":53,"line":34007},[51,71386,53381],{"class":72},[51,71388,52777],{"class":52264},[51,71390,52271],{"class":72},[51,71392,71393],{"class":53,"line":34017},[51,71394,3480],{"emptyLinePlaceholder":1192},[51,71396,71397,71399,71401],{"class":53,"line":34023},[51,71398,52749],{"class":72},[51,71400,52764],{"class":52264},[51,71402,52271],{"class":72},[51,71404,71405],{"class":53,"line":34034},[51,71406,3480],{"emptyLinePlaceholder":1192},[51,71408,71409,71411,71413],{"class":53,"line":34040},[51,71410,52749],{"class":72},[51,71412,51599],{"class":52264},[51,71414,52271],{"class":72},[40,71416,71417],{},"样式：",[29,71419,71423],{"className":71420,"code":71421,"language":71422,"meta":35,"style":35},"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",[37,71424,71425,71430,71440,71449,71453,71457,71462,71472,71477,71481,71486,71496,71501,71510,71514,71518,71523,71528,71538,71548,71553,71557,71562,71571,71581,71586,71596,71606,71610,71615,71623,71627,71632,71637,71642,71650,71659,71663,71668,71677,71681,71686,71695,71699,71704,71713,71722,71730,71734,71739,71748,71758,71767,71777,71783,71792,71802,71812,71816,71821,71830,71838,71848,71856,71865,71874,71884,71892,71896,71901,71910],{"__ignoreMap":35},[51,71426,71427],{"class":53,"line":54},[51,71428,71429],{"class":72},"* {\n",[51,71431,71432,71435,71437],{"class":53,"line":61},[51,71433,71434],{"class":52264},"  margin",[51,71436,52401],{"class":72},[51,71438,71439],{"class":282},"0;\n",[51,71441,71442,71445,71447],{"class":53,"line":93},[51,71443,71444],{"class":282},"  padding",[51,71446,52401],{"class":72},[51,71448,71439],{"class":282},[51,71450,71451],{"class":53,"line":99},[51,71452,132],{"class":72},[51,71454,71455],{"class":53,"line":120},[51,71456,3480],{"emptyLinePlaceholder":1192},[51,71458,71459],{"class":53,"line":129},[51,71460,71461],{"class":282},"a {\n",[51,71463,71464,71467,71469],{"class":53,"line":206},[51,71465,71466],{"class":52264},"  text-decoration",[51,71468,52401],{"class":72},[51,71470,71471],{"class":282},"none;\n",[51,71473,71474],{"class":53,"line":212},[51,71475,71476],{"class":282},"  color:#721c24;\n",[51,71478,71479],{"class":53,"line":227},[51,71480,132],{"class":72},[51,71482,71483],{"class":53,"line":370},[51,71484,71485],{"class":282},"h1 {\n",[51,71487,71488,71491,71493],{"class":53,"line":387},[51,71489,71490],{"class":52264},"  text-align",[51,71492,52401],{"class":72},[51,71494,71495],{"class":282},"center;\n",[51,71497,71498],{"class":53,"line":404},[51,71499,71500],{"class":282},"  color:#333;\n",[51,71502,71503,71505,71507],{"class":53,"line":415},[51,71504,71434],{"class":52264},[51,71506,52401],{"class":72},[51,71508,71509],{"class":282},"20px 0;\n",[51,71511,71512],{"class":53,"line":420},[51,71513,3754],{"class":72},[51,71515,71516],{"class":53,"line":429},[51,71517,132],{"class":72},[51,71519,71520],{"class":53,"line":434},[51,71521,71522],{"class":282},"table {\n",[51,71524,71525],{"class":53,"line":448},[51,71526,71527],{"class":282},"  margin:0 auto;\n",[51,71529,71530,71533,71535],{"class":53,"line":462},[51,71531,71532],{"class":52264},"  width",[51,71534,52401],{"class":72},[51,71536,71537],{"class":282},"800px;\n",[51,71539,71540,71543,71545],{"class":53,"line":470},[51,71541,71542],{"class":52264},"  border-collapse",[51,71544,52401],{"class":72},[51,71546,71547],{"class":282},"collapse;\n",[51,71549,71550],{"class":53,"line":2783},[51,71551,71552],{"class":282},"  color:#004085;\n",[51,71554,71555],{"class":53,"line":2788},[51,71556,132],{"class":72},[51,71558,71559],{"class":53,"line":2817},[51,71560,71561],{"class":282},"th {\n",[51,71563,71564,71566,71568],{"class":53,"line":2822},[51,71565,71444],{"class":52264},[51,71567,52401],{"class":72},[51,71569,71570],{"class":282},"10px;\n",[51,71572,71573,71576,71578],{"class":53,"line":2839},[51,71574,71575],{"class":52264},"  background",[51,71577,52401],{"class":72},[51,71579,71580],{"class":57},"#cfe5ff;\n",[51,71582,71583],{"class":53,"line":2844},[51,71584,71585],{"class":72},"  \n",[51,71587,71588,71591,71593],{"class":53,"line":2849},[51,71589,71590],{"class":52264},"  font-size",[51,71592,52401],{"class":72},[51,71594,71595],{"class":282},"20px;\n",[51,71597,71598,71601,71603],{"class":53,"line":2854},[51,71599,71600],{"class":52264},"  font-weight",[51,71602,52401],{"class":72},[51,71604,71605],{"class":282},"400;\n",[51,71607,71608],{"class":53,"line":2868},[51,71609,132],{"class":72},[51,71611,71612],{"class":53,"line":2873},[51,71613,71614],{"class":282},"td,th {\n",[51,71616,71617,71620],{"class":53,"line":3657},[51,71618,71619],{"class":282},"  border:1px solid",[51,71621,71622],{"class":57}," #b8daff;\n",[51,71624,71625],{"class":53,"line":3671},[51,71626,132],{"class":72},[51,71628,71629],{"class":53,"line":3679},[51,71630,71631],{"class":282},"td {\n",[51,71633,71634],{"class":53,"line":3684},[51,71635,71636],{"class":282},"  padding:10px;\n",[51,71638,71639],{"class":53,"line":3690},[51,71640,71641],{"class":282},"  color:#666;\n",[51,71643,71644,71646,71648],{"class":53,"line":3696},[51,71645,71490],{"class":52264},[51,71647,52401],{"class":72},[51,71649,71495],{"class":282},[51,71651,71652,71654,71656],{"class":53,"line":3701},[51,71653,71590],{"class":52264},[51,71655,52401],{"class":72},[51,71657,71658],{"class":282},"16px;\n",[51,71660,71661],{"class":53,"line":8910},[51,71662,132],{"class":72},[51,71664,71665],{"class":53,"line":8934},[51,71666,71667],{"class":282},"tbody tr {\n",[51,71669,71670,71672,71674],{"class":53,"line":8939},[51,71671,71575],{"class":52264},[51,71673,52401],{"class":72},[51,71675,71676],{"class":57},"#fff;\n",[51,71678,71679],{"class":53,"line":8945},[51,71680,132],{"class":72},[51,71682,71683],{"class":53,"line":8972},[51,71684,71685],{"class":282},"tbody tr:hover {\n",[51,71687,71688,71690,71692],{"class":53,"line":8977},[51,71689,71575],{"class":52264},[51,71691,52401],{"class":72},[51,71693,71694],{"class":57},"#e1ecf8;\n",[51,71696,71697],{"class":53,"line":8983},[51,71698,132],{"class":72},[51,71700,71701],{"class":53,"line":8995},[51,71702,71703],{"class":282},".info {\n",[51,71705,71706,71708,71710],{"class":53,"line":9007},[51,71707,71532],{"class":52264},[51,71709,52401],{"class":72},[51,71711,71712],{"class":282},"900px;\n",[51,71714,71715,71717,71719],{"class":53,"line":9019},[51,71716,71434],{"class":52264},[51,71718,52401],{"class":72},[51,71720,71721],{"class":282},"50px auto;\n",[51,71723,71724,71726,71728],{"class":53,"line":10678},[51,71725,71490],{"class":52264},[51,71727,52401],{"class":72},[51,71729,71495],{"class":282},[51,71731,71732],{"class":53,"line":10703},[51,71733,132],{"class":72},[51,71735,71736],{"class":53,"line":10726},[51,71737,71738],{"class":282},".info  input, .info select {\n",[51,71740,71741,71743,71745],{"class":53,"line":10750},[51,71742,71532],{"class":52264},[51,71744,52401],{"class":72},[51,71746,71747],{"class":282},"80px;\n",[51,71749,71750,71753,71755],{"class":53,"line":10755},[51,71751,71752],{"class":52264},"  height",[51,71754,52401],{"class":72},[51,71756,71757],{"class":282},"27px;\n",[51,71759,71760,71763,71765],{"class":53,"line":10760},[51,71761,71762],{"class":52264},"  outline",[51,71764,52401],{"class":72},[51,71766,71471],{"class":282},[51,71768,71769,71772,71774],{"class":53,"line":10765},[51,71770,71771],{"class":52264},"  border-radius",[51,71773,52401],{"class":72},[51,71775,71776],{"class":282},"5px;\n",[51,71778,71779,71781],{"class":53,"line":10774},[51,71780,71619],{"class":282},[51,71782,71622],{"class":57},[51,71784,71785,71788,71790],{"class":53,"line":10779},[51,71786,71787],{"class":52264},"  padding-left",[51,71789,52401],{"class":72},[51,71791,71776],{"class":282},[51,71793,71794,71797,71799],{"class":53,"line":10785},[51,71795,71796],{"class":52264},"  box-sizing",[51,71798,52401],{"class":72},[51,71800,71801],{"class":282},"border-box;\n",[51,71803,71804,71807,71809],{"class":53,"line":10806},[51,71805,71806],{"class":52264},"  margin-right",[51,71808,52401],{"class":72},[51,71810,71811],{"class":282},"15px;\n",[51,71813,71814],{"class":53,"line":10812},[51,71815,132],{"class":72},[51,71817,71818],{"class":53,"line":10826},[51,71819,71820],{"class":282},".info button {\n",[51,71822,71823,71825,71827],{"class":53,"line":10832},[51,71824,71532],{"class":52264},[51,71826,52401],{"class":72},[51,71828,71829],{"class":282},"60px;\n",[51,71831,71832,71834,71836],{"class":53,"line":10859},[51,71833,71752],{"class":52264},[51,71835,52401],{"class":72},[51,71837,71757],{"class":282},[51,71839,71840,71843,71845],{"class":53,"line":10868},[51,71841,71842],{"class":52264},"  background-color",[51,71844,52401],{"class":72},[51,71846,71847],{"class":57},"#004085;\n",[51,71849,71850,71852,71854],{"class":53,"line":10874},[51,71851,71762],{"class":52264},[51,71853,52401],{"class":72},[51,71855,71471],{"class":282},[51,71857,71858,71861,71863],{"class":53,"line":10882},[51,71859,71860],{"class":52264},"  border",[51,71862,52401],{"class":72},[51,71864,71439],{"class":282},[51,71866,71867,71870,71872],{"class":53,"line":10887},[51,71868,71869],{"class":52264},"  color",[51,71871,52401],{"class":72},[51,71873,71676],{"class":57},[51,71875,71876,71879,71881],{"class":53,"line":17566},[51,71877,71878],{"class":52264},"  cursor",[51,71880,52401],{"class":72},[51,71882,71883],{"class":282},"pointer;\n",[51,71885,71886,71888,71890],{"class":53,"line":17572},[51,71887,71771],{"class":52264},[51,71889,52401],{"class":72},[51,71891,71776],{"class":282},[51,71893,71894],{"class":53,"line":17595},[51,71895,132],{"class":72},[51,71897,71898],{"class":53,"line":17601},[51,71899,71900],{"class":282},".info .age {\n",[51,71902,71903,71905,71907],{"class":53,"line":17624},[51,71904,71532],{"class":52264},[51,71906,52401],{"class":72},[51,71908,71909],{"class":282},"50px;\n",[51,71911,71912],{"class":53,"line":17638},[51,71913,132],{"class":72},[40,71915,71916],{},"思路：",[40,71918,71919],{},[2564,71920],{"alt":35,"src":71921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[40,71923,71924],{},[2564,71925],{"alt":35,"src":71926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[40,71928,71929],{},[2564,71930],{"alt":35,"src":71931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[1233,71933,71935],{"id":71934},"_3315-重绘回流","3.3.15 重绘回流",[40,71937,71938],{},[2564,71939],{"alt":35,"src":71940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[40,71942,71943],{},[2564,71944],{"alt":35,"src":71945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[40,71947,71948],{},[2564,71949],{"alt":35,"src":71950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71952,71954],{"id":71953},"_34-bom","3.4 BOM",[40,71956,71957],{},[2564,71958],{"alt":35,"src":71959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[40,71961,71962],{},"平时写的document省略了window而已，实际上是window.document",[40,71964,71965],{},"函数也是这样，调用的时候实际为window.fn()",[40,71967,71968],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[40,71970,71971],{},"window大部分情况下可以省略",[1233,71973,71975],{"id":71974},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[40,71977,71978],{},"只执行一次",[40,71980,71981],{},[2564,71982],{"alt":35,"src":71983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[40,71985,71986],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[40,71988,71989],{},[2564,71990],{"alt":35,"src":71991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[1233,71993,71995],{"id":71994},"_342-js执行机制","3.4.2 JS执行机制",[40,71997,71998],{},[2564,71999],{"alt":35,"src":72000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[40,72002,72003],{},"两个的结果都是1111 3333 2222",[40,72005,72006],{},[2564,72007],{"alt":35,"src":72008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[40,72010,72011],{},[2564,72012],{"alt":35,"src":72013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[40,72015,72016],{},[2564,72017],{"alt":35,"src":72018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[40,72020,72021],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[40,72023,72024],{},"工作流程：",[40,72026,72027],{},[2564,72028],{"alt":35,"src":72029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[40,72031,72032],{},[2564,72033],{"alt":35,"src":72034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[40,72036,72037],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[40,72039,72040],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[1233,72042,72044],{"id":72043},"_343-location对象","3.4.3 location对象",[40,72046,72047],{},"location对象属于window这个全局对象下的，可以 省略window",[40,72049,72050],{},[2564,72051],{"alt":35,"src":72052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[40,72054,72055],{},"href可以跳转页面",[19,72057,72058],{},[22,72059,72060],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[40,72062,72063],{},"search得到提交信息之后网站后边的地址",[40,72065,72066],{},[2564,72067],{"alt":35,"src":72068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[40,72070,72071],{},[2564,72072],{"alt":35,"src":72073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[19,72075,72076],{"start":61},[22,72077,72078],{},"hash:这个获取单页面应用#后边的地址",[40,72080,72081],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[40,72083,72084],{},[2564,72085],{"alt":35,"src":72086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[29,72088,72090],{"className":54031,"code":72089,"language":54033,"meta":35,"style":35},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[37,72091,72092,72112,72132],{"__ignoreMap":35},[51,72093,72094,72096,72098,72100,72102,72105,72108,72110],{"class":53,"line":54},[51,72095,53108],{"class":72},[51,72097,981],{"class":52264},[51,72099,62021],{"class":68},[51,72101,108],{"class":72},[51,72103,72104],{"class":282},"\"#\u002Fmy\"",[51,72106,72107],{"class":72},">我的\u003C\u002F",[51,72109,981],{"class":52264},[51,72111,52271],{"class":72},[51,72113,72114,72116,72118,72120,72122,72125,72128,72130],{"class":53,"line":61},[51,72115,53108],{"class":72},[51,72117,981],{"class":52264},[51,72119,62021],{"class":68},[51,72121,108],{"class":72},[51,72123,72124],{"class":282},"\"#\u002Ffriend\"",[51,72126,72127],{"class":72},">关注\u003C\u002F",[51,72129,981],{"class":52264},[51,72131,52271],{"class":72},[51,72133,72134,72136,72138,72140,72142,72145,72148,72150],{"class":53,"line":93},[51,72135,53108],{"class":72},[51,72137,981],{"class":52264},[51,72139,62021],{"class":68},[51,72141,108],{"class":72},[51,72143,72144],{"class":282},"\"#\u002Fdownload\"",[51,72146,72147],{"class":72},">下载\u003C\u002F",[51,72149,981],{"class":52264},[51,72151,52271],{"class":72},[40,72153,72154],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[19,72156,72157],{"start":93},[22,72158,72159,72160,72162,72163,72165],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54680,72161],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54680,72164],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[1233,72167,72169],{"id":72168},"_345-navigator对象","3.4.5 navigator对象",[40,72171,72172],{},[2564,72173],{"alt":35,"src":72174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[29,72176,72180],{"className":72177,"code":72178,"language":72179,"meta":35,"style":35},"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",[37,72181,72182,72187,72198,72210,72215,72266,72307,72312,72325,72337,72342],{"__ignoreMap":35},[51,72183,72184],{"class":53,"line":54},[51,72185,72186],{"class":57},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[51,72188,72189,72191,72193,72195],{"class":53,"line":61},[51,72190,1479],{"class":64},[51,72192,73],{"class":72},[51,72194,55413],{"class":64},[51,72196,72197],{"class":72}," () { \n",[51,72199,72200,72202,72205,72207],{"class":53,"line":93},[51,72201,7754],{"class":64},[51,72203,72204],{"class":175}," userAgent",[51,72206,14526],{"class":64},[51,72208,72209],{"class":72}," navigator.userAgent \n",[51,72211,72212],{"class":53,"line":99},[51,72213,72214],{"class":57},"\u002F\u002F 验证是否为Android或iPhone \n",[51,72216,72217,72219,72222,72224,72227,72230,72232,72234,72237,72239,72242,72246,72248,72250,72252,72255,72257,72259,72261,72263],{"class":53,"line":120},[51,72218,7754],{"class":64},[51,72220,72221],{"class":175}," android",[51,72223,14526],{"class":64},[51,72225,72226],{"class":72}," userAgent.",[51,72228,72229],{"class":68},"match",[51,72231,73],{"class":72},[51,72233,1830],{"class":282},[51,72235,72236],{"class":48941},"(Android);",[51,72238,978],{"class":64},[51,72240,72241],{"class":175},"[\\s",[51,72243,72245],{"class":72244},"snhLl","\\\u002F",[51,72247,2184],{"class":175},[51,72249,114],{"class":64},[51,72251,73],{"class":48941},[51,72253,72254],{"class":175},"[\\d.]",[51,72256,114],{"class":64},[51,72258,1677],{"class":48941},[51,72260,978],{"class":64},[51,72262,1830],{"class":282},[51,72264,72265],{"class":72},") \n",[51,72267,72268,72270,72273,72275,72277,72279,72281,72283,72286,72289,72292,72294,72296,72299,72301,72303,72305],{"class":53,"line":129},[51,72269,7754],{"class":64},[51,72271,72272],{"class":175}," iphone",[51,72274,14526],{"class":64},[51,72276,72226],{"class":72},[51,72278,72229],{"class":68},[51,72280,73],{"class":72},[51,72282,1830],{"class":282},[51,72284,72285],{"class":48941},"(iPhone",[51,72287,72288],{"class":175},"\\s",[51,72290,72291],{"class":48941},"OS)",[51,72293,72288],{"class":175},[51,72295,73],{"class":48941},[51,72297,72298],{"class":175},"[\\d_]",[51,72300,114],{"class":64},[51,72302,1677],{"class":48941},[51,72304,1830],{"class":282},[51,72306,72265],{"class":72},[51,72308,72309],{"class":53,"line":206},[51,72310,72311],{"class":57},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[51,72313,72314,72316,72319,72322],{"class":53,"line":212},[51,72315,2633],{"class":64},[51,72317,72318],{"class":72}," (android ",[51,72320,72321],{"class":64},"||",[51,72323,72324],{"class":72}," iphone) { \n",[51,72326,72327,72330,72332,72335],{"class":53,"line":227},[51,72328,72329],{"class":72},"location.href ",[51,72331,108],{"class":64},[51,72333,72334],{"class":282}," 'http:\u002F\u002Fm.itcast.cn'",[51,72336,3754],{"class":72},[51,72338,72339],{"class":53,"line":370},[51,72340,72341],{"class":72},"} \n",[51,72343,72344],{"class":53,"line":387},[51,72345,72346],{"class":72},"})()\n",[1233,72348,72350],{"id":72349},"_346-histroy对象","3.4.6 histroy对象",[40,72352,72353],{},[2564,72354],{"alt":35,"src":72355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[40,72357,72358],{},"浏览器地址的前进与后退!!!",[40,72360,72361],{},"history.back() 等效于 history.go(-1)",[40,72363,72364],{},"history.forward() 等效于 history.go(1)",[14,72366,72368],{"id":72367},"_35-本地存储","3.5 本地存储",[19,72370,72371,72374,72377],{},[22,72372,72373],{},"数据存储在用户浏览器中",[22,72375,72376],{},"设置、读取方便、甚至页面刷新不丢失数据",[22,72378,72379],{},"容量较大，sessionStorage和localStorage约 5M 左右",[1233,72381,72383],{"id":72382},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[40,72385,72386],{},"只能存储字符串",[40,72388,72389],{},[2564,72390],{"alt":35,"src":72391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[40,72393,72394],{},[2564,72395],{"alt":35,"src":72396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[40,72398,72399],{},"键值对要加引号,不然就会当变量来看了",[40,72401,72402],{},"localStorage.setItem('uname', 'pink')",[40,72404,72405],{},"刷新之后信息不再丢失",[40,72407,72408],{},"操作key,value会跟着变",[40,72410,72411],{},"删除只删除键就可以,即名字",[40,72413,72402],{},[40,72415,72416],{},"改:",[40,72418,72419],{},"localStorage.setItem('uname','red')",[40,72421,72422],{},"有这个键就是改,没有这个键就是改",[40,72424,72425],{},[2564,72426],{"alt":35,"src":72427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[40,72429,72430],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[40,72432,72433],{},[2564,72434],{"alt":35,"src":72435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[40,72437,72438],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[1233,72440,72442],{"id":72441},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[40,72444,72445],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[40,72447,72448],{},"特性:",[19,72450,72451,72454,72457,72460],{},[22,72452,72453],{},"生命周期为关闭浏览器窗口",[22,72455,72456],{},"在同一个窗口(页面)下数据可以共享",[22,72458,72459],{},"以键值对的形式存储使用",[22,72461,72462],{},"用法跟localStorage 基本相同",[1233,72464,72466],{"id":72465},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[40,72468,72469],{},"本地只能存储字符串,无法直接存储复杂数据类型",[29,72471,72473],{"className":54031,"code":72472,"language":54033,"meta":35,"style":35},"\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",[37,72474,72475,72483,72488,72493,72498,72503,72507,72512,72517],{"__ignoreMap":35},[51,72476,72477,72479,72481],{"class":53,"line":54},[51,72478,2154],{"class":72},[51,72480,52777],{"class":52264},[51,72482,52271],{"class":72},[51,72484,72485],{"class":53,"line":61},[51,72486,72487],{"class":72},"    const obj = {\n",[51,72489,72490],{"class":53,"line":93},[51,72491,72492],{"class":72},"      uname: 'pink老师',\n",[51,72494,72495],{"class":53,"line":99},[51,72496,72497],{"class":72},"      age: 18,\n",[51,72499,72500],{"class":53,"line":120},[51,72501,72502],{"class":72},"      gender: '女'\n",[51,72504,72505],{"class":53,"line":129},[51,72506,3267],{"class":72},[51,72508,72509],{"class":53,"line":206},[51,72510,72511],{"class":72},"    \u002F\u002F 存储复杂数据类型\n",[51,72513,72514],{"class":53,"line":212},[51,72515,72516],{"class":72},"    localStorage.setItem('obj', obj)\n",[51,72518,72519,72521,72523],{"class":53,"line":227},[51,72520,53381],{"class":72},[51,72522,52777],{"class":52264},[51,72524,52271],{"class":72},[40,72526,72527],{},[2564,72528],{"alt":35,"src":72529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[40,72531,72532],{},"如果获取一下数据:",[40,72534,72535],{},"log(localStorage.getItem('obj'))",[40,72537,72538],{},[2564,72539],{"alt":35,"src":72540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[40,72542,72543],{},"发现直接存对象是使用不了的!!!",[22960,72545,72547],{"id":72546},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[40,72549,72550],{},[2564,72551],{"alt":35,"src":72552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[29,72554,72556],{"className":51597,"code":72555,"language":51599,"meta":35,"style":35},"\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",[37,72557,72558,72566,72576,72586,72595,72603,72607,72611,72637,72656,72664,72668,72673,72678],{"__ignoreMap":35},[51,72559,72560,72562,72564],{"class":53,"line":54},[51,72561,2154],{"class":72},[51,72563,52777],{"class":52264},[51,72565,52271],{"class":72},[51,72567,72568,72570,72572,72574],{"class":53,"line":61},[51,72569,12183],{"class":64},[51,72571,70935],{"class":175},[51,72573,14526],{"class":64},[51,72575,16534],{"class":72},[51,72577,72578,72581,72584],{"class":53,"line":93},[51,72579,72580],{"class":72},"      uname: ",[51,72582,72583],{"class":282},"'pink老师'",[51,72585,32430],{"class":72},[51,72587,72588,72591,72593],{"class":53,"line":99},[51,72589,72590],{"class":72},"      age: ",[51,72592,1896],{"class":175},[51,72594,32430],{"class":72},[51,72596,72597,72600],{"class":53,"line":120},[51,72598,72599],{"class":72},"      gender: ",[51,72601,72602],{"class":282},"'女'\n",[51,72604,72605],{"class":53,"line":129},[51,72606,3267],{"class":72},[51,72608,72609],{"class":53,"line":206},[51,72610,72511],{"class":57},[51,72612,72613,72616,72619,72621,72624,72626,72629,72631,72634],{"class":53,"line":212},[51,72614,72615],{"class":72},"  localStorage.",[51,72617,72618],{"class":68},"setItem",[51,72620,73],{"class":72},[51,72622,72623],{"class":282},"'obj'",[51,72625,13397],{"class":72},[51,72627,72628],{"class":175},"JSON",[51,72630,1804],{"class":72},[51,72632,72633],{"class":68},"stringify",[51,72635,72636],{"class":72},"(obj))\n",[51,72638,72639,72642,72644,72647,72650,72652,72654],{"class":53,"line":227},[51,72640,72641],{"class":72},"  console.",[51,72643,59211],{"class":68},[51,72645,72646],{"class":72},"(localStorage.",[51,72648,72649],{"class":68},"getItem",[51,72651,73],{"class":72},[51,72653,72623],{"class":282},[51,72655,31461],{"class":72},[51,72657,72658,72660,72662],{"class":53,"line":370},[51,72659,53381],{"class":72},[51,72661,52777],{"class":52264},[51,72663,52271],{"class":72},[51,72665,72666],{"class":53,"line":387},[51,72667,71585],{"class":72},[51,72669,72670],{"class":53,"line":404},[51,72671,72672],{"class":72},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[51,72674,72675],{"class":53,"line":415},[51,72676,72677],{"class":72},"  类型是字符串的\n",[51,72679,72680],{"class":53,"line":420},[51,72681,72682],{"class":72},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22960,72684,72686],{"id":72685},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[40,72688,72689],{},[2564,72690],{"alt":35,"src":72691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[40,72693,72694],{},[2564,72695],{"alt":35,"src":72696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[29,72698,72700],{"className":54031,"code":72699,"language":54033,"meta":35,"style":35},"  \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",[37,72701,72702,72710,72714,72718,72722,72726,72730,72735,72740,72745,72750,72755,72760,72765,72770],{"__ignoreMap":35},[51,72703,72704,72706,72708],{"class":53,"line":54},[51,72705,53108],{"class":72},[51,72707,52777],{"class":52264},[51,72709,52271],{"class":72},[51,72711,72712],{"class":53,"line":61},[51,72713,72487],{"class":72},[51,72715,72716],{"class":53,"line":93},[51,72717,72492],{"class":72},[51,72719,72720],{"class":53,"line":99},[51,72721,72497],{"class":72},[51,72723,72724],{"class":53,"line":120},[51,72725,72502],{"class":72},[51,72727,72728],{"class":53,"line":129},[51,72729,3267],{"class":72},[51,72731,72732],{"class":53,"line":206},[51,72733,72734],{"class":72},"    \u002F\u002F 1.存储复杂数据类型\n",[51,72736,72737],{"class":53,"line":212},[51,72738,72739],{"class":72},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[51,72741,72742],{"class":53,"line":227},[51,72743,72744],{"class":72},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[51,72746,72747],{"class":53,"line":370},[51,72748,72749],{"class":72},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[51,72751,72752],{"class":53,"line":387},[51,72753,72754],{"class":72},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[51,72756,72757],{"class":53,"line":404},[51,72758,72759],{"class":72},"    \u002F\u002F 取\n",[51,72761,72762],{"class":53,"line":415},[51,72763,72764],{"class":72},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[51,72766,72767],{"class":53,"line":420},[51,72768,72769],{"class":72},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[51,72771,72772,72774,72776],{"class":53,"line":429},[51,72773,53381],{"class":72},[51,72775,52777],{"class":52264},[51,72777,52271],{"class":72},[40,72779,72780],{},[2564,72781],{"alt":35,"src":72782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[1233,72784,72786],{"id":72785},"_356-数组map方法","3.5.6 数组map方法",[40,72788,72789],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[40,72791,72792],{},[2564,72793],{"alt":35,"src":72794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[40,72796,72797],{},[2564,72798],{"alt":35,"src":72799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[40,72801,72802,72805],{},[840,72803,72804],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[40,72807,72808],{},"map有返回值，但是forEach没有返回值",[40,72810,72811],{},"map是个方法。用的时候要加 ()",[40,72813,72814],{},"map返回的是一个数组",[1233,72816,72818],{"id":72817},"_357-数组中join方法","3.5.7 数组中join方法",[40,72820,72821],{},[2564,72822],{"alt":35,"src":72823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[40,72825,72826],{},"类似于python中拼接字符串一样！",[19,72828,72829,72832,72835],{},[22,72830,72831],{},"小括号为空则逗号分开",[22,72833,72834],{},"小括号为空字符串 ''，则元素之间没有分隔符",[22,72836,72837],{},"小括号用啥符号就用进行分割",[1233,72839,72841],{"id":72840},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[19,72843,72844,72847,72850,72853,72856],{},[22,72845,72846],{},"记住本地时间获取快速方式：new Date().toDateString()",[22,72848,72849],{},"尽量减少DOM操作，用好map+join的渲染方式",[22,72851,72852],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[22,72854,72855],{},"return可以实现函数的结束",[22,72857,72858],{},"禁止跳转是 preventDefault() 不要忘记",[29,72860,72862],{"className":51597,"code":72861,"language":51599,"meta":35,"style":35},"\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",[37,72863,72864,72874,72888,72892,72900,72914,72934,72946,72954,72960,72970,72980,72984,72988,72994,73004,73016,73020,73024,73031,73043,73057,73067,73071,73075,73082,73089,73096,73108,73120,73130,73142,73146,73150,73157,73164,73176,73188,73198,73210,73240,73244,73248,73255,73267,73279,73303,73313,73323,73327,73331,73339,73350,73362,73374,73386,73403,73415,73427,73431,73435,73442,73454,73466,73478,73489,73507,73520,73532,73556,73567,73571,73575,73583,73593,73597,73601,73607,73619,73630,73640,73644,73648,73654,73676,73680,73684,73690,73696,73708,73718,73730,73760,73773,73790,73794,73798,73809,73831,73841,73845,73849,73862,73872,73884,73896,73908,73920,73930,73940,73950,73961,73974,73978,73986,73994,73998,74006,74019,74039,74072,74105,74138,74164,74182,74200,74208,74234,74252,74270,74288,74306,74324,74332,74340,74358,74366,74395,74403,74411,74419,74432,74444,74456,74468,74480,74492,74505,74517,74525,74533,74541,74546,74551,74555,74559,74563,74567,74571,74575,74580,74585,74590,74595,74603,74611,74619,74624,74629,74634,74639,74644,74649,74654,74659,74664,74669,74674,74679,74684,74689,74693,74698,74703,74713,74722,74726,74731,74740,74756,74798,74838,74877,74942,74950,74954,74959,74977,74985,74990,74995,75025,75031,75036,75049,75061,75073,75085,75097,75109,75121,75125,75135,75139,75144,75149,75153,75162,75166,75171,75176,75195,75200,75220,75224,75229,75233,75238,75256,75274,75292,75311,75330,75349,75354,75360,75381,75387,75396,75402,75408,75414,75441,75454,75459,75469,75475,75481,75487,75493,75498,75504,75510,75516,75522,75555,75560,75565,75570,75575,75581,75587,75593,75604,75609,75615,75622,75636,75642,75666,75671,75676,75682,75688,75709,75715,75728,75734,75740,75746,75752,75757,75763,75769,75775,75793,75807,75813,75821,75827,75849,75854,75859,75864,75869,75874,75883,75892,75897],{"__ignoreMap":35},[51,72865,72866,72868,72870,72872],{"class":53,"line":54},[51,72867,52261],{"class":72},[51,72869,52265],{"class":52264},[51,72871,52268],{"class":68},[51,72873,52271],{"class":72},[51,72875,72876,72878,72880,72882,72884,72886],{"class":53,"line":61},[51,72877,2154],{"class":72},[51,72879,51599],{"class":52264},[51,72881,52280],{"class":68},[51,72883,108],{"class":72},[51,72885,52285],{"class":282},[51,72887,52271],{"class":72},[51,72889,72890],{"class":53,"line":93},[51,72891,3480],{"emptyLinePlaceholder":1192},[51,72893,72894,72896,72898],{"class":53,"line":99},[51,72895,2154],{"class":72},[51,72897,52298],{"class":52264},[51,72899,52271],{"class":72},[51,72901,72902,72904,72906,72908,72910,72912],{"class":53,"line":120},[51,72903,53108],{"class":72},[51,72905,52308],{"class":52264},[51,72907,52311],{"class":68},[51,72909,108],{"class":72},[51,72911,52316],{"class":282},[51,72913,52271],{"class":72},[51,72915,72916,72918,72920,72922,72924,72926,72928,72930,72932],{"class":53,"line":129},[51,72917,53108],{"class":72},[51,72919,52308],{"class":52264},[51,72921,15882],{"class":68},[51,72923,108],{"class":72},[51,72925,52355],{"class":282},[51,72927,52335],{"class":68},[51,72929,108],{"class":72},[51,72931,52362],{"class":282},[51,72933,52271],{"class":72},[51,72935,72936,72938,72940,72942,72944],{"class":53,"line":206},[51,72937,53108],{"class":72},[51,72939,52371],{"class":52264},[51,72941,52374],{"class":72},[51,72943,52371],{"class":52264},[51,72945,52271],{"class":72},[51,72947,72948,72950,72952],{"class":53,"line":212},[51,72949,53108],{"class":72},[51,72951,1179],{"class":52264},[51,72953,52271],{"class":72},[51,72955,72956,72958],{"class":53,"line":227},[51,72957,7365],{"class":52264},[51,72959,16534],{"class":72},[51,72961,72962,72964,72966,72968],{"class":53,"line":370},[51,72963,55659],{"class":175},[51,72965,52401],{"class":72},[51,72967,176],{"class":175},[51,72969,179],{"class":72},[51,72971,72972,72974,72976,72978],{"class":53,"line":387},[51,72973,55670],{"class":175},[51,72975,52401],{"class":72},[51,72977,176],{"class":175},[51,72979,179],{"class":72},[51,72981,72982],{"class":53,"line":404},[51,72983,3267],{"class":72},[51,72985,72986],{"class":53,"line":415},[51,72987,3480],{"emptyLinePlaceholder":1192},[51,72989,72990,72992],{"class":53,"line":420},[51,72991,58243],{"class":52264},[51,72993,16534],{"class":72},[51,72995,72996,72998,73000,73002],{"class":53,"line":429},[51,72997,58250],{"class":175},[51,72999,52401],{"class":72},[51,73001,52556],{"class":175},[51,73003,179],{"class":72},[51,73005,73006,73008,73010,73012,73014],{"class":53,"line":434},[51,73007,63041],{"class":175},[51,73009,52401],{"class":72},[51,73011,457],{"class":175},[51,73013,52456],{"class":64},[51,73015,179],{"class":72},[51,73017,73018],{"class":53,"line":448},[51,73019,3267],{"class":72},[51,73021,73022],{"class":53,"line":462},[51,73023,3480],{"emptyLinePlaceholder":1192},[51,73025,73026,73029],{"class":53,"line":470},[51,73027,73028],{"class":68},"    .info",[51,73030,16534],{"class":72},[51,73032,73033,73035,73037,73039,73041],{"class":53,"line":2783},[51,73034,55735],{"class":175},[51,73036,52401],{"class":72},[51,73038,52453],{"class":175},[51,73040,52456],{"class":64},[51,73042,179],{"class":72},[51,73044,73045,73047,73049,73051,73053,73055],{"class":53,"line":2788},[51,73046,55670],{"class":175},[51,73048,52401],{"class":72},[51,73050,443],{"class":175},[51,73052,52456],{"class":64},[51,73054,52520],{"class":175},[51,73056,179],{"class":72},[51,73058,73059,73061,73063,73065],{"class":53,"line":2817},[51,73060,58250],{"class":175},[51,73062,52401],{"class":72},[51,73064,52556],{"class":175},[51,73066,179],{"class":72},[51,73068,73069],{"class":53,"line":2822},[51,73070,3267],{"class":72},[51,73072,73073],{"class":53,"line":2839},[51,73074,3480],{"emptyLinePlaceholder":1192},[51,73076,73077,73080],{"class":53,"line":2844},[51,73078,73079],{"class":68},"    .uname",[51,73081,32430],{"class":72},[51,73083,73084,73087],{"class":53,"line":2849},[51,73085,73086],{"class":68},"    .age",[51,73088,32430],{"class":72},[51,73090,73091,73094],{"class":53,"line":2854},[51,73092,73093],{"class":68},"    .salary",[51,73095,16534],{"class":72},[51,73097,73098,73100,73102,73104,73106],{"class":53,"line":2868},[51,73099,55735],{"class":175},[51,73101,52401],{"class":72},[51,73103,612],{"class":175},[51,73105,52456],{"class":64},[51,73107,179],{"class":72},[51,73109,73110,73112,73114,73116,73118],{"class":53,"line":2873},[51,73111,55749],{"class":175},[51,73113,52401],{"class":72},[51,73115,457],{"class":175},[51,73117,52456],{"class":64},[51,73119,179],{"class":72},[51,73121,73122,73124,73126,73128],{"class":53,"line":3657},[51,73123,62744],{"class":175},[51,73125,52401],{"class":72},[51,73127,55701],{"class":175},[51,73129,179],{"class":72},[51,73131,73132,73134,73136,73138,73140],{"class":53,"line":3671},[51,73133,62714],{"class":175},[51,73135,52401],{"class":72},[51,73137,1821],{"class":175},[51,73139,52456],{"class":64},[51,73141,179],{"class":72},[51,73143,73144],{"class":53,"line":3679},[51,73145,3267],{"class":72},[51,73147,73148],{"class":53,"line":3684},[51,73149,3480],{"emptyLinePlaceholder":1192},[51,73151,73152,73155],{"class":53,"line":3690},[51,73153,73154],{"class":68},"    .gender",[51,73156,32430],{"class":72},[51,73158,73159,73162],{"class":53,"line":3696},[51,73160,73161],{"class":68},"    .city",[51,73163,16534],{"class":72},[51,73165,73166,73168,73170,73172,73174],{"class":53,"line":3701},[51,73167,55735],{"class":175},[51,73169,52401],{"class":72},[51,73171,612],{"class":175},[51,73173,52456],{"class":64},[51,73175,179],{"class":72},[51,73177,73178,73180,73182,73184,73186],{"class":53,"line":8910},[51,73179,55749],{"class":175},[51,73181,52401],{"class":72},[51,73183,2070],{"class":175},[51,73185,52456],{"class":64},[51,73187,179],{"class":72},[51,73189,73190,73192,73194,73196],{"class":53,"line":8934},[51,73191,62744],{"class":175},[51,73193,52401],{"class":72},[51,73195,55701],{"class":175},[51,73197,179],{"class":72},[51,73199,73200,73202,73204,73206,73208],{"class":53,"line":8939},[51,73201,62714],{"class":175},[51,73203,52401],{"class":72},[51,73205,1821],{"class":175},[51,73207,52456],{"class":64},[51,73209,179],{"class":72},[51,73211,73212,73214,73216,73218,73220,73222,73225,73227,73229,73231,73234,73236,73238],{"class":53,"line":8945},[51,73213,62941],{"class":175},[51,73215,52401],{"class":72},[51,73217,791],{"class":175},[51,73219,52456],{"class":64},[51,73221,52485],{"class":175},[51,73223,73224],{"class":175}," rgb",[51,73226,73],{"class":72},[51,73228,2812],{"class":175},[51,73230,13397],{"class":72},[51,73232,73233],{"class":175},"197",[51,73235,13397],{"class":72},[51,73237,73233],{"class":175},[51,73239,615],{"class":72},[51,73241,73242],{"class":53,"line":8972},[51,73243,3267],{"class":72},[51,73245,73246],{"class":53,"line":8977},[51,73247,3480],{"emptyLinePlaceholder":1192},[51,73249,73250,73253],{"class":53,"line":8983},[51,73251,73252],{"class":52264},"    button",[51,73254,16534],{"class":72},[51,73256,73257,73259,73261,73263,73265],{"class":53,"line":8995},[51,73258,55749],{"class":175},[51,73260,52401],{"class":72},[51,73262,2070],{"class":175},[51,73264,52456],{"class":64},[51,73266,179],{"class":72},[51,73268,73269,73271,73273,73275,73277],{"class":53,"line":9007},[51,73270,55735],{"class":175},[51,73272,52401],{"class":72},[51,73274,1730],{"class":175},[51,73276,52456],{"class":64},[51,73278,179],{"class":72},[51,73280,73281,73283,73285,73288,73290,73292,73294,73297,73299,73301],{"class":53,"line":9019},[51,73282,55848],{"class":175},[51,73284,52401],{"class":72},[51,73286,73287],{"class":175},"rgb",[51,73289,73],{"class":72},[51,73291,2212],{"class":175},[51,73293,13397],{"class":72},[51,73295,73296],{"class":175},"187",[51,73298,13397],{"class":72},[51,73300,1549],{"class":175},[51,73302,615],{"class":72},[51,73304,73305,73307,73309,73311],{"class":53,"line":10678},[51,73306,58380],{"class":175},[51,73308,52401],{"class":72},[51,73310,61806],{"class":175},[51,73312,179],{"class":72},[51,73314,73315,73317,73319,73321],{"class":53,"line":10703},[51,73316,62941],{"class":175},[51,73318,52401],{"class":72},[51,73320,176],{"class":175},[51,73322,179],{"class":72},[51,73324,73325],{"class":53,"line":10726},[51,73326,3267],{"class":72},[51,73328,73329],{"class":53,"line":10750},[51,73330,3480],{"emptyLinePlaceholder":1192},[51,73332,73333,73335,73337],{"class":53,"line":10755},[51,73334,73252],{"class":52264},[51,73336,52652],{"class":52264},[51,73338,16534],{"class":72},[51,73340,73341,73343,73345,73348],{"class":53,"line":10760},[51,73342,55973],{"class":175},[51,73344,52401],{"class":72},[51,73346,73347],{"class":175},"inline-block",[51,73349,179],{"class":72},[51,73351,73352,73354,73356,73358,73360],{"class":53,"line":10765},[51,73353,55735],{"class":175},[51,73355,52401],{"class":72},[51,73357,443],{"class":175},[51,73359,52456],{"class":64},[51,73361,179],{"class":72},[51,73363,73364,73366,73368,73370,73372],{"class":53,"line":10774},[51,73365,55749],{"class":175},[51,73367,52401],{"class":72},[51,73369,443],{"class":175},[51,73371,52456],{"class":64},[51,73373,179],{"class":72},[51,73375,73376,73378,73380,73382,73384],{"class":53,"line":10779},[51,73377,58323],{"class":175},[51,73379,52401],{"class":72},[51,73381,1719],{"class":175},[51,73383,52456],{"class":64},[51,73385,179],{"class":72},[51,73387,73388,73390,73392,73394,73396,73398,73401],{"class":53,"line":10785},[51,73389,62941],{"class":175},[51,73391,52401],{"class":72},[51,73393,791],{"class":175},[51,73395,52456],{"class":64},[51,73397,52485],{"class":175},[51,73399,73400],{"class":175}," #fff",[51,73402,179],{"class":72},[51,73404,73405,73407,73409,73411,73413],{"class":53,"line":10806},[51,73406,56098],{"class":175},[51,73408,52401],{"class":72},[51,73410,1568],{"class":175},[51,73412,52456],{"class":64},[51,73414,179],{"class":72},[51,73416,73417,73419,73421,73423,73425],{"class":53,"line":10812},[51,73418,62714],{"class":175},[51,73420,52401],{"class":72},[51,73422,791],{"class":175},[51,73424,52456],{"class":64},[51,73426,179],{"class":72},[51,73428,73429],{"class":53,"line":10826},[51,73430,3267],{"class":72},[51,73432,73433],{"class":53,"line":10832},[51,73434,3480],{"emptyLinePlaceholder":1192},[51,73436,73437,73440],{"class":53,"line":10859},[51,73438,73439],{"class":68},"    .total",[51,73441,16534],{"class":72},[51,73443,73444,73446,73448,73450,73452],{"class":53,"line":10868},[51,73445,55735],{"class":175},[51,73447,52401],{"class":72},[51,73449,62593],{"class":175},[51,73451,52456],{"class":64},[51,73453,179],{"class":72},[51,73455,73456,73458,73460,73462,73464],{"class":53,"line":10874},[51,73457,55749],{"class":175},[51,73459,52401],{"class":72},[51,73461,1649],{"class":175},[51,73463,52456],{"class":64},[51,73465,179],{"class":72},[51,73467,73468,73470,73472,73474,73476],{"class":53,"line":10882},[51,73469,58323],{"class":175},[51,73471,52401],{"class":72},[51,73473,1649],{"class":175},[51,73475,52456],{"class":64},[51,73477,179],{"class":72},[51,73479,73480,73482,73484,73487],{"class":53,"line":10887},[51,73481,58250],{"class":175},[51,73483,52401],{"class":72},[51,73485,73486],{"class":175},"right",[51,73488,179],{"class":72},[51,73490,73491,73493,73495,73497,73499,73501,73503,73505],{"class":53,"line":17566},[51,73492,55670],{"class":175},[51,73494,52401],{"class":72},[51,73496,1649],{"class":175},[51,73498,52456],{"class":64},[51,73500,52520],{"class":175},[51,73502,3118],{"class":175},[51,73504,52456],{"class":64},[51,73506,179],{"class":72},[51,73508,73509,73512,73514,73516,73518],{"class":53,"line":17572},[51,73510,73511],{"class":175},"      padding-right",[51,73513,52401],{"class":72},[51,73515,443],{"class":175},[51,73517,52456],{"class":64},[51,73519,179],{"class":72},[51,73521,73522,73524,73526,73528,73530],{"class":53,"line":17595},[51,73523,55886],{"class":175},[51,73525,52401],{"class":72},[51,73527,1769],{"class":175},[51,73529,52456],{"class":64},[51,73531,179],{"class":72},[51,73533,73534,73536,73538,73540,73542,73545,73547,73550,73552,73554],{"class":53,"line":17601},[51,73535,55848],{"class":175},[51,73537,52401],{"class":72},[51,73539,73287],{"class":175},[51,73541,73],{"class":72},[51,73543,73544],{"class":175},"237",[51,73546,13397],{"class":72},[51,73548,73549],{"class":175},"235",[51,73551,13397],{"class":72},[51,73553,73549],{"class":175},[51,73555,615],{"class":72},[51,73557,73558,73561,73563,73565],{"class":53,"line":17624},[51,73559,73560],{"class":175},"      box-sizing",[51,73562,52401],{"class":72},[51,73564,61469],{"class":175},[51,73566,179],{"class":72},[51,73568,73569],{"class":53,"line":17638},[51,73570,3267],{"class":72},[51,73572,73573],{"class":53,"line":17658},[51,73574,3480],{"emptyLinePlaceholder":1192},[51,73576,73577,73579,73581],{"class":53,"line":17664},[51,73578,73439],{"class":68},[51,73580,52652],{"class":52264},[51,73582,16534],{"class":72},[51,73584,73585,73587,73589,73591],{"class":53,"line":17675},[51,73586,58380],{"class":175},[51,73588,52401],{"class":72},[51,73590,58385],{"class":175},[51,73592,179],{"class":72},[51,73594,73595],{"class":53,"line":17698},[51,73596,3267],{"class":72},[51,73598,73599],{"class":53,"line":17720},[51,73600,3480],{"emptyLinePlaceholder":1192},[51,73602,73603,73605],{"class":53,"line":17725},[51,73604,65987],{"class":52264},[51,73606,16534],{"class":72},[51,73608,73609,73611,73613,73615,73617],{"class":53,"line":17731},[51,73610,55735],{"class":175},[51,73612,52401],{"class":72},[51,73614,62593],{"class":175},[51,73616,52456],{"class":64},[51,73618,179],{"class":72},[51,73620,73621,73623,73625,73628],{"class":53,"line":17745},[51,73622,55670],{"class":175},[51,73624,52401],{"class":72},[51,73626,73627],{"class":175},"auto",[51,73629,179],{"class":72},[51,73631,73632,73634,73636,73638],{"class":53,"line":17758},[51,73633,65994],{"class":175},[51,73635,52401],{"class":72},[51,73637,65999],{"class":175},[51,73639,179],{"class":72},[51,73641,73642],{"class":53,"line":17763},[51,73643,3267],{"class":72},[51,73645,73646],{"class":53,"line":17777},[51,73647,3480],{"emptyLinePlaceholder":1192},[51,73649,73650,73652],{"class":53,"line":17782},[51,73651,66079],{"class":52264},[51,73653,16534],{"class":72},[51,73655,73656,73658,73660,73662,73664,73666,73668,73670,73672,73674],{"class":53,"line":17788},[51,73657,55848],{"class":175},[51,73659,52401],{"class":72},[51,73661,73287],{"class":175},[51,73663,73],{"class":72},[51,73665,73544],{"class":175},[51,73667,13397],{"class":72},[51,73669,73549],{"class":175},[51,73671,13397],{"class":72},[51,73673,73549],{"class":175},[51,73675,615],{"class":72},[51,73677,73678],{"class":53,"line":17793},[51,73679,3267],{"class":72},[51,73681,73682],{"class":53,"line":17807},[51,73683,3480],{"emptyLinePlaceholder":1192},[51,73685,73686,73688],{"class":53,"line":17812},[51,73687,66079],{"class":52264},[51,73689,32430],{"class":72},[51,73691,73692,73694],{"class":53,"line":17817},[51,73693,66145],{"class":52264},[51,73695,16534],{"class":72},[51,73697,73698,73700,73702,73704,73706],{"class":53,"line":17831},[51,73699,55749],{"class":175},[51,73701,52401],{"class":72},[51,73703,1524],{"class":175},[51,73705,52456],{"class":64},[51,73707,179],{"class":72},[51,73709,73710,73712,73714,73716],{"class":53,"line":17843},[51,73711,58250],{"class":175},[51,73713,52401],{"class":72},[51,73715,24699],{"class":175},[51,73717,179],{"class":72},[51,73719,73720,73722,73724,73726,73728],{"class":53,"line":17848},[51,73721,55886],{"class":175},[51,73723,52401],{"class":72},[51,73725,1795],{"class":175},[51,73727,52456],{"class":64},[51,73729,179],{"class":72},[51,73731,73732,73734,73736,73738,73740,73742,73744,73746,73749,73751,73754,73756,73758],{"class":53,"line":17861},[51,73733,62941],{"class":175},[51,73735,52401],{"class":72},[51,73737,791],{"class":175},[51,73739,52456],{"class":64},[51,73741,52485],{"class":175},[51,73743,73224],{"class":175},[51,73745,73],{"class":72},[51,73747,73748],{"class":175},"228",[51,73750,13397],{"class":72},[51,73752,73753],{"class":175},"225",[51,73755,13397],{"class":72},[51,73757,73753],{"class":175},[51,73759,615],{"class":72},[51,73761,73762,73765,73767,73769,73771],{"class":53,"line":17866},[51,73763,73764],{"class":175},"      padding-left",[51,73766,52401],{"class":72},[51,73768,1568],{"class":175},[51,73770,52456],{"class":64},[51,73772,179],{"class":72},[51,73774,73775,73777,73779,73781,73784,73786,73788],{"class":53,"line":17871},[51,73776,62824],{"class":175},[51,73778,52401],{"class":72},[51,73780,29085],{"class":175},[51,73782,73783],{"class":175}," linear",[51,73785,62831],{"class":175},[51,73787,1941],{"class":64},[51,73789,179],{"class":72},[51,73791,73792],{"class":53,"line":17876},[51,73793,3267],{"class":72},[51,73795,73796],{"class":53,"line":17889},[51,73797,3480],{"emptyLinePlaceholder":1192},[51,73799,73800,73803,73805,73807],{"class":53,"line":17894},[51,73801,73802],{"class":52264},"    tbody",[51,73804,71108],{"class":52264},[51,73806,61904],{"class":68},[51,73808,16534],{"class":72},[51,73810,73811,73813,73815,73817,73819,73821,73823,73825,73827,73829],{"class":53,"line":33597},[51,73812,55848],{"class":175},[51,73814,52401],{"class":72},[51,73816,73287],{"class":175},[51,73818,73],{"class":72},[51,73820,73544],{"class":175},[51,73822,13397],{"class":72},[51,73824,73549],{"class":175},[51,73826,13397],{"class":72},[51,73828,73549],{"class":175},[51,73830,615],{"class":72},[51,73832,73833,73835,73837,73839],{"class":53,"line":33603},[51,73834,62989],{"class":175},[51,73836,52401],{"class":72},[51,73838,62994],{"class":175},[51,73840,179],{"class":72},[51,73842,73843],{"class":53,"line":33609},[51,73844,3267],{"class":72},[51,73846,73847],{"class":53,"line":33615},[51,73848,3480],{"emptyLinePlaceholder":1192},[51,73850,73851,73853,73855,73858,73860],{"class":53,"line":33621},[51,73852,73802],{"class":52264},[51,73854,71108],{"class":52264},[51,73856,73857],{"class":52264}," td",[51,73859,170],{"class":52264},[51,73861,16534],{"class":72},[51,73863,73864,73866,73868,73870],{"class":53,"line":33632},[51,73865,55973],{"class":175},[51,73867,52401],{"class":72},[51,73869,61833],{"class":175},[51,73871,179],{"class":72},[51,73873,73874,73876,73878,73880,73882],{"class":53,"line":33638},[51,73875,55735],{"class":175},[51,73877,52401],{"class":72},[51,73879,2151],{"class":175},[51,73881,52456],{"class":64},[51,73883,179],{"class":72},[51,73885,73886,73888,73890,73892,73894],{"class":53,"line":33658},[51,73887,55749],{"class":175},[51,73889,52401],{"class":72},[51,73891,2070],{"class":175},[51,73893,52456],{"class":64},[51,73895,179],{"class":72},[51,73897,73898,73900,73902,73904,73906],{"class":53,"line":33664},[51,73899,58323],{"class":175},[51,73901,52401],{"class":72},[51,73903,2070],{"class":175},[51,73905,52456],{"class":64},[51,73907,179],{"class":72},[51,73909,73910,73912,73914,73916,73918],{"class":53,"line":33675},[51,73911,63041],{"class":175},[51,73913,52401],{"class":72},[51,73915,1334],{"class":175},[51,73917,52456],{"class":64},[51,73919,179],{"class":72},[51,73921,73922,73924,73926,73928],{"class":53,"line":33681},[51,73923,58380],{"class":175},[51,73925,52401],{"class":72},[51,73927,61806],{"class":175},[51,73929,179],{"class":72},[51,73931,73932,73934,73936,73938],{"class":53,"line":33687},[51,73933,58250],{"class":175},[51,73935,52401],{"class":72},[51,73937,52556],{"class":175},[51,73939,179],{"class":72},[51,73941,73942,73944,73946,73948],{"class":53,"line":33693},[51,73943,64934],{"class":175},[51,73945,52401],{"class":72},[51,73947,55701],{"class":175},[51,73949,179],{"class":72},[51,73951,73952,73954,73956,73959],{"class":53,"line":33699},[51,73953,55848],{"class":175},[51,73955,52401],{"class":72},[51,73957,73958],{"class":175},"orange",[51,73960,179],{"class":72},[51,73962,73963,73965,73967,73970,73972],{"class":53,"line":33705},[51,73964,56098],{"class":175},[51,73966,52401],{"class":72},[51,73968,73969],{"class":175},"12.5",[51,73971,52456],{"class":64},[51,73973,179],{"class":72},[51,73975,73976],{"class":53,"line":33711},[51,73977,3267],{"class":72},[51,73979,73980,73982,73984],{"class":53,"line":33717},[51,73981,53381],{"class":72},[51,73983,1179],{"class":52264},[51,73985,52271],{"class":72},[51,73987,73988,73990,73992],{"class":53,"line":33737},[51,73989,52749],{"class":72},[51,73991,52298],{"class":52264},[51,73993,52271],{"class":72},[51,73995,73996],{"class":53,"line":33743},[51,73997,3480],{"emptyLinePlaceholder":1192},[51,73999,74000,74002,74004],{"class":53,"line":33759},[51,74001,2154],{"class":72},[51,74003,52764],{"class":52264},[51,74005,52271],{"class":72},[51,74007,74008,74010,74012,74015,74017],{"class":53,"line":33765},[51,74009,53108],{"class":72},[51,74011,14],{"class":52264},[51,74013,74014],{"class":72},">学生就业统计表\u003C\u002F",[51,74016,14],{"class":52264},[51,74018,52271],{"class":72},[51,74020,74021,74023,74025,74027,74029,74031,74033,74035,74037],{"class":53,"line":33779},[51,74022,53108],{"class":72},[51,74024,67589],{"class":52264},[51,74026,54450],{"class":68},[51,74028,108],{"class":72},[51,74030,63628],{"class":282},[51,74032,70034],{"class":68},[51,74034,108],{"class":72},[51,74036,32740],{"class":282},[51,74038,52271],{"class":72},[51,74040,74041,74043,74045,74047,74049,74051,74053,74055,74057,74059,74061,74064,74066,74068,74070],{"class":53,"line":33785},[51,74042,52305],{"class":72},[51,74044,54785],{"class":52264},[51,74046,54788],{"class":68},[51,74048,108],{"class":72},[51,74050,63663],{"class":282},[51,74052,15882],{"class":68},[51,74054,108],{"class":72},[51,74056,70060],{"class":282},[51,74058,61984],{"class":68},[51,74060,108],{"class":72},[51,74062,74063],{"class":282},"\"姓名\"",[51,74065,54450],{"class":68},[51,74067,108],{"class":72},[51,74069,70060],{"class":282},[51,74071,52271],{"class":72},[51,74073,74074,74076,74078,74080,74082,74084,74086,74088,74090,74092,74094,74097,74099,74101,74103],{"class":53,"line":33800},[51,74075,52305],{"class":72},[51,74077,54785],{"class":52264},[51,74079,54788],{"class":68},[51,74081,108],{"class":72},[51,74083,63663],{"class":282},[51,74085,15882],{"class":68},[51,74087,108],{"class":72},[51,74089,70088],{"class":282},[51,74091,61984],{"class":68},[51,74093,108],{"class":72},[51,74095,74096],{"class":282},"\"年龄\"",[51,74098,54450],{"class":68},[51,74100,108],{"class":72},[51,74102,70088],{"class":282},[51,74104,52271],{"class":72},[51,74106,74107,74109,74111,74113,74115,74117,74119,74121,74123,74125,74127,74130,74132,74134,74136],{"class":53,"line":33806},[51,74108,52305],{"class":72},[51,74110,54785],{"class":52264},[51,74112,54788],{"class":68},[51,74114,108],{"class":72},[51,74116,63663],{"class":282},[51,74118,15882],{"class":68},[51,74120,108],{"class":72},[51,74122,70190],{"class":282},[51,74124,61984],{"class":68},[51,74126,108],{"class":72},[51,74128,74129],{"class":282},"\"薪资\"",[51,74131,54450],{"class":68},[51,74133,108],{"class":72},[51,74135,70190],{"class":282},[51,74137,52271],{"class":72},[51,74139,74140,74142,74144,74146,74148,74150,74152,74154,74156,74158,74160,74162],{"class":53,"line":33815},[51,74141,52305],{"class":72},[51,74143,70108],{"class":52264},[51,74145,15882],{"class":68},[51,74147,108],{"class":72},[51,74149,70115],{"class":282},[51,74151,15921],{"class":68},[51,74153,108],{"class":72},[51,74155,8614],{"class":282},[51,74157,54450],{"class":68},[51,74159,108],{"class":72},[51,74161,70115],{"class":282},[51,74163,52271],{"class":72},[51,74165,74166,74168,74170,74172,74174,74176,74178,74180],{"class":53,"line":33821},[51,74167,56198],{"class":72},[51,74169,70130],{"class":52264},[51,74171,67615],{"class":68},[51,74173,108],{"class":72},[51,74175,10923],{"class":282},[51,74177,70139],{"class":72},[51,74179,70130],{"class":52264},[51,74181,52271],{"class":72},[51,74183,74184,74186,74188,74190,74192,74194,74196,74198],{"class":53,"line":33830},[51,74185,56198],{"class":72},[51,74187,70130],{"class":52264},[51,74189,67615],{"class":68},[51,74191,108],{"class":72},[51,74193,10992],{"class":282},[51,74195,70158],{"class":72},[51,74197,70130],{"class":52264},[51,74199,52271],{"class":72},[51,74201,74202,74204,74206],{"class":53,"line":33836},[51,74203,52740],{"class":72},[51,74205,70108],{"class":52264},[51,74207,52271],{"class":72},[51,74209,74210,74212,74214,74216,74218,74220,74222,74224,74226,74228,74230,74232],{"class":53,"line":33842},[51,74211,52305],{"class":72},[51,74213,70108],{"class":52264},[51,74215,15882],{"class":68},[51,74217,108],{"class":72},[51,74219,70212],{"class":282},[51,74221,15921],{"class":68},[51,74223,108],{"class":72},[51,74225,8614],{"class":282},[51,74227,54450],{"class":68},[51,74229,108],{"class":72},[51,74231,70212],{"class":282},[51,74233,52271],{"class":72},[51,74235,74236,74238,74240,74242,74244,74246,74248,74250],{"class":53,"line":33851},[51,74237,56198],{"class":72},[51,74239,70130],{"class":52264},[51,74241,67615],{"class":68},[51,74243,108],{"class":72},[51,74245,70233],{"class":282},[51,74247,70236],{"class":72},[51,74249,70130],{"class":52264},[51,74251,52271],{"class":72},[51,74253,74254,74256,74258,74260,74262,74264,74266,74268],{"class":53,"line":33857},[51,74255,56198],{"class":72},[51,74257,70130],{"class":52264},[51,74259,67615],{"class":68},[51,74261,108],{"class":72},[51,74263,70253],{"class":282},[51,74265,70256],{"class":72},[51,74267,70130],{"class":52264},[51,74269,52271],{"class":72},[51,74271,74272,74274,74276,74278,74280,74282,74284,74286],{"class":53,"line":33868},[51,74273,56198],{"class":72},[51,74275,70130],{"class":52264},[51,74277,67615],{"class":68},[51,74279,108],{"class":72},[51,74281,70273],{"class":282},[51,74283,70276],{"class":72},[51,74285,70130],{"class":52264},[51,74287,52271],{"class":72},[51,74289,74290,74292,74294,74296,74298,74300,74302,74304],{"class":53,"line":33874},[51,74291,56198],{"class":72},[51,74293,70130],{"class":52264},[51,74295,67615],{"class":68},[51,74297,108],{"class":72},[51,74299,70293],{"class":282},[51,74301,70296],{"class":72},[51,74303,70130],{"class":52264},[51,74305,52271],{"class":72},[51,74307,74308,74310,74312,74314,74316,74318,74320,74322],{"class":53,"line":33893},[51,74309,56198],{"class":72},[51,74311,70130],{"class":52264},[51,74313,67615],{"class":68},[51,74315,108],{"class":72},[51,74317,70313],{"class":282},[51,74319,70316],{"class":72},[51,74321,70130],{"class":52264},[51,74323,52271],{"class":72},[51,74325,74326,74328,74330],{"class":53,"line":33899},[51,74327,52740],{"class":72},[51,74329,70108],{"class":52264},[51,74331,52271],{"class":72},[51,74333,74334,74336,74338],{"class":53,"line":33910},[51,74335,52305],{"class":72},[51,74337,54851],{"class":52264},[51,74339,52271],{"class":72},[51,74341,74342,74344,74346,74349,74351,74354,74356],{"class":53,"line":33916},[51,74343,56198],{"class":72},[51,74345,51],{"class":52264},[51,74347,74348],{"class":72},">+\u003C\u002F",[51,74350,51],{"class":52264},[51,74352,74353],{"class":72},">添加\u003C\u002F",[51,74355,54851],{"class":52264},[51,74357,52271],{"class":72},[51,74359,74360,74362,74364],{"class":53,"line":33936},[51,74361,53381],{"class":72},[51,74363,67589],{"class":52264},[51,74365,52271],{"class":72},[51,74367,74368,74370,74372,74374,74376,74378,74381,74383,74386,74388,74391,74393],{"class":53,"line":33952},[51,74369,53108],{"class":72},[51,74371,52575],{"class":52264},[51,74373,54450],{"class":68},[51,74375,108],{"class":72},[51,74377,63544],{"class":282},[51,74379,74380],{"class":72},">共有数据 \u003C",[51,74382,51],{"class":52264},[51,74384,74385],{"class":72},">0\u003C\u002F",[51,74387,51],{"class":52264},[51,74389,74390],{"class":72},"> 条\u003C\u002F",[51,74392,52575],{"class":52264},[51,74394,52271],{"class":72},[51,74396,74397,74399,74401],{"class":53,"line":33958},[51,74398,53108],{"class":72},[51,74400,1393],{"class":52264},[51,74402,52271],{"class":72},[51,74404,74405,74407,74409],{"class":53,"line":33972},[51,74406,52305],{"class":72},[51,74408,1396],{"class":52264},[51,74410,52271],{"class":72},[51,74412,74413,74415,74417],{"class":53,"line":33978},[51,74414,56198],{"class":72},[51,74416,1399],{"class":52264},[51,74418,52271],{"class":72},[51,74420,74421,74423,74425,74428,74430],{"class":53,"line":33984},[51,74422,56266],{"class":72},[51,74424,1402],{"class":52264},[51,74426,74427],{"class":72},">ID\u003C\u002F",[51,74429,1402],{"class":52264},[51,74431,52271],{"class":72},[51,74433,74434,74436,74438,74440,74442],{"class":53,"line":33995},[51,74435,56266],{"class":72},[51,74437,1402],{"class":52264},[51,74439,70419],{"class":72},[51,74441,1402],{"class":52264},[51,74443,52271],{"class":72},[51,74445,74446,74448,74450,74452,74454],{"class":53,"line":34001},[51,74447,56266],{"class":72},[51,74449,1402],{"class":52264},[51,74451,70432],{"class":72},[51,74453,1402],{"class":52264},[51,74455,52271],{"class":72},[51,74457,74458,74460,74462,74464,74466],{"class":53,"line":34007},[51,74459,56266],{"class":72},[51,74461,1402],{"class":52264},[51,74463,70445],{"class":72},[51,74465,1402],{"class":52264},[51,74467,52271],{"class":72},[51,74469,74470,74472,74474,74476,74478],{"class":53,"line":34017},[51,74471,56266],{"class":72},[51,74473,1402],{"class":52264},[51,74475,70458],{"class":72},[51,74477,1402],{"class":52264},[51,74479,52271],{"class":72},[51,74481,74482,74484,74486,74488,74490],{"class":53,"line":34023},[51,74483,56266],{"class":72},[51,74485,1402],{"class":52264},[51,74487,70471],{"class":72},[51,74489,1402],{"class":52264},[51,74491,52271],{"class":72},[51,74493,74494,74496,74498,74501,74503],{"class":53,"line":34034},[51,74495,56266],{"class":72},[51,74497,1402],{"class":52264},[51,74499,74500],{"class":72},">录入时间\u003C\u002F",[51,74502,1402],{"class":52264},[51,74504,52271],{"class":72},[51,74506,74507,74509,74511,74513,74515],{"class":53,"line":34040},[51,74508,56266],{"class":72},[51,74510,1402],{"class":52264},[51,74512,70484],{"class":72},[51,74514,1402],{"class":52264},[51,74516,52271],{"class":72},[51,74518,74519,74521,74523],{"class":53,"line":34050},[51,74520,56371],{"class":72},[51,74522,1399],{"class":52264},[51,74524,52271],{"class":72},[51,74526,74527,74529,74531],{"class":53,"line":34055},[51,74528,52740],{"class":72},[51,74530,1396],{"class":52264},[51,74532,52271],{"class":72},[51,74534,74535,74537,74539],{"class":53,"line":34061},[51,74536,52305],{"class":72},[51,74538,1439],{"class":52264},[51,74540,52271],{"class":72},[51,74542,74543],{"class":53,"line":34110},[51,74544,74545],{"class":57},"      \u003C!-- \u003Ctr>\n",[51,74547,74548],{"class":53,"line":34157},[51,74549,74550],{"class":57},"        \u003Ctd>1\u003C\u002Ftd>\n",[51,74552,74553],{"class":53,"line":34162},[51,74554,74550],{"class":57},[51,74556,74557],{"class":53,"line":34168},[51,74558,74550],{"class":57},[51,74560,74561],{"class":53,"line":34187},[51,74562,74550],{"class":57},[51,74564,74565],{"class":53,"line":34193},[51,74566,74550],{"class":57},[51,74568,74569],{"class":53,"line":34213},[51,74570,74550],{"class":57},[51,74572,74573],{"class":53,"line":34219},[51,74574,74550],{"class":57},[51,74576,74577],{"class":53,"line":34225},[51,74578,74579],{"class":57},"        \u003Ctd>\n",[51,74581,74582],{"class":53,"line":34235},[51,74583,74584],{"class":57},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[51,74586,74587],{"class":53,"line":34240},[51,74588,74589],{"class":57},"        \u003C\u002Ftd>\n",[51,74591,74592],{"class":53,"line":34246},[51,74593,74594],{"class":57},"      \u003C\u002Ftr> -->\n",[51,74596,74597,74599,74601],{"class":53,"line":34262},[51,74598,52740],{"class":72},[51,74600,1439],{"class":52264},[51,74602,52271],{"class":72},[51,74604,74605,74607,74609],{"class":53,"line":34307},[51,74606,53381],{"class":72},[51,74608,1393],{"class":52264},[51,74610,52271],{"class":72},[51,74612,74613,74615,74617],{"class":53,"line":34313},[51,74614,53108],{"class":72},[51,74616,52777],{"class":52264},[51,74618,52271],{"class":72},[51,74620,74621],{"class":53,"line":34319},[51,74622,74623],{"class":57},"    \u002F\u002F const initData = [{\n",[51,74625,74626],{"class":53,"line":34325},[51,74627,74628],{"class":57},"    \u002F\u002F   unameId: 1,\n",[51,74630,74631],{"class":53,"line":34336},[51,74632,74633],{"class":57},"    \u002F\u002F   uname: '华晨宇',\n",[51,74635,74636],{"class":53,"line":34342},[51,74637,74638],{"class":57},"    \u002F\u002F   age: 22,\n",[51,74640,74641],{"class":53,"line":34348},[51,74642,74643],{"class":57},"    \u002F\u002F   salary: 12000,\n",[51,74645,74646],{"class":53,"line":34354},[51,74647,74648],{"class":57},"    \u002F\u002F   gender: '男',\n",[51,74650,74651],{"class":53,"line":34372},[51,74652,74653],{"class":57},"    \u002F\u002F   city: '北京',\n",[51,74655,74656],{"class":53,"line":34386},[51,74657,74658],{"class":57},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[51,74660,74661],{"class":53,"line":34395},[51,74662,74663],{"class":57},"    \u002F\u002F }]\n",[51,74665,74666],{"class":53,"line":34404},[51,74667,74668],{"class":57},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[51,74670,74671],{"class":53,"line":34413},[51,74672,74673],{"class":57},"    \u002F\u002F 1.渲染业务\n",[51,74675,74676],{"class":53,"line":34422},[51,74677,74678],{"class":57},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[51,74680,74681],{"class":53,"line":34428},[51,74682,74683],{"class":57},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[51,74685,74686],{"class":53,"line":34434},[51,74687,74688],{"class":57},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[51,74690,74691],{"class":53,"line":34442},[51,74692,3480],{"emptyLinePlaceholder":1192},[51,74694,74695],{"class":53,"line":34447},[51,74696,74697],{"class":57},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[51,74699,74700],{"class":53,"line":34453},[51,74701,74702],{"class":57},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[51,74704,74705,74707,74709,74711],{"class":53,"line":34464},[51,74706,12183],{"class":64},[51,74708,58659],{"class":175},[51,74710,14526],{"class":64},[51,74712,52802],{"class":72},[51,74714,74715,74718,74720],{"class":53,"line":34470},[51,74716,74717],{"class":72},"    console.",[51,74719,59211],{"class":68},[51,74721,53376],{"class":72},[51,74723,74724],{"class":53,"line":34490},[51,74725,3480],{"emptyLinePlaceholder":1192},[51,74727,74728],{"class":53,"line":34496},[51,74729,74730],{"class":57},"    \u002F\u002F 时间函数\n",[51,74732,74733,74735,74738],{"class":53,"line":34502},[51,74734,71048],{"class":64},[51,74736,74737],{"class":68}," getTime",[51,74739,11815],{"class":72},[51,74741,74742,74744,74747,74749,74751,74754],{"class":53,"line":34508},[51,74743,59192],{"class":64},[51,74745,74746],{"class":175}," date",[51,74748,14526],{"class":64},[51,74750,12540],{"class":64},[51,74752,74753],{"class":68}," Date",[51,74755,154],{"class":72},[51,74757,74758,74760,74762,74764,74767,74770,74772,74774,74776,74779,74782,74784,74786,74788,74790,74792,74794,74796],{"class":53,"line":34525},[51,74759,59192],{"class":64},[51,74761,17053],{"class":175},[51,74763,14526],{"class":64},[51,74765,74766],{"class":72}," date.",[51,74768,74769],{"class":68},"getHours",[51,74771,14012],{"class":72},[51,74773,2154],{"class":64},[51,74775,3118],{"class":175},[51,74777,74778],{"class":64}," ?",[51,74780,74781],{"class":282}," '0'",[51,74783,46530],{"class":64},[51,74785,74766],{"class":72},[51,74787,74769],{"class":68},[51,74789,14012],{"class":72},[51,74791,984],{"class":64},[51,74793,74766],{"class":72},[51,74795,74769],{"class":68},[51,74797,154],{"class":72},[51,74799,74800,74802,74805,74807,74809,74812,74814,74816,74818,74820,74822,74824,74826,74828,74830,74832,74834,74836],{"class":53,"line":34531},[51,74801,59192],{"class":64},[51,74803,74804],{"class":175}," m",[51,74806,14526],{"class":64},[51,74808,74766],{"class":72},[51,74810,74811],{"class":68},"getMinutes",[51,74813,14012],{"class":72},[51,74815,2154],{"class":64},[51,74817,3118],{"class":175},[51,74819,74778],{"class":64},[51,74821,74781],{"class":282},[51,74823,46530],{"class":64},[51,74825,74766],{"class":72},[51,74827,74811],{"class":68},[51,74829,14012],{"class":72},[51,74831,984],{"class":64},[51,74833,74766],{"class":72},[51,74835,74811],{"class":68},[51,74837,154],{"class":72},[51,74839,74840,74842,74844,74846,74848,74851,74853,74855,74857,74859,74861,74863,74865,74867,74869,74871,74873,74875],{"class":53,"line":34537},[51,74841,59192],{"class":64},[51,74843,9390],{"class":175},[51,74845,14526],{"class":64},[51,74847,74766],{"class":72},[51,74849,74850],{"class":68},"getSeconds",[51,74852,14012],{"class":72},[51,74854,2154],{"class":64},[51,74856,3118],{"class":175},[51,74858,74778],{"class":64},[51,74860,74781],{"class":282},[51,74862,46530],{"class":64},[51,74864,74766],{"class":72},[51,74866,74850],{"class":68},[51,74868,14012],{"class":72},[51,74870,984],{"class":64},[51,74872,74766],{"class":72},[51,74874,74850],{"class":68},[51,74876,154],{"class":72},[51,74878,74879,74881,74884,74886,74888,74891,74893,74896,74898,74901,74903,74905,74908,74910,74912,74914,74916,74918,74920,74923,74925,74928,74930,74933,74935,74937,74939],{"class":53,"line":34543},[51,74880,59192],{"class":64},[51,74882,74883],{"class":175}," str",[51,74885,14526],{"class":64},[51,74887,63867],{"class":282},[51,74889,74890],{"class":72},"date",[51,74892,1804],{"class":282},[51,74894,74895],{"class":68},"getFullYear",[51,74897,3507],{"class":282},[51,74899,74900],{"class":282},"}\u002F${",[51,74902,74890],{"class":72},[51,74904,1804],{"class":282},[51,74906,74907],{"class":68},"getMonth",[51,74909,14012],{"class":282},[51,74911,114],{"class":64},[51,74913,26082],{"class":175},[51,74915,74900],{"class":282},[51,74917,74890],{"class":72},[51,74919,1804],{"class":282},[51,74921,74922],{"class":68},"getDate",[51,74924,3507],{"class":282},[51,74926,74927],{"class":282},"} ${",[51,74929,1663],{"class":72},[51,74931,74932],{"class":282},"}:${",[51,74934,1790],{"class":72},[51,74936,74932],{"class":282},[51,74938,1941],{"class":72},[51,74940,74941],{"class":282},"}`\n",[51,74943,74944,74947],{"class":53,"line":34549},[51,74945,74946],{"class":64},"      return",[51,74948,74949],{"class":72}," str\n",[51,74951,74952],{"class":53,"line":34555},[51,74953,3267],{"class":72},[51,74955,74956],{"class":53,"line":34582},[51,74957,74958],{"class":57},"    \u002F\u002F 渲染函数\n",[51,74960,74961,74963,74965,74967,74969,74971,74973,74975],{"class":53,"line":34606},[51,74962,12183],{"class":64},[51,74964,70711],{"class":175},[51,74966,14526],{"class":64},[51,74968,55360],{"class":72},[51,74970,55363],{"class":68},[51,74972,73],{"class":72},[51,74974,70722],{"class":282},[51,74976,90],{"class":72},[51,74978,74979,74981,74983],{"class":53,"line":34612},[51,74980,71048],{"class":64},[51,74982,71051],{"class":68},[51,74984,11815],{"class":72},[51,74986,74987],{"class":53,"line":34618},[51,74988,74989],{"class":57},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[51,74991,74992],{"class":53,"line":34624},[51,74993,74994],{"class":57},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[51,74996,74997,74999,75002,75004,75006,75009,75011,75013,75015,75018,75020,75023],{"class":53,"line":34635},[51,74998,59192],{"class":64},[51,75000,75001],{"class":175}," trArr",[51,75003,14526],{"class":64},[51,75005,52929],{"class":72},[51,75007,75008],{"class":68},"map",[51,75010,73],{"class":72},[51,75012,55413],{"class":64},[51,75014,2750],{"class":72},[51,75016,75017],{"class":78},"ele",[51,75019,13397],{"class":72},[51,75021,75022],{"class":78},"index",[51,75024,13404],{"class":72},[51,75026,75027,75029],{"class":53,"line":34646},[51,75028,15714],{"class":64},[51,75030,71132],{"class":282},[51,75032,75033],{"class":53,"line":34652},[51,75034,75035],{"class":282},"      \u003Ctr>\n",[51,75037,75038,75040,75042,75044,75047],{"class":53,"line":34669},[51,75039,71137],{"class":282},[51,75041,75017],{"class":72},[51,75043,1804],{"class":282},[51,75045,75046],{"class":72},"unameId",[51,75048,71152],{"class":282},[51,75050,75051,75053,75055,75057,75059],{"class":53,"line":34692},[51,75052,71137],{"class":282},[51,75054,75017],{"class":72},[51,75056,1804],{"class":282},[51,75058,71168],{"class":72},[51,75060,71152],{"class":282},[51,75062,75063,75065,75067,75069,75071],{"class":53,"line":34715},[51,75064,71137],{"class":282},[51,75066,75017],{"class":72},[51,75068,1804],{"class":282},[51,75070,71185],{"class":72},[51,75072,71152],{"class":282},[51,75074,75075,75077,75079,75081,75083],{"class":53,"line":34721},[51,75076,71137],{"class":282},[51,75078,75017],{"class":72},[51,75080,1804],{"class":282},[51,75082,71202],{"class":72},[51,75084,71152],{"class":282},[51,75086,75087,75089,75091,75093,75095],{"class":53,"line":34726},[51,75088,71137],{"class":282},[51,75090,75017],{"class":72},[51,75092,1804],{"class":282},[51,75094,71219],{"class":72},[51,75096,71152],{"class":282},[51,75098,75099,75101,75103,75105,75107],{"class":53,"line":34735},[51,75100,71137],{"class":282},[51,75102,75017],{"class":72},[51,75104,1804],{"class":282},[51,75106,71236],{"class":72},[51,75108,71152],{"class":282},[51,75110,75111,75113,75115,75117,75119],{"class":53,"line":34745},[51,75112,71137],{"class":282},[51,75114,75017],{"class":72},[51,75116,1804],{"class":282},[51,75118,3467],{"class":72},[51,75120,71152],{"class":282},[51,75122,75123],{"class":53,"line":34751},[51,75124,74579],{"class":282},[51,75126,75127,75130,75132],{"class":53,"line":34756},[51,75128,75129],{"class":282},"          \u003Ca href=\"#\" data-id=\"${",[51,75131,75022],{"class":72},[51,75133,75134],{"class":282},"}\">删除\u003C\u002Fa>\n",[51,75136,75137],{"class":53,"line":34762},[51,75138,74589],{"class":282},[51,75140,75141],{"class":53,"line":34775},[51,75142,75143],{"class":282},"      \u003C\u002Ftr>\n",[51,75145,75146],{"class":53,"line":34781},[51,75147,75148],{"class":282},"  `\n",[51,75150,75151],{"class":53,"line":34792},[51,75152,65779],{"class":72},[51,75154,75155,75157,75159],{"class":53,"line":34803},[51,75156,59208],{"class":72},[51,75158,59211],{"class":68},[51,75160,75161],{"class":72},"(trArr)\n",[51,75163,75164],{"class":53,"line":34822},[51,75165,3480],{"emptyLinePlaceholder":1192},[51,75167,75168],{"class":53,"line":50482},[51,75169,75170],{"class":57},"      \u002F\u002F (2) 把数组转换为字符串join\n",[51,75172,75173],{"class":53,"line":50487},[51,75174,75175],{"class":57},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[51,75177,75178,75180,75182,75185,75188,75190,75193],{"class":53,"line":50496},[51,75179,71063],{"class":72},[51,75181,108],{"class":64},[51,75183,75184],{"class":72}," trArr.",[51,75186,75187],{"class":68},"join",[51,75189,73],{"class":72},[51,75191,75192],{"class":282},"''",[51,75194,90],{"class":72},[51,75196,75197],{"class":53,"line":50505},[51,75198,75199],{"class":57},"      \u002F\u002F 显示共有几条\n",[51,75201,75202,75204,75206,75208,75211,75214,75216,75218],{"class":53,"line":50510},[51,75203,56735],{"class":72},[51,75205,55363],{"class":68},[51,75207,73],{"class":72},[51,75209,75210],{"class":282},"'.total span'",[51,75212,75213],{"class":72},").innerHTML ",[51,75215,108],{"class":64},[51,75217,52929],{"class":72},[51,75219,56795],{"class":175},[51,75221,75222],{"class":53,"line":50515},[51,75223,3267],{"class":72},[51,75225,75226],{"class":53,"line":50520},[51,75227,75228],{"class":57},"    \u002F\u002F render()\n",[51,75230,75231],{"class":53,"line":50533},[51,75232,3480],{"emptyLinePlaceholder":1192},[51,75234,75235],{"class":53,"line":50538},[51,75236,75237],{"class":57},"    \u002F\u002F 获取DOM对象\n",[51,75239,75240,75242,75244,75246,75248,75250,75252,75254],{"class":53,"line":50547},[51,75241,12183],{"class":64},[51,75243,70785],{"class":175},[51,75245,14526],{"class":64},[51,75247,55360],{"class":72},[51,75249,55363],{"class":68},[51,75251,73],{"class":72},[51,75253,70796],{"class":282},[51,75255,90],{"class":72},[51,75257,75258,75260,75262,75264,75266,75268,75270,75272],{"class":53,"line":50556},[51,75259,12183],{"class":64},[51,75261,70612],{"class":175},[51,75263,14526],{"class":64},[51,75265,55360],{"class":72},[51,75267,55363],{"class":68},[51,75269,73],{"class":72},[51,75271,70623],{"class":282},[51,75273,90],{"class":72},[51,75275,75276,75278,75280,75282,75284,75286,75288,75290],{"class":53,"line":50573},[51,75277,12183],{"class":64},[51,75279,16651],{"class":175},[51,75281,14526],{"class":64},[51,75283,55360],{"class":72},[51,75285,55363],{"class":68},[51,75287,73],{"class":72},[51,75289,70642],{"class":282},[51,75291,90],{"class":72},[51,75293,75295,75297,75299,75301,75303,75305,75307,75309],{"class":53,"line":75294},231,[51,75296,12183],{"class":64},[51,75298,70671],{"class":175},[51,75300,14526],{"class":64},[51,75302,55360],{"class":72},[51,75304,55363],{"class":68},[51,75306,73],{"class":72},[51,75308,70682],{"class":282},[51,75310,90],{"class":72},[51,75312,75314,75316,75318,75320,75322,75324,75326,75328],{"class":53,"line":75313},232,[51,75315,12183],{"class":64},[51,75317,70651],{"class":175},[51,75319,14526],{"class":64},[51,75321,55360],{"class":72},[51,75323,55363],{"class":68},[51,75325,73],{"class":72},[51,75327,70662],{"class":282},[51,75329,90],{"class":72},[51,75331,75333,75335,75337,75339,75341,75343,75345,75347],{"class":53,"line":75332},233,[51,75334,12183],{"class":64},[51,75336,70691],{"class":175},[51,75338,14526],{"class":64},[51,75340,55360],{"class":72},[51,75342,55363],{"class":68},[51,75344,73],{"class":72},[51,75346,70702],{"class":282},[51,75348,90],{"class":72},[51,75350,75352],{"class":53,"line":75351},234,[51,75353,3480],{"emptyLinePlaceholder":1192},[51,75355,75357],{"class":53,"line":75356},235,[51,75358,75359],{"class":57},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[51,75361,75363,75365,75367,75369,75371,75373,75375,75377,75379],{"class":53,"line":75362},236,[51,75364,70803],{"class":72},[51,75366,58777],{"class":68},[51,75368,73],{"class":72},[51,75370,70810],{"class":282},[51,75372,13397],{"class":72},[51,75374,55413],{"class":64},[51,75376,2750],{"class":72},[51,75378,1331],{"class":78},[51,75380,13404],{"class":72},[51,75382,75384],{"class":53,"line":75383},237,[51,75385,75386],{"class":57},"      \u002F\u002F 禁止浏览器跳转\n",[51,75388,75390,75392,75394],{"class":53,"line":75389},238,[51,75391,70830],{"class":72},[51,75393,70833],{"class":68},[51,75395,154],{"class":72},[51,75397,75399],{"class":53,"line":75398},239,[51,75400,75401],{"class":57},"      \u002F\u002F 非空判断\n",[51,75403,75405],{"class":53,"line":75404},240,[51,75406,75407],{"class":57},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[51,75409,75411],{"class":53,"line":75410},241,[51,75412,75413],{"class":57},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[51,75415,75417,75419,75421,75423,75426,75428,75431,75434,75436,75438],{"class":53,"line":75416},242,[51,75418,55444],{"class":64},[51,75420,2750],{"class":72},[51,75422,1479],{"class":64},[51,75424,75425],{"class":72},"uname.value ",[51,75427,72321],{"class":64},[51,75429,75430],{"class":64}," !",[51,75432,75433],{"class":72},"age.value ",[51,75435,72321],{"class":64},[51,75437,75430],{"class":64},[51,75439,75440],{"class":72},"salary.value) {\n",[51,75442,75444,75446,75448,75450,75452],{"class":53,"line":75443},243,[51,75445,15714],{"class":64},[51,75447,70904],{"class":68},[51,75449,73],{"class":72},[51,75451,70909],{"class":282},[51,75453,90],{"class":72},[51,75455,75457],{"class":53,"line":75456},244,[51,75458,53362],{"class":72},[51,75460,75462,75464,75466],{"class":53,"line":75461},245,[51,75463,58971],{"class":72},[51,75465,52848],{"class":68},[51,75467,75468],{"class":72},"({\n",[51,75470,75472],{"class":53,"line":75471},246,[51,75473,75474],{"class":57},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[51,75476,75478],{"class":53,"line":75477},247,[51,75479,75480],{"class":57},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[51,75482,75484],{"class":53,"line":75483},248,[51,75485,75486],{"class":57},"        \u002F\u002F 对象的序号应为数组长度+1\n",[51,75488,75490],{"class":53,"line":75489},249,[51,75491,75492],{"class":57},"        \u002F\u002F unameId: arr.length + 1,\n",[51,75494,75496],{"class":53,"line":75495},250,[51,75497,3480],{"emptyLinePlaceholder":1192},[51,75499,75501],{"class":53,"line":75500},251,[51,75502,75503],{"class":57},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[51,75505,75507],{"class":53,"line":75506},252,[51,75508,75509],{"class":57},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[51,75511,75513],{"class":53,"line":75512},253,[51,75514,75515],{"class":57},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[51,75517,75519],{"class":53,"line":75518},254,[51,75520,75521],{"class":57},"        \u002F\u002F 0当假看\n",[51,75523,75525,75528,75530,75532,75535,75537,75539,75541,75544,75546,75548,75551,75553],{"class":53,"line":75524},255,[51,75526,75527],{"class":72},"        unameId: arr.",[51,75529,52932],{"class":175},[51,75531,74778],{"class":64},[51,75533,75534],{"class":72}," arr[arr.",[51,75536,52932],{"class":175},[51,75538,53235],{"class":64},[51,75540,26082],{"class":175},[51,75542,75543],{"class":72},"].unameId ",[51,75545,114],{"class":64},[51,75547,26082],{"class":175},[51,75549,75550],{"class":64}," :",[51,75552,26082],{"class":175},[51,75554,32430],{"class":72},[51,75556,75558],{"class":53,"line":75557},256,[51,75559,70957],{"class":72},[51,75561,75563],{"class":53,"line":75562},257,[51,75564,70962],{"class":72},[51,75566,75568],{"class":53,"line":75567},258,[51,75569,70972],{"class":72},[51,75571,75573],{"class":53,"line":75572},259,[51,75574,70967],{"class":72},[51,75576,75578],{"class":53,"line":75577},260,[51,75579,75580],{"class":72},"        city: city.value,\n",[51,75582,75584],{"class":53,"line":75583},261,[51,75585,75586],{"class":57},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[51,75588,75590],{"class":53,"line":75589},262,[51,75591,75592],{"class":57},"        \u002F\u002F time: new Date().toDateString()\n",[51,75594,75596,75599,75602],{"class":53,"line":75595},263,[51,75597,75598],{"class":72},"        time: ",[51,75600,75601],{"class":68},"getTime",[51,75603,154],{"class":72},[51,75605,75607],{"class":53,"line":75606},264,[51,75608,65779],{"class":72},[51,75610,75612],{"class":53,"line":75611},265,[51,75613,75614],{"class":57},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[51,75616,75618,75620],{"class":53,"line":75617},266,[51,75619,71032],{"class":68},[51,75621,154],{"class":72},[51,75623,75625,75627,75629,75631,75633],{"class":53,"line":75624},267,[51,75626,71015],{"class":175},[51,75628,1804],{"class":72},[51,75630,71020],{"class":68},[51,75632,14012],{"class":72},[51,75634,75635],{"class":57},"\u002F\u002F重置表单\n",[51,75637,75639],{"class":53,"line":75638},268,[51,75640,75641],{"class":57},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[51,75643,75645,75648,75650,75652,75655,75657,75659,75661,75663],{"class":53,"line":75644},269,[51,75646,75647],{"class":72},"      localStorage.",[51,75649,72618],{"class":68},[51,75651,73],{"class":72},[51,75653,75654],{"class":282},"'data'",[51,75656,13397],{"class":72},[51,75658,72628],{"class":175},[51,75660,1804],{"class":72},[51,75662,72633],{"class":68},[51,75664,75665],{"class":72},"(arr))\n",[51,75667,75669],{"class":53,"line":75668},270,[51,75670,34425],{"class":72},[51,75672,75674],{"class":53,"line":75673},271,[51,75675,3480],{"emptyLinePlaceholder":1192},[51,75677,75679],{"class":53,"line":75678},272,[51,75680,75681],{"class":57},"    \u002F\u002F 3.删除业务\n",[51,75683,75685],{"class":53,"line":75684},273,[51,75686,75687],{"class":57},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[51,75689,75691,75693,75695,75697,75699,75701,75703,75705,75707],{"class":53,"line":75690},274,[51,75692,71305],{"class":72},[51,75694,58777],{"class":68},[51,75696,73],{"class":72},[51,75698,58782],{"class":282},[51,75700,13397],{"class":72},[51,75702,55413],{"class":64},[51,75704,2750],{"class":72},[51,75706,1331],{"class":78},[51,75708,13404],{"class":72},[51,75710,75712],{"class":53,"line":75711},275,[51,75713,75714],{"class":57},"      \u002F\u002F 判断是否点击的是删除按钮\n",[51,75716,75718,75720,75722,75724,75726],{"class":53,"line":75717},276,[51,75719,55444],{"class":64},[51,75721,67998],{"class":72},[51,75723,55450],{"class":64},[51,75725,69220],{"class":282},[51,75727,13404],{"class":72},[51,75729,75731],{"class":53,"line":75730},277,[51,75732,75733],{"class":57},"        \u002F\u002F alert(1)\n",[51,75735,75737],{"class":53,"line":75736},278,[51,75738,75739],{"class":57},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[51,75741,75743],{"class":53,"line":75742},279,[51,75744,75745],{"class":57},"        \u002F\u002F console.log(e.target)\n",[51,75747,75749],{"class":53,"line":75748},280,[51,75750,75751],{"class":57},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[51,75753,75755],{"class":53,"line":75754},281,[51,75756,3480],{"emptyLinePlaceholder":1192},[51,75758,75760],{"class":53,"line":75759},282,[51,75761,75762],{"class":57},"        \u002F\u002F 确认框，确然是否真的要删除\n",[51,75764,75766],{"class":53,"line":75765},283,[51,75767,75768],{"class":57},"        \u002F\u002F confirm()为确认框\n",[51,75770,75772],{"class":53,"line":75771},284,[51,75773,75774],{"class":57},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[51,75776,75778,75780,75782,75785,75787,75790],{"class":53,"line":75777},285,[51,75779,3577],{"class":64},[51,75781,2750],{"class":72},[51,75783,75784],{"class":68},"confirm",[51,75786,73],{"class":72},[51,75788,75789],{"class":282},"'您确定要删除这条数据吗？'",[51,75791,75792],{"class":72},")) {\n",[51,75794,75796,75799,75801,75803,75805],{"class":53,"line":75795},286,[51,75797,75798],{"class":72},"          arr.",[51,75800,58974],{"class":68},[51,75802,71358],{"class":72},[51,75804,791],{"class":175},[51,75806,90],{"class":72},[51,75808,75810],{"class":53,"line":75809},287,[51,75811,75812],{"class":57},"          \u002F\u002F 3.4 重新渲染页面\n",[51,75814,75816,75819],{"class":53,"line":75815},288,[51,75817,75818],{"class":68},"          render",[51,75820,154],{"class":72},[51,75822,75824],{"class":53,"line":75823},289,[51,75825,75826],{"class":57},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[51,75828,75830,75833,75835,75837,75839,75841,75843,75845,75847],{"class":53,"line":75829},290,[51,75831,75832],{"class":72},"          localStorage.",[51,75834,72618],{"class":68},[51,75836,73],{"class":72},[51,75838,75654],{"class":282},[51,75840,13397],{"class":72},[51,75842,72628],{"class":175},[51,75844,1804],{"class":72},[51,75846,72633],{"class":68},[51,75848,75665],{"class":72},[51,75850,75852],{"class":53,"line":75851},291,[51,75853,3609],{"class":72},[51,75855,75857],{"class":53,"line":75856},292,[51,75858,53362],{"class":72},[51,75860,75862],{"class":53,"line":75861},293,[51,75863,3480],{"emptyLinePlaceholder":1192},[51,75865,75867],{"class":53,"line":75866},294,[51,75868,34425],{"class":72},[51,75870,75872],{"class":53,"line":75871},295,[51,75873,3480],{"emptyLinePlaceholder":1192},[51,75875,75877,75879,75881],{"class":53,"line":75876},296,[51,75878,53381],{"class":72},[51,75880,52777],{"class":52264},[51,75882,52271],{"class":72},[51,75884,75886,75888,75890],{"class":53,"line":75885},297,[51,75887,52749],{"class":72},[51,75889,52764],{"class":52264},[51,75891,52271],{"class":72},[51,75893,75895],{"class":53,"line":75894},298,[51,75896,3480],{"emptyLinePlaceholder":1192},[51,75898,75900,75902,75904],{"class":53,"line":75899},299,[51,75901,52749],{"class":72},[51,75903,51599],{"class":52264},[51,75905,52271],{"class":72},[14,75907,75909],{"id":75908},"_36-正则表达式","3.6 正则表达式",[40,75911,75912],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[40,75914,75915],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[40,75917,75918],{},"正则表达式的作用：",[1000,75920,75921,75928,75934],{},[22,75922,75923,75924,75927],{},"表单验证（ ",[840,75925,75926],{},"匹配"," ）",[22,75929,75930,75931,75927],{},"过滤敏感词（ ",[840,75932,75933],{},"替换",[22,75935,75936,75937,75927],{},"字符串中提取我们想要的部分（ ",[840,75938,75939],{},"提取",[1233,75941,75943],{"id":75942},"_361-语法","3.6.1 语法",[40,75945,75946],{},"正则表达式使用步骤：",[19,75948,75949,75952],{},[22,75950,75951],{},"定义规则",[22,75953,75954],{},"查找是否匹配",[40,75956,75957],{},"正则表达式里边不需要写引号",[40,75959,75960],{},[2564,75961],{"alt":35,"src":75962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[40,75964,75965],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[40,75967,75968],{},"reg.test(str)",[40,75970,75971],{},[2564,75972],{"alt":35,"src":75973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[40,75975,75976],{},[2564,75977],{"alt":35,"src":75978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[1233,75980,75982],{"id":75981},"_362-元字符","3.6.2 元字符",[19,75984,75985,75988,75991,75994,76001],{},[22,75986,75987],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[22,75989,75990],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[22,75992,75993],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[22,75995,75996,75997],{},"正则验证工具：",[981,75998,75999],{"href":75999,"rel":76000},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24828],[22,76002,76003],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22960,76005,76007],{"id":76006},"_3621-边界符","3.6.2.1 边界符",[40,76009,76010],{},[2564,76011],{"alt":35,"src":76012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[40,76014,76015],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[40,76017,76018],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[40,76020,76021],{},"只匹配一次",[40,76023,76024],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22960,76026,76028],{"id":76027},"_3622-量词","3.6.2.2 量词",[40,76030,76031],{},[2564,76032],{"alt":35,"src":76033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[40,76035,76036],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22960,76038,76040],{"id":76039},"_3623-元字符","3.6.2.3 元字符",[40,76042,76043],{},[2564,76044],{"alt":35,"src":76045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[40,76047,76048],{},"匹配的是a或b或c []只选一个",[40,76050,76051],{},[2564,76052],{"alt":35,"src":76053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[40,76055,76056],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[40,76058,76059],{},[2564,76060],{"alt":35,"src":76061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[40,76063,76064],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[40,76066,76067],{},[2564,76068],{"alt":35,"src":76069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[29,76071,76073],{"className":51597,"code":76072,"language":51599,"meta":35,"style":35},"\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",[37,76074,76075,76085,76099,76103,76111,76125,76145,76157,76165,76169,76177,76185,76190,76221,76248,76276,76280,76285,76313,76344,76349,76354,76385,76417,76449,76453,76458,76489,76519,76549,76553,76558,76589,76620,76650,76680,76684,76689,76722,76726,76731,76762,76793,76797,76802,76833,76863,76894,76898,76903,76935,76966,76997,77024,77055,77087,77120,77151,77182,77214,77245,77253,77261,77265],{"__ignoreMap":35},[51,76076,76077,76079,76081,76083],{"class":53,"line":54},[51,76078,52261],{"class":72},[51,76080,52265],{"class":52264},[51,76082,52268],{"class":68},[51,76084,52271],{"class":72},[51,76086,76087,76089,76091,76093,76095,76097],{"class":53,"line":61},[51,76088,2154],{"class":72},[51,76090,51599],{"class":52264},[51,76092,52280],{"class":68},[51,76094,108],{"class":72},[51,76096,52285],{"class":282},[51,76098,52271],{"class":72},[51,76100,76101],{"class":53,"line":93},[51,76102,3480],{"emptyLinePlaceholder":1192},[51,76104,76105,76107,76109],{"class":53,"line":99},[51,76106,2154],{"class":72},[51,76108,52298],{"class":52264},[51,76110,52271],{"class":72},[51,76112,76113,76115,76117,76119,76121,76123],{"class":53,"line":120},[51,76114,53108],{"class":72},[51,76116,52308],{"class":52264},[51,76118,52311],{"class":68},[51,76120,108],{"class":72},[51,76122,52316],{"class":282},[51,76124,52271],{"class":72},[51,76126,76127,76129,76131,76133,76135,76137,76139,76141,76143],{"class":53,"line":129},[51,76128,53108],{"class":72},[51,76130,52308],{"class":52264},[51,76132,15882],{"class":68},[51,76134,108],{"class":72},[51,76136,52355],{"class":282},[51,76138,52335],{"class":68},[51,76140,108],{"class":72},[51,76142,52362],{"class":282},[51,76144,52271],{"class":72},[51,76146,76147,76149,76151,76153,76155],{"class":53,"line":206},[51,76148,53108],{"class":72},[51,76150,52371],{"class":52264},[51,76152,52374],{"class":72},[51,76154,52371],{"class":52264},[51,76156,52271],{"class":72},[51,76158,76159,76161,76163],{"class":53,"line":212},[51,76160,52749],{"class":72},[51,76162,52298],{"class":52264},[51,76164,52271],{"class":72},[51,76166,76167],{"class":53,"line":227},[51,76168,3480],{"emptyLinePlaceholder":1192},[51,76170,76171,76173,76175],{"class":53,"line":370},[51,76172,2154],{"class":72},[51,76174,52764],{"class":52264},[51,76176,52271],{"class":72},[51,76178,76179,76181,76183],{"class":53,"line":387},[51,76180,53108],{"class":72},[51,76182,52777],{"class":52264},[51,76184,52271],{"class":72},[51,76186,76187],{"class":53,"line":404},[51,76188,76189],{"class":57},"    \u002F\u002F 元字符中\n",[51,76191,76192,76194,76196,76198,76200,76203,76205,76207,76210,76212,76215,76218],{"class":53,"line":415},[51,76193,74717],{"class":72},[51,76195,59211],{"class":68},[51,76197,73],{"class":72},[51,76199,1830],{"class":282},[51,76201,76202],{"class":48941},"哈",[51,76204,1830],{"class":282},[51,76206,1804],{"class":72},[51,76208,76209],{"class":68},"test",[51,76211,73],{"class":72},[51,76213,76214],{"class":282},"'哈'",[51,76216,76217],{"class":72},"))  ",[51,76219,76220],{"class":57},"\u002F\u002Ftrue\n",[51,76222,76223,76225,76227,76229,76231,76233,76235,76237,76239,76241,76244,76246],{"class":53,"line":420},[51,76224,74717],{"class":72},[51,76226,59211],{"class":68},[51,76228,73],{"class":72},[51,76230,1830],{"class":282},[51,76232,76202],{"class":48941},[51,76234,1830],{"class":282},[51,76236,1804],{"class":72},[51,76238,76209],{"class":68},[51,76240,73],{"class":72},[51,76242,76243],{"class":282},"'哈哈'",[51,76245,76217],{"class":72},[51,76247,76220],{"class":57},[51,76249,76250,76252,76254,76256,76258,76260,76262,76264,76266,76268,76271,76274],{"class":53,"line":429},[51,76251,74717],{"class":72},[51,76253,59211],{"class":68},[51,76255,73],{"class":72},[51,76257,1830],{"class":282},[51,76259,76202],{"class":48941},[51,76261,1830],{"class":282},[51,76263,1804],{"class":72},[51,76265,76209],{"class":68},[51,76267,73],{"class":72},[51,76269,76270],{"class":282},"'二哈'",[51,76272,76273],{"class":72},"))   ",[51,76275,76220],{"class":57},[51,76277,76278],{"class":53,"line":434},[51,76279,3480],{"emptyLinePlaceholder":1192},[51,76281,76282],{"class":53,"line":448},[51,76283,76284],{"class":57},"    \u002F\u002F 1.边界符\n",[51,76286,76287,76289,76291,76293,76295,76297,76299,76301,76303,76305,76307,76309,76311],{"class":53,"line":462},[51,76288,74717],{"class":72},[51,76290,59211],{"class":68},[51,76292,73],{"class":72},[51,76294,1830],{"class":282},[51,76296,2209],{"class":64},[51,76298,76202],{"class":48941},[51,76300,1830],{"class":282},[51,76302,1804],{"class":72},[51,76304,76209],{"class":68},[51,76306,73],{"class":72},[51,76308,76214],{"class":282},[51,76310,76217],{"class":72},[51,76312,76220],{"class":57},[51,76314,76315,76317,76319,76321,76323,76325,76327,76329,76331,76333,76335,76337,76339,76341],{"class":53,"line":470},[51,76316,74717],{"class":72},[51,76318,59211],{"class":68},[51,76320,73],{"class":72},[51,76322,1830],{"class":282},[51,76324,2209],{"class":64},[51,76326,76202],{"class":48941},[51,76328,1552],{"class":64},[51,76330,1830],{"class":282},[51,76332,1804],{"class":72},[51,76334,76209],{"class":68},[51,76336,73],{"class":72},[51,76338,76243],{"class":282},[51,76340,76217],{"class":72},[51,76342,76343],{"class":57},"\u002F\u002Ffalse\n",[51,76345,76346],{"class":53,"line":2783},[51,76347,76348],{"class":57},"    \u002F\u002F 2.量词\n",[51,76350,76351],{"class":53,"line":2788},[51,76352,76353],{"class":57},"    \u002F\u002F 量词 * 类似于 >= 0\n",[51,76355,76356,76358,76360,76362,76364,76366,76368,76371,76373,76375,76377,76379,76381,76383],{"class":53,"line":2817},[51,76357,74717],{"class":72},[51,76359,59211],{"class":68},[51,76361,73],{"class":72},[51,76363,1830],{"class":282},[51,76365,2209],{"class":64},[51,76367,76202],{"class":48941},[51,76369,76370],{"class":64},"*$",[51,76372,1830],{"class":282},[51,76374,1804],{"class":72},[51,76376,76209],{"class":68},[51,76378,73],{"class":72},[51,76380,76243],{"class":282},[51,76382,76217],{"class":72},[51,76384,76220],{"class":57},[51,76386,76387,76389,76391,76393,76395,76397,76399,76401,76403,76405,76407,76409,76412,76414],{"class":53,"line":2822},[51,76388,74717],{"class":72},[51,76390,59211],{"class":68},[51,76392,73],{"class":72},[51,76394,1830],{"class":282},[51,76396,2209],{"class":64},[51,76398,76202],{"class":48941},[51,76400,76370],{"class":64},[51,76402,1830],{"class":282},[51,76404,1804],{"class":72},[51,76406,76209],{"class":68},[51,76408,73],{"class":72},[51,76410,76411],{"class":282},"'二哈好傻'",[51,76413,76217],{"class":72},[51,76415,76416],{"class":57},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[51,76418,76419,76421,76423,76425,76427,76429,76431,76433,76435,76437,76439,76441,76444,76446],{"class":53,"line":2839},[51,76420,74717],{"class":72},[51,76422,59211],{"class":68},[51,76424,73],{"class":72},[51,76426,1830],{"class":282},[51,76428,2209],{"class":64},[51,76430,76202],{"class":48941},[51,76432,76370],{"class":64},[51,76434,1830],{"class":282},[51,76436,1804],{"class":72},[51,76438,76209],{"class":68},[51,76440,73],{"class":72},[51,76442,76443],{"class":282},"'哈好哈'",[51,76445,76273],{"class":72},[51,76447,76448],{"class":57},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[51,76450,76451],{"class":53,"line":2844},[51,76452,3480],{"emptyLinePlaceholder":1192},[51,76454,76455],{"class":53,"line":2849},[51,76456,76457],{"class":57},"    \u002F\u002F +类似于>=1\n",[51,76459,76460,76462,76464,76466,76468,76470,76472,76475,76477,76479,76481,76483,76485,76487],{"class":53,"line":2854},[51,76461,74717],{"class":72},[51,76463,59211],{"class":68},[51,76465,73],{"class":72},[51,76467,1830],{"class":282},[51,76469,2209],{"class":64},[51,76471,76202],{"class":48941},[51,76473,76474],{"class":64},"+$",[51,76476,1830],{"class":282},[51,76478,1804],{"class":72},[51,76480,76209],{"class":68},[51,76482,73],{"class":72},[51,76484,76243],{"class":282},[51,76486,76217],{"class":72},[51,76488,76220],{"class":57},[51,76490,76491,76493,76495,76497,76499,76501,76503,76505,76507,76509,76511,76513,76515,76517],{"class":53,"line":2868},[51,76492,74717],{"class":72},[51,76494,59211],{"class":68},[51,76496,73],{"class":72},[51,76498,1830],{"class":282},[51,76500,2209],{"class":64},[51,76502,76202],{"class":48941},[51,76504,76474],{"class":64},[51,76506,1830],{"class":282},[51,76508,1804],{"class":72},[51,76510,76209],{"class":68},[51,76512,73],{"class":72},[51,76514,76411],{"class":282},[51,76516,76217],{"class":72},[51,76518,76416],{"class":57},[51,76520,76521,76523,76525,76527,76529,76531,76533,76535,76537,76539,76541,76543,76545,76547],{"class":53,"line":2873},[51,76522,74717],{"class":72},[51,76524,59211],{"class":68},[51,76526,73],{"class":72},[51,76528,1830],{"class":282},[51,76530,2209],{"class":64},[51,76532,76202],{"class":48941},[51,76534,76474],{"class":64},[51,76536,1830],{"class":282},[51,76538,1804],{"class":72},[51,76540,76209],{"class":68},[51,76542,73],{"class":72},[51,76544,76443],{"class":282},[51,76546,76273],{"class":72},[51,76548,76343],{"class":57},[51,76550,76551],{"class":53,"line":3657},[51,76552,3480],{"emptyLinePlaceholder":1192},[51,76554,76555],{"class":53,"line":3671},[51,76556,76557],{"class":57},"    \u002F\u002F ?类似于0次或一次\n",[51,76559,76560,76562,76564,76566,76568,76570,76573,76575,76577,76579,76581,76583,76585,76587],{"class":53,"line":3679},[51,76561,74717],{"class":72},[51,76563,59211],{"class":68},[51,76565,73],{"class":72},[51,76567,1830],{"class":282},[51,76569,2209],{"class":64},[51,76571,76572],{"class":48941},"哈？",[51,76574,1552],{"class":64},[51,76576,1830],{"class":282},[51,76578,1804],{"class":72},[51,76580,76209],{"class":68},[51,76582,73],{"class":72},[51,76584,75192],{"class":282},[51,76586,76273],{"class":72},[51,76588,76220],{"class":57},[51,76590,76591,76593,76595,76597,76599,76601,76603,76606,76608,76610,76612,76614,76616,76618],{"class":53,"line":3684},[51,76592,74717],{"class":72},[51,76594,59211],{"class":68},[51,76596,73],{"class":72},[51,76598,1830],{"class":282},[51,76600,2209],{"class":64},[51,76602,76202],{"class":48941},[51,76604,76605],{"class":64},"?$",[51,76607,1830],{"class":282},[51,76609,1804],{"class":72},[51,76611,76209],{"class":68},[51,76613,73],{"class":72},[51,76615,76243],{"class":282},[51,76617,76217],{"class":72},[51,76619,76343],{"class":57},[51,76621,76622,76624,76626,76628,76630,76632,76634,76636,76638,76640,76642,76644,76646,76648],{"class":53,"line":3690},[51,76623,74717],{"class":72},[51,76625,59211],{"class":68},[51,76627,73],{"class":72},[51,76629,1830],{"class":282},[51,76631,2209],{"class":64},[51,76633,76202],{"class":48941},[51,76635,76605],{"class":64},[51,76637,1830],{"class":282},[51,76639,1804],{"class":72},[51,76641,76209],{"class":68},[51,76643,73],{"class":72},[51,76645,76411],{"class":282},[51,76647,76217],{"class":72},[51,76649,76416],{"class":57},[51,76651,76652,76654,76656,76658,76660,76662,76664,76666,76668,76670,76672,76674,76676,76678],{"class":53,"line":3696},[51,76653,74717],{"class":72},[51,76655,59211],{"class":68},[51,76657,73],{"class":72},[51,76659,1830],{"class":282},[51,76661,2209],{"class":64},[51,76663,76202],{"class":48941},[51,76665,76605],{"class":64},[51,76667,1830],{"class":282},[51,76669,1804],{"class":72},[51,76671,76209],{"class":68},[51,76673,73],{"class":72},[51,76675,76443],{"class":282},[51,76677,76217],{"class":72},[51,76679,76343],{"class":57},[51,76681,76682],{"class":53,"line":3701},[51,76683,3480],{"emptyLinePlaceholder":1192},[51,76685,76686],{"class":53,"line":8910},[51,76687,76688],{"class":57},"    \u002F\u002F {n}写几，就必须出现几次\n",[51,76690,76691,76693,76695,76697,76699,76701,76703,76706,76708,76710,76712,76714,76717,76720],{"class":53,"line":8934},[51,76692,74717],{"class":72},[51,76694,59211],{"class":68},[51,76696,73],{"class":72},[51,76698,1830],{"class":282},[51,76700,2209],{"class":64},[51,76702,76202],{"class":48941},[51,76704,76705],{"class":64},"{4}$",[51,76707,1830],{"class":282},[51,76709,1804],{"class":72},[51,76711,76209],{"class":68},[51,76713,73],{"class":72},[51,76715,76716],{"class":282},"'哈哈哈哈'",[51,76718,76719],{"class":72},")) ",[51,76721,76220],{"class":57},[51,76723,76724],{"class":53,"line":8939},[51,76725,3480],{"emptyLinePlaceholder":1192},[51,76727,76728],{"class":53,"line":8945},[51,76729,76730],{"class":57},"    \u002F\u002F {n,}大于等于n次\n",[51,76732,76733,76735,76737,76739,76741,76743,76745,76748,76750,76752,76754,76756,76758,76760],{"class":53,"line":8972},[51,76734,74717],{"class":72},[51,76736,59211],{"class":68},[51,76738,73],{"class":72},[51,76740,1830],{"class":282},[51,76742,2209],{"class":64},[51,76744,76202],{"class":48941},[51,76746,76747],{"class":64},"{4,}$",[51,76749,1830],{"class":282},[51,76751,1804],{"class":72},[51,76753,76209],{"class":68},[51,76755,73],{"class":72},[51,76757,76716],{"class":282},[51,76759,76719],{"class":72},[51,76761,76220],{"class":57},[51,76763,76764,76766,76768,76770,76772,76774,76776,76778,76780,76782,76784,76786,76789,76791],{"class":53,"line":8977},[51,76765,74717],{"class":72},[51,76767,59211],{"class":68},[51,76769,73],{"class":72},[51,76771,1830],{"class":282},[51,76773,2209],{"class":64},[51,76775,76202],{"class":48941},[51,76777,76747],{"class":64},[51,76779,1830],{"class":282},[51,76781,1804],{"class":72},[51,76783,76209],{"class":68},[51,76785,73],{"class":72},[51,76787,76788],{"class":282},"'哈哈哈哈哈'",[51,76790,76719],{"class":72},[51,76792,76220],{"class":57},[51,76794,76795],{"class":53,"line":8983},[51,76796,3480],{"emptyLinePlaceholder":1192},[51,76798,76799],{"class":53,"line":8995},[51,76800,76801],{"class":57},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[51,76803,76804,76806,76808,76810,76812,76814,76816,76819,76821,76823,76825,76827,76829,76831],{"class":53,"line":9007},[51,76805,74717],{"class":72},[51,76807,59211],{"class":68},[51,76809,73],{"class":72},[51,76811,1830],{"class":282},[51,76813,2209],{"class":64},[51,76815,76202],{"class":48941},[51,76817,76818],{"class":64},"{4,6}$",[51,76820,1830],{"class":282},[51,76822,1804],{"class":72},[51,76824,76209],{"class":68},[51,76826,73],{"class":72},[51,76828,76716],{"class":282},[51,76830,76719],{"class":72},[51,76832,76220],{"class":57},[51,76834,76835,76837,76839,76841,76843,76845,76847,76849,76851,76853,76855,76857,76859,76861],{"class":53,"line":9019},[51,76836,74717],{"class":72},[51,76838,59211],{"class":68},[51,76840,73],{"class":72},[51,76842,1830],{"class":282},[51,76844,2209],{"class":64},[51,76846,76202],{"class":48941},[51,76848,76818],{"class":64},[51,76850,1830],{"class":282},[51,76852,1804],{"class":72},[51,76854,76209],{"class":68},[51,76856,73],{"class":72},[51,76858,76788],{"class":282},[51,76860,76719],{"class":72},[51,76862,76220],{"class":57},[51,76864,76865,76867,76869,76871,76873,76875,76877,76879,76881,76883,76885,76887,76890,76892],{"class":53,"line":10678},[51,76866,74717],{"class":72},[51,76868,59211],{"class":68},[51,76870,73],{"class":72},[51,76872,1830],{"class":282},[51,76874,2209],{"class":64},[51,76876,76202],{"class":48941},[51,76878,76818],{"class":64},[51,76880,1830],{"class":282},[51,76882,1804],{"class":72},[51,76884,76209],{"class":68},[51,76886,73],{"class":72},[51,76888,76889],{"class":282},"'哈哈哈哈哈哈哈'",[51,76891,76719],{"class":72},[51,76893,76343],{"class":57},[51,76895,76896],{"class":53,"line":10703},[51,76897,3480],{"emptyLinePlaceholder":1192},[51,76899,76900],{"class":53,"line":10726},[51,76901,76902],{"class":57},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[51,76904,76905,76907,76909,76911,76913,76915,76918,76920,76922,76924,76926,76928,76931,76933],{"class":53,"line":10750},[51,76906,74717],{"class":72},[51,76908,59211],{"class":68},[51,76910,73],{"class":72},[51,76912,1830],{"class":282},[51,76914,2209],{"class":64},[51,76916,76917],{"class":175},"[abc]",[51,76919,1552],{"class":64},[51,76921,1830],{"class":282},[51,76923,1804],{"class":72},[51,76925,76209],{"class":68},[51,76927,73],{"class":72},[51,76929,76930],{"class":282},"'a'",[51,76932,76217],{"class":72},[51,76934,76220],{"class":57},[51,76936,76937,76939,76941,76943,76945,76947,76949,76951,76953,76955,76957,76959,76962,76964],{"class":53,"line":10755},[51,76938,74717],{"class":72},[51,76940,59211],{"class":68},[51,76942,73],{"class":72},[51,76944,1830],{"class":282},[51,76946,2209],{"class":64},[51,76948,76917],{"class":175},[51,76950,1552],{"class":64},[51,76952,1830],{"class":282},[51,76954,1804],{"class":72},[51,76956,76209],{"class":68},[51,76958,73],{"class":72},[51,76960,76961],{"class":282},"'b'",[51,76963,76217],{"class":72},[51,76965,76220],{"class":57},[51,76967,76968,76970,76972,76974,76976,76978,76980,76982,76984,76986,76988,76990,76993,76995],{"class":53,"line":10760},[51,76969,74717],{"class":72},[51,76971,59211],{"class":68},[51,76973,73],{"class":72},[51,76975,1830],{"class":282},[51,76977,2209],{"class":64},[51,76979,76917],{"class":175},[51,76981,1552],{"class":64},[51,76983,1830],{"class":282},[51,76985,1804],{"class":72},[51,76987,76209],{"class":68},[51,76989,73],{"class":72},[51,76991,76992],{"class":282},"'c'",[51,76994,76217],{"class":72},[51,76996,76220],{"class":57},[51,76998,76999,77001,77003,77005,77007,77009,77011,77013,77015,77017,77020,77022],{"class":53,"line":10765},[51,77000,74717],{"class":72},[51,77002,59211],{"class":68},[51,77004,73],{"class":72},[51,77006,1830],{"class":282},[51,77008,76917],{"class":175},[51,77010,1830],{"class":282},[51,77012,1804],{"class":72},[51,77014,76209],{"class":68},[51,77016,73],{"class":72},[51,77018,77019],{"class":282},"'ab'",[51,77021,76217],{"class":72},[51,77023,76220],{"class":57},[51,77025,77026,77028,77030,77032,77034,77036,77038,77040,77042,77044,77046,77048,77050,77052],{"class":53,"line":10774},[51,77027,74717],{"class":72},[51,77029,59211],{"class":68},[51,77031,73],{"class":72},[51,77033,1830],{"class":282},[51,77035,2209],{"class":64},[51,77037,76917],{"class":175},[51,77039,1552],{"class":64},[51,77041,1830],{"class":282},[51,77043,1804],{"class":72},[51,77045,76209],{"class":68},[51,77047,73],{"class":72},[51,77049,77019],{"class":282},[51,77051,76217],{"class":72},[51,77053,77054],{"class":57},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[51,77056,77057,77059,77061,77063,77065,77067,77069,77072,77074,77076,77078,77080,77082,77084],{"class":53,"line":10779},[51,77058,74717],{"class":72},[51,77060,59211],{"class":68},[51,77062,73],{"class":72},[51,77064,1830],{"class":282},[51,77066,2209],{"class":64},[51,77068,76917],{"class":175},[51,77070,77071],{"class":64},"{2}$",[51,77073,1830],{"class":282},[51,77075,1804],{"class":72},[51,77077,76209],{"class":68},[51,77079,73],{"class":72},[51,77081,77019],{"class":282},[51,77083,76217],{"class":72},[51,77085,77086],{"class":57},"\u002F\u002Ftrue   可以选两个\n",[51,77088,77089,77091,77093,77095,77097,77099,77102,77104,77106,77108,77110,77112,77115,77117],{"class":53,"line":10785},[51,77090,74717],{"class":72},[51,77092,59211],{"class":68},[51,77094,73],{"class":72},[51,77096,1830],{"class":282},[51,77098,2209],{"class":64},[51,77100,77101],{"class":175},"[a-z]",[51,77103,1552],{"class":64},[51,77105,1830],{"class":282},[51,77107,1804],{"class":72},[51,77109,76209],{"class":68},[51,77111,73],{"class":72},[51,77113,77114],{"class":282},"'p'",[51,77116,76273],{"class":72},[51,77118,77119],{"class":57},"\u002F\u002Ftrue   依然只能选一个\n",[51,77121,77122,77124,77126,77128,77130,77132,77135,77137,77139,77141,77143,77145,77147,77149],{"class":53,"line":10806},[51,77123,74717],{"class":72},[51,77125,59211],{"class":68},[51,77127,73],{"class":72},[51,77129,1830],{"class":282},[51,77131,2209],{"class":64},[51,77133,77134],{"class":175},"[A-Z]",[51,77136,1552],{"class":64},[51,77138,1830],{"class":282},[51,77140,1804],{"class":72},[51,77142,76209],{"class":68},[51,77144,73],{"class":72},[51,77146,77114],{"class":282},[51,77148,76273],{"class":72},[51,77150,76343],{"class":57},[51,77152,77153,77155,77157,77159,77161,77163,77165,77167,77169,77171,77173,77175,77178,77180],{"class":53,"line":10812},[51,77154,74717],{"class":72},[51,77156,59211],{"class":68},[51,77158,73],{"class":72},[51,77160,1830],{"class":282},[51,77162,2209],{"class":64},[51,77164,77134],{"class":175},[51,77166,1552],{"class":64},[51,77168,1830],{"class":282},[51,77170,1804],{"class":72},[51,77172,76209],{"class":68},[51,77174,73],{"class":72},[51,77176,77177],{"class":282},"'P'",[51,77179,76273],{"class":72},[51,77181,76220],{"class":57},[51,77183,77184,77186,77188,77190,77192,77194,77197,77199,77201,77203,77205,77207,77210,77212],{"class":53,"line":10826},[51,77185,74717],{"class":72},[51,77187,59211],{"class":68},[51,77189,73],{"class":72},[51,77191,1830],{"class":282},[51,77193,2209],{"class":64},[51,77195,77196],{"class":175},"[0-9]",[51,77198,1552],{"class":64},[51,77200,1830],{"class":282},[51,77202,1804],{"class":72},[51,77204,76209],{"class":68},[51,77206,73],{"class":72},[51,77208,77209],{"class":282},"'0'",[51,77211,76273],{"class":72},[51,77213,76220],{"class":57},[51,77215,77216,77218,77220,77222,77224,77226,77229,77231,77233,77235,77237,77239,77241,77243],{"class":53,"line":10832},[51,77217,74717],{"class":72},[51,77219,59211],{"class":68},[51,77221,73],{"class":72},[51,77223,1830],{"class":282},[51,77225,2209],{"class":64},[51,77227,77228],{"class":175},"[a-zA-Z0-9]",[51,77230,1552],{"class":64},[51,77232,1830],{"class":282},[51,77234,1804],{"class":72},[51,77236,76209],{"class":68},[51,77238,73],{"class":72},[51,77240,77114],{"class":282},[51,77242,76217],{"class":72},[51,77244,76220],{"class":57},[51,77246,77247,77249,77251],{"class":53,"line":10859},[51,77248,53381],{"class":72},[51,77250,52777],{"class":52264},[51,77252,52271],{"class":72},[51,77254,77255,77257,77259],{"class":53,"line":10868},[51,77256,52749],{"class":72},[51,77258,52764],{"class":52264},[51,77260,52271],{"class":72},[51,77262,77263],{"class":53,"line":10874},[51,77264,3480],{"emptyLinePlaceholder":1192},[51,77266,77267,77269,77271],{"class":53,"line":10882},[51,77268,52749],{"class":72},[51,77270,51599],{"class":52264},[51,77272,52271],{"class":72},[22960,77274,77276],{"id":77275},"_3624-修饰符","3.6.2.4 修饰符",[40,77278,77279],{},[2564,77280],{"alt":35,"src":77281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[40,77283,77284],{},"replace是个方法，使用的时候一定不要忘记括号()",[40,77286,77287],{},[2564,77288],{"alt":35,"src":77289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[29,77291,77293],{"className":51597,"code":77292,"language":51599,"meta":35,"style":35},"\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",[37,77294,77295,77305,77319,77327,77341,77361,77373,77381,77389,77397,77429,77460,77465,77497,77508,77541,77550,77558,77566],{"__ignoreMap":35},[51,77296,77297,77299,77301,77303],{"class":53,"line":54},[51,77298,52261],{"class":72},[51,77300,52265],{"class":52264},[51,77302,52268],{"class":68},[51,77304,52271],{"class":72},[51,77306,77307,77309,77311,77313,77315,77317],{"class":53,"line":61},[51,77308,2154],{"class":72},[51,77310,51599],{"class":52264},[51,77312,52280],{"class":68},[51,77314,108],{"class":72},[51,77316,52285],{"class":282},[51,77318,52271],{"class":72},[51,77320,77321,77323,77325],{"class":53,"line":93},[51,77322,2154],{"class":72},[51,77324,52298],{"class":52264},[51,77326,52271],{"class":72},[51,77328,77329,77331,77333,77335,77337,77339],{"class":53,"line":99},[51,77330,53108],{"class":72},[51,77332,52308],{"class":52264},[51,77334,52311],{"class":68},[51,77336,108],{"class":72},[51,77338,52316],{"class":282},[51,77340,52271],{"class":72},[51,77342,77343,77345,77347,77349,77351,77353,77355,77357,77359],{"class":53,"line":120},[51,77344,53108],{"class":72},[51,77346,52308],{"class":52264},[51,77348,15882],{"class":68},[51,77350,108],{"class":72},[51,77352,52355],{"class":282},[51,77354,52335],{"class":68},[51,77356,108],{"class":72},[51,77358,52362],{"class":282},[51,77360,52271],{"class":72},[51,77362,77363,77365,77367,77369,77371],{"class":53,"line":129},[51,77364,53108],{"class":72},[51,77366,52371],{"class":52264},[51,77368,52374],{"class":72},[51,77370,52371],{"class":52264},[51,77372,52271],{"class":72},[51,77374,77375,77377,77379],{"class":53,"line":206},[51,77376,52749],{"class":72},[51,77378,52298],{"class":52264},[51,77380,52271],{"class":72},[51,77382,77383,77385,77387],{"class":53,"line":212},[51,77384,2154],{"class":72},[51,77386,52764],{"class":52264},[51,77388,52271],{"class":72},[51,77390,77391,77393,77395],{"class":53,"line":227},[51,77392,53108],{"class":72},[51,77394,52777],{"class":52264},[51,77396,52271],{"class":72},[51,77398,77399,77401,77403,77405,77407,77409,77412,77414,77416,77418,77420,77422,77425,77427],{"class":53,"line":370},[51,77400,74717],{"class":72},[51,77402,59211],{"class":68},[51,77404,73],{"class":72},[51,77406,1830],{"class":282},[51,77408,2209],{"class":64},[51,77410,77411],{"class":48941},"java",[51,77413,1552],{"class":64},[51,77415,1830],{"class":282},[51,77417,1804],{"class":72},[51,77419,76209],{"class":68},[51,77421,73],{"class":72},[51,77423,77424],{"class":282},"'java'",[51,77426,76719],{"class":72},[51,77428,76220],{"class":57},[51,77430,77431,77433,77435,77437,77439,77441,77443,77445,77447,77449,77451,77453,77456,77458],{"class":53,"line":387},[51,77432,74717],{"class":72},[51,77434,59211],{"class":68},[51,77436,73],{"class":72},[51,77438,1830],{"class":282},[51,77440,2209],{"class":64},[51,77442,77411],{"class":48941},[51,77444,1552],{"class":64},[51,77446,1830],{"class":282},[51,77448,1804],{"class":72},[51,77450,76209],{"class":68},[51,77452,73],{"class":72},[51,77454,77455],{"class":282},"'Java'",[51,77457,76719],{"class":72},[51,77459,76343],{"class":57},[51,77461,77462],{"class":53,"line":404},[51,77463,77464],{"class":57},"    \u002F\u002F 不区分大小写、\n",[51,77466,77467,77469,77471,77473,77475,77477,77479,77481,77483,77485,77487,77489,77491,77493,77495],{"class":53,"line":415},[51,77468,74717],{"class":72},[51,77470,59211],{"class":68},[51,77472,73],{"class":72},[51,77474,1830],{"class":282},[51,77476,2209],{"class":64},[51,77478,77411],{"class":48941},[51,77480,1552],{"class":64},[51,77482,1830],{"class":282},[51,77484,1689],{"class":64},[51,77486,1804],{"class":72},[51,77488,76209],{"class":68},[51,77490,73],{"class":72},[51,77492,77455],{"class":282},[51,77494,76719],{"class":72},[51,77496,76220],{"class":57},[51,77498,77499,77501,77503,77505],{"class":53,"line":420},[51,77500,12183],{"class":64},[51,77502,74883],{"class":175},[51,77504,14526],{"class":64},[51,77506,77507],{"class":282}," 'java是一门编程语言，学完java工资很高'\n",[51,77509,77510,77512,77515,77517,77520,77523,77525,77527,77529,77531,77534,77536,77539],{"class":53,"line":429},[51,77511,12183],{"class":64},[51,77513,77514],{"class":175}," result",[51,77516,14526],{"class":64},[51,77518,77519],{"class":72}," str.",[51,77521,77522],{"class":68},"replace",[51,77524,73],{"class":72},[51,77526,1830],{"class":282},[51,77528,77411],{"class":48941},[51,77530,1830],{"class":282},[51,77532,77533],{"class":64},"ig",[51,77535,13397],{"class":72},[51,77537,77538],{"class":282},"'前端'",[51,77540,90],{"class":72},[51,77542,77543,77545,77547],{"class":53,"line":434},[51,77544,74717],{"class":72},[51,77546,59211],{"class":68},[51,77548,77549],{"class":72},"(result)\n",[51,77551,77552,77554,77556],{"class":53,"line":448},[51,77553,53381],{"class":72},[51,77555,52777],{"class":52264},[51,77557,52271],{"class":72},[51,77559,77560,77562,77564],{"class":53,"line":462},[51,77561,52749],{"class":72},[51,77563,52764],{"class":52264},[51,77565,52271],{"class":72},[51,77567,77568,77570,77572],{"class":53,"line":470},[51,77569,52749],{"class":72},[51,77571,51599],{"class":52264},[51,77573,52271],{"class":72},[1179,77575,77576],{},"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":35,"searchDepth":61,"depth":61,"links":77578},[77579,77589,77601,77618,77625,77633],{"id":54324,"depth":61,"text":54325,"children":77580},[77581,77582,77583,77584,77585,77586,77587,77588],{"id":54328,"depth":93,"text":54329},{"id":54361,"depth":93,"text":54362},{"id":54400,"depth":93,"text":54401},{"id":54558,"depth":93,"text":54559},{"id":54606,"depth":93,"text":54607},{"id":54743,"depth":93,"text":54744},{"id":55065,"depth":93,"text":55066},{"id":58053,"depth":93,"text":58054},{"id":58081,"depth":61,"text":58082,"children":77590},[77591,77592,77593,77594,77595,77596,77597,77598,77599,77600],{"id":58085,"depth":93,"text":58086},{"id":58108,"depth":93,"text":58109},{"id":59023,"depth":93,"text":59024},{"id":59713,"depth":93,"text":59714},{"id":59995,"depth":93,"text":59996},{"id":64156,"depth":93,"text":64157},{"id":64326,"depth":93,"text":64327},{"id":64454,"depth":93,"text":64455},{"id":64479,"depth":93,"text":64480},{"id":65868,"depth":93,"text":65869},{"id":67021,"depth":61,"text":67022,"children":77602},[77603,77604,77605,77606,77607,77608,77609,77610,77611,77612,77613,77614,77615,77616,77617],{"id":67025,"depth":93,"text":67026},{"id":67679,"depth":93,"text":67680},{"id":69374,"depth":93,"text":69375},{"id":69415,"depth":93,"text":69416},{"id":69457,"depth":93,"text":69458},{"id":69471,"depth":93,"text":69472},{"id":69520,"depth":93,"text":69521},{"id":69532,"depth":93,"text":69533},{"id":69547,"depth":93,"text":69548},{"id":69583,"depth":93,"text":69584},{"id":69664,"depth":93,"text":69665},{"id":69792,"depth":93,"text":69793},{"id":69804,"depth":93,"text":69805},{"id":69823,"depth":93,"text":69824},{"id":71934,"depth":93,"text":71935},{"id":71953,"depth":61,"text":71954,"children":77619},[77620,77621,77622,77623,77624],{"id":71974,"depth":93,"text":71975},{"id":71994,"depth":93,"text":71995},{"id":72043,"depth":93,"text":72044},{"id":72168,"depth":93,"text":72169},{"id":72349,"depth":93,"text":72350},{"id":72367,"depth":61,"text":72368,"children":77626},[77627,77628,77629,77630,77631,77632],{"id":72382,"depth":93,"text":72383},{"id":72441,"depth":93,"text":72442},{"id":72465,"depth":93,"text":72466},{"id":72785,"depth":93,"text":72786},{"id":72817,"depth":93,"text":72818},{"id":72840,"depth":93,"text":72841},{"id":75908,"depth":61,"text":75909,"children":77634},[77635,77636],{"id":75942,"depth":93,"text":75943},{"id":75981,"depth":93,"text":75982},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54296,"description":24339},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77643,"title":77644,"body":77645,"description":24339,"extension":1190,"meta":93782,"navigation":1192,"path":93783,"seo":93784,"stem":93785,"__hash__":93786},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77646,"toc":93718},[77647,77650,77653,77657,77661,77666,77671,77682,77686,77691,77694,77698,77701,77706,77710,77714,77717,77722,77725,77729,77732,77740,77743,77747,77752,77757,77760,77764,77769,77774,77777,77781,77786,77789,77794,77797,77802,77805,77810,77815,77818,77821,77825,77830,77835,77838,77842,77846,77849,77852,77855,77859,77863,77868,77873,77876,77880,77885,77890,77893,77896,77899,77902,77905,77908,77911,77914,77917,77922,77926,77931,77936,77939,77942,77945,77948,77951,77954,77957,77960,77964,77968,77971,77974,77977,77982,77984,77987,77990,77993,77996,77999,78002,78005,78008,78011,78014,78017,78020,78023,78028,78033,78038,78041,78045,78048,78053,78057,78059,78070,78075,78176,78179,78182,78185,78188,78191,78194,78197,78200,78202,78205,78208,78211,78214,78217,78219,78222,78225,78228,78231,78234,78237,78239,78242,78244,78246,78249,78253,78257,78260,78263,78266,78269,78272,78275,78278,78281,78284,78289,78409,78412,78415,78420,78423,78426,78429,78432,78437,78440,78443,78446,78449,78454,78457,78557,78622,78696,78700,78703,78706,78710,78713,78727,78756,78759,78762,78765,78768,78771,78774,78777,78779,78782,78785,78788,78791,78795,78800,78804,78809,78884,78887,79070,79073,79076,79079,79082,79085,79087,79090,79093,79096,79099,79102,79105,79107,79111,79114,79119,79122,79125,79128,79131,79133,79138,79141,79144,79147,79150,79152,79157,79160,79163,79165,79167,79170,79174,79177,79180,79185,79188,79191,79194,79244,79249,79253,79258,79261,79330,79333,79342,79346,79351,79354,79357,79365,79368,79385,81187,81191,81195,81200,81203,81207,81213,81219,81371,81376,81381,81384,81387,81390,81393,81396,81399,81402,81405,81408,81411,81414,81417,81422,81426,81429,81440,81444,81449,81452,81455,81458,81461,81464,81466,81469,81472,81475,81478,81480,81497,81500,81504,81507,81512,81517,81520,81523,81527,81530,81533,81542,81545,81549,81552,81557,81562,81629,81633,81636,81639,81644,81649,81735,81740,81744,81747,81750,81765,81768,81773,81777,81782,81891,81894,81905,82055,82059,82064,82173,82177,82182,82187,82192,82195,82202,82222,82258,82422,82427,82430,82435,82442,82445,82448,82451,82510,82566,82622,82626,82631,82946,82949,82953,82956,82961,83070,83075,83079,83084,83088,83159,83163,83165,83168,83171,83209,83485,83489,83506,83572,83606,83610,83613,83618,83647,83654,83663,83668,83683,83688,83697,83700,83837,83841,83903,83907,83912,84157,84161,84166,84169,84172,84175,84178,84182,84187,85768,85772,85776,85782,85785,85790,85794,85797,85802,85805,85816,85820,85825,85829,85834,85839,85842,85847,85851,85855,85858,85863,85868,85871,85874,85877,85999,86004,86106,86109,86112,86116,86121,86293,86298,86302,86305,86310,86376,86381,86384,86515,86518,86523,86526,86529,86620,86625,86628,86631,86634,86637,86642,86647,86650,86655,86660,86665,86669,86672,86675,86680,86685,86690,86695,86749,86752,86755,86760,86763,86766,86771,86776,86781,86785,86790,86804,86809,86812,86817,86821,86826,86831,86836,86841,86846,86851,86856,86861,86864,86868,86873,86876,86879,86882,86887,86892,86895,86898,86902,86905,86908,86913,86918,86923,86928,86931,86936,86941,87002,87007,87010,87015,88256,88261,88265,88269,88274,88277,88282,88287,88290,88295,88297,88302,88306,88309,88312,88323,88327,88332,88337,88392,88397,88402,88407,88618,88623,88627,88632,88635,88637,88640,88643,89090,89095,89102,89108,89111,89114,89378,89383,89387,89652,89657,89661,89666,89671,89676,89681,90012,90015,90020,90025,90028,90032,90036,90041,90046,90051,90056,90061,90066,90070,90073,90078,90083,90086,90160,90165,90170,90175,90177,90180,90550,90555,90560,90565,90568,90571,90673,90678,90683,90786,90790,90795,90799,90803,90808,90813,90816,90821,90824,90827,91220,91225,91228,91231,91234,91237,91757,91761,91766,91771,91776,91779,91784,91787,91790,92172,92177,92179,92181,92184,92187,92699,92703,92764,92767,92770,92773,92777,92780,92785,92790,93715],[10,77648,77644],{"id":77649},"_4js进阶",[40,77651,77652],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77654,77656],{"id":77655},"_41-作用域","4.1 作用域",[1233,77658,77660],{"id":77659},"_411-局部作用域","4.1.1 局部作用域",[40,77662,77663],{},[2564,77664],{"alt":35,"src":77665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[40,77667,77668],{},[2564,77669],{"alt":35,"src":77670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1000,77672,77673,77676,77679],{},[22,77674,77675],{},"函数作用域在函数内部",[22,77677,77678],{},"块级作用域在{}",[22,77680,77681],{},"对象的那个{}不是作用域，不是块作用域",[1233,77683,77685],{"id":77684},"_412-全局作用域","4.1.2 全局作用域",[40,77687,77688],{},[2564,77689],{"alt":35,"src":77690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[40,77692,77693],{},"window.a=10不要这样写",[1233,77695,77697],{"id":77696},"_413-作用域链","4.1.3 作用域链",[40,77699,77700],{},"变量查找机制",[40,77702,77703],{},[2564,77704],{"alt":35,"src":77705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77707,77709],{"id":77708},"_42-垃圾回收机制","4.2 垃圾回收机制",[1233,77711,77713],{"id":77712},"_421-大体介绍","4.2.1 大体介绍",[40,77715,77716],{},"垃圾回收机制(Garbage Collection) 简称 GC",[40,77718,77719],{},[2564,77720],{"alt":35,"src":77721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[40,77723,77724],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[1233,77726,77728],{"id":77727},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[40,77730,77731],{},"堆栈空间分配区别：",[19,77733,77734,77737],{},[22,77735,77736],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[22,77738,77739],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[40,77741,77742],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22960,77744,77746],{"id":77745},"_4221-引用计数","4.2.2.1 引用计数",[40,77748,77749],{},[2564,77750],{"alt":35,"src":77751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[40,77753,77754],{},[2564,77755],{"alt":35,"src":77756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[40,77758,77759],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22960,77761,77763],{"id":77762},"_4222-标记清除法","4.2.2.2 标记清除法",[40,77765,77766],{},[2564,77767],{"alt":35,"src":77768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[40,77770,77771],{},[2564,77772],{"alt":35,"src":77773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[40,77775,77776],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77778,77780],{"id":77779},"_43-闭包","4.3 闭包",[40,77782,77783],{},[2564,77784],{"alt":35,"src":77785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[40,77787,77788],{},"闭包：内层函数+外层函数的变量",[40,77790,77791],{},[2564,77792],{"alt":35,"src":77793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[40,77795,77796],{},"closure就是闭包",[40,77798,77799],{},[2564,77800],{"alt":35,"src":77801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[40,77803,77804],{},"内层函数必须包含外层函数的变量才是闭包",[40,77806,77807],{},[2564,77808],{"alt":35,"src":77809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[40,77811,77812],{},[2564,77813],{"alt":35,"src":77814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[40,77816,77817],{},"闭包可能会引起内存泄漏",[40,77819,77820],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77822,77824],{"id":77823},"_44-变量提升","4.4 变量提升",[40,77826,77827],{},[2564,77828],{"alt":35,"src":77829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[40,77831,77832],{},[2564,77833],{"alt":35,"src":77834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[40,77836,77837],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77839,77841],{"id":77840},"_45-函数进阶","4.5 函数进阶",[1233,77843,77845],{"id":77844},"_451-函数提升","4.5.1 函数提升",[40,77847,77848],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[40,77850,77851],{},"只提升函数声明，不提升函数调用",[52777,77853,77854],{},"\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",[1233,77856,77858],{"id":77857},"_452-函数参数","4.5.2 函数参数",[22960,77860,77862],{"id":77861},"_4521-动态参数","4.5.2.1 动态参数",[40,77864,77865],{},[2564,77866],{"alt":35,"src":77867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[40,77869,77870],{},[2564,77871],{"alt":35,"src":77872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[40,77874,77875],{},"箭头函数里边没有arguments",[22960,77877,77879],{"id":77878},"_4522-剩余参数","4.5.2.2 剩余参数",[40,77881,77882],{},[2564,77883],{"alt":35,"src":77884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[40,77886,77887],{},[2564,77888],{"alt":35,"src":77889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[40,77891,77892],{},"剩余参数使用的时候不需要写...",[40,77894,77895],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[40,77897,77898],{},"  function getSum(a,b,...arr) {",[40,77900,77901],{},"  console.log(11)",[40,77903,77904],{},"  }",[40,77906,77907],{},"  getSum(1,2,3,4)",[40,77909,77910],{},"  将1传给a，2传给b，剩下的传给剩余参数",[40,77912,77913],{},"  getSum(1,2)",[40,77915,77916],{},"  将1传给a，2传给b，剩余参数为一个空数组",[40,77918,77919],{},[2564,77920],{"alt":35,"src":77921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22960,77923,77925],{"id":77924},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[40,77927,77928],{},[2564,77929],{"alt":35,"src":77930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[40,77932,77933],{},[2564,77934],{"alt":35,"src":77935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[40,77937,77938],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[40,77940,77941],{},"展开运算符可以用于数组之间的合并：",[40,77943,77944],{},"const arr1 = [1, 2, 3]",[40,77946,77947],{},"const arr2 = [3, 4, 5]",[40,77949,77950],{},"const arr = [...arr1, ...arr2]",[40,77952,77953],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[40,77955,77956],{},"剩余参数：函数参数使用，得到真数组",[40,77958,77959],{},"展开运算符：数组中使用，数组展开",[1233,77961,77963],{"id":77962},"_453-箭头函数","4.5.3 箭头函数",[22960,77965,77967],{"id":77966},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[40,77969,77970],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[40,77972,77973],{},"它不是万能的！！！",[40,77975,77976],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[40,77978,77979],{},[2564,77980],{"alt":35,"src":77981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[40,77983,1290],{},[40,77985,77986],{},"① 只有一个形参的时候，可以省略小括号：",[40,77988,77989],{},"const fn=x=>{console.log(x)}",[40,77991,77992],{},"② 只有一行代码时可以省略大括号：",[40,77994,77995],{},"const fn=x=>console.log(11)",[40,77997,77998],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[40,78000,78001],{},"const fn=x=>x+x",[40,78003,78004],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[40,78006,78007],{},"⑤ 阻止表单默认提交：",[40,78009,78010],{},"const form = document.querySelector('form')",[40,78012,78013],{},"form.addEventListener('click', ev => ev.preventDefault())",[40,78015,78016],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[40,78018,78019],{},"const fn=uname=>({uname:uname})",[40,78021,78022],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[40,78024,78025],{},[2564,78026],{"alt":35,"src":78027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[40,78029,78030],{},[2564,78031],{"alt":35,"src":78032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[40,78034,78035],{},[2564,78036],{"alt":35,"src":78037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[40,78039,78040],{},"一定不要忘记用()，有()就理解为自带return",[22960,78042,78044],{"id":78043},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[40,78046,78047],{},"箭头函数是没有动态参数的arguments",[40,78049,78050],{},[2564,78051],{"alt":35,"src":78052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22960,78054,78056],{"id":78055},"_4533-箭头函数this","4.5.3.3 箭头函数this",[40,78058,12294],{},[19,78060,78061,78064,78067],{},[22,78062,78063],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[22,78065,78066],{},"事件回调函数使用箭头函数时，this 为全局的 window",[22,78068,78069],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[40,78071,78072],{},[2564,78073],{"alt":35,"src":78074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[29,78076,78078],{"className":54031,"code":78077,"language":54033,"meta":35,"style":35},"  \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",[37,78079,78080,78088,78093,78098,78103,78108,78113,78117,78122,78126,78130,78135,78140,78145,78149,78153,78158,78163,78168],{"__ignoreMap":35},[51,78081,78082,78084,78086],{"class":53,"line":54},[51,78083,53108],{"class":72},[51,78085,52777],{"class":52264},[51,78087,52271],{"class":72},[51,78089,78090],{"class":53,"line":61},[51,78091,78092],{"class":72},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[51,78094,78095],{"class":53,"line":93},[51,78096,78097],{"class":72},"    console.log(this) \u002F\u002F指向window\n",[51,78099,78100],{"class":53,"line":99},[51,78101,78102],{"class":72},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[51,78104,78105],{"class":53,"line":120},[51,78106,78107],{"class":72},"    function fn() {\n",[51,78109,78110],{"class":53,"line":129},[51,78111,78112],{"class":72},"      console.log(this)  \u002F\u002F指向window\n",[51,78114,78115],{"class":53,"line":206},[51,78116,3267],{"class":72},[51,78118,78119],{"class":53,"line":212},[51,78120,78121],{"class":72},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[51,78123,78124],{"class":53,"line":227},[51,78125,3480],{"emptyLinePlaceholder":1192},[51,78127,78128],{"class":53,"line":370},[51,78129,72487],{"class":72},[51,78131,78132],{"class":53,"line":387},[51,78133,78134],{"class":72},"      name: 'andy',\n",[51,78136,78137],{"class":53,"line":404},[51,78138,78139],{"class":72},"      sayHai: function () {\n",[51,78141,78142],{"class":53,"line":415},[51,78143,78144],{"class":72},"        console.log(this)\n",[51,78146,78147],{"class":53,"line":420},[51,78148,53362],{"class":72},[51,78150,78151],{"class":53,"line":429},[51,78152,3267],{"class":72},[51,78154,78155],{"class":53,"line":434},[51,78156,78157],{"class":72},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[51,78159,78160],{"class":53,"line":448},[51,78161,78162],{"class":72},"    \u002F\u002F 2.箭头函数的this\n",[51,78164,78165],{"class":53,"line":462},[51,78166,78167],{"class":72},"    const fn = () => console.log(this)\n",[51,78169,78170,78172,78174],{"class":53,"line":470},[51,78171,53381],{"class":72},[51,78173,52777],{"class":52264},[51,78175,52271],{"class":72},[40,78177,78178],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[40,78180,78181],{},"const fn = () => console.log(this)",[40,78183,78184],{},"fn() \u002F\u002F指向window",[40,78186,78187],{},"\u002F\u002F 3.对象方法箭头函数 this",[40,78189,78190],{},"①",[40,78192,78193],{},"const obj = {",[40,78195,78196],{},"uname: 'pink老师',",[40,78198,78199],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[40,78201,2190],{},[40,78203,78204],{},"调用对象里边的函数",[40,78206,78207],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[40,78209,78210],{},"obj.sayHai()",[40,78212,78213],{},"②",[40,78215,78216],{},"const obj1 = {",[40,78218,78196],{},[40,78220,78221],{},"sayHai: function () {",[40,78223,78224],{},"let i = 10",[40,78226,78227],{},"const count = () => {",[40,78229,78230],{},"console.log(this)",[40,78232,78233],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[40,78235,78236],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[40,78238,2190],{},[40,78240,78241],{},"count()",[40,78243,2190],{},[40,78245,2190],{},[40,78247,78248],{},"obj1.sayHai()",[14,78250,78252],{"id":78251},"_46-解构赋值","4.6 解构赋值",[1233,78254,78256],{"id":78255},"_461-数组解构","4.6.1 数组解构",[40,78258,78259],{},"以前要是使用数组中的值的话：",[40,78261,78262],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[40,78264,78265],{},"const arr=[100,60,80]",[40,78267,78268],{},"const max=arr[0]",[40,78270,78271],{},"const min=arr[1]",[40,78273,78274],{},"const avg=arr[2]",[40,78276,78277],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[40,78279,78280],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[40,78282,78283],{},"这个写法就类似于上边的那种用很多const的方法",[40,78285,78286],{},[2564,78287],{"alt":35,"src":78288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[29,78290,78292],{"className":51597,"code":78291,"language":51599,"meta":35,"style":35},"①变量之间交换值:\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",[37,78293,78294,78299,78304,78309,78314,78319,78323,78327,78332,78336,78341,78346,78350,78355,78360,78371,78381,78386,78391,78396,78400,78404],{"__ignoreMap":35},[51,78295,78296],{"class":53,"line":54},[51,78297,78298],{"class":72},"①变量之间交换值:\n",[51,78300,78301],{"class":53,"line":61},[51,78302,78303],{"class":72},"let a=1\n",[51,78305,78306],{"class":53,"line":93},[51,78307,78308],{"class":72},"let b=2;\n",[51,78310,78311],{"class":53,"line":99},[51,78312,78313],{"class":72},"必须加这行代码，不然就会报错\n",[51,78315,78316],{"class":53,"line":120},[51,78317,78318],{"class":72},"[b,a]=[a,b]\n",[51,78320,78321],{"class":53,"line":129},[51,78322,3480],{"emptyLinePlaceholder":1192},[51,78324,78325],{"class":53,"line":206},[51,78326,3480],{"emptyLinePlaceholder":1192},[51,78328,78329],{"class":53,"line":212},[51,78330,78331],{"class":72},"可以写成下面的方式：\n",[51,78333,78334],{"class":53,"line":227},[51,78335,78303],{"class":72},[51,78337,78338],{"class":53,"line":370},[51,78339,78340],{"class":72},"let b=2\n",[51,78342,78343],{"class":53,"line":387},[51,78344,78345],{"class":72},";[b,a]=[a,b]\n",[51,78347,78348],{"class":53,"line":404},[51,78349,3480],{"emptyLinePlaceholder":1192},[51,78351,78352],{"class":53,"line":415},[51,78353,78354],{"class":72},"②排序\n",[51,78356,78357],{"class":53,"line":420},[51,78358,78359],{"class":72},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[51,78361,78362,78365,78368],{"class":53,"line":429},[51,78363,78364],{"class":72},"for (let i = 0; i ",[51,78366,2154],{"class":78367},"s7hpK",[51,78369,78370],{"class":72}," arr1.length; i++) {\n",[51,78372,78373,78376,78378],{"class":53,"line":434},[51,78374,78375],{"class":72},"   for (let j = 0; j ",[51,78377,2154],{"class":78367},[51,78379,78380],{"class":72}," arr1.length - 1; j++) {\n",[51,78382,78383],{"class":53,"line":448},[51,78384,78385],{"class":72},"      if (arr1[j] > arr1[j + 1]) {\n",[51,78387,78388],{"class":53,"line":462},[51,78389,78390],{"class":72},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[51,78392,78393],{"class":53,"line":470},[51,78394,78395],{"class":72},"       }\n",[51,78397,78398],{"class":53,"line":2783},[51,78399,5383],{"class":72},[51,78401,78402],{"class":53,"line":2788},[51,78403,132],{"class":72},[51,78405,78406],{"class":53,"line":2817},[51,78407,78408],{"class":72},"console.log(arr1)\n",[40,78410,78411],{},"数组解构的细节：",[40,78413,78414],{},"①变量多，单元值少",[40,78416,78417],{},[2564,78418],{"alt":35,"src":78419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[40,78421,78422],{},"防止出现undefined的方法：",[40,78424,78425],{},"const [a=0,b=0] =[1]",[40,78427,78428],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[40,78430,78431],{},"②变量少，单元值多",[40,78433,78434],{},[2564,78435],{"alt":35,"src":78436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[40,78438,78439],{},"此时可以使用剩余参数来接收多余的值",[40,78441,78442],{},"const [a,b,...c]=[1,2,3,4]",[40,78444,78445],{},"console.log(c) 输出[3,4]",[40,78447,78448],{},"③可以按需导入，忽略某些返回值",[40,78450,78451],{},[2564,78452],{"alt":35,"src":78453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[40,78455,78456],{},"④支持多维数组的结构",[29,78458,78462],{"className":78459,"code":78460,"language":78461,"meta":35,"style":35},"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",[37,78463,78464,78492,78508,78523,78538],{"__ignoreMap":35},[51,78465,78466,78468,78470,78472,78474,78476,78478,78480,78483,78485,78487,78489],{"class":53,"line":54},[51,78467,7754],{"class":64},[51,78469,52797],{"class":72},[51,78471,108],{"class":64},[51,78473,53190],{"class":72},[51,78475,791],{"class":175},[51,78477,13397],{"class":72},[51,78479,1334],{"class":175},[51,78481,78482],{"class":72},", [",[51,78484,1328],{"class":175},[51,78486,13397],{"class":72},[51,78488,1543],{"class":175},[51,78490,78491],{"class":72},"]]\n",[51,78493,78494,78497,78499,78501,78503,78505],{"class":53,"line":61},[51,78495,78496],{"class":72},"console.",[51,78498,59211],{"class":68},[51,78500,4928],{"class":72},[51,78502,176],{"class":175},[51,78504,5292],{"class":72},[51,78506,78507],{"class":57},"  \u002F\u002F1\n",[51,78509,78510,78512,78514,78516,78518,78520],{"class":53,"line":93},[51,78511,78496],{"class":72},[51,78513,59211],{"class":68},[51,78515,4928],{"class":72},[51,78517,791],{"class":175},[51,78519,5292],{"class":72},[51,78521,78522],{"class":57},"  \u002F\u002F2\n",[51,78524,78525,78527,78529,78531,78533,78535],{"class":53,"line":99},[51,78526,78496],{"class":72},[51,78528,59211],{"class":68},[51,78530,4928],{"class":72},[51,78532,1334],{"class":175},[51,78534,5292],{"class":72},[51,78536,78537],{"class":57},"  \u002F\u002F[3,4]\n",[51,78539,78540,78542,78544,78546,78548,78550,78552,78554],{"class":53,"line":120},[51,78541,78496],{"class":72},[51,78543,59211],{"class":68},[51,78545,4928],{"class":72},[51,78547,1334],{"class":175},[51,78549,5975],{"class":72},[51,78551,176],{"class":175},[51,78553,5292],{"class":72},[51,78555,78556],{"class":57},"  \u002F\u002F3\n",[29,78558,78560],{"className":78459,"code":78559,"language":78461,"meta":35,"style":35},"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",[37,78561,78562,78589,78600,78611],{"__ignoreMap":35},[51,78563,78564,78566,78569,78571,78573,78575,78577,78579,78581,78583,78585,78587],{"class":53,"line":54},[51,78565,7754],{"class":64},[51,78567,78568],{"class":72}," [a, b, c] ",[51,78570,108],{"class":64},[51,78572,53190],{"class":72},[51,78574,791],{"class":175},[51,78576,13397],{"class":72},[51,78578,1334],{"class":175},[51,78580,78482],{"class":72},[51,78582,1328],{"class":175},[51,78584,13397],{"class":72},[51,78586,1543],{"class":175},[51,78588,78491],{"class":72},[51,78590,78591,78593,78595,78598],{"class":53,"line":61},[51,78592,78496],{"class":72},[51,78594,59211],{"class":68},[51,78596,78597],{"class":72},"(a)",[51,78599,78507],{"class":57},[51,78601,78602,78604,78606,78609],{"class":53,"line":93},[51,78603,78496],{"class":72},[51,78605,59211],{"class":68},[51,78607,78608],{"class":72},"(b)",[51,78610,78522],{"class":57},[51,78612,78613,78615,78617,78620],{"class":53,"line":99},[51,78614,78496],{"class":72},[51,78616,59211],{"class":68},[51,78618,78619],{"class":72},"(c)",[51,78621,78537],{"class":57},[29,78623,78625],{"className":78459,"code":78624,"language":78461,"meta":35,"style":35},"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",[37,78626,78627,78654,78664,78674,78684],{"__ignoreMap":35},[51,78628,78629,78631,78634,78636,78638,78640,78642,78644,78646,78648,78650,78652],{"class":53,"line":54},[51,78630,7754],{"class":64},[51,78632,78633],{"class":72}," [a, b, [c, d]] ",[51,78635,108],{"class":64},[51,78637,53190],{"class":72},[51,78639,791],{"class":175},[51,78641,13397],{"class":72},[51,78643,1334],{"class":175},[51,78645,78482],{"class":72},[51,78647,1328],{"class":175},[51,78649,13397],{"class":72},[51,78651,1543],{"class":175},[51,78653,78491],{"class":72},[51,78655,78656,78658,78660,78662],{"class":53,"line":61},[51,78657,78496],{"class":72},[51,78659,59211],{"class":68},[51,78661,78597],{"class":72},[51,78663,78507],{"class":57},[51,78665,78666,78668,78670,78672],{"class":53,"line":93},[51,78667,78496],{"class":72},[51,78669,59211],{"class":68},[51,78671,78608],{"class":72},[51,78673,78522],{"class":57},[51,78675,78676,78678,78680,78682],{"class":53,"line":99},[51,78677,78496],{"class":72},[51,78679,59211],{"class":68},[51,78681,78619],{"class":72},[51,78683,78556],{"class":57},[51,78685,78686,78688,78690,78693],{"class":53,"line":120},[51,78687,78496],{"class":72},[51,78689,59211],{"class":68},[51,78691,78692],{"class":72},"(d)",[51,78694,78695],{"class":57},"  \u002F\u002F4\n",[1233,78697,78699],{"id":78698},"_462-对象解构","4.6.2 对象解构",[40,78701,78702],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[40,78704,78705],{},"用的非常非常多！！！！！！",[22960,78707,78709],{"id":78708},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[40,78711,78712],{},"基本语法：",[19,78714,78715,78718,78721,78724],{},[22,78716,78717],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[22,78719,78720],{},"对象属性的值将被赋值给与属性名相同的变量",[22,78722,78723],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[22,78725,78726],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[29,78728,78730],{"className":51597,"code":78729,"language":51599,"meta":35,"style":35},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[37,78731,78732,78737,78742,78747,78751],{"__ignoreMap":35},[51,78733,78734],{"class":53,"line":54},[51,78735,78736],{"class":72},"const obj = {\n",[51,78738,78739],{"class":53,"line":61},[51,78740,78741],{"class":72},"   uname: 'pink老师',\n",[51,78743,78744],{"class":53,"line":93},[51,78745,78746],{"class":72},"   age: 18,\n",[51,78748,78749],{"class":53,"line":99},[51,78750,132],{"class":72},[51,78752,78753],{"class":53,"line":120},[51,78754,78755],{"class":72},"const { uname, age } = obj\n",[40,78757,78758],{},"上方代码这样写等价于：",[40,78760,78761],{},"const uname等价于obj.uname",[40,78763,78764],{},"变量名可以重新改名：",[40,78766,78767],{},"const uname='red老师'",[40,78769,78770],{},"const user={",[40,78772,78773],{},"  uname:'pink老师',",[40,78775,78776],{},"  age:18",[40,78778,2190],{},[40,78780,78781],{},"const {uname,age}=user",[40,78783,78784],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[40,78786,78787],{},"const {旧变量名：新变量名}=对象",[40,78789,78790],{},"const {uname:username,age}=user",[22960,78792,78794],{"id":78793},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[40,78796,78797],{},[2564,78798],{"alt":35,"src":78799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22960,78801,78803],{"id":78802},"_4623-多级对象解构","4.6.2.3 多级对象解构",[40,78805,78806],{},[2564,78807],{"alt":35,"src":78808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[29,78810,78812],{"className":54031,"code":78811,"language":54033,"meta":35,"style":35},"  \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",[37,78813,78814,78822,78827,78832,78837,78842,78847,78852,78857,78862,78866,78871,78876],{"__ignoreMap":35},[51,78815,78816,78818,78820],{"class":53,"line":54},[51,78817,53108],{"class":72},[51,78819,52777],{"class":52264},[51,78821,52271],{"class":72},[51,78823,78824],{"class":53,"line":61},[51,78825,78826],{"class":72},"    const pig = {\n",[51,78828,78829],{"class":53,"line":93},[51,78830,78831],{"class":72},"      name: '佩奇',\n",[51,78833,78834],{"class":53,"line":99},[51,78835,78836],{"class":72},"      family: {\n",[51,78838,78839],{"class":53,"line":120},[51,78840,78841],{"class":72},"        mother: '猪妈妈',\n",[51,78843,78844],{"class":53,"line":129},[51,78845,78846],{"class":72},"        father: '猪爸爸',\n",[51,78848,78849],{"class":53,"line":206},[51,78850,78851],{"class":72},"        sister: '乔治'\n",[51,78853,78854],{"class":53,"line":212},[51,78855,78856],{"class":72},"      },\n",[51,78858,78859],{"class":53,"line":227},[51,78860,78861],{"class":72},"      age: 6\n",[51,78863,78864],{"class":53,"line":370},[51,78865,3267],{"class":72},[51,78867,78868],{"class":53,"line":387},[51,78869,78870],{"class":72},"    \u002F\u002F 多级对象解构\n",[51,78872,78873],{"class":53,"line":404},[51,78874,78875],{"class":72},"    const { name, family: { mother, father, sister }, age } = pig\n",[51,78877,78878,78880,78882],{"class":53,"line":415},[51,78879,53381],{"class":72},[51,78881,52777],{"class":52264},[51,78883,52271],{"class":72},[40,78885,78886],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[29,78888,78891],{"className":78889,"code":78890,"language":77411,"meta":35,"style":35},"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",[37,78892,78893,78898,78909,78921,78933,78942,78946,78957,78969,78979,78984,78988,78998,79009,79018,79022,79026,79037,79048,79057,79061,79066],{"__ignoreMap":35},[51,78894,78895],{"class":53,"line":54},[51,78896,78897],{"class":57},"    \u002F\u002F 这是后台传递过来的数据\n",[51,78899,78900,78902,78905,78907],{"class":53,"line":61},[51,78901,12183],{"class":64},[51,78903,78904],{"class":72}," msg ",[51,78906,108],{"class":64},[51,78908,16534],{"class":72},[51,78910,78911,78914,78916,78919],{"class":53,"line":93},[51,78912,78913],{"class":282},"      \"code\"",[51,78915,984],{"class":64},[51,78917,78918],{"class":175}," 200",[51,78920,32430],{"class":72},[51,78922,78923,78926,78928,78931],{"class":53,"line":99},[51,78924,78925],{"class":282},"      \"msg\"",[51,78927,984],{"class":64},[51,78929,78930],{"class":282}," \"获取新闻列表成功\"",[51,78932,32430],{"class":72},[51,78934,78935,78938,78940],{"class":53,"line":120},[51,78936,78937],{"class":282},"      \"data\"",[51,78939,984],{"class":64},[51,78941,56411],{"class":72},[51,78943,78944],{"class":53,"line":129},[51,78945,3590],{"class":72},[51,78947,78948,78951,78953,78955],{"class":53,"line":206},[51,78949,78950],{"class":282},"          \"id\"",[51,78952,984],{"class":64},[51,78954,26082],{"class":175},[51,78956,32430],{"class":72},[51,78958,78959,78962,78964,78967],{"class":53,"line":212},[51,78960,78961],{"class":282},"          \"title\"",[51,78963,984],{"class":64},[51,78965,78966],{"class":282}," \"5G商用自己，三大运用商收入下降\"",[51,78968,32430],{"class":72},[51,78970,78971,78974,78976],{"class":53,"line":227},[51,78972,78973],{"class":282},"          \"count\"",[51,78975,984],{"class":64},[51,78977,78978],{"class":175}," 58\n",[51,78980,78981],{"class":53,"line":370},[51,78982,78983],{"class":72},"        },\n",[51,78985,78986],{"class":53,"line":387},[51,78987,3590],{"class":72},[51,78989,78990,78992,78994,78996],{"class":53,"line":404},[51,78991,78950],{"class":282},[51,78993,984],{"class":64},[51,78995,15717],{"class":175},[51,78997,32430],{"class":72},[51,78999,79000,79002,79004,79007],{"class":53,"line":415},[51,79001,78961],{"class":282},[51,79003,984],{"class":64},[51,79005,79006],{"class":282}," \"国际媒体头条速览\"",[51,79008,32430],{"class":72},[51,79010,79011,79013,79015],{"class":53,"line":420},[51,79012,78973],{"class":282},[51,79014,984],{"class":64},[51,79016,79017],{"class":175}," 56\n",[51,79019,79020],{"class":53,"line":429},[51,79021,78983],{"class":72},[51,79023,79024],{"class":53,"line":434},[51,79025,3590],{"class":72},[51,79027,79028,79030,79032,79035],{"class":53,"line":448},[51,79029,78950],{"class":282},[51,79031,984],{"class":64},[51,79033,79034],{"class":175}," 3",[51,79036,32430],{"class":72},[51,79038,79039,79041,79043,79046],{"class":53,"line":462},[51,79040,78961],{"class":282},[51,79042,984],{"class":64},[51,79044,79045],{"class":282}," \"乌克兰和俄罗斯持续冲突\"",[51,79047,32430],{"class":72},[51,79049,79050,79052,79054],{"class":53,"line":470},[51,79051,78973],{"class":282},[51,79053,984],{"class":64},[51,79055,79056],{"class":175}," 1669\n",[51,79058,79059],{"class":53,"line":2783},[51,79060,78983],{"class":72},[51,79062,79063],{"class":53,"line":2788},[51,79064,79065],{"class":72},"      ]\n",[51,79067,79068],{"class":53,"line":2817},[51,79069,3267],{"class":72},[40,79071,79072],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[40,79074,79075],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[40,79077,79078],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[40,79080,79081],{},"function({data}) {",[40,79083,79084],{},"console.log(data)",[40,79086,2190],{},[40,79088,79089],{},"render(msg)",[40,79091,79092],{},"实参传递给形参的时候解构了",[40,79094,79095],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[40,79097,79098],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[40,79100,79101],{},"function render({data:mydata}) {",[40,79103,79104],{},"  console.log(data)",[40,79106,2190],{},[1233,79108,79110],{"id":79109},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[40,79112,79113],{},"有两种情况：一个是数组结构，一个是立即执行函数",[19,79115,79116],{},[22,79117,79118],{},"如果对一个数组进行遍历，有两种方式：",[40,79120,79121],{},"①法1",[40,79123,79124],{},"const arr=[1,2,3]",[40,79126,79127],{},"arr.map(function(item,index) {",[40,79129,79130],{},"  console.log(item)",[40,79132,53428],{},[40,79134,79135],{},[2564,79136],{"alt":35,"src":79137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[40,79139,79140],{},"②法2",[40,79142,79143],{},"const str='pink'",[40,79145,79146],{},"[1,2,3].map(function(item,index) {",[40,79148,79149],{},"console.log(item)",[40,79151,53428],{},[40,79153,79154],{},[2564,79155],{"alt":35,"src":79156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[40,79158,79159],{},"此时会报错",[40,79161,79162],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[40,79164,79149],{},[40,79166,53428],{},[40,79168,79169],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79171,79173],{"id":79172},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[40,79175,79176],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[40,79178,79179],{},"可以理解为加强版的for循环",[40,79181,79182],{},[2564,79183],{"alt":35,"src":79184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[40,79186,79187],{},"里边不写return，不返回数组，只遍历不返回",[40,79189,79190],{},"map是返回数组",[40,79192,79193],{},"forEach主要用于遍历数组对象",[29,79195,79197],{"className":54031,"code":79196,"language":54033,"meta":35,"style":35},"  \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",[37,79198,79199,79207,79212,79217,79222,79227,79231,79236],{"__ignoreMap":35},[51,79200,79201,79203,79205],{"class":53,"line":54},[51,79202,53108],{"class":72},[51,79204,52777],{"class":52264},[51,79206,52271],{"class":72},[51,79208,79209],{"class":53,"line":61},[51,79210,79211],{"class":72},"    const arr = ['red', 'green', 'pink']\n",[51,79213,79214],{"class":53,"line":93},[51,79215,79216],{"class":72},"    const result = arr.forEach(function (item, index) {\n",[51,79218,79219],{"class":53,"line":99},[51,79220,79221],{"class":72},"      console.log(item)\n",[51,79223,79224],{"class":53,"line":120},[51,79225,79226],{"class":72},"      console.log(index)\n",[51,79228,79229],{"class":53,"line":129},[51,79230,34425],{"class":72},[51,79232,79233],{"class":53,"line":206},[51,79234,79235],{"class":72},"    console.log(result)\n",[51,79237,79238,79240,79242],{"class":53,"line":212},[51,79239,53381],{"class":72},[51,79241,52777],{"class":52264},[51,79243,52271],{"class":72},[40,79245,79246],{},[2564,79247],{"alt":35,"src":79248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79250,79252],{"id":79251},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[40,79254,79255],{},[2564,79256],{"alt":35,"src":79257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[40,79259,79260],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[29,79262,79264],{"className":54031,"code":79263,"language":54033,"meta":35,"style":35},"\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",[37,79265,79266,79274,79282,79287,79292,79296,79300,79305,79309,79314,79322],{"__ignoreMap":35},[51,79267,79268,79270,79272],{"class":53,"line":54},[51,79269,2154],{"class":72},[51,79271,52764],{"class":52264},[51,79273,52271],{"class":72},[51,79275,79276,79278,79280],{"class":53,"line":61},[51,79277,53108],{"class":72},[51,79279,52777],{"class":52264},[51,79281,52271],{"class":72},[51,79283,79284],{"class":53,"line":93},[51,79285,79286],{"class":72},"    const arr = [10, 20, 30]\n",[51,79288,79289],{"class":53,"line":99},[51,79290,79291],{"class":72},"    const newArr = arr.filter(function (item, index) {\n",[51,79293,79294],{"class":53,"line":120},[51,79295,79221],{"class":72},[51,79297,79298],{"class":53,"line":129},[51,79299,79226],{"class":72},[51,79301,79302],{"class":53,"line":206},[51,79303,79304],{"class":72},"      return item >= 20\n",[51,79306,79307],{"class":53,"line":212},[51,79308,34425],{"class":72},[51,79310,79311],{"class":53,"line":227},[51,79312,79313],{"class":72},"    console.log(newArr)\n",[51,79315,79316,79318,79320],{"class":53,"line":370},[51,79317,53381],{"class":72},[51,79319,52777],{"class":52264},[51,79321,52271],{"class":72},[51,79323,79324,79326,79328],{"class":53,"line":387},[51,79325,52749],{"class":72},[51,79327,52764],{"class":52264},[51,79329,52271],{"class":72},[40,79331,79332],{},"这个也可以写成箭头函数：",[29,79334,79336],{"className":51597,"code":79335,"language":51599,"meta":35,"style":35},"const newArr = arr.filter(item => item >= 20)\n",[37,79337,79338],{"__ignoreMap":35},[51,79339,79340],{"class":53,"line":54},[51,79341,79335],{"class":72},[14,79343,79345],{"id":79344},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[40,79347,79348],{},[2564,79349],{"alt":35,"src":79350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[40,79352,79353],{},"步骤：",[40,79355,79356],{},"①：渲染页面模块",[1000,79358,79359,79362],{},[22,79360,79361],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[22,79363,79364],{},"用forEach+字符串的形式",[40,79366,79367],{},"②：点击不同需求，显示不同页面内容",[1000,79369,79370,79373,79376,79379,79382],{},[22,79371,79372],{},"点击采取事件委托方式 .filter",[22,79374,79375],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[22,79377,79378],{},"筛选条件是根据点击的 data-index 来判断",[22,79380,79381],{},"可以使用对象解构，把事件对象解构",[22,79383,79384],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[29,79386,79388],{"className":51597,"code":79387,"language":51599,"meta":35,"style":35},"\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",[37,79389,79390,79400,79414,79418,79426,79440,79460,79472,79480,79486,79496,79506,79516,79520,79524,79530,79543,79555,79565,79577,79581,79585,79592,79605,79617,79634,79652,79665,79669,79673,79685,79695,79699,79703,79710,79751,79778,79788,79792,79796,79804,79816,79820,79824,79832,79844,79856,79867,79871,79875,79884,79896,79907,79911,79915,79924,79936,79948,79952,79956,79963,79973,79985,79997,80012,80016,80020,80028,80044,80054,80064,80074,80086,80090,80094,80104,80115,80125,80129,80137,80145,80149,80157,80172,80198,80223,80248,80267,80275,80289,80294,80299,80304,80309,80314,80322,80330,80335,80346,80351,80361,80371,80381,80391,80395,80399,80408,80417,80426,80435,80439,80443,80452,80461,80470,80479,80483,80487,80496,80505,80514,80523,80527,80531,80540,80549,80558,80567,80571,80575,80584,80593,80602,80611,80615,80619,80628,80637,80646,80655,80659,80663,80672,80681,80689,80698,80702,80706,80710,80715,80727,80732,80744,80748,80765,80793,80802,80807,80817,80827,80836,80841,80846,80850,80855,80872,80876,80881,80889,80894,80921,80926,80946,80951,80963,80968,80973,80978,80989,81003,81040,81058,81091,81108,81132,81136,81141,81147,81151,81155,81159,81167,81175,81179],{"__ignoreMap":35},[51,79391,79392,79394,79396,79398],{"class":53,"line":54},[51,79393,52261],{"class":72},[51,79395,52265],{"class":52264},[51,79397,52268],{"class":68},[51,79399,52271],{"class":72},[51,79401,79402,79404,79406,79408,79410,79412],{"class":53,"line":61},[51,79403,2154],{"class":72},[51,79405,51599],{"class":52264},[51,79407,52280],{"class":68},[51,79409,108],{"class":72},[51,79411,52285],{"class":282},[51,79413,52271],{"class":72},[51,79415,79416],{"class":53,"line":93},[51,79417,3480],{"emptyLinePlaceholder":1192},[51,79419,79420,79422,79424],{"class":53,"line":99},[51,79421,2154],{"class":72},[51,79423,52298],{"class":52264},[51,79425,52271],{"class":72},[51,79427,79428,79430,79432,79434,79436,79438],{"class":53,"line":120},[51,79429,53108],{"class":72},[51,79431,52308],{"class":52264},[51,79433,52311],{"class":68},[51,79435,108],{"class":72},[51,79437,52316],{"class":282},[51,79439,52271],{"class":72},[51,79441,79442,79444,79446,79448,79450,79452,79454,79456,79458],{"class":53,"line":129},[51,79443,53108],{"class":72},[51,79445,52308],{"class":52264},[51,79447,15882],{"class":68},[51,79449,108],{"class":72},[51,79451,52355],{"class":282},[51,79453,52335],{"class":68},[51,79455,108],{"class":72},[51,79457,52362],{"class":282},[51,79459,52271],{"class":72},[51,79461,79462,79464,79466,79468,79470],{"class":53,"line":206},[51,79463,53108],{"class":72},[51,79465,52371],{"class":52264},[51,79467,52374],{"class":72},[51,79469,52371],{"class":52264},[51,79471,52271],{"class":72},[51,79473,79474,79476,79478],{"class":53,"line":212},[51,79475,53108],{"class":72},[51,79477,1179],{"class":52264},[51,79479,52271],{"class":72},[51,79481,79482,79484],{"class":53,"line":227},[51,79483,7365],{"class":52264},[51,79485,16534],{"class":72},[51,79487,79488,79490,79492,79494],{"class":53,"line":370},[51,79489,55659],{"class":175},[51,79491,52401],{"class":72},[51,79493,176],{"class":175},[51,79495,179],{"class":72},[51,79497,79498,79500,79502,79504],{"class":53,"line":387},[51,79499,55670],{"class":175},[51,79501,52401],{"class":72},[51,79503,176],{"class":175},[51,79505,179],{"class":72},[51,79507,79508,79510,79512,79514],{"class":53,"line":404},[51,79509,73560],{"class":175},[51,79511,52401],{"class":72},[51,79513,61469],{"class":175},[51,79515,179],{"class":72},[51,79517,79518],{"class":53,"line":415},[51,79519,3267],{"class":72},[51,79521,79522],{"class":53,"line":420},[51,79523,3480],{"emptyLinePlaceholder":1192},[51,79525,79526,79528],{"class":53,"line":429},[51,79527,63087],{"class":68},[51,79529,16534],{"class":72},[51,79531,79532,79534,79536,79539,79541],{"class":53,"line":434},[51,79533,55735],{"class":175},[51,79535,52401],{"class":72},[51,79537,79538],{"class":175},"990",[51,79540,52456],{"class":64},[51,79542,179],{"class":72},[51,79544,79545,79547,79549,79551,79553],{"class":53,"line":448},[51,79546,55670],{"class":175},[51,79548,52401],{"class":72},[51,79550,176],{"class":175},[51,79552,52520],{"class":175},[51,79554,179],{"class":72},[51,79556,79557,79559,79561,79563],{"class":53,"line":462},[51,79558,55973],{"class":175},[51,79560,52401],{"class":72},[51,79562,52441],{"class":175},[51,79564,179],{"class":72},[51,79566,79567,79570,79572,79575],{"class":53,"line":470},[51,79568,79569],{"class":175},"      flex-wrap",[51,79571,52401],{"class":72},[51,79573,79574],{"class":175},"wrap",[51,79576,179],{"class":72},[51,79578,79579],{"class":53,"line":2783},[51,79580,3267],{"class":72},[51,79582,79583],{"class":53,"line":2788},[51,79584,3480],{"emptyLinePlaceholder":1192},[51,79586,79587,79590],{"class":53,"line":2817},[51,79588,79589],{"class":68},"    .item",[51,79591,16534],{"class":72},[51,79593,79594,79596,79598,79601,79603],{"class":53,"line":2822},[51,79595,55735],{"class":175},[51,79597,52401],{"class":72},[51,79599,79600],{"class":175},"240",[51,79602,52456],{"class":64},[51,79604,179],{"class":72},[51,79606,79607,79609,79611,79613,79615],{"class":53,"line":2839},[51,79608,62964],{"class":175},[51,79610,52401],{"class":72},[51,79612,443],{"class":175},[51,79614,52456],{"class":64},[51,79616,179],{"class":72},[51,79618,79619,79621,79623,79625,79627,79630,79632],{"class":53,"line":2844},[51,79620,55659],{"class":175},[51,79622,52401],{"class":72},[51,79624,457],{"class":175},[51,79626,52456],{"class":64},[51,79628,79629],{"class":175}," 30",[51,79631,52456],{"class":64},[51,79633,179],{"class":72},[51,79635,79636,79638,79640,79642,79645,79648,79650],{"class":53,"line":2849},[51,79637,62824],{"class":175},[51,79639,52401],{"class":72},[51,79641,29085],{"class":175},[51,79643,79644],{"class":175}," ease",[51,79646,79647],{"class":175}," .5",[51,79649,1941],{"class":64},[51,79651,179],{"class":72},[51,79653,79654,79657,79659,79661,79663],{"class":53,"line":2854},[51,79655,79656],{"class":175},"      margin-bottom",[51,79658,52401],{"class":72},[51,79660,457],{"class":175},[51,79662,52456],{"class":64},[51,79664,179],{"class":72},[51,79666,79667],{"class":53,"line":2868},[51,79668,3267],{"class":72},[51,79670,79671],{"class":53,"line":2873},[51,79672,3480],{"emptyLinePlaceholder":1192},[51,79674,79675,79678,79680,79683],{"class":53,"line":3657},[51,79676,79677],{"class":68},"    .item:nth-child",[51,79679,73],{"class":72},[51,79681,79682],{"class":175},"4n",[51,79684,13404],{"class":72},[51,79686,79687,79689,79691,79693],{"class":53,"line":3671},[51,79688,62964],{"class":175},[51,79690,52401],{"class":72},[51,79692,176],{"class":175},[51,79694,179],{"class":72},[51,79696,79697],{"class":53,"line":3679},[51,79698,3267],{"class":72},[51,79700,79701],{"class":53,"line":3684},[51,79702,3480],{"emptyLinePlaceholder":1192},[51,79704,79705,79708],{"class":53,"line":3690},[51,79706,79707],{"class":68},"    .item:hover",[51,79709,16534],{"class":72},[51,79711,79712,79715,79717,79719,79721,79723,79725,79727,79729,79732,79734,79736,79738,79740,79742,79744,79746,79749],{"class":53,"line":3696},[51,79713,79714],{"class":175},"      box-shadow",[51,79716,52401],{"class":72},[51,79718,176],{"class":175},[51,79720,52456],{"class":64},[51,79722,5169],{"class":175},[51,79724,52456],{"class":64},[51,79726,3228],{"class":175},[51,79728,52456],{"class":64},[51,79730,79731],{"class":175}," rgba",[51,79733,73],{"class":72},[51,79735,176],{"class":175},[51,79737,13397],{"class":72},[51,79739,176],{"class":175},[51,79741,13397],{"class":72},[51,79743,176],{"class":175},[51,79745,13397],{"class":72},[51,79747,79748],{"class":175},".2",[51,79750,615],{"class":72},[51,79752,79753,79756,79758,79761,79763,79765,79767,79770,79772,79774,79776],{"class":53,"line":3701},[51,79754,79755],{"class":175},"      transform",[51,79757,52401],{"class":72},[51,79759,79760],{"class":175},"translate3d",[51,79762,73],{"class":72},[51,79764,176],{"class":175},[51,79766,13397],{"class":72},[51,79768,79769],{"class":175},"-4",[51,79771,52456],{"class":64},[51,79773,13397],{"class":72},[51,79775,176],{"class":175},[51,79777,615],{"class":72},[51,79779,79780,79782,79784,79786],{"class":53,"line":8910},[51,79781,62989],{"class":175},[51,79783,52401],{"class":72},[51,79785,62994],{"class":175},[51,79787,179],{"class":72},[51,79789,79790],{"class":53,"line":8934},[51,79791,3267],{"class":72},[51,79793,79794],{"class":53,"line":8939},[51,79795,3480],{"emptyLinePlaceholder":1192},[51,79797,79798,79800,79802],{"class":53,"line":8945},[51,79799,79589],{"class":68},[51,79801,56579],{"class":52264},[51,79803,16534],{"class":72},[51,79805,79806,79808,79810,79812,79814],{"class":53,"line":8972},[51,79807,55735],{"class":175},[51,79809,52401],{"class":72},[51,79811,612],{"class":175},[51,79813,1577],{"class":64},[51,79815,179],{"class":72},[51,79817,79818],{"class":53,"line":8977},[51,79819,3267],{"class":72},[51,79821,79822],{"class":53,"line":8983},[51,79823,3480],{"emptyLinePlaceholder":1192},[51,79825,79826,79828,79830],{"class":53,"line":8995},[51,79827,79589],{"class":68},[51,79829,63268],{"class":68},[51,79831,16534],{"class":72},[51,79833,79834,79836,79838,79840,79842],{"class":53,"line":9007},[51,79835,55886],{"class":175},[51,79837,52401],{"class":72},[51,79839,1896],{"class":175},[51,79841,52456],{"class":64},[51,79843,179],{"class":72},[51,79845,79846,79848,79850,79852,79854],{"class":53,"line":9019},[51,79847,79656],{"class":175},[51,79849,52401],{"class":72},[51,79851,443],{"class":175},[51,79853,52456],{"class":64},[51,79855,179],{"class":72},[51,79857,79858,79860,79862,79865],{"class":53,"line":10678},[51,79859,58380],{"class":175},[51,79861,52401],{"class":72},[51,79863,79864],{"class":175},"#666",[51,79866,179],{"class":72},[51,79868,79869],{"class":53,"line":10703},[51,79870,3267],{"class":72},[51,79872,79873],{"class":53,"line":10726},[51,79874,3480],{"emptyLinePlaceholder":1192},[51,79876,79877,79879,79882],{"class":53,"line":10750},[51,79878,79589],{"class":68},[51,79880,79881],{"class":68}," .price",[51,79883,16534],{"class":72},[51,79885,79886,79888,79890,79892,79894],{"class":53,"line":10755},[51,79887,55886],{"class":175},[51,79889,52401],{"class":72},[51,79891,1995],{"class":175},[51,79893,52456],{"class":64},[51,79895,179],{"class":72},[51,79897,79898,79900,79902,79905],{"class":53,"line":10760},[51,79899,58380],{"class":175},[51,79901,52401],{"class":72},[51,79903,79904],{"class":175},"firebrick",[51,79906,179],{"class":72},[51,79908,79909],{"class":53,"line":10765},[51,79910,3267],{"class":72},[51,79912,79913],{"class":53,"line":10774},[51,79914,3480],{"emptyLinePlaceholder":1192},[51,79916,79917,79919,79922],{"class":53,"line":10779},[51,79918,79589],{"class":68},[51,79920,79921],{"class":68}," .price::before",[51,79923,16534],{"class":72},[51,79925,79926,79929,79931,79934],{"class":53,"line":10785},[51,79927,79928],{"class":175},"      content",[51,79930,52401],{"class":72},[51,79932,79933],{"class":282},"'￥'",[51,79935,179],{"class":72},[51,79937,79938,79940,79942,79944,79946],{"class":53,"line":10806},[51,79939,55886],{"class":175},[51,79941,52401],{"class":72},[51,79943,1795],{"class":175},[51,79945,52456],{"class":64},[51,79947,179],{"class":72},[51,79949,79950],{"class":53,"line":10812},[51,79951,3267],{"class":72},[51,79953,79954],{"class":53,"line":10826},[51,79955,3480],{"emptyLinePlaceholder":1192},[51,79957,79958,79961],{"class":53,"line":10832},[51,79959,79960],{"class":68},"    .filter",[51,79962,16534],{"class":72},[51,79964,79965,79967,79969,79971],{"class":53,"line":10859},[51,79966,55973],{"class":175},[51,79968,52401],{"class":72},[51,79970,52441],{"class":175},[51,79972,179],{"class":72},[51,79974,79975,79977,79979,79981,79983],{"class":53,"line":10868},[51,79976,55735],{"class":175},[51,79978,52401],{"class":72},[51,79980,79538],{"class":175},[51,79982,52456],{"class":64},[51,79984,179],{"class":72},[51,79986,79987,79989,79991,79993,79995],{"class":53,"line":10874},[51,79988,55670],{"class":175},[51,79990,52401],{"class":72},[51,79992,176],{"class":175},[51,79994,52520],{"class":175},[51,79996,179],{"class":72},[51,79998,79999,80001,80003,80005,80007,80009],{"class":53,"line":10882},[51,80000,55659],{"class":175},[51,80002,52401],{"class":72},[51,80004,1902],{"class":175},[51,80006,52456],{"class":64},[51,80008,79629],{"class":175},[51,80010,80011],{"class":64},"px\n",[51,80013,80014],{"class":53,"line":10887},[51,80015,3267],{"class":72},[51,80017,80018],{"class":53,"line":17566},[51,80019,3480],{"emptyLinePlaceholder":1192},[51,80021,80022,80024,80026],{"class":53,"line":17572},[51,80023,79960],{"class":68},[51,80025,170],{"class":52264},[51,80027,16534],{"class":72},[51,80029,80030,80032,80034,80036,80038,80040,80042],{"class":53,"line":17595},[51,80031,55659],{"class":175},[51,80033,52401],{"class":72},[51,80035,443],{"class":175},[51,80037,52456],{"class":64},[51,80039,9912],{"class":175},[51,80041,52456],{"class":64},[51,80043,179],{"class":72},[51,80045,80046,80048,80050,80052],{"class":53,"line":17601},[51,80047,62685],{"class":175},[51,80049,52401],{"class":72},[51,80051,62782],{"class":175},[51,80053,179],{"class":72},[51,80055,80056,80058,80060,80062],{"class":53,"line":17624},[51,80057,58380],{"class":175},[51,80059,52401],{"class":72},[51,80061,79864],{"class":175},[51,80063,179],{"class":72},[51,80065,80066,80068,80070,80072],{"class":53,"line":17638},[51,80067,64934],{"class":175},[51,80069,52401],{"class":72},[51,80071,55701],{"class":175},[51,80073,179],{"class":72},[51,80075,80076,80078,80080,80082,80084],{"class":53,"line":17658},[51,80077,62714],{"class":175},[51,80079,52401],{"class":72},[51,80081,457],{"class":175},[51,80083,52456],{"class":64},[51,80085,179],{"class":72},[51,80087,80088],{"class":53,"line":17664},[51,80089,3267],{"class":72},[51,80091,80092],{"class":53,"line":17675},[51,80093,3480],{"emptyLinePlaceholder":1192},[51,80095,80096,80098,80100,80102],{"class":53,"line":17698},[51,80097,79960],{"class":68},[51,80099,170],{"class":52264},[51,80101,62864],{"class":68},[51,80103,16534],{"class":72},[51,80105,80106,80108,80110,80113],{"class":53,"line":17720},[51,80107,55848],{"class":175},[51,80109,52401],{"class":72},[51,80111,80112],{"class":175},"#05943c",[51,80114,179],{"class":72},[51,80116,80117,80119,80121,80123],{"class":53,"line":17725},[51,80118,58380],{"class":175},[51,80120,52401],{"class":72},[51,80122,61806],{"class":175},[51,80124,179],{"class":72},[51,80126,80127],{"class":53,"line":17731},[51,80128,3267],{"class":72},[51,80130,80131,80133,80135],{"class":53,"line":17745},[51,80132,53381],{"class":72},[51,80134,1179],{"class":52264},[51,80136,52271],{"class":72},[51,80138,80139,80141,80143],{"class":53,"line":17758},[51,80140,52749],{"class":72},[51,80142,52298],{"class":52264},[51,80144,52271],{"class":72},[51,80146,80147],{"class":53,"line":17763},[51,80148,3480],{"emptyLinePlaceholder":1192},[51,80150,80151,80153,80155],{"class":53,"line":17777},[51,80152,2154],{"class":72},[51,80154,52764],{"class":52264},[51,80156,52271],{"class":72},[51,80158,80159,80161,80163,80165,80167,80170],{"class":53,"line":17782},[51,80160,53108],{"class":72},[51,80162,52575],{"class":52264},[51,80164,54450],{"class":68},[51,80166,108],{"class":72},[51,80168,80169],{"class":282},"\"filter\"",[51,80171,52271],{"class":72},[51,80173,80174,80176,80178,80180,80182,80184,80187,80189,80191,80194,80196],{"class":53,"line":17788},[51,80175,52305],{"class":72},[51,80177,981],{"class":52264},[51,80179,62021],{"class":68},[51,80181,108],{"class":72},[51,80183,62026],{"class":282},[51,80185,80186],{"class":68}," data-index",[51,80188,108],{"class":72},[51,80190,4755],{"class":282},[51,80192,80193],{"class":72},">0-100元\u003C\u002F",[51,80195,981],{"class":52264},[51,80197,52271],{"class":72},[51,80199,80200,80202,80204,80206,80208,80210,80212,80214,80216,80219,80221],{"class":53,"line":17793},[51,80201,52305],{"class":72},[51,80203,981],{"class":52264},[51,80205,62021],{"class":68},[51,80207,108],{"class":72},[51,80209,62026],{"class":282},[51,80211,80186],{"class":68},[51,80213,108],{"class":72},[51,80215,4778],{"class":282},[51,80217,80218],{"class":72},">100-300元\u003C\u002F",[51,80220,981],{"class":52264},[51,80222,52271],{"class":72},[51,80224,80225,80227,80229,80231,80233,80235,80237,80239,80241,80244,80246],{"class":53,"line":17807},[51,80226,52305],{"class":72},[51,80228,981],{"class":52264},[51,80230,62021],{"class":68},[51,80232,108],{"class":72},[51,80234,62026],{"class":282},[51,80236,80186],{"class":68},[51,80238,108],{"class":72},[51,80240,4791],{"class":282},[51,80242,80243],{"class":72},">300元以上\u003C\u002F",[51,80245,981],{"class":52264},[51,80247,52271],{"class":72},[51,80249,80250,80252,80254,80256,80258,80260,80263,80265],{"class":53,"line":17812},[51,80251,52305],{"class":72},[51,80253,981],{"class":52264},[51,80255,62021],{"class":68},[51,80257,108],{"class":72},[51,80259,62026],{"class":282},[51,80261,80262],{"class":72},">全部区间\u003C\u002F",[51,80264,981],{"class":52264},[51,80266,52271],{"class":72},[51,80268,80269,80271,80273],{"class":53,"line":17817},[51,80270,53381],{"class":72},[51,80272,52575],{"class":52264},[51,80274,52271],{"class":72},[51,80276,80277,80279,80281,80283,80285,80287],{"class":53,"line":17831},[51,80278,53108],{"class":72},[51,80280,52575],{"class":52264},[51,80282,54450],{"class":68},[51,80284,108],{"class":72},[51,80286,63572],{"class":282},[51,80288,52271],{"class":72},[51,80290,80291],{"class":53,"line":17843},[51,80292,80293],{"class":57},"    \u003C!-- \u003Cdiv class=\"item\">\n",[51,80295,80296],{"class":53,"line":17848},[51,80297,80298],{"class":57},"      \u003Cimg src=\"\" alt=\"\">\n",[51,80300,80301],{"class":53,"line":17861},[51,80302,80303],{"class":57},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[51,80305,80306],{"class":53,"line":17866},[51,80307,80308],{"class":57},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[51,80310,80311],{"class":53,"line":17871},[51,80312,80313],{"class":57},"    \u003C\u002Fdiv> -->\n",[51,80315,80316,80318,80320],{"class":53,"line":17876},[51,80317,53381],{"class":72},[51,80319,52575],{"class":52264},[51,80321,52271],{"class":72},[51,80323,80324,80326,80328],{"class":53,"line":17889},[51,80325,53108],{"class":72},[51,80327,52777],{"class":52264},[51,80329,52271],{"class":72},[51,80331,80332],{"class":53,"line":17894},[51,80333,80334],{"class":57},"    \u002F\u002F 2. 初始化数据\n",[51,80336,80337,80339,80342,80344],{"class":53,"line":33597},[51,80338,12183],{"class":64},[51,80340,80341],{"class":175}," goodsList",[51,80343,14526],{"class":64},[51,80345,56411],{"class":72},[51,80347,80348],{"class":53,"line":33603},[51,80349,80350],{"class":72},"      {\n",[51,80352,80353,80356,80359],{"class":53,"line":33609},[51,80354,80355],{"class":72},"        id: ",[51,80357,80358],{"class":282},"'4001172'",[51,80360,32430],{"class":72},[51,80362,80363,80366,80369],{"class":53,"line":33615},[51,80364,80365],{"class":72},"        name: ",[51,80367,80368],{"class":282},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[51,80370,32430],{"class":72},[51,80372,80373,80376,80379],{"class":53,"line":33621},[51,80374,80375],{"class":72},"        price: ",[51,80377,80378],{"class":282},"'289.00'",[51,80380,32430],{"class":72},[51,80382,80383,80386,80389],{"class":53,"line":33632},[51,80384,80385],{"class":72},"        picture: ",[51,80387,80388],{"class":282},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[51,80390,32430],{"class":72},[51,80392,80393],{"class":53,"line":33638},[51,80394,78856],{"class":72},[51,80396,80397],{"class":53,"line":33658},[51,80398,80350],{"class":72},[51,80400,80401,80403,80406],{"class":53,"line":33664},[51,80402,80355],{"class":72},[51,80404,80405],{"class":282},"'4001594'",[51,80407,32430],{"class":72},[51,80409,80410,80412,80415],{"class":53,"line":33675},[51,80411,80365],{"class":72},[51,80413,80414],{"class":282},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[51,80416,32430],{"class":72},[51,80418,80419,80421,80424],{"class":53,"line":33681},[51,80420,80375],{"class":72},[51,80422,80423],{"class":282},"'288.00'",[51,80425,32430],{"class":72},[51,80427,80428,80430,80433],{"class":53,"line":33687},[51,80429,80385],{"class":72},[51,80431,80432],{"class":282},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[51,80434,32430],{"class":72},[51,80436,80437],{"class":53,"line":33693},[51,80438,78856],{"class":72},[51,80440,80441],{"class":53,"line":33699},[51,80442,80350],{"class":72},[51,80444,80445,80447,80450],{"class":53,"line":33705},[51,80446,80355],{"class":72},[51,80448,80449],{"class":282},"'4001009'",[51,80451,32430],{"class":72},[51,80453,80454,80456,80459],{"class":53,"line":33711},[51,80455,80365],{"class":72},[51,80457,80458],{"class":282},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[51,80460,32430],{"class":72},[51,80462,80463,80465,80468],{"class":53,"line":33717},[51,80464,80375],{"class":72},[51,80466,80467],{"class":282},"'109.00'",[51,80469,32430],{"class":72},[51,80471,80472,80474,80477],{"class":53,"line":33737},[51,80473,80385],{"class":72},[51,80475,80476],{"class":282},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[51,80478,32430],{"class":72},[51,80480,80481],{"class":53,"line":33743},[51,80482,78856],{"class":72},[51,80484,80485],{"class":53,"line":33759},[51,80486,80350],{"class":72},[51,80488,80489,80491,80494],{"class":53,"line":33765},[51,80490,80355],{"class":72},[51,80492,80493],{"class":282},"'4001874'",[51,80495,32430],{"class":72},[51,80497,80498,80500,80503],{"class":53,"line":33779},[51,80499,80365],{"class":72},[51,80501,80502],{"class":282},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[51,80504,32430],{"class":72},[51,80506,80507,80509,80512],{"class":53,"line":33785},[51,80508,80375],{"class":72},[51,80510,80511],{"class":282},"'488.00'",[51,80513,32430],{"class":72},[51,80515,80516,80518,80521],{"class":53,"line":33800},[51,80517,80385],{"class":72},[51,80519,80520],{"class":282},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[51,80522,32430],{"class":72},[51,80524,80525],{"class":53,"line":33806},[51,80526,78856],{"class":72},[51,80528,80529],{"class":53,"line":33815},[51,80530,80350],{"class":72},[51,80532,80533,80535,80538],{"class":53,"line":33821},[51,80534,80355],{"class":72},[51,80536,80537],{"class":282},"'4001649'",[51,80539,32430],{"class":72},[51,80541,80542,80544,80547],{"class":53,"line":33830},[51,80543,80365],{"class":72},[51,80545,80546],{"class":282},"'大师监制龙泉青瓷茶叶罐'",[51,80548,32430],{"class":72},[51,80550,80551,80553,80556],{"class":53,"line":33836},[51,80552,80375],{"class":72},[51,80554,80555],{"class":282},"'139.00'",[51,80557,32430],{"class":72},[51,80559,80560,80562,80565],{"class":53,"line":33842},[51,80561,80385],{"class":72},[51,80563,80564],{"class":282},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[51,80566,32430],{"class":72},[51,80568,80569],{"class":53,"line":33851},[51,80570,78856],{"class":72},[51,80572,80573],{"class":53,"line":33857},[51,80574,80350],{"class":72},[51,80576,80577,80579,80582],{"class":53,"line":33868},[51,80578,80355],{"class":72},[51,80580,80581],{"class":282},"'3997185'",[51,80583,32430],{"class":72},[51,80585,80586,80588,80591],{"class":53,"line":33874},[51,80587,80365],{"class":72},[51,80589,80590],{"class":282},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[51,80592,32430],{"class":72},[51,80594,80595,80597,80600],{"class":53,"line":33893},[51,80596,80375],{"class":72},[51,80598,80599],{"class":282},"'108.00'",[51,80601,32430],{"class":72},[51,80603,80604,80606,80609],{"class":53,"line":33899},[51,80605,80385],{"class":72},[51,80607,80608],{"class":282},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[51,80610,32430],{"class":72},[51,80612,80613],{"class":53,"line":33910},[51,80614,78856],{"class":72},[51,80616,80617],{"class":53,"line":33916},[51,80618,80350],{"class":72},[51,80620,80621,80623,80626],{"class":53,"line":33936},[51,80622,80355],{"class":72},[51,80624,80625],{"class":282},"'3997403'",[51,80627,32430],{"class":72},[51,80629,80630,80632,80635],{"class":53,"line":33952},[51,80631,80365],{"class":72},[51,80633,80634],{"class":282},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[51,80636,32430],{"class":72},[51,80638,80639,80641,80644],{"class":53,"line":33958},[51,80640,80375],{"class":72},[51,80642,80643],{"class":282},"'100.00'",[51,80645,32430],{"class":72},[51,80647,80648,80650,80653],{"class":53,"line":33972},[51,80649,80385],{"class":72},[51,80651,80652],{"class":282},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[51,80654,32430],{"class":72},[51,80656,80657],{"class":53,"line":33978},[51,80658,78856],{"class":72},[51,80660,80661],{"class":53,"line":33984},[51,80662,80350],{"class":72},[51,80664,80665,80667,80670],{"class":53,"line":33995},[51,80666,80355],{"class":72},[51,80668,80669],{"class":282},"'3998274'",[51,80671,32430],{"class":72},[51,80673,80674,80676,80679],{"class":53,"line":34001},[51,80675,80365],{"class":72},[51,80677,80678],{"class":282},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[51,80680,32430],{"class":72},[51,80682,80683,80685,80687],{"class":53,"line":34007},[51,80684,80375],{"class":72},[51,80686,80555],{"class":282},[51,80688,32430],{"class":72},[51,80690,80691,80693,80696],{"class":53,"line":34017},[51,80692,80385],{"class":72},[51,80694,80695],{"class":282},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[51,80697,32430],{"class":72},[51,80699,80700],{"class":53,"line":34023},[51,80701,78856],{"class":72},[51,80703,80704],{"class":53,"line":34034},[51,80705,54073],{"class":72},[51,80707,80708],{"class":53,"line":34040},[51,80709,3480],{"emptyLinePlaceholder":1192},[51,80711,80712],{"class":53,"line":34050},[51,80713,80714],{"class":57},"    \u002F\u002F 1.渲染函数\n",[51,80716,80717,80719,80721,80723,80725],{"class":53,"line":34055},[51,80718,71048],{"class":64},[51,80720,71051],{"class":68},[51,80722,73],{"class":72},[51,80724,4957],{"class":78},[51,80726,13404],{"class":72},[51,80728,80729],{"class":53,"line":34061},[51,80730,80731],{"class":57},"      \u002F\u002F 声明空字符串\n",[51,80733,80734,80737,80740,80742],{"class":53,"line":34110},[51,80735,80736],{"class":64},"      let",[51,80738,80739],{"class":72}," str ",[51,80741,108],{"class":64},[51,80743,71068],{"class":282},[51,80745,80746],{"class":53,"line":34157},[51,80747,71073],{"class":57},[51,80749,80750,80752,80755,80757,80760,80763],{"class":53,"line":34162},[51,80751,58971],{"class":72},[51,80753,80754],{"class":68},"forEach",[51,80756,73],{"class":72},[51,80758,80759],{"class":78},"item",[51,80761,80762],{"class":64}," =>",[51,80764,16534],{"class":72},[51,80766,80767,80769,80772,80775,80777,80780,80782,80785,80788,80790],{"class":53,"line":34168},[51,80768,62234],{"class":64},[51,80770,80771],{"class":72}," { ",[51,80773,80774],{"class":175},"name",[51,80776,13397],{"class":72},[51,80778,80779],{"class":175},"price",[51,80781,13397],{"class":72},[51,80783,80784],{"class":175},"picture",[51,80786,80787],{"class":72}," } ",[51,80789,108],{"class":64},[51,80791,80792],{"class":72}," item\n",[51,80794,80795,80798,80800],{"class":53,"line":34187},[51,80796,80797],{"class":72},"        str ",[51,80799,10439],{"class":64},[51,80801,71132],{"class":282},[51,80803,80804],{"class":53,"line":34193},[51,80805,80806],{"class":282},"          \u003Cdiv class=\"item\">\n",[51,80808,80809,80812,80814],{"class":53,"line":34213},[51,80810,80811],{"class":282},"            \u003Cimg src=\"${",[51,80813,80784],{"class":72},[51,80815,80816],{"class":282},"}\" alt=\"\">\n",[51,80818,80819,80822,80824],{"class":53,"line":34219},[51,80820,80821],{"class":282},"            \u003Cp class=\"name\">${",[51,80823,80774],{"class":72},[51,80825,80826],{"class":282},"}\u003C\u002Fp>\n",[51,80828,80829,80832,80834],{"class":53,"line":34225},[51,80830,80831],{"class":282},"            \u003Cp class=\"price\">${",[51,80833,80779],{"class":72},[51,80835,80826],{"class":282},[51,80837,80838],{"class":53,"line":34235},[51,80839,80840],{"class":282},"          \u003C\u002Fdiv>\n",[51,80842,80843],{"class":53,"line":34240},[51,80844,80845],{"class":282},"        `\n",[51,80847,80848],{"class":53,"line":34246},[51,80849,65779],{"class":72},[51,80851,80852],{"class":53,"line":34262},[51,80853,80854],{"class":57},"      \u002F\u002F 追加给List\n",[51,80856,80857,80859,80861,80863,80866,80868,80870],{"class":53,"line":34307},[51,80858,56735],{"class":72},[51,80860,55363],{"class":68},[51,80862,73],{"class":72},[51,80864,80865],{"class":282},"'.list'",[51,80867,75213],{"class":72},[51,80869,108],{"class":64},[51,80871,74949],{"class":72},[51,80873,80874],{"class":53,"line":34313},[51,80875,3267],{"class":72},[51,80877,80878],{"class":53,"line":34319},[51,80879,80880],{"class":57},"    \u002F\u002F 页面一打开就需要渲染\n",[51,80882,80883,80886],{"class":53,"line":34325},[51,80884,80885],{"class":68},"    render",[51,80887,80888],{"class":72},"(goodsList)\n",[51,80890,80891],{"class":53,"line":34336},[51,80892,80893],{"class":57},"    \u002F\u002F 2.过滤筛选\n",[51,80895,80896,80898,80900,80902,80905,80907,80909,80911,80913,80915,80917,80919],{"class":53,"line":34342},[51,80897,53371],{"class":72},[51,80899,55363],{"class":68},[51,80901,73],{"class":72},[51,80903,80904],{"class":282},"'.filter'",[51,80906,31790],{"class":72},[51,80908,58777],{"class":68},[51,80910,73],{"class":72},[51,80912,58782],{"class":282},[51,80914,13397],{"class":72},[51,80916,1331],{"class":78},[51,80918,80762],{"class":64},[51,80920,16534],{"class":72},[51,80922,80923],{"class":53,"line":34348},[51,80924,80925],{"class":57},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[51,80927,80928,80930,80932,80935,80937,80939,80941,80943],{"class":53,"line":34354},[51,80929,59192],{"class":64},[51,80931,80771],{"class":72},[51,80933,80934],{"class":175},"tagName",[51,80936,13397],{"class":72},[51,80938,32501],{"class":175},[51,80940,80787],{"class":72},[51,80942,108],{"class":64},[51,80944,80945],{"class":72}," e.target\n",[51,80947,80948],{"class":53,"line":34372},[51,80949,80950],{"class":57},"      \u002F\u002F 判断\n",[51,80952,80953,80955,80957,80959,80961],{"class":53,"line":34386},[51,80954,55444],{"class":64},[51,80956,67998],{"class":72},[51,80958,55450],{"class":64},[51,80960,69220],{"class":282},[51,80962,13404],{"class":72},[51,80964,80965],{"class":53,"line":34395},[51,80966,80967],{"class":57},"        \u002F\u002F console.log(11)\n",[51,80969,80970],{"class":53,"line":34404},[51,80971,80972],{"class":57},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[51,80974,80975],{"class":53,"line":34413},[51,80976,80977],{"class":57},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[51,80979,80980,80982,80984,80986],{"class":53,"line":34422},[51,80981,52794],{"class":64},[51,80983,52797],{"class":72},[51,80985,108],{"class":64},[51,80987,80988],{"class":72}," goodsList\n",[51,80990,80991,80993,80996,80998,81001],{"class":53,"line":34428},[51,80992,3577],{"class":64},[51,80994,80995],{"class":72}," (dataset.index ",[51,80997,55450],{"class":64},[51,80999,81000],{"class":282}," '1'",[51,81002,13404],{"class":72},[51,81004,81005,81008,81010,81013,81016,81018,81020,81022,81025,81027,81029,81032,81034,81036,81038],{"class":53,"line":34434},[51,81006,81007],{"class":72},"          arr ",[51,81009,108],{"class":64},[51,81011,81012],{"class":72}," goodsList.",[51,81014,81015],{"class":68},"filter",[51,81017,73],{"class":72},[51,81019,80759],{"class":78},[51,81021,80762],{"class":64},[51,81023,81024],{"class":72}," item.price ",[51,81026,2800],{"class":64},[51,81028,5169],{"class":175},[51,81030,81031],{"class":64}," &&",[51,81033,81024],{"class":72},[51,81035,2687],{"class":64},[51,81037,661],{"class":175},[51,81039,90],{"class":72},[51,81041,81042,81045,81047,81049,81051,81053,81056],{"class":53,"line":34442},[51,81043,81044],{"class":72},"        } ",[51,81046,2791],{"class":64},[51,81048,2794],{"class":64},[51,81050,80995],{"class":72},[51,81052,55450],{"class":64},[51,81054,81055],{"class":282}," '2'",[51,81057,13404],{"class":72},[51,81059,81060,81062,81064,81066,81068,81070,81072,81074,81076,81078,81080,81082,81084,81086,81089],{"class":53,"line":34447},[51,81061,81007],{"class":72},[51,81063,108],{"class":64},[51,81065,81012],{"class":72},[51,81067,81015],{"class":68},[51,81069,73],{"class":72},[51,81071,80759],{"class":78},[51,81073,80762],{"class":64},[51,81075,81024],{"class":72},[51,81077,2800],{"class":64},[51,81079,661],{"class":175},[51,81081,81031],{"class":64},[51,81083,81024],{"class":72},[51,81085,2687],{"class":64},[51,81087,81088],{"class":175}," 300",[51,81090,90],{"class":72},[51,81092,81093,81095,81097,81099,81101,81103,81106],{"class":53,"line":34453},[51,81094,81044],{"class":72},[51,81096,2791],{"class":64},[51,81098,2794],{"class":64},[51,81100,80995],{"class":72},[51,81102,55450],{"class":64},[51,81104,81105],{"class":282}," '3'",[51,81107,13404],{"class":72},[51,81109,81110,81112,81114,81116,81118,81120,81122,81124,81126,81128,81130],{"class":53,"line":34464},[51,81111,81007],{"class":72},[51,81113,108],{"class":64},[51,81115,81012],{"class":72},[51,81117,81015],{"class":68},[51,81119,73],{"class":72},[51,81121,80759],{"class":78},[51,81123,80762],{"class":64},[51,81125,81024],{"class":72},[51,81127,2800],{"class":64},[51,81129,81088],{"class":175},[51,81131,90],{"class":72},[51,81133,81134],{"class":53,"line":34470},[51,81135,3609],{"class":72},[51,81137,81138],{"class":53,"line":34490},[51,81139,81140],{"class":57},"        \u002F\u002F 渲染函数\n",[51,81142,81143,81145],{"class":53,"line":34496},[51,81144,71372],{"class":68},[51,81146,53376],{"class":72},[51,81148,81149],{"class":53,"line":34502},[51,81150,53362],{"class":72},[51,81152,81153],{"class":53,"line":34508},[51,81154,3480],{"emptyLinePlaceholder":1192},[51,81156,81157],{"class":53,"line":34525},[51,81158,34425],{"class":72},[51,81160,81161,81163,81165],{"class":53,"line":34531},[51,81162,53381],{"class":72},[51,81164,52777],{"class":52264},[51,81166,52271],{"class":72},[51,81168,81169,81171,81173],{"class":53,"line":34537},[51,81170,52749],{"class":72},[51,81172,52764],{"class":52264},[51,81174,52271],{"class":72},[51,81176,81177],{"class":53,"line":34543},[51,81178,3480],{"emptyLinePlaceholder":1192},[51,81180,81181,81183,81185],{"class":53,"line":34549},[51,81182,52749],{"class":72},[51,81184,51599],{"class":52264},[51,81186,52271],{"class":72},[14,81188,81190],{"id":81189},"_410-深入了解对象","4.10 深入了解对象",[1233,81192,81194],{"id":81193},"_4101-创建对象","4.10.1 创建对象",[40,81196,81197],{},[2564,81198],{"alt":35,"src":81199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[40,81201,81202],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[1233,81204,81206],{"id":81205},"_4102-构造函数","4.10.2 构造函数",[40,81208,81209,81212],{},[840,81210,81211],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[40,81214,81215,81218],{},[840,81216,81217],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[29,81220,81222],{"className":51597,"code":81221,"language":51599,"meta":35,"style":35},"\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",[37,81223,81224,81232,81237,81258,81271,81283,81295,81299,81304,81331,81336,81363],{"__ignoreMap":35},[51,81225,81226,81228,81230],{"class":53,"line":54},[51,81227,2154],{"class":72},[51,81229,52777],{"class":52264},[51,81231,52271],{"class":72},[51,81233,81234],{"class":53,"line":61},[51,81235,81236],{"class":57},"\u002F\u002F例：\n",[51,81238,81239,81241,81244,81246,81248,81250,81252,81254,81256],{"class":53,"line":93},[51,81240,55413],{"class":64},[51,81242,81243],{"class":68}," Pig",[51,81245,73],{"class":72},[51,81247,80774],{"class":78},[51,81249,82],{"class":72},[51,81251,71185],{"class":78},[51,81253,82],{"class":72},[51,81255,71202],{"class":78},[51,81257,13404],{"class":72},[51,81259,81260,81263,81266,81268],{"class":53,"line":99},[51,81261,81262],{"class":175},"    this",[51,81264,81265],{"class":72},".name",[51,81267,108],{"class":64},[51,81269,81270],{"class":72},"name\n",[51,81272,81273,81275,81278,81280],{"class":53,"line":120},[51,81274,81262],{"class":175},[51,81276,81277],{"class":72},".age",[51,81279,108],{"class":64},[51,81281,81282],{"class":72},"age\n",[51,81284,81285,81287,81290,81292],{"class":53,"line":129},[51,81286,81262],{"class":175},[51,81288,81289],{"class":72},".gender",[51,81291,108],{"class":64},[51,81293,81294],{"class":72},"gender    \n",[51,81296,81297],{"class":53,"line":206},[51,81298,132],{"class":72},[51,81300,81301],{"class":53,"line":212},[51,81302,81303],{"class":57},"\u002F\u002F创建佩奇对象\n",[51,81305,81306,81308,81311,81313,81315,81317,81320,81322,81324,81326,81329],{"class":53,"line":227},[51,81307,7754],{"class":64},[51,81309,81310],{"class":175}," Peppa",[51,81312,12679],{"class":64},[51,81314,81243],{"class":68},[51,81316,73],{"class":72},[51,81318,81319],{"class":282},"'佩奇'",[51,81321,82],{"class":72},[51,81323,1593],{"class":175},[51,81325,82],{"class":72},[51,81327,81328],{"class":282},"'女'",[51,81330,90],{"class":72},[51,81332,81333],{"class":53,"line":370},[51,81334,81335],{"class":57},"\u002F\u002F创建乔治对象\n",[51,81337,81338,81340,81343,81345,81347,81349,81352,81354,81356,81358,81361],{"class":53,"line":387},[51,81339,7754],{"class":64},[51,81341,81342],{"class":175}," George",[51,81344,12679],{"class":64},[51,81346,81243],{"class":68},[51,81348,73],{"class":72},[51,81350,81351],{"class":282},"'乔治'",[51,81353,82],{"class":72},[51,81355,1328],{"class":175},[51,81357,82],{"class":72},[51,81359,81360],{"class":282},"'男'",[51,81362,90],{"class":72},[51,81364,81365,81367,81369],{"class":53,"line":404},[51,81366,52749],{"class":72},[51,81368,52777],{"class":52264},[51,81370,52271],{"class":72},[40,81372,81373],{},[2564,81374],{"alt":35,"src":81375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[40,81377,81378],{},[2564,81379],{"alt":35,"src":81380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[40,81382,81383],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[40,81385,81386],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[40,81388,81389],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[40,81391,81392],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[40,81394,81395],{},"这里用等号是因为：对象.属性=值",[40,81397,81398],{},"①利用对象字面量创建对象",[40,81400,81401],{},"const o={",[40,81403,81404],{},"name:'pink'",[40,81406,81407],{},"} ②利用new Object创建对象",[40,81409,81410],{},"const o=new Object({name:'pink'})",[40,81412,81413],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[40,81415,81416],{},"构造函数创建对象的执行过程：",[40,81418,81419],{},[2564,81420],{"alt":35,"src":81421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[1233,81423,81425],{"id":81424},"_4103-实例成员","4.10.3 实例成员",[40,81427,81428],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[19,81430,81431,81434,81437],{},[22,81432,81433],{},"实例对象的属性和方法即为实例成员",[22,81435,81436],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[22,81438,81439],{},"构造函数创建的实例对象彼此独立互不影响",[1233,81441,81443],{"id":81442},"_4104-静态成员","4.10.4 静态成员",[40,81445,81446],{},[2564,81447],{"alt":35,"src":81448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[40,81450,81451],{},"静态成员有Date.now() Math.PI Math.random()",[40,81453,81454],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[40,81456,81457],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[40,81459,81460],{},"function Pig(name) n {",[40,81462,81463],{},"this.name=name",[40,81465,2190],{},[40,81467,81468],{},"Pig.eyes=2",[40,81470,81471],{},"Pig.sayHai=function () { console.log(this) }",[40,81473,81474],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[40,81476,81477],{},"console.log(Pig.eyes) \u002F\u002F2",[40,81479,12294],{},[19,81481,81482,81485,81488,81491,81494],{},[22,81483,81484],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[22,81486,81487],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[22,81489,81490],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[22,81492,81493],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[22,81495,81496],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[40,81498,81499],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[1233,81501,81503],{"id":81502},"_4105-内置构造函数","4.10.5 内置构造函数",[40,81505,81506],{},"内置构造函数包含：",[40,81508,81509],{},[2564,81510],{"alt":35,"src":81511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[40,81513,81514],{},[2564,81515],{"alt":35,"src":81516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[40,81518,81519],{},"这些基本数据类型，js对他们进行了包装",[52777,81521,81522],{},"\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",[22960,81524,81526],{"id":81525},"_41051-object","4.10.5.1 Object",[40,81528,81529],{},"Object 是内置的构造函数，用于创建普通对象",[40,81531,81532],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[29,81534,81536],{"className":51597,"code":81535,"language":51599,"meta":35,"style":35},"const user=new Object({name:'小明',age:15})\n",[37,81537,81538],{"__ignoreMap":35},[51,81539,81540],{"class":53,"line":54},[51,81541,81535],{"class":72},[40,81543,81544],{},"三个常用的静态方法：",[23872,81546,81548],{"id":81547},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[40,81550,81551],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[40,81553,81554],{},[2564,81555],{"alt":35,"src":81556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[40,81558,81559],{},[2564,81560],{"alt":35,"src":81561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[29,81563,81565],{"className":54031,"code":81564,"language":54033,"meta":35,"style":35},"\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",[37,81566,81567,81575,81583,81588,81593,81598,81603,81608,81613,81621],{"__ignoreMap":35},[51,81568,81569,81571,81573],{"class":53,"line":54},[51,81570,2154],{"class":72},[51,81572,52764],{"class":52264},[51,81574,52271],{"class":72},[51,81576,81577,81579,81581],{"class":53,"line":61},[51,81578,53108],{"class":72},[51,81580,52777],{"class":52264},[51,81582,52271],{"class":72},[51,81584,81585],{"class":53,"line":93},[51,81586,81587],{"class":72},"    const o = { name: 'pink', age: 6 }\n",[51,81589,81590],{"class":53,"line":99},[51,81591,81592],{"class":72},"    \u002F\u002F 获得所有属性名\n",[51,81594,81595],{"class":53,"line":120},[51,81596,81597],{"class":72},"    const arr = Object.keys(o)\n",[51,81599,81600],{"class":53,"line":129},[51,81601,81602],{"class":72},"    console.log(arr)\n",[51,81604,81605],{"class":53,"line":206},[51,81606,81607],{"class":72},"    \u002F\u002F 获得所有属性值\n",[51,81609,81610],{"class":53,"line":212},[51,81611,81612],{"class":72},"    console.log(Object.values(o))\n",[51,81614,81615,81617,81619],{"class":53,"line":227},[51,81616,53381],{"class":72},[51,81618,52777],{"class":52264},[51,81620,52271],{"class":72},[51,81622,81623,81625,81627],{"class":53,"line":370},[51,81624,52749],{"class":72},[51,81626,52764],{"class":52264},[51,81628,52271],{"class":72},[23872,81630,81632],{"id":81631},"_410512-object-assign","4.10.5.1.2 Object. assign",[40,81634,81635],{},"Object.assign(oo,o)",[40,81637,81638],{},"后的东西添加给前 是追加",[40,81640,81641],{},[2564,81642],{"alt":35,"src":81643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[40,81645,81646],{},[2564,81647],{"alt":35,"src":81648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[29,81650,81652],{"className":54031,"code":81651,"language":54033,"meta":35,"style":35},"\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",[37,81653,81654,81662,81670,81674,81678,81682,81686,81690,81694,81699,81704,81709,81714,81719,81727],{"__ignoreMap":35},[51,81655,81656,81658,81660],{"class":53,"line":54},[51,81657,2154],{"class":72},[51,81659,52764],{"class":52264},[51,81661,52271],{"class":72},[51,81663,81664,81666,81668],{"class":53,"line":61},[51,81665,53108],{"class":72},[51,81667,52777],{"class":52264},[51,81669,52271],{"class":72},[51,81671,81672],{"class":53,"line":93},[51,81673,81587],{"class":72},[51,81675,81676],{"class":53,"line":99},[51,81677,81592],{"class":72},[51,81679,81680],{"class":53,"line":120},[51,81681,81597],{"class":72},[51,81683,81684],{"class":53,"line":129},[51,81685,81602],{"class":72},[51,81687,81688],{"class":53,"line":206},[51,81689,81607],{"class":72},[51,81691,81692],{"class":53,"line":212},[51,81693,81612],{"class":72},[51,81695,81696],{"class":53,"line":227},[51,81697,81698],{"class":72},"    const oo = {}\n",[51,81700,81701],{"class":53,"line":370},[51,81702,81703],{"class":72},"    Object.assign(oo, o)\n",[51,81705,81706],{"class":53,"line":387},[51,81707,81708],{"class":72},"    console.log(oo)\n",[51,81710,81711],{"class":53,"line":404},[51,81712,81713],{"class":72},"    Object.assign(o, { gender: '女' })\n",[51,81715,81716],{"class":53,"line":415},[51,81717,81718],{"class":72},"    console.log(o)\n",[51,81720,81721,81723,81725],{"class":53,"line":420},[51,81722,53381],{"class":72},[51,81724,52777],{"class":52264},[51,81726,52271],{"class":72},[51,81728,81729,81731,81733],{"class":53,"line":429},[51,81730,52749],{"class":72},[51,81732,52764],{"class":52264},[51,81734,52271],{"class":72},[40,81736,81737],{},[2564,81738],{"alt":35,"src":81739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22960,81741,81743],{"id":81742},"_41052-array","4.10.5.2 Array",[40,81745,81746],{},"Array 是内置的构造函数，用于创建数组",[40,81748,81749],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[29,81751,81753],{"className":51597,"code":81752,"language":51599,"meta":35,"style":35},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[37,81754,81755,81760],{"__ignoreMap":35},[51,81756,81757],{"class":53,"line":54},[51,81758,81759],{"class":72},"const arr=new Array(3,5)\n",[51,81761,81762],{"class":53,"line":61},[51,81763,81764],{"class":72},"console.log(arr)  \u002F\u002F[3,5]\n",[40,81766,81767],{},"Array的实例方法，这个方法是实例成员",[40,81769,81770],{},[2564,81771],{"alt":35,"src":81772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23872,81774,81776],{"id":81775},"_410521-reduce","4.10.5.2.1 reduce",[40,81778,81779],{},[2564,81780],{"alt":35,"src":81781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[29,81783,81785],{"className":54031,"code":81784,"language":54033,"meta":35,"style":35},"\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",[37,81786,81787,81795,81803,81808,81813,81818,81823,81827,81832,81837,81842,81846,81851,81856,81860,81865,81870,81875,81883],{"__ignoreMap":35},[51,81788,81789,81791,81793],{"class":53,"line":54},[51,81790,2154],{"class":72},[51,81792,52764],{"class":52264},[51,81794,52271],{"class":72},[51,81796,81797,81799,81801],{"class":53,"line":61},[51,81798,53108],{"class":72},[51,81800,52777],{"class":52264},[51,81802,52271],{"class":72},[51,81804,81805],{"class":53,"line":93},[51,81806,81807],{"class":72},"    const arr = [1, 5, 8]\n",[51,81809,81810],{"class":53,"line":99},[51,81811,81812],{"class":72},"    \u002F\u002F 1.没有初始值\n",[51,81814,81815],{"class":53,"line":120},[51,81816,81817],{"class":72},"    const total = arr.reduce(function (prev, current) {\n",[51,81819,81820],{"class":53,"line":129},[51,81821,81822],{"class":72},"      return prev + current\n",[51,81824,81825],{"class":53,"line":206},[51,81826,34425],{"class":72},[51,81828,81829],{"class":53,"line":212},[51,81830,81831],{"class":72},"    console.log(total)   \u002F\u002F14\n",[51,81833,81834],{"class":53,"line":227},[51,81835,81836],{"class":72},"    \u002F\u002F 2.有初始值\n",[51,81838,81839],{"class":53,"line":370},[51,81840,81841],{"class":72},"    const total1 = arr.reduce(function (prev, current) {\n",[51,81843,81844],{"class":53,"line":387},[51,81845,81822],{"class":72},[51,81847,81848],{"class":53,"line":404},[51,81849,81850],{"class":72},"    }, 10)\n",[51,81852,81853],{"class":53,"line":415},[51,81854,81855],{"class":72},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[51,81857,81858],{"class":53,"line":420},[51,81859,3480],{"emptyLinePlaceholder":1192},[51,81861,81862],{"class":53,"line":429},[51,81863,81864],{"class":72},"    \u002F\u002F 3.箭头函数写法\n",[51,81866,81867],{"class":53,"line":434},[51,81868,81869],{"class":72},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[51,81871,81872],{"class":53,"line":448},[51,81873,81874],{"class":72},"    console.log(total2)   \u002F\u002F24\n",[51,81876,81877,81879,81881],{"class":53,"line":462},[51,81878,53381],{"class":72},[51,81880,52777],{"class":52264},[51,81882,52271],{"class":72},[51,81884,81885,81887,81889],{"class":53,"line":470},[51,81886,52749],{"class":72},[51,81888,52764],{"class":52264},[51,81890,52271],{"class":72},[40,81892,81893],{},"执行过程：",[19,81895,81896,81899,81902],{},[22,81897,81898],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[22,81900,81901],{},"每一次循环，把返回值给作为下一次循环的上一次值",[22,81903,81904],{},"如果有起始值，则起始值作为上一次值",[29,81906,81908],{"className":54031,"code":81907,"language":54033,"meta":35,"style":35},"\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",[37,81909,81910,81918,81926,81930,81934,81938,81942,81946,81950,81955,81960,81965,81970,81975,81979,81983,81987,81991,81995,81999,82004,82008,82013,82017,82022,82027,82031,82035,82039,82047],{"__ignoreMap":35},[51,81911,81912,81914,81916],{"class":53,"line":54},[51,81913,2154],{"class":72},[51,81915,52764],{"class":52264},[51,81917,52271],{"class":72},[51,81919,81920,81922,81924],{"class":53,"line":61},[51,81921,53108],{"class":72},[51,81923,52777],{"class":52264},[51,81925,52271],{"class":72},[51,81927,81928],{"class":53,"line":93},[51,81929,81807],{"class":72},[51,81931,81932],{"class":53,"line":99},[51,81933,81812],{"class":72},[51,81935,81936],{"class":53,"line":120},[51,81937,81817],{"class":72},[51,81939,81940],{"class":53,"line":129},[51,81941,81822],{"class":72},[51,81943,81944],{"class":53,"line":206},[51,81945,34425],{"class":72},[51,81947,81948],{"class":53,"line":212},[51,81949,81831],{"class":72},[51,81951,81952],{"class":53,"line":227},[51,81953,81954],{"class":72},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[51,81956,81957],{"class":53,"line":370},[51,81958,81959],{"class":72},"    \u002F\u002F     1              5                    6\n",[51,81961,81962],{"class":53,"line":387},[51,81963,81964],{"class":72},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[51,81966,81967],{"class":53,"line":404},[51,81968,81969],{"class":72},"    \u002F\u002F     6              8                    14\n",[51,81971,81972],{"class":53,"line":415},[51,81973,81974],{"class":72},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[51,81976,81977],{"class":53,"line":420},[51,81978,81836],{"class":72},[51,81980,81981],{"class":53,"line":429},[51,81982,81841],{"class":72},[51,81984,81985],{"class":53,"line":434},[51,81986,81822],{"class":72},[51,81988,81989],{"class":53,"line":448},[51,81990,81850],{"class":72},[51,81992,81993],{"class":53,"line":462},[51,81994,81855],{"class":72},[51,81996,81997],{"class":53,"line":470},[51,81998,81954],{"class":72},[51,82000,82001],{"class":53,"line":2783},[51,82002,82003],{"class":72},"    \u002F\u002F     10             1                     11\n",[51,82005,82006],{"class":53,"line":2788},[51,82007,81964],{"class":72},[51,82009,82010],{"class":53,"line":2817},[51,82011,82012],{"class":72},"    \u002F\u002F     11             5                    16\n",[51,82014,82015],{"class":53,"line":2822},[51,82016,81964],{"class":72},[51,82018,82019],{"class":53,"line":2839},[51,82020,82021],{"class":72},"    \u002F\u002F     16             8                    24\n",[51,82023,82024],{"class":53,"line":2844},[51,82025,82026],{"class":72},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[51,82028,82029],{"class":53,"line":2849},[51,82030,81864],{"class":72},[51,82032,82033],{"class":53,"line":2854},[51,82034,81869],{"class":72},[51,82036,82037],{"class":53,"line":2868},[51,82038,81874],{"class":72},[51,82040,82041,82043,82045],{"class":53,"line":2873},[51,82042,53381],{"class":72},[51,82044,52777],{"class":52264},[51,82046,52271],{"class":72},[51,82048,82049,82051,82053],{"class":53,"line":3657},[51,82050,52749],{"class":72},[51,82052,52764],{"class":52264},[51,82054,52271],{"class":72},[23872,82056,82058],{"id":82057},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[40,82060,82061],{},[2564,82062],{"alt":35,"src":82063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[29,82065,82067],{"className":54031,"code":82066,"language":54033,"meta":35,"style":35},"\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",[37,82068,82069,82077,82085,82090,82095,82100,82105,82109,82114,82119,82124,82129,82134,82139,82143,82148,82152,82157,82165],{"__ignoreMap":35},[51,82070,82071,82073,82075],{"class":53,"line":54},[51,82072,2154],{"class":72},[51,82074,52764],{"class":52264},[51,82076,52271],{"class":72},[51,82078,82079,82081,82083],{"class":53,"line":61},[51,82080,53108],{"class":72},[51,82082,52777],{"class":52264},[51,82084,52271],{"class":72},[51,82086,82087],{"class":53,"line":93},[51,82088,82089],{"class":72},"    const arr = [\n",[51,82091,82092],{"class":53,"line":99},[51,82093,82094],{"class":72},"      { name: '张三', salary: 10000 },\n",[51,82096,82097],{"class":53,"line":120},[51,82098,82099],{"class":72},"      { name: '李四', salary: 10000 },\n",[51,82101,82102],{"class":53,"line":129},[51,82103,82104],{"class":72},"      { name: '王五', salary: 10000 }\n",[51,82106,82107],{"class":53,"line":206},[51,82108,54073],{"class":72},[51,82110,82111],{"class":53,"line":212},[51,82112,82113],{"class":72},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[51,82115,82116],{"class":53,"line":227},[51,82117,82118],{"class":72},"    \u002F\u002F prev是累计值\n",[51,82120,82121],{"class":53,"line":370},[51,82122,82123],{"class":72},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[51,82125,82126],{"class":53,"line":387},[51,82127,82128],{"class":72},"    console.log(total)\n",[51,82130,82131],{"class":53,"line":404},[51,82132,82133],{"class":72},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[51,82135,82136],{"class":53,"line":415},[51,82137,82138],{"class":72},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[51,82140,82141],{"class":53,"line":420},[51,82142,82133],{"class":72},[51,82144,82145],{"class":53,"line":429},[51,82146,82147],{"class":72},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[51,82149,82150],{"class":53,"line":434},[51,82151,82133],{"class":72},[51,82153,82154],{"class":53,"line":448},[51,82155,82156],{"class":72},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[51,82158,82159,82161,82163],{"class":53,"line":462},[51,82160,53381],{"class":72},[51,82162,52777],{"class":52264},[51,82164,52271],{"class":72},[51,82166,82167,82169,82171],{"class":53,"line":470},[51,82168,52749],{"class":72},[51,82170,52764],{"class":52264},[51,82172,52271],{"class":72},[23872,82174,82176],{"id":82175},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[40,82178,82179],{},[2564,82180],{"alt":35,"src":82181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[40,82183,82184],{},[2564,82185],{"alt":35,"src":82186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[19,82188,82189],{},[22,82190,82191],{},"find()",[40,82193,82194],{},"循环查找，找到第一个就ok",[40,82196,82197],{},[981,82198,82201],{"href":82199,"rel":82200},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24828],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[29,82203,82205],{"className":51597,"code":82204,"language":51599,"meta":35,"style":35},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[37,82206,82207,82212,82217],{"__ignoreMap":35},[51,82208,82209],{"class":53,"line":54},[51,82210,82211],{"class":72},"const array1 = [5, 12, 8, 130, 44]\n",[51,82213,82214],{"class":53,"line":61},[51,82215,82216],{"class":72},"const found = array1.find((element) => element > 10)\n",[51,82218,82219],{"class":53,"line":93},[51,82220,82221],{"class":72},"console.log(found)  \u002F\u002F12\n",[40,82223,82224,82226,82227,82232,82233,82236,82237,82239,82240,82245,82246,82248,82249,82251,82252,82254,82255],{},[37,82225,82191],{}," 方法是一个",[981,82228,82231],{"href":82229,"rel":82230},"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",[24828],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[37,82234,82235],{},"callbackFn"," 函数，直到 ",[37,82238,82235],{}," 返回一个",[981,82241,82244],{"href":82242,"rel":82243},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24828],"真值","。然后 ",[37,82247,82191],{}," 返回该元素并停止迭代数组。如果 ",[37,82250,82235],{}," 从未返回真值，则 ",[37,82253,82191],{}," 返回 ",[37,82256,82257],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[29,82259,82261],{"className":54031,"code":82260,"language":54033,"meta":35,"style":35},"\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",[37,82262,82263,82271,82279,82284,82289,82294,82298,82303,82308,82312,82317,82322,82326,82330,82335,82340,82344,82348,82353,82358,82363,82368,82373,82377,82382,82387,82392,82397,82401,82406,82414],{"__ignoreMap":35},[51,82264,82265,82267,82269],{"class":53,"line":54},[51,82266,2154],{"class":72},[51,82268,52764],{"class":52264},[51,82270,52271],{"class":72},[51,82272,82273,82275,82277],{"class":53,"line":61},[51,82274,53108],{"class":72},[51,82276,52777],{"class":52264},[51,82278,52271],{"class":72},[51,82280,82281],{"class":53,"line":93},[51,82282,82283],{"class":72},"    const arr = ['red', 'blue', 'green']\n",[51,82285,82286],{"class":53,"line":99},[51,82287,82288],{"class":72},"    const found = arr.find(item => item === 'pink')\n",[51,82290,82291],{"class":53,"line":120},[51,82292,82293],{"class":72},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[51,82295,82296],{"class":53,"line":129},[51,82297,3480],{"emptyLinePlaceholder":1192},[51,82299,82300],{"class":53,"line":206},[51,82301,82302],{"class":72},"    \u002F\u002F 使用场景，用于查找数据\n",[51,82304,82305],{"class":53,"line":212},[51,82306,82307],{"class":72},"    const arr1 = [\n",[51,82309,82310],{"class":53,"line":227},[51,82311,80350],{"class":72},[51,82313,82314],{"class":53,"line":370},[51,82315,82316],{"class":72},"        name: '小米',\n",[51,82318,82319],{"class":53,"line":387},[51,82320,82321],{"class":72},"        price: 1999\n",[51,82323,82324],{"class":53,"line":404},[51,82325,78856],{"class":72},[51,82327,82328],{"class":53,"line":415},[51,82329,80350],{"class":72},[51,82331,82332],{"class":53,"line":420},[51,82333,82334],{"class":72},"        name: '华为',\n",[51,82336,82337],{"class":53,"line":429},[51,82338,82339],{"class":72},"        price: 3999\n",[51,82341,82342],{"class":53,"line":434},[51,82343,53362],{"class":72},[51,82345,82346],{"class":53,"line":448},[51,82347,54073],{"class":72},[51,82349,82350],{"class":53,"line":462},[51,82351,82352],{"class":72},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[51,82354,82355],{"class":53,"line":470},[51,82356,82357],{"class":72},"    \u002F\u002F const found1 = arr1.find(item => {\n",[51,82359,82360],{"class":53,"line":2783},[51,82361,82362],{"class":72},"    \u002F\u002F   if (item.name === '小米') {\n",[51,82364,82365],{"class":53,"line":2788},[51,82366,82367],{"class":72},"    \u002F\u002F     return item\n",[51,82369,82370],{"class":53,"line":2817},[51,82371,82372],{"class":72},"    \u002F\u002F   }\n",[51,82374,82375],{"class":53,"line":2822},[51,82376,64254],{"class":72},[51,82378,82379],{"class":53,"line":2839},[51,82380,82381],{"class":72},"    \u002F\u002F 另一种写法\n",[51,82383,82384],{"class":53,"line":2844},[51,82385,82386],{"class":72},"    const found1 = arr1.find(item => {\n",[51,82388,82389],{"class":53,"line":2849},[51,82390,82391],{"class":72},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[51,82393,82394],{"class":53,"line":2854},[51,82395,82396],{"class":72},"      return item.name = '小米'\n",[51,82398,82399],{"class":53,"line":2868},[51,82400,34425],{"class":72},[51,82402,82403],{"class":53,"line":2873},[51,82404,82405],{"class":72},"    console.log(found1)\n",[51,82407,82408,82410,82412],{"class":53,"line":3657},[51,82409,53381],{"class":72},[51,82411,52777],{"class":52264},[51,82413,52271],{"class":72},[51,82415,82416,82418,82420],{"class":53,"line":3671},[51,82417,52749],{"class":72},[51,82419,52764],{"class":52264},[51,82421,52271],{"class":72},[40,82423,82424],{},[2564,82425],{"alt":35,"src":82426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[40,82428,82429],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[19,82431,82432],{"start":61},[22,82433,82434],{},"every()返回的是布尔值",[40,82436,82437],{},[981,82438,82441],{"href":82439,"rel":82440},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24828],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[40,82443,82444],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[40,82446,82447],{},"some是只有有一个就没问题",[40,82449,82450],{},"every是必须全是才行",[29,82452,82456],{"className":82453,"code":82454,"language":82455,"meta":35,"style":35},"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",[37,82457,82458,82474,82488,82492,82501],{"__ignoreMap":35},[51,82459,82460,82462,82465,82467,82469,82472],{"class":53,"line":54},[51,82461,55413],{"class":64},[51,82463,82464],{"class":72}," isBigEnough(element, ",[51,82466,75022],{"class":64},[51,82468,13397],{"class":72},[51,82470,82471],{"class":64},"array",[51,82473,13404],{"class":72},[51,82475,82476,82479,82482,82484,82486],{"class":53,"line":61},[51,82477,82478],{"class":64},"  return",[51,82480,82481],{"class":72}," element ",[51,82483,2800],{"class":64},[51,82485,3118],{"class":175},[51,82487,179],{"class":72},[51,82489,82490],{"class":53,"line":93},[51,82491,132],{"class":72},[51,82493,82494,82497,82499],{"class":53,"line":99},[51,82495,82496],{"class":72},"[12, 5, 8, 130, 44].every(isBigEnough); ",[51,82498,34293],{"class":64},[51,82500,55480],{"class":72},[51,82502,82503,82506,82508],{"class":53,"line":120},[51,82504,82505],{"class":72},"[12, 54, 18, 130, 44].every(isBigEnough); ",[51,82507,34293],{"class":64},[51,82509,58904],{"class":72},[29,82511,82513],{"className":54031,"code":82512,"language":54033,"meta":35,"style":35},"\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",[37,82514,82515,82523,82531,82536,82540,82545,82550,82558],{"__ignoreMap":35},[51,82516,82517,82519,82521],{"class":53,"line":54},[51,82518,2154],{"class":72},[51,82520,52764],{"class":52264},[51,82522,52271],{"class":72},[51,82524,82525,82527,82529],{"class":53,"line":61},[51,82526,53108],{"class":72},[51,82528,52777],{"class":52264},[51,82530,52271],{"class":72},[51,82532,82533],{"class":53,"line":93},[51,82534,82535],{"class":72},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[51,82537,82538],{"class":53,"line":99},[51,82539,79286],{"class":72},[51,82541,82542],{"class":53,"line":120},[51,82543,82544],{"class":72},"    const flag = arr.every(item => item >= 10)\n",[51,82546,82547],{"class":53,"line":129},[51,82548,82549],{"class":72},"    console.log(flag)    \u002F\u002Ftrue\n",[51,82551,82552,82554,82556],{"class":53,"line":206},[51,82553,53381],{"class":72},[51,82555,52777],{"class":52264},[51,82557,52271],{"class":72},[51,82559,82560,82562,82564],{"class":53,"line":212},[51,82561,52749],{"class":72},[51,82563,52764],{"class":52264},[51,82565,52271],{"class":72},[29,82567,82569],{"className":54031,"code":82568,"language":54033,"meta":35,"style":35},"\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",[37,82570,82571,82579,82587,82591,82596,82601,82606,82614],{"__ignoreMap":35},[51,82572,82573,82575,82577],{"class":53,"line":54},[51,82574,2154],{"class":72},[51,82576,52764],{"class":52264},[51,82578,52271],{"class":72},[51,82580,82581,82583,82585],{"class":53,"line":61},[51,82582,53108],{"class":72},[51,82584,52777],{"class":52264},[51,82586,52271],{"class":72},[51,82588,82589],{"class":53,"line":93},[51,82590,82535],{"class":72},[51,82592,82593],{"class":53,"line":99},[51,82594,82595],{"class":72},"    const arr = [10, 0, 5]\n",[51,82597,82598],{"class":53,"line":120},[51,82599,82600],{"class":72},"    const flag = arr.some(item => item >= 10)\n",[51,82602,82603],{"class":53,"line":129},[51,82604,82605],{"class":72},"    console.log(flag)   \u002F\u002Ftrue\n",[51,82607,82608,82610,82612],{"class":53,"line":206},[51,82609,53381],{"class":72},[51,82611,52777],{"class":52264},[51,82613,52271],{"class":72},[51,82615,82616,82618,82620],{"class":53,"line":212},[51,82617,52749],{"class":72},[51,82619,52764],{"class":52264},[51,82621,52271],{"class":72},[23872,82623,82625],{"id":82624},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[40,82627,82628],{},[2564,82629],{"alt":35,"src":82630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[29,82632,82634],{"className":51597,"code":82633,"language":51599,"meta":35,"style":35},"\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",[37,82635,82636,82646,82660,82664,82672,82686,82706,82718,82726,82733,82745,82757,82769,82781,82791,82801,82805,82813,82821,82825,82833,82845,82853,82875,82880,82885,82918,82926,82934,82938],{"__ignoreMap":35},[51,82637,82638,82640,82642,82644],{"class":53,"line":54},[51,82639,52261],{"class":72},[51,82641,52265],{"class":52264},[51,82643,52268],{"class":68},[51,82645,52271],{"class":72},[51,82647,82648,82650,82652,82654,82656,82658],{"class":53,"line":61},[51,82649,2154],{"class":72},[51,82651,51599],{"class":52264},[51,82653,52280],{"class":68},[51,82655,108],{"class":72},[51,82657,52285],{"class":282},[51,82659,52271],{"class":72},[51,82661,82662],{"class":53,"line":93},[51,82663,3480],{"emptyLinePlaceholder":1192},[51,82665,82666,82668,82670],{"class":53,"line":99},[51,82667,2154],{"class":72},[51,82669,52298],{"class":52264},[51,82671,52271],{"class":72},[51,82673,82674,82676,82678,82680,82682,82684],{"class":53,"line":120},[51,82675,53108],{"class":72},[51,82677,52308],{"class":52264},[51,82679,52311],{"class":68},[51,82681,108],{"class":72},[51,82683,52316],{"class":282},[51,82685,52271],{"class":72},[51,82687,82688,82690,82692,82694,82696,82698,82700,82702,82704],{"class":53,"line":129},[51,82689,53108],{"class":72},[51,82691,52308],{"class":52264},[51,82693,15882],{"class":68},[51,82695,108],{"class":72},[51,82697,52355],{"class":282},[51,82699,52335],{"class":68},[51,82701,108],{"class":72},[51,82703,52362],{"class":282},[51,82705,52271],{"class":72},[51,82707,82708,82710,82712,82714,82716],{"class":53,"line":206},[51,82709,53108],{"class":72},[51,82711,52371],{"class":52264},[51,82713,52374],{"class":72},[51,82715,52371],{"class":52264},[51,82717,52271],{"class":72},[51,82719,82720,82722,82724],{"class":53,"line":212},[51,82721,53108],{"class":72},[51,82723,1179],{"class":52264},[51,82725,52271],{"class":72},[51,82727,82728,82731],{"class":53,"line":227},[51,82729,82730],{"class":52264},"    div",[51,82732,16534],{"class":72},[51,82734,82735,82737,82739,82741,82743],{"class":53,"line":370},[51,82736,55735],{"class":175},[51,82738,52401],{"class":72},[51,82740,2812],{"class":175},[51,82742,52456],{"class":64},[51,82744,179],{"class":72},[51,82746,82747,82749,82751,82753,82755],{"class":53,"line":387},[51,82748,55749],{"class":175},[51,82750,52401],{"class":72},[51,82752,1649],{"class":175},[51,82754,52456],{"class":64},[51,82756,179],{"class":72},[51,82758,82759,82761,82763,82765,82767],{"class":53,"line":404},[51,82760,58323],{"class":175},[51,82762,52401],{"class":72},[51,82764,1649],{"class":175},[51,82766,52456],{"class":64},[51,82768,179],{"class":72},[51,82770,82771,82773,82775,82777,82779],{"class":53,"line":415},[51,82772,66097],{"class":175},[51,82774,52401],{"class":72},[51,82776,1744],{"class":175},[51,82778,52456],{"class":64},[51,82780,179],{"class":72},[51,82782,82783,82785,82787,82789],{"class":53,"line":420},[51,82784,58250],{"class":175},[51,82786,52401],{"class":72},[51,82788,52556],{"class":175},[51,82790,179],{"class":72},[51,82792,82793,82795,82797,82799],{"class":53,"line":429},[51,82794,55848],{"class":175},[51,82796,52401],{"class":72},[51,82798,52609],{"class":175},[51,82800,179],{"class":72},[51,82802,82803],{"class":53,"line":434},[51,82804,3267],{"class":72},[51,82806,82807,82809,82811],{"class":53,"line":448},[51,82808,53381],{"class":72},[51,82810,1179],{"class":52264},[51,82812,52271],{"class":72},[51,82814,82815,82817,82819],{"class":53,"line":462},[51,82816,52749],{"class":72},[51,82818,52298],{"class":52264},[51,82820,52271],{"class":72},[51,82822,82823],{"class":53,"line":470},[51,82824,3480],{"emptyLinePlaceholder":1192},[51,82826,82827,82829,82831],{"class":53,"line":2783},[51,82828,2154],{"class":72},[51,82830,52764],{"class":52264},[51,82832,52271],{"class":72},[51,82834,82835,82837,82839,82841,82843],{"class":53,"line":2788},[51,82836,53108],{"class":72},[51,82838,52575],{"class":52264},[51,82840,56278],{"class":72},[51,82842,52575],{"class":52264},[51,82844,52271],{"class":72},[51,82846,82847,82849,82851],{"class":53,"line":2817},[51,82848,53108],{"class":72},[51,82850,52777],{"class":52264},[51,82852,52271],{"class":72},[51,82854,82855,82857,82860,82862,82865,82868,82870,82873],{"class":53,"line":2822},[51,82856,12183],{"class":64},[51,82858,82859],{"class":175}," spec",[51,82861,14526],{"class":64},[51,82863,82864],{"class":72}," { size: ",[51,82866,82867],{"class":282},"'40cm*40cm'",[51,82869,56428],{"class":72},[51,82871,82872],{"class":282},"'黑色'",[51,82874,56568],{"class":72},[51,82876,82877],{"class":53,"line":2839},[51,82878,82879],{"class":57},"    \u002F\u002F const arr = Object.values(spec)\n",[51,82881,82882],{"class":53,"line":2844},[51,82883,82884],{"class":57},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[51,82886,82887,82889,82891,82893,82896,82898,82900,82903,82906,82909,82911,82913,82916],{"class":53,"line":2849},[51,82888,53371],{"class":72},[51,82890,55363],{"class":68},[51,82892,73],{"class":72},[51,82894,82895],{"class":282},"'div'",[51,82897,75213],{"class":72},[51,82899,108],{"class":64},[51,82901,82902],{"class":72}," Object.",[51,82904,82905],{"class":68},"values",[51,82907,82908],{"class":72},"(spec).",[51,82910,75187],{"class":68},[51,82912,73],{"class":72},[51,82914,82915],{"class":282},"'\u002F'",[51,82917,90],{"class":72},[51,82919,82920,82922,82924],{"class":53,"line":2854},[51,82921,53381],{"class":72},[51,82923,52777],{"class":52264},[51,82925,52271],{"class":72},[51,82927,82928,82930,82932],{"class":53,"line":2868},[51,82929,52749],{"class":72},[51,82931,52764],{"class":52264},[51,82933,52271],{"class":72},[51,82935,82936],{"class":53,"line":2873},[51,82937,3480],{"emptyLinePlaceholder":1192},[51,82939,82940,82942,82944],{"class":53,"line":3657},[51,82941,52749],{"class":72},[51,82943,51599],{"class":52264},[51,82945,52271],{"class":72},[40,82947,82948],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23872,82950,82952],{"id":82951},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[40,82954,82955],{},"静态方法，将伪数组转换为真数组",[40,82957,82958],{},[2564,82959],{"alt":35,"src":82960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[29,82962,82964],{"className":54031,"code":82963,"language":54033,"meta":35,"style":35},"\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",[37,82965,82966,82974,82982,82994,83006,83018,83026,83034,83039,83044,83049,83054,83062],{"__ignoreMap":35},[51,82967,82968,82970,82972],{"class":53,"line":54},[51,82969,2154],{"class":72},[51,82971,52764],{"class":52264},[51,82973,52271],{"class":72},[51,82975,82976,82978,82980],{"class":53,"line":61},[51,82977,53108],{"class":72},[51,82979,1000],{"class":52264},[51,82981,52271],{"class":72},[51,82983,82984,82986,82988,82990,82992],{"class":53,"line":93},[51,82985,52305],{"class":72},[51,82987,22],{"class":52264},[51,82989,56278],{"class":72},[51,82991,22],{"class":52264},[51,82993,52271],{"class":72},[51,82995,82996,82998,83000,83002,83004],{"class":53,"line":99},[51,82997,52305],{"class":72},[51,82999,22],{"class":52264},[51,83001,56278],{"class":72},[51,83003,22],{"class":52264},[51,83005,52271],{"class":72},[51,83007,83008,83010,83012,83014,83016],{"class":53,"line":120},[51,83009,52305],{"class":72},[51,83011,22],{"class":52264},[51,83013,56278],{"class":72},[51,83015,22],{"class":52264},[51,83017,52271],{"class":72},[51,83019,83020,83022,83024],{"class":53,"line":129},[51,83021,53381],{"class":72},[51,83023,1000],{"class":52264},[51,83025,52271],{"class":72},[51,83027,83028,83030,83032],{"class":53,"line":206},[51,83029,53108],{"class":72},[51,83031,52777],{"class":52264},[51,83033,52271],{"class":72},[51,83035,83036],{"class":53,"line":212},[51,83037,83038],{"class":72},"    const lis = document.querySelectorAll('li')\n",[51,83040,83041],{"class":53,"line":227},[51,83042,83043],{"class":72},"    const liss = Array.from(lis)\n",[51,83045,83046],{"class":53,"line":370},[51,83047,83048],{"class":72},"    liss.pop()\n",[51,83050,83051],{"class":53,"line":387},[51,83052,83053],{"class":72},"    console.log(liss)\n",[51,83055,83056,83058,83060],{"class":53,"line":404},[51,83057,53381],{"class":72},[51,83059,52777],{"class":52264},[51,83061,52271],{"class":72},[51,83063,83064,83066,83068],{"class":53,"line":415},[51,83065,52749],{"class":72},[51,83067,52764],{"class":52264},[51,83069,52271],{"class":72},[40,83071,83072],{},[2564,83073],{"alt":35,"src":83074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22960,83076,83078],{"id":83077},"_41053-string","4.10.5.3 String",[40,83080,83081],{},[2564,83082],{"alt":35,"src":83083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23872,83085,83087],{"id":83086},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[29,83089,83091],{"className":54031,"code":83090,"language":54033,"meta":35,"style":35},"\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",[37,83092,83093,83101,83109,83114,83119,83124,83128,83133,83138,83143,83151],{"__ignoreMap":35},[51,83094,83095,83097,83099],{"class":53,"line":54},[51,83096,2154],{"class":72},[51,83098,52764],{"class":52264},[51,83100,52271],{"class":72},[51,83102,83103,83105,83107],{"class":53,"line":61},[51,83104,53108],{"class":72},[51,83106,52777],{"class":52264},[51,83108,52271],{"class":72},[51,83110,83111],{"class":53,"line":93},[51,83112,83113],{"class":72},"    \u002F\u002F 把字符串转化为数组\n",[51,83115,83116],{"class":53,"line":99},[51,83117,83118],{"class":72},"    const str = 'pink,red'\n",[51,83120,83121],{"class":53,"line":120},[51,83122,83123],{"class":72},"    const arr = str.split(',')\n",[51,83125,83126],{"class":53,"line":129},[51,83127,81602],{"class":72},[51,83129,83130],{"class":53,"line":206},[51,83131,83132],{"class":72},"    const str1 = '2025-8-25'\n",[51,83134,83135],{"class":53,"line":212},[51,83136,83137],{"class":72},"    const arr1 = str1.split('-')\n",[51,83139,83140],{"class":53,"line":227},[51,83141,83142],{"class":72},"    console.log(arr1)\n",[51,83144,83145,83147,83149],{"class":53,"line":370},[51,83146,53381],{"class":72},[51,83148,52777],{"class":52264},[51,83150,52271],{"class":72},[51,83152,83153,83155,83157],{"class":53,"line":387},[51,83154,52749],{"class":72},[51,83156,52764],{"class":52264},[51,83158,52271],{"class":72},[23872,83160,83162],{"id":83161},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[40,83164,27],{},[40,83166,83167],{},"substring(indexStart)",[40,83169,83170],{},"substring(indexStart, indexEnd)",[1000,83172,83173,83184,83196,83206],{},[22,83174,83175,83176,83179,83180,83183],{},"如果省略了 ",[37,83177,83178],{},"indexEnd","，则 ",[37,83181,83182],{},"substring()"," 提取字符直到字符串的末尾",[22,83185,83186,83187,83190,83191,83179,83193,83195],{},"如果 ",[37,83188,83189],{},"indexStart"," 等于 ",[37,83192,83178],{},[37,83194,83182],{}," 返回一个空字符串",[22,83197,83186,83198,83200,83201,83179,83203,83205],{},[37,83199,83189],{}," 大于 ",[37,83202,83178],{},[37,83204,83182],{}," 的效果就像交换了这两个参数一样",[22,83207,83208],{},"结束的索引号不包含想要截取的部分",[29,83210,83212],{"className":82453,"code":83211,"language":82455,"meta":35,"style":35},"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",[37,83213,83214,83226,83230,83264,83294,83298,83329,83333,83360,83390,83420,83424,83455],{"__ignoreMap":35},[51,83215,83216,83219,83221,83224],{"class":53,"line":54},[51,83217,83218],{"class":72},"const anyString ",[51,83220,108],{"class":64},[51,83222,83223],{"class":282}," \"Mozilla\"",[51,83225,179],{"class":72},[51,83227,83228],{"class":53,"line":61},[51,83229,3480],{"emptyLinePlaceholder":1192},[51,83231,83232,83235,83237,83239,83241,83244,83246,83249,83251,83253,83255,83257,83259,83261],{"class":53,"line":93},[51,83233,83234],{"class":175},"console",[51,83236,1804],{"class":72},[51,83238,59211],{"class":175},[51,83240,73],{"class":72},[51,83242,83243],{"class":175},"anyString",[51,83245,1804],{"class":72},[51,83247,83248],{"class":175},"substring",[51,83250,73],{"class":72},[51,83252,176],{"class":175},[51,83254,13397],{"class":72},[51,83256,791],{"class":175},[51,83258,76217],{"class":72},[51,83260,34293],{"class":64},[51,83262,83263],{"class":282}," 'M'\n",[51,83265,83266,83268,83270,83272,83274,83276,83278,83280,83282,83284,83286,83288,83290,83292],{"class":53,"line":99},[51,83267,83234],{"class":175},[51,83269,1804],{"class":72},[51,83271,59211],{"class":175},[51,83273,73],{"class":72},[51,83275,83243],{"class":175},[51,83277,1804],{"class":72},[51,83279,83248],{"class":175},[51,83281,73],{"class":72},[51,83283,791],{"class":175},[51,83285,13397],{"class":72},[51,83287,176],{"class":175},[51,83289,76217],{"class":72},[51,83291,34293],{"class":64},[51,83293,83263],{"class":282},[51,83295,83296],{"class":53,"line":120},[51,83297,3480],{"emptyLinePlaceholder":1192},[51,83299,83300,83302,83304,83306,83308,83310,83312,83314,83316,83318,83320,83322,83324,83326],{"class":53,"line":129},[51,83301,83234],{"class":175},[51,83303,1804],{"class":72},[51,83305,59211],{"class":175},[51,83307,73],{"class":72},[51,83309,83243],{"class":175},[51,83311,1804],{"class":72},[51,83313,83248],{"class":175},[51,83315,73],{"class":72},[51,83317,176],{"class":175},[51,83319,13397],{"class":72},[51,83321,1593],{"class":175},[51,83323,76217],{"class":72},[51,83325,34293],{"class":64},[51,83327,83328],{"class":282}," 'Mozill'\n",[51,83330,83331],{"class":53,"line":206},[51,83332,3480],{"emptyLinePlaceholder":1192},[51,83334,83335,83337,83339,83341,83343,83345,83347,83349,83351,83353,83355,83357],{"class":53,"line":212},[51,83336,83234],{"class":175},[51,83338,1804],{"class":72},[51,83340,59211],{"class":175},[51,83342,73],{"class":72},[51,83344,83243],{"class":175},[51,83346,1804],{"class":72},[51,83348,83248],{"class":175},[51,83350,73],{"class":72},[51,83352,1543],{"class":175},[51,83354,76217],{"class":72},[51,83356,34293],{"class":64},[51,83358,83359],{"class":282}," 'lla'\n",[51,83361,83362,83364,83366,83368,83370,83372,83374,83376,83378,83380,83382,83384,83386,83388],{"class":53,"line":227},[51,83363,83234],{"class":175},[51,83365,1804],{"class":72},[51,83367,59211],{"class":175},[51,83369,73],{"class":72},[51,83371,83243],{"class":175},[51,83373,1804],{"class":72},[51,83375,83248],{"class":175},[51,83377,73],{"class":72},[51,83379,1543],{"class":175},[51,83381,13397],{"class":72},[51,83383,1618],{"class":175},[51,83385,76273],{"class":72},[51,83387,34293],{"class":64},[51,83389,83359],{"class":282},[51,83391,83392,83394,83396,83398,83400,83402,83404,83406,83408,83410,83412,83414,83416,83418],{"class":53,"line":370},[51,83393,83234],{"class":175},[51,83395,1804],{"class":72},[51,83397,59211],{"class":175},[51,83399,73],{"class":72},[51,83401,83243],{"class":175},[51,83403,1804],{"class":72},[51,83405,83248],{"class":175},[51,83407,73],{"class":72},[51,83409,1618],{"class":175},[51,83411,13397],{"class":72},[51,83413,1543],{"class":175},[51,83415,76217],{"class":72},[51,83417,34293],{"class":64},[51,83419,83359],{"class":282},[51,83421,83422],{"class":53,"line":387},[51,83423,3480],{"emptyLinePlaceholder":1192},[51,83425,83426,83428,83430,83432,83434,83436,83438,83440,83442,83444,83446,83448,83450,83452],{"class":53,"line":404},[51,83427,83234],{"class":175},[51,83429,1804],{"class":72},[51,83431,59211],{"class":175},[51,83433,73],{"class":72},[51,83435,83243],{"class":175},[51,83437,1804],{"class":72},[51,83439,83248],{"class":175},[51,83441,73],{"class":72},[51,83443,176],{"class":175},[51,83445,13397],{"class":72},[51,83447,1618],{"class":175},[51,83449,76217],{"class":72},[51,83451,34293],{"class":64},[51,83453,83454],{"class":282}," 'Mozilla'\n",[51,83456,83457,83459,83461,83463,83465,83467,83469,83471,83473,83475,83477,83479,83481,83483],{"class":53,"line":415},[51,83458,83234],{"class":175},[51,83460,1804],{"class":72},[51,83462,59211],{"class":175},[51,83464,73],{"class":72},[51,83466,83243],{"class":175},[51,83468,1804],{"class":72},[51,83470,83248],{"class":175},[51,83472,73],{"class":72},[51,83474,176],{"class":175},[51,83476,13397],{"class":72},[51,83478,443],{"class":175},[51,83480,76217],{"class":72},[51,83482,34293],{"class":64},[51,83484,83454],{"class":282},[23872,83486,83488],{"id":83487},"_410533-startswith","4.10.5.3.3 startsWith",[40,83490,83491,83494,83495,83500,83501,83503,83504],{},[37,83492,83493],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[840,83496,83497],{},[37,83498,83499],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[37,83502,2467],{}," 或 ",[37,83505,66984],{},[29,83507,83509],{"className":78459,"code":83508,"language":78461,"meta":35,"style":35},"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",[37,83510,83511,83523,83542,83547,83567],{"__ignoreMap":35},[51,83512,83513,83515,83518,83520],{"class":53,"line":54},[51,83514,7754],{"class":64},[51,83516,83517],{"class":72}," str1 ",[51,83519,108],{"class":64},[51,83521,83522],{"class":282}," \"Saturday night plans\"\n",[51,83524,83525,83527,83529,83532,83535,83537,83540],{"class":53,"line":61},[51,83526,78496],{"class":72},[51,83528,59211],{"class":68},[51,83530,83531],{"class":72},"(str1.",[51,83533,83534],{"class":68},"startsWith",[51,83536,73],{"class":72},[51,83538,83539],{"class":282},"\"Sat\"",[51,83541,31461],{"class":72},[51,83543,83544],{"class":53,"line":93},[51,83545,83546],{"class":57},"\u002F\u002F Expected output: true\n",[51,83548,83549,83551,83553,83555,83557,83559,83561,83563,83565],{"class":53,"line":99},[51,83550,78496],{"class":72},[51,83552,59211],{"class":68},[51,83554,83531],{"class":72},[51,83556,83534],{"class":68},[51,83558,73],{"class":72},[51,83560,83539],{"class":282},[51,83562,13397],{"class":72},[51,83564,1328],{"class":175},[51,83566,31461],{"class":72},[51,83568,83569],{"class":53,"line":120},[51,83570,83571],{"class":57},"\u002F\u002F Expected output: false\n",[29,83573,83575],{"className":51597,"code":83574,"language":51599,"meta":35,"style":35},"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",[37,83576,83577,83582,83587,83591,83596,83601],{"__ignoreMap":35},[51,83578,83579],{"class":53,"line":54},[51,83580,83581],{"class":72},"startsWith(searchString)\n",[51,83583,83584],{"class":53,"line":61},[51,83585,83586],{"class":72},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[51,83588,83589],{"class":53,"line":93},[51,83590,3480],{"emptyLinePlaceholder":1192},[51,83592,83593],{"class":53,"line":99},[51,83594,83595],{"class":72},"const str3 = 'pink老师上课中'\n",[51,83597,83598],{"class":53,"line":120},[51,83599,83600],{"class":72},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[51,83602,83603],{"class":53,"line":129},[51,83604,83605],{"class":72},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23872,83607,83609],{"id":83608},"_410534-includes","4.10.5.3.4 includes",[40,83611,83612],{},"includes(searchString) includes(searchString, position)",[19,83614,83615],{},[22,83616,83617],{},"searchString:",[40,83619,83620,83621,83623,83624,83629,83630,83635,83636,22462,83639,83642,83643,83646],{},"一个要在 ",[37,83622,2407],{}," 中查找的字符串。",[981,83625,83628],{"href":83626,"rel":83627},"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",[24828],"不能是正则表达式","。所有非正则表达式的值都会被",[981,83631,83634],{"href":83632,"rel":83633},"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",[24828],"强制转换为字符串","，因此如果该参数被省略或传入 ",[37,83637,83638],{},"undefined",[37,83640,83641],{},"includes()"," 方法会在字符串中搜索 ",[37,83644,83645],{},"\"undefined\"","，这通常不是你想要的",[19,83648,83649],{"start":61},[22,83650,83651,984],{},[37,83652,83653],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[40,83655,83656,83657,83660,83661],{},"在字符串中开始搜索 ",[37,83658,83659],{},"searchString"," 的位置。默认值为 ",[37,83662,176],{},[19,83664,83665],{"start":93},[22,83666,83667],{},"返回值：",[40,83669,83670,83671,83673,83674,83678,83679],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[37,83672,83659],{}," 为空字符串的情况），则返回 ",[840,83675,83676],{},[37,83677,2467],{}," ，否则返回 ",[840,83680,83681],{},[37,83682,66984],{},[19,83684,83685],{"start":99},[22,83686,83687],{},"异常：",[40,83689,83186,83690,14757,83692,83696],{},[37,83691,83659],{},[981,83693,83695],{"href":83626,"rel":83694},[24828],"是一个正则表达式","，则会抛出",[40,83698,83699],{},"只要是有就是true，不需要非得以谁开头结尾",[29,83701,83703],{"className":78459,"code":83702,"language":78461,"meta":35,"style":35},"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",[37,83704,83705,83716,83739,83758,83778,83800,83819],{"__ignoreMap":35},[51,83706,83707,83709,83711,83713],{"class":53,"line":54},[51,83708,7754],{"class":64},[51,83710,80739],{"class":72},[51,83712,108],{"class":64},[51,83714,83715],{"class":282}," \"To be, or not to be, that is the question.\"\n",[51,83717,83718,83720,83722,83725,83728,83730,83733,83736],{"class":53,"line":61},[51,83719,78496],{"class":72},[51,83721,59211],{"class":68},[51,83723,83724],{"class":72},"(str.",[51,83726,83727],{"class":68},"includes",[51,83729,73],{"class":72},[51,83731,83732],{"class":282},"\"To be\"",[51,83734,83735],{"class":72},"))",[51,83737,83738],{"class":57},"  \u002F\u002F true\n",[51,83740,83741,83743,83745,83747,83749,83751,83754,83756],{"class":53,"line":93},[51,83742,78496],{"class":72},[51,83744,59211],{"class":68},[51,83746,83724],{"class":72},[51,83748,83727],{"class":68},[51,83750,73],{"class":72},[51,83752,83753],{"class":282},"\"question\"",[51,83755,83735],{"class":72},[51,83757,83738],{"class":57},[51,83759,83760,83762,83764,83766,83768,83770,83773,83775],{"class":53,"line":99},[51,83761,78496],{"class":72},[51,83763,59211],{"class":68},[51,83765,83724],{"class":72},[51,83767,83727],{"class":68},[51,83769,73],{"class":72},[51,83771,83772],{"class":282},"\"nonexistent\"",[51,83774,83735],{"class":72},[51,83776,83777],{"class":57},"  \u002F\u002F false\n",[51,83779,83780,83782,83784,83786,83788,83790,83792,83794,83796,83798],{"class":53,"line":120},[51,83781,78496],{"class":72},[51,83783,59211],{"class":68},[51,83785,83724],{"class":72},[51,83787,83727],{"class":68},[51,83789,73],{"class":72},[51,83791,83732],{"class":282},[51,83793,13397],{"class":72},[51,83795,791],{"class":175},[51,83797,83735],{"class":72},[51,83799,83777],{"class":57},[51,83801,83802,83804,83806,83808,83810,83812,83815,83817],{"class":53,"line":129},[51,83803,78496],{"class":72},[51,83805,59211],{"class":68},[51,83807,83724],{"class":72},[51,83809,83727],{"class":68},[51,83811,73],{"class":72},[51,83813,83814],{"class":282},"\"TO BE\"",[51,83816,83735],{"class":72},[51,83818,83777],{"class":57},[51,83820,83821,83823,83825,83827,83829,83831,83833,83835],{"class":53,"line":206},[51,83822,78496],{"class":72},[51,83824,59211],{"class":68},[51,83826,83724],{"class":72},[51,83828,83727],{"class":68},[51,83830,73],{"class":72},[51,83832,8614],{"class":282},[51,83834,83735],{"class":72},[51,83836,83738],{"class":57},[23872,83838,83840],{"id":83839},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[29,83842,83844],{"className":54031,"code":83843,"language":54033,"meta":35,"style":35},"\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",[37,83845,83846,83854,83862,83867,83872,83877,83882,83887,83895],{"__ignoreMap":35},[51,83847,83848,83850,83852],{"class":53,"line":54},[51,83849,2154],{"class":72},[51,83851,52764],{"class":52264},[51,83853,52271],{"class":72},[51,83855,83856,83858,83860],{"class":53,"line":61},[51,83857,53108],{"class":72},[51,83859,52777],{"class":52264},[51,83861,52271],{"class":72},[51,83863,83864],{"class":53,"line":93},[51,83865,83866],{"class":72},"    const num = 10\n",[51,83868,83869],{"class":53,"line":99},[51,83870,83871],{"class":72},"    \u002F\u002F 强制转换\n",[51,83873,83874],{"class":53,"line":120},[51,83875,83876],{"class":72},"    console.log(String(num))\n",[51,83878,83879],{"class":53,"line":129},[51,83880,83881],{"class":72},"    \u002F\u002F toString()方法转换\n",[51,83883,83884],{"class":53,"line":206},[51,83885,83886],{"class":72},"    console.log(num.toString())\n",[51,83888,83889,83891,83893],{"class":53,"line":212},[51,83890,53381],{"class":72},[51,83892,52777],{"class":52264},[51,83894,52271],{"class":72},[51,83896,83897,83899,83901],{"class":53,"line":227},[51,83898,52749],{"class":72},[51,83900,52764],{"class":52264},[51,83902,52271],{"class":72},[23872,83904,83906],{"id":83905},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[40,83908,83909],{},[2564,83910],{"alt":35,"src":83911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[29,83913,83915],{"className":51597,"code":83914,"language":51599,"meta":35,"style":35},"\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",[37,83916,83917,83927,83941,83945,83953,83967,83987,83999,84007,84011,84019,84031,84039,84051,84056,84061,84066,84113,84129,84137,84145,84149],{"__ignoreMap":35},[51,83918,83919,83921,83923,83925],{"class":53,"line":54},[51,83920,52261],{"class":72},[51,83922,52265],{"class":52264},[51,83924,52268],{"class":68},[51,83926,52271],{"class":72},[51,83928,83929,83931,83933,83935,83937,83939],{"class":53,"line":61},[51,83930,2154],{"class":72},[51,83932,51599],{"class":52264},[51,83934,52280],{"class":68},[51,83936,108],{"class":72},[51,83938,52285],{"class":282},[51,83940,52271],{"class":72},[51,83942,83943],{"class":53,"line":93},[51,83944,3480],{"emptyLinePlaceholder":1192},[51,83946,83947,83949,83951],{"class":53,"line":99},[51,83948,2154],{"class":72},[51,83950,52298],{"class":52264},[51,83952,52271],{"class":72},[51,83954,83955,83957,83959,83961,83963,83965],{"class":53,"line":120},[51,83956,53108],{"class":72},[51,83958,52308],{"class":52264},[51,83960,52311],{"class":68},[51,83962,108],{"class":72},[51,83964,52316],{"class":282},[51,83966,52271],{"class":72},[51,83968,83969,83971,83973,83975,83977,83979,83981,83983,83985],{"class":53,"line":129},[51,83970,53108],{"class":72},[51,83972,52308],{"class":52264},[51,83974,15882],{"class":68},[51,83976,108],{"class":72},[51,83978,52355],{"class":282},[51,83980,52335],{"class":68},[51,83982,108],{"class":72},[51,83984,52362],{"class":282},[51,83986,52271],{"class":72},[51,83988,83989,83991,83993,83995,83997],{"class":53,"line":206},[51,83990,53108],{"class":72},[51,83992,52371],{"class":52264},[51,83994,52374],{"class":72},[51,83996,52371],{"class":52264},[51,83998,52271],{"class":72},[51,84000,84001,84003,84005],{"class":53,"line":212},[51,84002,52749],{"class":72},[51,84004,52298],{"class":52264},[51,84006,52271],{"class":72},[51,84008,84009],{"class":53,"line":227},[51,84010,3480],{"emptyLinePlaceholder":1192},[51,84012,84013,84015,84017],{"class":53,"line":370},[51,84014,2154],{"class":72},[51,84016,52764],{"class":52264},[51,84018,52271],{"class":72},[51,84020,84021,84023,84025,84027,84029],{"class":53,"line":387},[51,84022,53108],{"class":72},[51,84024,52575],{"class":52264},[51,84026,56278],{"class":72},[51,84028,52575],{"class":52264},[51,84030,52271],{"class":72},[51,84032,84033,84035,84037],{"class":53,"line":404},[51,84034,53108],{"class":72},[51,84036,52777],{"class":52264},[51,84038,52271],{"class":72},[51,84040,84041,84043,84046,84048],{"class":53,"line":415},[51,84042,12183],{"class":64},[51,84044,84045],{"class":175}," gift",[51,84047,14526],{"class":64},[51,84049,84050],{"class":282}," '50g的茶叶，清洗球'\n",[51,84052,84053],{"class":53,"line":420},[51,84054,84055],{"class":57},"    \u002F\u002F 1.把字符串拆分为数组\n",[51,84057,84058],{"class":53,"line":429},[51,84059,84060],{"class":57},"    \u002F\u002F console.log(gift.split(','))\n",[51,84062,84063],{"class":53,"line":434},[51,84064,84065],{"class":57},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[51,84067,84068,84070,84072,84074,84077,84080,84082,84085,84087,84089,84091,84093,84095,84098,84100,84103,84105,84107,84109,84111],{"class":53,"line":448},[51,84069,12183],{"class":64},[51,84071,74883],{"class":175},[51,84073,14526],{"class":64},[51,84075,84076],{"class":72}," gift.",[51,84078,84079],{"class":68},"split",[51,84081,73],{"class":72},[51,84083,84084],{"class":282},"'，'",[51,84086,31790],{"class":72},[51,84088,75008],{"class":68},[51,84090,73],{"class":72},[51,84092,80759],{"class":78},[51,84094,80762],{"class":64},[51,84096,84097],{"class":282}," `\u003Cspan>【赠品】${",[51,84099,80759],{"class":72},[51,84101,84102],{"class":282},"}\u003C\u002Fspan>\u003Cbr>`",[51,84104,31790],{"class":72},[51,84106,75187],{"class":68},[51,84108,73],{"class":72},[51,84110,75192],{"class":282},[51,84112,90],{"class":72},[51,84114,84115,84117,84119,84121,84123,84125,84127],{"class":53,"line":462},[51,84116,53371],{"class":72},[51,84118,55363],{"class":68},[51,84120,73],{"class":72},[51,84122,82895],{"class":282},[51,84124,75213],{"class":72},[51,84126,108],{"class":64},[51,84128,74949],{"class":72},[51,84130,84131,84133,84135],{"class":53,"line":470},[51,84132,53381],{"class":72},[51,84134,52777],{"class":52264},[51,84136,52271],{"class":72},[51,84138,84139,84141,84143],{"class":53,"line":2783},[51,84140,52749],{"class":72},[51,84142,52764],{"class":52264},[51,84144,52271],{"class":72},[51,84146,84147],{"class":53,"line":2788},[51,84148,3480],{"emptyLinePlaceholder":1192},[51,84150,84151,84153,84155],{"class":53,"line":2817},[51,84152,52749],{"class":72},[51,84154,51599],{"class":52264},[51,84156,52271],{"class":72},[22960,84158,84160],{"id":84159},"_41054-number","4.10.5.4 Number",[40,84162,84163],{},[2564,84164],{"alt":35,"src":84165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[40,84167,84168],{},"整数也可以进行toFixed来保留小数",[40,84170,84171],{},"比如：",[40,84173,84174],{},"const price=10",[40,84176,84177],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22960,84179,84181],{"id":84180},"_41055-购物车展示","4.10.5.5 购物车展示",[40,84183,84184],{},[2564,84185],{"alt":35,"src":84186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[29,84188,84190],{"className":51597,"code":84189,"language":51599,"meta":35,"style":35},"\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",[37,84191,84192,84202,84216,84220,84228,84242,84262,84274,84282,84288,84298,84308,84318,84322,84326,84332,84344,84358,84362,84366,84372,84384,84400,84410,84426,84430,84434,84440,84450,84460,84464,84468,84476,84488,84500,84512,84516,84520,84528,84540,84544,84548,84559,84569,84581,84593,84603,84607,84611,84619,84628,84640,84650,84660,84664,84668,84676,84685,84692,84702,84714,84718,84722,84731,84741,84752,84764,84776,84780,84784,84793,84803,84814,84818,84822,84828,84840,84852,84862,84872,84890,84902,84906,84910,84919,84931,84941,84951,84963,84967,84975,84983,84987,84995,85009,85017,85031,85059,85067,85075,85085,85089,85097,85105,85114,85122,85131,85141,85145,85149,85157,85165,85174,85182,85190,85203,85207,85211,85219,85227,85236,85244,85252,85267,85271,85275,85283,85291,85300,85308,85316,85330,85338,85342,85346,85351,85377,85382,85419,85424,85447,85452,85506,85511,85547,85551,85557,85562,85571,85585,85594,85613,85622,85632,85637,85642,85655,85660,85714,85740,85748,85756,85760],{"__ignoreMap":35},[51,84193,84194,84196,84198,84200],{"class":53,"line":54},[51,84195,52261],{"class":72},[51,84197,52265],{"class":52264},[51,84199,52268],{"class":68},[51,84201,52271],{"class":72},[51,84203,84204,84206,84208,84210,84212,84214],{"class":53,"line":61},[51,84205,2154],{"class":72},[51,84207,51599],{"class":52264},[51,84209,52280],{"class":68},[51,84211,108],{"class":72},[51,84213,52285],{"class":282},[51,84215,52271],{"class":72},[51,84217,84218],{"class":53,"line":93},[51,84219,3480],{"emptyLinePlaceholder":1192},[51,84221,84222,84224,84226],{"class":53,"line":99},[51,84223,2154],{"class":72},[51,84225,52298],{"class":52264},[51,84227,52271],{"class":72},[51,84229,84230,84232,84234,84236,84238,84240],{"class":53,"line":120},[51,84231,53108],{"class":72},[51,84233,52308],{"class":52264},[51,84235,52311],{"class":68},[51,84237,108],{"class":72},[51,84239,52316],{"class":282},[51,84241,52271],{"class":72},[51,84243,84244,84246,84248,84250,84252,84254,84256,84258,84260],{"class":53,"line":129},[51,84245,53108],{"class":72},[51,84247,52308],{"class":52264},[51,84249,15882],{"class":68},[51,84251,108],{"class":72},[51,84253,52355],{"class":282},[51,84255,52335],{"class":68},[51,84257,108],{"class":72},[51,84259,52362],{"class":282},[51,84261,52271],{"class":72},[51,84263,84264,84266,84268,84270,84272],{"class":53,"line":206},[51,84265,53108],{"class":72},[51,84267,52371],{"class":52264},[51,84269,52374],{"class":72},[51,84271,52371],{"class":52264},[51,84273,52271],{"class":72},[51,84275,84276,84278,84280],{"class":53,"line":212},[51,84277,53108],{"class":72},[51,84279,1179],{"class":52264},[51,84281,52271],{"class":72},[51,84283,84284,84286],{"class":53,"line":227},[51,84285,7365],{"class":52264},[51,84287,16534],{"class":72},[51,84289,84290,84292,84294,84296],{"class":53,"line":370},[51,84291,55659],{"class":175},[51,84293,52401],{"class":72},[51,84295,176],{"class":175},[51,84297,179],{"class":72},[51,84299,84300,84302,84304,84306],{"class":53,"line":387},[51,84301,55670],{"class":175},[51,84303,52401],{"class":72},[51,84305,176],{"class":175},[51,84307,179],{"class":72},[51,84309,84310,84312,84314,84316],{"class":53,"line":404},[51,84311,73560],{"class":175},[51,84313,52401],{"class":72},[51,84315,61469],{"class":175},[51,84317,179],{"class":72},[51,84319,84320],{"class":53,"line":415},[51,84321,3267],{"class":72},[51,84323,84324],{"class":53,"line":420},[51,84325,3480],{"emptyLinePlaceholder":1192},[51,84327,84328,84330],{"class":53,"line":429},[51,84329,63087],{"class":68},[51,84331,16534],{"class":72},[51,84333,84334,84336,84338,84340,84342],{"class":53,"line":434},[51,84335,55735],{"class":175},[51,84337,52401],{"class":72},[51,84339,79538],{"class":175},[51,84341,52456],{"class":64},[51,84343,179],{"class":72},[51,84345,84346,84348,84350,84352,84354,84356],{"class":53,"line":448},[51,84347,55670],{"class":175},[51,84349,52401],{"class":72},[51,84351,612],{"class":175},[51,84353,52456],{"class":64},[51,84355,52520],{"class":175},[51,84357,179],{"class":72},[51,84359,84360],{"class":53,"line":462},[51,84361,3267],{"class":72},[51,84363,84364],{"class":53,"line":470},[51,84365,3480],{"emptyLinePlaceholder":1192},[51,84367,84368,84370],{"class":53,"line":2783},[51,84369,79589],{"class":68},[51,84371,16534],{"class":72},[51,84373,84374,84376,84378,84380,84382],{"class":53,"line":2788},[51,84375,55659],{"class":175},[51,84377,52401],{"class":72},[51,84379,1821],{"class":175},[51,84381,52456],{"class":64},[51,84383,179],{"class":72},[51,84385,84386,84388,84390,84392,84394,84396,84398],{"class":53,"line":2817},[51,84387,62824],{"class":175},[51,84389,52401],{"class":72},[51,84391,29085],{"class":175},[51,84393,79644],{"class":175},[51,84395,79647],{"class":175},[51,84397,1941],{"class":64},[51,84399,179],{"class":72},[51,84401,84402,84404,84406,84408],{"class":53,"line":2822},[51,84403,55973],{"class":175},[51,84405,52401],{"class":72},[51,84407,52441],{"class":175},[51,84409,179],{"class":72},[51,84411,84412,84414,84416,84418,84420,84422,84424],{"class":53,"line":2839},[51,84413,62941],{"class":175},[51,84415,52401],{"class":72},[51,84417,791],{"class":175},[51,84419,52456],{"class":64},[51,84421,52485],{"class":175},[51,84423,63208],{"class":175},[51,84425,179],{"class":72},[51,84427,84428],{"class":53,"line":2844},[51,84429,3267],{"class":72},[51,84431,84432],{"class":53,"line":2849},[51,84433,3480],{"emptyLinePlaceholder":1192},[51,84435,84436,84438],{"class":53,"line":2854},[51,84437,79707],{"class":68},[51,84439,16534],{"class":72},[51,84441,84442,84444,84446,84448],{"class":53,"line":2868},[51,84443,62989],{"class":175},[51,84445,52401],{"class":72},[51,84447,62994],{"class":175},[51,84449,179],{"class":72},[51,84451,84452,84454,84456,84458],{"class":53,"line":2873},[51,84453,55848],{"class":175},[51,84455,52401],{"class":72},[51,84457,62782],{"class":175},[51,84459,179],{"class":72},[51,84461,84462],{"class":53,"line":3657},[51,84463,3267],{"class":72},[51,84465,84466],{"class":53,"line":3671},[51,84467,3480],{"emptyLinePlaceholder":1192},[51,84469,84470,84472,84474],{"class":53,"line":3679},[51,84471,79589],{"class":68},[51,84473,56579],{"class":52264},[51,84475,16534],{"class":72},[51,84477,84478,84480,84482,84484,84486],{"class":53,"line":3684},[51,84479,55735],{"class":175},[51,84481,52401],{"class":72},[51,84483,1858],{"class":175},[51,84485,52456],{"class":64},[51,84487,179],{"class":72},[51,84489,84490,84492,84494,84496,84498],{"class":53,"line":3690},[51,84491,55749],{"class":175},[51,84493,52401],{"class":72},[51,84495,1858],{"class":175},[51,84497,52456],{"class":64},[51,84499,179],{"class":72},[51,84501,84502,84504,84506,84508,84510],{"class":53,"line":3696},[51,84503,62714],{"class":175},[51,84505,52401],{"class":72},[51,84507,1568],{"class":175},[51,84509,52456],{"class":64},[51,84511,179],{"class":72},[51,84513,84514],{"class":53,"line":3701},[51,84515,3267],{"class":72},[51,84517,84518],{"class":53,"line":8910},[51,84519,3480],{"emptyLinePlaceholder":1192},[51,84521,84522,84524,84526],{"class":53,"line":8934},[51,84523,79589],{"class":68},[51,84525,63268],{"class":68},[51,84527,16534],{"class":72},[51,84529,84530,84532,84534,84536,84538],{"class":53,"line":8939},[51,84531,55735],{"class":175},[51,84533,52401],{"class":72},[51,84535,2812],{"class":175},[51,84537,52456],{"class":64},[51,84539,179],{"class":72},[51,84541,84542],{"class":53,"line":8945},[51,84543,3267],{"class":72},[51,84545,84546],{"class":53,"line":8972},[51,84547,3480],{"emptyLinePlaceholder":1192},[51,84549,84550,84552,84554,84557],{"class":53,"line":8977},[51,84551,79589],{"class":68},[51,84553,63268],{"class":68},[51,84555,84556],{"class":68}," .tag",[51,84558,16534],{"class":72},[51,84560,84561,84563,84565,84567],{"class":53,"line":8983},[51,84562,55973],{"class":175},[51,84564,52401],{"class":72},[51,84566,61833],{"class":175},[51,84568,179],{"class":72},[51,84570,84571,84573,84575,84577,84579],{"class":53,"line":8995},[51,84572,55659],{"class":175},[51,84574,52401],{"class":72},[51,84576,1334],{"class":175},[51,84578,52456],{"class":64},[51,84580,179],{"class":72},[51,84582,84583,84585,84587,84589,84591],{"class":53,"line":9007},[51,84584,55886],{"class":175},[51,84586,52401],{"class":72},[51,84588,1744],{"class":175},[51,84590,52456],{"class":64},[51,84592,179],{"class":72},[51,84594,84595,84597,84599,84601],{"class":53,"line":9019},[51,84596,58380],{"class":175},[51,84598,52401],{"class":72},[51,84600,63034],{"class":175},[51,84602,179],{"class":72},[51,84604,84605],{"class":53,"line":10678},[51,84606,3267],{"class":72},[51,84608,84609],{"class":53,"line":10703},[51,84610,3480],{"emptyLinePlaceholder":1192},[51,84612,84613,84615,84617],{"class":53,"line":10726},[51,84614,79589],{"class":68},[51,84616,79881],{"class":68},[51,84618,32430],{"class":72},[51,84620,84621,84623,84626],{"class":53,"line":10750},[51,84622,79589],{"class":68},[51,84624,84625],{"class":68}," .sub-total",[51,84627,16534],{"class":72},[51,84629,84630,84632,84634,84636,84638],{"class":53,"line":10755},[51,84631,55886],{"class":175},[51,84633,52401],{"class":72},[51,84635,1896],{"class":175},[51,84637,52456],{"class":64},[51,84639,179],{"class":72},[51,84641,84642,84644,84646,84648],{"class":53,"line":10760},[51,84643,58380],{"class":175},[51,84645,52401],{"class":72},[51,84647,79904],{"class":175},[51,84649,179],{"class":72},[51,84651,84652,84654,84656,84658],{"class":53,"line":10765},[51,84653,62801],{"class":175},[51,84655,52401],{"class":72},[51,84657,791],{"class":175},[51,84659,179],{"class":72},[51,84661,84662],{"class":53,"line":10774},[51,84663,3267],{"class":72},[51,84665,84666],{"class":53,"line":10779},[51,84667,3480],{"emptyLinePlaceholder":1192},[51,84669,84670,84672,84674],{"class":53,"line":10785},[51,84671,79589],{"class":68},[51,84673,79921],{"class":68},[51,84675,32430],{"class":72},[51,84677,84678,84680,84683],{"class":53,"line":10806},[51,84679,79589],{"class":68},[51,84681,84682],{"class":68}," .sub-total::before",[51,84684,32430],{"class":72},[51,84686,84687,84690],{"class":53,"line":10812},[51,84688,84689],{"class":68},"    .amount::before",[51,84691,16534],{"class":72},[51,84693,84694,84696,84698,84700],{"class":53,"line":10826},[51,84695,79928],{"class":175},[51,84697,52401],{"class":72},[51,84699,79933],{"class":282},[51,84701,179],{"class":72},[51,84703,84704,84706,84708,84710,84712],{"class":53,"line":10832},[51,84705,55886],{"class":175},[51,84707,52401],{"class":72},[51,84709,1744],{"class":175},[51,84711,52456],{"class":64},[51,84713,179],{"class":72},[51,84715,84716],{"class":53,"line":10859},[51,84717,3267],{"class":72},[51,84719,84720],{"class":53,"line":10868},[51,84721,3480],{"emptyLinePlaceholder":1192},[51,84723,84724,84726,84729],{"class":53,"line":10874},[51,84725,79589],{"class":68},[51,84727,84728],{"class":68}," .spec",[51,84730,16534],{"class":72},[51,84732,84733,84735,84737,84739],{"class":53,"line":10882},[51,84734,62801],{"class":175},[51,84736,52401],{"class":72},[51,84738,1334],{"class":175},[51,84740,179],{"class":72},[51,84742,84743,84745,84747,84750],{"class":53,"line":10887},[51,84744,58380],{"class":175},[51,84746,52401],{"class":72},[51,84748,84749],{"class":175},"#888",[51,84751,179],{"class":72},[51,84753,84754,84756,84758,84760,84762],{"class":53,"line":17566},[51,84755,55886],{"class":175},[51,84757,52401],{"class":72},[51,84759,1795],{"class":175},[51,84761,52456],{"class":64},[51,84763,179],{"class":72},[51,84765,84766,84768,84770,84772,84774],{"class":53,"line":17572},[51,84767,62964],{"class":175},[51,84769,52401],{"class":72},[51,84771,457],{"class":175},[51,84773,52456],{"class":64},[51,84775,179],{"class":72},[51,84777,84778],{"class":53,"line":17595},[51,84779,3267],{"class":72},[51,84781,84782],{"class":53,"line":17601},[51,84783,3480],{"emptyLinePlaceholder":1192},[51,84785,84786,84788,84791],{"class":53,"line":17624},[51,84787,79589],{"class":68},[51,84789,84790],{"class":68}," .count",[51,84792,16534],{"class":72},[51,84794,84795,84797,84799,84801],{"class":53,"line":17638},[51,84796,62801],{"class":175},[51,84798,52401],{"class":72},[51,84800,791],{"class":175},[51,84802,179],{"class":72},[51,84804,84805,84807,84809,84812],{"class":53,"line":17658},[51,84806,58380],{"class":175},[51,84808,52401],{"class":72},[51,84810,84811],{"class":175},"#aaa",[51,84813,179],{"class":72},[51,84815,84816],{"class":53,"line":17664},[51,84817,3267],{"class":72},[51,84819,84820],{"class":53,"line":17675},[51,84821,3480],{"emptyLinePlaceholder":1192},[51,84823,84824,84826],{"class":53,"line":17698},[51,84825,73439],{"class":68},[51,84827,16534],{"class":72},[51,84829,84830,84832,84834,84836,84838],{"class":53,"line":17720},[51,84831,55735],{"class":175},[51,84833,52401],{"class":72},[51,84835,79538],{"class":175},[51,84837,52456],{"class":64},[51,84839,179],{"class":72},[51,84841,84842,84844,84846,84848,84850],{"class":53,"line":17725},[51,84843,55670],{"class":175},[51,84845,52401],{"class":72},[51,84847,176],{"class":175},[51,84849,52520],{"class":175},[51,84851,179],{"class":72},[51,84853,84854,84856,84858,84860],{"class":53,"line":17731},[51,84855,55973],{"class":175},[51,84857,52401],{"class":72},[51,84859,52441],{"class":175},[51,84861,179],{"class":72},[51,84863,84864,84866,84868,84870],{"class":53,"line":17745},[51,84865,55984],{"class":175},[51,84867,52401],{"class":72},[51,84869,52544],{"class":175},[51,84871,179],{"class":72},[51,84873,84874,84877,84879,84881,84883,84885,84888],{"class":53,"line":17758},[51,84875,84876],{"class":175},"      border-top",[51,84878,52401],{"class":72},[51,84880,791],{"class":175},[51,84882,52456],{"class":64},[51,84884,52485],{"class":175},[51,84886,84887],{"class":175}," #4e4e4e",[51,84889,179],{"class":72},[51,84891,84892,84894,84896,84898,84900],{"class":53,"line":17763},[51,84893,55659],{"class":175},[51,84895,52401],{"class":72},[51,84897,457],{"class":175},[51,84899,52456],{"class":64},[51,84901,179],{"class":72},[51,84903,84904],{"class":53,"line":17777},[51,84905,3267],{"class":72},[51,84907,84908],{"class":53,"line":17782},[51,84909,3480],{"emptyLinePlaceholder":1192},[51,84911,84912,84914,84917],{"class":53,"line":17788},[51,84913,73439],{"class":68},[51,84915,84916],{"class":68}," .amount",[51,84918,16534],{"class":72},[51,84920,84921,84923,84925,84927,84929],{"class":53,"line":17793},[51,84922,55886],{"class":175},[51,84924,52401],{"class":72},[51,84926,1896],{"class":175},[51,84928,52456],{"class":64},[51,84930,179],{"class":72},[51,84932,84933,84935,84937,84939],{"class":53,"line":17807},[51,84934,58380],{"class":175},[51,84936,52401],{"class":72},[51,84938,79904],{"class":175},[51,84940,179],{"class":72},[51,84942,84943,84945,84947,84949],{"class":53,"line":17812},[51,84944,63298],{"class":175},[51,84946,52401],{"class":72},[51,84948,52453],{"class":175},[51,84950,179],{"class":72},[51,84952,84953,84955,84957,84959,84961],{"class":53,"line":17817},[51,84954,62714],{"class":175},[51,84956,52401],{"class":72},[51,84958,1902],{"class":175},[51,84960,52456],{"class":64},[51,84962,179],{"class":72},[51,84964,84965],{"class":53,"line":17831},[51,84966,3267],{"class":72},[51,84968,84969,84971,84973],{"class":53,"line":17843},[51,84970,53381],{"class":72},[51,84972,1179],{"class":52264},[51,84974,52271],{"class":72},[51,84976,84977,84979,84981],{"class":53,"line":17848},[51,84978,52749],{"class":72},[51,84980,52298],{"class":52264},[51,84982,52271],{"class":72},[51,84984,84985],{"class":53,"line":17861},[51,84986,3480],{"emptyLinePlaceholder":1192},[51,84988,84989,84991,84993],{"class":53,"line":17866},[51,84990,2154],{"class":72},[51,84992,52764],{"class":52264},[51,84994,52271],{"class":72},[51,84996,84997,84999,85001,85003,85005,85007],{"class":53,"line":17871},[51,84998,53108],{"class":72},[51,85000,52575],{"class":52264},[51,85002,54450],{"class":68},[51,85004,108],{"class":72},[51,85006,63572],{"class":282},[51,85008,52271],{"class":72},[51,85010,85011,85013,85015],{"class":53,"line":17876},[51,85012,53381],{"class":72},[51,85014,52575],{"class":52264},[51,85016,52271],{"class":72},[51,85018,85019,85021,85023,85025,85027,85029],{"class":53,"line":17889},[51,85020,53108],{"class":72},[51,85022,52575],{"class":52264},[51,85024,54450],{"class":68},[51,85026,108],{"class":72},[51,85028,63544],{"class":282},[51,85030,52271],{"class":72},[51,85032,85033,85035,85037,85040,85042,85044,85046,85049,85051,85053,85055,85057],{"class":53,"line":17894},[51,85034,52305],{"class":72},[51,85036,52575],{"class":52264},[51,85038,85039],{"class":72},">合计：\u003C",[51,85041,51],{"class":52264},[51,85043,54450],{"class":68},[51,85045,108],{"class":72},[51,85047,85048],{"class":282},"\"amount\"",[51,85050,56278],{"class":72},[51,85052,51],{"class":52264},[51,85054,56278],{"class":72},[51,85056,52575],{"class":52264},[51,85058,52271],{"class":72},[51,85060,85061,85063,85065],{"class":53,"line":33597},[51,85062,53381],{"class":72},[51,85064,52575],{"class":52264},[51,85066,52271],{"class":72},[51,85068,85069,85071,85073],{"class":53,"line":33603},[51,85070,53108],{"class":72},[51,85072,52777],{"class":52264},[51,85074,52271],{"class":72},[51,85076,85077,85079,85081,85083],{"class":53,"line":33609},[51,85078,12183],{"class":64},[51,85080,80341],{"class":175},[51,85082,14526],{"class":64},[51,85084,56411],{"class":72},[51,85086,85087],{"class":53,"line":33615},[51,85088,80350],{"class":72},[51,85090,85091,85093,85095],{"class":53,"line":33621},[51,85092,80355],{"class":72},[51,85094,80358],{"class":282},[51,85096,32430],{"class":72},[51,85098,85099,85101,85103],{"class":53,"line":33632},[51,85100,80365],{"class":72},[51,85102,80368],{"class":282},[51,85104,32430],{"class":72},[51,85106,85107,85109,85112],{"class":53,"line":33638},[51,85108,80375],{"class":72},[51,85110,85111],{"class":175},"289.9",[51,85113,32430],{"class":72},[51,85115,85116,85118,85120],{"class":53,"line":33658},[51,85117,80385],{"class":72},[51,85119,80388],{"class":282},[51,85121,32430],{"class":72},[51,85123,85124,85127,85129],{"class":53,"line":33664},[51,85125,85126],{"class":72},"        count: ",[51,85128,1334],{"class":175},[51,85130,32430],{"class":72},[51,85132,85133,85136,85139],{"class":53,"line":33675},[51,85134,85135],{"class":72},"        spec: { color: ",[51,85137,85138],{"class":282},"'白色'",[51,85140,56568],{"class":72},[51,85142,85143],{"class":53,"line":33681},[51,85144,78856],{"class":72},[51,85146,85147],{"class":53,"line":33687},[51,85148,80350],{"class":72},[51,85150,85151,85153,85155],{"class":53,"line":33693},[51,85152,80355],{"class":72},[51,85154,80449],{"class":282},[51,85156,32430],{"class":72},[51,85158,85159,85161,85163],{"class":53,"line":33699},[51,85160,80365],{"class":72},[51,85162,80458],{"class":282},[51,85164,32430],{"class":72},[51,85166,85167,85169,85172],{"class":53,"line":33705},[51,85168,80375],{"class":72},[51,85170,85171],{"class":175},"109.8",[51,85173,32430],{"class":72},[51,85175,85176,85178,85180],{"class":53,"line":33711},[51,85177,80385],{"class":72},[51,85179,80476],{"class":282},[51,85181,32430],{"class":72},[51,85183,85184,85186,85188],{"class":53,"line":33717},[51,85185,85126],{"class":72},[51,85187,1328],{"class":175},[51,85189,32430],{"class":72},[51,85191,85192,85195,85197,85199,85201],{"class":53,"line":33737},[51,85193,85194],{"class":72},"        spec: { size: ",[51,85196,82867],{"class":282},[51,85198,56428],{"class":72},[51,85200,82872],{"class":282},[51,85202,56568],{"class":72},[51,85204,85205],{"class":53,"line":33743},[51,85206,78856],{"class":72},[51,85208,85209],{"class":53,"line":33759},[51,85210,80350],{"class":72},[51,85212,85213,85215,85217],{"class":53,"line":33765},[51,85214,80355],{"class":72},[51,85216,80493],{"class":282},[51,85218,32430],{"class":72},[51,85220,85221,85223,85225],{"class":53,"line":33779},[51,85222,80365],{"class":72},[51,85224,80502],{"class":282},[51,85226,32430],{"class":72},[51,85228,85229,85231,85234],{"class":53,"line":33785},[51,85230,80375],{"class":72},[51,85232,85233],{"class":175},"488",[51,85235,32430],{"class":72},[51,85237,85238,85240,85242],{"class":53,"line":33800},[51,85239,80385],{"class":72},[51,85241,80520],{"class":282},[51,85243,32430],{"class":72},[51,85245,85246,85248,85250],{"class":53,"line":33806},[51,85247,85126],{"class":72},[51,85249,791],{"class":175},[51,85251,32430],{"class":72},[51,85253,85254,85256,85259,85262,85265],{"class":53,"line":33815},[51,85255,85135],{"class":72},[51,85257,85258],{"class":282},"'青色'",[51,85260,85261],{"class":72},", sum: ",[51,85263,85264],{"class":282},"'一大四小'",[51,85266,56568],{"class":72},[51,85268,85269],{"class":53,"line":33821},[51,85270,78856],{"class":72},[51,85272,85273],{"class":53,"line":33830},[51,85274,80350],{"class":72},[51,85276,85277,85279,85281],{"class":53,"line":33836},[51,85278,80355],{"class":72},[51,85280,80537],{"class":282},[51,85282,32430],{"class":72},[51,85284,85285,85287,85289],{"class":53,"line":33842},[51,85286,80365],{"class":72},[51,85288,80546],{"class":282},[51,85290,32430],{"class":72},[51,85292,85293,85295,85298],{"class":53,"line":33851},[51,85294,80375],{"class":72},[51,85296,85297],{"class":175},"139",[51,85299,32430],{"class":72},[51,85301,85302,85304,85306],{"class":53,"line":33857},[51,85303,80385],{"class":72},[51,85305,80564],{"class":282},[51,85307,32430],{"class":72},[51,85309,85310,85312,85314],{"class":53,"line":33868},[51,85311,85126],{"class":72},[51,85313,791],{"class":175},[51,85315,32430],{"class":72},[51,85317,85318,85320,85323,85325,85328],{"class":53,"line":33874},[51,85319,85194],{"class":72},[51,85321,85322],{"class":282},"'小号'",[51,85324,56428],{"class":72},[51,85326,85327],{"class":282},"'紫色'",[51,85329,56434],{"class":72},[51,85331,85332,85335],{"class":53,"line":33893},[51,85333,85334],{"class":72},"        gift: ",[51,85336,85337],{"class":282},"'50g茶叶,清洗球'\n",[51,85339,85340],{"class":53,"line":33899},[51,85341,53362],{"class":72},[51,85343,85344],{"class":53,"line":33910},[51,85345,54073],{"class":72},[51,85347,85348],{"class":53,"line":33916},[51,85349,85350],{"class":57},"    \u002F\u002F  1.根据数据渲染页面\n",[51,85352,85353,85355,85357,85359,85361,85363,85365,85367,85369,85371,85373,85375],{"class":53,"line":33936},[51,85354,53371],{"class":72},[51,85356,55363],{"class":68},[51,85358,73],{"class":72},[51,85360,80865],{"class":282},[51,85362,75213],{"class":72},[51,85364,108],{"class":64},[51,85366,81012],{"class":72},[51,85368,75008],{"class":68},[51,85370,73],{"class":72},[51,85372,80759],{"class":78},[51,85374,80762],{"class":64},[51,85376,16534],{"class":72},[51,85378,85379],{"class":53,"line":33952},[51,85380,85381],{"class":57},"      \u002F\u002F 对象解构\n",[51,85383,85384,85386,85388,85390,85392,85394,85396,85399,85401,85403,85405,85408,85410,85413,85415,85417],{"class":53,"line":33958},[51,85385,59192],{"class":64},[51,85387,80771],{"class":72},[51,85389,80784],{"class":175},[51,85391,13397],{"class":72},[51,85393,80774],{"class":175},[51,85395,13397],{"class":72},[51,85397,85398],{"class":175},"count",[51,85400,13397],{"class":72},[51,85402,80779],{"class":175},[51,85404,13397],{"class":72},[51,85406,85407],{"class":175},"spec",[51,85409,13397],{"class":72},[51,85411,85412],{"class":175},"gift",[51,85414,80787],{"class":72},[51,85416,108],{"class":64},[51,85418,80792],{"class":72},[51,85420,85421],{"class":53,"line":33972},[51,85422,85423],{"class":57},"      \u002F\u002F 规格文字模块处理\n",[51,85425,85426,85428,85431,85433,85435,85437,85439,85441,85443,85445],{"class":53,"line":33978},[51,85427,59192],{"class":64},[51,85429,85430],{"class":175}," text",[51,85432,14526],{"class":64},[51,85434,82902],{"class":72},[51,85436,82905],{"class":68},[51,85438,82908],{"class":72},[51,85440,75187],{"class":68},[51,85442,73],{"class":72},[51,85444,82915],{"class":282},[51,85446,90],{"class":72},[51,85448,85449],{"class":53,"line":33984},[51,85450,85451],{"class":57},"      \u002F\u002F 处理赠品模块\n",[51,85453,85454,85456,85458,85460,85463,85465,85467,85469,85471,85474,85476,85478,85480,85482,85484,85487,85489,85492,85494,85496,85498,85500,85502,85504],{"class":53,"line":33995},[51,85455,59192],{"class":64},[51,85457,74883],{"class":175},[51,85459,14526],{"class":64},[51,85461,85462],{"class":72}," gift ",[51,85464,978],{"class":64},[51,85466,84076],{"class":72},[51,85468,84079],{"class":68},[51,85470,73],{"class":72},[51,85472,85473],{"class":282},"','",[51,85475,31790],{"class":72},[51,85477,75008],{"class":68},[51,85479,73],{"class":72},[51,85481,80759],{"class":78},[51,85483,80762],{"class":64},[51,85485,85486],{"class":282}," `\u003Cspan class=\"tag\">【赠品】${",[51,85488,80759],{"class":72},[51,85490,85491],{"class":282},"}\u003C\u002Fspan>`",[51,85493,31790],{"class":72},[51,85495,75187],{"class":68},[51,85497,73],{"class":72},[51,85499,75192],{"class":282},[51,85501,14676],{"class":72},[51,85503,984],{"class":64},[51,85505,71068],{"class":282},[51,85507,85508],{"class":53,"line":34001},[51,85509,85510],{"class":57},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[51,85512,85513,85515,85518,85520,85523,85525,85527,85529,85532,85534,85536,85538,85541,85543,85545],{"class":53,"line":34007},[51,85514,59192],{"class":64},[51,85516,85517],{"class":175}," subtotal",[51,85519,14526],{"class":64},[51,85521,85522],{"class":72}," ((price ",[51,85524,1702],{"class":64},[51,85526,661],{"class":175},[51,85528,7480],{"class":64},[51,85530,85531],{"class":72}," count) ",[51,85533,1830],{"class":64},[51,85535,661],{"class":175},[51,85537,31790],{"class":72},[51,85539,85540],{"class":68},"toFixed",[51,85542,73],{"class":72},[51,85544,1334],{"class":175},[51,85546,90],{"class":72},[51,85548,85549],{"class":53,"line":34017},[51,85550,3480],{"emptyLinePlaceholder":1192},[51,85552,85553,85555],{"class":53,"line":34023},[51,85554,74946],{"class":64},[51,85556,71132],{"class":282},[51,85558,85559],{"class":53,"line":34034},[51,85560,85561],{"class":282},"        \u003Cdiv class=\"item\">\n",[51,85563,85564,85567,85569],{"class":53,"line":34040},[51,85565,85566],{"class":282},"          \u003Cimg src=\"${",[51,85568,80784],{"class":72},[51,85570,80816],{"class":282},[51,85572,85573,85576,85578,85581,85583],{"class":53,"line":34050},[51,85574,85575],{"class":282},"          \u003Cp class=\"name\">${",[51,85577,80774],{"class":72},[51,85579,85580],{"class":282},"}${",[51,85582,2407],{"class":72},[51,85584,80826],{"class":282},[51,85586,85587,85590,85592],{"class":53,"line":34055},[51,85588,85589],{"class":282},"          \u003Cp class=\"spec\">${",[51,85591,34],{"class":72},[51,85593,80826],{"class":282},[51,85595,85596,85599,85601,85603,85605,85607,85609,85611],{"class":53,"line":34061},[51,85597,85598],{"class":282},"          \u003Cp class=\"price\">${",[51,85600,80779],{"class":72},[51,85602,1804],{"class":282},[51,85604,85540],{"class":68},[51,85606,73],{"class":282},[51,85608,1334],{"class":175},[51,85610,1677],{"class":282},[51,85612,80826],{"class":282},[51,85614,85615,85618,85620],{"class":53,"line":34110},[51,85616,85617],{"class":282},"          \u003Cp class=\"count\">x${",[51,85619,85398],{"class":72},[51,85621,80826],{"class":282},[51,85623,85624,85627,85630],{"class":53,"line":34157},[51,85625,85626],{"class":282},"          \u003Cp class=\"sub-total\">${",[51,85628,85629],{"class":72},"subtotal",[51,85631,80826],{"class":282},[51,85633,85634],{"class":53,"line":34162},[51,85635,85636],{"class":282},"        \u003C\u002Fdiv> \n",[51,85638,85639],{"class":53,"line":34168},[51,85640,85641],{"class":282},"             `\n",[51,85643,85644,85647,85649,85651,85653],{"class":53,"line":34187},[51,85645,85646],{"class":72},"    }).",[51,85648,75187],{"class":68},[51,85650,73],{"class":72},[51,85652,75192],{"class":282},[51,85654,90],{"class":72},[51,85656,85657],{"class":53,"line":34193},[51,85658,85659],{"class":57},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[51,85661,85662,85664,85666,85668,85670,85673,85675,85678,85680,85682,85684,85687,85690,85692,85695,85697,85699,85701,85704,85706,85708,85710,85712],{"class":53,"line":34213},[51,85663,12183],{"class":64},[51,85665,63749],{"class":175},[51,85667,14526],{"class":64},[51,85669,81012],{"class":72},[51,85671,85672],{"class":68},"reduce",[51,85674,3456],{"class":72},[51,85676,85677],{"class":78},"prev",[51,85679,13397],{"class":72},[51,85681,80759],{"class":78},[51,85683,14676],{"class":72},[51,85685,85686],{"class":64},"=>",[51,85688,85689],{"class":72}," prev ",[51,85691,114],{"class":64},[51,85693,85694],{"class":72}," (item.price ",[51,85696,1702],{"class":64},[51,85698,661],{"class":175},[51,85700,7480],{"class":64},[51,85702,85703],{"class":72}," item.count) ",[51,85705,1830],{"class":64},[51,85707,661],{"class":175},[51,85709,13397],{"class":72},[51,85711,176],{"class":175},[51,85713,90],{"class":72},[51,85715,85716,85718,85720,85722,85725,85727,85729,85732,85734,85736,85738],{"class":53,"line":34219},[51,85717,53371],{"class":72},[51,85719,55363],{"class":68},[51,85721,73],{"class":72},[51,85723,85724],{"class":282},"'.amount'",[51,85726,75213],{"class":72},[51,85728,108],{"class":64},[51,85730,85731],{"class":72}," total.",[51,85733,85540],{"class":68},[51,85735,73],{"class":72},[51,85737,1334],{"class":175},[51,85739,90],{"class":72},[51,85741,85742,85744,85746],{"class":53,"line":34225},[51,85743,53381],{"class":72},[51,85745,52777],{"class":52264},[51,85747,52271],{"class":72},[51,85749,85750,85752,85754],{"class":53,"line":34235},[51,85751,52749],{"class":72},[51,85753,52764],{"class":52264},[51,85755,52271],{"class":72},[51,85757,85758],{"class":53,"line":34240},[51,85759,3480],{"emptyLinePlaceholder":1192},[51,85761,85762,85764,85766],{"class":53,"line":34246},[51,85763,52749],{"class":72},[51,85765,51599],{"class":52264},[51,85767,52271],{"class":72},[14,85769,85771],{"id":85770},"_411-编程思想","4.11 编程思想",[1233,85773,85775],{"id":85774},"_4111-面向过程介绍","4.11.1 面向过程介绍",[40,85777,85778,85781],{},[840,85779,85780],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[40,85783,85784],{},"调用就可以了",[40,85786,85787],{},[2564,85788],{"alt":35,"src":85789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[1233,85791,85793],{"id":85792},"_4112-面向对象","4.11.2 面向对象",[40,85795,85796],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[40,85798,85799],{},[2564,85800],{"alt":35,"src":85801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[40,85803,85804],{},"面向对象的特性：",[1000,85806,85807,85810,85813],{},[22,85808,85809],{},"封装性",[22,85811,85812],{},"继承性",[22,85814,85815],{},"多态性",[1233,85817,85819],{"id":85818},"_4113-两者比较","4.11.3 两者比较",[40,85821,85822],{},[2564,85823],{"alt":35,"src":85824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85826,85828],{"id":85827},"_412-构造函数回顾","4.12 构造函数回顾",[40,85830,85831],{},[2564,85832],{"alt":35,"src":85833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[40,85835,85836],{},[2564,85837],{"alt":35,"src":85838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[40,85840,85841],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[40,85843,85844],{},[2564,85845],{"alt":35,"src":85846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85848,85850],{"id":85849},"_413-原型","4.13 原型",[1233,85852,85854],{"id":85853},"_4131-原型对象的认识","4.13.1 原型对象的认识",[40,85856,85857],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[40,85859,85860],{},[2564,85861],{"alt":35,"src":85862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[40,85864,85865],{},[2564,85866],{"alt":35,"src":85867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[40,85869,85870],{},"原型是构造函数的属性，它也是一个对象",[40,85872,85873],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[40,85875,85876],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[29,85878,85880],{"className":54031,"code":85879,"language":54033,"meta":35,"style":35},"\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",[37,85881,85882,85890,85895,85903,85908,85913,85918,85923,85928,85932,85936,85940,85945,85950,85954,85959,85964,85969,85974,85979,85983,85991],{"__ignoreMap":35},[51,85883,85884,85886,85888],{"class":53,"line":54},[51,85885,2154],{"class":72},[51,85887,52764],{"class":52264},[51,85889,52271],{"class":72},[51,85891,85892],{"class":53,"line":61},[51,85893,85894],{"class":57},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[51,85896,85897,85899,85901],{"class":53,"line":93},[51,85898,53108],{"class":72},[51,85900,52777],{"class":52264},[51,85902,52271],{"class":72},[51,85904,85905],{"class":53,"line":99},[51,85906,85907],{"class":72},"    function Star(uname, age) {\n",[51,85909,85910],{"class":53,"line":120},[51,85911,85912],{"class":72},"      this.uname = uname,\n",[51,85914,85915],{"class":53,"line":129},[51,85916,85917],{"class":72},"        this.age = age\n",[51,85919,85920],{"class":53,"line":206},[51,85921,85922],{"class":72},"      \u002F\u002F this.sing = function () {\n",[51,85924,85925],{"class":53,"line":212},[51,85926,85927],{"class":72},"      \u002F\u002F   console.log('唱歌')\n",[51,85929,85930],{"class":53,"line":227},[51,85931,3480],{"emptyLinePlaceholder":1192},[51,85933,85934],{"class":53,"line":370},[51,85935,61001],{"class":72},[51,85937,85938],{"class":53,"line":387},[51,85939,3267],{"class":72},[51,85941,85942],{"class":53,"line":404},[51,85943,85944],{"class":72},"    Star.prototype.sing = function () {\n",[51,85946,85947],{"class":53,"line":415},[51,85948,85949],{"class":72},"      console.log('唱歌')\n",[51,85951,85952],{"class":53,"line":420},[51,85953,3267],{"class":72},[51,85955,85956],{"class":53,"line":429},[51,85957,85958],{"class":72},"    \u002F\u002F console.dir(Star.prototype)\n",[51,85960,85961],{"class":53,"line":434},[51,85962,85963],{"class":72},"    const pink = new Star('pink', 18)\n",[51,85965,85966],{"class":53,"line":448},[51,85967,85968],{"class":72},"    const red = new Star('red', 20)\n",[51,85970,85971],{"class":53,"line":462},[51,85972,85973],{"class":72},"    pink.sing()\n",[51,85975,85976],{"class":53,"line":470},[51,85977,85978],{"class":72},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[51,85980,85981],{"class":53,"line":2783},[51,85982,3480],{"emptyLinePlaceholder":1192},[51,85984,85985,85987,85989],{"class":53,"line":2788},[51,85986,53381],{"class":72},[51,85988,52777],{"class":52264},[51,85990,52271],{"class":72},[51,85992,85993,85995,85997],{"class":53,"line":2817},[51,85994,52749],{"class":72},[51,85996,52764],{"class":52264},[51,85998,52271],{"class":72},[40,86000,86001],{},[2564,86002],{"alt":35,"src":86003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[29,86005,86007],{"className":54031,"code":86006,"language":54033,"meta":35,"style":35},"\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",[37,86008,86009,86017,86025,86030,86035,86040,86045,86049,86054,86059,86064,86068,86073,86077,86081,86086,86090,86098],{"__ignoreMap":35},[51,86010,86011,86013,86015],{"class":53,"line":54},[51,86012,2154],{"class":72},[51,86014,52764],{"class":52264},[51,86016,52271],{"class":72},[51,86018,86019,86021,86023],{"class":53,"line":61},[51,86020,53108],{"class":72},[51,86022,52777],{"class":52264},[51,86024,52271],{"class":72},[51,86026,86027],{"class":53,"line":93},[51,86028,86029],{"class":72},"    let that\n",[51,86031,86032],{"class":53,"line":99},[51,86033,86034],{"class":72},"    function Star(uname) {\n",[51,86036,86037],{"class":53,"line":120},[51,86038,86039],{"class":72},"      this.uname = uname\n",[51,86041,86042],{"class":53,"line":129},[51,86043,86044],{"class":72},"      that = this\n",[51,86046,86047],{"class":53,"line":206},[51,86048,3267],{"class":72},[51,86050,86051],{"class":53,"line":212},[51,86052,86053],{"class":72},"    \u002F\u002F 实例对象是 ldh\n",[51,86055,86056],{"class":53,"line":227},[51,86057,86058],{"class":72},"    const ldh = new Star('刘德华')\n",[51,86060,86061],{"class":53,"line":370},[51,86062,86063],{"class":72},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[51,86065,86066],{"class":53,"line":387},[51,86067,3480],{"emptyLinePlaceholder":1192},[51,86069,86070],{"class":53,"line":404},[51,86071,86072],{"class":72},"    Star.sing = function () {\n",[51,86074,86075],{"class":53,"line":415},[51,86076,85949],{"class":72},[51,86078,86079],{"class":53,"line":420},[51,86080,3267],{"class":72},[51,86082,86083],{"class":53,"line":429},[51,86084,86085],{"class":72},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[51,86087,86088],{"class":53,"line":434},[51,86089,3480],{"emptyLinePlaceholder":1192},[51,86091,86092,86094,86096],{"class":53,"line":448},[51,86093,53381],{"class":72},[51,86095,52777],{"class":52264},[51,86097,52271],{"class":72},[51,86099,86100,86102,86104],{"class":53,"line":462},[51,86101,52749],{"class":72},[51,86103,52764],{"class":52264},[51,86105,52271],{"class":72},[40,86107,86108],{},"构造函数的this指向的是实例对象；",[40,86110,86111],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[1233,86113,86115],{"id":86114},"_4132-数组扩展方法","4.13.2 数组扩展方法",[40,86117,86118],{},[2564,86119],{"alt":35,"src":86120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[29,86122,86124],{"className":54031,"code":86123,"language":54033,"meta":35,"style":35},"\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",[37,86125,86126,86134,86142,86147,86152,86157,86162,86167,86172,86177,86182,86187,86192,86196,86201,86206,86211,86216,86220,86225,86230,86235,86240,86244,86249,86254,86259,86264,86268,86273,86277,86285],{"__ignoreMap":35},[51,86127,86128,86130,86132],{"class":53,"line":54},[51,86129,2154],{"class":72},[51,86131,52764],{"class":52264},[51,86133,52271],{"class":72},[51,86135,86136,86138,86140],{"class":53,"line":61},[51,86137,53108],{"class":72},[51,86139,52777],{"class":52264},[51,86141,52271],{"class":72},[51,86143,86144],{"class":53,"line":93},[51,86145,86146],{"class":72},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[51,86148,86149],{"class":53,"line":99},[51,86150,86151],{"class":72},"    const arr = [1, 2, 3]\n",[51,86153,86154],{"class":53,"line":120},[51,86155,86156],{"class":72},"    \u002F\u002F 自己定义数组的扩展方法\n",[51,86158,86159],{"class":53,"line":129},[51,86160,86161],{"class":72},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[51,86163,86164],{"class":53,"line":206},[51,86165,86166],{"class":72},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[51,86168,86169],{"class":53,"line":212},[51,86170,86171],{"class":72},"    \u002F\u002F ①.最大值\n",[51,86173,86174],{"class":53,"line":227},[51,86175,86176],{"class":72},"    Array.prototype.max = function () {\n",[51,86178,86179],{"class":53,"line":370},[51,86180,86181],{"class":72},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[51,86183,86184],{"class":53,"line":387},[51,86185,86186],{"class":72},"      return Math.max(...this)\n",[51,86188,86189],{"class":53,"line":404},[51,86190,86191],{"class":72},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[51,86193,86194],{"class":53,"line":415},[51,86195,3267],{"class":72},[51,86197,86198],{"class":53,"line":420},[51,86199,86200],{"class":72},"    console.log(arr.max())\n",[51,86202,86203],{"class":53,"line":429},[51,86204,86205],{"class":72},"    \u002F\u002F ②最小值\n",[51,86207,86208],{"class":53,"line":434},[51,86209,86210],{"class":72},"    Array.prototype.min = function () {\n",[51,86212,86213],{"class":53,"line":448},[51,86214,86215],{"class":72},"      return Math.min(...this)\n",[51,86217,86218],{"class":53,"line":462},[51,86219,3267],{"class":72},[51,86221,86222],{"class":53,"line":470},[51,86223,86224],{"class":72},"    console.log(arr.min())\n",[51,86226,86227],{"class":53,"line":2783},[51,86228,86229],{"class":72},"    \u002F\u002F③求和\n",[51,86231,86232],{"class":53,"line":2788},[51,86233,86234],{"class":72},"    Array.prototype.sum = function () {\n",[51,86236,86237],{"class":53,"line":2817},[51,86238,86239],{"class":72},"      return this.reduce((prev, current) => prev + current, 0)\n",[51,86241,86242],{"class":53,"line":2822},[51,86243,3267],{"class":72},[51,86245,86246],{"class":53,"line":2839},[51,86247,86248],{"class":72},"    console.log(arr.sum())\n",[51,86250,86251],{"class":53,"line":2844},[51,86252,86253],{"class":72},"    \u002F\u002F ③排序\n",[51,86255,86256],{"class":53,"line":2849},[51,86257,86258],{"class":72},"    Array.prototype.rever = function () {\n",[51,86260,86261],{"class":53,"line":2854},[51,86262,86263],{"class":72},"      return this.reverse()\n",[51,86265,86266],{"class":53,"line":2868},[51,86267,3267],{"class":72},[51,86269,86270],{"class":53,"line":2873},[51,86271,86272],{"class":72},"    console.log(arr.rever())\n",[51,86274,86275],{"class":53,"line":3657},[51,86276,3480],{"emptyLinePlaceholder":1192},[51,86278,86279,86281,86283],{"class":53,"line":3671},[51,86280,53381],{"class":72},[51,86282,52777],{"class":52264},[51,86284,52271],{"class":72},[51,86286,86287,86289,86291],{"class":53,"line":3679},[51,86288,52749],{"class":72},[51,86290,52764],{"class":52264},[51,86292,52271],{"class":72},[40,86294,86295],{},[2564,86296],{"alt":35,"src":86297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[1233,86299,86301],{"id":86300},"_4133-constructor-属性","4.13.3 constructor 属性",[40,86303,86304],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[40,86306,86307],{},[2564,86308],{"alt":35,"src":86309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[29,86311,86313],{"className":54031,"code":86312,"language":54033,"meta":35,"style":35},"\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",[37,86314,86315,86323,86331,86336,86341,86345,86350,86355,86360,86368],{"__ignoreMap":35},[51,86316,86317,86319,86321],{"class":53,"line":54},[51,86318,2154],{"class":72},[51,86320,52764],{"class":52264},[51,86322,52271],{"class":72},[51,86324,86325,86327,86329],{"class":53,"line":61},[51,86326,53108],{"class":72},[51,86328,52777],{"class":52264},[51,86330,52271],{"class":72},[51,86332,86333],{"class":53,"line":93},[51,86334,86335],{"class":72},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[51,86337,86338],{"class":53,"line":99},[51,86339,86340],{"class":72},"    function Star() {\n",[51,86342,86343],{"class":53,"line":120},[51,86344,3267],{"class":72},[51,86346,86347],{"class":53,"line":129},[51,86348,86349],{"class":72},"    const ldh = new Star()\n",[51,86351,86352],{"class":53,"line":206},[51,86353,86354],{"class":72},"    console.log(Star.prototype)\n",[51,86356,86357],{"class":53,"line":212},[51,86358,86359],{"class":72},"    console.log(Star.prototype.constructor === Star)\n",[51,86361,86362,86364,86366],{"class":53,"line":227},[51,86363,53381],{"class":72},[51,86365,52777],{"class":52264},[51,86367,52271],{"class":72},[51,86369,86370,86372,86374],{"class":53,"line":370},[51,86371,52749],{"class":72},[51,86373,52764],{"class":52264},[51,86375,52271],{"class":72},[40,86377,86378],{},[2564,86379],{"alt":35,"src":86380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[40,86382,86383],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[29,86385,86387],{"className":54031,"code":86386,"language":54033,"meta":35,"style":35},"  \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",[37,86388,86389,86397,86401,86405,86409,86414,86419,86424,86428,86433,86438,86443,86448,86453,86458,86462,86466,86471,86476,86481,86485,86490,86495,86499,86503,86507],{"__ignoreMap":35},[51,86390,86391,86393,86395],{"class":53,"line":54},[51,86392,53108],{"class":72},[51,86394,52777],{"class":52264},[51,86396,52271],{"class":72},[51,86398,86399],{"class":53,"line":61},[51,86400,86335],{"class":72},[51,86402,86403],{"class":53,"line":93},[51,86404,86340],{"class":72},[51,86406,86407],{"class":53,"line":99},[51,86408,3267],{"class":72},[51,86410,86411],{"class":53,"line":120},[51,86412,86413],{"class":72},"    \u002F\u002F const ldh = new Star()\n",[51,86415,86416],{"class":53,"line":129},[51,86417,86418],{"class":72},"    \u002F\u002F console.log(Star.prototype)\n",[51,86420,86421],{"class":53,"line":206},[51,86422,86423],{"class":72},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[51,86425,86426],{"class":53,"line":212},[51,86427,3480],{"emptyLinePlaceholder":1192},[51,86429,86430],{"class":53,"line":227},[51,86431,86432],{"class":72},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[51,86434,86435],{"class":53,"line":370},[51,86436,86437],{"class":72},"    \u002F\u002F Star.prototype.sing = function () {\n",[51,86439,86440],{"class":53,"line":387},[51,86441,86442],{"class":72},"    \u002F\u002F   console.log('唱歌')\n",[51,86444,86445],{"class":53,"line":404},[51,86446,86447],{"class":72},"    \u002F\u002F }\n",[51,86449,86450],{"class":53,"line":415},[51,86451,86452],{"class":72},"    \u002F\u002F Star.prototype.dance = function () {\n",[51,86454,86455],{"class":53,"line":420},[51,86456,86457],{"class":72},"    \u002F\u002F   console.log('跳舞')\n",[51,86459,86460],{"class":53,"line":429},[51,86461,86447],{"class":72},[51,86463,86464],{"class":53,"line":434},[51,86465,86354],{"class":72},[51,86467,86468],{"class":53,"line":448},[51,86469,86470],{"class":72},"    Star.prototype = {\n",[51,86472,86473],{"class":53,"line":462},[51,86474,86475],{"class":72},"      sing: function () {\n",[51,86477,86478],{"class":53,"line":470},[51,86479,86480],{"class":72},"        console.log('唱歌')\n",[51,86482,86483],{"class":53,"line":2783},[51,86484,78856],{"class":72},[51,86486,86487],{"class":53,"line":2788},[51,86488,86489],{"class":72},"      dance: function () {\n",[51,86491,86492],{"class":53,"line":2817},[51,86493,86494],{"class":72},"        console.log('跳舞')\n",[51,86496,86497],{"class":53,"line":2822},[51,86498,53362],{"class":72},[51,86500,86501],{"class":53,"line":2839},[51,86502,3267],{"class":72},[51,86504,86505],{"class":53,"line":2844},[51,86506,86354],{"class":72},[51,86508,86509,86511,86513],{"class":53,"line":2849},[51,86510,53381],{"class":72},[51,86512,52777],{"class":52264},[51,86514,52271],{"class":72},[40,86516,86517],{},"进行输出结果后会发现：",[40,86519,86520],{},[2564,86521],{"alt":35,"src":86522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[40,86524,86525],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[40,86527,86528],{},"所以，要重新指回创造这个原型对象的构造函数",[29,86530,86532],{"className":72177,"code":86531,"language":72179,"meta":35,"style":35},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[37,86533,86534,86548,86553,86558,86569,86582,86587,86598,86612,86616],{"__ignoreMap":35},[51,86535,86536,86539,86541,86544,86546],{"class":53,"line":54},[51,86537,86538],{"class":175},"Star",[51,86540,1804],{"class":72},[51,86542,86543],{"class":175},"prototype",[51,86545,14526],{"class":64},[51,86547,16534],{"class":72},[51,86549,86550],{"class":53,"line":61},[51,86551,86552],{"class":57},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[51,86554,86555],{"class":53,"line":93},[51,86556,86557],{"class":72},"  constructor: Star,\n",[51,86559,86560,86563,86565,86567],{"class":53,"line":99},[51,86561,86562],{"class":68},"  sing",[51,86564,52401],{"class":72},[51,86566,55413],{"class":64},[51,86568,55416],{"class":72},[51,86570,86571,86573,86575,86577,86580],{"class":53,"line":120},[51,86572,74717],{"class":72},[51,86574,59211],{"class":68},[51,86576,73],{"class":72},[51,86578,86579],{"class":282},"'唱歌'",[51,86581,90],{"class":72},[51,86583,86584],{"class":53,"line":129},[51,86585,86586],{"class":72},"   },\n",[51,86588,86589,86592,86594,86596],{"class":53,"line":206},[51,86590,86591],{"class":68},"   dance",[51,86593,52401],{"class":72},[51,86595,55413],{"class":64},[51,86597,55416],{"class":72},[51,86599,86600,86603,86605,86607,86610],{"class":53,"line":212},[51,86601,86602],{"class":72},"     console.",[51,86604,59211],{"class":68},[51,86606,73],{"class":72},[51,86608,86609],{"class":282},"'跳舞'",[51,86611,90],{"class":72},[51,86613,86614],{"class":53,"line":227},[51,86615,5383],{"class":72},[51,86617,86618],{"class":53,"line":370},[51,86619,132],{"class":72},[40,86621,86622],{},[2564,86623],{"alt":35,"src":86624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[40,86626,86627],{},"总结1：",[40,86629,86630],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[40,86632,86633],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[40,86635,86636],{},"constructor指的是他的来源",[40,86638,86639],{},[2564,86640],{"alt":35,"src":86641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[40,86643,86644],{},[2564,86645],{"alt":35,"src":86646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[40,86648,86649],{},"总结2：",[40,86651,86652],{},[2564,86653],{"alt":35,"src":86654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[40,86656,86657],{},[2564,86658],{"alt":35,"src":86659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[40,86661,86662],{},[2564,86663],{"alt":35,"src":86664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[1233,86666,86668],{"id":86667},"_4134-对象原型","4.13.4 对象原型",[40,86670,86671],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[40,86673,86674],{},"对象原型就是__proto__这个属性",[40,86676,86677],{},[2564,86678],{"alt":35,"src":86679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[40,86681,86682],{},[2564,86683],{"alt":35,"src":86684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[40,86686,86687],{},[2564,86688],{"alt":35,"src":86689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[40,86691,86692],{},[2564,86693],{"alt":35,"src":86694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[29,86696,86698],{"className":54031,"code":86697,"language":54033,"meta":35,"style":35},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[37,86699,86700,86708,86716,86720,86724,86728,86733,86741],{"__ignoreMap":35},[51,86701,86702,86704,86706],{"class":53,"line":54},[51,86703,2154],{"class":72},[51,86705,52764],{"class":52264},[51,86707,52271],{"class":72},[51,86709,86710,86712,86714],{"class":53,"line":61},[51,86711,53108],{"class":72},[51,86713,52777],{"class":52264},[51,86715,52271],{"class":72},[51,86717,86718],{"class":53,"line":93},[51,86719,86340],{"class":72},[51,86721,86722],{"class":53,"line":99},[51,86723,3267],{"class":72},[51,86725,86726],{"class":53,"line":120},[51,86727,86349],{"class":72},[51,86729,86730],{"class":53,"line":129},[51,86731,86732],{"class":72},"    console.log(ldh)\n",[51,86734,86735,86737,86739],{"class":53,"line":206},[51,86736,53381],{"class":72},[51,86738,52777],{"class":52264},[51,86740,52271],{"class":72},[51,86742,86743,86745,86747],{"class":53,"line":212},[51,86744,52749],{"class":72},[51,86746,52764],{"class":52264},[51,86748,52271],{"class":72},[40,86750,86751],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[40,86753,86754],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[40,86756,86757],{},[2564,86758],{"alt":35,"src":86759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[40,86761,86762],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[40,86764,86765],{},"对象原型指向原型对象",[40,86767,86768],{},[2564,86769],{"alt":35,"src":86770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[40,86772,86773],{},[2564,86774],{"alt":35,"src":86775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[40,86777,86778],{},[2564,86779],{"alt":35,"src":86780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[1233,86782,86784],{"id":86783},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[40,86786,86787],{},[2564,86788],{"alt":35,"src":86789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[19,86791,86792,86795,86798,86801],{},[22,86793,86794],{},"构造函数通过new的形式实例化得到实例对象",[22,86796,86797],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[22,86799,86800],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[22,86802,86803],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[40,86805,86806],{},[2564,86807],{"alt":35,"src":86808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[40,86810,86811],{},"题目梳理：",[40,86813,86814],{},[2564,86815],{"alt":35,"src":86816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[1233,86818,86820],{"id":86819},"_4136-原型继承","4.13.6 原型继承",[40,86822,86823],{},[2564,86824],{"alt":35,"src":86825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[40,86827,86828],{},[2564,86829],{"alt":35,"src":86830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[40,86832,86833],{},[2564,86834],{"alt":35,"src":86835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[40,86837,86838],{},[2564,86839],{"alt":35,"src":86840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[40,86842,86843],{},[2564,86844],{"alt":35,"src":86845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[40,86847,86848],{},[2564,86849],{"alt":35,"src":86850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[40,86852,86853],{},[2564,86854],{"alt":35,"src":86855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[40,86857,86858],{},[2564,86859],{"alt":35,"src":86860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[40,86862,86863],{},"回顾：构造函数每次new得到对象都是不同的",[1233,86865,86867],{"id":86866},"_4137-原型链","4.13.7 原型链",[40,86869,86870],{},[2564,86871],{"alt":35,"src":86872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[40,86874,86875],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[40,86877,86878],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[40,86880,86881],{},"大哥是Object",[40,86883,86884],{},[2564,86885],{"alt":35,"src":86886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[40,86888,86889],{},[2564,86890],{"alt":35,"src":86891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[40,86893,86894],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[40,86896,86897],{},"万物皆对象",[1233,86899,86901],{"id":86900},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[40,86903,86904],{},"模态框",[40,86906,86907],{},"以后遇见这个效果直接使用这个就行",[40,86909,86910],{},[2564,86911],{"alt":35,"src":86912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[40,86914,86915],{},[2564,86916],{"alt":35,"src":86917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[40,86919,86920],{},[2564,86921],{"alt":35,"src":86922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[40,86924,86925],{},[2564,86926],{"alt":35,"src":86927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[40,86929,86930],{},"补充知识点：",[19,86932,86933],{},[22,86934,86935],{},"append()",[40,86937,86938],{},[2564,86939],{"alt":35,"src":86940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[29,86942,86944],{"className":51597,"code":86943,"language":51599,"meta":35,"style":35},"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",[37,86945,86946,86951,86956,86961,86965,86969,86973,86978,86983,86988,86992],{"__ignoreMap":35},[51,86947,86948],{"class":53,"line":54},[51,86949,86950],{"class":72},"append(param1)\n",[51,86952,86953],{"class":53,"line":61},[51,86954,86955],{"class":72},"append(param1, param2)\n",[51,86957,86958],{"class":53,"line":93},[51,86959,86960],{"class":72},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[51,86962,86963],{"class":53,"line":99},[51,86964,3480],{"emptyLinePlaceholder":1192},[51,86966,86967],{"class":53,"line":120},[51,86968,3480],{"emptyLinePlaceholder":1192},[51,86970,86971],{"class":53,"line":129},[51,86972,3480],{"emptyLinePlaceholder":1192},[51,86974,86975],{"class":53,"line":206},[51,86976,86977],{"class":72},"let div = document.createElement(\"div\");\n",[51,86979,86980],{"class":53,"line":212},[51,86981,86982],{"class":72},"let p = document.createElement(\"p\");\n",[51,86984,86985],{"class":53,"line":227},[51,86986,86987],{"class":72},"div.append(p);\n",[51,86989,86990],{"class":53,"line":370},[51,86991,3480],{"emptyLinePlaceholder":1192},[51,86993,86994,86997,86999],{"class":53,"line":387},[51,86995,86996],{"class":72},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[51,86998,40],{"class":52264},[51,87000,87001],{"class":72},"> ]\n",[19,87003,87004],{"start":61},[22,87005,87006],{},"remove()",[40,87008,87009],{},"自己删自己",[40,87011,87012],{},[2564,87013],{"alt":35,"src":87014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[29,87016,87018],{"className":51597,"code":87017,"language":51599,"meta":35,"style":35},"\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",[37,87019,87020,87030,87044,87048,87056,87070,87090,87102,87110,87117,87129,87142,87177,87189,87200,87212,87224,87236,87263,87273,87277,87281,87290,87302,87316,87326,87338,87342,87346,87356,87367,87377,87387,87400,87413,87423,87427,87431,87440,87450,87462,87466,87470,87479,87489,87499,87511,87515,87519,87529,87545,87556,87566,87576,87588,87600,87612,87616,87620,87633,87644,87648,87656,87664,87668,87676,87696,87716,87724,87729,87755,87760,87765,87784,87789,87801,87806,87817,87827,87837,87842,87847,87851,87856,87861,87866,87886,87891,87911,87916,87930,87935,87940,87945,87961,87965,87970,87999,88004,88009,88014,88025,88029,88033,88037,88042,88067,88072,88097,88102,88111,88115,88120,88145,88149,88174,88178,88187,88191,88196,88214,88224,88228,88236,88244,88248],{"__ignoreMap":35},[51,87021,87022,87024,87026,87028],{"class":53,"line":54},[51,87023,52261],{"class":72},[51,87025,52265],{"class":52264},[51,87027,52268],{"class":68},[51,87029,52271],{"class":72},[51,87031,87032,87034,87036,87038,87040,87042],{"class":53,"line":61},[51,87033,2154],{"class":72},[51,87035,51599],{"class":52264},[51,87037,52280],{"class":68},[51,87039,108],{"class":72},[51,87041,52285],{"class":282},[51,87043,52271],{"class":72},[51,87045,87046],{"class":53,"line":93},[51,87047,3480],{"emptyLinePlaceholder":1192},[51,87049,87050,87052,87054],{"class":53,"line":99},[51,87051,2154],{"class":72},[51,87053,52298],{"class":52264},[51,87055,52271],{"class":72},[51,87057,87058,87060,87062,87064,87066,87068],{"class":53,"line":120},[51,87059,53108],{"class":72},[51,87061,52308],{"class":52264},[51,87063,52311],{"class":68},[51,87065,108],{"class":72},[51,87067,52316],{"class":282},[51,87069,52271],{"class":72},[51,87071,87072,87074,87076,87078,87080,87082,87084,87086,87088],{"class":53,"line":129},[51,87073,53108],{"class":72},[51,87075,52308],{"class":52264},[51,87077,15882],{"class":68},[51,87079,108],{"class":72},[51,87081,52355],{"class":282},[51,87083,52335],{"class":68},[51,87085,108],{"class":72},[51,87087,52362],{"class":282},[51,87089,52271],{"class":72},[51,87091,87092,87094,87096,87098,87100],{"class":53,"line":206},[51,87093,53108],{"class":72},[51,87095,52371],{"class":52264},[51,87097,52374],{"class":72},[51,87099,52371],{"class":52264},[51,87101,52271],{"class":72},[51,87103,87104,87106,87108],{"class":53,"line":212},[51,87105,53108],{"class":72},[51,87107,1179],{"class":52264},[51,87109,52271],{"class":72},[51,87111,87112,87115],{"class":53,"line":227},[51,87113,87114],{"class":68},"    .modal",[51,87116,16534],{"class":72},[51,87118,87119,87121,87123,87125,87127],{"class":53,"line":370},[51,87120,55735],{"class":175},[51,87122,52401],{"class":72},[51,87124,5050],{"class":175},[51,87126,52456],{"class":64},[51,87128,179],{"class":72},[51,87130,87131,87134,87136,87138,87140],{"class":53,"line":387},[51,87132,87133],{"class":175},"      min-height",[51,87135,52401],{"class":72},[51,87137,612],{"class":175},[51,87139,52456],{"class":64},[51,87141,179],{"class":72},[51,87143,87144,87146,87148,87150,87152,87154,87156,87158,87160,87162,87164,87166,87168,87170,87172,87175],{"class":53,"line":404},[51,87145,79714],{"class":175},[51,87147,52401],{"class":72},[51,87149,176],{"class":175},[51,87151,5169],{"class":175},[51,87153,3118],{"class":175},[51,87155,52456],{"class":64},[51,87157,79731],{"class":175},[51,87159,73],{"class":72},[51,87161,176],{"class":175},[51,87163,13397],{"class":72},[51,87165,176],{"class":175},[51,87167,13397],{"class":72},[51,87169,176],{"class":175},[51,87171,13397],{"class":72},[51,87173,87174],{"class":175},"0.1",[51,87176,615],{"class":72},[51,87178,87179,87181,87183,87185,87187],{"class":53,"line":415},[51,87180,56098],{"class":175},[51,87182,52401],{"class":72},[51,87184,1543],{"class":175},[51,87186,52456],{"class":64},[51,87188,179],{"class":72},[51,87190,87191,87193,87195,87198],{"class":53,"line":420},[51,87192,55723],{"class":175},[51,87194,52401],{"class":72},[51,87196,87197],{"class":175},"fixed",[51,87199,179],{"class":72},[51,87201,87202,87205,87207,87210],{"class":53,"line":429},[51,87203,87204],{"class":175},"      z-index",[51,87206,52401],{"class":72},[51,87208,87209],{"class":175},"999",[51,87211,179],{"class":72},[51,87213,87214,87216,87218,87220,87222],{"class":53,"line":434},[51,87215,55802],{"class":175},[51,87217,52401],{"class":72},[51,87219,1902],{"class":175},[51,87221,1577],{"class":64},[51,87223,179],{"class":72},[51,87225,87226,87228,87230,87232,87234],{"class":53,"line":448},[51,87227,55911],{"class":175},[51,87229,52401],{"class":72},[51,87231,1902],{"class":175},[51,87233,1577],{"class":64},[51,87235,179],{"class":72},[51,87237,87238,87240,87242,87244,87246,87249,87251,87253,87255,87257,87259,87261],{"class":53,"line":462},[51,87239,79755],{"class":175},[51,87241,52401],{"class":72},[51,87243,79760],{"class":175},[51,87245,73],{"class":72},[51,87247,87248],{"class":175},"-50",[51,87250,1577],{"class":64},[51,87252,13397],{"class":72},[51,87254,87248],{"class":175},[51,87256,1577],{"class":64},[51,87258,13397],{"class":72},[51,87260,176],{"class":175},[51,87262,615],{"class":72},[51,87264,87265,87267,87269,87271],{"class":53,"line":470},[51,87266,55848],{"class":175},[51,87268,52401],{"class":72},[51,87270,61806],{"class":175},[51,87272,179],{"class":72},[51,87274,87275],{"class":53,"line":2783},[51,87276,3267],{"class":72},[51,87278,87279],{"class":53,"line":2788},[51,87280,3480],{"emptyLinePlaceholder":1192},[51,87282,87283,87285,87288],{"class":53,"line":2817},[51,87284,87114],{"class":68},[51,87286,87287],{"class":68}," .header",[51,87289,16534],{"class":72},[51,87291,87292,87294,87296,87298,87300],{"class":53,"line":2822},[51,87293,58323],{"class":175},[51,87295,52401],{"class":72},[51,87297,1649],{"class":175},[51,87299,52456],{"class":64},[51,87301,179],{"class":72},[51,87303,87304,87306,87308,87310,87312,87314],{"class":53,"line":2839},[51,87305,55659],{"class":175},[51,87307,52401],{"class":72},[51,87309,176],{"class":175},[51,87311,3118],{"class":175},[51,87313,52456],{"class":64},[51,87315,179],{"class":72},[51,87317,87318,87320,87322,87324],{"class":53,"line":2844},[51,87319,55723],{"class":175},[51,87321,52401],{"class":72},[51,87323,55728],{"class":175},[51,87325,179],{"class":72},[51,87327,87328,87330,87332,87334,87336],{"class":53,"line":2849},[51,87329,55886],{"class":175},[51,87331,52401],{"class":72},[51,87333,457],{"class":175},[51,87335,52456],{"class":64},[51,87337,179],{"class":72},[51,87339,87340],{"class":53,"line":2854},[51,87341,3267],{"class":72},[51,87343,87344],{"class":53,"line":2868},[51,87345,3480],{"emptyLinePlaceholder":1192},[51,87347,87348,87350,87352,87354],{"class":53,"line":2873},[51,87349,87114],{"class":68},[51,87351,87287],{"class":68},[51,87353,4109],{"class":52264},[51,87355,16534],{"class":72},[51,87357,87358,87361,87363,87365],{"class":53,"line":3657},[51,87359,87360],{"class":175},"      font-style",[51,87362,52401],{"class":72},[51,87364,64805],{"class":175},[51,87366,179],{"class":72},[51,87368,87369,87371,87373,87375],{"class":53,"line":3671},[51,87370,58380],{"class":175},[51,87372,52401],{"class":72},[51,87374,63034],{"class":175},[51,87376,179],{"class":72},[51,87378,87379,87381,87383,87385],{"class":53,"line":3679},[51,87380,55723],{"class":175},[51,87382,52401],{"class":72},[51,87384,55795],{"class":175},[51,87386,179],{"class":72},[51,87388,87389,87392,87394,87396,87398],{"class":53,"line":3684},[51,87390,87391],{"class":175},"      right",[51,87393,52401],{"class":72},[51,87395,1821],{"class":175},[51,87397,52456],{"class":64},[51,87399,179],{"class":72},[51,87401,87402,87404,87406,87409,87411],{"class":53,"line":3690},[51,87403,55911],{"class":175},[51,87405,52401],{"class":72},[51,87407,87408],{"class":175},"-2",[51,87410,52456],{"class":64},[51,87412,179],{"class":72},[51,87414,87415,87417,87419,87421],{"class":53,"line":3696},[51,87416,62989],{"class":175},[51,87418,52401],{"class":72},[51,87420,62994],{"class":175},[51,87422,179],{"class":72},[51,87424,87425],{"class":53,"line":3701},[51,87426,3267],{"class":72},[51,87428,87429],{"class":53,"line":8910},[51,87430,3480],{"emptyLinePlaceholder":1192},[51,87432,87433,87435,87438],{"class":53,"line":8934},[51,87434,87114],{"class":68},[51,87436,87437],{"class":68}," .body",[51,87439,16534],{"class":72},[51,87441,87442,87444,87446,87448],{"class":53,"line":8939},[51,87443,58250],{"class":175},[51,87445,52401],{"class":72},[51,87447,52556],{"class":175},[51,87449,179],{"class":72},[51,87451,87452,87454,87456,87458,87460],{"class":53,"line":8945},[51,87453,55659],{"class":175},[51,87455,52401],{"class":72},[51,87457,443],{"class":175},[51,87459,52456],{"class":64},[51,87461,179],{"class":72},[51,87463,87464],{"class":53,"line":8972},[51,87465,3267],{"class":72},[51,87467,87468],{"class":53,"line":8977},[51,87469,3480],{"emptyLinePlaceholder":1192},[51,87471,87472,87474,87477],{"class":53,"line":8983},[51,87473,87114],{"class":68},[51,87475,87476],{"class":68}," .footer",[51,87478,16534],{"class":72},[51,87480,87481,87483,87485,87487],{"class":53,"line":8995},[51,87482,55973],{"class":175},[51,87484,52401],{"class":72},[51,87486,52441],{"class":175},[51,87488,179],{"class":72},[51,87490,87491,87493,87495,87497],{"class":53,"line":9007},[51,87492,55984],{"class":175},[51,87494,52401],{"class":72},[51,87496,52544],{"class":175},[51,87498,179],{"class":72},[51,87500,87501,87503,87505,87507,87509],{"class":53,"line":9019},[51,87502,55659],{"class":175},[51,87504,52401],{"class":72},[51,87506,443],{"class":175},[51,87508,52456],{"class":64},[51,87510,179],{"class":72},[51,87512,87513],{"class":53,"line":10678},[51,87514,3267],{"class":72},[51,87516,87517],{"class":53,"line":10703},[51,87518,3480],{"emptyLinePlaceholder":1192},[51,87520,87521,87523,87525,87527],{"class":53,"line":10726},[51,87522,87114],{"class":68},[51,87524,87476],{"class":68},[51,87526,170],{"class":52264},[51,87528,16534],{"class":72},[51,87530,87531,87533,87535,87537,87539,87541,87543],{"class":53,"line":10750},[51,87532,55659],{"class":175},[51,87534,52401],{"class":72},[51,87536,1328],{"class":175},[51,87538,52456],{"class":64},[51,87540,3163],{"class":175},[51,87542,52456],{"class":64},[51,87544,179],{"class":72},[51,87546,87547,87549,87551,87554],{"class":53,"line":10755},[51,87548,62685],{"class":175},[51,87550,52401],{"class":72},[51,87552,87553],{"class":175},"#ccc",[51,87555,179],{"class":72},[51,87557,87558,87560,87562,87564],{"class":53,"line":10760},[51,87559,64934],{"class":175},[51,87561,52401],{"class":72},[51,87563,55701],{"class":175},[51,87565,179],{"class":72},[51,87567,87568,87570,87572,87574],{"class":53,"line":10765},[51,87569,58380],{"class":175},[51,87571,52401],{"class":72},[51,87573,61806],{"class":175},[51,87575,179],{"class":72},[51,87577,87578,87580,87582,87584,87586],{"class":53,"line":10774},[51,87579,56098],{"class":175},[51,87581,52401],{"class":72},[51,87583,1334],{"class":175},[51,87585,52456],{"class":64},[51,87587,179],{"class":72},[51,87589,87590,87592,87594,87596,87598],{"class":53,"line":10779},[51,87591,62714],{"class":175},[51,87593,52401],{"class":72},[51,87595,443],{"class":175},[51,87597,52456],{"class":64},[51,87599,179],{"class":72},[51,87601,87602,87604,87606,87608,87610],{"class":53,"line":10785},[51,87603,55886],{"class":175},[51,87605,52401],{"class":72},[51,87607,1795],{"class":175},[51,87609,52456],{"class":64},[51,87611,179],{"class":72},[51,87613,87614],{"class":53,"line":10806},[51,87615,3267],{"class":72},[51,87617,87618],{"class":53,"line":10812},[51,87619,3480],{"emptyLinePlaceholder":1192},[51,87621,87622,87624,87626,87628,87631],{"class":53,"line":10826},[51,87623,87114],{"class":68},[51,87625,87476],{"class":68},[51,87627,170],{"class":52264},[51,87629,87630],{"class":68},".submit",[51,87632,16534],{"class":72},[51,87634,87635,87637,87639,87642],{"class":53,"line":10832},[51,87636,55848],{"class":175},[51,87638,52401],{"class":72},[51,87640,87641],{"class":175},"#369",[51,87643,179],{"class":72},[51,87645,87646],{"class":53,"line":10859},[51,87647,3267],{"class":72},[51,87649,87650,87652,87654],{"class":53,"line":10868},[51,87651,53381],{"class":72},[51,87653,1179],{"class":52264},[51,87655,52271],{"class":72},[51,87657,87658,87660,87662],{"class":53,"line":10874},[51,87659,52749],{"class":72},[51,87661,52298],{"class":52264},[51,87663,52271],{"class":72},[51,87665,87666],{"class":53,"line":10882},[51,87667,3480],{"emptyLinePlaceholder":1192},[51,87669,87670,87672,87674],{"class":53,"line":10887},[51,87671,2154],{"class":72},[51,87673,52764],{"class":52264},[51,87675,52271],{"class":72},[51,87677,87678,87680,87682,87684,87686,87689,87692,87694],{"class":53,"line":17566},[51,87679,53108],{"class":72},[51,87681,54851],{"class":52264},[51,87683,15921],{"class":68},[51,87685,108],{"class":72},[51,87687,87688],{"class":282},"\"delete\"",[51,87690,87691],{"class":72},">删除\u003C\u002F",[51,87693,54851],{"class":52264},[51,87695,52271],{"class":72},[51,87697,87698,87700,87702,87704,87706,87709,87712,87714],{"class":53,"line":17572},[51,87699,53108],{"class":72},[51,87701,54851],{"class":52264},[51,87703,15921],{"class":68},[51,87705,108],{"class":72},[51,87707,87708],{"class":282},"\"login\"",[51,87710,87711],{"class":72},">登录\u003C\u002F",[51,87713,54851],{"class":52264},[51,87715,52271],{"class":72},[51,87717,87718,87720,87722],{"class":53,"line":17595},[51,87719,53108],{"class":72},[51,87721,52777],{"class":52264},[51,87723,52271],{"class":72},[51,87725,87726],{"class":53,"line":17601},[51,87727,87728],{"class":57},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[51,87730,87731,87733,87736,87738,87740,87742,87744,87746,87749,87751,87753],{"class":53,"line":17624},[51,87732,71048],{"class":64},[51,87734,87735],{"class":68}," Modal",[51,87737,73],{"class":72},[51,87739,52371],{"class":78},[51,87741,14526],{"class":64},[51,87743,70894],{"class":282},[51,87745,13397],{"class":72},[51,87747,87748],{"class":78},"message",[51,87750,14526],{"class":64},[51,87752,70894],{"class":282},[51,87754,13404],{"class":72},[51,87756,87757],{"class":53,"line":17638},[51,87758,87759],{"class":57},"      \u002F\u002F 创建Model 模态框盒子\n",[51,87761,87762],{"class":53,"line":17658},[51,87763,87764],{"class":57},"      \u002F\u002F 1.1 创建div标签\n",[51,87766,87767,87769,87772,87774,87776,87778,87780,87782],{"class":53,"line":17664},[51,87768,71015],{"class":175},[51,87770,87771],{"class":72},".modalBox ",[51,87773,108],{"class":64},[51,87775,55360],{"class":72},[51,87777,71115],{"class":68},[51,87779,73],{"class":72},[51,87781,82895],{"class":282},[51,87783,90],{"class":72},[51,87785,87786],{"class":53,"line":17675},[51,87787,87788],{"class":57},"      \u002F\u002F 1.2 给div 添加类名为model\n",[51,87790,87791,87793,87796,87798],{"class":53,"line":17698},[51,87792,71015],{"class":175},[51,87794,87795],{"class":72},".modalBox.className ",[51,87797,108],{"class":64},[51,87799,87800],{"class":282}," 'modal'\n",[51,87802,87803],{"class":53,"line":17720},[51,87804,87805],{"class":57},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[51,87807,87808,87810,87813,87815],{"class":53,"line":17725},[51,87809,71015],{"class":175},[51,87811,87812],{"class":72},".modalBox.innerHTML ",[51,87814,108],{"class":64},[51,87816,71132],{"class":282},[51,87818,87819,87822,87824],{"class":53,"line":17731},[51,87820,87821],{"class":282},"        \u003Cdiv class=\"header\">${",[51,87823,52371],{"class":72},[51,87825,87826],{"class":282},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[51,87828,87829,87832,87834],{"class":53,"line":17745},[51,87830,87831],{"class":282},"        \u003Cdiv class=\"body\">${",[51,87833,87748],{"class":72},[51,87835,87836],{"class":282},"}\u003C\u002Fdiv>\n",[51,87838,87839],{"class":53,"line":17758},[51,87840,87841],{"class":282},"      `\n",[51,87843,87844],{"class":53,"line":17763},[51,87845,87846],{"class":57},"      \u002F\u002F console.log(this.modalBox)\n",[51,87848,87849],{"class":53,"line":17777},[51,87850,3267],{"class":72},[51,87852,87853],{"class":53,"line":17782},[51,87854,87855],{"class":57},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[51,87857,87858],{"class":53,"line":17788},[51,87859,87860],{"class":57},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[51,87862,87863],{"class":53,"line":17793},[51,87864,87865],{"class":57},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[51,87867,87868,87871,87873,87875,87877,87880,87882,87884],{"class":53,"line":17807},[51,87869,87870],{"class":175},"    Modal",[51,87872,1804],{"class":72},[51,87874,86543],{"class":175},[51,87876,1804],{"class":72},[51,87878,87879],{"class":68},"open",[51,87881,14526],{"class":64},[51,87883,59882],{"class":64},[51,87885,55416],{"class":72},[51,87887,87888],{"class":53,"line":17812},[51,87889,87890],{"class":57},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[51,87892,87893,87895,87898,87900,87902,87904,87906,87909],{"class":53,"line":17817},[51,87894,59192],{"class":64},[51,87896,87897],{"class":175}," box",[51,87899,14526],{"class":64},[51,87901,55360],{"class":72},[51,87903,55363],{"class":68},[51,87905,73],{"class":72},[51,87907,87908],{"class":282},"'.modal'",[51,87910,90],{"class":72},[51,87912,87913],{"class":53,"line":17831},[51,87914,87915],{"class":57},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[51,87917,87918,87921,87923,87926,87928],{"class":53,"line":17843},[51,87919,87920],{"class":72},"      box ",[51,87922,2805],{"class":64},[51,87924,87925],{"class":72}," box.",[51,87927,57970],{"class":68},[51,87929,154],{"class":72},[51,87931,87932],{"class":53,"line":17848},[51,87933,87934],{"class":57},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[51,87936,87937],{"class":53,"line":17861},[51,87938,87939],{"class":57},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[51,87941,87942],{"class":53,"line":17866},[51,87943,87944],{"class":57},"      \u002F\u002F append可以增加对象\n",[51,87946,87947,87950,87953,87955,87958],{"class":53,"line":17871},[51,87948,87949],{"class":72},"      document.body.",[51,87951,87952],{"class":68},"append",[51,87954,73],{"class":72},[51,87956,87957],{"class":175},"this",[51,87959,87960],{"class":72},".modalBox)\n",[51,87962,87963],{"class":53,"line":17876},[51,87964,3480],{"emptyLinePlaceholder":1192},[51,87966,87967],{"class":53,"line":17889},[51,87968,87969],{"class":57},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[51,87971,87972,87974,87977,87979,87981,87984,87986,87988,87990,87992,87995,87997],{"class":53,"line":17894},[51,87973,71015],{"class":175},[51,87975,87976],{"class":72},".modalBox.",[51,87978,55363],{"class":68},[51,87980,73],{"class":72},[51,87982,87983],{"class":282},"'i'",[51,87985,31790],{"class":72},[51,87987,58777],{"class":68},[51,87989,73],{"class":72},[51,87991,58782],{"class":282},[51,87993,87994],{"class":72},", () ",[51,87996,85686],{"class":64},[51,87998,16534],{"class":72},[51,88000,88001],{"class":53,"line":33597},[51,88002,88003],{"class":57},"        \u002F\u002F 这个地方需要用到箭头函数\n",[51,88005,88006],{"class":53,"line":33603},[51,88007,88008],{"class":57},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[51,88010,88011],{"class":53,"line":33609},[51,88012,88013],{"class":57},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[51,88015,88016,88018,88020,88023],{"class":53,"line":33615},[51,88017,65690],{"class":175},[51,88019,1804],{"class":72},[51,88021,88022],{"class":68},"close",[51,88024,154],{"class":72},[51,88026,88027],{"class":53,"line":33621},[51,88028,65779],{"class":72},[51,88030,88031],{"class":53,"line":33632},[51,88032,3267],{"class":72},[51,88034,88035],{"class":53,"line":33638},[51,88036,3480],{"emptyLinePlaceholder":1192},[51,88038,88039],{"class":53,"line":33658},[51,88040,88041],{"class":57},"    \u002F\u002F 测试一下 点击 删除按钮\n",[51,88043,88044,88046,88048,88050,88053,88055,88057,88059,88061,88063,88065],{"class":53,"line":33664},[51,88045,53371],{"class":72},[51,88047,55363],{"class":68},[51,88049,73],{"class":72},[51,88051,88052],{"class":282},"'#delete'",[51,88054,31790],{"class":72},[51,88056,58777],{"class":68},[51,88058,73],{"class":72},[51,88060,58782],{"class":282},[51,88062,87994],{"class":72},[51,88064,85686],{"class":64},[51,88066,16534],{"class":72},[51,88068,88069],{"class":53,"line":33675},[51,88070,88071],{"class":57},"      \u002F\u002F 先调用Model构造函数\n",[51,88073,88074,88076,88079,88081,88083,88085,88087,88090,88092,88095],{"class":53,"line":33681},[51,88075,59192],{"class":64},[51,88077,88078],{"class":175}," del",[51,88080,14526],{"class":64},[51,88082,12540],{"class":64},[51,88084,87735],{"class":68},[51,88086,73],{"class":72},[51,88088,88089],{"class":282},"'温馨的提示'",[51,88091,13397],{"class":72},[51,88093,88094],{"class":282},"'您没有删除权限操作'",[51,88096,90],{"class":72},[51,88098,88099],{"class":53,"line":33687},[51,88100,88101],{"class":57},"      \u002F\u002F 实例对象调用open方法\n",[51,88103,88104,88107,88109],{"class":53,"line":33693},[51,88105,88106],{"class":72},"      del.",[51,88108,87879],{"class":68},[51,88110,154],{"class":72},[51,88112,88113],{"class":53,"line":33699},[51,88114,34425],{"class":72},[51,88116,88117],{"class":53,"line":33705},[51,88118,88119],{"class":57},"    \u002F\u002F 测试一下 点击 登录按钮\n",[51,88121,88122,88124,88126,88128,88131,88133,88135,88137,88139,88141,88143],{"class":53,"line":33711},[51,88123,53371],{"class":72},[51,88125,55363],{"class":68},[51,88127,73],{"class":72},[51,88129,88130],{"class":282},"'#login'",[51,88132,31790],{"class":72},[51,88134,58777],{"class":68},[51,88136,73],{"class":72},[51,88138,58782],{"class":282},[51,88140,87994],{"class":72},[51,88142,85686],{"class":64},[51,88144,16534],{"class":72},[51,88146,88147],{"class":53,"line":33717},[51,88148,88071],{"class":57},[51,88150,88151,88153,88156,88158,88160,88162,88164,88167,88169,88172],{"class":53,"line":33737},[51,88152,59192],{"class":64},[51,88154,88155],{"class":175}," log",[51,88157,14526],{"class":64},[51,88159,12540],{"class":64},[51,88161,87735],{"class":68},[51,88163,73],{"class":72},[51,88165,88166],{"class":282},"'友情提示'",[51,88168,13397],{"class":72},[51,88170,88171],{"class":282},"'您还没有登录呢'",[51,88173,90],{"class":72},[51,88175,88176],{"class":53,"line":33743},[51,88177,88101],{"class":57},[51,88179,88180,88183,88185],{"class":53,"line":33759},[51,88181,88182],{"class":72},"      log.",[51,88184,87879],{"class":68},[51,88186,154],{"class":72},[51,88188,88189],{"class":53,"line":33765},[51,88190,34425],{"class":72},[51,88192,88193],{"class":53,"line":33779},[51,88194,88195],{"class":57},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[51,88197,88198,88200,88202,88204,88206,88208,88210,88212],{"class":53,"line":33785},[51,88199,87870],{"class":175},[51,88201,1804],{"class":72},[51,88203,86543],{"class":175},[51,88205,1804],{"class":72},[51,88207,88022],{"class":68},[51,88209,14526],{"class":64},[51,88211,59882],{"class":64},[51,88213,55416],{"class":72},[51,88215,88216,88218,88220,88222],{"class":53,"line":33800},[51,88217,71015],{"class":175},[51,88219,87976],{"class":72},[51,88221,57970],{"class":68},[51,88223,154],{"class":72},[51,88225,88226],{"class":53,"line":33806},[51,88227,3267],{"class":72},[51,88229,88230,88232,88234],{"class":53,"line":33815},[51,88231,53381],{"class":72},[51,88233,52777],{"class":52264},[51,88235,52271],{"class":72},[51,88237,88238,88240,88242],{"class":53,"line":33821},[51,88239,52749],{"class":72},[51,88241,52764],{"class":52264},[51,88243,52271],{"class":72},[51,88245,88246],{"class":53,"line":33830},[51,88247,3480],{"emptyLinePlaceholder":1192},[51,88249,88250,88252,88254],{"class":53,"line":33836},[51,88251,52749],{"class":72},[51,88253,51599],{"class":52264},[51,88255,52271],{"class":72},[40,88257,88258],{},[2564,88259],{"alt":35,"src":88260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88262,88264],{"id":88263},"_414-深浅拷贝","4.14 深浅拷贝",[1233,88266,88268],{"id":88267},"_4141-浅拷贝","4.14.1 浅拷贝",[40,88270,88271],{},[2564,88272],{"alt":35,"src":88273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[40,88275,88276],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[40,88278,88279],{},[2564,88280],{"alt":35,"src":88281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[40,88283,88284],{},[2564,88285],{"alt":35,"src":88286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[40,88288,88289],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[40,88291,88292],{},[2564,88293],{"alt":35,"src":88294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[40,88296,12294],{},[40,88298,88299],{},[2564,88300],{"alt":35,"src":88301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[1233,88303,88305],{"id":88304},"_4142-深拷贝","4.14.2 深拷贝",[40,88307,88308],{},"深拷贝：拷贝的是对象，不是地址",[40,88310,88311],{},"常用的三种方法：",[19,88313,88314,88317,88320],{},[22,88315,88316],{},"通过递归实现深拷贝",[22,88318,88319],{},"lodash\u002FcloneDeep",[22,88321,88322],{},"通过JSON.stringify()实现",[22960,88324,88326],{"id":88325},"_41421-递归函数","4.14.2.1 递归函数",[40,88328,88329],{},[2564,88330],{"alt":35,"src":88331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[19,88333,88334],{},[22,88335,88336],{},"死递归占溢出：",[29,88338,88340],{"className":54031,"code":88339,"language":54033,"meta":35,"style":35},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[37,88341,88342,88350,88358,88362,88367,88371,88376,88384],{"__ignoreMap":35},[51,88343,88344,88346,88348],{"class":53,"line":54},[51,88345,2154],{"class":72},[51,88347,52764],{"class":52264},[51,88349,52271],{"class":72},[51,88351,88352,88354,88356],{"class":53,"line":61},[51,88353,53108],{"class":72},[51,88355,52777],{"class":52264},[51,88357,52271],{"class":72},[51,88359,88360],{"class":53,"line":93},[51,88361,78107],{"class":72},[51,88363,88364],{"class":53,"line":99},[51,88365,88366],{"class":72},"      fn()\n",[51,88368,88369],{"class":53,"line":120},[51,88370,3267],{"class":72},[51,88372,88373],{"class":53,"line":129},[51,88374,88375],{"class":72},"    fn()\n",[51,88377,88378,88380,88382],{"class":53,"line":206},[51,88379,53381],{"class":72},[51,88381,52777],{"class":52264},[51,88383,52271],{"class":72},[51,88385,88386,88388,88390],{"class":53,"line":212},[51,88387,52749],{"class":72},[51,88389,52764],{"class":52264},[51,88391,52271],{"class":72},[19,88393,88394],{"start":61},[22,88395,88396],{},"递归函数要加判断条件：",[40,88398,88399],{},[2564,88400],{"alt":35,"src":88401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[19,88403,88404],{"start":93},[22,88405,88406],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[29,88408,88410],{"className":51597,"code":88409,"language":51599,"meta":35,"style":35},"\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",[37,88411,88412,88422,88436,88440,88448,88462,88482,88494,88502,88506,88514,88526,88534,88542,88567,88579,88583,88590,88598,88606,88610],{"__ignoreMap":35},[51,88413,88414,88416,88418,88420],{"class":53,"line":54},[51,88415,52261],{"class":72},[51,88417,52265],{"class":52264},[51,88419,52268],{"class":68},[51,88421,52271],{"class":72},[51,88423,88424,88426,88428,88430,88432,88434],{"class":53,"line":61},[51,88425,2154],{"class":72},[51,88427,51599],{"class":52264},[51,88429,52280],{"class":68},[51,88431,108],{"class":72},[51,88433,52285],{"class":282},[51,88435,52271],{"class":72},[51,88437,88438],{"class":53,"line":93},[51,88439,3480],{"emptyLinePlaceholder":1192},[51,88441,88442,88444,88446],{"class":53,"line":99},[51,88443,2154],{"class":72},[51,88445,52298],{"class":52264},[51,88447,52271],{"class":72},[51,88449,88450,88452,88454,88456,88458,88460],{"class":53,"line":120},[51,88451,53108],{"class":72},[51,88453,52308],{"class":52264},[51,88455,52311],{"class":68},[51,88457,108],{"class":72},[51,88459,52316],{"class":282},[51,88461,52271],{"class":72},[51,88463,88464,88466,88468,88470,88472,88474,88476,88478,88480],{"class":53,"line":129},[51,88465,53108],{"class":72},[51,88467,52308],{"class":52264},[51,88469,15882],{"class":68},[51,88471,108],{"class":72},[51,88473,52355],{"class":282},[51,88475,52335],{"class":68},[51,88477,108],{"class":72},[51,88479,52362],{"class":282},[51,88481,52271],{"class":72},[51,88483,88484,88486,88488,88490,88492],{"class":53,"line":206},[51,88485,53108],{"class":72},[51,88487,52371],{"class":52264},[51,88489,52374],{"class":72},[51,88491,52371],{"class":52264},[51,88493,52271],{"class":72},[51,88495,88496,88498,88500],{"class":53,"line":212},[51,88497,52749],{"class":72},[51,88499,52298],{"class":52264},[51,88501,52271],{"class":72},[51,88503,88504],{"class":53,"line":227},[51,88505,3480],{"emptyLinePlaceholder":1192},[51,88507,88508,88510,88512],{"class":53,"line":370},[51,88509,2154],{"class":72},[51,88511,52764],{"class":52264},[51,88513,52271],{"class":72},[51,88515,88516,88518,88520,88522,88524],{"class":53,"line":387},[51,88517,53108],{"class":72},[51,88519,52575],{"class":52264},[51,88521,56278],{"class":72},[51,88523,52575],{"class":52264},[51,88525,52271],{"class":72},[51,88527,88528,88530,88532],{"class":53,"line":404},[51,88529,53108],{"class":72},[51,88531,52777],{"class":52264},[51,88533,52271],{"class":72},[51,88535,88536,88538,88540],{"class":53,"line":415},[51,88537,71048],{"class":64},[51,88539,74737],{"class":68},[51,88541,11815],{"class":72},[51,88543,88544,88546,88548,88550,88552,88554,88556,88558,88560,88562,88565],{"class":53,"line":420},[51,88545,56735],{"class":72},[51,88547,55363],{"class":68},[51,88549,73],{"class":72},[51,88551,82895],{"class":282},[51,88553,75213],{"class":72},[51,88555,108],{"class":64},[51,88557,12540],{"class":64},[51,88559,74753],{"class":68},[51,88561,18223],{"class":72},[51,88563,88564],{"class":68},"toLocaleString",[51,88566,154],{"class":72},[51,88568,88569,88572,88575,88577],{"class":53,"line":429},[51,88570,88571],{"class":68},"      setTimeout",[51,88573,88574],{"class":72},"(getTime, ",[51,88576,7372],{"class":175},[51,88578,90],{"class":72},[51,88580,88581],{"class":53,"line":434},[51,88582,3267],{"class":72},[51,88584,88585,88588],{"class":53,"line":448},[51,88586,88587],{"class":68},"    getTime",[51,88589,154],{"class":72},[51,88591,88592,88594,88596],{"class":53,"line":462},[51,88593,53381],{"class":72},[51,88595,52777],{"class":52264},[51,88597,52271],{"class":72},[51,88599,88600,88602,88604],{"class":53,"line":470},[51,88601,52749],{"class":72},[51,88603,52764],{"class":52264},[51,88605,52271],{"class":72},[51,88607,88608],{"class":53,"line":2783},[51,88609,3480],{"emptyLinePlaceholder":1192},[51,88611,88612,88614,88616],{"class":53,"line":2788},[51,88613,52749],{"class":72},[51,88615,51599],{"class":52264},[51,88617,52271],{"class":72},[40,88619,88620],{},[2564,88621],{"alt":35,"src":88622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[19,88624,88625],{"start":99},[22,88626,88316],{},[40,88628,88629],{},[2564,88630],{"alt":35,"src":88631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[40,88633,88634],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[40,88636,40153],{},[40,88638,88639],{},"这个是简易版的递归函数深拷贝",[40,88641,88642],{},"一定要注意先数组再对象，因为万物皆可对象",[29,88644,88646],{"className":51597,"code":88645,"language":51599,"meta":35,"style":35},"\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",[37,88647,88648,88658,88672,88676,88684,88698,88718,88730,88738,88742,88750,88758,88768,88777,88785,88801,88805,88813,88817,88821,88833,88838,88857,88873,88878,88883,88888,88903,88908,88913,88922,88930,88947,88955,88961,88969,88974,88979,88988,88992,88996,89000,89011,89020,89030,89044,89054,89062,89070,89078,89082],{"__ignoreMap":35},[51,88649,88650,88652,88654,88656],{"class":53,"line":54},[51,88651,52261],{"class":72},[51,88653,52265],{"class":52264},[51,88655,52268],{"class":68},[51,88657,52271],{"class":72},[51,88659,88660,88662,88664,88666,88668,88670],{"class":53,"line":61},[51,88661,2154],{"class":72},[51,88663,51599],{"class":52264},[51,88665,52280],{"class":68},[51,88667,108],{"class":72},[51,88669,52285],{"class":282},[51,88671,52271],{"class":72},[51,88673,88674],{"class":53,"line":93},[51,88675,3480],{"emptyLinePlaceholder":1192},[51,88677,88678,88680,88682],{"class":53,"line":99},[51,88679,2154],{"class":72},[51,88681,52298],{"class":52264},[51,88683,52271],{"class":72},[51,88685,88686,88688,88690,88692,88694,88696],{"class":53,"line":120},[51,88687,53108],{"class":72},[51,88689,52308],{"class":52264},[51,88691,52311],{"class":68},[51,88693,108],{"class":72},[51,88695,52316],{"class":282},[51,88697,52271],{"class":72},[51,88699,88700,88702,88704,88706,88708,88710,88712,88714,88716],{"class":53,"line":129},[51,88701,53108],{"class":72},[51,88703,52308],{"class":52264},[51,88705,15882],{"class":68},[51,88707,108],{"class":72},[51,88709,52355],{"class":282},[51,88711,52335],{"class":68},[51,88713,108],{"class":72},[51,88715,52362],{"class":282},[51,88717,52271],{"class":72},[51,88719,88720,88722,88724,88726,88728],{"class":53,"line":206},[51,88721,53108],{"class":72},[51,88723,52371],{"class":52264},[51,88725,52374],{"class":72},[51,88727,52371],{"class":52264},[51,88729,52271],{"class":72},[51,88731,88732,88734,88736],{"class":53,"line":212},[51,88733,52749],{"class":72},[51,88735,52298],{"class":52264},[51,88737,52271],{"class":72},[51,88739,88740],{"class":53,"line":227},[51,88741,3480],{"emptyLinePlaceholder":1192},[51,88743,88744,88746,88748],{"class":53,"line":370},[51,88745,2154],{"class":72},[51,88747,52764],{"class":52264},[51,88749,52271],{"class":72},[51,88751,88752,88754,88756],{"class":53,"line":387},[51,88753,53108],{"class":72},[51,88755,52777],{"class":52264},[51,88757,52271],{"class":72},[51,88759,88760,88762,88764,88766],{"class":53,"line":404},[51,88761,12183],{"class":64},[51,88763,70935],{"class":175},[51,88765,14526],{"class":64},[51,88767,16534],{"class":72},[51,88769,88770,88772,88775],{"class":53,"line":415},[51,88771,72580],{"class":72},[51,88773,88774],{"class":282},"'pink'",[51,88776,32430],{"class":72},[51,88778,88779,88781,88783],{"class":53,"line":420},[51,88780,72590],{"class":72},[51,88782,1896],{"class":175},[51,88784,32430],{"class":72},[51,88786,88787,88790,88793,88795,88798],{"class":53,"line":429},[51,88788,88789],{"class":72},"      hobby: [",[51,88791,88792],{"class":282},"'乒乓球'",[51,88794,13397],{"class":72},[51,88796,88797],{"class":282},"'足球'",[51,88799,88800],{"class":72},"],\n",[51,88802,88803],{"class":53,"line":434},[51,88804,78836],{"class":72},[51,88806,88807,88810],{"class":53,"line":448},[51,88808,88809],{"class":72},"        baby: ",[51,88811,88812],{"class":282},"'小pink'\n",[51,88814,88815],{"class":53,"line":462},[51,88816,53362],{"class":72},[51,88818,88819],{"class":53,"line":470},[51,88820,3267],{"class":72},[51,88822,88823,88825,88828,88830],{"class":53,"line":2783},[51,88824,12183],{"class":64},[51,88826,88827],{"class":175}," o",[51,88829,14526],{"class":64},[51,88831,88832],{"class":72}," {}\n",[51,88834,88835],{"class":53,"line":2788},[51,88836,88837],{"class":57},"    \u002F\u002F 拷贝函数\n",[51,88839,88840,88842,88845,88847,88850,88852,88855],{"class":53,"line":2817},[51,88841,71048],{"class":64},[51,88843,88844],{"class":68}," deepCopy",[51,88846,73],{"class":72},[51,88848,88849],{"class":78},"newObj",[51,88851,13397],{"class":72},[51,88853,88854],{"class":78},"oldObj",[51,88856,13404],{"class":72},[51,88858,88859,88861,88863,88865,88868,88870],{"class":53,"line":2822},[51,88860,53248],{"class":64},[51,88862,2750],{"class":72},[51,88864,52811],{"class":64},[51,88866,88867],{"class":72}," k ",[51,88869,27007],{"class":64},[51,88871,88872],{"class":72}," oldObj) {\n",[51,88874,88875],{"class":53,"line":2839},[51,88876,88877],{"class":57},"        \u002F\u002F 处理数组的问题\n",[51,88879,88880],{"class":53,"line":2844},[51,88881,88882],{"class":57},"        \u002F\u002F 判断是否属于数组\n",[51,88884,88885],{"class":53,"line":2849},[51,88886,88887],{"class":57},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[51,88889,88890,88892,88895,88898,88901],{"class":53,"line":2854},[51,88891,3577],{"class":64},[51,88893,88894],{"class":72}," (oldObj[k] ",[51,88896,88897],{"class":64},"instanceof",[51,88899,88900],{"class":68}," Array",[51,88902,13404],{"class":72},[51,88904,88905],{"class":53,"line":2868},[51,88906,88907],{"class":57},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[51,88909,88910],{"class":53,"line":2873},[51,88911,88912],{"class":57},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[51,88914,88915,88918,88920],{"class":53,"line":3657},[51,88916,88917],{"class":72},"          newObj[k] ",[51,88919,108],{"class":64},[51,88921,52802],{"class":72},[51,88923,88924,88927],{"class":53,"line":3671},[51,88925,88926],{"class":68},"          deepCopy",[51,88928,88929],{"class":72},"(newObj[k], oldObj[k])\n",[51,88931,88932,88934,88936,88938,88940,88942,88945],{"class":53,"line":3679},[51,88933,81044],{"class":72},[51,88935,2791],{"class":64},[51,88937,2794],{"class":64},[51,88939,88894],{"class":72},[51,88941,88897],{"class":64},[51,88943,88944],{"class":68}," Object",[51,88946,13404],{"class":72},[51,88948,88949,88951,88953],{"class":53,"line":3684},[51,88950,88917],{"class":72},[51,88952,108],{"class":64},[51,88954,88832],{"class":72},[51,88956,88957,88959],{"class":53,"line":3690},[51,88958,88926],{"class":68},[51,88960,88929],{"class":72},[51,88962,88963,88965,88967],{"class":53,"line":3696},[51,88964,81044],{"class":72},[51,88966,2791],{"class":64},[51,88968,16534],{"class":72},[51,88970,88971],{"class":53,"line":3701},[51,88972,88973],{"class":57},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[51,88975,88976],{"class":53,"line":8910},[51,88977,88978],{"class":57},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[51,88980,88981,88983,88985],{"class":53,"line":8934},[51,88982,88917],{"class":72},[51,88984,108],{"class":64},[51,88986,88987],{"class":72}," oldObj[k]\n",[51,88989,88990],{"class":53,"line":8939},[51,88991,3609],{"class":72},[51,88993,88994],{"class":53,"line":8945},[51,88995,53362],{"class":72},[51,88997,88998],{"class":53,"line":8972},[51,88999,3267],{"class":72},[51,89001,89002,89005,89008],{"class":53,"line":8977},[51,89003,89004],{"class":68},"    deepCopy",[51,89006,89007],{"class":72},"(o, obj) ",[51,89009,89010],{"class":57},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[51,89012,89013,89015,89017],{"class":53,"line":8983},[51,89014,74717],{"class":72},[51,89016,59211],{"class":68},[51,89018,89019],{"class":72},"(o)\n",[51,89021,89022,89025,89027],{"class":53,"line":8995},[51,89023,89024],{"class":72},"    o.age ",[51,89026,108],{"class":64},[51,89028,89029],{"class":175}," 20\n",[51,89031,89032,89035,89037,89039,89041],{"class":53,"line":9007},[51,89033,89034],{"class":72},"    o.hobby[",[51,89036,176],{"class":175},[51,89038,5517],{"class":72},[51,89040,108],{"class":64},[51,89042,89043],{"class":282}," '篮球'\n",[51,89045,89046,89049,89051],{"class":53,"line":9019},[51,89047,89048],{"class":72},"    o.family ",[51,89050,108],{"class":64},[51,89052,89053],{"class":282}," '老pink'\n",[51,89055,89056,89058,89060],{"class":53,"line":10678},[51,89057,74717],{"class":72},[51,89059,59211],{"class":68},[51,89061,71000],{"class":72},[51,89063,89064,89066,89068],{"class":53,"line":10703},[51,89065,53381],{"class":72},[51,89067,52777],{"class":52264},[51,89069,52271],{"class":72},[51,89071,89072,89074,89076],{"class":53,"line":10726},[51,89073,52749],{"class":72},[51,89075,52764],{"class":52264},[51,89077,52271],{"class":72},[51,89079,89080],{"class":53,"line":10750},[51,89081,3480],{"emptyLinePlaceholder":1192},[51,89083,89084,89086,89088],{"class":53,"line":10755},[51,89085,52749],{"class":72},[51,89087,51599],{"class":52264},[51,89089,52271],{"class":72},[40,89091,89092],{},[2564,89093],{"alt":35,"src":89094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22960,89096,89098,89099],{"id":89097},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[840,89100,89101],{},"js库lodash里面cloneDeep内部实现了深拷贝",[40,89103,89104],{},[981,89105,89106],{"href":89106,"rel":89107},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24828],[40,89109,89110],{},"lodash里边的方法都要加上一个下划线_",[40,89112,89113],{},"_.cloneDeep()",[29,89115,89117],{"className":51597,"code":89116,"language":51599,"meta":35,"style":35},"\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",[37,89118,89119,89129,89143,89147,89155,89169,89189,89201,89209,89213,89221,89226,89245,89253,89263,89271,89279,89291,89295,89301,89305,89309,89325,89333,89342,89350,89358,89366,89370],{"__ignoreMap":35},[51,89120,89121,89123,89125,89127],{"class":53,"line":54},[51,89122,52261],{"class":72},[51,89124,52265],{"class":52264},[51,89126,52268],{"class":68},[51,89128,52271],{"class":72},[51,89130,89131,89133,89135,89137,89139,89141],{"class":53,"line":61},[51,89132,2154],{"class":72},[51,89134,51599],{"class":52264},[51,89136,52280],{"class":68},[51,89138,108],{"class":72},[51,89140,52285],{"class":282},[51,89142,52271],{"class":72},[51,89144,89145],{"class":53,"line":93},[51,89146,3480],{"emptyLinePlaceholder":1192},[51,89148,89149,89151,89153],{"class":53,"line":99},[51,89150,2154],{"class":72},[51,89152,52298],{"class":52264},[51,89154,52271],{"class":72},[51,89156,89157,89159,89161,89163,89165,89167],{"class":53,"line":120},[51,89158,53108],{"class":72},[51,89160,52308],{"class":52264},[51,89162,52311],{"class":68},[51,89164,108],{"class":72},[51,89166,52316],{"class":282},[51,89168,52271],{"class":72},[51,89170,89171,89173,89175,89177,89179,89181,89183,89185,89187],{"class":53,"line":129},[51,89172,53108],{"class":72},[51,89174,52308],{"class":52264},[51,89176,15882],{"class":68},[51,89178,108],{"class":72},[51,89180,52355],{"class":282},[51,89182,52335],{"class":68},[51,89184,108],{"class":72},[51,89186,52362],{"class":282},[51,89188,52271],{"class":72},[51,89190,89191,89193,89195,89197,89199],{"class":53,"line":206},[51,89192,53108],{"class":72},[51,89194,52371],{"class":52264},[51,89196,52374],{"class":72},[51,89198,52371],{"class":52264},[51,89200,52271],{"class":72},[51,89202,89203,89205,89207],{"class":53,"line":212},[51,89204,52749],{"class":72},[51,89206,52298],{"class":52264},[51,89208,52271],{"class":72},[51,89210,89211],{"class":53,"line":227},[51,89212,3480],{"emptyLinePlaceholder":1192},[51,89214,89215,89217,89219],{"class":53,"line":370},[51,89216,2154],{"class":72},[51,89218,52764],{"class":52264},[51,89220,52271],{"class":72},[51,89222,89223],{"class":53,"line":387},[51,89224,89225],{"class":57},"  \u003C!-- 先引用这个库 -->\n",[51,89227,89228,89230,89232,89234,89236,89239,89241,89243],{"class":53,"line":404},[51,89229,53108],{"class":72},[51,89231,52777],{"class":52264},[51,89233,56203],{"class":68},[51,89235,108],{"class":72},[51,89237,89238],{"class":282},"\"lodash.min.js\"",[51,89240,56278],{"class":72},[51,89242,52777],{"class":52264},[51,89244,52271],{"class":72},[51,89246,89247,89249,89251],{"class":53,"line":415},[51,89248,53108],{"class":72},[51,89250,52777],{"class":52264},[51,89252,52271],{"class":72},[51,89254,89255,89257,89259,89261],{"class":53,"line":420},[51,89256,12183],{"class":64},[51,89258,70935],{"class":175},[51,89260,14526],{"class":64},[51,89262,16534],{"class":72},[51,89264,89265,89267,89269],{"class":53,"line":429},[51,89266,72580],{"class":72},[51,89268,88774],{"class":282},[51,89270,32430],{"class":72},[51,89272,89273,89275,89277],{"class":53,"line":434},[51,89274,72590],{"class":72},[51,89276,1896],{"class":175},[51,89278,32430],{"class":72},[51,89280,89281,89283,89285,89287,89289],{"class":53,"line":448},[51,89282,88789],{"class":72},[51,89284,88792],{"class":282},[51,89286,13397],{"class":72},[51,89288,88797],{"class":282},[51,89290,88800],{"class":72},[51,89292,89293],{"class":53,"line":462},[51,89294,78836],{"class":72},[51,89296,89297,89299],{"class":53,"line":470},[51,89298,88809],{"class":72},[51,89300,88812],{"class":282},[51,89302,89303],{"class":53,"line":2783},[51,89304,53362],{"class":72},[51,89306,89307],{"class":53,"line":2788},[51,89308,3267],{"class":72},[51,89310,89311,89313,89315,89317,89320,89323],{"class":53,"line":2817},[51,89312,12183],{"class":64},[51,89314,88827],{"class":175},[51,89316,14526],{"class":64},[51,89318,89319],{"class":72}," _.",[51,89321,89322],{"class":68},"cloneDeep",[51,89324,71000],{"class":72},[51,89326,89327,89329,89331],{"class":53,"line":2822},[51,89328,74717],{"class":72},[51,89330,59211],{"class":68},[51,89332,89019],{"class":72},[51,89334,89335,89338,89340],{"class":53,"line":2839},[51,89336,89337],{"class":72},"    o.family.baby ",[51,89339,108],{"class":64},[51,89341,89053],{"class":282},[51,89343,89344,89346,89348],{"class":53,"line":2844},[51,89345,74717],{"class":72},[51,89347,59211],{"class":68},[51,89349,71000],{"class":72},[51,89351,89352,89354,89356],{"class":53,"line":2849},[51,89353,53381],{"class":72},[51,89355,52777],{"class":52264},[51,89357,52271],{"class":72},[51,89359,89360,89362,89364],{"class":53,"line":2854},[51,89361,52749],{"class":72},[51,89363,52764],{"class":52264},[51,89365,52271],{"class":72},[51,89367,89368],{"class":53,"line":2868},[51,89369,3480],{"emptyLinePlaceholder":1192},[51,89371,89372,89374,89376],{"class":53,"line":2873},[51,89373,52749],{"class":72},[51,89375,51599],{"class":52264},[51,89377,52271],{"class":72},[40,89379,89380],{},[2564,89381],{"alt":35,"src":89382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22960,89384,89386],{"id":89385},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[29,89388,89390],{"className":51597,"code":89389,"language":51599,"meta":35,"style":35},"\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",[37,89391,89392,89402,89416,89420,89428,89442,89462,89474,89482,89486,89494,89502,89512,89520,89528,89540,89544,89550,89554,89558,89563,89568,89573,89599,89607,89616,89624,89632,89640,89644],{"__ignoreMap":35},[51,89393,89394,89396,89398,89400],{"class":53,"line":54},[51,89395,52261],{"class":72},[51,89397,52265],{"class":52264},[51,89399,52268],{"class":68},[51,89401,52271],{"class":72},[51,89403,89404,89406,89408,89410,89412,89414],{"class":53,"line":61},[51,89405,2154],{"class":72},[51,89407,51599],{"class":52264},[51,89409,52280],{"class":68},[51,89411,108],{"class":72},[51,89413,52285],{"class":282},[51,89415,52271],{"class":72},[51,89417,89418],{"class":53,"line":93},[51,89419,3480],{"emptyLinePlaceholder":1192},[51,89421,89422,89424,89426],{"class":53,"line":99},[51,89423,2154],{"class":72},[51,89425,52298],{"class":52264},[51,89427,52271],{"class":72},[51,89429,89430,89432,89434,89436,89438,89440],{"class":53,"line":120},[51,89431,53108],{"class":72},[51,89433,52308],{"class":52264},[51,89435,52311],{"class":68},[51,89437,108],{"class":72},[51,89439,52316],{"class":282},[51,89441,52271],{"class":72},[51,89443,89444,89446,89448,89450,89452,89454,89456,89458,89460],{"class":53,"line":129},[51,89445,53108],{"class":72},[51,89447,52308],{"class":52264},[51,89449,15882],{"class":68},[51,89451,108],{"class":72},[51,89453,52355],{"class":282},[51,89455,52335],{"class":68},[51,89457,108],{"class":72},[51,89459,52362],{"class":282},[51,89461,52271],{"class":72},[51,89463,89464,89466,89468,89470,89472],{"class":53,"line":206},[51,89465,53108],{"class":72},[51,89467,52371],{"class":52264},[51,89469,52374],{"class":72},[51,89471,52371],{"class":52264},[51,89473,52271],{"class":72},[51,89475,89476,89478,89480],{"class":53,"line":212},[51,89477,52749],{"class":72},[51,89479,52298],{"class":52264},[51,89481,52271],{"class":72},[51,89483,89484],{"class":53,"line":227},[51,89485,3480],{"emptyLinePlaceholder":1192},[51,89487,89488,89490,89492],{"class":53,"line":370},[51,89489,2154],{"class":72},[51,89491,52764],{"class":52264},[51,89493,52271],{"class":72},[51,89495,89496,89498,89500],{"class":53,"line":387},[51,89497,53108],{"class":72},[51,89499,52777],{"class":52264},[51,89501,52271],{"class":72},[51,89503,89504,89506,89508,89510],{"class":53,"line":404},[51,89505,12183],{"class":64},[51,89507,70935],{"class":175},[51,89509,14526],{"class":64},[51,89511,16534],{"class":72},[51,89513,89514,89516,89518],{"class":53,"line":415},[51,89515,72580],{"class":72},[51,89517,88774],{"class":282},[51,89519,32430],{"class":72},[51,89521,89522,89524,89526],{"class":53,"line":420},[51,89523,72590],{"class":72},[51,89525,1896],{"class":175},[51,89527,32430],{"class":72},[51,89529,89530,89532,89534,89536,89538],{"class":53,"line":429},[51,89531,88789],{"class":72},[51,89533,88792],{"class":282},[51,89535,13397],{"class":72},[51,89537,88797],{"class":282},[51,89539,88800],{"class":72},[51,89541,89542],{"class":53,"line":434},[51,89543,78836],{"class":72},[51,89545,89546,89548],{"class":53,"line":448},[51,89547,88809],{"class":72},[51,89549,88812],{"class":282},[51,89551,89552],{"class":53,"line":462},[51,89553,53362],{"class":72},[51,89555,89556],{"class":53,"line":470},[51,89557,3267],{"class":72},[51,89559,89560],{"class":53,"line":2783},[51,89561,89562],{"class":57},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[51,89564,89565],{"class":53,"line":2788},[51,89566,89567],{"class":57},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[51,89569,89570],{"class":53,"line":2817},[51,89571,89572],{"class":57},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[51,89574,89575,89577,89579,89581,89584,89586,89589,89591,89593,89595,89597],{"class":53,"line":2822},[51,89576,12183],{"class":64},[51,89578,88827],{"class":175},[51,89580,14526],{"class":64},[51,89582,89583],{"class":175}," JSON",[51,89585,1804],{"class":72},[51,89587,89588],{"class":68},"parse",[51,89590,73],{"class":72},[51,89592,72628],{"class":175},[51,89594,1804],{"class":72},[51,89596,72633],{"class":68},[51,89598,72636],{"class":72},[51,89600,89601,89603,89605],{"class":53,"line":2839},[51,89602,74717],{"class":72},[51,89604,59211],{"class":68},[51,89606,89019],{"class":72},[51,89608,89609,89611,89613],{"class":53,"line":2844},[51,89610,89337],{"class":72},[51,89612,108],{"class":64},[51,89614,89615],{"class":282}," '123'\n",[51,89617,89618,89620,89622],{"class":53,"line":2849},[51,89619,74717],{"class":72},[51,89621,59211],{"class":68},[51,89623,71000],{"class":72},[51,89625,89626,89628,89630],{"class":53,"line":2854},[51,89627,53381],{"class":72},[51,89629,52777],{"class":52264},[51,89631,52271],{"class":72},[51,89633,89634,89636,89638],{"class":53,"line":2868},[51,89635,52749],{"class":72},[51,89637,52764],{"class":52264},[51,89639,52271],{"class":72},[51,89641,89642],{"class":53,"line":2873},[51,89643,3480],{"emptyLinePlaceholder":1192},[51,89645,89646,89648,89650],{"class":53,"line":3657},[51,89647,52749],{"class":72},[51,89649,51599],{"class":52264},[51,89651,52271],{"class":72},[40,89653,89654],{},[2564,89655],{"alt":35,"src":89656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89658,89660],{"id":89659},"_415-异常处理","4.15 异常处理",[19,89662,89663],{},[22,89664,89665],{},"throw抛异常",[40,89667,89668],{},[2564,89669],{"alt":35,"src":89670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[19,89672,89673],{"start":61},[22,89674,89675],{},"try\u002Fcatch 捕获错误信息",[40,89677,89678],{},[2564,89679],{"alt":35,"src":89680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[29,89682,89684],{"className":51597,"code":89683,"language":51599,"meta":35,"style":35},"\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",[37,89685,89686,89696,89710,89714,89722,89736,89756,89768,89776,89780,89788,89800,89808,89817,89824,89829,89848,89857,89868,89873,89883,89888,89893,89898,89915,89919,89924,89931,89943,89947,89959,89963,89967,89972,89977,89984,89992,90000,90004],{"__ignoreMap":35},[51,89687,89688,89690,89692,89694],{"class":53,"line":54},[51,89689,52261],{"class":72},[51,89691,52265],{"class":52264},[51,89693,52268],{"class":68},[51,89695,52271],{"class":72},[51,89697,89698,89700,89702,89704,89706,89708],{"class":53,"line":61},[51,89699,2154],{"class":72},[51,89701,51599],{"class":52264},[51,89703,52280],{"class":68},[51,89705,108],{"class":72},[51,89707,52285],{"class":282},[51,89709,52271],{"class":72},[51,89711,89712],{"class":53,"line":93},[51,89713,3480],{"emptyLinePlaceholder":1192},[51,89715,89716,89718,89720],{"class":53,"line":99},[51,89717,2154],{"class":72},[51,89719,52298],{"class":52264},[51,89721,52271],{"class":72},[51,89723,89724,89726,89728,89730,89732,89734],{"class":53,"line":120},[51,89725,53108],{"class":72},[51,89727,52308],{"class":52264},[51,89729,52311],{"class":68},[51,89731,108],{"class":72},[51,89733,52316],{"class":282},[51,89735,52271],{"class":72},[51,89737,89738,89740,89742,89744,89746,89748,89750,89752,89754],{"class":53,"line":129},[51,89739,53108],{"class":72},[51,89741,52308],{"class":52264},[51,89743,15882],{"class":68},[51,89745,108],{"class":72},[51,89747,52355],{"class":282},[51,89749,52335],{"class":68},[51,89751,108],{"class":72},[51,89753,52362],{"class":282},[51,89755,52271],{"class":72},[51,89757,89758,89760,89762,89764,89766],{"class":53,"line":206},[51,89759,53108],{"class":72},[51,89761,52371],{"class":52264},[51,89763,52374],{"class":72},[51,89765,52371],{"class":52264},[51,89767,52271],{"class":72},[51,89769,89770,89772,89774],{"class":53,"line":212},[51,89771,52749],{"class":72},[51,89773,52298],{"class":52264},[51,89775,52271],{"class":72},[51,89777,89778],{"class":53,"line":227},[51,89779,3480],{"emptyLinePlaceholder":1192},[51,89781,89782,89784,89786],{"class":53,"line":370},[51,89783,2154],{"class":72},[51,89785,52764],{"class":52264},[51,89787,52271],{"class":72},[51,89789,89790,89792,89794,89796,89798],{"class":53,"line":387},[51,89791,53108],{"class":72},[51,89793,40],{"class":52264},[51,89795,54458],{"class":72},[51,89797,40],{"class":52264},[51,89799,52271],{"class":72},[51,89801,89802,89804,89806],{"class":53,"line":404},[51,89803,53108],{"class":72},[51,89805,52777],{"class":52264},[51,89807,52271],{"class":72},[51,89809,89810,89812,89815],{"class":53,"line":415},[51,89811,71048],{"class":64},[51,89813,89814],{"class":68}," fn",[51,89816,11815],{"class":72},[51,89818,89819,89822],{"class":53,"line":420},[51,89820,89821],{"class":64},"      try",[51,89823,16534],{"class":72},[51,89825,89826],{"class":53,"line":429},[51,89827,89828],{"class":57},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[51,89830,89831,89833,89835,89837,89839,89841,89843,89846],{"class":53,"line":434},[51,89832,62234],{"class":64},[51,89834,7787],{"class":175},[51,89836,14526],{"class":64},[51,89838,55360],{"class":72},[51,89840,55363],{"class":68},[51,89842,73],{"class":72},[51,89844,89845],{"class":282},"'.p'",[51,89847,90],{"class":72},[51,89849,89850,89853,89855],{"class":53,"line":448},[51,89851,89852],{"class":72},"        p.style.color ",[51,89854,108],{"class":64},[51,89856,68015],{"class":282},[51,89858,89859,89862,89865],{"class":53,"line":462},[51,89860,89861],{"class":72},"      } ",[51,89863,89864],{"class":64},"catch",[51,89866,89867],{"class":72}," (err) {\n",[51,89869,89870],{"class":53,"line":470},[51,89871,89872],{"class":57},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[51,89874,89875,89878,89880],{"class":53,"line":2783},[51,89876,89877],{"class":72},"        console.",[51,89879,59211],{"class":68},[51,89881,89882],{"class":72},"(err.message)\n",[51,89884,89885],{"class":53,"line":2788},[51,89886,89887],{"class":57},"        \u002F\u002F 想要中断程序，需要加return\n",[51,89889,89890],{"class":53,"line":2817},[51,89891,89892],{"class":57},"        \u002F\u002F return\n",[51,89894,89895],{"class":53,"line":2822},[51,89896,89897],{"class":57},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[51,89899,89900,89903,89905,89908,89910,89913],{"class":53,"line":2839},[51,89901,89902],{"class":64},"        throw",[51,89904,12540],{"class":64},[51,89906,89907],{"class":68}," Error",[51,89909,73],{"class":72},[51,89911,89912],{"class":282},"'你看看，选择器错误了吧'",[51,89914,90],{"class":72},[51,89916,89917],{"class":53,"line":2844},[51,89918,53362],{"class":72},[51,89920,89921],{"class":53,"line":2849},[51,89922,89923],{"class":57},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[51,89925,89926,89929],{"class":53,"line":2854},[51,89927,89928],{"class":64},"      finally",[51,89930,16534],{"class":72},[51,89932,89933,89936,89938,89941],{"class":53,"line":2868},[51,89934,89935],{"class":68},"        alert",[51,89937,73],{"class":72},[51,89939,89940],{"class":282},"'弹出对话框'",[51,89942,90],{"class":72},[51,89944,89945],{"class":53,"line":2873},[51,89946,53362],{"class":72},[51,89948,89949,89951,89953,89955,89957],{"class":53,"line":3657},[51,89950,59208],{"class":72},[51,89952,59211],{"class":68},[51,89954,73],{"class":72},[51,89956,1719],{"class":175},[51,89958,90],{"class":72},[51,89960,89961],{"class":53,"line":3671},[51,89962,3480],{"emptyLinePlaceholder":1192},[51,89964,89965],{"class":53,"line":3679},[51,89966,3267],{"class":72},[51,89968,89969],{"class":53,"line":3684},[51,89970,89971],{"class":57},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[51,89973,89974],{"class":53,"line":3690},[51,89975,89976],{"class":57},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[51,89978,89979,89982],{"class":53,"line":3696},[51,89980,89981],{"class":68},"    fn",[51,89983,154],{"class":72},[51,89985,89986,89988,89990],{"class":53,"line":3701},[51,89987,53381],{"class":72},[51,89989,52777],{"class":52264},[51,89991,52271],{"class":72},[51,89993,89994,89996,89998],{"class":53,"line":8910},[51,89995,52749],{"class":72},[51,89997,52764],{"class":52264},[51,89999,52271],{"class":72},[51,90001,90002],{"class":53,"line":8934},[51,90003,3480],{"emptyLinePlaceholder":1192},[51,90005,90006,90008,90010],{"class":53,"line":8939},[51,90007,52749],{"class":72},[51,90009,51599],{"class":52264},[51,90011,52271],{"class":72},[40,90013,90014],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[19,90016,90017],{"start":93},[22,90018,90019],{},"debugger",[40,90021,90022],{},[2564,90023],{"alt":35,"src":90024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[40,90026,90027],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90029,90031],{"id":90030},"_416-处理this","4.16 处理this",[1233,90033,90035],{"id":90034},"_4161-this的指向","4.16.1 this的指向",[19,90037,90038],{},[22,90039,90040],{},"普通函数的this",[40,90042,90043],{},[2564,90044],{"alt":35,"src":90045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[19,90047,90048],{"start":61},[22,90049,90050],{},"箭头函数的this",[40,90052,90053],{},[2564,90054],{"alt":35,"src":90055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[40,90057,90058],{},[2564,90059],{"alt":35,"src":90060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[40,90062,90063],{},[2564,90064],{"alt":35,"src":90065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[1233,90067,90069],{"id":90068},"_4162-this的改变","4.16.2 this的改变",[40,90071,90072],{},"call() apply() bind()",[19,90074,90075],{},[22,90076,90077],{},"call()",[40,90079,90080],{},[2564,90081],{"alt":35,"src":90082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[40,90084,90085],{},"两个作用：①调用函数；②改变this指向",[29,90087,90089],{"className":54031,"code":90088,"language":54033,"meta":35,"style":35},"\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",[37,90090,90091,90099,90107,90111,90116,90120,90125,90130,90135,90139,90144,90152],{"__ignoreMap":35},[51,90092,90093,90095,90097],{"class":53,"line":54},[51,90094,2154],{"class":72},[51,90096,52764],{"class":52264},[51,90098,52271],{"class":72},[51,90100,90101,90103,90105],{"class":53,"line":61},[51,90102,53108],{"class":72},[51,90104,52777],{"class":52264},[51,90106,52271],{"class":72},[51,90108,90109],{"class":53,"line":93},[51,90110,72487],{"class":72},[51,90112,90113],{"class":53,"line":99},[51,90114,90115],{"class":72},"      uname: 'pink'\n",[51,90117,90118],{"class":53,"line":120},[51,90119,3267],{"class":72},[51,90121,90122],{"class":53,"line":129},[51,90123,90124],{"class":72},"    function fn(x, y) {\n",[51,90126,90127],{"class":53,"line":206},[51,90128,90129],{"class":72},"      console.log(this)  \u002F\u002Fwindow\n",[51,90131,90132],{"class":53,"line":212},[51,90133,90134],{"class":72},"      console.log(x + y)\n",[51,90136,90137],{"class":53,"line":227},[51,90138,3267],{"class":72},[51,90140,90141],{"class":53,"line":370},[51,90142,90143],{"class":72},"    fn.call(obj, 1, 2)\n",[51,90145,90146,90148,90150],{"class":53,"line":387},[51,90147,53381],{"class":72},[51,90149,52777],{"class":52264},[51,90151,52271],{"class":72},[51,90153,90154,90156,90158],{"class":53,"line":404},[51,90155,52749],{"class":72},[51,90157,52764],{"class":52264},[51,90159,52271],{"class":72},[40,90161,90162],{},[2564,90163],{"alt":35,"src":90164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[19,90166,90167],{"start":61},[22,90168,90169],{},"apply()",[40,90171,90172],{},[2564,90173],{"alt":35,"src":90174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[40,90176,90085],{},[40,90178,90179],{},"call传递的是普通参数，而apply必须传递的是数组",[29,90181,90183],{"className":51597,"code":90182,"language":51599,"meta":35,"style":35},"\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",[37,90184,90185,90195,90209,90213,90221,90235,90255,90267,90275,90279,90287,90295,90305,90312,90316,90321,90337,90349,90363,90367,90372,90391,90396,90400,90405,90410,90418,90423,90445,90450,90466,90482,90494,90498,90503,90522,90530,90538,90542],{"__ignoreMap":35},[51,90186,90187,90189,90191,90193],{"class":53,"line":54},[51,90188,52261],{"class":72},[51,90190,52265],{"class":52264},[51,90192,52268],{"class":68},[51,90194,52271],{"class":72},[51,90196,90197,90199,90201,90203,90205,90207],{"class":53,"line":61},[51,90198,2154],{"class":72},[51,90200,51599],{"class":52264},[51,90202,52280],{"class":68},[51,90204,108],{"class":72},[51,90206,52285],{"class":282},[51,90208,52271],{"class":72},[51,90210,90211],{"class":53,"line":93},[51,90212,3480],{"emptyLinePlaceholder":1192},[51,90214,90215,90217,90219],{"class":53,"line":99},[51,90216,2154],{"class":72},[51,90218,52298],{"class":52264},[51,90220,52271],{"class":72},[51,90222,90223,90225,90227,90229,90231,90233],{"class":53,"line":120},[51,90224,53108],{"class":72},[51,90226,52308],{"class":52264},[51,90228,52311],{"class":68},[51,90230,108],{"class":72},[51,90232,52316],{"class":282},[51,90234,52271],{"class":72},[51,90236,90237,90239,90241,90243,90245,90247,90249,90251,90253],{"class":53,"line":129},[51,90238,53108],{"class":72},[51,90240,52308],{"class":52264},[51,90242,15882],{"class":68},[51,90244,108],{"class":72},[51,90246,52355],{"class":282},[51,90248,52335],{"class":68},[51,90250,108],{"class":72},[51,90252,52362],{"class":282},[51,90254,52271],{"class":72},[51,90256,90257,90259,90261,90263,90265],{"class":53,"line":206},[51,90258,53108],{"class":72},[51,90260,52371],{"class":52264},[51,90262,52374],{"class":72},[51,90264,52371],{"class":52264},[51,90266,52271],{"class":72},[51,90268,90269,90271,90273],{"class":53,"line":212},[51,90270,52749],{"class":72},[51,90272,52298],{"class":52264},[51,90274,52271],{"class":72},[51,90276,90277],{"class":53,"line":227},[51,90278,3480],{"emptyLinePlaceholder":1192},[51,90280,90281,90283,90285],{"class":53,"line":370},[51,90282,2154],{"class":72},[51,90284,52764],{"class":52264},[51,90286,52271],{"class":72},[51,90288,90289,90291,90293],{"class":53,"line":387},[51,90290,53108],{"class":72},[51,90292,52777],{"class":52264},[51,90294,52271],{"class":72},[51,90296,90297,90299,90301,90303],{"class":53,"line":404},[51,90298,12183],{"class":64},[51,90300,70935],{"class":175},[51,90302,14526],{"class":64},[51,90304,16534],{"class":72},[51,90306,90307,90309],{"class":53,"line":415},[51,90308,72590],{"class":72},[51,90310,90311],{"class":175},"18\n",[51,90313,90314],{"class":53,"line":420},[51,90315,3267],{"class":72},[51,90317,90318],{"class":53,"line":429},[51,90319,90320],{"class":57},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[51,90322,90323,90325,90327,90329,90331,90333,90335],{"class":53,"line":434},[51,90324,71048],{"class":64},[51,90326,89814],{"class":68},[51,90328,73],{"class":72},[51,90330,2065],{"class":78},[51,90332,13397],{"class":72},[51,90334,2090],{"class":78},[51,90336,13404],{"class":72},[51,90338,90339,90341,90343,90345,90347],{"class":53,"line":448},[51,90340,59208],{"class":72},[51,90342,59211],{"class":68},[51,90344,73],{"class":72},[51,90346,87957],{"class":175},[51,90348,90],{"class":72},[51,90350,90351,90353,90355,90358,90360],{"class":53,"line":462},[51,90352,59208],{"class":72},[51,90354,59211],{"class":68},[51,90356,90357],{"class":72},"(x ",[51,90359,114],{"class":64},[51,90361,90362],{"class":72}," y)\n",[51,90364,90365],{"class":53,"line":470},[51,90366,3267],{"class":72},[51,90368,90369],{"class":53,"line":2783},[51,90370,90371],{"class":57},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[51,90373,90374,90377,90380,90383,90385,90387,90389],{"class":53,"line":2788},[51,90375,90376],{"class":72},"    fn.",[51,90378,90379],{"class":68},"apply",[51,90381,90382],{"class":72},"(obj, [",[51,90384,791],{"class":175},[51,90386,13397],{"class":72},[51,90388,1334],{"class":175},[51,90390,5731],{"class":72},[51,90392,90393],{"class":53,"line":2817},[51,90394,90395],{"class":57},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[51,90397,90398],{"class":53,"line":2822},[51,90399,3480],{"emptyLinePlaceholder":1192},[51,90401,90402],{"class":53,"line":2839},[51,90403,90404],{"class":57},"    \u002F\u002F 使用场景：求数组最大值\n",[51,90406,90407],{"class":53,"line":2844},[51,90408,90409],{"class":57},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[51,90411,90412,90415],{"class":53,"line":2849},[51,90413,90414],{"class":57},"    \u002F\u002F console.log(max)",[51,90416,90417],{"class":57},"   \u002F\u002F3\n",[51,90419,90420],{"class":53,"line":2854},[51,90421,90422],{"class":57},"    \u002F\u002F 指向空或者Math都是可以的\n",[51,90424,90425,90427,90429,90431,90433,90435,90437,90439,90441,90443],{"class":53,"line":2868},[51,90426,12183],{"class":64},[51,90428,58659],{"class":175},[51,90430,14526],{"class":64},[51,90432,53190],{"class":72},[51,90434,612],{"class":175},[51,90436,13397],{"class":72},[51,90438,1750],{"class":175},[51,90440,13397],{"class":72},[51,90442,1781],{"class":175},[51,90444,34210],{"class":72},[51,90446,90447],{"class":53,"line":2873},[51,90448,90449],{"class":57},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[51,90451,90452,90454,90456,90458,90461,90463],{"class":53,"line":3657},[51,90453,12183],{"class":64},[51,90455,864],{"class":175},[51,90457,14526],{"class":64},[51,90459,90460],{"class":72}," Math.max.",[51,90462,90379],{"class":68},[51,90464,90465],{"class":72},"(Math, arr)\n",[51,90467,90468,90470,90473,90475,90478,90480],{"class":53,"line":3671},[51,90469,12183],{"class":64},[51,90471,90472],{"class":175}," min",[51,90474,14526],{"class":64},[51,90476,90477],{"class":72}," Math.min.",[51,90479,90379],{"class":68},[51,90481,90465],{"class":72},[51,90483,90484,90486,90488,90491],{"class":53,"line":3679},[51,90485,74717],{"class":72},[51,90487,59211],{"class":68},[51,90489,90490],{"class":72},"(max, min)     ",[51,90492,90493],{"class":57},"\u002F\u002F100,4\n",[51,90495,90496],{"class":53,"line":3684},[51,90497,3480],{"emptyLinePlaceholder":1192},[51,90499,90500],{"class":53,"line":3690},[51,90501,90502],{"class":57},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[51,90504,90505,90507,90509,90512,90514,90516,90519],{"class":53,"line":3696},[51,90506,74717],{"class":72},[51,90508,59211],{"class":68},[51,90510,90511],{"class":72},"(Max.",[51,90513,928],{"class":68},[51,90515,73],{"class":72},[51,90517,90518],{"class":64},"...",[51,90520,90521],{"class":72},"arr))\n",[51,90523,90524,90526,90528],{"class":53,"line":3701},[51,90525,53381],{"class":72},[51,90527,52777],{"class":52264},[51,90529,52271],{"class":72},[51,90531,90532,90534,90536],{"class":53,"line":8910},[51,90533,52749],{"class":72},[51,90535,52764],{"class":52264},[51,90537,52271],{"class":72},[51,90539,90540],{"class":53,"line":8934},[51,90541,3480],{"emptyLinePlaceholder":1192},[51,90543,90544,90546,90548],{"class":53,"line":8939},[51,90545,52749],{"class":72},[51,90547,51599],{"class":52264},[51,90549,52271],{"class":72},[40,90551,90552],{},[2564,90553],{"alt":35,"src":90554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[19,90556,90557],{"start":93},[22,90558,90559],{},"bind()",[40,90561,90562],{},[2564,90563],{"alt":35,"src":90564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[40,90566,90567],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[40,90569,90570],{},"bind的语法跟call很相似",[29,90572,90574],{"className":54031,"code":90573,"language":54033,"meta":35,"style":35},"\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",[37,90575,90576,90584,90592,90596,90601,90605,90609,90614,90618,90623,90628,90633,90638,90643,90648,90653,90657,90665],{"__ignoreMap":35},[51,90577,90578,90580,90582],{"class":53,"line":54},[51,90579,2154],{"class":72},[51,90581,52764],{"class":52264},[51,90583,52271],{"class":72},[51,90585,90586,90588,90590],{"class":53,"line":61},[51,90587,53108],{"class":72},[51,90589,52777],{"class":52264},[51,90591,52271],{"class":72},[51,90593,90594],{"class":53,"line":93},[51,90595,72487],{"class":72},[51,90597,90598],{"class":53,"line":99},[51,90599,90600],{"class":72},"      age: 18\n",[51,90602,90603],{"class":53,"line":120},[51,90604,3267],{"class":72},[51,90606,90607],{"class":53,"line":129},[51,90608,78107],{"class":72},[51,90610,90611],{"class":53,"line":206},[51,90612,90613],{"class":72},"      console.log(this)\n",[51,90615,90616],{"class":53,"line":212},[51,90617,3267],{"class":72},[51,90619,90620],{"class":53,"line":227},[51,90621,90622],{"class":72},"    \u002F\u002F 1.bind 不会调用函数\n",[51,90624,90625],{"class":53,"line":370},[51,90626,90627],{"class":72},"    \u002F\u002F 2.bind能改变this的指向\n",[51,90629,90630],{"class":53,"line":387},[51,90631,90632],{"class":72},"    fn.bind()\n",[51,90634,90635],{"class":53,"line":404},[51,90636,90637],{"class":72},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[51,90639,90640],{"class":53,"line":415},[51,90641,90642],{"class":72},"    const fun = fn.bind(obj)\n",[51,90644,90645],{"class":53,"line":420},[51,90646,90647],{"class":72},"    \u002F\u002F console.log(fun)\n",[51,90649,90650],{"class":53,"line":429},[51,90651,90652],{"class":72},"    \u002F\u002F 调用,查看this的指向\n",[51,90654,90655],{"class":53,"line":434},[51,90656,53615],{"class":72},[51,90658,90659,90661,90663],{"class":53,"line":448},[51,90660,53381],{"class":72},[51,90662,52777],{"class":52264},[51,90664,52271],{"class":72},[51,90666,90667,90669,90671],{"class":53,"line":462},[51,90668,52749],{"class":72},[51,90670,52764],{"class":52264},[51,90672,52271],{"class":72},[40,90674,90675],{},[2564,90676],{"alt":35,"src":90677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[19,90679,90680],{"start":99},[22,90681,90682],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[29,90684,90686],{"className":54031,"code":90685,"language":54033,"meta":35,"style":35},"\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",[37,90687,90688,90696,90709,90717,90722,90726,90731,90736,90741,90746,90751,90756,90761,90766,90770,90778],{"__ignoreMap":35},[51,90689,90690,90692,90694],{"class":53,"line":54},[51,90691,2154],{"class":72},[51,90693,52764],{"class":52264},[51,90695,52271],{"class":72},[51,90697,90698,90700,90702,90705,90707],{"class":53,"line":61},[51,90699,53108],{"class":72},[51,90701,54851],{"class":52264},[51,90703,90704],{"class":72},">禁用\u003C\u002F",[51,90706,54851],{"class":52264},[51,90708,52271],{"class":72},[51,90710,90711,90713,90715],{"class":53,"line":93},[51,90712,53108],{"class":72},[51,90714,52777],{"class":52264},[51,90716,52271],{"class":72},[51,90718,90719],{"class":53,"line":99},[51,90720,90721],{"class":72},"    const btn = document.querySelector('button')\n",[51,90723,90724],{"class":53,"line":120},[51,90725,59980],{"class":72},[51,90727,90728],{"class":53,"line":129},[51,90729,90730],{"class":72},"      this.disabled = true\n",[51,90732,90733],{"class":53,"line":206},[51,90734,90735],{"class":72},"      \u002F\u002F 定时器是window进行调用的\n",[51,90737,90738],{"class":53,"line":212},[51,90739,90740],{"class":72},"      setTimeout(function () {\n",[51,90742,90743],{"class":53,"line":227},[51,90744,90745],{"class":72},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[51,90747,90748],{"class":53,"line":370},[51,90749,90750],{"class":72},"        this.disabled = false\n",[51,90752,90753],{"class":53,"line":387},[51,90754,90755],{"class":72},"      }.bind(this), 2000)\n",[51,90757,90758],{"class":53,"line":404},[51,90759,90760],{"class":72},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[51,90762,90763],{"class":53,"line":415},[51,90764,90765],{"class":72},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[51,90767,90768],{"class":53,"line":420},[51,90769,34425],{"class":72},[51,90771,90772,90774,90776],{"class":53,"line":429},[51,90773,53381],{"class":72},[51,90775,52777],{"class":52264},[51,90777,52271],{"class":72},[51,90779,90780,90782,90784],{"class":53,"line":434},[51,90781,52749],{"class":72},[51,90783,52764],{"class":52264},[51,90785,52271],{"class":72},[19,90787,90788],{"start":120},[22,90789,22915],{},[40,90791,90792],{},[2564,90793],{"alt":35,"src":90794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90796,90798],{"id":90797},"_417-性能优化","4.17 性能优化",[1233,90800,90802],{"id":90801},"_4171-防抖","4.17.1 防抖",[40,90804,90805],{},[2564,90806],{"alt":35,"src":90807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[40,90809,90810],{},[840,90811,90812],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[40,90814,90815],{},"防抖实现方式：",[1000,90817,90818],{},[22,90819,90820],{},"lodash 提供了防抖处理",[40,90822,90823],{},"_.debounce(func,[wait=0],[options={}])",[40,90825,90826],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[29,90828,90830],{"className":51597,"code":90829,"language":51599,"meta":35,"style":35},"\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",[37,90831,90832,90842,90856,90860,90868,90882,90902,90914,90922,90928,90938,90950,90962,90973,90985,90995,91005,91018,91022,91030,91038,91042,91050,91068,91086,91094,91113,91123,91132,91143,91148,91152,91157,91162,91167,91192,91200,91208,91212],{"__ignoreMap":35},[51,90833,90834,90836,90838,90840],{"class":53,"line":54},[51,90835,52261],{"class":72},[51,90837,52265],{"class":52264},[51,90839,52268],{"class":68},[51,90841,52271],{"class":72},[51,90843,90844,90846,90848,90850,90852,90854],{"class":53,"line":61},[51,90845,2154],{"class":72},[51,90847,51599],{"class":52264},[51,90849,52280],{"class":68},[51,90851,108],{"class":72},[51,90853,52285],{"class":282},[51,90855,52271],{"class":72},[51,90857,90858],{"class":53,"line":93},[51,90859,3480],{"emptyLinePlaceholder":1192},[51,90861,90862,90864,90866],{"class":53,"line":99},[51,90863,2154],{"class":72},[51,90865,52298],{"class":52264},[51,90867,52271],{"class":72},[51,90869,90870,90872,90874,90876,90878,90880],{"class":53,"line":120},[51,90871,53108],{"class":72},[51,90873,52308],{"class":52264},[51,90875,52311],{"class":68},[51,90877,108],{"class":72},[51,90879,52316],{"class":282},[51,90881,52271],{"class":72},[51,90883,90884,90886,90888,90890,90892,90894,90896,90898,90900],{"class":53,"line":129},[51,90885,53108],{"class":72},[51,90887,52308],{"class":52264},[51,90889,15882],{"class":68},[51,90891,108],{"class":72},[51,90893,52355],{"class":282},[51,90895,52335],{"class":68},[51,90897,108],{"class":72},[51,90899,52362],{"class":282},[51,90901,52271],{"class":72},[51,90903,90904,90906,90908,90910,90912],{"class":53,"line":206},[51,90905,53108],{"class":72},[51,90907,52371],{"class":52264},[51,90909,52374],{"class":72},[51,90911,52371],{"class":52264},[51,90913,52271],{"class":72},[51,90915,90916,90918,90920],{"class":53,"line":212},[51,90917,53108],{"class":72},[51,90919,1179],{"class":52264},[51,90921,52271],{"class":72},[51,90923,90924,90926],{"class":53,"line":227},[51,90925,55716],{"class":68},[51,90927,16534],{"class":72},[51,90929,90930,90932,90934,90936],{"class":53,"line":370},[51,90931,73560],{"class":175},[51,90933,52401],{"class":72},[51,90935,61469],{"class":175},[51,90937,179],{"class":72},[51,90939,90940,90942,90944,90946,90948],{"class":53,"line":387},[51,90941,55735],{"class":175},[51,90943,52401],{"class":72},[51,90945,2812],{"class":175},[51,90947,52456],{"class":64},[51,90949,179],{"class":72},[51,90951,90952,90954,90956,90958,90960],{"class":53,"line":404},[51,90953,55749],{"class":175},[51,90955,52401],{"class":72},[51,90957,2812],{"class":175},[51,90959,52456],{"class":64},[51,90961,179],{"class":72},[51,90963,90964,90966,90968,90971],{"class":53,"line":415},[51,90965,55848],{"class":175},[51,90967,52401],{"class":72},[51,90969,90970],{"class":175},"gray",[51,90972,179],{"class":72},[51,90974,90975,90977,90979,90981,90983],{"class":53,"line":420},[51,90976,55886],{"class":175},[51,90978,52401],{"class":72},[51,90980,2070],{"class":175},[51,90982,52456],{"class":64},[51,90984,179],{"class":72},[51,90986,90987,90989,90991,90993],{"class":53,"line":429},[51,90988,58380],{"class":175},[51,90990,52401],{"class":72},[51,90992,61806],{"class":175},[51,90994,179],{"class":72},[51,90996,90997,90999,91001,91003],{"class":53,"line":434},[51,90998,58250],{"class":175},[51,91000,52401],{"class":72},[51,91002,52556],{"class":175},[51,91004,179],{"class":72},[51,91006,91007,91010,91012,91014,91016],{"class":53,"line":448},[51,91008,91009],{"class":175},"      padding-top",[51,91011,52401],{"class":72},[51,91013,1568],{"class":175},[51,91015,52456],{"class":64},[51,91017,179],{"class":72},[51,91019,91020],{"class":53,"line":462},[51,91021,3267],{"class":72},[51,91023,91024,91026,91028],{"class":53,"line":470},[51,91025,53381],{"class":72},[51,91027,1179],{"class":52264},[51,91029,52271],{"class":72},[51,91031,91032,91034,91036],{"class":53,"line":2783},[51,91033,52749],{"class":72},[51,91035,52298],{"class":52264},[51,91037,52271],{"class":72},[51,91039,91040],{"class":53,"line":2788},[51,91041,3480],{"emptyLinePlaceholder":1192},[51,91043,91044,91046,91048],{"class":53,"line":2817},[51,91045,2154],{"class":72},[51,91047,52764],{"class":52264},[51,91049,52271],{"class":72},[51,91051,91052,91054,91056,91058,91060,91062,91064,91066],{"class":53,"line":2822},[51,91053,53108],{"class":72},[51,91055,52575],{"class":52264},[51,91057,54450],{"class":68},[51,91059,108],{"class":72},[51,91061,54455],{"class":282},[51,91063,56278],{"class":72},[51,91065,52575],{"class":52264},[51,91067,52271],{"class":72},[51,91069,91070,91072,91074,91076,91078,91080,91082,91084],{"class":53,"line":2839},[51,91071,53108],{"class":72},[51,91073,52777],{"class":52264},[51,91075,56203],{"class":68},[51,91077,108],{"class":72},[51,91079,89238],{"class":282},[51,91081,56278],{"class":72},[51,91083,52777],{"class":52264},[51,91085,52271],{"class":72},[51,91087,91088,91090,91092],{"class":53,"line":2844},[51,91089,53108],{"class":72},[51,91091,52777],{"class":52264},[51,91093,52271],{"class":72},[51,91095,91096,91098,91100,91102,91104,91106,91108,91111],{"class":53,"line":2849},[51,91097,12183],{"class":64},[51,91099,87897],{"class":175},[51,91101,14526],{"class":64},[51,91103,55360],{"class":72},[51,91105,55363],{"class":68},[51,91107,73],{"class":72},[51,91109,91110],{"class":282},"'.box'",[51,91112,90],{"class":72},[51,91114,91115,91117,91119,91121],{"class":53,"line":2854},[51,91116,53183],{"class":64},[51,91118,10400],{"class":72},[51,91120,108],{"class":64},[51,91122,48297],{"class":175},[51,91124,91125,91127,91130],{"class":53,"line":2868},[51,91126,71048],{"class":64},[51,91128,91129],{"class":68}," mouseMove",[51,91131,11815],{"class":72},[51,91133,91134,91137,91139,91141],{"class":53,"line":2873},[51,91135,91136],{"class":72},"      box.innerHTML ",[51,91138,108],{"class":64},[51,91140,4109],{"class":72},[51,91142,3782],{"class":64},[51,91144,91145],{"class":53,"line":3657},[51,91146,91147],{"class":57},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[51,91149,91150],{"class":53,"line":3671},[51,91151,3267],{"class":72},[51,91153,91154],{"class":53,"line":3679},[51,91155,91156],{"class":57},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[51,91158,91159],{"class":53,"line":3684},[51,91160,91161],{"class":57},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[51,91163,91164],{"class":53,"line":3690},[51,91165,91166],{"class":57},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[51,91168,91169,91172,91174,91176,91179,91182,91185,91188,91190],{"class":53,"line":3696},[51,91170,91171],{"class":72},"    box.",[51,91173,58777],{"class":68},[51,91175,73],{"class":72},[51,91177,91178],{"class":282},"'mousemove'",[51,91180,91181],{"class":72},", _.",[51,91183,91184],{"class":68},"debounce",[51,91186,91187],{"class":72},"(mouseMove, ",[51,91189,66038],{"class":175},[51,91191,31461],{"class":72},[51,91193,91194,91196,91198],{"class":53,"line":3701},[51,91195,53381],{"class":72},[51,91197,52777],{"class":52264},[51,91199,52271],{"class":72},[51,91201,91202,91204,91206],{"class":53,"line":8910},[51,91203,52749],{"class":72},[51,91205,52764],{"class":52264},[51,91207,52271],{"class":72},[51,91209,91210],{"class":53,"line":8934},[51,91211,3480],{"emptyLinePlaceholder":1192},[51,91213,91214,91216,91218],{"class":53,"line":8939},[51,91215,52749],{"class":72},[51,91217,51599],{"class":52264},[51,91219,52271],{"class":72},[1000,91221,91222],{},[22,91223,91224],{},"手写一个防抖函数来处理",[40,91226,91227],{},"防抖的核心就是利用定时器来实现的：",[40,91229,91230],{},"①声明一个定时器变量",[40,91232,91233],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[40,91235,91236],{},"③如果没有定时器则开启定时器，记得存到变量里面",[29,91238,91240],{"className":51597,"code":91239,"language":51599,"meta":35,"style":35},"\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",[37,91241,91242,91252,91266,91270,91278,91292,91312,91324,91332,91338,91348,91360,91372,91382,91394,91404,91414,91426,91430,91438,91446,91450,91458,91476,91494,91502,91520,91530,91538,91548,91552,91556,91560,91565,91570,91575,91580,91585,91590,91608,91615,91620,91628,91633,91646,91662,91672,91677,91681,91685,91705,91709,91714,91719,91724,91729,91737,91745,91749],{"__ignoreMap":35},[51,91243,91244,91246,91248,91250],{"class":53,"line":54},[51,91245,52261],{"class":72},[51,91247,52265],{"class":52264},[51,91249,52268],{"class":68},[51,91251,52271],{"class":72},[51,91253,91254,91256,91258,91260,91262,91264],{"class":53,"line":61},[51,91255,2154],{"class":72},[51,91257,51599],{"class":52264},[51,91259,52280],{"class":68},[51,91261,108],{"class":72},[51,91263,52285],{"class":282},[51,91265,52271],{"class":72},[51,91267,91268],{"class":53,"line":93},[51,91269,3480],{"emptyLinePlaceholder":1192},[51,91271,91272,91274,91276],{"class":53,"line":99},[51,91273,2154],{"class":72},[51,91275,52298],{"class":52264},[51,91277,52271],{"class":72},[51,91279,91280,91282,91284,91286,91288,91290],{"class":53,"line":120},[51,91281,53108],{"class":72},[51,91283,52308],{"class":52264},[51,91285,52311],{"class":68},[51,91287,108],{"class":72},[51,91289,52316],{"class":282},[51,91291,52271],{"class":72},[51,91293,91294,91296,91298,91300,91302,91304,91306,91308,91310],{"class":53,"line":129},[51,91295,53108],{"class":72},[51,91297,52308],{"class":52264},[51,91299,15882],{"class":68},[51,91301,108],{"class":72},[51,91303,52355],{"class":282},[51,91305,52335],{"class":68},[51,91307,108],{"class":72},[51,91309,52362],{"class":282},[51,91311,52271],{"class":72},[51,91313,91314,91316,91318,91320,91322],{"class":53,"line":206},[51,91315,53108],{"class":72},[51,91317,52371],{"class":52264},[51,91319,52374],{"class":72},[51,91321,52371],{"class":52264},[51,91323,52271],{"class":72},[51,91325,91326,91328,91330],{"class":53,"line":212},[51,91327,53108],{"class":72},[51,91329,1179],{"class":52264},[51,91331,52271],{"class":72},[51,91333,91334,91336],{"class":53,"line":227},[51,91335,55716],{"class":68},[51,91337,16534],{"class":72},[51,91339,91340,91342,91344,91346],{"class":53,"line":370},[51,91341,73560],{"class":175},[51,91343,52401],{"class":72},[51,91345,61469],{"class":175},[51,91347,179],{"class":72},[51,91349,91350,91352,91354,91356,91358],{"class":53,"line":387},[51,91351,55735],{"class":175},[51,91353,52401],{"class":72},[51,91355,2812],{"class":175},[51,91357,52456],{"class":64},[51,91359,179],{"class":72},[51,91361,91362,91364,91366,91368,91370],{"class":53,"line":404},[51,91363,55749],{"class":175},[51,91365,52401],{"class":72},[51,91367,2812],{"class":175},[51,91369,52456],{"class":64},[51,91371,179],{"class":72},[51,91373,91374,91376,91378,91380],{"class":53,"line":415},[51,91375,55848],{"class":175},[51,91377,52401],{"class":72},[51,91379,90970],{"class":175},[51,91381,179],{"class":72},[51,91383,91384,91386,91388,91390,91392],{"class":53,"line":420},[51,91385,55886],{"class":175},[51,91387,52401],{"class":72},[51,91389,2070],{"class":175},[51,91391,52456],{"class":64},[51,91393,179],{"class":72},[51,91395,91396,91398,91400,91402],{"class":53,"line":429},[51,91397,58380],{"class":175},[51,91399,52401],{"class":72},[51,91401,61806],{"class":175},[51,91403,179],{"class":72},[51,91405,91406,91408,91410,91412],{"class":53,"line":434},[51,91407,58250],{"class":175},[51,91409,52401],{"class":72},[51,91411,52556],{"class":175},[51,91413,179],{"class":72},[51,91415,91416,91418,91420,91422,91424],{"class":53,"line":448},[51,91417,91009],{"class":175},[51,91419,52401],{"class":72},[51,91421,1568],{"class":175},[51,91423,52456],{"class":64},[51,91425,179],{"class":72},[51,91427,91428],{"class":53,"line":462},[51,91429,3267],{"class":72},[51,91431,91432,91434,91436],{"class":53,"line":470},[51,91433,53381],{"class":72},[51,91435,1179],{"class":52264},[51,91437,52271],{"class":72},[51,91439,91440,91442,91444],{"class":53,"line":2783},[51,91441,52749],{"class":72},[51,91443,52298],{"class":52264},[51,91445,52271],{"class":72},[51,91447,91448],{"class":53,"line":2788},[51,91449,3480],{"emptyLinePlaceholder":1192},[51,91451,91452,91454,91456],{"class":53,"line":2817},[51,91453,2154],{"class":72},[51,91455,52764],{"class":52264},[51,91457,52271],{"class":72},[51,91459,91460,91462,91464,91466,91468,91470,91472,91474],{"class":53,"line":2822},[51,91461,53108],{"class":72},[51,91463,52575],{"class":52264},[51,91465,54450],{"class":68},[51,91467,108],{"class":72},[51,91469,54455],{"class":282},[51,91471,56278],{"class":72},[51,91473,52575],{"class":52264},[51,91475,52271],{"class":72},[51,91477,91478,91480,91482,91484,91486,91488,91490,91492],{"class":53,"line":2839},[51,91479,53108],{"class":72},[51,91481,52777],{"class":52264},[51,91483,56203],{"class":68},[51,91485,108],{"class":72},[51,91487,89238],{"class":282},[51,91489,56278],{"class":72},[51,91491,52777],{"class":52264},[51,91493,52271],{"class":72},[51,91495,91496,91498,91500],{"class":53,"line":2844},[51,91497,53108],{"class":72},[51,91499,52777],{"class":52264},[51,91501,52271],{"class":72},[51,91503,91504,91506,91508,91510,91512,91514,91516,91518],{"class":53,"line":2849},[51,91505,12183],{"class":64},[51,91507,87897],{"class":175},[51,91509,14526],{"class":64},[51,91511,55360],{"class":72},[51,91513,55363],{"class":68},[51,91515,73],{"class":72},[51,91517,91110],{"class":282},[51,91519,90],{"class":72},[51,91521,91522,91524,91526,91528],{"class":53,"line":2854},[51,91523,53183],{"class":64},[51,91525,10400],{"class":72},[51,91527,108],{"class":64},[51,91529,48297],{"class":175},[51,91531,91532,91534,91536],{"class":53,"line":2868},[51,91533,71048],{"class":64},[51,91535,91129],{"class":68},[51,91537,11815],{"class":72},[51,91539,91540,91542,91544,91546],{"class":53,"line":2873},[51,91541,91136],{"class":72},[51,91543,108],{"class":64},[51,91545,4109],{"class":72},[51,91547,3782],{"class":64},[51,91549,91550],{"class":53,"line":3657},[51,91551,91147],{"class":57},[51,91553,91554],{"class":53,"line":3671},[51,91555,3267],{"class":72},[51,91557,91558],{"class":53,"line":3679},[51,91559,91156],{"class":57},[51,91561,91562],{"class":53,"line":3684},[51,91563,91564],{"class":57},"    \u002F\u002F 手写防抖函数\n",[51,91566,91567],{"class":53,"line":3690},[51,91568,91569],{"class":57},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[51,91571,91572],{"class":53,"line":3696},[51,91573,91574],{"class":57},"    \u002F\u002F 1.声明定时器变量\n",[51,91576,91577],{"class":53,"line":3701},[51,91578,91579],{"class":57},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[51,91581,91582],{"class":53,"line":8910},[51,91583,91584],{"class":57},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[51,91586,91587],{"class":53,"line":8934},[51,91588,91589],{"class":57},"    \u002F\u002F 4.定时器里面写函数调用\n",[51,91591,91592,91594,91597,91599,91602,91604,91606],{"class":53,"line":8939},[51,91593,71048],{"class":64},[51,91595,91596],{"class":68}," debounce",[51,91598,73],{"class":72},[51,91600,91601],{"class":78},"fn",[51,91603,13397],{"class":72},[51,91605,1965],{"class":78},[51,91607,13404],{"class":72},[51,91609,91610,91612],{"class":53,"line":8945},[51,91611,80736],{"class":64},[51,91613,91614],{"class":72}," timer\n",[51,91616,91617],{"class":53,"line":8972},[51,91618,91619],{"class":57},"      \u002F\u002F return 返回一个匿名函数\n",[51,91621,91622,91624,91626],{"class":53,"line":8977},[51,91623,74946],{"class":64},[51,91625,59882],{"class":64},[51,91627,55416],{"class":72},[51,91629,91630],{"class":53,"line":8983},[51,91631,91632],{"class":57},"        \u002F\u002F 这里边写第二三四步\n",[51,91634,91635,91637,91640,91643],{"class":53,"line":8995},[51,91636,3577],{"class":64},[51,91638,91639],{"class":72}," (timer) ",[51,91641,91642],{"class":68},"clearTimeout",[51,91644,91645],{"class":72},"(timer)\n",[51,91647,91648,91651,91653,91656,91658,91660],{"class":53,"line":9007},[51,91649,91650],{"class":72},"        timer ",[51,91652,108],{"class":64},[51,91654,91655],{"class":68}," setTimeout",[51,91657,73],{"class":72},[51,91659,55413],{"class":64},[51,91661,55416],{"class":72},[51,91663,91664,91667,91669],{"class":53,"line":9019},[51,91665,91666],{"class":68},"          fn",[51,91668,14012],{"class":72},[51,91670,91671],{"class":57},"\u002F\u002F加小括号调用fn }, t)\n",[51,91673,91674],{"class":53,"line":10678},[51,91675,91676],{"class":72},"        }, t)\n",[51,91678,91679],{"class":53,"line":10703},[51,91680,53362],{"class":72},[51,91682,91683],{"class":53,"line":10726},[51,91684,3267],{"class":72},[51,91686,91687,91689,91691,91693,91695,91697,91699,91701,91703],{"class":53,"line":10750},[51,91688,91171],{"class":72},[51,91690,58777],{"class":68},[51,91692,73],{"class":72},[51,91694,91178],{"class":282},[51,91696,13397],{"class":72},[51,91698,91184],{"class":68},[51,91700,91187],{"class":72},[51,91702,66038],{"class":175},[51,91704,31461],{"class":72},[51,91706,91707],{"class":53,"line":10755},[51,91708,3480],{"emptyLinePlaceholder":1192},[51,91710,91711],{"class":53,"line":10760},[51,91712,91713],{"class":57},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[51,91715,91716],{"class":53,"line":10765},[51,91717,91718],{"class":57},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[51,91720,91721],{"class":53,"line":10774},[51,91722,91723],{"class":57},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[51,91725,91726],{"class":53,"line":10779},[51,91727,91728],{"class":57},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[51,91730,91731,91733,91735],{"class":53,"line":10785},[51,91732,53381],{"class":72},[51,91734,52777],{"class":52264},[51,91736,52271],{"class":72},[51,91738,91739,91741,91743],{"class":53,"line":10806},[51,91740,52749],{"class":72},[51,91742,52764],{"class":52264},[51,91744,52271],{"class":72},[51,91746,91747],{"class":53,"line":10812},[51,91748,3480],{"emptyLinePlaceholder":1192},[51,91750,91751,91753,91755],{"class":53,"line":10826},[51,91752,52749],{"class":72},[51,91754,51599],{"class":52264},[51,91756,52271],{"class":72},[1233,91758,91760],{"id":91759},"_4172-节流","4.17.2 节流",[40,91762,91763],{},[2564,91764],{"alt":35,"src":91765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[40,91767,91768],{},[2564,91769],{"alt":35,"src":91770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[40,91772,91773],{},[840,91774,91775],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[40,91777,91778],{},"实现方式：",[1000,91780,91781],{},[22,91782,91783],{},"lodash 提供的节流函数来处理",[40,91785,91786],{},"_.throttle(func,[wait=0],[options=])",[40,91788,91789],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[29,91791,91793],{"className":51597,"code":91792,"language":51599,"meta":35,"style":35},"\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",[37,91794,91795,91805,91819,91823,91831,91845,91865,91877,91885,91891,91901,91913,91925,91935,91947,91957,91967,91979,91983,91991,91999,92003,92011,92029,92047,92055,92073,92083,92091,92101,92105,92109,92113,92118,92123,92144,92152,92160,92164],{"__ignoreMap":35},[51,91796,91797,91799,91801,91803],{"class":53,"line":54},[51,91798,52261],{"class":72},[51,91800,52265],{"class":52264},[51,91802,52268],{"class":68},[51,91804,52271],{"class":72},[51,91806,91807,91809,91811,91813,91815,91817],{"class":53,"line":61},[51,91808,2154],{"class":72},[51,91810,51599],{"class":52264},[51,91812,52280],{"class":68},[51,91814,108],{"class":72},[51,91816,52285],{"class":282},[51,91818,52271],{"class":72},[51,91820,91821],{"class":53,"line":93},[51,91822,3480],{"emptyLinePlaceholder":1192},[51,91824,91825,91827,91829],{"class":53,"line":99},[51,91826,2154],{"class":72},[51,91828,52298],{"class":52264},[51,91830,52271],{"class":72},[51,91832,91833,91835,91837,91839,91841,91843],{"class":53,"line":120},[51,91834,53108],{"class":72},[51,91836,52308],{"class":52264},[51,91838,52311],{"class":68},[51,91840,108],{"class":72},[51,91842,52316],{"class":282},[51,91844,52271],{"class":72},[51,91846,91847,91849,91851,91853,91855,91857,91859,91861,91863],{"class":53,"line":129},[51,91848,53108],{"class":72},[51,91850,52308],{"class":52264},[51,91852,15882],{"class":68},[51,91854,108],{"class":72},[51,91856,52355],{"class":282},[51,91858,52335],{"class":68},[51,91860,108],{"class":72},[51,91862,52362],{"class":282},[51,91864,52271],{"class":72},[51,91866,91867,91869,91871,91873,91875],{"class":53,"line":206},[51,91868,53108],{"class":72},[51,91870,52371],{"class":52264},[51,91872,52374],{"class":72},[51,91874,52371],{"class":52264},[51,91876,52271],{"class":72},[51,91878,91879,91881,91883],{"class":53,"line":212},[51,91880,53108],{"class":72},[51,91882,1179],{"class":52264},[51,91884,52271],{"class":72},[51,91886,91887,91889],{"class":53,"line":227},[51,91888,55716],{"class":68},[51,91890,16534],{"class":72},[51,91892,91893,91895,91897,91899],{"class":53,"line":370},[51,91894,73560],{"class":175},[51,91896,52401],{"class":72},[51,91898,61469],{"class":175},[51,91900,179],{"class":72},[51,91902,91903,91905,91907,91909,91911],{"class":53,"line":387},[51,91904,55735],{"class":175},[51,91906,52401],{"class":72},[51,91908,2812],{"class":175},[51,91910,52456],{"class":64},[51,91912,179],{"class":72},[51,91914,91915,91917,91919,91921,91923],{"class":53,"line":404},[51,91916,55749],{"class":175},[51,91918,52401],{"class":72},[51,91920,2812],{"class":175},[51,91922,52456],{"class":64},[51,91924,179],{"class":72},[51,91926,91927,91929,91931,91933],{"class":53,"line":415},[51,91928,55848],{"class":175},[51,91930,52401],{"class":72},[51,91932,90970],{"class":175},[51,91934,179],{"class":72},[51,91936,91937,91939,91941,91943,91945],{"class":53,"line":420},[51,91938,55886],{"class":175},[51,91940,52401],{"class":72},[51,91942,2070],{"class":175},[51,91944,52456],{"class":64},[51,91946,179],{"class":72},[51,91948,91949,91951,91953,91955],{"class":53,"line":429},[51,91950,58380],{"class":175},[51,91952,52401],{"class":72},[51,91954,61806],{"class":175},[51,91956,179],{"class":72},[51,91958,91959,91961,91963,91965],{"class":53,"line":434},[51,91960,58250],{"class":175},[51,91962,52401],{"class":72},[51,91964,52556],{"class":175},[51,91966,179],{"class":72},[51,91968,91969,91971,91973,91975,91977],{"class":53,"line":448},[51,91970,91009],{"class":175},[51,91972,52401],{"class":72},[51,91974,1568],{"class":175},[51,91976,52456],{"class":64},[51,91978,179],{"class":72},[51,91980,91981],{"class":53,"line":462},[51,91982,3267],{"class":72},[51,91984,91985,91987,91989],{"class":53,"line":470},[51,91986,53381],{"class":72},[51,91988,1179],{"class":52264},[51,91990,52271],{"class":72},[51,91992,91993,91995,91997],{"class":53,"line":2783},[51,91994,52749],{"class":72},[51,91996,52298],{"class":52264},[51,91998,52271],{"class":72},[51,92000,92001],{"class":53,"line":2788},[51,92002,3480],{"emptyLinePlaceholder":1192},[51,92004,92005,92007,92009],{"class":53,"line":2817},[51,92006,2154],{"class":72},[51,92008,52764],{"class":52264},[51,92010,52271],{"class":72},[51,92012,92013,92015,92017,92019,92021,92023,92025,92027],{"class":53,"line":2822},[51,92014,53108],{"class":72},[51,92016,52575],{"class":52264},[51,92018,54450],{"class":68},[51,92020,108],{"class":72},[51,92022,54455],{"class":282},[51,92024,56278],{"class":72},[51,92026,52575],{"class":52264},[51,92028,52271],{"class":72},[51,92030,92031,92033,92035,92037,92039,92041,92043,92045],{"class":53,"line":2839},[51,92032,53108],{"class":72},[51,92034,52777],{"class":52264},[51,92036,56203],{"class":68},[51,92038,108],{"class":72},[51,92040,89238],{"class":282},[51,92042,56278],{"class":72},[51,92044,52777],{"class":52264},[51,92046,52271],{"class":72},[51,92048,92049,92051,92053],{"class":53,"line":2844},[51,92050,53108],{"class":72},[51,92052,52777],{"class":52264},[51,92054,52271],{"class":72},[51,92056,92057,92059,92061,92063,92065,92067,92069,92071],{"class":53,"line":2849},[51,92058,12183],{"class":64},[51,92060,87897],{"class":175},[51,92062,14526],{"class":64},[51,92064,55360],{"class":72},[51,92066,55363],{"class":68},[51,92068,73],{"class":72},[51,92070,91110],{"class":282},[51,92072,90],{"class":72},[51,92074,92075,92077,92079,92081],{"class":53,"line":2854},[51,92076,53183],{"class":64},[51,92078,10400],{"class":72},[51,92080,108],{"class":64},[51,92082,48297],{"class":175},[51,92084,92085,92087,92089],{"class":53,"line":2868},[51,92086,71048],{"class":64},[51,92088,91129],{"class":68},[51,92090,11815],{"class":72},[51,92092,92093,92095,92097,92099],{"class":53,"line":2873},[51,92094,91136],{"class":72},[51,92096,108],{"class":64},[51,92098,4109],{"class":72},[51,92100,3782],{"class":64},[51,92102,92103],{"class":53,"line":3657},[51,92104,91147],{"class":57},[51,92106,92107],{"class":53,"line":3671},[51,92108,3267],{"class":72},[51,92110,92111],{"class":53,"line":3679},[51,92112,91156],{"class":57},[51,92114,92115],{"class":53,"line":3684},[51,92116,92117],{"class":57},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[51,92119,92120],{"class":53,"line":3690},[51,92121,92122],{"class":57},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[51,92124,92125,92127,92129,92131,92133,92135,92138,92140,92142],{"class":53,"line":3696},[51,92126,91171],{"class":72},[51,92128,58777],{"class":68},[51,92130,73],{"class":72},[51,92132,91178],{"class":282},[51,92134,91181],{"class":72},[51,92136,92137],{"class":68},"throttle",[51,92139,91187],{"class":72},[51,92141,66038],{"class":175},[51,92143,31461],{"class":72},[51,92145,92146,92148,92150],{"class":53,"line":3701},[51,92147,53381],{"class":72},[51,92149,52777],{"class":52264},[51,92151,52271],{"class":72},[51,92153,92154,92156,92158],{"class":53,"line":8910},[51,92155,52749],{"class":72},[51,92157,52764],{"class":52264},[51,92159,52271],{"class":72},[51,92161,92162],{"class":53,"line":8934},[51,92163,3480],{"emptyLinePlaceholder":1192},[51,92165,92166,92168,92170],{"class":53,"line":8939},[51,92167,52749],{"class":72},[51,92169,51599],{"class":52264},[51,92171,52271],{"class":72},[1000,92173,92174],{},[22,92175,92176],{},"手写一个节流函数来处理",[40,92178,71916],{},[40,92180,91230],{},[40,92182,92183],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[40,92185,92186],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[29,92188,92190],{"className":51597,"code":92189,"language":51599,"meta":35,"style":35},"\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",[37,92191,92192,92202,92216,92220,92228,92242,92262,92274,92282,92288,92298,92310,92322,92332,92344,92354,92364,92376,92380,92388,92396,92400,92408,92426,92444,92452,92470,92480,92488,92498,92502,92506,92510,92515,92520,92525,92530,92535,92540,92557,92563,92571,92582,92597,92604,92609,92614,92624,92629,92634,92639,92643,92647,92651,92671,92679,92687,92691],{"__ignoreMap":35},[51,92193,92194,92196,92198,92200],{"class":53,"line":54},[51,92195,52261],{"class":72},[51,92197,52265],{"class":52264},[51,92199,52268],{"class":68},[51,92201,52271],{"class":72},[51,92203,92204,92206,92208,92210,92212,92214],{"class":53,"line":61},[51,92205,2154],{"class":72},[51,92207,51599],{"class":52264},[51,92209,52280],{"class":68},[51,92211,108],{"class":72},[51,92213,52285],{"class":282},[51,92215,52271],{"class":72},[51,92217,92218],{"class":53,"line":93},[51,92219,3480],{"emptyLinePlaceholder":1192},[51,92221,92222,92224,92226],{"class":53,"line":99},[51,92223,2154],{"class":72},[51,92225,52298],{"class":52264},[51,92227,52271],{"class":72},[51,92229,92230,92232,92234,92236,92238,92240],{"class":53,"line":120},[51,92231,53108],{"class":72},[51,92233,52308],{"class":52264},[51,92235,52311],{"class":68},[51,92237,108],{"class":72},[51,92239,52316],{"class":282},[51,92241,52271],{"class":72},[51,92243,92244,92246,92248,92250,92252,92254,92256,92258,92260],{"class":53,"line":129},[51,92245,53108],{"class":72},[51,92247,52308],{"class":52264},[51,92249,15882],{"class":68},[51,92251,108],{"class":72},[51,92253,52355],{"class":282},[51,92255,52335],{"class":68},[51,92257,108],{"class":72},[51,92259,52362],{"class":282},[51,92261,52271],{"class":72},[51,92263,92264,92266,92268,92270,92272],{"class":53,"line":206},[51,92265,53108],{"class":72},[51,92267,52371],{"class":52264},[51,92269,52374],{"class":72},[51,92271,52371],{"class":52264},[51,92273,52271],{"class":72},[51,92275,92276,92278,92280],{"class":53,"line":212},[51,92277,53108],{"class":72},[51,92279,1179],{"class":52264},[51,92281,52271],{"class":72},[51,92283,92284,92286],{"class":53,"line":227},[51,92285,55716],{"class":68},[51,92287,16534],{"class":72},[51,92289,92290,92292,92294,92296],{"class":53,"line":370},[51,92291,73560],{"class":175},[51,92293,52401],{"class":72},[51,92295,61469],{"class":175},[51,92297,179],{"class":72},[51,92299,92300,92302,92304,92306,92308],{"class":53,"line":387},[51,92301,55735],{"class":175},[51,92303,52401],{"class":72},[51,92305,2812],{"class":175},[51,92307,52456],{"class":64},[51,92309,179],{"class":72},[51,92311,92312,92314,92316,92318,92320],{"class":53,"line":404},[51,92313,55749],{"class":175},[51,92315,52401],{"class":72},[51,92317,2812],{"class":175},[51,92319,52456],{"class":64},[51,92321,179],{"class":72},[51,92323,92324,92326,92328,92330],{"class":53,"line":415},[51,92325,55848],{"class":175},[51,92327,52401],{"class":72},[51,92329,90970],{"class":175},[51,92331,179],{"class":72},[51,92333,92334,92336,92338,92340,92342],{"class":53,"line":420},[51,92335,55886],{"class":175},[51,92337,52401],{"class":72},[51,92339,2070],{"class":175},[51,92341,52456],{"class":64},[51,92343,179],{"class":72},[51,92345,92346,92348,92350,92352],{"class":53,"line":429},[51,92347,58380],{"class":175},[51,92349,52401],{"class":72},[51,92351,61806],{"class":175},[51,92353,179],{"class":72},[51,92355,92356,92358,92360,92362],{"class":53,"line":434},[51,92357,58250],{"class":175},[51,92359,52401],{"class":72},[51,92361,52556],{"class":175},[51,92363,179],{"class":72},[51,92365,92366,92368,92370,92372,92374],{"class":53,"line":448},[51,92367,91009],{"class":175},[51,92369,52401],{"class":72},[51,92371,1568],{"class":175},[51,92373,52456],{"class":64},[51,92375,179],{"class":72},[51,92377,92378],{"class":53,"line":462},[51,92379,3267],{"class":72},[51,92381,92382,92384,92386],{"class":53,"line":470},[51,92383,53381],{"class":72},[51,92385,1179],{"class":52264},[51,92387,52271],{"class":72},[51,92389,92390,92392,92394],{"class":53,"line":2783},[51,92391,52749],{"class":72},[51,92393,52298],{"class":52264},[51,92395,52271],{"class":72},[51,92397,92398],{"class":53,"line":2788},[51,92399,3480],{"emptyLinePlaceholder":1192},[51,92401,92402,92404,92406],{"class":53,"line":2817},[51,92403,2154],{"class":72},[51,92405,52764],{"class":52264},[51,92407,52271],{"class":72},[51,92409,92410,92412,92414,92416,92418,92420,92422,92424],{"class":53,"line":2822},[51,92411,53108],{"class":72},[51,92413,52575],{"class":52264},[51,92415,54450],{"class":68},[51,92417,108],{"class":72},[51,92419,54455],{"class":282},[51,92421,56278],{"class":72},[51,92423,52575],{"class":52264},[51,92425,52271],{"class":72},[51,92427,92428,92430,92432,92434,92436,92438,92440,92442],{"class":53,"line":2839},[51,92429,53108],{"class":72},[51,92431,52777],{"class":52264},[51,92433,56203],{"class":68},[51,92435,108],{"class":72},[51,92437,89238],{"class":282},[51,92439,56278],{"class":72},[51,92441,52777],{"class":52264},[51,92443,52271],{"class":72},[51,92445,92446,92448,92450],{"class":53,"line":2844},[51,92447,53108],{"class":72},[51,92449,52777],{"class":52264},[51,92451,52271],{"class":72},[51,92453,92454,92456,92458,92460,92462,92464,92466,92468],{"class":53,"line":2849},[51,92455,12183],{"class":64},[51,92457,87897],{"class":175},[51,92459,14526],{"class":64},[51,92461,55360],{"class":72},[51,92463,55363],{"class":68},[51,92465,73],{"class":72},[51,92467,91110],{"class":282},[51,92469,90],{"class":72},[51,92471,92472,92474,92476,92478],{"class":53,"line":2854},[51,92473,53183],{"class":64},[51,92475,10400],{"class":72},[51,92477,108],{"class":64},[51,92479,48297],{"class":175},[51,92481,92482,92484,92486],{"class":53,"line":2868},[51,92483,71048],{"class":64},[51,92485,91129],{"class":68},[51,92487,11815],{"class":72},[51,92489,92490,92492,92494,92496],{"class":53,"line":2873},[51,92491,91136],{"class":72},[51,92493,108],{"class":64},[51,92495,4109],{"class":72},[51,92497,3782],{"class":64},[51,92499,92500],{"class":53,"line":3657},[51,92501,91147],{"class":57},[51,92503,92504],{"class":53,"line":3671},[51,92505,3267],{"class":72},[51,92507,92508],{"class":53,"line":3679},[51,92509,91156],{"class":57},[51,92511,92512],{"class":53,"line":3684},[51,92513,92514],{"class":57},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[51,92516,92517],{"class":53,"line":3690},[51,92518,92519],{"class":57},"    \u002F\u002F 1.声明一个定时器变量\n",[51,92521,92522],{"class":53,"line":3696},[51,92523,92524],{"class":57},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[51,92526,92527],{"class":53,"line":3701},[51,92528,92529],{"class":57},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[51,92531,92532],{"class":53,"line":8910},[51,92533,92534],{"class":57},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[51,92536,92537],{"class":53,"line":8934},[51,92538,92539],{"class":57},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[51,92541,92542,92544,92547,92549,92551,92553,92555],{"class":53,"line":8939},[51,92543,71048],{"class":64},[51,92545,92546],{"class":68}," throttle",[51,92548,73],{"class":72},[51,92550,91601],{"class":78},[51,92552,13397],{"class":72},[51,92554,1965],{"class":78},[51,92556,13404],{"class":72},[51,92558,92559,92561],{"class":53,"line":8945},[51,92560,80736],{"class":64},[51,92562,91614],{"class":72},[51,92564,92565,92567,92569],{"class":53,"line":8972},[51,92566,74946],{"class":64},[51,92568,59882],{"class":64},[51,92570,55416],{"class":72},[51,92572,92573,92575,92577,92579],{"class":53,"line":8977},[51,92574,3577],{"class":64},[51,92576,2750],{"class":72},[51,92578,1479],{"class":64},[51,92580,92581],{"class":72},"timer) {\n",[51,92583,92584,92587,92589,92591,92593,92595],{"class":53,"line":8983},[51,92585,92586],{"class":72},"          timer ",[51,92588,108],{"class":64},[51,92590,91655],{"class":68},[51,92592,73],{"class":72},[51,92594,55413],{"class":64},[51,92596,55416],{"class":72},[51,92598,92599,92602],{"class":53,"line":8995},[51,92600,92601],{"class":68},"            fn",[51,92603,154],{"class":72},[51,92605,92606],{"class":53,"line":9007},[51,92607,92608],{"class":57},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[51,92610,92611],{"class":53,"line":9019},[51,92612,92613],{"class":57},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[51,92615,92616,92619,92621],{"class":53,"line":10678},[51,92617,92618],{"class":72},"            timer ",[51,92620,108],{"class":64},[51,92622,92623],{"class":175}," null\n",[51,92625,92626],{"class":53,"line":10703},[51,92627,92628],{"class":57},"            \u002F\u002F 不能用clearTimeout(timer)\n",[51,92630,92631],{"class":53,"line":10726},[51,92632,92633],{"class":57},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[51,92635,92636],{"class":53,"line":10750},[51,92637,92638],{"class":72},"          }, t)\n",[51,92640,92641],{"class":53,"line":10755},[51,92642,3609],{"class":72},[51,92644,92645],{"class":53,"line":10760},[51,92646,53362],{"class":72},[51,92648,92649],{"class":53,"line":10765},[51,92650,3267],{"class":72},[51,92652,92653,92655,92657,92659,92661,92663,92665,92667,92669],{"class":53,"line":10774},[51,92654,91171],{"class":72},[51,92656,58777],{"class":68},[51,92658,73],{"class":72},[51,92660,91178],{"class":282},[51,92662,13397],{"class":72},[51,92664,92137],{"class":68},[51,92666,91187],{"class":72},[51,92668,66038],{"class":175},[51,92670,31461],{"class":72},[51,92672,92673,92675,92677],{"class":53,"line":10779},[51,92674,53381],{"class":72},[51,92676,52777],{"class":52264},[51,92678,52271],{"class":72},[51,92680,92681,92683,92685],{"class":53,"line":10785},[51,92682,52749],{"class":72},[51,92684,52764],{"class":52264},[51,92686,52271],{"class":72},[51,92688,92689],{"class":53,"line":10806},[51,92690,3480],{"emptyLinePlaceholder":1192},[51,92692,92693,92695,92697],{"class":53,"line":10812},[51,92694,52749],{"class":72},[51,92696,51599],{"class":52264},[51,92698,52271],{"class":72},[1233,92700,92702],{"id":92701},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[29,92704,92706],{"className":54031,"code":92705,"language":54033,"meta":35,"style":35},"\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",[37,92707,92708,92716,92724,92729,92734,92739,92744,92748,92756],{"__ignoreMap":35},[51,92709,92710,92712,92714],{"class":53,"line":54},[51,92711,2154],{"class":72},[51,92713,52764],{"class":52264},[51,92715,52271],{"class":72},[51,92717,92718,92720,92722],{"class":53,"line":61},[51,92719,53108],{"class":72},[51,92721,52777],{"class":52264},[51,92723,52271],{"class":72},[51,92725,92726],{"class":53,"line":93},[51,92727,92728],{"class":72},"    let timer = null\n",[51,92730,92731],{"class":53,"line":99},[51,92732,92733],{"class":72},"    timer = setTimeout(() => {\n",[51,92735,92736],{"class":53,"line":120},[51,92737,92738],{"class":72},"      clearTimeout(timer)\n",[51,92740,92741],{"class":53,"line":129},[51,92742,92743],{"class":72},"      console.log(timer)\n",[51,92745,92746],{"class":53,"line":206},[51,92747,61189],{"class":72},[51,92749,92750,92752,92754],{"class":53,"line":212},[51,92751,53381],{"class":72},[51,92753,52777],{"class":52264},[51,92755,52271],{"class":72},[51,92757,92758,92760,92762],{"class":53,"line":227},[51,92759,52749],{"class":72},[51,92761,52764],{"class":52264},[51,92763,52271],{"class":72},[40,92765,92766],{},"输出为1",[40,92768,92769],{},"在开启的定时器里边写清除定时器",[40,92771,92772],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[1233,92774,92776],{"id":92775},"_4174-节流综合案例","4.17.4 节流综合案例",[40,92778,92779],{},"页面打开，可以记录上一次的视频播放位置",[40,92781,92782],{},[2564,92783],{"alt":35,"src":92784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[40,92786,92787],{},[2564,92788],{"alt":35,"src":92789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[29,92791,92793],{"className":51597,"code":92792,"language":51599,"meta":35,"style":35},"\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",[37,92794,92795,92805,92819,92823,92831,92845,92865,92885,92907,92920,92928,92934,92944,92954,92964,92968,92972,92979,92992,93004,93008,93012,93022,93034,93048,93052,93056,93063,93073,93086,93098,93108,93118,93134,93146,93150,93154,93162,93172,93184,93194,93204,93214,93218,93222,93232,93243,93247,93255,93263,93267,93275,93290,93305,93320,93341,93349,93357,93372,93394,93402,93417,93443,93469,93495,93503,93511,93530,93538,93543,93562,93567,93585,93590,93595,93603,93608,93622,93630,93635,93652,93656,93661,93683,93687,93695,93703,93707],{"__ignoreMap":35},[51,92796,92797,92799,92801,92803],{"class":53,"line":54},[51,92798,52261],{"class":72},[51,92800,52265],{"class":52264},[51,92802,52268],{"class":68},[51,92804,52271],{"class":72},[51,92806,92807,92809,92811,92813,92815,92817],{"class":53,"line":61},[51,92808,2154],{"class":72},[51,92810,51599],{"class":52264},[51,92812,52280],{"class":68},[51,92814,108],{"class":72},[51,92816,52285],{"class":282},[51,92818,52271],{"class":72},[51,92820,92821],{"class":53,"line":93},[51,92822,3480],{"emptyLinePlaceholder":1192},[51,92824,92825,92827,92829],{"class":53,"line":99},[51,92826,2154],{"class":72},[51,92828,52298],{"class":52264},[51,92830,52271],{"class":72},[51,92832,92833,92835,92837,92839,92841,92843],{"class":53,"line":120},[51,92834,53108],{"class":72},[51,92836,52308],{"class":52264},[51,92838,52311],{"class":68},[51,92840,108],{"class":72},[51,92842,52316],{"class":282},[51,92844,60091],{"class":72},[51,92846,92847,92849,92851,92853,92855,92857,92859,92861,92863],{"class":53,"line":129},[51,92848,53108],{"class":72},[51,92850,52308],{"class":52264},[51,92852,52327],{"class":68},[51,92854,108],{"class":72},[51,92856,52332],{"class":282},[51,92858,52335],{"class":68},[51,92860,108],{"class":72},[51,92862,52340],{"class":282},[51,92864,60091],{"class":72},[51,92866,92867,92869,92871,92873,92875,92877,92879,92881,92883],{"class":53,"line":206},[51,92868,53108],{"class":72},[51,92870,52308],{"class":52264},[51,92872,15882],{"class":68},[51,92874,108],{"class":72},[51,92876,52355],{"class":282},[51,92878,52335],{"class":68},[51,92880,108],{"class":72},[51,92882,52362],{"class":282},[51,92884,60091],{"class":72},[51,92886,92887,92889,92891,92893,92895,92898,92900,92902,92905],{"class":53,"line":212},[51,92888,53108],{"class":72},[51,92890,52308],{"class":52264},[51,92892,15882],{"class":68},[51,92894,108],{"class":72},[51,92896,92897],{"class":282},"\"referrer\"",[51,92899,52335],{"class":68},[51,92901,108],{"class":72},[51,92903,92904],{"class":282},"\"never\"",[51,92906,60091],{"class":72},[51,92908,92909,92911,92913,92916,92918],{"class":53,"line":227},[51,92910,53108],{"class":72},[51,92912,52371],{"class":52264},[51,92914,92915],{"class":72},">综合案例\u003C\u002F",[51,92917,52371],{"class":52264},[51,92919,52271],{"class":72},[51,92921,92922,92924,92926],{"class":53,"line":370},[51,92923,53108],{"class":72},[51,92925,1179],{"class":52264},[51,92927,52271],{"class":72},[51,92929,92930,92932],{"class":53,"line":387},[51,92931,7365],{"class":52264},[51,92933,16534],{"class":72},[51,92935,92936,92938,92940,92942],{"class":53,"line":404},[51,92937,55659],{"class":175},[51,92939,52401],{"class":72},[51,92941,176],{"class":175},[51,92943,179],{"class":72},[51,92945,92946,92948,92950,92952],{"class":53,"line":415},[51,92947,55670],{"class":175},[51,92949,52401],{"class":72},[51,92951,176],{"class":175},[51,92953,179],{"class":72},[51,92955,92956,92958,92960,92962],{"class":53,"line":420},[51,92957,73560],{"class":175},[51,92959,52401],{"class":72},[51,92961,61469],{"class":175},[51,92963,179],{"class":72},[51,92965,92966],{"class":53,"line":429},[51,92967,3267],{"class":72},[51,92969,92970],{"class":53,"line":434},[51,92971,3480],{"emptyLinePlaceholder":1192},[51,92973,92974,92977],{"class":53,"line":448},[51,92975,92976],{"class":68},"    .container",[51,92978,16534],{"class":72},[51,92980,92981,92983,92985,92988,92990],{"class":53,"line":462},[51,92982,55735],{"class":175},[51,92984,52401],{"class":72},[51,92986,92987],{"class":175},"1200",[51,92989,52456],{"class":64},[51,92991,179],{"class":72},[51,92993,92994,92996,92998,93000,93002],{"class":53,"line":470},[51,92995,55670],{"class":175},[51,92997,52401],{"class":72},[51,92999,176],{"class":175},[51,93001,52520],{"class":175},[51,93003,179],{"class":72},[51,93005,93006],{"class":53,"line":2783},[51,93007,3267],{"class":72},[51,93009,93010],{"class":53,"line":2788},[51,93011,3480],{"emptyLinePlaceholder":1192},[51,93013,93014,93017,93020],{"class":53,"line":2817},[51,93015,93016],{"class":68},"    .video",[51,93018,93019],{"class":52264}," video",[51,93021,16534],{"class":72},[51,93023,93024,93026,93028,93030,93032],{"class":53,"line":2822},[51,93025,55735],{"class":175},[51,93027,52401],{"class":72},[51,93029,612],{"class":175},[51,93031,1577],{"class":64},[51,93033,179],{"class":72},[51,93035,93036,93038,93040,93042,93044,93046],{"class":53,"line":2839},[51,93037,55659],{"class":175},[51,93039,52401],{"class":72},[51,93041,457],{"class":175},[51,93043,52456],{"class":64},[51,93045,5169],{"class":175},[51,93047,179],{"class":72},[51,93049,93050],{"class":53,"line":2844},[51,93051,3267],{"class":72},[51,93053,93054],{"class":53,"line":2849},[51,93055,3480],{"emptyLinePlaceholder":1192},[51,93057,93058,93061],{"class":53,"line":2854},[51,93059,93060],{"class":68},"    .elevator",[51,93062,16534],{"class":72},[51,93064,93065,93067,93069,93071],{"class":53,"line":2868},[51,93066,55723],{"class":175},[51,93068,52401],{"class":72},[51,93070,87197],{"class":175},[51,93072,179],{"class":72},[51,93074,93075,93077,93079,93082,93084],{"class":53,"line":2873},[51,93076,55911],{"class":175},[51,93078,52401],{"class":72},[51,93080,93081],{"class":175},"280",[51,93083,52456],{"class":64},[51,93085,179],{"class":72},[51,93087,93088,93090,93092,93094,93096],{"class":53,"line":3657},[51,93089,87391],{"class":175},[51,93091,52401],{"class":72},[51,93093,457],{"class":175},[51,93095,52456],{"class":64},[51,93097,179],{"class":72},[51,93099,93100,93102,93104,93106],{"class":53,"line":3671},[51,93101,87204],{"class":175},[51,93103,52401],{"class":72},[51,93105,87209],{"class":175},[51,93107,179],{"class":72},[51,93109,93110,93112,93114,93116],{"class":53,"line":3679},[51,93111,62685],{"class":175},[51,93113,52401],{"class":72},[51,93115,61806],{"class":175},[51,93117,179],{"class":72},[51,93119,93120,93122,93124,93126,93128,93130,93132],{"class":53,"line":3684},[51,93121,62941],{"class":175},[51,93123,52401],{"class":72},[51,93125,791],{"class":175},[51,93127,52456],{"class":64},[51,93129,52485],{"class":175},[51,93131,63208],{"class":175},[51,93133,179],{"class":72},[51,93135,93136,93138,93140,93142,93144],{"class":53,"line":3690},[51,93137,55735],{"class":175},[51,93139,52401],{"class":72},[51,93141,2151],{"class":175},[51,93143,52456],{"class":64},[51,93145,179],{"class":72},[51,93147,93148],{"class":53,"line":3696},[51,93149,3267],{"class":72},[51,93151,93152],{"class":53,"line":3701},[51,93153,3480],{"emptyLinePlaceholder":1192},[51,93155,93156,93158,93160],{"class":53,"line":8910},[51,93157,93060],{"class":68},[51,93159,170],{"class":52264},[51,93161,16534],{"class":72},[51,93163,93164,93166,93168,93170],{"class":53,"line":8934},[51,93165,55973],{"class":175},[51,93167,52401],{"class":72},[51,93169,61833],{"class":175},[51,93171,179],{"class":72},[51,93173,93174,93176,93178,93180,93182],{"class":53,"line":8939},[51,93175,55659],{"class":175},[51,93177,52401],{"class":72},[51,93179,443],{"class":175},[51,93181,52456],{"class":64},[51,93183,179],{"class":72},[51,93185,93186,93188,93190,93192],{"class":53,"line":8945},[51,93187,64934],{"class":175},[51,93189,52401],{"class":72},[51,93191,55701],{"class":175},[51,93193,179],{"class":72},[51,93195,93196,93198,93200,93202],{"class":53,"line":8972},[51,93197,58250],{"class":175},[51,93199,52401],{"class":72},[51,93201,52556],{"class":175},[51,93203,179],{"class":72},[51,93205,93206,93208,93210,93212],{"class":53,"line":8977},[51,93207,58380],{"class":175},[51,93209,52401],{"class":72},[51,93211,63034],{"class":175},[51,93213,179],{"class":72},[51,93215,93216],{"class":53,"line":8983},[51,93217,3267],{"class":72},[51,93219,93220],{"class":53,"line":8995},[51,93221,3480],{"emptyLinePlaceholder":1192},[51,93223,93224,93226,93228,93230],{"class":53,"line":9007},[51,93225,93060],{"class":68},[51,93227,170],{"class":52264},[51,93229,64988],{"class":68},[51,93231,16534],{"class":72},[51,93233,93234,93236,93238,93241],{"class":53,"line":9019},[51,93235,58380],{"class":175},[51,93237,52401],{"class":72},[51,93239,93240],{"class":175},"#1286ff",[51,93242,179],{"class":72},[51,93244,93245],{"class":53,"line":10678},[51,93246,3267],{"class":72},[51,93248,93249,93251,93253],{"class":53,"line":10703},[51,93250,53381],{"class":72},[51,93252,1179],{"class":52264},[51,93254,52271],{"class":72},[51,93256,93257,93259,93261],{"class":53,"line":10726},[51,93258,52749],{"class":72},[51,93260,52298],{"class":52264},[51,93262,52271],{"class":72},[51,93264,93265],{"class":53,"line":10750},[51,93266,3480],{"emptyLinePlaceholder":1192},[51,93268,93269,93271,93273],{"class":53,"line":10755},[51,93270,2154],{"class":72},[51,93272,52764],{"class":52264},[51,93274,52271],{"class":72},[51,93276,93277,93279,93281,93283,93285,93288],{"class":53,"line":10760},[51,93278,53108],{"class":72},[51,93280,52575],{"class":52264},[51,93282,54450],{"class":68},[51,93284,108],{"class":72},[51,93286,93287],{"class":282},"\"container\"",[51,93289,52271],{"class":72},[51,93291,93292,93294,93296,93298,93300,93303],{"class":53,"line":10765},[51,93293,52305],{"class":72},[51,93295,52575],{"class":52264},[51,93297,54450],{"class":68},[51,93299,108],{"class":72},[51,93301,93302],{"class":282},"\"header\"",[51,93304,52271],{"class":72},[51,93306,93307,93309,93311,93313,93315,93318],{"class":53,"line":10774},[51,93308,56198],{"class":72},[51,93310,981],{"class":52264},[51,93312,62021],{"class":68},[51,93314,108],{"class":72},[51,93316,93317],{"class":282},"\"http:\u002F\u002Fpip.itcast.cn\"",[51,93319,52271],{"class":72},[51,93321,93322,93324,93326,93328,93330,93333,93335,93337,93339],{"class":53,"line":10779},[51,93323,56266],{"class":72},[51,93325,2564],{"class":52264},[51,93327,56203],{"class":68},[51,93329,108],{"class":72},[51,93331,93332],{"class":282},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[51,93334,56211],{"class":68},[51,93336,108],{"class":72},[51,93338,8614],{"class":282},[51,93340,60091],{"class":72},[51,93342,93343,93345,93347],{"class":53,"line":10785},[51,93344,56371],{"class":72},[51,93346,981],{"class":52264},[51,93348,52271],{"class":72},[51,93350,93351,93353,93355],{"class":53,"line":10806},[51,93352,52740],{"class":72},[51,93354,52575],{"class":52264},[51,93356,52271],{"class":72},[51,93358,93359,93361,93363,93365,93367,93370],{"class":53,"line":10812},[51,93360,52305],{"class":72},[51,93362,52575],{"class":52264},[51,93364,54450],{"class":68},[51,93366,108],{"class":72},[51,93368,93369],{"class":282},"\"video\"",[51,93371,52271],{"class":72},[51,93373,93374,93376,93378,93380,93382,93385,93388,93390,93392],{"class":53,"line":10826},[51,93375,56198],{"class":72},[51,93377,29147],{"class":52264},[51,93379,56203],{"class":68},[51,93381,108],{"class":72},[51,93383,93384],{"class":282},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[51,93386,93387],{"class":68}," controls",[51,93389,56278],{"class":72},[51,93391,29147],{"class":52264},[51,93393,52271],{"class":72},[51,93395,93396,93398,93400],{"class":53,"line":10832},[51,93397,52740],{"class":72},[51,93399,52575],{"class":52264},[51,93401,52271],{"class":72},[51,93403,93404,93406,93408,93410,93412,93415],{"class":53,"line":10859},[51,93405,52305],{"class":72},[51,93407,52575],{"class":52264},[51,93409,54450],{"class":68},[51,93411,108],{"class":72},[51,93413,93414],{"class":282},"\"elevator\"",[51,93416,52271],{"class":72},[51,93418,93419,93421,93423,93425,93427,93429,93432,93434,93436,93439,93441],{"class":53,"line":10868},[51,93420,56198],{"class":72},[51,93422,981],{"class":52264},[51,93424,62021],{"class":68},[51,93426,108],{"class":72},[51,93428,65200],{"class":282},[51,93430,93431],{"class":68}," data-ref",[51,93433,108],{"class":72},[51,93435,93369],{"class":282},[51,93437,93438],{"class":72},">视频介绍\u003C\u002F",[51,93440,981],{"class":52264},[51,93442,52271],{"class":72},[51,93444,93445,93447,93449,93451,93453,93455,93457,93459,93462,93465,93467],{"class":53,"line":10874},[51,93446,56198],{"class":72},[51,93448,981],{"class":52264},[51,93450,62021],{"class":68},[51,93452,108],{"class":72},[51,93454,65200],{"class":282},[51,93456,93431],{"class":68},[51,93458,108],{"class":72},[51,93460,93461],{"class":282},"\"intro\"",[51,93463,93464],{"class":72},">课程简介\u003C\u002F",[51,93466,981],{"class":52264},[51,93468,52271],{"class":72},[51,93470,93471,93473,93475,93477,93479,93481,93483,93485,93488,93491,93493],{"class":53,"line":10882},[51,93472,56198],{"class":72},[51,93474,981],{"class":52264},[51,93476,62021],{"class":68},[51,93478,108],{"class":72},[51,93480,65200],{"class":282},[51,93482,93431],{"class":68},[51,93484,108],{"class":72},[51,93486,93487],{"class":282},"\"outline\"",[51,93489,93490],{"class":72},">评论列表\u003C\u002F",[51,93492,981],{"class":52264},[51,93494,52271],{"class":72},[51,93496,93497,93499,93501],{"class":53,"line":10887},[51,93498,52740],{"class":72},[51,93500,52575],{"class":52264},[51,93502,52271],{"class":72},[51,93504,93505,93507,93509],{"class":53,"line":17566},[51,93506,53381],{"class":72},[51,93508,52575],{"class":52264},[51,93510,52271],{"class":72},[51,93512,93513,93515,93517,93519,93521,93524,93526,93528],{"class":53,"line":17572},[51,93514,53108],{"class":72},[51,93516,52777],{"class":52264},[51,93518,56203],{"class":68},[51,93520,108],{"class":72},[51,93522,93523],{"class":282},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[51,93525,56278],{"class":72},[51,93527,52777],{"class":52264},[51,93529,52271],{"class":72},[51,93531,93532,93534,93536],{"class":53,"line":17595},[51,93533,53108],{"class":72},[51,93535,52777],{"class":52264},[51,93537,52271],{"class":72},[51,93539,93540],{"class":53,"line":17601},[51,93541,93542],{"class":57},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[51,93544,93545,93547,93549,93551,93553,93555,93557,93560],{"class":53,"line":17624},[51,93546,12183],{"class":64},[51,93548,93019],{"class":175},[51,93550,14526],{"class":64},[51,93552,55360],{"class":72},[51,93554,55363],{"class":68},[51,93556,73],{"class":72},[51,93558,93559],{"class":282},"'video'",[51,93561,90],{"class":72},[51,93563,93564],{"class":53,"line":17638},[51,93565,93566],{"class":57},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[51,93568,93569,93572,93574,93576,93578,93581,93583],{"class":53,"line":17658},[51,93570,93571],{"class":72},"    video.ontimeupdate ",[51,93573,108],{"class":64},[51,93575,89319],{"class":72},[51,93577,92137],{"class":68},[51,93579,93580],{"class":72},"(() ",[51,93582,85686],{"class":64},[51,93584,16534],{"class":72},[51,93586,93587],{"class":53,"line":17664},[51,93588,93589],{"class":57},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[51,93591,93592],{"class":53,"line":17675},[51,93593,93594],{"class":57},"      \u002F\u002F 控制台输出当前的时间\n",[51,93596,93597,93600],{"class":53,"line":17698},[51,93598,93599],{"class":57},"      \u002F\u002F console.log(video.currentTime)",[51,93601,93602],{"class":57},"  \u002F\u002F获得当前的视频时间\n",[51,93604,93605],{"class":53,"line":17720},[51,93606,93607],{"class":57},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[51,93609,93610,93612,93614,93616,93619],{"class":53,"line":17725},[51,93611,75647],{"class":72},[51,93613,72618],{"class":68},[51,93615,73],{"class":72},[51,93617,93618],{"class":282},"'currentTime'",[51,93620,93621],{"class":72},", video.currentTime)\n",[51,93623,93624,93626,93628],{"class":53,"line":17731},[51,93625,55499],{"class":72},[51,93627,7372],{"class":175},[51,93629,90],{"class":72},[51,93631,93632],{"class":53,"line":17745},[51,93633,93634],{"class":57},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[51,93636,93637,93640,93643,93645,93648,93650],{"class":53,"line":17758},[51,93638,93639],{"class":72},"    video.",[51,93641,93642],{"class":68},"onloadeddata",[51,93644,14526],{"class":64},[51,93646,93647],{"class":72}," () ",[51,93649,85686],{"class":64},[51,93651,16534],{"class":72},[51,93653,93654],{"class":53,"line":17763},[51,93655,60976],{"class":57},[51,93657,93658],{"class":53,"line":17777},[51,93659,93660],{"class":57},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[51,93662,93663,93666,93668,93671,93673,93675,93677,93679,93681],{"class":53,"line":17782},[51,93664,93665],{"class":72},"      video.currentTime ",[51,93667,108],{"class":64},[51,93669,93670],{"class":72}," localStorage.",[51,93672,72649],{"class":68},[51,93674,73],{"class":72},[51,93676,93618],{"class":282},[51,93678,14676],{"class":72},[51,93680,72321],{"class":64},[51,93682,48297],{"class":175},[51,93684,93685],{"class":53,"line":17788},[51,93686,3267],{"class":72},[51,93688,93689,93691,93693],{"class":53,"line":17793},[51,93690,53381],{"class":72},[51,93692,52777],{"class":52264},[51,93694,52271],{"class":72},[51,93696,93697,93699,93701],{"class":53,"line":17807},[51,93698,52749],{"class":72},[51,93700,52764],{"class":52264},[51,93702,52271],{"class":72},[51,93704,93705],{"class":53,"line":17812},[51,93706,3480],{"emptyLinePlaceholder":1192},[51,93708,93709,93711,93713],{"class":53,"line":17817},[51,93710,52749],{"class":72},[51,93712,51599],{"class":52264},[51,93714,52271],{"class":72},[1179,93716,93717],{},"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":35,"searchDepth":61,"depth":61,"links":93719},[93720,93725,93729,93730,93731,93736,93741,93742,93743,93744,93751,93756,93757,93767,93771,93772,93776],{"id":77655,"depth":61,"text":77656,"children":93721},[93722,93723,93724],{"id":77659,"depth":93,"text":77660},{"id":77684,"depth":93,"text":77685},{"id":77696,"depth":93,"text":77697},{"id":77708,"depth":61,"text":77709,"children":93726},[93727,93728],{"id":77712,"depth":93,"text":77713},{"id":77727,"depth":93,"text":77728},{"id":77779,"depth":61,"text":77780},{"id":77823,"depth":61,"text":77824},{"id":77840,"depth":61,"text":77841,"children":93732},[93733,93734,93735],{"id":77844,"depth":93,"text":77845},{"id":77857,"depth":93,"text":77858},{"id":77962,"depth":93,"text":77963},{"id":78251,"depth":61,"text":78252,"children":93737},[93738,93739,93740],{"id":78255,"depth":93,"text":78256},{"id":78698,"depth":93,"text":78699},{"id":79109,"depth":93,"text":79110},{"id":79172,"depth":61,"text":79173},{"id":79251,"depth":61,"text":79252},{"id":79344,"depth":61,"text":79345},{"id":81189,"depth":61,"text":81190,"children":93745},[93746,93747,93748,93749,93750],{"id":81193,"depth":93,"text":81194},{"id":81205,"depth":93,"text":81206},{"id":81424,"depth":93,"text":81425},{"id":81442,"depth":93,"text":81443},{"id":81502,"depth":93,"text":81503},{"id":85770,"depth":61,"text":85771,"children":93752},[93753,93754,93755],{"id":85774,"depth":93,"text":85775},{"id":85792,"depth":93,"text":85793},{"id":85818,"depth":93,"text":85819},{"id":85827,"depth":61,"text":85828},{"id":85849,"depth":61,"text":85850,"children":93758},[93759,93760,93761,93762,93763,93764,93765,93766],{"id":85853,"depth":93,"text":85854},{"id":86114,"depth":93,"text":86115},{"id":86300,"depth":93,"text":86301},{"id":86667,"depth":93,"text":86668},{"id":86783,"depth":93,"text":86784},{"id":86819,"depth":93,"text":86820},{"id":86866,"depth":93,"text":86867},{"id":86900,"depth":93,"text":86901},{"id":88263,"depth":61,"text":88264,"children":93768},[93769,93770],{"id":88267,"depth":93,"text":88268},{"id":88304,"depth":93,"text":88305},{"id":89659,"depth":61,"text":89660},{"id":90030,"depth":61,"text":90031,"children":93773},[93774,93775],{"id":90034,"depth":93,"text":90035},{"id":90068,"depth":93,"text":90069},{"id":90797,"depth":61,"text":90798,"children":93777},[93778,93779,93780,93781],{"id":90801,"depth":93,"text":90802},{"id":91759,"depth":93,"text":91760},{"id":92701,"depth":93,"text":92702},{"id":92775,"depth":93,"text":92776},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77644,"description":24339},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93788,"title":93789,"body":93790,"description":93801,"extension":1190,"meta":93802,"navigation":1192,"path":93804,"seo":93805,"stem":93806,"__hash__":93807},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93791,"toc":93799},[93792],[40,93793,93794,93795],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[981,93796,93797],{"href":93797,"rel":93798},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24828],{"title":35,"searchDepth":61,"depth":61,"links":93800},[],"三件套第三套学习",{"category":93803},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93789,"description":93801},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93809,"title":93810,"body":93811,"description":24339,"extension":1190,"meta":93916,"navigation":1192,"path":93917,"seo":93918,"stem":93919,"__hash__":93920},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93812,"toc":93911},[93813,93820,93823,93826,93829,93833,93842,93845,93848,93852,93861,93864,93868,93871,93891,93894,93908],[40,93814,93815],{},[981,93816,93819],{"href":93817,"rel":93818},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24828],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93821,93810],{"id":93822},"_1安装",[40,93824,93825],{},"numpy是科学计算基础库,底层是C语言",[40,93827,93828],{},"三种方式：",[14,93830,93832],{"id":93831},"_11-通过pip安装","1.1 通过pip安装",[29,93834,93836],{"className":31342,"code":93835,"language":31344,"meta":35,"style":35},"pip install numpy\n",[37,93837,93838],{"__ignoreMap":35},[51,93839,93840],{"class":53,"line":54},[51,93841,93835],{"class":72},[40,93843,93844],{},"首选方式，自动处理依赖项",[40,93846,93847],{},"在提示系统命令符中使用cmd",[14,93849,93851],{"id":93850},"_12-通过anaconda安装","1.2 通过Anaconda安装",[29,93853,93855],{"className":31342,"code":93854,"language":31344,"meta":35,"style":35},"conda install numpy\n",[37,93856,93857],{"__ignoreMap":35},[51,93858,93859],{"class":53,"line":54},[51,93860,93854],{"class":72},[40,93862,93863],{},"自动解决环境依赖",[14,93865,93867],{"id":93866},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[40,93869,93870],{},"对于Debian\u002FUbuntu",[29,93872,93874],{"className":31342,"code":93873,"language":31344,"meta":35,"style":35},"sudo apt-get install python3-numpy\n",[37,93875,93876],{"__ignoreMap":35},[51,93877,93878,93881,93883,93886,93888],{"class":53,"line":54},[51,93879,93880],{"class":72},"sudo apt",[51,93882,1778],{"class":64},[51,93884,93885],{"class":72},"get install python3",[51,93887,1778],{"class":64},[51,93889,93890],{"class":72},"numpy\n",[40,93892,93893],{},"对于Fedora:",[29,93895,93897],{"className":31342,"code":93896,"language":31344,"meta":35,"style":35},"sudo dnf install python3-numpy\n",[37,93898,93899],{"__ignoreMap":35},[51,93900,93901,93904,93906],{"class":53,"line":54},[51,93902,93903],{"class":72},"sudo dnf install python3",[51,93905,1778],{"class":64},[51,93907,93890],{"class":72},[1179,93909,93910],{},"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":35,"searchDepth":61,"depth":61,"links":93912},[93913,93914,93915],{"id":93831,"depth":61,"text":93832},{"id":93850,"depth":61,"text":93851},{"id":93866,"depth":61,"text":93867},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93810,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93922,"title":93923,"body":93924,"description":24339,"extension":1190,"meta":94037,"navigation":1192,"path":94038,"seo":94039,"stem":94040,"__hash__":94041},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93925,"toc":94035},[93926,93929,93932,93935,93938,93941,93944,93947,93950,93953,94029,94032],[10,93927,93923],{"id":93928},"_10算数函数",[40,93930,93931],{},"加减乘除运算跟python基础语法没区别",[40,93933,93934],{},"除了python那种方法外还可以使用函数",[40,93936,93937],{},"加：np.add(a,b)",[40,93939,93940],{},"减：np.subtract(a,b)",[40,93942,93943],{},"乘：np.multiply(a,b)",[40,93945,93946],{},"除：np.divide(a,b) == a\u002Fb",[40,93948,93949],{},"取余：np.mod(a,b) == a%b",[40,93951,93952],{},"必须会的用法：",[29,93954,93956],{"className":31342,"code":93955,"language":31344,"meta":35,"style":35},"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",[37,93957,93958,93980,94001,94011,94024],{"__ignoreMap":35},[51,93959,93960,93962,93964,93967,93969,93972,93974,93976,93978],{"class":53,"line":54},[51,93961,981],{"class":72},[51,93963,108],{"class":64},[51,93965,93966],{"class":72},"np.arange(",[51,93968,1668],{"class":175},[51,93970,93971],{"class":72},").reshape(",[51,93973,1328],{"class":175},[51,93975,82],{"class":72},[51,93977,1328],{"class":175},[51,93979,90],{"class":72},[51,93981,93982,93984,93986,93989,93991,93993,93995,93997,93999],{"class":53,"line":61},[51,93983,975],{"class":72},[51,93985,108],{"class":64},[51,93987,93988],{"class":72},"np.array([",[51,93990,443],{"class":175},[51,93992,82],{"class":72},[51,93994,443],{"class":175},[51,93996,82],{"class":72},[51,93998,443],{"class":175},[51,94000,5731],{"class":72},[51,94002,94003,94006,94008],{"class":53,"line":93},[51,94004,94005],{"class":72},"result",[51,94007,108],{"class":64},[51,94009,94010],{"class":72},"np.empty_like(a)\n",[51,94012,94013,94016,94019,94021],{"class":53,"line":99},[51,94014,94015],{"class":72},"np.add(a,b,",[51,94017,94018],{"class":78},"out",[51,94020,108],{"class":64},[51,94022,94023],{"class":72},"result)\n",[51,94025,94026],{"class":53,"line":120},[51,94027,94028],{"class":72},"result\n",[40,94030,94031],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1179,94033,94034],{},"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":35,"searchDepth":61,"depth":61,"links":94036},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93923,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94043,"title":94044,"body":94045,"description":24339,"extension":1190,"meta":94807,"navigation":1192,"path":94808,"seo":94809,"stem":94810,"__hash__":94811},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94046,"toc":94794},[94047,94050,94053,94056,94060,94099,94103,94147,94207,94211,94214,94253,94256,94301,94305,94341,94345,94414,94418,94482,94486,94489,94492,94495,94498,94534,94538,94578,94582,94654,94657,94661,94724,94728,94791],[10,94048,94044],{"id":94049},"_11统计函数",[40,94051,94052],{},"sum max min mean",[40,94054,94055],{},"这些有axis参数，可以指定方向",[14,94057,94059],{"id":94058},"_111-sum求和函数","11.1 sum()求和函数",[29,94061,94063],{"className":31342,"code":94062,"language":31344,"meta":35,"style":35},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[37,94064,94065,94070,94091],{"__ignoreMap":35},[51,94066,94067],{"class":53,"line":54},[51,94068,94069],{"class":57},"#创建一维数组\n",[51,94071,94072,94074,94076,94079,94081,94083,94085,94087,94089],{"class":53,"line":61},[51,94073,981],{"class":72},[51,94075,108],{"class":64},[51,94077,94078],{"class":72},"np.random.randint(",[51,94080,791],{"class":175},[51,94082,82],{"class":72},[51,94084,612],{"class":175},[51,94086,82],{"class":72},[51,94088,457],{"class":175},[51,94090,90],{"class":72},[51,94092,94093,94096],{"class":53,"line":93},[51,94094,94095],{"class":72},"np.sum(a)",[51,94097,94098],{"class":57},"#求和\n",[14,94100,94102],{"id":94101},"_112-max求最大值函数","11.2 max()求最大值函数",[29,94104,94106],{"className":31342,"code":94105,"language":31344,"meta":35,"style":35},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[37,94107,94108,94112,94132,94137,94142],{"__ignoreMap":35},[51,94109,94110],{"class":53,"line":54},[51,94111,94069],{"class":57},[51,94113,94114,94116,94118,94120,94122,94124,94126,94128,94130],{"class":53,"line":61},[51,94115,981],{"class":72},[51,94117,108],{"class":64},[51,94119,94078],{"class":72},[51,94121,791],{"class":175},[51,94123,82],{"class":72},[51,94125,612],{"class":175},[51,94127,82],{"class":72},[51,94129,457],{"class":175},[51,94131,90],{"class":72},[51,94133,94134],{"class":53,"line":93},[51,94135,94136],{"class":72},"np.max(a)\n",[51,94138,94139],{"class":53,"line":99},[51,94140,94141],{"class":57},"#最大索引(求最大元素的索引)arg\n",[51,94143,94144],{"class":53,"line":120},[51,94145,94146],{"class":72},"np.argmax(a)\n",[29,94148,94150],{"className":31342,"code":94149,"language":31344,"meta":35,"style":35},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[37,94151,94152,94173,94193,94197],{"__ignoreMap":35},[51,94153,94154,94156,94158,94161,94163,94165,94167,94169,94171],{"class":53,"line":54},[51,94155,11881],{"class":72},[51,94157,108],{"class":64},[51,94159,94160],{"class":72}," np.array([",[51,94162,791],{"class":175},[51,94164,13397],{"class":72},[51,94166,1568],{"class":175},[51,94168,13397],{"class":72},[51,94170,1328],{"class":175},[51,94172,5731],{"class":72},[51,94174,94175,94177,94179,94181,94183,94185,94187,94189,94191],{"class":53,"line":61},[51,94176,11907],{"class":72},[51,94178,108],{"class":64},[51,94180,94160],{"class":72},[51,94182,1328],{"class":175},[51,94184,13397],{"class":72},[51,94186,1334],{"class":175},[51,94188,13397],{"class":72},[51,94190,1543],{"class":175},[51,94192,5731],{"class":72},[51,94194,94195],{"class":53,"line":93},[51,94196,3480],{"emptyLinePlaceholder":1192},[51,94198,94199,94201,94204],{"class":53,"line":99},[51,94200,31379],{"class":175},[51,94202,94203],{"class":72},"(np.maximum(a, b))   ",[51,94205,94206],{"class":57},"# [3 5 4]，每个位置上取较大值\n",[14,94208,94210],{"id":94209},"_113-mean求平均值函数","11.3 mean()求平均值函数",[40,94212,94213],{},"①一维数组：",[29,94215,94217],{"className":31342,"code":94216,"language":31344,"meta":35,"style":35},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[37,94218,94219,94223,94243,94248],{"__ignoreMap":35},[51,94220,94221],{"class":53,"line":54},[51,94222,94069],{"class":57},[51,94224,94225,94227,94229,94231,94233,94235,94237,94239,94241],{"class":53,"line":61},[51,94226,981],{"class":72},[51,94228,108],{"class":64},[51,94230,94078],{"class":72},[51,94232,791],{"class":175},[51,94234,82],{"class":72},[51,94236,612],{"class":175},[51,94238,82],{"class":72},[51,94240,457],{"class":175},[51,94242,90],{"class":72},[51,94244,94245],{"class":53,"line":93},[51,94246,94247],{"class":57},"#求平均值\n",[51,94249,94250],{"class":53,"line":99},[51,94251,94252],{"class":72},"np.mean(a)\n",[40,94254,94255],{},"②二维数组",[29,94257,94259],{"className":31342,"code":94258,"language":31344,"meta":35,"style":35},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[37,94260,94261,94266,94291,94296],{"__ignoreMap":35},[51,94262,94263],{"class":53,"line":54},[51,94264,94265],{"class":57},"#二维数组\n",[51,94267,94268,94271,94273,94275,94277,94279,94281,94283,94285,94287,94289],{"class":53,"line":61},[51,94269,94270],{"class":72},"aa",[51,94272,108],{"class":64},[51,94274,93966],{"class":72},[51,94276,791],{"class":175},[51,94278,82],{"class":72},[51,94280,1769],{"class":175},[51,94282,93971],{"class":72},[51,94284,1328],{"class":175},[51,94286,82],{"class":72},[51,94288,1543],{"class":175},[51,94290,90],{"class":72},[51,94292,94293],{"class":53,"line":93},[51,94294,94295],{"class":57},"#对数组中的所有数求平均\n",[51,94297,94298],{"class":53,"line":99},[51,94299,94300],{"class":72},"np.mean(aa)\n",[14,94302,94304],{"id":94303},"_114-median求中位数函数","11.4 median()求中位数函数",[29,94306,94308],{"className":31342,"code":94307,"language":31344,"meta":35,"style":35},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[37,94309,94310,94315,94331,94336],{"__ignoreMap":35},[51,94311,94312],{"class":53,"line":54},[51,94313,94314],{"class":57},"#求中位数\n",[51,94316,94317,94319,94321,94323,94325,94327,94329],{"class":53,"line":61},[51,94318,975],{"class":72},[51,94320,108],{"class":64},[51,94322,93966],{"class":72},[51,94324,791],{"class":175},[51,94326,82],{"class":72},[51,94328,443],{"class":175},[51,94330,90],{"class":72},[51,94332,94333],{"class":53,"line":93},[51,94334,94335],{"class":72},"np.median(b)\n",[51,94337,94338],{"class":53,"line":99},[51,94339,94340],{"class":57},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94342,94344],{"id":94343},"_115-power求幂运算函数","11.5 power()求幂运算函数",[29,94346,94348],{"className":31342,"code":94347,"language":31344,"meta":35,"style":35},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[37,94349,94350,94366,94371,94376,94385,94390,94399],{"__ignoreMap":35},[51,94351,94352,94354,94356,94358,94360,94362,94364],{"class":53,"line":54},[51,94353,975],{"class":72},[51,94355,108],{"class":64},[51,94357,93966],{"class":72},[51,94359,791],{"class":175},[51,94361,82],{"class":72},[51,94363,443],{"class":175},[51,94365,90],{"class":72},[51,94367,94368],{"class":53,"line":61},[51,94369,94370],{"class":57},"#幂运算\n",[51,94372,94373],{"class":53,"line":93},[51,94374,94375],{"class":57},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[51,94377,94378,94381,94383],{"class":53,"line":99},[51,94379,94380],{"class":72},"np.power(b,",[51,94382,1334],{"class":175},[51,94384,90],{"class":72},[51,94386,94387],{"class":53,"line":120},[51,94388,94389],{"class":57},"#或者以下代码，将数据存储起来\n",[51,94391,94392,94394,94396],{"class":53,"line":129},[51,94393,2090],{"class":72},[51,94395,108],{"class":64},[51,94397,94398],{"class":72},"np.empty_like(b)\n",[51,94400,94401,94403,94405,94407,94409,94411],{"class":53,"line":206},[51,94402,94380],{"class":72},[51,94404,1334],{"class":175},[51,94406,82],{"class":72},[51,94408,94018],{"class":78},[51,94410,108],{"class":64},[51,94412,94413],{"class":72},"y)\n",[14,94415,94417],{"id":94416},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[29,94419,94421],{"className":31342,"code":94420,"language":31344,"meta":35,"style":35},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[37,94422,94423,94439,94444,94449,94453,94471],{"__ignoreMap":35},[51,94424,94425,94427,94429,94431,94433,94435,94437],{"class":53,"line":54},[51,94426,975],{"class":72},[51,94428,108],{"class":64},[51,94430,93966],{"class":72},[51,94432,791],{"class":175},[51,94434,82],{"class":72},[51,94436,443],{"class":175},[51,94438,90],{"class":72},[51,94440,94441],{"class":53,"line":61},[51,94442,94443],{"class":57},"#开方\n",[51,94445,94446],{"class":53,"line":93},[51,94447,94448],{"class":72},"np.sqrt(b)\n",[51,94450,94451],{"class":53,"line":99},[51,94452,94389],{"class":57},[51,94454,94455,94457,94459,94462,94465,94467,94469],{"class":53,"line":120},[51,94456,2090],{"class":72},[51,94458,108],{"class":64},[51,94460,94461],{"class":72},"np.empty_like(b,",[51,94463,94464],{"class":78},"dtype",[51,94466,108],{"class":64},[51,94468,1300],{"class":175},[51,94470,90],{"class":72},[51,94472,94473,94476,94478,94480],{"class":53,"line":129},[51,94474,94475],{"class":72},"np.sqrt(b,",[51,94477,94018],{"class":78},[51,94479,108],{"class":64},[51,94481,94413],{"class":72},[14,94483,94485],{"id":94484},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[40,94487,94488],{},"对数组中的元素累计求和，可指定轴",[40,94490,94491],{},"#累计求和的意思是：",[40,94493,94494],{},"a = np.array([1, 2, 3, 4])",[40,94496,94497],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[29,94499,94501],{"className":31342,"code":94500,"language":31344,"meta":35,"style":35},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[37,94502,94503,94519,94524,94529],{"__ignoreMap":35},[51,94504,94505,94507,94509,94511,94513,94515,94517],{"class":53,"line":54},[51,94506,975],{"class":72},[51,94508,108],{"class":64},[51,94510,93966],{"class":72},[51,94512,791],{"class":175},[51,94514,82],{"class":72},[51,94516,443],{"class":175},[51,94518,90],{"class":72},[51,94520,94521],{"class":53,"line":61},[51,94522,94523],{"class":72},"np.cumsum(b)\n",[51,94525,94526],{"class":53,"line":93},[51,94527,94528],{"class":57},"#结果：\n",[51,94530,94531],{"class":53,"line":99},[51,94532,94533],{"class":57},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94535,94537],{"id":94536},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[29,94539,94541],{"className":31342,"code":94540,"language":31344,"meta":35,"style":35},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[37,94542,94543,94559,94564,94569,94573],{"__ignoreMap":35},[51,94544,94545,94547,94549,94551,94553,94555,94557],{"class":53,"line":54},[51,94546,975],{"class":72},[51,94548,108],{"class":64},[51,94550,93966],{"class":72},[51,94552,791],{"class":175},[51,94554,82],{"class":72},[51,94556,443],{"class":175},[51,94558,90],{"class":72},[51,94560,94561],{"class":53,"line":61},[51,94562,94563],{"class":57},"#对数组中的元素累计求积，可指定轴\n",[51,94565,94566],{"class":53,"line":93},[51,94567,94568],{"class":72},"np.cumprod(b)\n",[51,94570,94571],{"class":53,"line":99},[51,94572,94528],{"class":57},[51,94574,94575],{"class":53,"line":120},[51,94576,94577],{"class":57},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94579,94581],{"id":94580},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[29,94583,94585],{"className":31342,"code":94584,"language":31344,"meta":35,"style":35},"#删除数组中的重复数据，并对数据进行排序\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",[37,94586,94587,94592,94640,94645,94649],{"__ignoreMap":35},[51,94588,94589],{"class":53,"line":54},[51,94590,94591],{"class":57},"#删除数组中的重复数据，并对数据进行排序\n",[51,94593,94594,94596,94598,94600,94602,94604,94606,94608,94610,94612,94614,94616,94618,94620,94622,94624,94626,94628,94630,94632,94634,94636,94638],{"class":53,"line":61},[51,94595,981],{"class":72},[51,94597,108],{"class":64},[51,94599,93988],{"class":72},[51,94601,791],{"class":175},[51,94603,82],{"class":72},[51,94605,1334],{"class":175},[51,94607,82],{"class":72},[51,94609,1328],{"class":175},[51,94611,82],{"class":72},[51,94613,1744],{"class":175},[51,94615,82],{"class":72},[51,94617,1328],{"class":175},[51,94619,82],{"class":72},[51,94621,443],{"class":175},[51,94623,82],{"class":72},[51,94625,1451],{"class":175},[51,94627,82],{"class":72},[51,94629,176],{"class":175},[51,94631,82],{"class":72},[51,94633,2020],{"class":175},[51,94635,82],{"class":72},[51,94637,1543],{"class":175},[51,94639,5731],{"class":72},[51,94641,94642],{"class":53,"line":93},[51,94643,94644],{"class":72},"np.unique(a)\n",[51,94646,94647],{"class":53,"line":99},[51,94648,94528],{"class":57},[51,94650,94651],{"class":53,"line":120},[51,94652,94653],{"class":57},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[40,94655,94656],{},"升序形式排序",[14,94658,94660],{"id":94659},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[29,94662,94664],{"className":31342,"code":94663,"language":31344,"meta":35,"style":35},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[37,94665,94666,94714,94719],{"__ignoreMap":35},[51,94667,94668,94670,94672,94674,94676,94678,94680,94682,94684,94686,94688,94690,94692,94694,94696,94698,94700,94702,94704,94706,94708,94710,94712],{"class":53,"line":54},[51,94669,981],{"class":72},[51,94671,108],{"class":64},[51,94673,93988],{"class":72},[51,94675,791],{"class":175},[51,94677,82],{"class":72},[51,94679,1334],{"class":175},[51,94681,82],{"class":72},[51,94683,1328],{"class":175},[51,94685,82],{"class":72},[51,94687,1744],{"class":175},[51,94689,82],{"class":72},[51,94691,1328],{"class":175},[51,94693,82],{"class":72},[51,94695,443],{"class":175},[51,94697,82],{"class":72},[51,94699,1451],{"class":175},[51,94701,82],{"class":72},[51,94703,176],{"class":175},[51,94705,82],{"class":72},[51,94707,2020],{"class":175},[51,94709,82],{"class":72},[51,94711,1543],{"class":175},[51,94713,5731],{"class":72},[51,94715,94716],{"class":53,"line":61},[51,94717,94718],{"class":57},"#返回数组中非零元素的索引\n",[51,94720,94721],{"class":53,"line":93},[51,94722,94723],{"class":72},"np.nonzero(a)\n",[14,94725,94727],{"id":94726},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[29,94729,94731],{"className":31342,"code":94730,"language":31344,"meta":35,"style":35},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[37,94732,94733,94781,94786],{"__ignoreMap":35},[51,94734,94735,94737,94739,94741,94743,94745,94747,94749,94751,94753,94755,94757,94759,94761,94763,94765,94767,94769,94771,94773,94775,94777,94779],{"class":53,"line":54},[51,94736,981],{"class":72},[51,94738,108],{"class":64},[51,94740,93988],{"class":72},[51,94742,791],{"class":175},[51,94744,82],{"class":72},[51,94746,1334],{"class":175},[51,94748,82],{"class":72},[51,94750,1328],{"class":175},[51,94752,82],{"class":72},[51,94754,1744],{"class":175},[51,94756,82],{"class":72},[51,94758,1328],{"class":175},[51,94760,82],{"class":72},[51,94762,443],{"class":175},[51,94764,82],{"class":72},[51,94766,1451],{"class":175},[51,94768,82],{"class":72},[51,94770,176],{"class":175},[51,94772,82],{"class":72},[51,94774,2020],{"class":175},[51,94776,82],{"class":72},[51,94778,1543],{"class":175},[51,94780,5731],{"class":72},[51,94782,94783],{"class":53,"line":61},[51,94784,94785],{"class":57},"#计算一组数中最大值与最小值的差，可指定轴\n",[51,94787,94788],{"class":53,"line":93},[51,94789,94790],{"class":72},"np.ptp(a)\n",[1179,94792,94793],{},"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":35,"searchDepth":61,"depth":61,"links":94795},[94796,94797,94798,94799,94800,94801,94802,94803,94804,94805,94806],{"id":94058,"depth":61,"text":94059},{"id":94101,"depth":61,"text":94102},{"id":94209,"depth":61,"text":94210},{"id":94303,"depth":61,"text":94304},{"id":94343,"depth":61,"text":94344},{"id":94416,"depth":61,"text":94417},{"id":94484,"depth":61,"text":94485},{"id":94536,"depth":61,"text":94537},{"id":94580,"depth":61,"text":94581},{"id":94659,"depth":61,"text":94660},{"id":94726,"depth":61,"text":94727},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94044,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94813,"title":94814,"body":94815,"description":24339,"extension":1190,"meta":95470,"navigation":1192,"path":95471,"seo":95472,"stem":95473,"__hash__":95474},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94816,"toc":95458},[94817,94820,94824,94827,95043,95047,95050,95259,95263,95329,95334,95338,95341,95344,95382,95386,95389,95394,95398,95401,95404,95409,95413,95416,95420,95423,95426,95431,95435,95438,95441,95446,95450,95455],[10,94818,94814],{"id":94819},"_12其他常用函数",[14,94821,94823],{"id":94822},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[40,94825,94826],{},"将数组的数据按照行列复制扩展",[29,94828,94830],{"className":31342,"code":94829,"language":31344,"meta":35,"style":35},"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",[37,94831,94832,94848,94857,94861,94866,94871,94884,94888,94893,94898,94903,94907,94912,94936,94948,94952,94956,94961,94966,94971,94976,94980,94993,94997,95001,95006,95011,95016,95021,95026,95030,95034,95039],{"__ignoreMap":35},[51,94833,94834,94836,94838,94840,94842,94844,94846],{"class":53,"line":54},[51,94835,981],{"class":72},[51,94837,108],{"class":64},[51,94839,93966],{"class":72},[51,94841,791],{"class":175},[51,94843,82],{"class":72},[51,94845,1568],{"class":175},[51,94847,90],{"class":72},[51,94849,94850,94853,94855],{"class":53,"line":61},[51,94851,94852],{"class":72},"np.tile(a,",[51,94854,1334],{"class":175},[51,94856,90],{"class":72},[51,94858,94859],{"class":53,"line":93},[51,94860,94528],{"class":57},[51,94862,94863],{"class":53,"line":99},[51,94864,94865],{"class":57},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[51,94867,94868],{"class":53,"line":120},[51,94869,94870],{"class":57},"#行复制两次，列复制三次\n",[51,94872,94873,94876,94878,94880,94882],{"class":53,"line":129},[51,94874,94875],{"class":72},"np.tile(a,(",[51,94877,1334],{"class":175},[51,94879,82],{"class":72},[51,94881,1328],{"class":175},[51,94883,31461],{"class":72},[51,94885,94886],{"class":53,"line":206},[51,94887,94528],{"class":57},[51,94889,94890],{"class":53,"line":212},[51,94891,94892],{"class":282},"'''\n",[51,94894,94895],{"class":53,"line":227},[51,94896,94897],{"class":282},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[51,94899,94900],{"class":53,"line":370},[51,94901,94902],{"class":282},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[51,94904,94905],{"class":53,"line":387},[51,94906,94892],{"class":282},[51,94908,94909],{"class":53,"line":404},[51,94910,94911],{"class":57},"#创建二维数组\n",[51,94913,94914,94916,94918,94920,94922,94924,94926,94928,94930,94932,94934],{"class":53,"line":415},[51,94915,94270],{"class":72},[51,94917,108],{"class":64},[51,94919,93966],{"class":72},[51,94921,791],{"class":175},[51,94923,82],{"class":72},[51,94925,1769],{"class":175},[51,94927,93971],{"class":72},[51,94929,1543],{"class":175},[51,94931,82],{"class":72},[51,94933,1328],{"class":175},[51,94935,90],{"class":72},[51,94937,94938,94941,94943,94945],{"class":53,"line":420},[51,94939,94940],{"class":72},"np.tile(aa,",[51,94942,1334],{"class":175},[51,94944,1677],{"class":72},[51,94946,94947],{"class":57},"#一个数的时候就是行\n",[51,94949,94950],{"class":53,"line":429},[51,94951,94528],{"class":57},[51,94953,94954],{"class":53,"line":434},[51,94955,94892],{"class":282},[51,94957,94958],{"class":53,"line":448},[51,94959,94960],{"class":282},"array([[ 1,  2,  3,  1,  2,  3],\n",[51,94962,94963],{"class":53,"line":462},[51,94964,94965],{"class":282},"       [ 4,  5,  6,  4,  5,  6],\n",[51,94967,94968],{"class":53,"line":470},[51,94969,94970],{"class":282},"       [ 7,  8,  9,  7,  8,  9],\n",[51,94972,94973],{"class":53,"line":2783},[51,94974,94975],{"class":282},"       [10, 11, 12, 10, 11, 12]])\n",[51,94977,94978],{"class":53,"line":2788},[51,94979,94892],{"class":282},[51,94981,94982,94985,94987,94989,94991],{"class":53,"line":2817},[51,94983,94984],{"class":72},"np.tile(aa,(",[51,94986,1334],{"class":175},[51,94988,82],{"class":72},[51,94990,1328],{"class":175},[51,94992,31461],{"class":72},[51,94994,94995],{"class":53,"line":2822},[51,94996,94528],{"class":57},[51,94998,94999],{"class":53,"line":2839},[51,95000,94892],{"class":282},[51,95002,95003],{"class":53,"line":2844},[51,95004,95005],{"class":282},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[51,95007,95008],{"class":53,"line":2849},[51,95009,95010],{"class":282},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[51,95012,95013],{"class":53,"line":2854},[51,95014,95015],{"class":282},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[51,95017,95018],{"class":53,"line":2868},[51,95019,95020],{"class":282},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[51,95022,95023],{"class":53,"line":2873},[51,95024,95025],{"class":282},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[51,95027,95028],{"class":53,"line":3657},[51,95029,95010],{"class":282},[51,95031,95032],{"class":53,"line":3671},[51,95033,95015],{"class":282},[51,95035,95036],{"class":53,"line":3679},[51,95037,95038],{"class":282},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[51,95040,95041],{"class":53,"line":3684},[51,95042,94892],{"class":282},[14,95044,95046],{"id":95045},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[40,95048,95049],{},"repeat()将数组中的每个元素重复若干次",[29,95051,95053],{"className":31342,"code":95052,"language":31344,"meta":35,"style":35},"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",[37,95054,95055,95071,95080,95084,95089,95113,95118,95127,95131,95136,95140,95145,95161,95165,95169,95174,95179,95184,95188,95193,95197,95202,95207,95211,95227,95231,95235,95240,95245,95250,95255],{"__ignoreMap":35},[51,95056,95057,95059,95061,95063,95065,95067,95069],{"class":53,"line":54},[51,95058,981],{"class":72},[51,95060,108],{"class":64},[51,95062,93966],{"class":72},[51,95064,791],{"class":175},[51,95066,82],{"class":72},[51,95068,1568],{"class":175},[51,95070,90],{"class":72},[51,95072,95073,95076,95078],{"class":53,"line":61},[51,95074,95075],{"class":72},"np.repeat(a,",[51,95077,1328],{"class":175},[51,95079,90],{"class":72},[51,95081,95082],{"class":53,"line":93},[51,95083,94528],{"class":57},[51,95085,95086],{"class":53,"line":99},[51,95087,95088],{"class":57},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[51,95090,95091,95093,95095,95097,95099,95101,95103,95105,95107,95109,95111],{"class":53,"line":120},[51,95092,94270],{"class":72},[51,95094,108],{"class":64},[51,95096,93966],{"class":72},[51,95098,791],{"class":175},[51,95100,82],{"class":72},[51,95102,1769],{"class":175},[51,95104,93971],{"class":72},[51,95106,1543],{"class":175},[51,95108,82],{"class":72},[51,95110,1328],{"class":175},[51,95112,90],{"class":72},[51,95114,95115],{"class":53,"line":129},[51,95116,95117],{"class":57},"#这个重复之后二维变成一维\n",[51,95119,95120,95123,95125],{"class":53,"line":206},[51,95121,95122],{"class":72},"np.repeat(aa,",[51,95124,1334],{"class":175},[51,95126,90],{"class":72},[51,95128,95129],{"class":53,"line":212},[51,95130,94892],{"class":282},[51,95132,95133],{"class":53,"line":227},[51,95134,95135],{"class":282},"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",[51,95137,95138],{"class":53,"line":370},[51,95139,94892],{"class":282},[51,95141,95142],{"class":53,"line":387},[51,95143,95144],{"class":57},"#指定axis\n",[51,95146,95147,95149,95151,95153,95155,95157,95159],{"class":53,"line":404},[51,95148,95122],{"class":72},[51,95150,1334],{"class":175},[51,95152,82],{"class":72},[51,95154,48478],{"class":78},[51,95156,108],{"class":64},[51,95158,176],{"class":175},[51,95160,90],{"class":72},[51,95162,95163],{"class":53,"line":415},[51,95164,94528],{"class":57},[51,95166,95167],{"class":53,"line":420},[51,95168,94892],{"class":282},[51,95170,95171],{"class":53,"line":429},[51,95172,95173],{"class":282},"array([[ 1,  2,  3],\n",[51,95175,95176],{"class":53,"line":434},[51,95177,95178],{"class":282},"       [ 1,  2,  3],\n",[51,95180,95181],{"class":53,"line":448},[51,95182,95183],{"class":282},"       [ 4,  5,  6],\n",[51,95185,95186],{"class":53,"line":462},[51,95187,95183],{"class":282},[51,95189,95190],{"class":53,"line":470},[51,95191,95192],{"class":282},"       [ 7,  8,  9],\n",[51,95194,95195],{"class":53,"line":2783},[51,95196,95192],{"class":282},[51,95198,95199],{"class":53,"line":2788},[51,95200,95201],{"class":282},"       [10, 11, 12],\n",[51,95203,95204],{"class":53,"line":2817},[51,95205,95206],{"class":282},"       [10, 11, 12]])\n",[51,95208,95209],{"class":53,"line":2822},[51,95210,94892],{"class":282},[51,95212,95213,95215,95217,95219,95221,95223,95225],{"class":53,"line":2839},[51,95214,95122],{"class":72},[51,95216,1334],{"class":175},[51,95218,82],{"class":72},[51,95220,48478],{"class":78},[51,95222,108],{"class":64},[51,95224,791],{"class":175},[51,95226,90],{"class":72},[51,95228,95229],{"class":53,"line":2844},[51,95230,94528],{"class":57},[51,95232,95233],{"class":53,"line":2849},[51,95234,94892],{"class":282},[51,95236,95237],{"class":53,"line":2854},[51,95238,95239],{"class":282},"array([[ 1,  1,  2,  2,  3,  3],\n",[51,95241,95242],{"class":53,"line":2868},[51,95243,95244],{"class":282},"       [ 4,  4,  5,  5,  6,  6],\n",[51,95246,95247],{"class":53,"line":2873},[51,95248,95249],{"class":282},"       [ 7,  7,  8,  8,  9,  9],\n",[51,95251,95252],{"class":53,"line":3657},[51,95253,95254],{"class":282},"       [10, 10, 11, 11, 12, 12]])\n",[51,95256,95257],{"class":53,"line":3671},[51,95258,94892],{"class":282},[14,95260,95262],{"id":95261},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[29,95264,95266],{"className":31342,"code":95265,"language":31344,"meta":35,"style":35},"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",[37,95267,95268,95284,95289,95301,95305,95310,95320,95324],{"__ignoreMap":35},[51,95269,95270,95272,95274,95276,95278,95280,95282],{"class":53,"line":54},[51,95271,981],{"class":72},[51,95273,108],{"class":64},[51,95275,93966],{"class":72},[51,95277,791],{"class":175},[51,95279,82],{"class":72},[51,95281,1568],{"class":175},[51,95283,90],{"class":72},[51,95285,95286],{"class":53,"line":61},[51,95287,95288],{"class":57},"#array([，2，3，4])\n",[51,95290,95291,95294,95296,95298],{"class":53,"line":93},[51,95292,95293],{"class":72},"np.roll(a,",[51,95295,1334],{"class":175},[51,95297,1677],{"class":72},[51,95299,95300],{"class":57},"#传正数向后调多少位，传负数向前调多少位\n",[51,95302,95303],{"class":53,"line":99},[51,95304,94528],{"class":57},[51,95306,95307],{"class":53,"line":120},[51,95308,95309],{"class":57},"#array([3, 4, 1, 2])\n",[51,95311,95312,95314,95316,95318],{"class":53,"line":129},[51,95313,95293],{"class":72},[51,95315,1778],{"class":64},[51,95317,791],{"class":175},[51,95319,90],{"class":72},[51,95321,95322],{"class":53,"line":206},[51,95323,94528],{"class":57},[51,95325,95326],{"class":53,"line":212},[51,95327,95328],{"class":57},"#array([2, 3, 4, 1])\n",[40,95330,95331],{},[2564,95332],{"alt":35,"src":95333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95335,95337],{"id":95336},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[40,95339,95340],{},"resize()重新调整数组的大小",[40,95342,95343],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[29,95345,95347],{"className":31342,"code":95346,"language":31344,"meta":35,"style":35},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[37,95348,95349,95354,95367],{"__ignoreMap":35},[51,95350,95351],{"class":53,"line":54},[51,95352,95353],{"class":57},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[51,95355,95356,95359,95361,95363,95365],{"class":53,"line":61},[51,95357,95358],{"class":72},"np.resize(aa,(",[51,95360,1334],{"class":175},[51,95362,82],{"class":72},[51,95364,1593],{"class":175},[51,95366,31461],{"class":72},[51,95368,95369,95371,95373,95375,95377,95379],{"class":53,"line":93},[51,95370,95358],{"class":72},[51,95372,1334],{"class":175},[51,95374,82],{"class":72},[51,95376,1668],{"class":175},[51,95378,83735],{"class":72},[51,95380,95381],{"class":57},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95383,95385],{"id":95384},"_125-placeput函数","12.5 place()\u002Fput()函数",[40,95387,95388],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[40,95390,95391],{},[2564,95392],{"alt":35,"src":95393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95395,95397],{"id":95396},"_126-保存加载文件","12.6 保存加载文件",[40,95399,95400],{},"savetxt():将数据保存到txt文件中",[40,95402,95403],{},"loadtxt():从文件加载数据",[40,95405,95406],{},[2564,95407],{"alt":35,"src":95408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95410,95412],{"id":95411},"_127-genfromtxt函数","12.7 genfromtxt()函数",[40,95414,95415],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95417,95419],{"id":95418},"_128-anyall函数","12.8 any()\u002Fall()函数",[40,95421,95422],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[40,95424,95425],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[40,95427,95428],{},[2564,95429],{"alt":35,"src":95430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95432,95434],{"id":95433},"_129-where语句","12.9 where语句",[40,95436,95437],{},"np.where(条件,x,y)",[40,95439,95440],{},"如果条件为True,对应值为x,否则对应值为y",[40,95442,95443],{},[2564,95444],{"alt":35,"src":95445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95447,95449],{"id":95448},"_1210-dot矩阵","12.10 dot()矩阵",[40,95451,95452],{},[2564,95453],{"alt":35,"src":95454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1179,95456,95457],{},"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":35,"searchDepth":61,"depth":61,"links":95459},[95460,95461,95462,95463,95464,95465,95466,95467,95468,95469],{"id":94822,"depth":61,"text":94823},{"id":95045,"depth":61,"text":95046},{"id":95261,"depth":61,"text":95262},{"id":95336,"depth":61,"text":95337},{"id":95384,"depth":61,"text":95385},{"id":95396,"depth":61,"text":95397},{"id":95411,"depth":61,"text":95412},{"id":95418,"depth":61,"text":95419},{"id":95433,"depth":61,"text":95434},{"id":95448,"depth":61,"text":95449},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94814,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95476,"title":95477,"body":95478,"description":24339,"extension":1190,"meta":95831,"navigation":1192,"path":95832,"seo":95833,"stem":95834,"__hash__":95835},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95479,"toc":95829},[95480,95483,95486,95489,95492,95495,95560,95562,95826],[10,95481,95477],{"id":95482},"_13数组排序",[40,95484,95485],{},"排序主要用到的方法是np.sort和np.argsort",[40,95487,95488],{},"其中np.sort()对数组直接排序",[40,95490,95491],{},"而np.argsort()是返回排序后的原始索引",[40,95493,95494],{},"①一维数组",[29,95496,95498],{"className":31342,"code":95497,"language":31344,"meta":35,"style":35},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[37,95499,95500,95504,95544,95552],{"__ignoreMap":35},[51,95501,95502],{"class":53,"line":54},[51,95503,94069],{"class":57},[51,95505,95506,95508,95510,95512,95514,95516,95518,95520,95522,95524,95526,95528,95530,95532,95534,95536,95538,95540,95542],{"class":53,"line":61},[51,95507,981],{"class":72},[51,95509,108],{"class":64},[51,95511,93988],{"class":72},[51,95513,1328],{"class":175},[51,95515,82],{"class":72},[51,95517,1744],{"class":175},[51,95519,82],{"class":72},[51,95521,1643],{"class":175},[51,95523,82],{"class":72},[51,95525,2020],{"class":175},[51,95527,82],{"class":72},[51,95529,1530],{"class":175},[51,95531,82],{"class":72},[51,95533,2137],{"class":175},[51,95535,82],{"class":72},[51,95537,1593],{"class":175},[51,95539,82],{"class":72},[51,95541,443],{"class":175},[51,95543,5731],{"class":72},[51,95545,95546,95549],{"class":53,"line":93},[51,95547,95548],{"class":72},"np.sort(a)",[51,95550,95551],{"class":57},"#升序排序\n",[51,95553,95554,95557],{"class":53,"line":99},[51,95555,95556],{"class":72},"np.argsort(a)",[51,95558,95559],{"class":57},"#按照元素大小来索引排序\n",[40,95561,94255],{},[29,95563,95565],{"className":31342,"code":95564,"language":31344,"meta":35,"style":35},"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",[37,95566,95567,95579,95605,95610,95614,95619,95624,95629,95634,95638,95646,95650,95655,95660,95665,95670,95674,95679,95692,95696,95701,95706,95711,95716,95720,95725,95737,95741,95745,95749,95753,95757,95761,95766,95781,95786,95795,95800,95804,95808,95813,95817,95822],{"__ignoreMap":35},[51,95568,95569,95572,95574,95576],{"class":53,"line":54},[51,95570,95571],{"class":72},"np.random.seed(",[51,95573,176],{"class":175},[51,95575,1677],{"class":72},[51,95577,95578],{"class":57},"#保证每次值一样\n",[51,95580,95581,95583,95585,95587,95589,95591,95593,95595,95597,95599,95601,95603],{"class":53,"line":61},[51,95582,94270],{"class":72},[51,95584,108],{"class":64},[51,95586,94078],{"class":72},[51,95588,612],{"class":175},[51,95590,82],{"class":72},[51,95592,32460],{"class":78},[51,95594,108],{"class":64},[51,95596,73],{"class":72},[51,95598,1543],{"class":175},[51,95600,82],{"class":72},[51,95602,1593],{"class":175},[51,95604,31461],{"class":72},[51,95606,95607],{"class":53,"line":93},[51,95608,95609],{"class":57},"#原数组：\n",[51,95611,95612],{"class":53,"line":99},[51,95613,94892],{"class":282},[51,95615,95616],{"class":53,"line":120},[51,95617,95618],{"class":282},"array([[44, 47, 64, 67, 67,  9],\n",[51,95620,95621],{"class":53,"line":129},[51,95622,95623],{"class":282},"       [83, 21, 36, 87, 70, 88],\n",[51,95625,95626],{"class":53,"line":206},[51,95627,95628],{"class":282},"       [88, 12, 58, 65, 39, 87],\n",[51,95630,95631],{"class":53,"line":212},[51,95632,95633],{"class":282},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[51,95635,95636],{"class":53,"line":227},[51,95637,94892],{"class":282},[51,95639,95640,95643],{"class":53,"line":370},[51,95641,95642],{"class":72},"np.sort(aa)",[51,95644,95645],{"class":57},"#每行进行了排序\n",[51,95647,95648],{"class":53,"line":387},[51,95649,94892],{"class":282},[51,95651,95652],{"class":53,"line":404},[51,95653,95654],{"class":282},"array([[ 9, 44, 47, 64, 67, 67],\n",[51,95656,95657],{"class":53,"line":415},[51,95658,95659],{"class":282},"       [21, 36, 70, 83, 87, 88],\n",[51,95661,95662],{"class":53,"line":420},[51,95663,95664],{"class":282},"       [12, 39, 58, 65, 87, 88],\n",[51,95666,95667],{"class":53,"line":429},[51,95668,95669],{"class":282},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[51,95671,95672],{"class":53,"line":434},[51,95673,94892],{"class":282},[51,95675,95676],{"class":53,"line":448},[51,95677,95678],{"class":57},"#axis=0时\n",[51,95680,95681,95684,95686,95688,95690],{"class":53,"line":462},[51,95682,95683],{"class":72},"np.sort(aa,",[51,95685,48478],{"class":78},[51,95687,108],{"class":64},[51,95689,176],{"class":175},[51,95691,90],{"class":72},[51,95693,95694],{"class":53,"line":470},[51,95695,94892],{"class":282},[51,95697,95698],{"class":53,"line":2783},[51,95699,95700],{"class":282},"array([[44, 12, 36, 37, 25,  9],\n",[51,95702,95703],{"class":53,"line":2788},[51,95704,95705],{"class":282},"       [46, 21, 58, 65, 39, 77],\n",[51,95707,95708],{"class":53,"line":2817},[51,95709,95710],{"class":282},"       [83, 47, 64, 67, 67, 87],\n",[51,95712,95713],{"class":53,"line":2822},[51,95714,95715],{"class":282},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[51,95717,95718],{"class":53,"line":2839},[51,95719,94892],{"class":282},[51,95721,95722],{"class":53,"line":2844},[51,95723,95724],{"class":57},"#axis=1时,为默认值\n",[51,95726,95727,95729,95731,95733,95735],{"class":53,"line":2849},[51,95728,95683],{"class":72},[51,95730,48478],{"class":78},[51,95732,108],{"class":64},[51,95734,791],{"class":175},[51,95736,90],{"class":72},[51,95738,95739],{"class":53,"line":2854},[51,95740,94892],{"class":282},[51,95742,95743],{"class":53,"line":2868},[51,95744,95654],{"class":282},[51,95746,95747],{"class":53,"line":2873},[51,95748,95659],{"class":282},[51,95750,95751],{"class":53,"line":3657},[51,95752,95664],{"class":282},[51,95754,95755],{"class":53,"line":3671},[51,95756,95669],{"class":282},[51,95758,95759],{"class":53,"line":3679},[51,95760,94892],{"class":282},[51,95762,95763],{"class":53,"line":3684},[51,95764,95765],{"class":57},"#按最后一列排序\n",[51,95767,95768,95770,95772,95775,95777,95779],{"class":53,"line":3690},[51,95769,975],{"class":72},[51,95771,108],{"class":64},[51,95773,95774],{"class":72},"aa[:,",[51,95776,1778],{"class":64},[51,95778,791],{"class":175},[51,95780,34210],{"class":72},[51,95782,95783],{"class":53,"line":3696},[51,95784,95785],{"class":57},"#获取最后一列排好序的索引\n",[51,95787,95788,95790,95792],{"class":53,"line":3701},[51,95789,75022],{"class":72},[51,95791,108],{"class":64},[51,95793,95794],{"class":72},"np.argsort(b)\n",[51,95796,95797],{"class":53,"line":8910},[51,95798,95799],{"class":72},"aa[index]\n",[51,95801,95802],{"class":53,"line":8934},[51,95803,94892],{"class":282},[51,95805,95806],{"class":53,"line":8939},[51,95807,95618],{"class":282},[51,95809,95810],{"class":53,"line":8945},[51,95811,95812],{"class":282},"       [46, 88, 81, 37, 25, 77],\n",[51,95814,95815],{"class":53,"line":8972},[51,95816,95628],{"class":282},[51,95818,95819],{"class":53,"line":8977},[51,95820,95821],{"class":282},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[51,95823,95824],{"class":53,"line":8983},[51,95825,94892],{"class":282},[1179,95827,95828],{},"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":35,"searchDepth":61,"depth":61,"links":95830},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95477,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95837,"title":95838,"body":95839,"description":24339,"extension":1190,"meta":95869,"navigation":1192,"path":95870,"seo":95871,"stem":95872,"__hash__":95873},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95840,"toc":95867},[95841,95844,95847,95850,95853,95856,95859,95862],[10,95842,95838],{"id":95843},"_14广播机制",[40,95845,95846],{},"广播的规则：",[40,95848,95849],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[40,95851,95852],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[40,95854,95855],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[40,95857,95858],{},"3.如果没有维度形状为1，则会引发异常",[40,95860,95861],{},"也就是只有维度或者个数为1才可以进行广播操作",[40,95863,95864],{},[2564,95865],{"alt":35,"src":95866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":35,"searchDepth":61,"depth":61,"links":95868},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95838,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95875,"title":95876,"body":95877,"description":24339,"extension":1190,"meta":95975,"navigation":1192,"path":95976,"seo":95977,"stem":95978,"__hash__":95979},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95878,"toc":95973},[95879,95882,95885,95970],[10,95880,95876],{"id":95881},"_15比较掩码",[40,95883,95884],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[29,95886,95888],{"className":31342,"code":95887,"language":31344,"meta":35,"style":35},"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",[37,95889,95890,95936,95947,95961,95965],{"__ignoreMap":35},[51,95891,95892,95894,95896,95899,95901,95903,95905,95907,95909,95911,95913,95915,95917,95919,95921,95923,95925,95927,95929,95931,95933],{"class":53,"line":54},[51,95893,981],{"class":72},[51,95895,108],{"class":64},[51,95897,95898],{"class":72},"np.array([[",[51,95900,791],{"class":175},[51,95902,82],{"class":72},[51,95904,1334],{"class":175},[51,95906,82],{"class":72},[51,95908,1328],{"class":175},[51,95910,48994],{"class":72},[51,95912,1719],{"class":175},[51,95914,82],{"class":72},[51,95916,1744],{"class":175},[51,95918,82],{"class":72},[51,95920,1769],{"class":175},[51,95922,48994],{"class":72},[51,95924,1970],{"class":175},[51,95926,82],{"class":72},[51,95928,1995],{"class":175},[51,95930,82],{"class":72},[51,95932,2020],{"class":175},[51,95934,95935],{"class":72},"]])\n",[51,95937,95938,95940,95942,95944],{"class":53,"line":61},[51,95939,981],{"class":72},[51,95941,2154],{"class":64},[51,95943,457],{"class":175},[51,95945,95946],{"class":57},"#结果是一个由True,False组成的数组\n",[51,95948,95949,95952,95954,95956,95958],{"class":53,"line":93},[51,95950,95951],{"class":72},"a[a",[51,95953,2154],{"class":64},[51,95955,457],{"class":175},[51,95957,2184],{"class":72},[51,95959,95960],{"class":57},"#小于20的元素会存到这个数组中\n",[51,95962,95963],{"class":53,"line":99},[51,95964,94528],{"class":57},[51,95966,95967],{"class":53,"line":120},[51,95968,95969],{"class":57},"#array([ 1,  2,  3, 11, 12, 13])\n",[1179,95971,95972],{},"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":35,"searchDepth":61,"depth":61,"links":95974},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95876,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95981,"title":95982,"body":95983,"description":24339,"extension":1190,"meta":96075,"navigation":1192,"path":96076,"seo":96077,"stem":96078,"__hash__":96079},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95984,"toc":96073},[95985,95988,95991,95994,95997,96000,96065,96070],[10,95986,95982],{"id":95987},"_16魔法命令time",[40,95989,95990],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[40,95992,95993],{},"%:行模式",[40,95995,95996],{},"%%:单元格模式",[40,95998,95999],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[29,96001,96003],{"className":31342,"code":96002,"language":31344,"meta":35,"style":35},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[37,96004,96005,96010,96017,96022,96031,96044,96048,96056],{"__ignoreMap":35},[51,96006,96007],{"class":53,"line":54},[51,96008,96009],{"class":57},"#程序执行时间\n",[51,96011,96012,96014],{"class":53,"line":61},[51,96013,31356],{"class":64},[51,96015,96016],{"class":72}," time \n",[51,96018,96019],{"class":53,"line":93},[51,96020,96021],{"class":57},"#获取时间\n",[51,96023,96024,96027,96029],{"class":53,"line":99},[51,96025,96026],{"class":72},"start",[51,96028,108],{"class":64},[51,96030,33382],{"class":72},[51,96032,96033,96036,96039,96041],{"class":53,"line":120},[51,96034,96035],{"class":72},"time.sleep(",[51,96037,96038],{"class":175},"0.4",[51,96040,1677],{"class":72},[51,96042,96043],{"class":57},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[51,96045,96046],{"class":53,"line":129},[51,96047,96021],{"class":57},[51,96049,96050,96052,96054],{"class":53,"line":206},[51,96051,46765],{"class":72},[51,96053,108],{"class":64},[51,96055,33382],{"class":72},[51,96057,96058,96060,96062],{"class":53,"line":212},[51,96059,46765],{"class":72},[51,96061,1778],{"class":64},[51,96063,96064],{"class":72},"start\n",[40,96066,96067],{},[2564,96068],{"alt":35,"src":96069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1179,96071,96072],{},"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":35,"searchDepth":61,"depth":61,"links":96074},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95982,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96081,"title":96082,"body":96083,"description":24339,"extension":1190,"meta":96118,"navigation":1192,"path":96119,"seo":96120,"stem":96121,"__hash__":96122},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96084,"toc":96116},[96085,96088,96091,96094,96097,96100,96103,96106,96111],[10,96086,96082],{"id":96087},"_17魔法命令timeit",[40,96089,96090],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[40,96092,96093],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[40,96095,96096],{},"单元格模式：",[40,96098,96099],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[40,96101,96102],{},"初始化语句执行次数由轮数来决定",[40,96104,96105],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[40,96107,96108],{},[2564,96109],{"alt":35,"src":96110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[40,96112,96113],{},[2564,96114],{"alt":35,"src":96115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":35,"searchDepth":61,"depth":61,"links":96117},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96082,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96124,"title":96125,"body":96126,"description":24339,"extension":1190,"meta":96144,"navigation":1192,"path":96145,"seo":96146,"stem":96147,"__hash__":96148},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96127,"toc":96142},[96128,96131,96134,96137],[10,96129,96125],{"id":96130},"_18魔法命令writefile和run",[40,96132,96133],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[40,96135,96136],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[40,96138,96139],{},[2564,96140],{"alt":35,"src":96141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":35,"searchDepth":61,"depth":61,"links":96143},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96125,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96150,"title":96151,"body":96152,"description":24339,"extension":1190,"meta":96205,"navigation":1192,"path":96206,"seo":96207,"stem":96208,"__hash__":96209},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96153,"toc":96203},[96154,96157,96160,96162,96165,96168,96173,96176,96179,96182,96185,96188,96191,96194,96197,96200],[10,96155,96151],{"id":96156},"_19魔法命令memit",[40,96158,96159],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[40,96161,25563],{},[40,96163,96164],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[40,96166,96167],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[40,96169,96170],{},[2564,96171],{"alt":35,"src":96172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[40,96174,96175],{},"补充：",[40,96177,96178],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[40,96180,96181],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[40,96183,96184],{},"解决方法：",[40,96186,96187],{},"1.cmd",[40,96189,96190],{},"2.依次输入以下代码：",[40,96192,96193],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[40,96195,96196],{},"pip install --upgrade ipython",[40,96198,96199],{},"#升级 memory_profiler 和 setuptools",[40,96201,96202],{},"pip install --upgrade memory_profiler setuptools",{"title":35,"searchDepth":61,"depth":61,"links":96204},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96151,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96211,"title":96212,"body":96213,"description":24339,"extension":1190,"meta":97859,"navigation":1192,"path":97860,"seo":97861,"stem":97862,"__hash__":97863},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96214,"toc":97829},[96215,96218,96222,96226,96287,96290,96295,96299,96304,96309,96314,96319,96322,96327,96331,96335,96368,96371,96374,96377,96429,96432,96468,96471,96513,96517,96538,96540,96577,96579,96584,96586,96591,96595,96598,96626,96630,96634,96687,96691,96783,96787,96791,96794,96799,96803,96828,96833,96837,96840,96843,96846,96849,96852,96855,96858,96870,96874,96878,96881,96913,96916,96939,96942,96968,96971,96997,97000,97034,97037,97099,97103,97106,97110,97113,97139,97142,97145,97150,97153,97222,97224,97229,97290,97293,97304,97310,97315,97319,97322,97335,97339,97354,97356,97379,97381,97407,97410,97413,97416,97464,97466,97471,97475,97479,97506,97510,97537,97540,97545,97550,97640,97644,97702,97707,97710,97713,97755,97759,97815,97820,97823,97826],[10,96216,96212],{"id":96217},"_2创建数组",[14,96219,96221],{"id":96220},"_21-array函数创建数组","2.1 array()函数创建数组",[1233,96223,96225],{"id":96224},"_221-函数语句","2.2.1 函数语句",[29,96227,96229],{"className":31342,"code":96228,"language":31344,"meta":35,"style":35},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[37,96230,96231],{"__ignoreMap":35},[51,96232,96233,96236,96239,96241,96243,96245,96247,96249,96252,96254,96257,96259,96262,96264,96266,96268,96271,96273,96276,96278,96281,96283,96285],{"class":53,"line":54},[51,96234,96235],{"class":72},"numpy.array(",[51,96237,96238],{"class":175},"object",[51,96240,13397],{"class":72},[51,96242,94464],{"class":78},[51,96244,14526],{"class":64},[51,96246,39897],{"class":175},[51,96248,13397],{"class":72},[51,96250,96251],{"class":78},"copy",[51,96253,14526],{"class":64},[51,96255,96256],{"class":175}," True",[51,96258,13397],{"class":72},[51,96260,96261],{"class":78},"order",[51,96263,14526],{"class":64},[51,96265,39897],{"class":175},[51,96267,13397],{"class":72},[51,96269,96270],{"class":78},"subok",[51,96272,14526],{"class":64},[51,96274,96275],{"class":175}," False",[51,96277,13397],{"class":72},[51,96279,96280],{"class":78},"ndmin",[51,96282,14526],{"class":64},[51,96284,5169],{"class":175},[51,96286,90],{"class":72},[40,96288,96289],{},"参数：",[40,96291,96292],{},[2564,96293],{"alt":35,"src":96294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[1233,96296,96298],{"id":96297},"_222-实例","2.2.2 实例",[40,96300,96301],{},[2564,96302],{"alt":35,"src":96303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[40,96305,96306],{},[2564,96307],{"alt":35,"src":96308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[40,96310,96311],{},[2564,96312],{"alt":35,"src":96313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[40,96315,96316],{},[2564,96317],{"alt":35,"src":96318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[40,96320,96321],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[40,96323,96324],{},[2564,96325],{"alt":35,"src":96326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96328,96330],{"id":96329},"_22-随机数创建数组","2.2 随机数创建数组",[1233,96332,96334],{"id":96333},"_221-random语句","2.2.1 random语句",[29,96336,96338],{"className":31342,"code":96337,"language":31344,"meta":35,"style":35},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[37,96339,96340,96345,96350,96358,96363],{"__ignoreMap":35},[51,96341,96342],{"class":53,"line":54},[51,96343,96344],{"class":57},"#random.random()\n",[51,96346,96347],{"class":53,"line":61},[51,96348,96349],{"class":57},"#确定随机种子,就是每次运行结果是相同的\n",[51,96351,96352,96354,96356],{"class":53,"line":93},[51,96353,95571],{"class":72},[51,96355,176],{"class":175},[51,96357,90],{"class":72},[51,96359,96360],{"class":53,"line":99},[51,96361,96362],{"class":72},"np.random.random()\n",[51,96364,96365],{"class":53,"line":120},[51,96366,96367],{"class":57},"#生成一个随机的数目\n",[40,96369,96370],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[40,96372,96373],{},"可以指定数组形状 size",[40,96375,96376],{},"①生成一维数组",[29,96378,96380],{"className":31342,"code":96379,"language":31344,"meta":35,"style":35},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[37,96381,96382,96387,96400,96405,96421],{"__ignoreMap":35},[51,96383,96384],{"class":53,"line":54},[51,96385,96386],{"class":57},"#random.random(size())\n",[51,96388,96389,96392,96394,96396,96398],{"class":53,"line":61},[51,96390,96391],{"class":72},"np.random.random(",[51,96393,32460],{"class":78},[51,96395,108],{"class":64},[51,96397,1568],{"class":175},[51,96399,90],{"class":72},[51,96401,96402],{"class":53,"line":93},[51,96403,96404],{"class":57},"#生成一位的五个元素\n",[51,96406,96407,96409,96411,96413,96415,96417,96419],{"class":53,"line":99},[51,96408,981],{"class":72},[51,96410,108],{"class":64},[51,96412,96391],{"class":72},[51,96414,32460],{"class":78},[51,96416,108],{"class":64},[51,96418,1543],{"class":175},[51,96420,90],{"class":72},[51,96422,96423,96426],{"class":53,"line":120},[51,96424,96425],{"class":72},"a.shape ",[51,96427,96428],{"class":57},"#输出数组形状\n",[40,96430,96431],{},"②生成二维数组",[29,96433,96435],{"className":31342,"code":96434,"language":31344,"meta":35,"style":35},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[37,96436,96437,96441,96463],{"__ignoreMap":35},[51,96438,96439],{"class":53,"line":54},[51,96440,94265],{"class":57},[51,96442,96443,96445,96447,96449,96451,96453,96455,96457,96459,96461],{"class":53,"line":61},[51,96444,94270],{"class":72},[51,96446,108],{"class":64},[51,96448,96391],{"class":72},[51,96450,32460],{"class":78},[51,96452,108],{"class":64},[51,96454,73],{"class":72},[51,96456,1543],{"class":175},[51,96458,82],{"class":72},[51,96460,1568],{"class":175},[51,96462,31461],{"class":72},[51,96464,96465],{"class":53,"line":93},[51,96466,96467],{"class":57},"#生成四行五列的数组\n",[40,96469,96470],{},"③生成三维数组",[29,96472,96474],{"className":31342,"code":96473,"language":31344,"meta":35,"style":35},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[37,96475,96476,96481,96508],{"__ignoreMap":35},[51,96477,96478],{"class":53,"line":54},[51,96479,96480],{"class":57},"#三维数组\n",[51,96482,96483,96486,96488,96490,96492,96494,96496,96498,96500,96502,96504,96506],{"class":53,"line":61},[51,96484,96485],{"class":72},"aaa",[51,96487,108],{"class":64},[51,96489,96391],{"class":72},[51,96491,32460],{"class":78},[51,96493,108],{"class":64},[51,96495,73],{"class":72},[51,96497,1334],{"class":175},[51,96499,82],{"class":72},[51,96501,1328],{"class":175},[51,96503,82],{"class":72},[51,96505,1543],{"class":175},[51,96507,31461],{"class":72},[51,96509,96510],{"class":53,"line":93},[51,96511,96512],{"class":72},"aaa.shape\n",[1233,96514,96516],{"id":96515},"_222-randint语句","2.2.2 randint语句",[29,96518,96520],{"className":31342,"code":96519,"language":31344,"meta":35,"style":35},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[37,96521,96522,96527],{"__ignoreMap":35},[51,96523,96524],{"class":53,"line":54},[51,96525,96526],{"class":57},"#生成随机的整数 random.randint(low,high,size)\n",[51,96528,96529,96531,96533,96535],{"class":53,"line":61},[51,96530,94078],{"class":72},[51,96532,1568],{"class":175},[51,96534,14676],{"class":72},[51,96536,96537],{"class":57},"#0~5中的随机一个数\n",[40,96539,96376],{},[29,96541,96543],{"className":31342,"code":96542,"language":31344,"meta":35,"style":35},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[37,96544,96545,96550,96572],{"__ignoreMap":35},[51,96546,96547],{"class":53,"line":54},[51,96548,96549],{"class":57},"#一维\n",[51,96551,96552,96554,96556,96558,96560,96562,96564,96566,96568,96570],{"class":53,"line":61},[51,96553,94078],{"class":72},[51,96555,791],{"class":175},[51,96557,82],{"class":72},[51,96559,1719],{"class":175},[51,96561,82],{"class":72},[51,96563,32460],{"class":78},[51,96565,108],{"class":64},[51,96567,73],{"class":72},[51,96569,443],{"class":175},[51,96571,31461],{"class":72},[51,96573,96574],{"class":53,"line":93},[51,96575,96576],{"class":57},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[40,96578,96431],{},[40,96580,96581],{},[2564,96582],{"alt":35,"src":96583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[40,96585,96470],{},[40,96587,96588],{},[2564,96589],{"alt":35,"src":96590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[1233,96592,96594],{"id":96593},"_222-rand语句","2.2.2 rand语句",[40,96596,96597],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[29,96599,96601],{"className":31342,"code":96600,"language":31344,"meta":35,"style":35},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[37,96602,96603,96616,96621],{"__ignoreMap":35},[51,96604,96605,96608,96610,96612,96614],{"class":53,"line":54},[51,96606,96607],{"class":72},"np.random.rand(",[51,96609,612],{"class":175},[51,96611,82],{"class":72},[51,96613,443],{"class":175},[51,96615,90],{"class":72},[51,96617,96618],{"class":53,"line":61},[51,96619,96620],{"class":57},"#第一个参数100：行数，表示有100个样本\n",[51,96622,96623],{"class":53,"line":93},[51,96624,96625],{"class":57},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96627,96629],{"id":96628},"_23-arange创建数组","2.3 arange()创建数组",[1233,96631,96633],{"id":96632},"_231-函数语句","2.3.1 函数语句",[29,96635,96637],{"className":31342,"code":96636,"language":31344,"meta":35,"style":35},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[37,96638,96639,96653,96658,96663,96668,96673,96678,96683],{"__ignoreMap":35},[51,96640,96641,96644,96646,96648,96651],{"class":53,"line":54},[51,96642,96643],{"class":72},"numpy.arange([start,] stop[, step], ",[51,96645,94464],{"class":78},[51,96647,108],{"class":64},[51,96649,96650],{"class":175},"None",[51,96652,90],{"class":72},[51,96654,96655],{"class":53,"line":61},[51,96656,96657],{"class":57},"#参数\n",[51,96659,96660],{"class":53,"line":93},[51,96661,96662],{"class":282},"\"\"\"\n",[51,96664,96665],{"class":53,"line":99},[51,96666,96667],{"class":282},"start:起始值，可选，默认从 0 开始。\n",[51,96669,96670],{"class":53,"line":120},[51,96671,96672],{"class":282},"stop:结束值（不包含该值）。\n",[51,96674,96675],{"class":53,"line":129},[51,96676,96677],{"class":282},"step:步长，可选，默认是 1。可以为浮点数。\n",[51,96679,96680],{"class":53,"line":206},[51,96681,96682],{"class":282},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[51,96684,96685],{"class":53,"line":212},[51,96686,96662],{"class":282},[1233,96688,96690],{"id":96689},"_232-实例","2.3.2 实例",[29,96692,96694],{"className":31342,"code":96693,"language":31344,"meta":35,"style":35},"#创建一维数组\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",[37,96695,96696,96700,96724,96729,96734,96738,96761,96765,96769,96774,96779],{"__ignoreMap":35},[51,96697,96698],{"class":53,"line":54},[51,96699,94069],{"class":57},[51,96701,96702,96704,96706,96708,96710,96712,96714,96716,96718,96720,96722],{"class":53,"line":61},[51,96703,93966],{"class":72},[51,96705,791],{"class":175},[51,96707,82],{"class":72},[51,96709,1970],{"class":175},[51,96711,82],{"class":72},[51,96713,791],{"class":175},[51,96715,82],{"class":72},[51,96717,94464],{"class":78},[51,96719,108],{"class":64},[51,96721,65],{"class":175},[51,96723,90],{"class":72},[51,96725,96726],{"class":53,"line":93},[51,96727,96728],{"class":57},"#输出结果：\n",[51,96730,96731],{"class":53,"line":99},[51,96732,96733],{"class":57},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[51,96735,96736],{"class":53,"line":120},[51,96737,94911],{"class":57},[51,96739,96740,96743,96745,96747,96749,96752,96754,96756,96758],{"class":53,"line":129},[51,96741,96742],{"class":72},"np.array([np.arange(",[51,96744,791],{"class":175},[51,96746,82],{"class":72},[51,96748,1543],{"class":175},[51,96750,96751],{"class":72},"),np.arange(",[51,96753,1543],{"class":175},[51,96755,82],{"class":72},[51,96757,1618],{"class":175},[51,96759,96760],{"class":72},")])\n",[51,96762,96763],{"class":53,"line":206},[51,96764,94528],{"class":57},[51,96766,96767],{"class":53,"line":212},[51,96768,96662],{"class":282},[51,96770,96771],{"class":53,"line":227},[51,96772,96773],{"class":282},"array([[1, 2, 3],\n",[51,96775,96776],{"class":53,"line":370},[51,96777,96778],{"class":282},"       [4, 5, 6]])\n",[51,96780,96781],{"class":53,"line":387},[51,96782,96662],{"class":282},[14,96784,96786],{"id":96785},"_24-生态分布","2.4 生态分布",[1233,96788,96790],{"id":96789},"_241-标准正态分布","2.4.1 标准正态分布",[40,96792,96793],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[40,96795,96796],{},[2564,96797],{"alt":35,"src":96798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[1233,96800,96802],{"id":96801},"_242-常规正态分布","2.4.2 常规正态分布",[29,96804,96806],{"className":31342,"code":96805,"language":31344,"meta":35,"style":35},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[37,96807,96808,96813,96818,96823],{"__ignoreMap":35},[51,96809,96810],{"class":53,"line":54},[51,96811,96812],{"class":72},"random.normal(loc,scale,size)也可以生成正态分布\n",[51,96814,96815],{"class":53,"line":61},[51,96816,96817],{"class":57},"#loc:期望\n",[51,96819,96820],{"class":53,"line":93},[51,96821,96822],{"class":57},"#scale:方差\n",[51,96824,96825],{"class":53,"line":99},[51,96826,96827],{"class":57},"#size:用于确定是几维的数列\n",[40,96829,96830],{},[2564,96831],{"alt":35,"src":96832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96834,96836],{"id":96835},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[40,96838,96839],{},"ndim:秩，维度个数",[40,96841,96842],{},"size:数组元素的个数",[40,96844,96845],{},"shape:数组的形状",[40,96847,96848],{},"dtype:数组元素的类型",[40,96850,96851],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[40,96853,96854],{},"他们都是属性，通过数组.属性的形式来确定",[40,96856,96857],{},"如果需要输出多个可以通过以下方式：",[29,96859,96861],{"className":31342,"code":96860,"language":31344,"meta":35,"style":35},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[37,96862,96863],{"__ignoreMap":35},[51,96864,96865,96867],{"class":53,"line":54},[51,96866,31379],{"class":175},[51,96868,96869],{"class":72},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96871,96873],{"id":96872},"_26-其他方式创建数组","2.6 其他方式创建数组",[1233,96875,96877],{"id":96876},"_261-zeros创建数组","2.6.1 zeros()创建数组",[40,96879,96880],{},"①创建一维数组",[29,96882,96884],{"className":31342,"code":96883,"language":31344,"meta":35,"style":35},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[37,96885,96886,96895,96899,96904,96909],{"__ignoreMap":35},[51,96887,96888,96891,96893],{"class":53,"line":54},[51,96889,96890],{"class":72},"np.zeros(",[51,96892,443],{"class":175},[51,96894,90],{"class":72},[51,96896,96897],{"class":53,"line":61},[51,96898,96662],{"class":282},[51,96900,96901],{"class":53,"line":93},[51,96902,96903],{"class":282},"输出结果：\n",[51,96905,96906],{"class":53,"line":99},[51,96907,96908],{"class":282},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[51,96910,96911],{"class":53,"line":120},[51,96912,96662],{"class":282},[40,96914,96915],{},"上方代码等价于：",[29,96917,96919],{"className":31342,"code":96918,"language":31344,"meta":35,"style":35},"np.zeros(shape=(10))#创建10个元素的0数组\n",[37,96920,96921],{"__ignoreMap":35},[51,96922,96923,96925,96928,96930,96932,96934,96936],{"class":53,"line":54},[51,96924,96890],{"class":72},[51,96926,96927],{"class":78},"shape",[51,96929,108],{"class":64},[51,96931,73],{"class":72},[51,96933,443],{"class":175},[51,96935,83735],{"class":72},[51,96937,96938],{"class":57},"#创建10个元素的0数组\n",[40,96940,96941],{},"也可以指定类型",[29,96943,96945],{"className":31342,"code":96944,"language":31344,"meta":35,"style":35},"#指定类型\nnp.zeros(5,dtype=int)\n",[37,96946,96947,96952],{"__ignoreMap":35},[51,96948,96949],{"class":53,"line":54},[51,96950,96951],{"class":57},"#指定类型\n",[51,96953,96954,96956,96958,96960,96962,96964,96966],{"class":53,"line":61},[51,96955,96890],{"class":72},[51,96957,1568],{"class":175},[51,96959,82],{"class":72},[51,96961,94464],{"class":78},[51,96963,108],{"class":64},[51,96965,65],{"class":175},[51,96967,90],{"class":72},[40,96969,96970],{},"②创建二维数组",[29,96972,96974],{"className":31342,"code":96973,"language":31344,"meta":35,"style":35},"np.zeros((3,4),dtype=int)\n",[37,96975,96976],{"__ignoreMap":35},[51,96977,96978,96981,96983,96985,96987,96989,96991,96993,96995],{"class":53,"line":54},[51,96979,96980],{"class":72},"np.zeros((",[51,96982,1328],{"class":175},[51,96984,82],{"class":72},[51,96986,1543],{"class":175},[51,96988,43220],{"class":72},[51,96990,94464],{"class":78},[51,96992,108],{"class":64},[51,96994,65],{"class":175},[51,96996,90],{"class":72},[40,96998,96999],{},"③创建三维数组",[29,97001,97003],{"className":31342,"code":97002,"language":31344,"meta":35,"style":35},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[37,97004,97005,97010],{"__ignoreMap":35},[51,97006,97007],{"class":53,"line":54},[51,97008,97009],{"class":57},"#创建三维数组\n",[51,97011,97012,97014,97016,97018,97020,97022,97024,97026,97028,97030,97032],{"class":53,"line":61},[51,97013,96980],{"class":72},[51,97015,1328],{"class":175},[51,97017,82],{"class":72},[51,97019,1543],{"class":175},[51,97021,82],{"class":72},[51,97023,1568],{"class":175},[51,97025,43220],{"class":72},[51,97027,94464],{"class":78},[51,97029,108],{"class":64},[51,97031,65],{"class":175},[51,97033,90],{"class":72},[40,97035,97036],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[29,97038,97040],{"className":31342,"code":97039,"language":31344,"meta":35,"style":35},"#使用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",[37,97041,97042,97047,97062,97067,97072,97094],{"__ignoreMap":35},[51,97043,97044],{"class":53,"line":54},[51,97045,97046],{"class":57},"#使用zeros_like将创建的一维数组变成全0的数组\n",[51,97048,97049,97051,97053,97055,97057,97059],{"class":53,"line":61},[51,97050,981],{"class":72},[51,97052,108],{"class":64},[51,97054,93966],{"class":72},[51,97056,1543],{"class":175},[51,97058,1677],{"class":72},[51,97060,97061],{"class":57},"#这个得到的结果：一维数组0，1，2，3\n",[51,97063,97064],{"class":53,"line":93},[51,97065,97066],{"class":72},"np.zeros_like(a)\n",[51,97068,97069],{"class":53,"line":99},[51,97070,97071],{"class":57},"#使用zeros_like将创建的二维数组变成全0的数组\n",[51,97073,97074,97076,97078,97080,97082,97084,97086,97088,97090,97092],{"class":53,"line":120},[51,97075,94270],{"class":72},[51,97077,108],{"class":64},[51,97079,96391],{"class":72},[51,97081,32460],{"class":78},[51,97083,108],{"class":64},[51,97085,73],{"class":72},[51,97087,1543],{"class":175},[51,97089,82],{"class":72},[51,97091,1568],{"class":175},[51,97093,31461],{"class":72},[51,97095,97096],{"class":53,"line":129},[51,97097,97098],{"class":72},"np.zeros_like(aa)\n",[1233,97100,97102],{"id":97101},"_262-ones创建数组","2.6.2 ones()创建数组",[40,97104,97105],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[1233,97107,97109],{"id":97108},"_263-empty创建数组","2.6.3 empty()创建数组",[40,97111,97112],{},"①empty()用法",[29,97114,97116],{"className":31342,"code":97115,"language":31344,"meta":35,"style":35},"numpy.empty(shape,dtype=float,order='c')\n",[37,97117,97118],{"__ignoreMap":35},[51,97119,97120,97123,97125,97127,97129,97131,97133,97135,97137],{"class":53,"line":54},[51,97121,97122],{"class":72},"numpy.empty(shape,",[51,97124,94464],{"class":78},[51,97126,108],{"class":64},[51,97128,1300],{"class":175},[51,97130,82],{"class":72},[51,97132,96261],{"class":78},[51,97134,108],{"class":64},[51,97136,76992],{"class":282},[51,97138,90],{"class":72},[40,97140,97141],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[40,97143,97144],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[40,97146,97147],{},[2564,97148],{"alt":35,"src":97149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[40,97151,97152],{},"②empty()用法",[29,97154,97156],{"className":31342,"code":97155,"language":31344,"meta":35,"style":35},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[37,97157,97158,97179,97191,97212,97217],{"__ignoreMap":35},[51,97159,97160,97162,97164,97167,97169,97171,97173,97175,97177],{"class":53,"line":54},[51,97161,2090],{"class":72},[51,97163,108],{"class":64},[51,97165,97166],{"class":72},"np.empty(",[51,97168,443],{"class":175},[51,97170,82],{"class":72},[51,97172,94464],{"class":78},[51,97174,108],{"class":64},[51,97176,65],{"class":175},[51,97178,90],{"class":72},[51,97180,97181,97183,97185,97187,97189],{"class":53,"line":61},[51,97182,2065],{"class":72},[51,97184,108],{"class":64},[51,97186,93966],{"class":72},[51,97188,1568],{"class":175},[51,97190,90],{"class":72},[51,97192,97193,97196,97198,97201,97203,97205,97208,97210],{"class":53,"line":93},[51,97194,97195],{"class":72},"np.add(",[51,97197,1334],{"class":175},[51,97199,97200],{"class":72},",x,",[51,97202,94018],{"class":78},[51,97204,108],{"class":64},[51,97206,97207],{"class":72},"y[:",[51,97209,1568],{"class":175},[51,97211,5731],{"class":72},[51,97213,97214],{"class":53,"line":99},[51,97215,97216],{"class":57},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[51,97218,97219],{"class":53,"line":120},[51,97220,97221],{"class":72},"y\n",[40,97223,12476],{},[40,97225,97226],{},[2564,97227],{"alt":35,"src":97228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[29,97230,97232],{"className":31342,"code":97231,"language":31344,"meta":35,"style":35},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[37,97233,97234,97250,97270,97285],{"__ignoreMap":35},[51,97235,97236,97238,97240,97242,97244,97246,97248],{"class":53,"line":54},[51,97237,2065],{"class":72},[51,97239,108],{"class":64},[51,97241,93966],{"class":72},[51,97243,791],{"class":175},[51,97245,82],{"class":72},[51,97247,1593],{"class":175},[51,97249,90],{"class":72},[51,97251,97252,97254,97256,97258,97260,97262,97264,97266,97268],{"class":53,"line":61},[51,97253,2090],{"class":72},[51,97255,108],{"class":64},[51,97257,97166],{"class":72},[51,97259,1568],{"class":175},[51,97261,82],{"class":72},[51,97263,94464],{"class":78},[51,97265,108],{"class":64},[51,97267,65],{"class":175},[51,97269,90],{"class":72},[51,97271,97272,97275,97277,97279,97281,97283],{"class":53,"line":93},[51,97273,97274],{"class":72},"np.add(x,",[51,97276,1334],{"class":175},[51,97278,82],{"class":72},[51,97280,94018],{"class":78},[51,97282,108],{"class":64},[51,97284,94413],{"class":72},[51,97286,97287],{"class":53,"line":99},[51,97288,97289],{"class":57},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[40,97291,97292],{},"③empty_like()",[40,97294,97295],{},[840,97296,97297,97298,97303],{},"创建一个",[840,97299,97300],{},[840,97301,97302],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[40,97305,97306,97309],{},[37,97307,97308],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[40,97311,97312],{},[2564,97313],{"alt":35,"src":97314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[1233,97316,97318],{"id":97317},"_264-用法","2.6.4 ？？用法",[40,97320,97321],{},"当想查看一个函数的参数时，可以通过？？来实现",[29,97323,97325],{"className":31342,"code":97324,"language":31344,"meta":35,"style":35},"np.full??\n",[37,97326,97327],{"__ignoreMap":35},[51,97328,97329,97332],{"class":53,"line":54},[51,97330,97331],{"class":72},"np.full",[51,97333,97334],{"class":78367},"??\n",[1233,97336,97338],{"id":97337},"_265-full创建数组","2.6.5 full()创建数组",[29,97340,97342],{"className":31342,"code":97341,"language":31344,"meta":35,"style":35},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[37,97343,97344,97349],{"__ignoreMap":35},[51,97345,97346],{"class":53,"line":54},[51,97347,97348],{"class":72},"full(shape,fill_value)\n",[51,97350,97351],{"class":53,"line":61},[51,97352,97353],{"class":72},"创建全为某个指定值的数组\n",[40,97355,95494],{},[29,97357,97359],{"className":31342,"code":97358,"language":31344,"meta":35,"style":35},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[37,97360,97361,97366],{"__ignoreMap":35},[51,97362,97363],{"class":53,"line":54},[51,97364,97365],{"class":57},"#创建一个一维数组,以20进行填充\n",[51,97367,97368,97371,97373,97375,97377],{"class":53,"line":61},[51,97369,97370],{"class":72},"np.full(",[51,97372,443],{"class":175},[51,97374,82],{"class":72},[51,97376,457],{"class":175},[51,97378,90],{"class":72},[40,97380,94255],{},[29,97382,97384],{"className":31342,"code":97383,"language":31344,"meta":35,"style":35},"#创建二维数组\nnp.full((3,5),11)\n",[37,97385,97386,97390],{"__ignoreMap":35},[51,97387,97388],{"class":53,"line":54},[51,97389,94911],{"class":57},[51,97391,97392,97395,97397,97399,97401,97403,97405],{"class":53,"line":61},[51,97393,97394],{"class":72},"np.full((",[51,97396,1328],{"class":175},[51,97398,82],{"class":72},[51,97400,1568],{"class":175},[51,97402,43220],{"class":72},[51,97404,1719],{"class":175},[51,97406,90],{"class":72},[40,97408,97409],{},"③full_like用法",[40,97411,97412],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[40,97414,97415],{},"这里是指定填充而已",[29,97417,97419],{"className":31342,"code":97418,"language":31344,"meta":35,"style":35},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[37,97420,97421,97426,97450,97455],{"__ignoreMap":35},[51,97422,97423],{"class":53,"line":54},[51,97424,97425],{"class":57},"#创建一个指定形状数组\n",[51,97427,97428,97430,97432,97434,97436,97438,97440,97442,97444,97446,97448],{"class":53,"line":61},[51,97429,981],{"class":72},[51,97431,108],{"class":64},[51,97433,93966],{"class":72},[51,97435,791],{"class":175},[51,97437,82],{"class":72},[51,97439,1574],{"class":175},[51,97441,93971],{"class":72},[51,97443,1543],{"class":175},[51,97445,82],{"class":72},[51,97447,1668],{"class":175},[51,97449,90],{"class":72},[51,97451,97452],{"class":53,"line":93},[51,97453,97454],{"class":57},"#进行指定填充\n",[51,97456,97457,97460,97462],{"class":53,"line":99},[51,97458,97459],{"class":72},"np.full_like(a,",[51,97461,443],{"class":175},[51,97463,90],{"class":72},[40,97465,12476],{},[40,97467,97468],{},[2564,97469],{"alt":35,"src":97470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[1233,97472,97474],{"id":97473},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22960,97476,97478],{"id":97477},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[29,97480,97482],{"className":31342,"code":97481,"language":31344,"meta":35,"style":35},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[37,97483,97484,97501],{"__ignoreMap":35},[51,97485,97486,97489,97491,97493,97495,97497,97499],{"class":53,"line":54},[51,97487,97488],{"class":72},"np.eye(",[51,97490,1543],{"class":175},[51,97492,82],{"class":72},[51,97494,94464],{"class":78},[51,97496,108],{"class":64},[51,97498,65],{"class":175},[51,97500,90],{"class":72},[51,97502,97503],{"class":53,"line":61},[51,97504,97505],{"class":57},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22960,97507,97509],{"id":97508},"_2662-法2identity","2.6.6.2 法2：identity()",[29,97511,97513],{"className":31342,"code":97512,"language":31344,"meta":35,"style":35},"#identity()\nnp.identity(5,dtype=int)\n",[37,97514,97515,97520],{"__ignoreMap":35},[51,97516,97517],{"class":53,"line":54},[51,97518,97519],{"class":57},"#identity()\n",[51,97521,97522,97525,97527,97529,97531,97533,97535],{"class":53,"line":61},[51,97523,97524],{"class":72},"np.identity(",[51,97526,1568],{"class":175},[51,97528,82],{"class":72},[51,97530,94464],{"class":78},[51,97532,108],{"class":64},[51,97534,65],{"class":175},[51,97536,90],{"class":72},[40,97538,97539],{},"两个函数是有区别的",[40,97541,97542],{},[2564,97543],{"alt":35,"src":97544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[40,97546,97547],{},[2564,97548],{"alt":35,"src":97549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[29,97551,97553],{"className":31342,"code":97552,"language":31344,"meta":35,"style":35},"# 创建一个 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",[37,97554,97555,97560,97572,97577,97582,97587,97592,97596,97601,97621,97625,97630,97635],{"__ignoreMap":35},[51,97556,97557],{"class":53,"line":54},[51,97558,97559],{"class":57},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[51,97561,97562,97564,97566,97568,97570],{"class":53,"line":61},[51,97563,97488],{"class":72},[51,97565,1328],{"class":175},[51,97567,13397],{"class":72},[51,97569,1543],{"class":175},[51,97571,90],{"class":72},[51,97573,97574],{"class":53,"line":93},[51,97575,97576],{"class":57},"# 输出:\n",[51,97578,97579],{"class":53,"line":99},[51,97580,97581],{"class":57},"# [[1. 0. 0. 0.]\n",[51,97583,97584],{"class":53,"line":120},[51,97585,97586],{"class":57},"#  [0. 1. 0. 0.]\n",[51,97588,97589],{"class":53,"line":129},[51,97590,97591],{"class":57},"#  [0. 0. 1. 0.]]\n",[51,97593,97594],{"class":53,"line":206},[51,97595,3480],{"emptyLinePlaceholder":1192},[51,97597,97598],{"class":53,"line":212},[51,97599,97600],{"class":57},"# 对角线向上偏移1\n",[51,97602,97603,97605,97607,97609,97611,97613,97615,97617,97619],{"class":53,"line":227},[51,97604,97488],{"class":72},[51,97606,1328],{"class":175},[51,97608,13397],{"class":72},[51,97610,1543],{"class":175},[51,97612,13397],{"class":72},[51,97614,1739],{"class":78},[51,97616,108],{"class":64},[51,97618,791],{"class":175},[51,97620,90],{"class":72},[51,97622,97623],{"class":53,"line":370},[51,97624,97576],{"class":57},[51,97626,97627],{"class":53,"line":387},[51,97628,97629],{"class":57},"# [[0. 1. 0. 0.]\n",[51,97631,97632],{"class":53,"line":404},[51,97633,97634],{"class":57},"#  [0. 0. 1. 0.]\n",[51,97636,97637],{"class":53,"line":415},[51,97638,97639],{"class":57},"#  [0. 0. 0. 1.]]\n",[1233,97641,97643],{"id":97642},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[29,97645,97647],{"className":31342,"code":97646,"language":31344,"meta":35,"style":35},"#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",[37,97648,97649,97654,97658,97663,97668,97673,97678,97683,97688,97693,97698],{"__ignoreMap":35},[51,97650,97651],{"class":53,"line":54},[51,97652,97653],{"class":57},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[51,97655,97656],{"class":53,"line":61},[51,97657,96662],{"class":282},[51,97659,97660],{"class":53,"line":93},[51,97661,97662],{"class":282},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[51,97664,97665],{"class":53,"line":99},[51,97666,97667],{"class":282},"参数介绍：\n",[51,97669,97670],{"class":53,"line":120},[51,97671,97672],{"class":282},"start：序列的起始值\n",[51,97674,97675],{"class":53,"line":129},[51,97676,97677],{"class":282},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[51,97679,97680],{"class":53,"line":206},[51,97681,97682],{"class":282},"num：要生长的等步长的样本数量，默认为50\n",[51,97684,97685],{"class":53,"line":212},[51,97686,97687],{"class":282},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[51,97689,97690],{"class":53,"line":227},[51,97691,97692],{"class":282},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[51,97694,97695],{"class":53,"line":370},[51,97696,97697],{"class":282},"dtype：ndarry的数据类型\n",[51,97699,97700],{"class":53,"line":387},[51,97701,96662],{"class":282},[40,97703,97704],{},[2564,97705],{"alt":35,"src":97706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[40,97708,97709],{},"这里num=是可以省略的",[40,97711,97712],{},"也就是下方两行代码结果是一模一样的",[29,97714,97716],{"className":31342,"code":97715,"language":31344,"meta":35,"style":35},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[37,97717,97718,97735],{"__ignoreMap":35},[51,97719,97720,97723,97725,97727,97729,97731,97733],{"class":53,"line":54},[51,97721,97722],{"class":72},"np.linspace(",[51,97724,791],{"class":175},[51,97726,82],{"class":72},[51,97728,1568],{"class":175},[51,97730,82],{"class":72},[51,97732,1568],{"class":175},[51,97734,90],{"class":72},[51,97736,97737,97739,97741,97743,97745,97747,97749,97751,97753],{"class":53,"line":61},[51,97738,97722],{"class":72},[51,97740,791],{"class":175},[51,97742,82],{"class":72},[51,97744,1568],{"class":175},[51,97746,82],{"class":72},[51,97748,2757],{"class":78},[51,97750,108],{"class":64},[51,97752,1568],{"class":175},[51,97754,90],{"class":72},[1233,97756,97758],{"id":97757},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[29,97760,97762],{"className":31342,"code":97761,"language":31344,"meta":35,"style":35},"#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",[37,97763,97764,97769,97773,97778,97783,97788,97793,97797,97802,97807,97811],{"__ignoreMap":35},[51,97765,97766],{"class":53,"line":54},[51,97767,97768],{"class":57},"#logspace函数用于创建一个等比数列，格式如下：\n",[51,97770,97771],{"class":53,"line":61},[51,97772,96662],{"class":282},[51,97774,97775],{"class":53,"line":93},[51,97776,97777],{"class":282},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[51,97779,97780],{"class":53,"line":99},[51,97781,97782],{"class":282},"参数为：\n",[51,97784,97785],{"class":53,"line":120},[51,97786,97787],{"class":282},"start:序列的起始位置为：base**start\n",[51,97789,97790],{"class":53,"line":129},[51,97791,97792],{"class":282},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[51,97794,97795],{"class":53,"line":206},[51,97796,97682],{"class":282},[51,97798,97799],{"class":53,"line":212},[51,97800,97801],{"class":282},"endpoint：是否包含 stop 这个值，默认是 True\n",[51,97803,97804],{"class":53,"line":227},[51,97805,97806],{"class":282},"base：对数的底数，默认是 10（常见对数）\n",[51,97808,97809],{"class":53,"line":370},[51,97810,97697],{"class":282},[51,97812,97813],{"class":53,"line":387},[51,97814,96662],{"class":282},[40,97816,97817],{},[2564,97818],{"alt":35,"src":97819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[40,97821,97822],{},"logspace()函数中的num参数也是可以不写num=的",[40,97824,97825],{},"endpoint是不可以省略的",[1179,97827,97828],{},"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":35,"searchDepth":61,"depth":61,"links":97830},[97831,97835,97840,97844,97848,97849],{"id":96220,"depth":61,"text":96221,"children":97832},[97833,97834],{"id":96224,"depth":93,"text":96225},{"id":96297,"depth":93,"text":96298},{"id":96329,"depth":61,"text":96330,"children":97836},[97837,97838,97839],{"id":96333,"depth":93,"text":96334},{"id":96515,"depth":93,"text":96516},{"id":96593,"depth":93,"text":96594},{"id":96628,"depth":61,"text":96629,"children":97841},[97842,97843],{"id":96632,"depth":93,"text":96633},{"id":96689,"depth":93,"text":96690},{"id":96785,"depth":61,"text":96786,"children":97845},[97846,97847],{"id":96789,"depth":93,"text":96790},{"id":96801,"depth":93,"text":96802},{"id":96835,"depth":61,"text":96836},{"id":96872,"depth":61,"text":96873,"children":97850},[97851,97852,97853,97854,97855,97856,97857,97858],{"id":96876,"depth":93,"text":96877},{"id":97101,"depth":93,"text":97102},{"id":97108,"depth":93,"text":97109},{"id":97317,"depth":93,"text":97318},{"id":97337,"depth":93,"text":97338},{"id":97473,"depth":93,"text":97474},{"id":97642,"depth":93,"text":97643},{"id":97757,"depth":93,"text":97758},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96212,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97865,"title":97866,"body":97867,"description":24339,"extension":1190,"meta":97960,"navigation":1192,"path":97961,"seo":97962,"stem":97963,"__hash__":97964},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97868,"toc":97958},[97869,97872,97875,97878,97881,97884,97887,97890,97893,97896,97899,97902,97904,97907,97910,97915,97918,97921,97955],[10,97870,97866],{"id":97871},"_20魔法命令mprun",[40,97873,97874],{},"逐行分析数据内存的使用情况",[40,97876,97877],{},"语法格式：",[40,97879,97880],{},"%mprun -f 模块名.函数名 模块名.函数名()",[40,97882,97883],{},"分析结果列如下：",[40,97885,97886],{},"Line行号",[40,97888,97889],{},"Mem usage内存使用大小",[40,97891,97892],{},"increment内存增量",[40,97894,97895],{},"Line content代码内容",[40,97897,97898],{},"补充说明：",[40,97900,97901],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[40,97903,96167],{},[40,97905,97906],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[40,97908,97909],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[40,97911,97912],{},[2564,97913],{"alt":35,"src":97914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[40,97916,97917],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[40,97919,97920],{},"这时候需要重新加载模块",[29,97922,97924],{"className":31342,"code":97923,"language":31344,"meta":35,"style":35},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[37,97925,97926,97931,97938,97943],{"__ignoreMap":35},[51,97927,97928],{"class":53,"line":54},[51,97929,97930],{"class":57},"#重新加载模块\n",[51,97932,97933,97935],{"class":53,"line":61},[51,97934,31356],{"class":64},[51,97936,97937],{"class":72}," importlib\n",[51,97939,97940],{"class":53,"line":93},[51,97941,97942],{"class":72},"importlib.reload(mprun_test)\n",[51,97944,97945,97947,97950,97952],{"class":53,"line":99},[51,97946,1577],{"class":64},[51,97948,97949],{"class":72},"mprun ",[51,97951,1778],{"class":64},[51,97953,97954],{"class":72},"f mprun_test.fun_test mprun_test.fun_test()\n",[1179,97956,97957],{},"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":35,"searchDepth":61,"depth":61,"links":97959},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97866,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97966,"title":97967,"body":97968,"description":24339,"extension":1190,"meta":97985,"navigation":1192,"path":97986,"seo":97987,"stem":97988,"__hash__":97989},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97969,"toc":97983},[97970,97973,97978],[10,97971,97967],{"id":97972},"_3一维数组的索引和切片",[40,97974,97975],{},[2564,97976],{"alt":35,"src":97977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[40,97979,97980],{},[2564,97981],{"alt":35,"src":97982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":35,"searchDepth":61,"depth":61,"links":97984},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97967,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97991,"title":97992,"body":97993,"description":24339,"extension":1190,"meta":98476,"navigation":1192,"path":98477,"seo":98478,"stem":98479,"__hash__":98480},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97994,"toc":98474},[97995,97998,98001,98006,98039,98042,98080,98083,98117,98120,98225,98228,98265,98268,98369,98372,98423,98426,98468,98471],[10,97996,97992],{"id":97997},"_4二维数组的索引与切片",[40,97999,98000],{},"①获取指定单个元素",[40,98002,98003],{},[2564,98004],{"alt":35,"src":98005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[29,98007,98009],{"className":31342,"code":98008,"language":31344,"meta":35,"style":35},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[37,98010,98011,98016,98021,98026],{"__ignoreMap":35},[51,98012,98013],{"class":53,"line":54},[51,98014,98015],{"class":57},"#获取元素9\n",[51,98017,98018],{"class":53,"line":61},[51,98019,98020],{"class":57},"#先获取所在行，再获取所在列\n",[51,98022,98023],{"class":53,"line":93},[51,98024,98025],{"class":57},"#数组[行索引号，列索引号]\n",[51,98027,98028,98031,98033,98035,98037],{"class":53,"line":99},[51,98029,98030],{"class":72},"a[",[51,98032,791],{"class":175},[51,98034,82],{"class":72},[51,98036,1334],{"class":175},[51,98038,34210],{"class":72},[40,98040,98041],{},"②获取整行元素",[29,98043,98045],{"className":31342,"code":98044,"language":31344,"meta":35,"style":35},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[37,98046,98047,98052,98057,98065,98070],{"__ignoreMap":35},[51,98048,98049],{"class":53,"line":54},[51,98050,98051],{"class":57},"#获取整行 数组[行索引号]\n",[51,98053,98054],{"class":53,"line":61},[51,98055,98056],{"class":57},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[51,98058,98059,98061,98063],{"class":53,"line":93},[51,98060,98030],{"class":72},[51,98062,1334],{"class":175},[51,98064,34210],{"class":72},[51,98066,98067],{"class":53,"line":99},[51,98068,98069],{"class":57},"#也可以负索引获取一行\n",[51,98071,98072,98074,98076,98078],{"class":53,"line":120},[51,98073,98030],{"class":72},[51,98075,1778],{"class":64},[51,98077,791],{"class":175},[51,98079,34210],{"class":72},[40,98081,98082],{},"③获取整列元素",[29,98084,98086],{"className":31342,"code":98085,"language":31344,"meta":35,"style":35},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[37,98087,98088,98093,98102,98107],{"__ignoreMap":35},[51,98089,98090],{"class":53,"line":54},[51,98091,98092],{"class":57},"#获取整列 数组名[:,列索引]\n",[51,98094,98095,98098,98100],{"class":53,"line":61},[51,98096,98097],{"class":72},"a[:,",[51,98099,1334],{"class":175},[51,98101,34210],{"class":72},[51,98103,98104],{"class":53,"line":93},[51,98105,98106],{"class":57},"#也可以负索引获取一列\n",[51,98108,98109,98111,98113,98115],{"class":53,"line":99},[51,98110,98097],{"class":72},[51,98112,1778],{"class":64},[51,98114,791],{"class":175},[51,98116,34210],{"class":72},[40,98118,98119],{},"④部分行部分列的元素",[29,98121,98123],{"className":31342,"code":98122,"language":31344,"meta":35,"style":35},"#部分行部分列 数组名[行切片，列切片]\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",[37,98124,98125,98130,98140,98144,98148,98153,98158,98162,98174,98178,98182,98187,98192,98197,98202,98206,98211],{"__ignoreMap":35},[51,98126,98127],{"class":53,"line":54},[51,98128,98129],{"class":57},"#部分行部分列 数组名[行切片，列切片]\n",[51,98131,98132,98135,98137],{"class":53,"line":61},[51,98133,98134],{"class":72},"a[:",[51,98136,1334],{"class":175},[51,98138,98139],{"class":72},",:]\n",[51,98141,98142],{"class":53,"line":93},[51,98143,94528],{"class":57},[51,98145,98146],{"class":53,"line":99},[51,98147,94892],{"class":282},[51,98149,98150],{"class":53,"line":120},[51,98151,98152],{"class":282},"array([[ 1,  2,  3,  4,  5,  6],\n",[51,98154,98155],{"class":53,"line":129},[51,98156,98157],{"class":282},"       [ 7,  8,  9, 10, 11, 12]])\n",[51,98159,98160],{"class":53,"line":206},[51,98161,94892],{"class":282},[51,98163,98164,98166,98168,98170,98172],{"class":53,"line":212},[51,98165,98097],{"class":72},[51,98167,791],{"class":175},[51,98169,984],{"class":72},[51,98171,1543],{"class":175},[51,98173,34210],{"class":72},[51,98175,98176],{"class":53,"line":227},[51,98177,94528],{"class":57},[51,98179,98180],{"class":53,"line":370},[51,98181,94892],{"class":282},[51,98183,98184],{"class":53,"line":387},[51,98185,98186],{"class":282},"array([[ 2,  3,  4],\n",[51,98188,98189],{"class":53,"line":404},[51,98190,98191],{"class":282},"       [ 8,  9, 10],\n",[51,98193,98194],{"class":53,"line":415},[51,98195,98196],{"class":282},"       [14, 15, 16],\n",[51,98198,98199],{"class":53,"line":420},[51,98200,98201],{"class":282},"       [20, 21, 22]])\n",[51,98203,98204],{"class":53,"line":429},[51,98205,94892],{"class":282},[51,98207,98208],{"class":53,"line":434},[51,98209,98210],{"class":57},"#对列行同时进行切片，使用了step参数\n",[51,98212,98213,98216,98218,98221,98223],{"class":53,"line":448},[51,98214,98215],{"class":72},"a[::",[51,98217,1334],{"class":175},[51,98219,98220],{"class":72},",::",[51,98222,1334],{"class":175},[51,98224,34210],{"class":72},[40,98226,98227],{},"⑤同时获取两个元素",[29,98229,98231],{"className":31342,"code":98230,"language":31344,"meta":35,"style":35},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[37,98232,98233,98238,98243],{"__ignoreMap":35},[51,98234,98235],{"class":53,"line":54},[51,98236,98237],{"class":57},"#同时获取第三行第二列，第四行第一列\n",[51,98239,98240],{"class":53,"line":61},[51,98241,98242],{"class":57},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[51,98244,98245,98248,98250,98252,98254,98256,98258,98260,98262],{"class":53,"line":93},[51,98246,98247],{"class":72},"a[(",[51,98249,1334],{"class":175},[51,98251,82],{"class":72},[51,98253,1328],{"class":175},[51,98255,43211],{"class":72},[51,98257,791],{"class":175},[51,98259,82],{"class":72},[51,98261,176],{"class":175},[51,98263,98264],{"class":72},")]\n",[40,98266,98267],{},"⑥切片，对行进行反向获取",[29,98269,98271],{"className":31342,"code":98270,"language":31344,"meta":35,"style":35},"#切片 对所有行进行反向获取\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",[37,98272,98273,98278,98288,98292,98296,98301,98306,98311,98316,98320,98325,98341,98345,98350,98355,98360,98365],{"__ignoreMap":35},[51,98274,98275],{"class":53,"line":54},[51,98276,98277],{"class":57},"#切片 对所有行进行反向获取\n",[51,98279,98280,98282,98284,98286],{"class":53,"line":61},[51,98281,98215],{"class":72},[51,98283,1778],{"class":64},[51,98285,791],{"class":175},[51,98287,34210],{"class":72},[51,98289,98290],{"class":53,"line":93},[51,98291,94528],{"class":57},[51,98293,98294],{"class":53,"line":99},[51,98295,94892],{"class":282},[51,98297,98298],{"class":53,"line":120},[51,98299,98300],{"class":282},"array([[19, 20, 21, 22, 23, 24],\n",[51,98302,98303],{"class":53,"line":129},[51,98304,98305],{"class":282},"       [13, 14, 15, 16, 17, 18],\n",[51,98307,98308],{"class":53,"line":206},[51,98309,98310],{"class":282},"       [ 7,  8,  9, 10, 11, 12],\n",[51,98312,98313],{"class":53,"line":212},[51,98314,98315],{"class":282},"       [ 1,  2,  3,  4,  5,  6]])\n",[51,98317,98318],{"class":53,"line":227},[51,98319,94892],{"class":282},[51,98321,98322],{"class":53,"line":370},[51,98323,98324],{"class":57},"#对行列都进行反向切片获取\n",[51,98326,98327,98329,98331,98333,98335,98337,98339],{"class":53,"line":387},[51,98328,98215],{"class":72},[51,98330,1778],{"class":64},[51,98332,791],{"class":175},[51,98334,98220],{"class":72},[51,98336,1778],{"class":64},[51,98338,791],{"class":175},[51,98340,34210],{"class":72},[51,98342,98343],{"class":53,"line":404},[51,98344,94892],{"class":282},[51,98346,98347],{"class":53,"line":415},[51,98348,98349],{"class":282},"array([[24, 23, 22, 21, 20, 19],\n",[51,98351,98352],{"class":53,"line":420},[51,98353,98354],{"class":282},"       [18, 17, 16, 15, 14, 13],\n",[51,98356,98357],{"class":53,"line":429},[51,98358,98359],{"class":282},"       [12, 11, 10,  9,  8,  7],\n",[51,98361,98362],{"class":53,"line":434},[51,98363,98364],{"class":282},"       [ 6,  5,  4,  3,  2,  1]])\n",[51,98366,98367],{"class":53,"line":448},[51,98368,94892],{"class":282},[40,98370,98371],{},"⑦修改元素",[29,98373,98375],{"className":31342,"code":98374,"language":31344,"meta":35,"style":35},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[37,98376,98377,98382,98400,98405],{"__ignoreMap":35},[51,98378,98379],{"class":53,"line":54},[51,98380,98381],{"class":57},"#获取前两行和前两列\n",[51,98383,98384,98387,98389,98391,98393,98396,98398],{"class":53,"line":61},[51,98385,98386],{"class":72},"sub_a",[51,98388,108],{"class":64},[51,98390,98134],{"class":72},[51,98392,1334],{"class":175},[51,98394,98395],{"class":72},",:",[51,98397,1334],{"class":175},[51,98399,34210],{"class":72},[51,98401,98402],{"class":53,"line":93},[51,98403,98404],{"class":57},"#修改sub_a第一个元素的值\n",[51,98406,98407,98410,98412,98414,98416,98418,98420],{"class":53,"line":99},[51,98408,98409],{"class":72},"sub_a[",[51,98411,176],{"class":175},[51,98413,82],{"class":72},[51,98415,176],{"class":175},[51,98417,2184],{"class":72},[51,98419,108],{"class":64},[51,98421,98422],{"class":175},"100\n",[40,98424,98425],{},"⑧数组复制copy()",[29,98427,98429],{"className":31342,"code":98428,"language":31344,"meta":35,"style":35},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[37,98430,98431,98436,98446,98451],{"__ignoreMap":35},[51,98432,98433],{"class":53,"line":54},[51,98434,98435],{"class":57},"#数组复制\n",[51,98437,98438,98441,98443],{"class":53,"line":61},[51,98439,98440],{"class":72},"copy_a",[51,98442,108],{"class":64},[51,98444,98445],{"class":72},"np.copy(sub_a)\n",[51,98447,98448],{"class":53,"line":93},[51,98449,98450],{"class":57},"#修改copy_a后不影响原数组\n",[51,98452,98453,98456,98458,98460,98462,98464,98466],{"class":53,"line":99},[51,98454,98455],{"class":72},"copy_a[",[51,98457,176],{"class":175},[51,98459,82],{"class":72},[51,98461,176],{"class":175},[51,98463,2184],{"class":72},[51,98465,108],{"class":64},[51,98467,98422],{"class":175},[40,98469,98470],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1179,98472,98473],{},"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":35,"searchDepth":61,"depth":61,"links":98475},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97992,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98482,"title":98483,"body":98484,"description":24339,"extension":1190,"meta":98976,"navigation":1192,"path":98977,"seo":98978,"stem":98979,"__hash__":98980},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98485,"toc":98968},[98486,98489,98493,98496,98499,98552,98555,98580,98583,98602,98622,98625,98641,98645,98691,98695,98737,98741,98744,98747,98750,98753,98756,98818,98878,98882,98885,98942,98946,98951,98960,98965],[10,98487,98483],{"id":98488},"_5改变数组的维度",[14,98490,98492],{"id":98491},"_51-使用reshape","5.1 使用reshape()",[40,98494,98495],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[40,98497,98498],{},"①一维数组转换为二维数组",[29,98500,98502],{"className":31342,"code":98501,"language":31344,"meta":35,"style":35},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[37,98503,98504,98520,98525,98530,98535],{"__ignoreMap":35},[51,98505,98506,98508,98510,98512,98514,98516,98518],{"class":53,"line":54},[51,98507,981],{"class":72},[51,98509,108],{"class":64},[51,98511,93966],{"class":72},[51,98513,791],{"class":175},[51,98515,82],{"class":72},[51,98517,1769],{"class":175},[51,98519,90],{"class":72},[51,98521,98522],{"class":53,"line":61},[51,98523,98524],{"class":57},"#将一维数组进行转换\n",[51,98526,98527],{"class":53,"line":93},[51,98528,98529],{"class":57},"#注意点：元素个数不可以变\n",[51,98531,98532],{"class":53,"line":99},[51,98533,98534],{"class":57},"#转换维度要保持一致，不一致就异常！！！\n",[51,98536,98537,98539,98541,98544,98546,98548,98550],{"class":53,"line":120},[51,98538,94270],{"class":72},[51,98540,108],{"class":64},[51,98542,98543],{"class":72},"a.reshape(",[51,98545,1334],{"class":175},[51,98547,82],{"class":72},[51,98549,1593],{"class":175},[51,98551,90],{"class":72},[40,98553,98554],{},"②一维数组转换为三维数组",[29,98556,98558],{"className":31342,"code":98557,"language":31344,"meta":35,"style":35},"aaa=a.reshape(2,3,2)\n",[37,98559,98560],{"__ignoreMap":35},[51,98561,98562,98564,98566,98568,98570,98572,98574,98576,98578],{"class":53,"line":54},[51,98563,96485],{"class":72},[51,98565,108],{"class":64},[51,98567,98543],{"class":72},[51,98569,1334],{"class":175},[51,98571,82],{"class":72},[51,98573,1328],{"class":175},[51,98575,82],{"class":72},[51,98577,1334],{"class":175},[51,98579,90],{"class":72},[40,98581,98582],{},"③二维数组转化为一维数组",[29,98584,98586],{"className":31342,"code":98585,"language":31344,"meta":35,"style":35},"#知道元素个数：\naa.reshape(12)\n",[37,98587,98588,98593],{"__ignoreMap":35},[51,98589,98590],{"class":53,"line":54},[51,98591,98592],{"class":57},"#知道元素个数：\n",[51,98594,98595,98598,98600],{"class":53,"line":61},[51,98596,98597],{"class":72},"aa.reshape(",[51,98599,1744],{"class":175},[51,98601,90],{"class":72},[29,98603,98605],{"className":31342,"code":98604,"language":31344,"meta":35,"style":35},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[37,98606,98607,98612],{"__ignoreMap":35},[51,98608,98609],{"class":53,"line":54},[51,98610,98611],{"class":57},"#不知道元素个数，参数传递-1\n",[51,98613,98614,98616,98618,98620],{"class":53,"line":61},[51,98615,98597],{"class":72},[51,98617,1778],{"class":64},[51,98619,791],{"class":175},[51,98621,90],{"class":72},[40,98623,98624],{},"④三维数组转换为一维数组",[29,98626,98628],{"className":31342,"code":98627,"language":31344,"meta":35,"style":35},"aaa.reshape(-1)\n",[37,98629,98630],{"__ignoreMap":35},[51,98631,98632,98635,98637,98639],{"class":53,"line":54},[51,98633,98634],{"class":72},"aaa.reshape(",[51,98636,1778],{"class":64},[51,98638,791],{"class":175},[51,98640,90],{"class":72},[14,98642,98644],{"id":98643},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[29,98646,98648],{"className":31342,"code":98647,"language":31344,"meta":35,"style":35},"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",[37,98649,98650,98677,98682,98686],{"__ignoreMap":35},[51,98651,98652,98654,98656,98658,98660,98662,98664,98666,98668,98670,98672,98674],{"class":53,"line":54},[51,98653,94270],{"class":72},[51,98655,108],{"class":64},[51,98657,93966],{"class":72},[51,98659,791],{"class":175},[51,98661,82],{"class":72},[51,98663,1769],{"class":175},[51,98665,93971],{"class":72},[51,98667,1334],{"class":175},[51,98669,82],{"class":72},[51,98671,1593],{"class":175},[51,98673,1677],{"class":72},[51,98675,98676],{"class":57},"#转换为2行6列的数组\n",[51,98678,98679],{"class":53,"line":61},[51,98680,98681],{"class":72},"aa.revel()\n",[51,98683,98684],{"class":53,"line":93},[51,98685,94528],{"class":57},[51,98687,98688],{"class":53,"line":99},[51,98689,98690],{"class":57},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98692,98694],{"id":98693},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[29,98696,98698],{"className":31342,"code":98697,"language":31344,"meta":35,"style":35},"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",[37,98699,98700,98724,98729,98733],{"__ignoreMap":35},[51,98701,98702,98704,98706,98708,98710,98712,98714,98716,98718,98720,98722],{"class":53,"line":54},[51,98703,94270],{"class":72},[51,98705,108],{"class":64},[51,98707,93966],{"class":72},[51,98709,791],{"class":175},[51,98711,82],{"class":72},[51,98713,1769],{"class":175},[51,98715,93971],{"class":72},[51,98717,1334],{"class":175},[51,98719,82],{"class":72},[51,98721,1593],{"class":175},[51,98723,90],{"class":72},[51,98725,98726],{"class":53,"line":61},[51,98727,98728],{"class":72},"aa.flatten()\n",[51,98730,98731],{"class":53,"line":93},[51,98732,94528],{"class":57},[51,98734,98735],{"class":53,"line":99},[51,98736,98690],{"class":57},[14,98738,98740],{"id":98739},"_54-使用resize","5.4 使用resize()",[40,98742,98743],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[40,98745,98746],{},"通过resize方法可以改变数组的维度",[40,98748,98749],{},"#resize修改数组维度",[40,98751,98752],{},"#以元组的形式指定形状",[40,98754,98755],{},"#改变的是原数组",[29,98757,98759],{"className":31342,"code":98758,"language":31344,"meta":35,"style":35},"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",[37,98760,98761,98777,98797,98810,98814],{"__ignoreMap":35},[51,98762,98763,98765,98767,98769,98771,98773,98775],{"class":53,"line":54},[51,98764,981],{"class":72},[51,98766,108],{"class":64},[51,98768,93966],{"class":72},[51,98770,791],{"class":175},[51,98772,82],{"class":72},[51,98774,1769],{"class":175},[51,98776,90],{"class":72},[51,98778,98779,98782,98784,98786,98788,98790,98792,98794],{"class":53,"line":61},[51,98780,98781],{"class":72},"a.shape",[51,98783,108],{"class":64},[51,98785,73],{"class":72},[51,98787,1334],{"class":175},[51,98789,82],{"class":72},[51,98791,1593],{"class":175},[51,98793,1677],{"class":72},[51,98795,98796],{"class":57},"#改变了原数组\n",[51,98798,98799,98801,98803,98806,98808],{"class":53,"line":93},[51,98800,981],{"class":72},[51,98802,108],{"class":64},[51,98804,98805],{"class":72},"resize((",[51,98807,1744],{"class":175},[51,98809,31461],{"class":72},[51,98811,98812],{"class":53,"line":99},[51,98813,94528],{"class":57},[51,98815,98816],{"class":53,"line":120},[51,98817,98690],{"class":57},[29,98819,98821],{"className":31342,"code":98820,"language":31344,"meta":35,"style":35},"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",[37,98822,98823,98836,98840,98844,98849,98854,98859,98864,98869,98874],{"__ignoreMap":35},[51,98824,98825,98828,98830,98832,98834],{"class":53,"line":54},[51,98826,98827],{"class":72},"a.resize((",[51,98829,1593],{"class":175},[51,98831,82],{"class":72},[51,98833,1334],{"class":175},[51,98835,31461],{"class":72},[51,98837,98838],{"class":53,"line":61},[51,98839,94528],{"class":57},[51,98841,98842],{"class":53,"line":93},[51,98843,94892],{"class":282},[51,98845,98846],{"class":53,"line":99},[51,98847,98848],{"class":282},"array([[ 1,  2],\n",[51,98850,98851],{"class":53,"line":120},[51,98852,98853],{"class":282},"       [ 3,  4],\n",[51,98855,98856],{"class":53,"line":129},[51,98857,98858],{"class":282},"       [ 5,  6],\n",[51,98860,98861],{"class":53,"line":206},[51,98862,98863],{"class":282},"       [ 7,  8],\n",[51,98865,98866],{"class":53,"line":212},[51,98867,98868],{"class":282},"       [ 9, 10],\n",[51,98870,98871],{"class":53,"line":227},[51,98872,98873],{"class":282},"       [11, 12]])\n",[51,98875,98876],{"class":53,"line":370},[51,98877,94892],{"class":282},[14,98879,98881],{"id":98880},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[40,98883,98884],{},"改变了原数组",[29,98886,98888],{"className":31342,"code":98887,"language":31344,"meta":35,"style":35},"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",[37,98889,98890,98906,98922,98926,98930,98934,98938],{"__ignoreMap":35},[51,98891,98892,98894,98896,98898,98900,98902,98904],{"class":53,"line":54},[51,98893,981],{"class":72},[51,98895,108],{"class":64},[51,98897,93966],{"class":72},[51,98899,791],{"class":175},[51,98901,82],{"class":72},[51,98903,1769],{"class":175},[51,98905,90],{"class":72},[51,98907,98908,98910,98912,98914,98916,98918,98920],{"class":53,"line":61},[51,98909,98781],{"class":72},[51,98911,108],{"class":64},[51,98913,73],{"class":72},[51,98915,1334],{"class":175},[51,98917,82],{"class":72},[51,98919,1593],{"class":175},[51,98921,90],{"class":72},[51,98923,98924],{"class":53,"line":93},[51,98925,94528],{"class":57},[51,98927,98928],{"class":53,"line":99},[51,98929,94892],{"class":282},[51,98931,98932],{"class":53,"line":120},[51,98933,98152],{"class":282},[51,98935,98936],{"class":53,"line":129},[51,98937,98157],{"class":282},[51,98939,98940],{"class":53,"line":206},[51,98941,94892],{"class":282},[14,98943,98945],{"id":98944},"_56-重要比较","5.6 重要比较：",[40,98947,98948],{},[2564,98949],{"alt":35,"src":98950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[40,98952,98953,98954,98956,98957,98959],{},"口诀：NumPy 函数要么用 ",[37,98955,96927],{},"，要么用 ",[37,98958,32460],{},"，创建结构用 shape，造数据用 size",[40,98961,98962],{},[2564,98963],{"alt":35,"src":98964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1179,98966,98967],{},"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":35,"searchDepth":61,"depth":61,"links":98969},[98970,98971,98972,98973,98974,98975],{"id":98491,"depth":61,"text":98492},{"id":98643,"depth":61,"text":98644},{"id":98693,"depth":61,"text":98694},{"id":98739,"depth":61,"text":98740},{"id":98880,"depth":61,"text":98881},{"id":98944,"depth":61,"text":98945},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98483,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98982,"title":98983,"body":98984,"description":24339,"extension":1190,"meta":100056,"navigation":1192,"path":100057,"seo":100058,"stem":100059,"__hash__":100060},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98985,"toc":100050},[98986,98989,98993,98996,98999,99002,99067,99070,99110,99113,99195,99198,99203,99225,99227,99232,99237,99240,99243,99398,99401,99603,99607,99610,99613,99681,99683,99688,99691,99694,99774,99778,99781,99783,99856,99858,99863,99865,99945,99949,99952,99955,99958,99961,99964,99967,100047],[10,98987,98983],{"id":98988},"_6数组的拼接",[14,98990,98992],{"id":98991},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[40,98994,98995],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[40,98997,98998],{},"函数内部传两个数列构成的数列或者元组",[40,99000,99001],{},"①一维数组的拼接",[29,99003,99005],{"className":31342,"code":99004,"language":31344,"meta":35,"style":35},"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",[37,99006,99007,99027,99047,99052,99057,99062],{"__ignoreMap":35},[51,99008,99009,99011,99013,99015,99017,99019,99021,99023,99025],{"class":53,"line":54},[51,99010,981],{"class":72},[51,99012,108],{"class":64},[51,99014,93988],{"class":72},[51,99016,791],{"class":175},[51,99018,82],{"class":72},[51,99020,1334],{"class":175},[51,99022,82],{"class":72},[51,99024,1328],{"class":175},[51,99026,5731],{"class":72},[51,99028,99029,99031,99033,99035,99037,99039,99041,99043,99045],{"class":53,"line":61},[51,99030,975],{"class":72},[51,99032,108],{"class":64},[51,99034,93988],{"class":72},[51,99036,1543],{"class":175},[51,99038,82],{"class":72},[51,99040,1568],{"class":175},[51,99042,82],{"class":72},[51,99044,1593],{"class":175},[51,99046,5731],{"class":72},[51,99048,99049],{"class":53,"line":93},[51,99050,99051],{"class":57},"#调用concatenate进行数组拼接\n",[51,99053,99054],{"class":53,"line":99},[51,99055,99056],{"class":72},"np.concatenate((a,b))\n",[51,99058,99059],{"class":53,"line":120},[51,99060,99061],{"class":57},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[51,99063,99064],{"class":53,"line":129},[51,99065,99066],{"class":57},"#np.concatenate([a,b])\n",[40,99068,99069],{},"②一维多个数组拼接",[29,99071,99073],{"className":31342,"code":99072,"language":31344,"meta":35,"style":35},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[37,99074,99075,99080,99100,99105],{"__ignoreMap":35},[51,99076,99077],{"class":53,"line":54},[51,99078,99079],{"class":57},"#也可以多个数组进行拼接\n",[51,99081,99082,99084,99086,99088,99090,99092,99094,99096,99098],{"class":53,"line":61},[51,99083,817],{"class":72},[51,99085,108],{"class":64},[51,99087,93988],{"class":72},[51,99089,443],{"class":175},[51,99091,82],{"class":72},[51,99093,1719],{"class":175},[51,99095,82],{"class":72},[51,99097,1769],{"class":175},[51,99099,5731],{"class":72},[51,99101,99102],{"class":53,"line":93},[51,99103,99104],{"class":72},"c\n",[51,99106,99107],{"class":53,"line":99},[51,99108,99109],{"class":72},"np.concatenate((a,b,c))\n",[40,99111,99112],{},"③二维数组拼接",[29,99114,99116],{"className":31342,"code":99115,"language":31344,"meta":35,"style":35},"#二维数组使用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",[37,99117,99118,99123,99147,99172,99177,99182],{"__ignoreMap":35},[51,99119,99120],{"class":53,"line":54},[51,99121,99122],{"class":57},"#二维数组使用concatenate进行拼接\n",[51,99124,99125,99127,99129,99131,99133,99135,99137,99139,99141,99143,99145],{"class":53,"line":61},[51,99126,94270],{"class":72},[51,99128,108],{"class":64},[51,99130,93966],{"class":72},[51,99132,791],{"class":175},[51,99134,82],{"class":72},[51,99136,1769],{"class":175},[51,99138,93971],{"class":72},[51,99140,1328],{"class":175},[51,99142,82],{"class":72},[51,99144,1543],{"class":175},[51,99146,90],{"class":72},[51,99148,99149,99152,99154,99156,99158,99160,99162,99164,99166,99168,99170],{"class":53,"line":93},[51,99150,99151],{"class":72},"bb",[51,99153,108],{"class":64},[51,99155,93966],{"class":72},[51,99157,1586],{"class":175},[51,99159,82],{"class":72},[51,99161,1888],{"class":175},[51,99163,93971],{"class":72},[51,99165,1328],{"class":175},[51,99167,82],{"class":72},[51,99169,1543],{"class":175},[51,99171,90],{"class":72},[51,99173,99174],{"class":53,"line":99},[51,99175,99176],{"class":57},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[51,99178,99179],{"class":53,"line":120},[51,99180,99181],{"class":57},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[51,99183,99184,99187,99189,99191,99193],{"class":53,"line":129},[51,99185,99186],{"class":72},"np.concatenate((aa,bb),",[51,99188,48478],{"class":78},[51,99190,108],{"class":64},[51,99192,176],{"class":175},[51,99194,90],{"class":72},[40,99196,99197],{},"结果：",[40,99199,99200],{},[2564,99201],{"alt":35,"src":99202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[29,99204,99206],{"className":31342,"code":99205,"language":31344,"meta":35,"style":35},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[37,99207,99208,99213],{"__ignoreMap":35},[51,99209,99210],{"class":53,"line":54},[51,99211,99212],{"class":57},"#指定axis为1进行拼接\n",[51,99214,99215,99217,99219,99221,99223],{"class":53,"line":61},[51,99216,99186],{"class":72},[51,99218,48478],{"class":78},[51,99220,108],{"class":64},[51,99222,791],{"class":175},[51,99224,90],{"class":72},[40,99226,99197],{},[40,99228,99229],{},[2564,99230],{"alt":35,"src":99231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[40,99233,99234],{},[840,99235,99236],{},"二维数组总结：0竖着方向，1横着方向",[40,99238,99239],{},"④三维数组拼接",[40,99241,99242],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[29,99244,99246],{"className":31342,"code":99245,"language":31344,"meta":35,"style":35},"#两个三行六列\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",[37,99247,99248,99253,99281,99311,99316,99333,99338,99343,99348,99365,99370,99375,99380,99393],{"__ignoreMap":35},[51,99249,99250],{"class":53,"line":54},[51,99251,99252],{"class":57},"#两个三行六列\n",[51,99254,99255,99257,99259,99261,99263,99265,99267,99269,99271,99273,99275,99277,99279],{"class":53,"line":61},[51,99256,96485],{"class":72},[51,99258,108],{"class":64},[51,99260,93966],{"class":72},[51,99262,791],{"class":175},[51,99264,82],{"class":72},[51,99266,1574],{"class":175},[51,99268,93971],{"class":72},[51,99270,1334],{"class":175},[51,99272,82],{"class":72},[51,99274,1328],{"class":175},[51,99276,82],{"class":72},[51,99278,1593],{"class":175},[51,99280,90],{"class":72},[51,99282,99283,99286,99288,99290,99292,99294,99297,99299,99301,99303,99305,99307,99309],{"class":53,"line":93},[51,99284,99285],{"class":72},"bbb",[51,99287,108],{"class":64},[51,99289,93966],{"class":72},[51,99291,1586],{"class":175},[51,99293,82],{"class":72},[51,99295,99296],{"class":175},"137",[51,99298,93971],{"class":72},[51,99300,1334],{"class":175},[51,99302,82],{"class":72},[51,99304,1328],{"class":175},[51,99306,82],{"class":72},[51,99308,1593],{"class":175},[51,99310,90],{"class":72},[51,99312,99313],{"class":53,"line":99},[51,99314,99315],{"class":57},"#axis=0\n",[51,99317,99318,99320,99322,99325,99327,99329,99331],{"class":53,"line":120},[51,99319,1941],{"class":72},[51,99321,108],{"class":64},[51,99323,99324],{"class":72},"np.concatenate((aaa,bbb),",[51,99326,48478],{"class":78},[51,99328,108],{"class":64},[51,99330,176],{"class":175},[51,99332,90],{"class":72},[51,99334,99335],{"class":53,"line":129},[51,99336,99337],{"class":72},"s.shape\n",[51,99339,99340],{"class":53,"line":206},[51,99341,99342],{"class":57},"#输出：(4,3,6)\n",[51,99344,99345],{"class":53,"line":212},[51,99346,99347],{"class":57},"#axis=1\n",[51,99349,99350,99353,99355,99357,99359,99361,99363],{"class":53,"line":227},[51,99351,99352],{"class":72},"ss",[51,99354,108],{"class":64},[51,99356,99324],{"class":72},[51,99358,48478],{"class":78},[51,99360,108],{"class":64},[51,99362,791],{"class":175},[51,99364,90],{"class":72},[51,99366,99367],{"class":53,"line":370},[51,99368,99369],{"class":72},"ss.shape\n",[51,99371,99372],{"class":53,"line":387},[51,99373,99374],{"class":57},"#输出：(2,6,6)\n",[51,99376,99377],{"class":53,"line":404},[51,99378,99379],{"class":57},"#axis=2\n",[51,99381,99382,99384,99386,99388,99390],{"class":53,"line":415},[51,99383,99324],{"class":72},[51,99385,48478],{"class":78},[51,99387,108],{"class":64},[51,99389,1334],{"class":175},[51,99391,99392],{"class":72},").shape\n",[51,99394,99395],{"class":53,"line":420},[51,99396,99397],{"class":57},"#输出：（2，3，12）\n",[40,99399,99400],{},"⑤四维数组拼接",[29,99402,99404],{"className":31342,"code":99403,"language":31344,"meta":35,"style":35},"#两个三行六列\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",[37,99405,99406,99410,99438,99466,99491,99517,99521,99534,99539,99543,99555,99560,99564,99576,99581,99586,99598],{"__ignoreMap":35},[51,99407,99408],{"class":53,"line":54},[51,99409,99252],{"class":57},[51,99411,99412,99414,99416,99418,99420,99422,99424,99426,99428,99430,99432,99434,99436],{"class":53,"line":61},[51,99413,96485],{"class":72},[51,99415,108],{"class":64},[51,99417,93966],{"class":72},[51,99419,791],{"class":175},[51,99421,82],{"class":72},[51,99423,1574],{"class":175},[51,99425,93971],{"class":72},[51,99427,1334],{"class":175},[51,99429,82],{"class":72},[51,99431,1328],{"class":175},[51,99433,82],{"class":72},[51,99435,1593],{"class":175},[51,99437,90],{"class":72},[51,99439,99440,99442,99444,99446,99448,99450,99452,99454,99456,99458,99460,99462,99464],{"class":53,"line":93},[51,99441,99285],{"class":72},[51,99443,108],{"class":64},[51,99445,93966],{"class":72},[51,99447,1586],{"class":175},[51,99449,82],{"class":72},[51,99451,99296],{"class":175},[51,99453,93971],{"class":72},[51,99455,1334],{"class":175},[51,99457,82],{"class":72},[51,99459,1328],{"class":175},[51,99461,82],{"class":72},[51,99463,1593],{"class":175},[51,99465,90],{"class":72},[51,99467,99468,99471,99473,99475,99477,99479,99481,99483,99485,99487,99489],{"class":53,"line":99},[51,99469,99470],{"class":72},"aaaa",[51,99472,108],{"class":64},[51,99474,98634],{"class":72},[51,99476,1334],{"class":175},[51,99478,82],{"class":72},[51,99480,1328],{"class":175},[51,99482,82],{"class":72},[51,99484,1328],{"class":175},[51,99486,82],{"class":72},[51,99488,1334],{"class":175},[51,99490,90],{"class":72},[51,99492,99493,99496,99498,99501,99503,99505,99507,99509,99511,99513,99515],{"class":53,"line":120},[51,99494,99495],{"class":72},"bbbb",[51,99497,108],{"class":64},[51,99499,99500],{"class":72},"bbb.reshape(",[51,99502,1334],{"class":175},[51,99504,82],{"class":72},[51,99506,1328],{"class":175},[51,99508,82],{"class":72},[51,99510,1328],{"class":175},[51,99512,82],{"class":72},[51,99514,1334],{"class":175},[51,99516,90],{"class":72},[51,99518,99519],{"class":53,"line":129},[51,99520,99315],{"class":57},[51,99522,99523,99526,99528,99530,99532],{"class":53,"line":206},[51,99524,99525],{"class":72},"np.concatenate((aaaa,bbbb),",[51,99527,48478],{"class":78},[51,99529,108],{"class":64},[51,99531,176],{"class":175},[51,99533,99392],{"class":72},[51,99535,99536],{"class":53,"line":212},[51,99537,99538],{"class":57},"#结果：（4，3，3，2）\n",[51,99540,99541],{"class":53,"line":227},[51,99542,99347],{"class":57},[51,99544,99545,99547,99549,99551,99553],{"class":53,"line":370},[51,99546,99525],{"class":72},[51,99548,48478],{"class":78},[51,99550,108],{"class":64},[51,99552,791],{"class":175},[51,99554,99392],{"class":72},[51,99556,99557],{"class":53,"line":387},[51,99558,99559],{"class":57},"#结果：（2，6，3，2）\n",[51,99561,99562],{"class":53,"line":404},[51,99563,99379],{"class":57},[51,99565,99566,99568,99570,99572,99574],{"class":53,"line":415},[51,99567,99525],{"class":72},[51,99569,48478],{"class":78},[51,99571,108],{"class":64},[51,99573,1334],{"class":175},[51,99575,99392],{"class":72},[51,99577,99578],{"class":53,"line":420},[51,99579,99580],{"class":57},"#结果：（2，3，6，2）\n",[51,99582,99583],{"class":53,"line":429},[51,99584,99585],{"class":57},"#axis=3\n",[51,99587,99588,99590,99592,99594,99596],{"class":53,"line":434},[51,99589,99525],{"class":72},[51,99591,48478],{"class":78},[51,99593,108],{"class":64},[51,99595,1328],{"class":175},[51,99597,99392],{"class":72},[51,99599,99600],{"class":53,"line":448},[51,99601,99602],{"class":57},"#结果：（2，3，3，4）\n",[14,99604,99606],{"id":99605},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[40,99608,99609],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[40,99611,99612],{},"①二维数组",[29,99614,99616],{"className":31342,"code":99615,"language":31344,"meta":35,"style":35},"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",[37,99617,99618,99642,99666,99671,99676],{"__ignoreMap":35},[51,99619,99620,99622,99624,99626,99628,99630,99632,99634,99636,99638,99640],{"class":53,"line":54},[51,99621,94270],{"class":72},[51,99623,108],{"class":64},[51,99625,93966],{"class":72},[51,99627,791],{"class":175},[51,99629,82],{"class":72},[51,99631,1769],{"class":175},[51,99633,93971],{"class":72},[51,99635,1328],{"class":175},[51,99637,82],{"class":72},[51,99639,1543],{"class":175},[51,99641,90],{"class":72},[51,99643,99644,99646,99648,99650,99652,99654,99656,99658,99660,99662,99664],{"class":53,"line":61},[51,99645,99151],{"class":72},[51,99647,108],{"class":64},[51,99649,93966],{"class":72},[51,99651,1586],{"class":175},[51,99653,82],{"class":72},[51,99655,1888],{"class":175},[51,99657,93971],{"class":72},[51,99659,1328],{"class":175},[51,99661,82],{"class":72},[51,99663,1543],{"class":175},[51,99665,90],{"class":72},[51,99667,99668],{"class":53,"line":93},[51,99669,99670],{"class":72},"np.hstack((aa,bb))\n",[51,99672,99673],{"class":53,"line":99},[51,99674,99675],{"class":57},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[51,99677,99678],{"class":53,"line":120},[51,99679,99680],{"class":57},"#np.hstack([aa,bb])\n",[40,99682,99197],{},[40,99684,99685],{},[2564,99686],{"alt":35,"src":99687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[40,99689,99690],{},"等效于concatenate()函数中axis=1时的情况",[40,99692,99693],{},"②三维数组",[29,99695,99697],{"className":31342,"code":99696,"language":31344,"meta":35,"style":35},"#两个三行六列\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",[37,99698,99699,99703,99731,99759,99764,99769],{"__ignoreMap":35},[51,99700,99701],{"class":53,"line":54},[51,99702,99252],{"class":57},[51,99704,99705,99707,99709,99711,99713,99715,99717,99719,99721,99723,99725,99727,99729],{"class":53,"line":61},[51,99706,96485],{"class":72},[51,99708,108],{"class":64},[51,99710,93966],{"class":72},[51,99712,791],{"class":175},[51,99714,82],{"class":72},[51,99716,1574],{"class":175},[51,99718,93971],{"class":72},[51,99720,1334],{"class":175},[51,99722,82],{"class":72},[51,99724,1328],{"class":175},[51,99726,82],{"class":72},[51,99728,1593],{"class":175},[51,99730,90],{"class":72},[51,99732,99733,99735,99737,99739,99741,99743,99745,99747,99749,99751,99753,99755,99757],{"class":53,"line":93},[51,99734,99285],{"class":72},[51,99736,108],{"class":64},[51,99738,93966],{"class":72},[51,99740,1586],{"class":175},[51,99742,82],{"class":72},[51,99744,99296],{"class":175},[51,99746,93971],{"class":72},[51,99748,1334],{"class":175},[51,99750,82],{"class":72},[51,99752,1328],{"class":175},[51,99754,82],{"class":72},[51,99756,1593],{"class":175},[51,99758,90],{"class":72},[51,99760,99761],{"class":53,"line":99},[51,99762,99763],{"class":57},"#使用hstack\n",[51,99765,99766],{"class":53,"line":120},[51,99767,99768],{"class":72},"np.hstack((aaa,bbb)).shape\n",[51,99770,99771],{"class":53,"line":129},[51,99772,99773],{"class":57},"#输出：（2，6，6）\n",[14,99775,99777],{"id":99776},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[40,99779,99780],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[40,99782,99612],{},[29,99784,99786],{"className":31342,"code":99785,"language":31344,"meta":35,"style":35},"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",[37,99787,99788,99812,99836,99841,99846,99851],{"__ignoreMap":35},[51,99789,99790,99792,99794,99796,99798,99800,99802,99804,99806,99808,99810],{"class":53,"line":54},[51,99791,94270],{"class":72},[51,99793,108],{"class":64},[51,99795,93966],{"class":72},[51,99797,791],{"class":175},[51,99799,82],{"class":72},[51,99801,1769],{"class":175},[51,99803,93971],{"class":72},[51,99805,1328],{"class":175},[51,99807,82],{"class":72},[51,99809,1543],{"class":175},[51,99811,90],{"class":72},[51,99813,99814,99816,99818,99820,99822,99824,99826,99828,99830,99832,99834],{"class":53,"line":61},[51,99815,99151],{"class":72},[51,99817,108],{"class":64},[51,99819,93966],{"class":72},[51,99821,1586],{"class":175},[51,99823,82],{"class":72},[51,99825,1888],{"class":175},[51,99827,93971],{"class":72},[51,99829,1328],{"class":175},[51,99831,82],{"class":72},[51,99833,1543],{"class":175},[51,99835,90],{"class":72},[51,99837,99838],{"class":53,"line":93},[51,99839,99840],{"class":57},"#vstack 垂直方向进行堆叠\n",[51,99842,99843],{"class":53,"line":99},[51,99844,99845],{"class":72},"np.vstack((aa,bb))\n",[51,99847,99848],{"class":53,"line":120},[51,99849,99850],{"class":57},"#与hstack传的参数类似，等价于：\n",[51,99852,99853],{"class":53,"line":129},[51,99854,99855],{"class":72},"np.vstack([aa,bb])\n",[40,99857,99197],{},[40,99859,99860],{},[2564,99861],{"alt":35,"src":99862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[40,99864,99693],{},[29,99866,99868],{"className":31342,"code":99867,"language":31344,"meta":35,"style":35},"#两个三行六列\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",[37,99869,99870,99874,99902,99930,99935,99940],{"__ignoreMap":35},[51,99871,99872],{"class":53,"line":54},[51,99873,99252],{"class":57},[51,99875,99876,99878,99880,99882,99884,99886,99888,99890,99892,99894,99896,99898,99900],{"class":53,"line":61},[51,99877,96485],{"class":72},[51,99879,108],{"class":64},[51,99881,93966],{"class":72},[51,99883,791],{"class":175},[51,99885,82],{"class":72},[51,99887,1574],{"class":175},[51,99889,93971],{"class":72},[51,99891,1334],{"class":175},[51,99893,82],{"class":72},[51,99895,1328],{"class":175},[51,99897,82],{"class":72},[51,99899,1593],{"class":175},[51,99901,90],{"class":72},[51,99903,99904,99906,99908,99910,99912,99914,99916,99918,99920,99922,99924,99926,99928],{"class":53,"line":93},[51,99905,99285],{"class":72},[51,99907,108],{"class":64},[51,99909,93966],{"class":72},[51,99911,1586],{"class":175},[51,99913,82],{"class":72},[51,99915,99296],{"class":175},[51,99917,93971],{"class":72},[51,99919,1334],{"class":175},[51,99921,82],{"class":72},[51,99923,1328],{"class":175},[51,99925,82],{"class":72},[51,99927,1593],{"class":175},[51,99929,90],{"class":72},[51,99931,99932],{"class":53,"line":99},[51,99933,99934],{"class":57},"#使用vstack\n",[51,99936,99937],{"class":53,"line":120},[51,99938,99939],{"class":72},"np.vstack((aaa,bbb)).shape\n",[51,99941,99942],{"class":53,"line":129},[51,99943,99944],{"class":57},"#输出：（4，3，6）\n",[14,99946,99948],{"id":99947},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[40,99950,99951],{},"该方法是三维数组特有的方法",[40,99953,99954],{},"也就是说",[40,99956,99957],{},"一维数组拼接方法用：concatenate()",[40,99959,99960],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[40,99962,99963],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[40,99965,99966],{},"四维数组及多维数组只能用concatenate进行拼接",[29,99968,99970],{"className":31342,"code":99969,"language":31344,"meta":35,"style":35},"#两个三行六列\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",[37,99971,99972,99976,100004,100032,100037,100042],{"__ignoreMap":35},[51,99973,99974],{"class":53,"line":54},[51,99975,99252],{"class":57},[51,99977,99978,99980,99982,99984,99986,99988,99990,99992,99994,99996,99998,100000,100002],{"class":53,"line":61},[51,99979,96485],{"class":72},[51,99981,108],{"class":64},[51,99983,93966],{"class":72},[51,99985,791],{"class":175},[51,99987,82],{"class":72},[51,99989,1574],{"class":175},[51,99991,93971],{"class":72},[51,99993,1334],{"class":175},[51,99995,82],{"class":72},[51,99997,1328],{"class":175},[51,99999,82],{"class":72},[51,100001,1593],{"class":175},[51,100003,90],{"class":72},[51,100005,100006,100008,100010,100012,100014,100016,100018,100020,100022,100024,100026,100028,100030],{"class":53,"line":93},[51,100007,99285],{"class":72},[51,100009,108],{"class":64},[51,100011,93966],{"class":72},[51,100013,1586],{"class":175},[51,100015,82],{"class":72},[51,100017,99296],{"class":175},[51,100019,93971],{"class":72},[51,100021,1334],{"class":175},[51,100023,82],{"class":72},[51,100025,1328],{"class":175},[51,100027,82],{"class":72},[51,100029,1593],{"class":175},[51,100031,90],{"class":72},[51,100033,100034],{"class":53,"line":99},[51,100035,100036],{"class":57},"#使用dstack\n",[51,100038,100039],{"class":53,"line":120},[51,100040,100041],{"class":72},"np.dstack((aaa,bbb)).shape\n",[51,100043,100044],{"class":53,"line":129},[51,100045,100046],{"class":57},"#结果：（2，3，12）\n",[1179,100048,100049],{},"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":35,"searchDepth":61,"depth":61,"links":100051},[100052,100053,100054,100055],{"id":98991,"depth":61,"text":98992},{"id":99605,"depth":61,"text":99606},{"id":99776,"depth":61,"text":99777},{"id":99947,"depth":61,"text":99948},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98983,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100062,"title":100063,"body":100064,"description":24339,"extension":1190,"meta":100339,"navigation":1192,"path":100340,"seo":100341,"stem":100342,"__hash__":100343},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100065,"toc":100337},[100066,100069,100072,100166,100169,100172,100175,100178,100181,100184,100187,100190,100334],[10,100067,100063],{"id":100068},"_7数组转置",[40,100070,100071],{},"使用transpose()函数",[29,100073,100075],{"className":31342,"code":100074,"language":31344,"meta":35,"style":35},"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",[37,100076,100077,100087,100111,100116,100121,100126,100131,100139,100143,100147,100152,100157,100162],{"__ignoreMap":35},[51,100078,100079,100081,100083,100085],{"class":53,"line":54},[51,100080,31356],{"class":64},[51,100082,32344],{"class":72},[51,100084,32347],{"class":64},[51,100086,32350],{"class":72},[51,100088,100089,100091,100093,100095,100097,100099,100101,100103,100105,100107,100109],{"class":53,"line":61},[51,100090,981],{"class":72},[51,100092,108],{"class":64},[51,100094,32681],{"class":72},[51,100096,791],{"class":175},[51,100098,82],{"class":72},[51,100100,1769],{"class":175},[51,100102,93971],{"class":72},[51,100104,1543],{"class":175},[51,100106,82],{"class":72},[51,100108,1328],{"class":175},[51,100110,90],{"class":72},[51,100112,100113],{"class":53,"line":93},[51,100114,100115],{"class":57},"#二维数组转置\n",[51,100117,100118],{"class":53,"line":99},[51,100119,100120],{"class":57},"#调用transpose()函数\n",[51,100122,100123],{"class":53,"line":120},[51,100124,100125],{"class":72},"a.transpose()\n",[51,100127,100128],{"class":53,"line":129},[51,100129,100130],{"class":57},"#对于二维数组也可以采用.T来实现\n",[51,100132,100133,100136],{"class":53,"line":206},[51,100134,100135],{"class":72},"a.T",[51,100137,100138],{"class":57},"#与上述代码一样\n",[51,100140,100141],{"class":53,"line":212},[51,100142,94528],{"class":57},[51,100144,100145],{"class":53,"line":227},[51,100146,94892],{"class":282},[51,100148,100149],{"class":53,"line":370},[51,100150,100151],{"class":282},"array([[ 1,  4,  7, 10],\n",[51,100153,100154],{"class":53,"line":387},[51,100155,100156],{"class":282},"       [ 2,  5,  8, 11],\n",[51,100158,100159],{"class":53,"line":404},[51,100160,100161],{"class":282},"       [ 3,  6,  9, 12]])\n",[51,100163,100164],{"class":53,"line":415},[51,100165,94892],{"class":282},[40,100167,100168],{},"也可以使用np.transpose()的形式",[40,100170,100171],{},"#多维数组进行转置 np.transpose()",[40,100173,100174],{},"#对二维数组也可以使用np.transpose()进行转置",[40,100176,100177],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[40,100179,100180],{},"第二个参数，维度可以理解为用axis中的数来理解",[40,100182,100183],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[40,100185,100186],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[40,100188,100189],{},"四维及以上的数组也是一样的道理",[29,100191,100193],{"className":31342,"code":100192,"language":31344,"meta":35,"style":35},"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",[37,100194,100195,100223,100228,100233,100238,100256,100261,100293,100298,100303,100308,100329],{"__ignoreMap":35},[51,100196,100197,100199,100201,100203,100205,100207,100209,100211,100213,100215,100217,100219,100221],{"class":53,"line":54},[51,100198,2065],{"class":72},[51,100200,108],{"class":64},[51,100202,93966],{"class":72},[51,100204,791],{"class":175},[51,100206,82],{"class":72},[51,100208,1574],{"class":175},[51,100210,93971],{"class":72},[51,100212,1328],{"class":175},[51,100214,82],{"class":72},[51,100216,1593],{"class":175},[51,100218,82],{"class":72},[51,100220,1334],{"class":175},[51,100222,90],{"class":72},[51,100224,100225],{"class":53,"line":61},[51,100226,100227],{"class":72},"x.shape\n",[51,100229,100230],{"class":53,"line":93},[51,100231,100232],{"class":57},"#结果：（3,6,2）\n",[51,100234,100235],{"class":53,"line":99},[51,100236,100237],{"class":57},"#使用np.transpose()进行转置 变为(2,6,3)\n",[51,100239,100240,100243,100245,100247,100249,100251,100253],{"class":53,"line":120},[51,100241,100242],{"class":72},"np.transpose(x,(",[51,100244,1334],{"class":175},[51,100246,82],{"class":72},[51,100248,791],{"class":175},[51,100250,82],{"class":72},[51,100252,176],{"class":175},[51,100254,100255],{"class":72},")).shape\n",[51,100257,100258],{"class":53,"line":129},[51,100259,100260],{"class":57},"#结果：(2,6,3)\n",[51,100262,100263,100265,100267,100269,100271,100273,100275,100277,100279,100281,100283,100285,100287,100289,100291],{"class":53,"line":206},[51,100264,99470],{"class":72},[51,100266,108],{"class":64},[51,100268,93966],{"class":72},[51,100270,791],{"class":175},[51,100272,82],{"class":72},[51,100274,1574],{"class":175},[51,100276,93971],{"class":72},[51,100278,1328],{"class":175},[51,100280,82],{"class":72},[51,100282,1334],{"class":175},[51,100284,82],{"class":72},[51,100286,791],{"class":175},[51,100288,82],{"class":72},[51,100290,1593],{"class":175},[51,100292,90],{"class":72},[51,100294,100295],{"class":53,"line":212},[51,100296,100297],{"class":72},"aaaa.shape\n",[51,100299,100300],{"class":53,"line":227},[51,100301,100302],{"class":57},"#结果：（3，2，1，6）\n",[51,100304,100305],{"class":53,"line":370},[51,100306,100307],{"class":57},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[51,100309,100310,100313,100315,100317,100319,100321,100323,100325,100327],{"class":53,"line":387},[51,100311,100312],{"class":72},"np.transpose(aaaa,(",[51,100314,791],{"class":175},[51,100316,82],{"class":72},[51,100318,1334],{"class":175},[51,100320,82],{"class":72},[51,100322,176],{"class":175},[51,100324,82],{"class":72},[51,100326,1328],{"class":175},[51,100328,100255],{"class":72},[51,100330,100331],{"class":53,"line":404},[51,100332,100333],{"class":57},"#结果：(2,1,3,6)\n",[1179,100335,100336],{},"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":35,"searchDepth":61,"depth":61,"links":100338},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100063,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100345,"title":100346,"body":100347,"description":24339,"extension":1190,"meta":101081,"navigation":1192,"path":101082,"seo":101083,"stem":101084,"__hash__":101085},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100348,"toc":101079},[100349,100352,100355,100358,100361,100364,100367,100370,100373,100482,100485,100488,101076],[10,100350,100346],{"id":100351},"_8数组分割",[40,100353,100354],{},"split分割",[40,100356,100357],{},"numpy.split(ary,indics_or_sections,axis)",[40,100359,100360],{},"解释：",[40,100362,100363],{},"ary:被分割的数组",[40,100365,100366],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[40,100368,100369],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[40,100371,100372],{},"①一维数组的分割",[29,100374,100376],{"className":31342,"code":100375,"language":31344,"meta":35,"style":35},"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",[37,100377,100378,100394,100399,100408,100412,100417,100425,100429,100434,100439,100452,100456,100461,100473,100477],{"__ignoreMap":35},[51,100379,100380,100382,100384,100386,100388,100390,100392],{"class":53,"line":54},[51,100381,981],{"class":72},[51,100383,108],{"class":64},[51,100385,93966],{"class":72},[51,100387,791],{"class":175},[51,100389,82],{"class":72},[51,100391,1668],{"class":175},[51,100393,90],{"class":72},[51,100395,100396],{"class":53,"line":61},[51,100397,100398],{"class":57},"#如果传入整数，必须能够平分，否则会报错\n",[51,100400,100401,100404,100406],{"class":53,"line":93},[51,100402,100403],{"class":72},"np.split(a,",[51,100405,1334],{"class":175},[51,100407,90],{"class":72},[51,100409,100410],{"class":53,"line":99},[51,100411,94528],{"class":57},[51,100413,100414],{"class":53,"line":120},[51,100415,100416],{"class":57},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[51,100418,100419,100421,100423],{"class":53,"line":129},[51,100420,100403],{"class":72},[51,100422,1543],{"class":175},[51,100424,90],{"class":72},[51,100426,100427],{"class":53,"line":206},[51,100428,94528],{"class":57},[51,100430,100431],{"class":53,"line":212},[51,100432,100433],{"class":57},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[51,100435,100436],{"class":53,"line":227},[51,100437,100438],{"class":57},"#传入数组\n",[51,100440,100441,100444,100446,100448,100450],{"class":53,"line":370},[51,100442,100443],{"class":72},"np.split(a,[",[51,100445,1328],{"class":175},[51,100447,82],{"class":72},[51,100449,1568],{"class":175},[51,100451,5731],{"class":72},[51,100453,100454],{"class":53,"line":387},[51,100455,94528],{"class":57},[51,100457,100458],{"class":53,"line":404},[51,100459,100460],{"class":57},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[51,100462,100463,100465,100467,100469,100471],{"class":53,"line":415},[51,100464,100443],{"class":72},[51,100466,1568],{"class":175},[51,100468,82],{"class":72},[51,100470,1618],{"class":175},[51,100472,5731],{"class":72},[51,100474,100475],{"class":53,"line":420},[51,100476,94528],{"class":57},[51,100478,100479],{"class":53,"line":429},[51,100480,100481],{"class":57},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[40,100483,100484],{},"②二维数组的分割",[40,100486,100487],{},"使用split()",[29,100489,100491],{"className":31342,"code":100490,"language":31344,"meta":35,"style":35},"#二维数组分割\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",[37,100492,100493,100498,100522,100527,100536,100540,100544,100549,100554,100559,100564,100569,100574,100579,100583,100596,100600,100604,100608,100612,100616,100621,100626,100631,100635,100640,100656,100660,100664,100669,100674,100679,100684,100689,100694,100699,100704,100709,100714,100719,100724,100729,100734,100739,100744,100749,100754,100758,100762,100782,100786,100790,100795,100800,100805,100810,100815,100820,100825,100830,100835,100840,100845,100850,100855,100860,100865,100870,100875,100880,100884,100889,100898,100902,100906,100910,100914,100918,100922,100926,100930,100934,100943,100947,100951,100955,100959,100963,100967,100971,100975,100979,100983,100987,100991,100995,100999,101003,101007,101011,101015,101019,101023,101027,101040,101044,101048,101052,101056,101060,101064,101068,101072],{"__ignoreMap":35},[51,100494,100495],{"class":53,"line":54},[51,100496,100497],{"class":57},"#二维数组分割\n",[51,100499,100500,100502,100504,100506,100508,100510,100512,100514,100516,100518,100520],{"class":53,"line":61},[51,100501,94270],{"class":72},[51,100503,108],{"class":64},[51,100505,93966],{"class":72},[51,100507,791],{"class":175},[51,100509,82],{"class":72},[51,100511,1574],{"class":175},[51,100513,93971],{"class":72},[51,100515,1593],{"class":175},[51,100517,82],{"class":72},[51,100519,1593],{"class":175},[51,100521,90],{"class":72},[51,100523,100524],{"class":53,"line":93},[51,100525,100526],{"class":57},"#默认axis=0  传入整数平均分,按行来的\n",[51,100528,100529,100532,100534],{"class":53,"line":99},[51,100530,100531],{"class":72},"np.split(aa,",[51,100533,1328],{"class":175},[51,100535,90],{"class":72},[51,100537,100538],{"class":53,"line":120},[51,100539,96728],{"class":57},[51,100541,100542],{"class":53,"line":129},[51,100543,94892],{"class":282},[51,100545,100546],{"class":53,"line":206},[51,100547,100548],{"class":282},"[array([[ 1,  2,  3,  4,  5,  6],\n",[51,100550,100551],{"class":53,"line":212},[51,100552,100553],{"class":282},"        [ 7,  8,  9, 10, 11, 12]]),\n",[51,100555,100556],{"class":53,"line":227},[51,100557,100558],{"class":282}," array([[13, 14, 15, 16, 17, 18],\n",[51,100560,100561],{"class":53,"line":370},[51,100562,100563],{"class":282},"        [19, 20, 21, 22, 23, 24]]),\n",[51,100565,100566],{"class":53,"line":387},[51,100567,100568],{"class":282}," array([[25, 26, 27, 28, 29, 30],\n",[51,100570,100571],{"class":53,"line":404},[51,100572,100573],{"class":282},"        [31, 32, 33, 34, 35, 36]])]\n",[51,100575,100576],{"class":53,"line":415},[51,100577,100578],{"class":282}," '''\n",[51,100580,100581],{"class":53,"line":420},[51,100582,100438],{"class":57},[51,100584,100585,100588,100590,100592,100594],{"class":53,"line":429},[51,100586,100587],{"class":72},"np.split(aa,[",[51,100589,1334],{"class":175},[51,100591,82],{"class":72},[51,100593,1568],{"class":175},[51,100595,5731],{"class":72},[51,100597,100598],{"class":53,"line":434},[51,100599,96728],{"class":57},[51,100601,100602],{"class":53,"line":448},[51,100603,94892],{"class":282},[51,100605,100606],{"class":53,"line":462},[51,100607,100548],{"class":282},[51,100609,100610],{"class":53,"line":470},[51,100611,100553],{"class":282},[51,100613,100614],{"class":53,"line":2783},[51,100615,100558],{"class":282},[51,100617,100618],{"class":53,"line":2788},[51,100619,100620],{"class":282},"        [19, 20, 21, 22, 23, 24],\n",[51,100622,100623],{"class":53,"line":2817},[51,100624,100625],{"class":282},"        [25, 26, 27, 28, 29, 30]]),\n",[51,100627,100628],{"class":53,"line":2822},[51,100629,100630],{"class":282}," array([[31, 32, 33, 34, 35, 36]])]\n",[51,100632,100633],{"class":53,"line":2839},[51,100634,94892],{"class":282},[51,100636,100637],{"class":53,"line":2844},[51,100638,100639],{"class":57},"#axis=1 按照列来分\n",[51,100641,100642,100644,100646,100648,100650,100652,100654],{"class":53,"line":2849},[51,100643,100531],{"class":72},[51,100645,1328],{"class":175},[51,100647,82],{"class":72},[51,100649,48478],{"class":78},[51,100651,108],{"class":64},[51,100653,791],{"class":175},[51,100655,90],{"class":72},[51,100657,100658],{"class":53,"line":2854},[51,100659,96728],{"class":57},[51,100661,100662],{"class":53,"line":2868},[51,100663,94892],{"class":282},[51,100665,100666],{"class":53,"line":2873},[51,100667,100668],{"class":282},"[array([[ 1,  2],\n",[51,100670,100671],{"class":53,"line":3657},[51,100672,100673],{"class":282},"        [ 7,  8],\n",[51,100675,100676],{"class":53,"line":3671},[51,100677,100678],{"class":282},"        [13, 14],\n",[51,100680,100681],{"class":53,"line":3679},[51,100682,100683],{"class":282},"        [19, 20],\n",[51,100685,100686],{"class":53,"line":3684},[51,100687,100688],{"class":282},"        [25, 26],\n",[51,100690,100691],{"class":53,"line":3690},[51,100692,100693],{"class":282},"        [31, 32]]),\n",[51,100695,100696],{"class":53,"line":3696},[51,100697,100698],{"class":282}," array([[ 3,  4],\n",[51,100700,100701],{"class":53,"line":3701},[51,100702,100703],{"class":282},"        [ 9, 10],\n",[51,100705,100706],{"class":53,"line":8910},[51,100707,100708],{"class":282},"        [15, 16],\n",[51,100710,100711],{"class":53,"line":8934},[51,100712,100713],{"class":282},"        [21, 22],\n",[51,100715,100716],{"class":53,"line":8939},[51,100717,100718],{"class":282},"        [27, 28],\n",[51,100720,100721],{"class":53,"line":8945},[51,100722,100723],{"class":282},"        [33, 34]]),\n",[51,100725,100726],{"class":53,"line":8972},[51,100727,100728],{"class":282}," array([[ 5,  6],\n",[51,100730,100731],{"class":53,"line":8977},[51,100732,100733],{"class":282},"        [11, 12],\n",[51,100735,100736],{"class":53,"line":8983},[51,100737,100738],{"class":282},"        [17, 18],\n",[51,100740,100741],{"class":53,"line":8995},[51,100742,100743],{"class":282},"        [23, 24],\n",[51,100745,100746],{"class":53,"line":9007},[51,100747,100748],{"class":282},"        [29, 30],\n",[51,100750,100751],{"class":53,"line":9019},[51,100752,100753],{"class":282},"        [35, 36]])]\n",[51,100755,100756],{"class":53,"line":10678},[51,100757,100578],{"class":282},[51,100759,100760],{"class":53,"line":10703},[51,100761,100438],{"class":57},[51,100763,100764,100766,100768,100770,100772,100774,100776,100778,100780],{"class":53,"line":10726},[51,100765,100587],{"class":72},[51,100767,791],{"class":175},[51,100769,82],{"class":72},[51,100771,1334],{"class":175},[51,100773,42573],{"class":72},[51,100775,48478],{"class":78},[51,100777,108],{"class":64},[51,100779,791],{"class":175},[51,100781,90],{"class":72},[51,100783,100784],{"class":53,"line":10750},[51,100785,94528],{"class":57},[51,100787,100788],{"class":53,"line":10755},[51,100789,94892],{"class":282},[51,100791,100792],{"class":53,"line":10760},[51,100793,100794],{"class":282},"[array([[ 1],\n",[51,100796,100797],{"class":53,"line":10765},[51,100798,100799],{"class":282},"        [ 7],\n",[51,100801,100802],{"class":53,"line":10774},[51,100803,100804],{"class":282},"        [13],\n",[51,100806,100807],{"class":53,"line":10779},[51,100808,100809],{"class":282},"        [19],\n",[51,100811,100812],{"class":53,"line":10785},[51,100813,100814],{"class":282},"        [25],\n",[51,100816,100817],{"class":53,"line":10806},[51,100818,100819],{"class":282},"        [31]]),\n",[51,100821,100822],{"class":53,"line":10812},[51,100823,100824],{"class":282}," array([[ 2],\n",[51,100826,100827],{"class":53,"line":10826},[51,100828,100829],{"class":282},"        [ 8],\n",[51,100831,100832],{"class":53,"line":10832},[51,100833,100834],{"class":282},"        [14],\n",[51,100836,100837],{"class":53,"line":10859},[51,100838,100839],{"class":282},"        [20],\n",[51,100841,100842],{"class":53,"line":10868},[51,100843,100844],{"class":282},"        [26],\n",[51,100846,100847],{"class":53,"line":10874},[51,100848,100849],{"class":282},"        [32]]),\n",[51,100851,100852],{"class":53,"line":10882},[51,100853,100854],{"class":282}," array([[ 3,  4,  5,  6],\n",[51,100856,100857],{"class":53,"line":10887},[51,100858,100859],{"class":282},"        [ 9, 10, 11, 12],\n",[51,100861,100862],{"class":53,"line":17566},[51,100863,100864],{"class":282},"        [15, 16, 17, 18],\n",[51,100866,100867],{"class":53,"line":17572},[51,100868,100869],{"class":282},"        [21, 22, 23, 24],\n",[51,100871,100872],{"class":53,"line":17595},[51,100873,100874],{"class":282},"        [27, 28, 29, 30],\n",[51,100876,100877],{"class":53,"line":17601},[51,100878,100879],{"class":282},"        [33, 34, 35, 36]])]\n",[51,100881,100882],{"class":53,"line":17624},[51,100883,94892],{"class":282},[51,100885,100886],{"class":53,"line":17638},[51,100887,100888],{"class":57},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[51,100890,100891,100894,100896],{"class":53,"line":17658},[51,100892,100893],{"class":72},"np.vsplit(aa,",[51,100895,1328],{"class":175},[51,100897,90],{"class":72},[51,100899,100900],{"class":53,"line":17664},[51,100901,94528],{"class":57},[51,100903,100904],{"class":53,"line":17675},[51,100905,94892],{"class":282},[51,100907,100908],{"class":53,"line":17698},[51,100909,100548],{"class":282},[51,100911,100912],{"class":53,"line":17720},[51,100913,100553],{"class":282},[51,100915,100916],{"class":53,"line":17725},[51,100917,100558],{"class":282},[51,100919,100920],{"class":53,"line":17731},[51,100921,100563],{"class":282},[51,100923,100924],{"class":53,"line":17745},[51,100925,100568],{"class":282},[51,100927,100928],{"class":53,"line":17758},[51,100929,100573],{"class":282},[51,100931,100932],{"class":53,"line":17763},[51,100933,94892],{"class":282},[51,100935,100936,100939,100941],{"class":53,"line":17777},[51,100937,100938],{"class":72},"np.hsplit(aa,",[51,100940,1328],{"class":175},[51,100942,90],{"class":72},[51,100944,100945],{"class":53,"line":17782},[51,100946,94528],{"class":57},[51,100948,100949],{"class":53,"line":17788},[51,100950,94892],{"class":282},[51,100952,100953],{"class":53,"line":17793},[51,100954,100668],{"class":282},[51,100956,100957],{"class":53,"line":17807},[51,100958,100673],{"class":282},[51,100960,100961],{"class":53,"line":17812},[51,100962,100678],{"class":282},[51,100964,100965],{"class":53,"line":17817},[51,100966,100683],{"class":282},[51,100968,100969],{"class":53,"line":17831},[51,100970,100688],{"class":282},[51,100972,100973],{"class":53,"line":17843},[51,100974,100693],{"class":282},[51,100976,100977],{"class":53,"line":17848},[51,100978,100698],{"class":282},[51,100980,100981],{"class":53,"line":17861},[51,100982,100703],{"class":282},[51,100984,100985],{"class":53,"line":17866},[51,100986,100708],{"class":282},[51,100988,100989],{"class":53,"line":17871},[51,100990,100713],{"class":282},[51,100992,100993],{"class":53,"line":17876},[51,100994,100718],{"class":282},[51,100996,100997],{"class":53,"line":17889},[51,100998,100723],{"class":282},[51,101000,101001],{"class":53,"line":17894},[51,101002,100728],{"class":282},[51,101004,101005],{"class":53,"line":33597},[51,101006,100733],{"class":282},[51,101008,101009],{"class":53,"line":33603},[51,101010,100738],{"class":282},[51,101012,101013],{"class":53,"line":33609},[51,101014,100743],{"class":282},[51,101016,101017],{"class":53,"line":33615},[51,101018,100748],{"class":282},[51,101020,101021],{"class":53,"line":33621},[51,101022,100753],{"class":282},[51,101024,101025],{"class":53,"line":33632},[51,101026,94892],{"class":282},[51,101028,101029,101032,101034,101036,101038],{"class":53,"line":33638},[51,101030,101031],{"class":72},"np.vsplit(aa,[",[51,101033,1334],{"class":175},[51,101035,82],{"class":72},[51,101037,1568],{"class":175},[51,101039,5731],{"class":72},[51,101041,101042],{"class":53,"line":33658},[51,101043,94528],{"class":57},[51,101045,101046],{"class":53,"line":33664},[51,101047,94892],{"class":282},[51,101049,101050],{"class":53,"line":33675},[51,101051,100548],{"class":282},[51,101053,101054],{"class":53,"line":33681},[51,101055,100553],{"class":282},[51,101057,101058],{"class":53,"line":33687},[51,101059,100558],{"class":282},[51,101061,101062],{"class":53,"line":33693},[51,101063,100620],{"class":282},[51,101065,101066],{"class":53,"line":33699},[51,101067,100625],{"class":282},[51,101069,101070],{"class":53,"line":33705},[51,101071,100630],{"class":282},[51,101073,101074],{"class":53,"line":33711},[51,101075,100578],{"class":282},[1179,101077,101078],{},"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":35,"searchDepth":61,"depth":61,"links":101080},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100346,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101087,"title":101088,"body":101089,"description":24339,"extension":1190,"meta":101583,"navigation":1192,"path":101584,"seo":101585,"stem":101586,"__hash__":101587},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101090,"toc":101574},[101091,101094,101097,101122,101126,101185,101237,101241,101243,101279,101333,101335,101373,101444,101448,101453,101457,101460,101493,101496,101500,101503,101506,101509,101512,101517,101521,101524,101527,101530,101533,101538,101542,101547,101550,101571],[10,101092,101088],{"id":101093},"_9数学函数",[40,101095,101096],{},"补充回顾：python的列表推导式",[29,101098,101100],{"className":31342,"code":101099,"language":31344,"meta":35,"style":35},"[1\u002Fi for i in a]\n",[37,101101,101102],{"__ignoreMap":35},[51,101103,101104,101106,101108,101110,101113,101115,101117,101119],{"class":53,"line":54},[51,101105,2134],{"class":72},[51,101107,791],{"class":175},[51,101109,1830],{"class":64},[51,101111,101112],{"class":72},"i ",[51,101114,4102],{"class":64},[51,101116,10400],{"class":72},[51,101118,27007],{"class":64},[51,101120,101121],{"class":72}," a]\n",[14,101123,101125],{"id":101124},"_91-求倒数","9.1 求倒数",[29,101127,101129],{"className":31342,"code":101128,"language":31344,"meta":35,"style":35},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[37,101130,101131,101136,101164,101176],{"__ignoreMap":35},[51,101132,101133],{"class":53,"line":54},[51,101134,101135],{"class":57},"#数组求倒数\n",[51,101137,101138,101140,101142,101144,101146,101148,101150,101152,101154,101156,101158,101160,101162],{"class":53,"line":61},[51,101139,981],{"class":72},[51,101141,108],{"class":64},[51,101143,2134],{"class":72},[51,101145,791],{"class":175},[51,101147,82],{"class":72},[51,101149,1334],{"class":175},[51,101151,82],{"class":72},[51,101153,1328],{"class":175},[51,101155,82],{"class":72},[51,101157,1543],{"class":175},[51,101159,82],{"class":72},[51,101161,1568],{"class":175},[51,101163,34210],{"class":72},[51,101165,101166,101168,101170,101173],{"class":53,"line":93},[51,101167,975],{"class":72},[51,101169,108],{"class":64},[51,101171,101172],{"class":72},"np.array(a)",[51,101174,101175],{"class":57},"#将列表转换为数组\n",[51,101177,101178,101180,101182],{"class":53,"line":99},[51,101179,791],{"class":175},[51,101181,1830],{"class":64},[51,101183,101184],{"class":72},"b\n",[29,101186,101188],{"className":31342,"code":101187,"language":31344,"meta":35,"style":35},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[37,101189,101190,101218,101227,101232],{"__ignoreMap":35},[51,101191,101192,101194,101196,101198,101200,101202,101204,101206,101208,101210,101212,101214,101216],{"class":53,"line":54},[51,101193,981],{"class":72},[51,101195,108],{"class":64},[51,101197,2134],{"class":72},[51,101199,791],{"class":175},[51,101201,82],{"class":72},[51,101203,1334],{"class":175},[51,101205,82],{"class":72},[51,101207,1328],{"class":175},[51,101209,82],{"class":72},[51,101211,1543],{"class":175},[51,101213,82],{"class":72},[51,101215,1568],{"class":175},[51,101217,34210],{"class":72},[51,101219,101220,101222,101224],{"class":53,"line":61},[51,101221,975],{"class":72},[51,101223,108],{"class":64},[51,101225,101226],{"class":72},"np.array(a)\n",[51,101228,101229],{"class":53,"line":93},[51,101230,101231],{"class":57},"#调用numpy中的函数reciprocal()\n",[51,101233,101234],{"class":53,"line":99},[51,101235,101236],{"class":72},"np.reciprocal(b)\n",[14,101238,101240],{"id":101239},"_92-求平方","9.2 求平方",[40,101242,95494],{},[29,101244,101246],{"className":31342,"code":101245,"language":31344,"meta":35,"style":35},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[37,101247,101248,101253,101258,101274],{"__ignoreMap":35},[51,101249,101250],{"class":53,"line":54},[51,101251,101252],{"class":57},"#square()，求平方\n",[51,101254,101255],{"class":53,"line":61},[51,101256,101257],{"class":57},"#一维数组\n",[51,101259,101260,101262,101264,101266,101268,101270,101272],{"class":53,"line":93},[51,101261,981],{"class":72},[51,101263,108],{"class":64},[51,101265,93966],{"class":72},[51,101267,791],{"class":175},[51,101269,82],{"class":72},[51,101271,443],{"class":175},[51,101273,90],{"class":72},[51,101275,101276],{"class":53,"line":99},[51,101277,101278],{"class":72},"np.square(a)\n",[29,101280,101282],{"className":31342,"code":101281,"language":31344,"meta":35,"style":35},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[37,101283,101284,101289,101294,101315],{"__ignoreMap":35},[51,101285,101286],{"class":53,"line":54},[51,101287,101288],{"class":57},"#或者通过循环遍历的形式来计算\n",[51,101290,101291],{"class":53,"line":61},[51,101292,101293],{"class":57},"#这是一个列表\n",[51,101295,101296,101299,101301,101303,101305,101307,101309,101312],{"class":53,"line":93},[51,101297,101298],{"class":72},"[i",[51,101300,1702],{"class":64},[51,101302,101112],{"class":72},[51,101304,4102],{"class":64},[51,101306,10400],{"class":72},[51,101308,27007],{"class":64},[51,101310,101311],{"class":72}," a]",[51,101313,101314],{"class":57},"#这个求完之后在数列当中\n",[51,101316,101317,101320,101322,101324,101326,101328,101330],{"class":53,"line":99},[51,101318,101319],{"class":72},"np.array([i",[51,101321,1702],{"class":64},[51,101323,101112],{"class":72},[51,101325,4102],{"class":64},[51,101327,10400],{"class":72},[51,101329,27007],{"class":64},[51,101331,101332],{"class":72}," a])\n",[40,101334,94255],{},[29,101336,101338],{"className":31342,"code":101337,"language":31344,"meta":35,"style":35},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[37,101339,101340,101344,101368],{"__ignoreMap":35},[51,101341,101342],{"class":53,"line":54},[51,101343,94265],{"class":57},[51,101345,101346,101348,101350,101352,101354,101356,101358,101360,101362,101364,101366],{"class":53,"line":61},[51,101347,94270],{"class":72},[51,101349,108],{"class":64},[51,101351,93966],{"class":72},[51,101353,791],{"class":175},[51,101355,82],{"class":72},[51,101357,1769],{"class":175},[51,101359,93971],{"class":72},[51,101361,1543],{"class":175},[51,101363,82],{"class":72},[51,101365,1328],{"class":175},[51,101367,90],{"class":72},[51,101369,101370],{"class":53,"line":93},[51,101371,101372],{"class":72},"np.square(aa)\n",[29,101374,101376],{"className":31342,"code":101375,"language":31344,"meta":35,"style":35},"#传统的方式\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",[37,101377,101378,101383,101392,101408,101424,101439],{"__ignoreMap":35},[51,101379,101380],{"class":53,"line":54},[51,101381,101382],{"class":57},"#传统的方式\n",[51,101384,101385,101387,101389],{"class":53,"line":61},[51,101386,99151],{"class":72},[51,101388,108],{"class":64},[51,101390,101391],{"class":72},"np.empty_like(aa)\n",[51,101393,101394,101396,101398,101400,101402,101404,101406],{"class":53,"line":93},[51,101395,4102],{"class":64},[51,101397,10400],{"class":72},[51,101399,27007],{"class":64},[51,101401,33407],{"class":175},[51,101403,73],{"class":72},[51,101405,1543],{"class":175},[51,101407,31750],{"class":72},[51,101409,101410,101412,101414,101416,101418,101420,101422],{"class":53,"line":99},[51,101411,4278],{"class":64},[51,101413,10462],{"class":72},[51,101415,27007],{"class":64},[51,101417,33407],{"class":175},[51,101419,73],{"class":72},[51,101421,1328],{"class":175},[51,101423,31750],{"class":72},[51,101425,101426,101429,101431,101434,101436],{"class":53,"line":120},[51,101427,101428],{"class":72},"        bb[i,j]",[51,101430,108],{"class":64},[51,101432,101433],{"class":72},"aa[i,j]",[51,101435,1702],{"class":64},[51,101437,101438],{"class":72},"aa[i,j]\n",[51,101440,101441],{"class":53,"line":129},[51,101442,101443],{"class":72},"bb\n",[14,101445,101447],{"id":101446},"_93-求各元素的符号","9.3 求各元素的符号",[40,101449,101450],{},[2564,101451],{"alt":35,"src":101452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101454,101456],{"id":101455},"_94-modf函数","9.4 modf函数",[40,101458,101459],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[29,101461,101463],{"className":31342,"code":101462,"language":31344,"meta":35,"style":35},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[37,101464,101465,101488],{"__ignoreMap":35},[51,101466,101467,101469,101471,101473,101475,101477,101479,101481,101483,101486],{"class":53,"line":54},[51,101468,981],{"class":72},[51,101470,108],{"class":64},[51,101472,93966],{"class":72},[51,101474,1778],{"class":64},[51,101476,443],{"class":175},[51,101478,82],{"class":72},[51,101480,443],{"class":175},[51,101482,82],{"class":72},[51,101484,101485],{"class":175},"0.3",[51,101487,90],{"class":72},[51,101489,101490],{"class":53,"line":61},[51,101491,101492],{"class":72},"np.modf(a)\n",[40,101494,101495],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101497,101499],{"id":101498},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[40,101501,101502],{},"np.cell()",[40,101504,101505],{},"np.floor()",[40,101507,101508],{},"np.rint()",[40,101510,101511],{},"对各元素分别向上取整、向下取整、四舍五入",[40,101513,101514],{},[2564,101515],{"alt":35,"src":101516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101518,101520],{"id":101519},"_96-around函数","9.6 around()函数",[40,101522,101523],{},"around()函数也可以实现对数的小数位数进行操作",[40,101525,101526],{},"其中的参数：",[40,101528,101529],{},"1.要传的数组",[40,101531,101532],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[40,101534,101535],{},[2564,101536],{"alt":35,"src":101537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101539,101541],{"id":101540},"_97-三角函数","9.7 三角函数",[40,101543,101544],{},[2564,101545],{"alt":35,"src":101546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[40,101548,101549],{},"引入图像模块非常重要",[29,101551,101553],{"className":31342,"code":101552,"language":31344,"meta":35,"style":35},"from matplotlib import pyplot as plt\n",[37,101554,101555],{"__ignoreMap":35},[51,101556,101557,101559,101562,101564,101567,101569],{"class":53,"line":54},[51,101558,31701],{"class":64},[51,101560,101561],{"class":72}," matplotlib ",[51,101563,31356],{"class":64},[51,101565,101566],{"class":72}," pyplot ",[51,101568,32347],{"class":64},[51,101570,32401],{"class":72},[1179,101572,101573],{},"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":35,"searchDepth":61,"depth":61,"links":101575},[101576,101577,101578,101579,101580,101581,101582],{"id":101124,"depth":61,"text":101125},{"id":101239,"depth":61,"text":101240},{"id":101446,"depth":61,"text":101447},{"id":101455,"depth":61,"text":101456},{"id":101498,"depth":61,"text":101499},{"id":101519,"depth":61,"text":101520},{"id":101540,"depth":61,"text":101541},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101088,"description":24339},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101589,"title":101590,"body":101591,"description":24339,"extension":1190,"meta":101595,"navigation":1192,"path":101596,"seo":101597,"stem":101598,"__hash__":101599},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101592,"toc":101593},[],{"title":35,"searchDepth":61,"depth":61,"links":101594},[],{"category":51384},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101590,"description":24339},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101601,"title":101602,"body":101603,"description":35,"extension":1190,"meta":103611,"navigation":1192,"path":103612,"seo":103613,"stem":103614,"__hash__":103615},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101604,"toc":103587},[101605,101608,101612,101615,101618,101624,101627,101650,101653,101687,101690,101731,101735,101738,101831,101834,101878,101881,101898,101901,101915,101918,101921,101966,101969,102006,102010,102013,102019,102024,102044,102048,102051,102117,102120,102138,102142,102145,102174,102184,102190,102194,102197,102203,102214,102218,102221,102251,102254,102534,102537,102540,102551,102554,102557,102579,102586,102589,102607,102610,102613,102627,102635,102638,102664,102670,102673,102676,102686,102698,102718,102727,102747,102757,102781,102794,102808,102813,102854,102871,102896,102908,102928,102934,102979,102998,103015,103028,103044,103051,103063,103072,103107,103128,103153,103166,103190,103205,103230,103233,103254,103263,103266,103277,103281,103284,103290,103302,103309,103313,103316,103328,103331,103345,103348,103358,103368,103371,103411,103414,103418,103424,103427,103441,103445,103448,103481,103485,103488,103511,103519,103522,103528,103534,103537,103540,103568,103572,103575,103581,103584],[10,101606,101602],{"id":101607},"_1环境安装与第一个-mujoco-程序",[14,101609,101611],{"id":101610},"_1目标说明","1.目标说明",[40,101613,101614],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[40,101616,101617],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[29,101619,101622],{"className":101620,"code":101621,"language":34,"meta":35},[32],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[37,101623,101621],{"__ignoreMap":35},[40,101625,101626],{},"需要掌握:",[19,101628,101629,101632,101635,101640,101645],{},[22,101630,101631],{},"Fedora 44 下 MuJoCo 的系统依赖",[22,101633,101634],{},"Python 虚拟环境创建",[22,101636,101637],{},[37,101638,101639],{},"mujoco.MjModel",[22,101641,101642],{},[37,101643,101644],{},"mujoco.MjData",[22,101646,101647],{},[37,101648,101649],{},"mujoco.mj_step(model, data)",[40,101651,101652],{},"MuJoCo 中最重要的两个对象:",[1393,101654,101655,101665],{},[1396,101656,101657],{},[1399,101658,101659,101662],{},[1402,101660,101661],{"align":24699},"对象",[1402,101663,101664],{"align":24699},"含义",[1439,101666,101667,101677],{},[1399,101668,101669,101674],{},[1444,101670,101671],{"align":24699},[37,101672,101673],{},"MjModel",[1444,101675,101676],{"align":24699},"模型结构，来自 XML，基本不随时间变化",[1399,101678,101679,101684],{},[1444,101680,101681],{"align":24699},[37,101682,101683],{},"MjData",[1444,101685,101686],{"align":24699},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[40,101688,101689],{},"可以先用一个类比理解：",[1393,101691,101692,101702],{},[1396,101693,101694],{},[1399,101695,101696,101699],{},[1402,101697,101698],{"align":24699},"类比",[1402,101700,101701],{"align":24699},"MuJoCo 对象",[1439,101703,101704,101713,101722],{},[1399,101705,101706,101709],{},[1444,101707,101708],{"align":24699},"游戏地图和角色配置",[1444,101710,101711],{"align":24699},[37,101712,101673],{},[1399,101714,101715,101718],{},[1444,101716,101717],{"align":24699},"游戏运行到当前帧的状态",[1444,101719,101720],{"align":24699},[37,101721,101683],{},[1399,101723,101724,101727],{},[1444,101725,101726],{"align":24699},"前进一帧",[1444,101728,101729],{"align":24699},[37,101730,101649],{},[14,101732,101734],{"id":101733},"_2环境与依赖安装","2.环境与依赖安装",[40,101736,101737],{},"Fedora 44 系统依赖:",[29,101739,101741],{"className":24785,"code":101740,"language":24787,"meta":35,"style":35},"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",[37,101742,101743,101755,101768,101781,101791,101801,101820],{"__ignoreMap":35},[51,101744,101745,101747,101749,101751,101753],{"class":53,"line":54},[51,101746,25540],{"class":68},[51,101748,27279],{"class":282},[51,101750,24797],{"class":282},[51,101752,27364],{"class":175},[51,101754,25642],{"class":175},[51,101756,101757,101760,101763,101766],{"class":53,"line":61},[51,101758,101759],{"class":282},"  python3",[51,101761,101762],{"class":282}," python3-pip",[51,101764,101765],{"class":282}," python3-virtualenv",[51,101767,25642],{"class":175},[51,101769,101770,101773,101776,101779],{"class":53,"line":93},[51,101771,101772],{"class":282},"  mesa-libGL",[51,101774,101775],{"class":282}," mesa-libGLU",[51,101777,101778],{"class":282}," mesa-dri-drivers",[51,101780,25642],{"class":175},[51,101782,101783,101786,101789],{"class":53,"line":99},[51,101784,101785],{"class":282},"  libglvnd-glx",[51,101787,101788],{"class":282}," libglvnd-opengl",[51,101790,25642],{"class":175},[51,101792,101793,101796,101799],{"class":53,"line":120},[51,101794,101795],{"class":282},"  glfw",[51,101797,101798],{"class":282}," glfw-devel",[51,101800,25642],{"class":175},[51,101802,101803,101806,101809,101812,101815,101818],{"class":53,"line":129},[51,101804,101805],{"class":282},"  libX11",[51,101807,101808],{"class":282}," libXcursor",[51,101810,101811],{"class":282}," libXi",[51,101813,101814],{"class":282}," libXinerama",[51,101816,101817],{"class":282}," libXrandr",[51,101819,25642],{"class":175},[51,101821,101822,101825,101828],{"class":53,"line":206},[51,101823,101824],{"class":282},"  gcc",[51,101826,101827],{"class":282}," gcc-c++",[51,101829,101830],{"class":282}," make\n",[40,101832,101833],{},"创建 Python 环境:",[29,101835,101837],{"className":24785,"code":101836,"language":24787,"meta":35,"style":35},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[37,101838,101839,101853,101861],{"__ignoreMap":35},[51,101840,101841,101844,101847,101850],{"class":53,"line":54},[51,101842,101843],{"class":68},"python3",[51,101845,101846],{"class":175}," -m",[51,101848,101849],{"class":282}," venv",[51,101851,101852],{"class":282}," .venv\n",[51,101854,101855,101858],{"class":53,"line":61},[51,101856,101857],{"class":175},"source",[51,101859,101860],{"class":282}," .venv\u002Fbin\u002Factivate\n",[51,101862,101863,101865,101867,101870,101872,101875],{"class":53,"line":93},[51,101864,31344],{"class":68},[51,101866,101846],{"class":175},[51,101868,101869],{"class":282}," pip",[51,101871,24797],{"class":282},[51,101873,101874],{"class":175}," --upgrade",[51,101876,101877],{"class":282}," pip\n",[40,101879,101880],{},"pip 安装:",[29,101882,101884],{"className":24785,"code":101883,"language":24787,"meta":35,"style":35},"pip install \"mujoco>=2.3\" numpy\n",[37,101885,101886],{"__ignoreMap":35},[51,101887,101888,101890,101892,101895],{"class":53,"line":54},[51,101889,24794],{"class":68},[51,101891,24797],{"class":282},[51,101893,101894],{"class":282}," \"mujoco>=2.3\"",[51,101896,101897],{"class":282}," numpy\n",[40,101899,101900],{},"安装完成后，先做最小检查：",[29,101902,101904],{"className":24785,"code":101903,"language":24787,"meta":35,"style":35},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[37,101905,101906],{"__ignoreMap":35},[51,101907,101908,101910,101912],{"class":53,"line":54},[51,101909,31344],{"class":68},[51,101911,31322],{"class":175},[51,101913,101914],{"class":282}," \"import mujoco; print(mujoco.__version__)\"\n",[40,101916,101917],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[40,101919,101920],{},"conda 安装:",[29,101922,101924],{"className":24785,"code":101923,"language":24787,"meta":35,"style":35},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[37,101925,101926,101946,101956],{"__ignoreMap":35},[51,101927,101928,101930,101932,101934,101937,101940,101943],{"class":53,"line":54},[51,101929,31294],{"class":68},[51,101931,30140],{"class":282},[51,101933,26079],{"class":175},[51,101935,101936],{"class":282}," mujoco-study",[51,101938,101939],{"class":282}," python=",[51,101941,101942],{"class":175},"3.10",[51,101944,101945],{"class":175}," -y\n",[51,101947,101948,101950,101953],{"class":53,"line":61},[51,101949,31294],{"class":68},[51,101951,101952],{"class":282}," activate",[51,101954,101955],{"class":282}," mujoco-study\n",[51,101957,101958,101960,101962,101964],{"class":53,"line":93},[51,101959,24794],{"class":68},[51,101961,24797],{"class":282},[51,101963,101894],{"class":282},[51,101965,101897],{"class":282},[40,101967,101968],{},"版本冲突说明:",[19,101970,101971,101977,101987,101996],{},[22,101972,101973,101974,29349],{},"不要安装 ",[37,101975,101976],{},"mujoco-py",[22,101978,101979,101980,101982,101983,101986],{},"如果旧项目里同时安装了 ",[37,101981,101976],{}," 和 ",[37,101984,101985],{},"mujoco","，建议新建干净虚拟环境。",[22,101988,101989,101992,101993,29349],{},[37,101990,101991],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[37,101994,101995],{},"~\u002F.mujoco\u002Fmujoco210",[22,101997,101998,101999,83503,102002,102005],{},"离屏渲染可能涉及 OpenGL 后端，",[37,102000,102001],{},"MUJOCO_GL=egl",[37,102003,102004],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102007,102009],{"id":102008},"_3核心概念解释","3.核心概念解释",[40,102011,102012],{},"MuJoCo 的基本执行流程:",[29,102014,102017],{"className":102015,"code":102016,"language":34,"meta":35},[32],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[37,102018,102016],{"__ignoreMap":35},[40,102020,102021,102023],{},[37,102022,101673],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[40,102025,102026,102028,102029,1466,102032,1466,102035,1466,102038,1466,102041,29349],{},[37,102027,101683],{}," 存放仿真运行时状态，例如 ",[37,102030,102031],{},"data.time",[37,102033,102034],{},"data.qpos",[37,102036,102037],{},"data.qvel",[37,102039,102040],{},"data.ctrl",[37,102042,102043],{},"data.xpos",[1233,102045,102047],{"id":102046},"xml-是什么","XML 是什么",[40,102049,102050],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[29,102052,102054],{"className":54031,"code":102053,"language":54033,"meta":35,"style":35},"\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",[37,102055,102056,102078,102109],{"__ignoreMap":35},[51,102057,102058,102060,102062,102064,102066,102068,102071,102073,102076],{"class":53,"line":54},[51,102059,2154],{"class":72},[51,102061,52764],{"class":52264},[51,102063,15882],{"class":68},[51,102065,108],{"class":72},[51,102067,54455],{"class":282},[51,102069,102070],{"class":68}," pos",[51,102072,108],{"class":72},[51,102074,102075],{"class":282},"\"0 0 1\"",[51,102077,52271],{"class":72},[51,102079,102080,102082,102085,102087,102089,102092,102094,102096,102098,102101,102103,102106],{"class":53,"line":61},[51,102081,53108],{"class":72},[51,102083,102084],{"class":52264},"geom",[51,102086,15882],{"class":68},[51,102088,108],{"class":72},[51,102090,102091],{"class":282},"\"box_geom\"",[51,102093,54788],{"class":68},[51,102095,108],{"class":72},[51,102097,54455],{"class":282},[51,102099,102100],{"class":68}," size",[51,102102,108],{"class":72},[51,102104,102105],{"class":282},"\"0.1 0.1 0.1\"",[51,102107,102108],{"class":72},"\u002F>\n",[51,102110,102111,102113,102115],{"class":53,"line":93},[51,102112,52749],{"class":72},[51,102114,52764],{"class":52264},[51,102116,52271],{"class":72},[40,102118,102119],{},"这段意思是：",[19,102121,102122,102128,102135],{},[22,102123,102124,102125,102127],{},"创建一个叫 ",[37,102126,54678],{}," 的刚体。",[22,102129,102130,102131,102134],{},"它初始放在 ",[37,102132,102133],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[22,102136,102137],{},"它里面有一个盒子形状的几何体。",[1233,102139,102141],{"id":102140},"timestep-是什么","timestep 是什么",[40,102143,102144],{},"XML 里的：",[29,102146,102148],{"className":54031,"code":102147,"language":54033,"meta":35,"style":35},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[37,102149,102150],{"__ignoreMap":35},[51,102151,102152,102154,102156,102159,102161,102164,102167,102169,102172],{"class":53,"line":54},[51,102153,2154],{"class":72},[51,102155,70130],{"class":52264},[51,102157,102158],{"class":68}," timestep",[51,102160,108],{"class":72},[51,102162,102163],{"class":282},"\"0.01\"",[51,102165,102166],{"class":68}," gravity",[51,102168,108],{"class":72},[51,102170,102171],{"class":282},"\"0 0 -9.81\"",[51,102173,102108],{"class":72},[40,102175,102176,102177,102180,102181,102183],{},"表示每调用一次 ",[37,102178,102179],{},"mj_step","，仿真时间前进 ",[37,102182,39950],{}," 秒。循环 100 次，大约就是 1 秒：",[29,102185,102188],{"className":102186,"code":102187,"language":34,"meta":35},[32],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[37,102189,102187],{"__ignoreMap":35},[1233,102191,102193],{"id":102192},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[40,102195,102196],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[29,102198,102201],{"className":102199,"code":102200,"language":34,"meta":35},[32],"x y z qw qx qy qz\n",[37,102202,102200],{"__ignoreMap":35},[40,102204,102205,102206,102209,102210,102213],{},"表示一个自由刚体的位置和姿态。其中 ",[37,102207,102208],{},"x y z"," 是位置，",[37,102211,102212],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102215,102217],{"id":102216},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[40,102219,102220],{},"新建文件:",[29,102222,102224],{"className":24785,"code":102223,"language":24787,"meta":35,"style":35},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[37,102225,102226,102236,102243],{"__ignoreMap":35},[51,102227,102228,102231,102233],{"class":53,"line":54},[51,102229,102230],{"class":68},"mkdir",[51,102232,30180],{"class":175},[51,102234,102235],{"class":282}," mujoco_tutorial\n",[51,102237,102238,102241],{"class":53,"line":61},[51,102239,102240],{"class":175},"cd",[51,102242,102235],{"class":282},[51,102244,102245,102248],{"class":53,"line":93},[51,102246,102247],{"class":68},"touch",[51,102249,102250],{"class":282}," ch1_first_sim.py\n",[40,102252,102253],{},"写入:",[29,102255,102257],{"className":31342,"code":102256,"language":31344,"meta":35,"style":35},"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",[37,102258,102259,102266,102270,102274,102284,102289,102294,102298,102303,102308,102312,102317,102322,102327,102332,102337,102342,102346,102350,102354,102367,102381,102391,102395,102407,102419,102431,102443,102455,102459,102476,102481,102485,102496,102507,102511,102515,102529],{"__ignoreMap":35},[51,102260,102261,102263],{"class":53,"line":54},[51,102262,31356],{"class":64},[51,102264,102265],{"class":72}," mujoco\n",[51,102267,102268],{"class":53,"line":61},[51,102269,3480],{"emptyLinePlaceholder":1192},[51,102271,102272],{"class":53,"line":93},[51,102273,3480],{"emptyLinePlaceholder":1192},[51,102275,102276,102279,102281],{"class":53,"line":99},[51,102277,102278],{"class":175},"XML",[51,102280,14526],{"class":64},[51,102282,102283],{"class":282}," \"\"\"\n",[51,102285,102286],{"class":53,"line":120},[51,102287,102288],{"class":282},"\u003Cmujoco model=\"first_sim\">\n",[51,102290,102291],{"class":53,"line":129},[51,102292,102293],{"class":282},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[51,102295,102296],{"class":53,"line":206},[51,102297,3480],{"emptyLinePlaceholder":1192},[51,102299,102300],{"class":53,"line":212},[51,102301,102302],{"class":282},"  \u003Cworldbody>\n",[51,102304,102305],{"class":53,"line":227},[51,102306,102307],{"class":282},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[51,102309,102310],{"class":53,"line":370},[51,102311,3480],{"emptyLinePlaceholder":1192},[51,102313,102314],{"class":53,"line":387},[51,102315,102316],{"class":282},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[51,102318,102319],{"class":53,"line":404},[51,102320,102321],{"class":282},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[51,102323,102324],{"class":53,"line":415},[51,102325,102326],{"class":282},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[51,102328,102329],{"class":53,"line":420},[51,102330,102331],{"class":282},"    \u003C\u002Fbody>\n",[51,102333,102334],{"class":53,"line":429},[51,102335,102336],{"class":282},"  \u003C\u002Fworldbody>\n",[51,102338,102339],{"class":53,"line":434},[51,102340,102341],{"class":282},"\u003C\u002Fmujoco>\n",[51,102343,102344],{"class":53,"line":448},[51,102345,96662],{"class":282},[51,102347,102348],{"class":53,"line":462},[51,102349,3480],{"emptyLinePlaceholder":1192},[51,102351,102352],{"class":53,"line":470},[51,102353,3480],{"emptyLinePlaceholder":1192},[51,102355,102356,102358,102360,102363,102365],{"class":53,"line":2783},[51,102357,32911],{"class":64},[51,102359,151],{"class":68},[51,102361,102362],{"class":72},"() -> ",[51,102364,96650],{"class":175},[51,102366,4816],{"class":72},[51,102368,102369,102372,102374,102377,102379],{"class":53,"line":2788},[51,102370,102371],{"class":72},"    model ",[51,102373,108],{"class":64},[51,102375,102376],{"class":72}," mujoco.MjModel.from_xml_string(",[51,102378,102278],{"class":175},[51,102380,90],{"class":72},[51,102382,102383,102386,102388],{"class":53,"line":2817},[51,102384,102385],{"class":72},"    data ",[51,102387,108],{"class":64},[51,102389,102390],{"class":72}," mujoco.MjData(model)\n",[51,102392,102393],{"class":53,"line":2822},[51,102394,3480],{"emptyLinePlaceholder":1192},[51,102396,102397,102399,102401,102404],{"class":53,"line":2839},[51,102398,32263],{"class":175},[51,102400,73],{"class":72},[51,102402,102403],{"class":282},"\"nq:\"",[51,102405,102406],{"class":72},", model.nq)\n",[51,102408,102409,102411,102413,102416],{"class":53,"line":2844},[51,102410,32263],{"class":175},[51,102412,73],{"class":72},[51,102414,102415],{"class":282},"\"nv:\"",[51,102417,102418],{"class":72},", model.nv)\n",[51,102420,102421,102423,102425,102428],{"class":53,"line":2849},[51,102422,32263],{"class":175},[51,102424,73],{"class":72},[51,102426,102427],{"class":282},"\"nu:\"",[51,102429,102430],{"class":72},", model.nu)\n",[51,102432,102433,102435,102437,102440],{"class":53,"line":2854},[51,102434,32263],{"class":175},[51,102436,73],{"class":72},[51,102438,102439],{"class":282},"\"initial time:\"",[51,102441,102442],{"class":72},", data.time)\n",[51,102444,102445,102447,102449,102452],{"class":53,"line":2868},[51,102446,32263],{"class":175},[51,102448,73],{"class":72},[51,102450,102451],{"class":282},"\"initial qpos:\"",[51,102453,102454],{"class":72},", data.qpos.copy())\n",[51,102456,102457],{"class":53,"line":2873},[51,102458,3480],{"emptyLinePlaceholder":1192},[51,102460,102461,102463,102466,102468,102470,102472,102474],{"class":53,"line":3657},[51,102462,4278],{"class":64},[51,102464,102465],{"class":72}," _ ",[51,102467,27007],{"class":64},[51,102469,33407],{"class":175},[51,102471,73],{"class":72},[51,102473,612],{"class":175},[51,102475,31750],{"class":72},[51,102477,102478],{"class":53,"line":3671},[51,102479,102480],{"class":72},"        mujoco.mj_step(model, data)\n",[51,102482,102483],{"class":53,"line":3679},[51,102484,3480],{"emptyLinePlaceholder":1192},[51,102486,102487,102489,102491,102494],{"class":53,"line":3684},[51,102488,32263],{"class":175},[51,102490,73],{"class":72},[51,102492,102493],{"class":282},"\"final time:\"",[51,102495,102442],{"class":72},[51,102497,102498,102500,102502,102505],{"class":53,"line":3690},[51,102499,32263],{"class":175},[51,102501,73],{"class":72},[51,102503,102504],{"class":282},"\"final qpos:\"",[51,102506,102454],{"class":72},[51,102508,102509],{"class":53,"line":3696},[51,102510,3480],{"emptyLinePlaceholder":1192},[51,102512,102513],{"class":53,"line":3701},[51,102514,3480],{"emptyLinePlaceholder":1192},[51,102516,102517,102519,102521,102524,102527],{"class":53,"line":8910},[51,102518,2633],{"class":64},[51,102520,32184],{"class":175},[51,102522,102523],{"class":64}," ==",[51,102525,102526],{"class":282}," \"__main__\"",[51,102528,4816],{"class":72},[51,102530,102531],{"class":53,"line":8934},[51,102532,102533],{"class":72},"    main()\n",[1233,102535,102536],{"id":102536},"代码逐段解释",[40,102538,102539],{},"导入库：",[29,102541,102543],{"className":31342,"code":102542,"language":31344,"meta":35,"style":35},"import mujoco\n",[37,102544,102545],{"__ignoreMap":35},[51,102546,102547,102549],{"class":53,"line":54},[51,102548,31356],{"class":64},[51,102550,102265],{"class":72},[40,102552,102553],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[40,102555,102556],{},"定义 XML：",[29,102558,102560],{"className":31342,"code":102559,"language":31344,"meta":35,"style":35},"XML = \"\"\"\n...\n\"\"\"\n",[37,102561,102562,102570,102575],{"__ignoreMap":35},[51,102563,102564,102566,102568],{"class":53,"line":54},[51,102565,102278],{"class":175},[51,102567,14526],{"class":64},[51,102569,102283],{"class":282},[51,102571,102572],{"class":53,"line":61},[51,102573,102574],{"class":282},"...\n",[51,102576,102577],{"class":53,"line":93},[51,102578,96662],{"class":282},[40,102580,102581,102582,102585],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[37,102583,102584],{},"freejoint"," 的方块。",[40,102587,102588],{},"编译模型：",[29,102590,102592],{"className":31342,"code":102591,"language":31344,"meta":35,"style":35},"model = mujoco.MjModel.from_xml_string(XML)\n",[37,102593,102594],{"__ignoreMap":35},[51,102595,102596,102599,102601,102603,102605],{"class":53,"line":54},[51,102597,102598],{"class":72},"model ",[51,102600,108],{"class":64},[51,102602,102376],{"class":72},[51,102604,102278],{"class":175},[51,102606,90],{"class":72},[40,102608,102609],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[40,102611,102612],{},"创建数据：",[29,102614,102616],{"className":31342,"code":102615,"language":31344,"meta":35,"style":35},"data = mujoco.MjData(model)\n",[37,102617,102618],{"__ignoreMap":35},[51,102619,102620,102623,102625],{"class":53,"line":54},[51,102621,102622],{"class":72},"data ",[51,102624,108],{"class":64},[51,102626,102390],{"class":72},[40,102628,102629,102631,102632,102634],{},[37,102630,34365],{}," 会保存仿真当前状态。刚创建时，时间是 ",[37,102633,176],{},"，方块还在初始位置。",[40,102636,102637],{},"推进仿真：",[29,102639,102641],{"className":31342,"code":102640,"language":31344,"meta":35,"style":35},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[37,102642,102643,102659],{"__ignoreMap":35},[51,102644,102645,102647,102649,102651,102653,102655,102657],{"class":53,"line":54},[51,102646,4102],{"class":64},[51,102648,102465],{"class":72},[51,102650,27007],{"class":64},[51,102652,33407],{"class":175},[51,102654,73],{"class":72},[51,102656,612],{"class":175},[51,102658,31750],{"class":72},[51,102660,102661],{"class":53,"line":61},[51,102662,102663],{"class":72},"    mujoco.mj_step(model, data)\n",[40,102665,102666,102667,102669],{},"每次 ",[37,102668,102179],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[1233,102671,102672],{"id":102672},"代码逐行细讲",[40,102674,102675],{},"下面把完整代码按新手视角拆开讲。",[29,102677,102678],{"className":31342,"code":102542,"language":31344,"meta":35,"style":35},[37,102679,102680],{"__ignoreMap":35},[51,102681,102682,102684],{"class":53,"line":54},[51,102683,31356],{"class":64},[51,102685,102265],{"class":72},[40,102687,102688,102690,102691,1466,102693,1466,102695,29349],{},[37,102689,31356],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[37,102692,101639],{},[37,102694,101644],{},[37,102696,102697],{},"mujoco.mj_step",[29,102699,102700],{"className":31342,"code":102559,"language":31344,"meta":35,"style":35},[37,102701,102702,102710,102714],{"__ignoreMap":35},[51,102703,102704,102706,102708],{"class":53,"line":54},[51,102705,102278],{"class":175},[51,102707,14526],{"class":64},[51,102709,102283],{"class":282},[51,102711,102712],{"class":53,"line":61},[51,102713,102574],{"class":282},[51,102715,102716],{"class":53,"line":93},[51,102717,96662],{"class":282},[40,102719,102720,102722,102723,102726],{},[37,102721,102278],{}," 是一个变量名。右边的三引号 ",[37,102724,102725],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[29,102728,102729],{"className":54031,"code":102288,"language":54033,"meta":35,"style":35},[37,102730,102731],{"__ignoreMap":35},[51,102732,102733,102735,102737,102740,102742,102745],{"class":53,"line":54},[51,102734,2154],{"class":72},[51,102736,101985],{"class":52264},[51,102738,102739],{"class":68}," model",[51,102741,108],{"class":72},[51,102743,102744],{"class":282},"\"first_sim\"",[51,102746,52271],{"class":72},[40,102748,102749,102750,102753,102754,29349],{},"这是 XML 的根标签。",[37,102751,102752],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[37,102755,102756],{},"first_sim",[29,102758,102759],{"className":54031,"code":102147,"language":54033,"meta":35,"style":35},[37,102760,102761],{"__ignoreMap":35},[51,102762,102763,102765,102767,102769,102771,102773,102775,102777,102779],{"class":53,"line":54},[51,102764,2154],{"class":72},[51,102766,70130],{"class":52264},[51,102768,102158],{"class":68},[51,102770,108],{"class":72},[51,102772,102163],{"class":282},[51,102774,102166],{"class":68},[51,102776,108],{"class":72},[51,102778,102171],{"class":282},[51,102780,102108],{"class":72},[40,102782,102783,102785,102786,102789,102790,102793],{},[37,102784,70130],{}," 用来设置仿真参数。",[37,102787,102788],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[37,102791,102792],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[29,102795,102797],{"className":54031,"code":102796,"language":54033,"meta":35,"style":35},"\u003Cworldbody>\n",[37,102798,102799],{"__ignoreMap":35},[51,102800,102801,102803,102806],{"class":53,"line":54},[51,102802,2154],{"class":72},[51,102804,102805],{"class":52264},"worldbody",[51,102807,52271],{"class":72},[40,102809,102810,102812],{},[37,102811,102805],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[29,102814,102816],{"className":54031,"code":102815,"language":54033,"meta":35,"style":35},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[37,102817,102818],{"__ignoreMap":35},[51,102819,102820,102822,102824,102826,102828,102831,102833,102835,102838,102840,102842,102845,102847,102849,102852],{"class":53,"line":54},[51,102821,2154],{"class":72},[51,102823,102084],{"class":52264},[51,102825,15882],{"class":68},[51,102827,108],{"class":72},[51,102829,102830],{"class":282},"\"floor\"",[51,102832,54788],{"class":68},[51,102834,108],{"class":72},[51,102836,102837],{"class":282},"\"plane\"",[51,102839,102100],{"class":68},[51,102841,108],{"class":72},[51,102843,102844],{"class":282},"\"2 2 0.1\"",[51,102846,79731],{"class":68},[51,102848,108],{"class":72},[51,102850,102851],{"class":282},"\"0.8 0.8 0.8 1\"",[51,102853,102108],{"class":72},[40,102855,102856,102857,102859,102860,102863,102864,102867,102868,102870],{},"这行创建地面。",[37,102858,102084],{}," 是几何体。",[37,102861,102862],{},"name=\"floor\""," 是名字。",[37,102865,102866],{},"type=\"plane\""," 表示平面。",[37,102869,56074],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[29,102872,102874],{"className":54031,"code":102873,"language":54033,"meta":35,"style":35},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[37,102875,102876],{"__ignoreMap":35},[51,102877,102878,102880,102882,102884,102886,102888,102890,102892,102894],{"class":53,"line":54},[51,102879,2154],{"class":72},[51,102881,52764],{"class":52264},[51,102883,15882],{"class":68},[51,102885,108],{"class":72},[51,102887,54455],{"class":282},[51,102889,102070],{"class":68},[51,102891,108],{"class":72},[51,102893,102075],{"class":282},[51,102895,52271],{"class":72},[40,102897,102898,102899,29349,102901,102904,102905,102907],{},"这行创建一个刚体，名字叫 ",[37,102900,54678],{},[37,102902,102903],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[37,102906,102133],{},"，也就是离地面 1 米高。",[29,102909,102911],{"className":54031,"code":102910,"language":54033,"meta":35,"style":35},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[37,102912,102913],{"__ignoreMap":35},[51,102914,102915,102917,102919,102921,102923,102926],{"class":53,"line":54},[51,102916,2154],{"class":72},[51,102918,102584],{"class":52264},[51,102920,15882],{"class":68},[51,102922,108],{"class":72},[51,102924,102925],{"class":282},"\"box_free\"",[51,102927,102108],{"class":72},[40,102929,102930,102931,102933],{},"这行很重要。",[37,102932,102584],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[29,102935,102937],{"className":54031,"code":102936,"language":54033,"meta":35,"style":35},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[37,102938,102939],{"__ignoreMap":35},[51,102940,102941,102943,102945,102947,102949,102951,102953,102955,102957,102959,102961,102963,102966,102968,102970,102972,102974,102977],{"class":53,"line":54},[51,102942,2154],{"class":72},[51,102944,102084],{"class":52264},[51,102946,15882],{"class":68},[51,102948,108],{"class":72},[51,102950,102091],{"class":282},[51,102952,54788],{"class":68},[51,102954,108],{"class":72},[51,102956,54455],{"class":282},[51,102958,102100],{"class":68},[51,102960,108],{"class":72},[51,102962,102105],{"class":282},[51,102964,102965],{"class":68}," mass",[51,102967,108],{"class":72},[51,102969,4755],{"class":282},[51,102971,79731],{"class":68},[51,102973,108],{"class":72},[51,102975,102976],{"class":282},"\"1 0 0 1\"",[51,102978,102108],{"class":72},[40,102980,102981,102982,102985,102986,102989,102990,102993,102994,102997],{},"这行给 box body 添加一个盒子形状。",[37,102983,102984],{},"type=\"box\""," 表示形状是盒子。",[37,102987,102988],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[37,102991,102992],{},"mass=\"1\""," 表示质量是 1。",[37,102995,102996],{},"rgba=\"1 0 0 1\""," 表示红色。",[29,102999,103001],{"className":31342,"code":103000,"language":31344,"meta":35,"style":35},"def main() -> None:\n",[37,103002,103003],{"__ignoreMap":35},[51,103004,103005,103007,103009,103011,103013],{"class":53,"line":54},[51,103006,32911],{"class":64},[51,103008,151],{"class":68},[51,103010,102362],{"class":72},[51,103012,96650],{"class":175},[51,103014,4816],{"class":72},[40,103016,103017,103019,103020,103023,103024,103027],{},[37,103018,32911],{}," 用来定义函数。这里定义了一个叫 ",[37,103021,103022],{},"main"," 的函数。",[37,103025,103026],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[29,103029,103030],{"className":31342,"code":102591,"language":31344,"meta":35,"style":35},[37,103031,103032],{"__ignoreMap":35},[51,103033,103034,103036,103038,103040,103042],{"class":53,"line":54},[51,103035,102598],{"class":72},[51,103037,108],{"class":64},[51,103039,102376],{"class":72},[51,103041,102278],{"class":175},[51,103043,90],{"class":72},[40,103045,103046,103047,103050],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[37,103048,103049],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[29,103052,103053],{"className":31342,"code":102615,"language":31344,"meta":35,"style":35},[37,103054,103055],{"__ignoreMap":35},[51,103056,103057,103059,103061],{"class":53,"line":54},[51,103058,102622],{"class":72},[51,103060,108],{"class":64},[51,103062,102390],{"class":72},[40,103064,103065,103066,103068,103069,103071],{},"这行创建仿真数据。",[37,103067,34365],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[37,103070,34365],{}," 都会变化。",[29,103073,103075],{"className":31342,"code":103074,"language":31344,"meta":35,"style":35},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[37,103076,103077,103087,103097],{"__ignoreMap":35},[51,103078,103079,103081,103083,103085],{"class":53,"line":54},[51,103080,31379],{"class":175},[51,103082,73],{"class":72},[51,103084,102403],{"class":282},[51,103086,102406],{"class":72},[51,103088,103089,103091,103093,103095],{"class":53,"line":61},[51,103090,31379],{"class":175},[51,103092,73],{"class":72},[51,103094,102415],{"class":282},[51,103096,102418],{"class":72},[51,103098,103099,103101,103103,103105],{"class":53,"line":93},[51,103100,31379],{"class":175},[51,103102,73],{"class":72},[51,103104,102427],{"class":282},[51,103106,102430],{"class":72},[40,103108,103109,103111,103112,103115,103116,103119,103120,103123,103124,103127],{},[37,103110,31379],{}," 用来输出信息。",[37,103113,103114],{},"model.nq"," 是位置变量数量，",[37,103117,103118],{},"model.nv"," 是速度变量数量，",[37,103121,103122],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[37,103125,103126],{},"nu"," 是 0。",[29,103129,103131],{"className":31342,"code":103130,"language":31344,"meta":35,"style":35},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[37,103132,103133,103143],{"__ignoreMap":35},[51,103134,103135,103137,103139,103141],{"class":53,"line":54},[51,103136,31379],{"class":175},[51,103138,73],{"class":72},[51,103140,102439],{"class":282},[51,103142,102442],{"class":72},[51,103144,103145,103147,103149,103151],{"class":53,"line":61},[51,103146,31379],{"class":175},[51,103148,73],{"class":72},[51,103150,102451],{"class":282},[51,103152,102454],{"class":72},[40,103154,103155,103156,103158,103159,103161,103162,103165],{},"这里打印初始时间和初始位置。",[37,103157,102031],{}," 一开始是 0。",[37,103160,102034],{}," 是位置数组。",[37,103163,103164],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[29,103167,103168],{"className":31342,"code":102640,"language":31344,"meta":35,"style":35},[37,103169,103170,103186],{"__ignoreMap":35},[51,103171,103172,103174,103176,103178,103180,103182,103184],{"class":53,"line":54},[51,103173,4102],{"class":64},[51,103175,102465],{"class":72},[51,103177,27007],{"class":64},[51,103179,33407],{"class":175},[51,103181,73],{"class":72},[51,103183,612],{"class":175},[51,103185,31750],{"class":72},[51,103187,103188],{"class":53,"line":61},[51,103189,102663],{"class":72},[40,103191,103192,103194,103195,103198,103199,103201,103202,103204],{},[37,103193,4102],{}," 是循环。",[37,103196,103197],{},"range(100)"," 表示循环 100 次。",[37,103200,2234],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[37,103203,102179],{},"，仿真就前进一步。",[29,103206,103208],{"className":31342,"code":103207,"language":31344,"meta":35,"style":35},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[37,103209,103210,103220],{"__ignoreMap":35},[51,103211,103212,103214,103216,103218],{"class":53,"line":54},[51,103213,31379],{"class":175},[51,103215,73],{"class":72},[51,103217,102493],{"class":282},[51,103219,102442],{"class":72},[51,103221,103222,103224,103226,103228],{"class":53,"line":61},[51,103223,31379],{"class":175},[51,103225,73],{"class":72},[51,103227,102504],{"class":282},[51,103229,102454],{"class":72},[40,103231,103232],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[29,103234,103236],{"className":31342,"code":103235,"language":31344,"meta":35,"style":35},"if __name__ == \"__main__\":\n    main()\n",[37,103237,103238,103250],{"__ignoreMap":35},[51,103239,103240,103242,103244,103246,103248],{"class":53,"line":54},[51,103241,2633],{"class":64},[51,103243,32184],{"class":175},[51,103245,102523],{"class":64},[51,103247,102526],{"class":282},[51,103249,4816],{"class":72},[51,103251,103252],{"class":53,"line":61},[51,103253,102533],{"class":72},[40,103255,103256,103257,103260,103261,29349],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[37,103258,103259],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[37,103262,103259],{},[40,103264,103265],{},"运行:",[29,103267,103269],{"className":24785,"code":103268,"language":24787,"meta":35,"style":35},"python ch1_first_sim.py\n",[37,103270,103271],{"__ignoreMap":35},[51,103272,103273,103275],{"class":53,"line":54},[51,103274,31344],{"class":68},[51,103276,102250],{"class":282},[14,103278,103280],{"id":103279},"_5运行结果说明","5.运行结果说明",[40,103282,103283],{},"你应该看到类似输出:",[29,103285,103288],{"className":103286,"code":103287,"language":34,"meta":35},[32],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[37,103289,103287],{"__ignoreMap":35},[40,103291,103292,103294,103295,103298,103299,29349],{},[37,103293,102584],{}," 有 7 个位置变量: ",[37,103296,103297],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[37,103300,103301],{},"vx vy vz wx wy wz",[40,103303,103304,103305,103308],{},"你还会看到 ",[37,103306,103307],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103310,103312],{"id":103311},"_6验证步骤","6.验证步骤",[40,103314,103315],{},"确认版本:",[29,103317,103318],{"className":24785,"code":101903,"language":24787,"meta":35,"style":35},[37,103319,103320],{"__ignoreMap":35},[51,103321,103322,103324,103326],{"class":53,"line":54},[51,103323,31344],{"class":68},[51,103325,31322],{"class":175},[51,103327,101914],{"class":282},[40,103329,103330],{},"确认导入的是官方 bindings:",[29,103332,103334],{"className":24785,"code":103333,"language":24787,"meta":35,"style":35},"python -c \"import mujoco; print(mujoco)\"\n",[37,103335,103336],{"__ignoreMap":35},[51,103337,103338,103340,103342],{"class":53,"line":54},[51,103339,31344],{"class":68},[51,103341,31322],{"class":175},[51,103343,103344],{"class":282}," \"import mujoco; print(mujoco)\"\n",[40,103346,103347],{},"运行程序:",[29,103349,103350],{"className":24785,"code":103268,"language":24787,"meta":35,"style":35},[37,103351,103352],{"__ignoreMap":35},[51,103353,103354,103356],{"class":53,"line":54},[51,103355,31344],{"class":68},[51,103357,102250],{"class":282},[40,103359,103360,103361,103364,103365,29349],{},"检查 ",[37,103362,103363],{},"final time"," 是否约等于 ",[37,103366,103367],{},"1.0",[40,103369,103370],{},"再做几个小实验：",[19,103372,103373,103383,103391,103404],{},[22,103374,103375,103376,103378,103379,103382],{},"把 ",[37,103377,102903],{}," 改成 ",[37,103380,103381],{},"pos=\"0 0 2\"","，观察初始高度变化。",[22,103384,103375,103385,103378,103387,103390],{},[37,103386,102792],{},[37,103388,103389],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[22,103392,103375,103393,103378,103395,103398,103399,103401,103402,29349],{},[37,103394,102788],{},[37,103396,103397],{},"timestep=\"0.005\"","，观察 100 步后的 ",[37,103400,103363],{}," 是否变成约 ",[37,103403,36293],{},[22,103405,103406,103407,103410],{},"删除 ",[37,103408,103409],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[40,103412,103413],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103415,103417],{"id":103416},"_7常见错误与解决方案","7.常见错误与解决方案",[1233,103419,103421],{"id":103420},"modulenotfounderror-no-module-named-mujoco",[37,103422,103423],{},"ModuleNotFoundError: No module named 'mujoco'",[40,103425,103426],{},"解决:",[29,103428,103430],{"className":24785,"code":103429,"language":24787,"meta":35,"style":35},"pip install \"mujoco>=2.3\"\n",[37,103431,103432],{"__ignoreMap":35},[51,103433,103434,103436,103438],{"class":53,"line":54},[51,103435,24794],{"class":68},[51,103437,24797],{"class":282},[51,103439,103440],{"class":282}," \"mujoco>=2.3\"\n",[1233,103442,103444],{"id":103443},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[40,103446,103447],{},"先安装系统依赖:",[29,103449,103451],{"className":24785,"code":103450,"language":24787,"meta":35,"style":35},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[37,103452,103453],{"__ignoreMap":35},[51,103454,103455,103457,103459,103461,103463,103466,103468,103471,103473,103476,103478],{"class":53,"line":54},[51,103456,25540],{"class":68},[51,103458,27279],{"class":282},[51,103460,24797],{"class":282},[51,103462,27364],{"class":175},[51,103464,103465],{"class":282}," mesa-libGL",[51,103467,101778],{"class":282},[51,103469,103470],{"class":282}," glfw",[51,103472,101798],{"class":282},[51,103474,103475],{"class":282}," libX11",[51,103477,101811],{"class":282},[51,103479,103480],{"class":282}," libXrandr\n",[1233,103482,103484],{"id":103483},"xml-解析失败","XML 解析失败",[40,103486,103487],{},"检查:",[19,103489,103490,103493,103496,103502],{},[22,103491,103492],{},"标签是否闭合",[22,103494,103495],{},"属性是否带引号",[22,103497,103498,103499],{},"根节点是否是 ",[37,103500,103501],{},"\u003Cmujoco>",[22,103503,103504,103506,103507,103510],{},[37,103505,52764],{}," 是否放在 ",[37,103508,103509],{},"\u003Cworldbody>"," 内部",[1233,103512,103514,103516,103517],{"id":103513},"final-time-不是严格等于-10",[37,103515,103363],{}," 不是严格等于 ",[37,103518,103367],{},[40,103520,103521],{},"这通常不是错误。浮点数计算可能得到：",[29,103523,103526],{"className":103524,"code":103525,"language":34,"meta":35},[32],"1.0000000000000007\n",[37,103527,103525],{"__ignoreMap":35},[40,103529,103530,103531,103533],{},"只要接近 ",[37,103532,103367],{}," 就正常。",[1233,103535,103536],{"id":103536},"方块没有掉下来",[40,103538,103539],{},"检查：",[19,103541,103542,103548,103554,103559],{},[22,103543,103544,103545],{},"方块 body 里是否有 ",[37,103546,103547],{},"\u003Cfreejoint\u002F>",[22,103549,103550,103551],{},"重力是否是 ",[37,103552,103553],{},"0 0 -9.81",[22,103555,103556,103557],{},"是否真的调用了 ",[37,103558,101649],{},[22,103560,103561,103562,103564,103565],{},"你看的是否是 ",[37,103563,103307],{},"，不是 ",[37,103566,103567],{},"initial qpos",[14,103569,103571],{"id":103570},"_8本章小结","8.本章小结",[40,103573,103574],{},"本章你已经完成了 MuJoCo 的最小闭环：",[29,103576,103579],{"className":103577,"code":103578,"language":34,"meta":35},[32],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[37,103580,103578],{"__ignoreMap":35},[40,103582,103583],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1179,103585,103586],{},"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":35,"searchDepth":61,"depth":61,"links":103588},[103589,103590,103591,103596,103600,103601,103602,103610],{"id":101610,"depth":61,"text":101611},{"id":101733,"depth":61,"text":101734},{"id":102008,"depth":61,"text":102009,"children":103592},[103593,103594,103595],{"id":102046,"depth":93,"text":102047},{"id":102140,"depth":93,"text":102141},{"id":102192,"depth":93,"text":102193},{"id":102216,"depth":61,"text":102217,"children":103597},[103598,103599],{"id":102536,"depth":93,"text":102536},{"id":102672,"depth":93,"text":102672},{"id":103279,"depth":61,"text":103280},{"id":103311,"depth":61,"text":103312},{"id":103416,"depth":61,"text":103417,"children":103603},[103604,103605,103606,103607,103609],{"id":103420,"depth":93,"text":103423},{"id":103443,"depth":93,"text":103444},{"id":103483,"depth":93,"text":103484},{"id":103513,"depth":93,"text":103608},"final time 不是严格等于 1.0",{"id":103536,"depth":93,"text":103536},{"id":103570,"depth":61,"text":103571},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101602,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103617,"title":103618,"body":103619,"description":35,"extension":1190,"meta":105275,"navigation":1192,"path":105276,"seo":105277,"stem":105278,"__hash__":105279},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103620,"toc":105251},[103621,103624,103626,103629,103632,103649,103744,103747,103753,103755,103757,103781,103784,103798,103801,103842,103844,103857,103859,103862,103910,103922,103925,103928,103934,103947,104014,104017,104036,104039,104042,104048,104050,104059,104062,104066,104075,104157,104166,104170,104176,104190,104200,104202,104532,104535,104547,104549,104560,104562,104565,104583,104586,104589,104607,104618,104621,104636,104646,104648,104669,104686,104706,104712,104752,104768,104784,104790,104793,104817,104833,104838,104868,104885,104910,104913,104928,104937,104952,104961,104976,104983,104985,104995,105008,105015,105018,105057,105064,105066,105118,105120,105126,105129,105136,105143,105146,105148,105166,105169,105172,105206,105218,105220,105223,105245,105248],[10,103622,103618],{"id":103623},"_2xml-与-mjcf-物理建模基础",[14,103625,101611],{"id":101610},[40,103627,103628],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[40,103630,103631],{},"本章结束后，你应该能看懂一个简单模型里：",[19,103633,103634,103637,103640,103643,103646],{},[22,103635,103636],{},"地面在哪里。",[22,103638,103639],{},"物体初始位置在哪里。",[22,103641,103642],{},"几何体是什么形状。",[22,103644,103645],{},"哪些 body 可以自由运动。",[22,103647,103648],{},"如何用名字在 Python 里找到 XML 中的对象。",[1393,103650,103651,103661],{},[1396,103652,103653],{},[1399,103654,103655,103658],{},[1402,103656,103657],{"align":24699},"标签",[1402,103659,103660],{"align":24699},"作用",[1439,103662,103663,103672,103682,103691,103701,103711,103724,103734],{},[1399,103664,103665,103669],{},[1444,103666,103667],{"align":24699},[37,103668,103501],{},[1444,103670,103671],{"align":24699},"根节点",[1399,103673,103674,103679],{},[1444,103675,103676],{"align":24699},[37,103677,103678],{},"\u003Coption>",[1444,103680,103681],{"align":24699},"仿真参数",[1399,103683,103684,103688],{},[1444,103685,103686],{"align":24699},[37,103687,103509],{},[1444,103689,103690],{"align":24699},"世界中的物体",[1399,103692,103693,103698],{},[1444,103694,103695],{"align":24699},[37,103696,103697],{},"\u003Cbody>",[1444,103699,103700],{"align":24699},"刚体",[1399,103702,103703,103708],{},[1444,103704,103705],{"align":24699},[37,103706,103707],{},"\u003Cgeom>",[1444,103709,103710],{"align":24699},"几何体、碰撞体、可视体",[1399,103712,103713,103721],{},[1444,103714,103715,25942,103718],{"align":24699},[37,103716,103717],{},"\u003Cjoint>",[37,103719,103720],{},"\u003Cfreejoint>",[1444,103722,103723],{"align":24699},"关节",[1399,103725,103726,103731],{},[1444,103727,103728],{"align":24699},[37,103729,103730],{},"\u003Csite>",[1444,103732,103733],{"align":24699},"标记点",[1399,103735,103736,103741],{},[1444,103737,103738],{"align":24699},[37,103739,103740],{},"\u003Cactuator>",[1444,103742,103743],{"align":24699},"控制器",[40,103745,103746],{},"初学时可以先记住：",[29,103748,103751],{"className":103749,"code":103750,"language":34,"meta":35},[32],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[37,103752,103750],{"__ignoreMap":35},[14,103754,101734],{"id":101733},[40,103756,101737],{},[29,103758,103760],{"className":24785,"code":103759,"language":24787,"meta":35,"style":35},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[37,103761,103762],{"__ignoreMap":35},[51,103763,103764,103766,103768,103770,103772,103774,103776,103778],{"class":53,"line":54},[51,103765,25540],{"class":68},[51,103767,27279],{"class":282},[51,103769,24797],{"class":282},[51,103771,27364],{"class":175},[51,103773,103465],{"class":282},[51,103775,101778],{"class":282},[51,103777,103470],{"class":282},[51,103779,103780],{"class":282}," glfw-devel\n",[40,103782,103783],{},"pip:",[29,103785,103786],{"className":24785,"code":101883,"language":24787,"meta":35,"style":35},[37,103787,103788],{"__ignoreMap":35},[51,103789,103790,103792,103794,103796],{"class":53,"line":54},[51,103791,24794],{"class":68},[51,103793,24797],{"class":282},[51,103795,101894],{"class":282},[51,103797,101897],{"class":282},[40,103799,103800],{},"conda:",[29,103802,103804],{"className":24785,"code":103803,"language":24787,"meta":35,"style":35},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[37,103805,103806,103823,103832],{"__ignoreMap":35},[51,103807,103808,103810,103812,103814,103817,103819,103821],{"class":53,"line":54},[51,103809,31294],{"class":68},[51,103811,30140],{"class":282},[51,103813,26079],{"class":175},[51,103815,103816],{"class":282}," mujoco-xml",[51,103818,101939],{"class":282},[51,103820,101942],{"class":175},[51,103822,101945],{"class":175},[51,103824,103825,103827,103829],{"class":53,"line":61},[51,103826,31294],{"class":68},[51,103828,101952],{"class":282},[51,103830,103831],{"class":282}," mujoco-xml\n",[51,103833,103834,103836,103838,103840],{"class":53,"line":93},[51,103835,24794],{"class":68},[51,103837,24797],{"class":282},[51,103839,101894],{"class":282},[51,103841,101897],{"class":282},[40,103843,101968],{},[19,103845,103846,103849,103854],{},[22,103847,103848],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[22,103850,103851,103852,29349],{},"本章使用基础标签，适用于 ",[37,103853,101991],{},[22,103855,103856],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103858,102009],{"id":102008},[40,103860,103861],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[29,103863,103865],{"className":54031,"code":103864,"language":54033,"meta":35,"style":35},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[37,103866,103867,103881,103889,103894,103902],{"__ignoreMap":35},[51,103868,103869,103871,103873,103875,103877,103879],{"class":53,"line":54},[51,103870,2154],{"class":72},[51,103872,101985],{"class":52264},[51,103874,102739],{"class":68},[51,103876,108],{"class":72},[51,103878,63643],{"class":282},[51,103880,52271],{"class":72},[51,103882,103883,103885,103887],{"class":53,"line":61},[51,103884,53108],{"class":72},[51,103886,102805],{"class":52264},[51,103888,52271],{"class":72},[51,103890,103891],{"class":53,"line":93},[51,103892,103893],{"class":72},"    ...\n",[51,103895,103896,103898,103900],{"class":53,"line":99},[51,103897,53381],{"class":72},[51,103899,102805],{"class":52264},[51,103901,52271],{"class":72},[51,103903,103904,103906,103908],{"class":53,"line":120},[51,103905,52749],{"class":72},[51,103907,101985],{"class":52264},[51,103909,52271],{"class":72},[40,103911,103912,103914,103915,103917,103918,103921],{},[37,103913,52764],{}," 表示刚体。",[37,103916,102084],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[37,103919,103920],{},"joint"," 表示刚体相对父刚体如何运动。",[1233,103923,103924],{"id":103924},"层级结构非常重要",[40,103926,103927],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[29,103929,103932],{"className":103930,"code":103931,"language":34,"meta":35},[32],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[37,103933,103931],{"__ignoreMap":35},[40,103935,103936,101982,103939,103942,103943,103946],{},[37,103937,103938],{},"red_box_geom",[37,103940,103941],{},"box_center"," 都属于 ",[37,103944,103945],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[29,103948,103950],{"className":54031,"code":103949,"language":54033,"meta":35,"style":35},"\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",[37,103951,103952,103972,103986,104006],{"__ignoreMap":35},[51,103953,103954,103956,103958,103960,103962,103964,103966,103968,103970],{"class":53,"line":54},[51,103955,2154],{"class":72},[51,103957,52764],{"class":52264},[51,103959,15882],{"class":68},[51,103961,108],{"class":72},[51,103963,54455],{"class":282},[51,103965,102070],{"class":68},[51,103967,108],{"class":72},[51,103969,102075],{"class":282},[51,103971,52271],{"class":72},[51,103973,103974,103976,103978,103980,103982,103984],{"class":53,"line":61},[51,103975,53108],{"class":72},[51,103977,102584],{"class":52264},[51,103979,15882],{"class":68},[51,103981,108],{"class":72},[51,103983,102925],{"class":282},[51,103985,102108],{"class":72},[51,103987,103988,103990,103992,103994,103996,103998,104000,104002,104004],{"class":53,"line":93},[51,103989,53108],{"class":72},[51,103991,102084],{"class":52264},[51,103993,54788],{"class":68},[51,103995,108],{"class":72},[51,103997,54455],{"class":282},[51,103999,102100],{"class":68},[51,104001,108],{"class":72},[51,104003,102105],{"class":282},[51,104005,102108],{"class":72},[51,104007,104008,104010,104012],{"class":53,"line":99},[51,104009,52749],{"class":72},[51,104011,52764],{"class":52264},[51,104013,52271],{"class":72},[40,104015,104016],{},"含义:",[19,104018,104019,104025,104030,104033],{},[22,104020,104021,104022,104024],{},"创建名为 ",[37,104023,54678],{}," 的刚体",[22,104026,104027,104028],{},"初始位置在世界坐标 ",[37,104029,102133],{},[22,104031,104032],{},"它有一个自由关节",[22,104034,104035],{},"它有一个盒子几何体",[1233,104037,104038],{"id":104038},"坐标怎么理解",[40,104040,104041],{},"MuJoCo 默认使用三维坐标：",[29,104043,104046],{"className":104044,"code":104045,"language":34,"meta":35},[32],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[37,104047,104045],{"__ignoreMap":35},[40,104049,15595],{},[29,104051,104053],{"className":54031,"code":104052,"language":54033,"meta":35,"style":35},"pos=\"0 0 1\"\n",[37,104054,104055],{"__ignoreMap":35},[51,104056,104057],{"class":53,"line":54},[51,104058,104052],{"class":72},[40,104060,104061],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[1233,104063,104065],{"id":104064},"geom-的-size-怎么理解","geom 的 size 怎么理解",[40,104067,104068,104069,83494,104072,104074],{},"不同 ",[37,104070,104071],{},"type",[37,104073,32460],{}," 含义不同：",[1393,104076,104077,104092],{},[1396,104078,104079],{},[1399,104080,104081,104085,104090],{},[1402,104082,104083],{"align":24699},[37,104084,104071],{},[1402,104086,104087,104089],{"align":24699},[37,104088,32460],{}," 示例",[1402,104091,101664],{"align":24699},[1439,104093,104094,104108,104123,104142],{},[1399,104095,104096,104100,104105],{},[1444,104097,104098],{"align":24699},[37,104099,54678],{},[1444,104101,104102],{"align":24699},[37,104103,104104],{},"size=\"0.1 0.2 0.3\"",[1444,104106,104107],{"align":24699},"x\u002Fy\u002Fz 半边长，不是完整长度",[1399,104109,104110,104115,104120],{},[1444,104111,104112],{"align":24699},[37,104113,104114],{},"sphere",[1444,104116,104117],{"align":24699},[37,104118,104119],{},"size=\"0.1\"",[1444,104121,104122],{"align":24699},"球半径",[1399,104124,104125,104130,104135],{},[1444,104126,104127],{"align":24699},[37,104128,104129],{},"capsule",[1444,104131,104132],{"align":24699},[37,104133,104134],{},"size=\"0.03\"",[1444,104136,104137,104138,104141],{"align":24699},"胶囊半径，长度常用 ",[37,104139,104140],{},"fromto"," 指定",[1399,104143,104144,104149,104154],{},[1444,104145,104146],{"align":24699},[37,104147,104148],{},"plane",[1444,104150,104151],{"align":24699},[37,104152,104153],{},"size=\"3 3 0.1\"",[1444,104155,104156],{"align":24699},"可视平面大小，通常当地面",[40,104158,104159,104160,104162,104163,104165],{},"最容易踩坑的是 box：",[37,104161,102988],{}," 表示边长大约是 ",[37,104164,33001],{},"，因为 MuJoCo 用的是半边长。",[1233,104167,104169],{"id":104168},"site-是什么","site 是什么",[40,104171,104172,104175],{},[37,104173,104174],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[19,104177,104178,104181,104184,104187],{},[22,104179,104180],{},"标记机械臂末端。",[22,104182,104183],{},"标记目标位置。",[22,104185,104186],{},"放传感器或相机参考点。",[22,104188,104189],{},"在 Python 中读取某个关键点的世界坐标。",[40,104191,104192,104193,101982,104196,104199],{},"在后面的 Reacher 任务中，",[37,104194,104195],{},"tip",[37,104197,104198],{},"target"," 就会用 site 表示。",[14,104201,102217],{"id":102216},[29,104203,104205],{"className":31342,"code":104204,"language":31344,"meta":35,"style":35},"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",[37,104206,104207,104213,104223,104227,104231,104239,104244,104248,104252,104256,104261,104265,104270,104275,104280,104285,104289,104293,104297,104301,104305,104309,104321,104333,104341,104345,104360,104375,104379,104392,104407,104420,104433,104437,104453,104457,104461,104472,104484,104496,104508,104512,104516,104528],{"__ignoreMap":35},[51,104208,104209,104211],{"class":53,"line":54},[51,104210,31356],{"class":64},[51,104212,102265],{"class":72},[51,104214,104215,104217,104219,104221],{"class":53,"line":61},[51,104216,31356],{"class":64},[51,104218,32344],{"class":72},[51,104220,32347],{"class":64},[51,104222,32350],{"class":72},[51,104224,104225],{"class":53,"line":93},[51,104226,3480],{"emptyLinePlaceholder":1192},[51,104228,104229],{"class":53,"line":99},[51,104230,3480],{"emptyLinePlaceholder":1192},[51,104232,104233,104235,104237],{"class":53,"line":120},[51,104234,102278],{"class":175},[51,104236,14526],{"class":64},[51,104238,102283],{"class":282},[51,104240,104241],{"class":53,"line":129},[51,104242,104243],{"class":282},"\u003Cmujoco model=\"xml_basic\">\n",[51,104245,104246],{"class":53,"line":206},[51,104247,102293],{"class":282},[51,104249,104250],{"class":53,"line":212},[51,104251,3480],{"emptyLinePlaceholder":1192},[51,104253,104254],{"class":53,"line":227},[51,104255,102302],{"class":282},[51,104257,104258],{"class":53,"line":370},[51,104259,104260],{"class":282},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[51,104262,104263],{"class":53,"line":387},[51,104264,3480],{"emptyLinePlaceholder":1192},[51,104266,104267],{"class":53,"line":404},[51,104268,104269],{"class":282},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[51,104271,104272],{"class":53,"line":415},[51,104273,104274],{"class":282},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[51,104276,104277],{"class":53,"line":420},[51,104278,104279],{"class":282},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[51,104281,104282],{"class":53,"line":429},[51,104283,104284],{"class":282},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[51,104286,104287],{"class":53,"line":434},[51,104288,102331],{"class":282},[51,104290,104291],{"class":53,"line":448},[51,104292,102336],{"class":282},[51,104294,104295],{"class":53,"line":462},[51,104296,102341],{"class":282},[51,104298,104299],{"class":53,"line":470},[51,104300,96662],{"class":282},[51,104302,104303],{"class":53,"line":2783},[51,104304,3480],{"emptyLinePlaceholder":1192},[51,104306,104307],{"class":53,"line":2788},[51,104308,3480],{"emptyLinePlaceholder":1192},[51,104310,104311,104313,104315,104317,104319],{"class":53,"line":2817},[51,104312,32911],{"class":64},[51,104314,151],{"class":68},[51,104316,102362],{"class":72},[51,104318,96650],{"class":175},[51,104320,4816],{"class":72},[51,104322,104323,104325,104327,104329,104331],{"class":53,"line":2822},[51,104324,102371],{"class":72},[51,104326,108],{"class":64},[51,104328,102376],{"class":72},[51,104330,102278],{"class":175},[51,104332,90],{"class":72},[51,104334,104335,104337,104339],{"class":53,"line":2839},[51,104336,102385],{"class":72},[51,104338,108],{"class":64},[51,104340,102390],{"class":72},[51,104342,104343],{"class":53,"line":2844},[51,104344,3480],{"emptyLinePlaceholder":1192},[51,104346,104347,104350,104352,104355,104358],{"class":53,"line":2849},[51,104348,104349],{"class":72},"    box_body_id ",[51,104351,108],{"class":64},[51,104353,104354],{"class":72}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[51,104356,104357],{"class":282},"\"red_box\"",[51,104359,90],{"class":72},[51,104361,104362,104365,104367,104370,104373],{"class":53,"line":2854},[51,104363,104364],{"class":72},"    site_id ",[51,104366,108],{"class":64},[51,104368,104369],{"class":72}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[51,104371,104372],{"class":282},"\"box_center\"",[51,104374,90],{"class":72},[51,104376,104377],{"class":53,"line":2868},[51,104378,3480],{"emptyLinePlaceholder":1192},[51,104380,104381,104383,104386,104388,104390],{"class":53,"line":2873},[51,104382,4178],{"class":64},[51,104384,104385],{"class":72}," box_body_id ",[51,104387,2154],{"class":64},[51,104389,5169],{"class":175},[51,104391,4816],{"class":72},[51,104393,104394,104397,104400,104402,104405],{"class":53,"line":3657},[51,104395,104396],{"class":64},"        raise",[51,104398,104399],{"class":175}," RuntimeError",[51,104401,73],{"class":72},[51,104403,104404],{"class":282},"\"body red_box not found\"",[51,104406,90],{"class":72},[51,104408,104409,104411,104414,104416,104418],{"class":53,"line":3671},[51,104410,4178],{"class":64},[51,104412,104413],{"class":72}," site_id ",[51,104415,2154],{"class":64},[51,104417,5169],{"class":175},[51,104419,4816],{"class":72},[51,104421,104422,104424,104426,104428,104431],{"class":53,"line":3679},[51,104423,104396],{"class":64},[51,104425,104399],{"class":175},[51,104427,73],{"class":72},[51,104429,104430],{"class":282},"\"site box_center not found\"",[51,104432,90],{"class":72},[51,104434,104435],{"class":53,"line":3684},[51,104436,3480],{"emptyLinePlaceholder":1192},[51,104438,104439,104441,104443,104445,104447,104449,104451],{"class":53,"line":3690},[51,104440,4278],{"class":64},[51,104442,102465],{"class":72},[51,104444,27007],{"class":64},[51,104446,33407],{"class":175},[51,104448,73],{"class":72},[51,104450,2812],{"class":175},[51,104452,31750],{"class":72},[51,104454,104455],{"class":53,"line":3696},[51,104456,102480],{"class":72},[51,104458,104459],{"class":53,"line":3701},[51,104460,3480],{"emptyLinePlaceholder":1192},[51,104462,104463,104465,104467,104470],{"class":53,"line":8910},[51,104464,32263],{"class":175},[51,104466,73],{"class":72},[51,104468,104469],{"class":282},"\"simulation time:\"",[51,104471,102442],{"class":72},[51,104473,104474,104476,104478,104481],{"class":53,"line":8934},[51,104475,32263],{"class":175},[51,104477,73],{"class":72},[51,104479,104480],{"class":282},"\"box body position:\"",[51,104482,104483],{"class":72},", data.xpos[box_body_id].copy())\n",[51,104485,104486,104488,104490,104493],{"class":53,"line":8939},[51,104487,32263],{"class":175},[51,104489,73],{"class":72},[51,104491,104492],{"class":282},"\"site position:\"",[51,104494,104495],{"class":72},", data.site_xpos[site_id].copy())\n",[51,104497,104498,104500,104502,104505],{"class":53,"line":8945},[51,104499,32263],{"class":175},[51,104501,73],{"class":72},[51,104503,104504],{"class":282},"\"box qpos:\"",[51,104506,104507],{"class":72},", np.array(data.qpos))\n",[51,104509,104510],{"class":53,"line":8972},[51,104511,3480],{"emptyLinePlaceholder":1192},[51,104513,104514],{"class":53,"line":8977},[51,104515,3480],{"emptyLinePlaceholder":1192},[51,104517,104518,104520,104522,104524,104526],{"class":53,"line":8983},[51,104519,2633],{"class":64},[51,104521,32184],{"class":175},[51,104523,102523],{"class":64},[51,104525,102526],{"class":282},[51,104527,4816],{"class":72},[51,104529,104530],{"class":53,"line":8995},[51,104531,102533],{"class":72},[40,104533,104534],{},"保存为：",[29,104536,104538],{"className":24785,"code":104537,"language":24787,"meta":35,"style":35},"touch ch2_xml_basic.py\n",[37,104539,104540],{"__ignoreMap":35},[51,104541,104542,104544],{"class":53,"line":54},[51,104543,102247],{"class":68},[51,104545,104546],{"class":282}," ch2_xml_basic.py\n",[40,104548,103265],{},[29,104550,104552],{"className":24785,"code":104551,"language":24787,"meta":35,"style":35},"python ch2_xml_basic.py\n",[37,104553,104554],{"__ignoreMap":35},[51,104555,104556,104558],{"class":53,"line":54},[51,104557,31344],{"class":68},[51,104559,104546],{"class":282},[1233,104561,102536],{"id":102536},[40,104563,104564],{},"用名字查找 body：",[29,104566,104568],{"className":31342,"code":104567,"language":31344,"meta":35,"style":35},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[37,104569,104570],{"__ignoreMap":35},[51,104571,104572,104575,104577,104579,104581],{"class":53,"line":54},[51,104573,104574],{"class":72},"box_body_id ",[51,104576,108],{"class":64},[51,104578,104354],{"class":72},[51,104580,104357],{"class":282},[51,104582,90],{"class":72},[40,104584,104585],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[40,104587,104588],{},"用名字查找 site：",[29,104590,104592],{"className":31342,"code":104591,"language":31344,"meta":35,"style":35},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[37,104593,104594],{"__ignoreMap":35},[51,104595,104596,104599,104601,104603,104605],{"class":53,"line":54},[51,104597,104598],{"class":72},"site_id ",[51,104600,108],{"class":64},[51,104602,104369],{"class":72},[51,104604,104372],{"class":282},[51,104606,90],{"class":72},[40,104608,104609,104610,104613,104614,104617],{},"注意第二个参数是对象类型。查 body 就用 ",[37,104611,104612],{},"mjOBJ_BODY","，查 site 就用 ",[37,104615,104616],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[40,104619,104620],{},"读取世界坐标：",[29,104622,104624],{"className":31342,"code":104623,"language":31344,"meta":35,"style":35},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[37,104625,104626,104631],{"__ignoreMap":35},[51,104627,104628],{"class":53,"line":54},[51,104629,104630],{"class":72},"data.xpos[box_body_id]\n",[51,104632,104633],{"class":53,"line":61},[51,104634,104635],{"class":72},"data.site_xpos[site_id]\n",[40,104637,104638,104641,104642,104645],{},[37,104639,104640],{},"xpos"," 是 body 的世界坐标，",[37,104643,104644],{},"site_xpos"," 是 site 的世界坐标。",[1233,104647,102672],{"id":102672},[29,104649,104651],{"className":31342,"code":104650,"language":31344,"meta":35,"style":35},"import mujoco\nimport numpy as np\n",[37,104652,104653,104659],{"__ignoreMap":35},[51,104654,104655,104657],{"class":53,"line":54},[51,104656,31356],{"class":64},[51,104658,102265],{"class":72},[51,104660,104661,104663,104665,104667],{"class":53,"line":61},[51,104662,31356],{"class":64},[51,104664,32344],{"class":72},[51,104666,32347],{"class":64},[51,104668,32350],{"class":72},[40,104670,104671,104672,104675,104676,104679,104680,1466,104683,29349],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[37,104673,104674],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[37,104677,104678],{},"as np"," 是习惯写法，后面就可以写 ",[37,104681,104682],{},"np.array(...)",[37,104684,104685],{},"np.round(...)",[29,104687,104688],{"className":31342,"code":102559,"language":31344,"meta":35,"style":35},[37,104689,104690,104698,104702],{"__ignoreMap":35},[51,104691,104692,104694,104696],{"class":53,"line":54},[51,104693,102278],{"class":175},[51,104695,14526],{"class":64},[51,104697,102283],{"class":282},[51,104699,104700],{"class":53,"line":61},[51,104701,102574],{"class":282},[51,104703,104704],{"class":53,"line":93},[51,104705,96662],{"class":282},[40,104707,104708,104709,29349],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[37,104710,104711],{},"mujoco.MjModel.from_xml_string(XML)",[29,104713,104715],{"className":54031,"code":104714,"language":54033,"meta":35,"style":35},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[37,104716,104717],{"__ignoreMap":35},[51,104718,104719,104721,104723,104725,104727,104729,104731,104733,104736,104738,104740,104743,104745,104747,104750],{"class":53,"line":54},[51,104720,2154],{"class":72},[51,104722,104174],{"class":52264},[51,104724,15882],{"class":68},[51,104726,108],{"class":72},[51,104728,104372],{"class":282},[51,104730,102070],{"class":68},[51,104732,108],{"class":72},[51,104734,104735],{"class":282},"\"0 0 0\"",[51,104737,102100],{"class":68},[51,104739,108],{"class":72},[51,104741,104742],{"class":282},"\"0.03\"",[51,104744,79731],{"class":68},[51,104746,108],{"class":72},[51,104748,104749],{"class":282},"\"0 1 0 1\"",[51,104751,102108],{"class":72},[40,104753,104754,104756,104757,104760,104761,104763,104764,104767],{},[37,104755,104174],{}," 是标记点。",[37,104758,104759],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[37,104762,104134],{}," 表示显示出来的小球大小。",[37,104765,104766],{},"rgba=\"0 1 0 1\""," 表示绿色。",[29,104769,104770],{"className":31342,"code":104567,"language":31344,"meta":35,"style":35},[37,104771,104772],{"__ignoreMap":35},[51,104773,104774,104776,104778,104780,104782],{"class":53,"line":54},[51,104775,104574],{"class":72},[51,104777,108],{"class":64},[51,104779,104354],{"class":72},[51,104781,104357],{"class":282},[51,104783,90],{"class":72},[40,104785,104786,104787,104789],{},"这行的作用是：根据名字 ",[37,104788,104357],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[40,104791,104792],{},"拆开看：",[19,104794,104795,104801,104806,104812],{},[22,104796,104797,104800],{},[37,104798,104799],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[22,104802,104803,104805],{},[37,104804,103049],{}," 是被查询的模型。",[22,104807,104808,104811],{},[37,104809,104810],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[22,104813,104814,104816],{},[37,104815,104357],{}," 是 XML 里写的名字。",[29,104818,104819],{"className":31342,"code":104591,"language":31344,"meta":35,"style":35},[37,104820,104821],{"__ignoreMap":35},[51,104822,104823,104825,104827,104829,104831],{"class":53,"line":54},[51,104824,104598],{"class":72},[51,104826,108],{"class":64},[51,104828,104369],{"class":72},[51,104830,104372],{"class":282},[51,104832,90],{"class":72},[40,104834,104835,104836,29349],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[37,104837,104372],{},[29,104839,104841],{"className":31342,"code":104840,"language":31344,"meta":35,"style":35},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[37,104842,104843,104855],{"__ignoreMap":35},[51,104844,104845,104847,104849,104851,104853],{"class":53,"line":54},[51,104846,2633],{"class":64},[51,104848,104385],{"class":72},[51,104850,2154],{"class":64},[51,104852,5169],{"class":175},[51,104854,4816],{"class":72},[51,104856,104857,104860,104862,104864,104866],{"class":53,"line":61},[51,104858,104859],{"class":64},"    raise",[51,104861,104399],{"class":175},[51,104863,73],{"class":72},[51,104865,104404],{"class":282},[51,104867,90],{"class":72},[40,104869,104870,104872,104873,104876,104877,104880,104881,104884],{},[37,104871,2633],{}," 是条件判断。",[37,104874,104875],{},"mj_name2id"," 找不到对象时会返回 ",[37,104878,104879],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[37,104882,104883],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[29,104886,104888],{"className":31342,"code":104887,"language":31344,"meta":35,"style":35},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[37,104889,104890,104906],{"__ignoreMap":35},[51,104891,104892,104894,104896,104898,104900,104902,104904],{"class":53,"line":54},[51,104893,4102],{"class":64},[51,104895,102465],{"class":72},[51,104897,27007],{"class":64},[51,104899,33407],{"class":175},[51,104901,73],{"class":72},[51,104903,2812],{"class":175},[51,104905,31750],{"class":72},[51,104907,104908],{"class":53,"line":61},[51,104909,102663],{"class":72},[40,104911,104912],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[29,104914,104916],{"className":31342,"code":104915,"language":31344,"meta":35,"style":35},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[37,104917,104918],{"__ignoreMap":35},[51,104919,104920,104922,104924,104926],{"class":53,"line":54},[51,104921,31379],{"class":175},[51,104923,73],{"class":72},[51,104925,104480],{"class":282},[51,104927,104483],{"class":72},[40,104929,104930,104932,104933,104936],{},[37,104931,102043],{}," 保存所有 body 的世界坐标。",[37,104934,104935],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[29,104938,104940],{"className":31342,"code":104939,"language":31344,"meta":35,"style":35},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[37,104941,104942],{"__ignoreMap":35},[51,104943,104944,104946,104948,104950],{"class":53,"line":54},[51,104945,31379],{"class":175},[51,104947,73],{"class":72},[51,104949,104492],{"class":282},[51,104951,104495],{"class":72},[40,104953,104954,104957,104958,104960],{},[37,104955,104956],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[37,104959,103941],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[29,104962,104964],{"className":31342,"code":104963,"language":31344,"meta":35,"style":35},"print(\"box qpos:\", np.array(data.qpos))\n",[37,104965,104966],{"__ignoreMap":35},[51,104967,104968,104970,104972,104974],{"class":53,"line":54},[51,104969,31379],{"class":175},[51,104971,73],{"class":72},[51,104973,104504],{"class":282},[51,104975,104507],{"class":72},[40,104977,104978,104979,104982],{},"这里打印广义位置数组。",[37,104980,104981],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104984,103280],{"id":103279},[40,104986,104987,104988,104991,104992,29349],{},"程序会输出 ",[37,104989,104990],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[37,104993,104994],{},"qpos",[40,104996,104997,104999,105000,105003,105004,105007],{},[37,104998,104935],{}," 是 body 的世界坐标位置。",[37,105001,105002],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[37,105005,105006],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[40,105009,83186,105010,83494,105012,105014],{},[37,105011,103941],{},[37,105013,104759],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[40,105016,105017],{},"如果你把 site 改成：",[29,105019,105021],{"className":54031,"code":105020,"language":54033,"meta":35,"style":35},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[37,105022,105023],{"__ignoreMap":35},[51,105024,105025,105027,105029,105031,105033,105036,105038,105040,105043,105045,105047,105049,105051,105053,105055],{"class":53,"line":54},[51,105026,2154],{"class":72},[51,105028,104174],{"class":52264},[51,105030,15882],{"class":68},[51,105032,108],{"class":72},[51,105034,105035],{"class":282},"\"box_top\"",[51,105037,102070],{"class":68},[51,105039,108],{"class":72},[51,105041,105042],{"class":282},"\"0 0 0.15\"",[51,105044,102100],{"class":68},[51,105046,108],{"class":72},[51,105048,104742],{"class":282},[51,105050,79731],{"class":68},[51,105052,108],{"class":72},[51,105054,104749],{"class":282},[51,105056,102108],{"class":72},[40,105058,105059,105060,105063],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[37,105061,105062],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105065,103312],{"id":103311},[19,105067,105068,105077,105080,105087,105093,105104],{},[22,105069,103375,105070,105072,105073,103378,105075,29349],{},[37,105071,103945],{}," 的初始高度从 ",[37,105074,791],{},[37,105076,1334],{},[22,105078,105079],{},"重新运行程序。",[22,105081,105082,105083,105086],{},"观察 ",[37,105084,105085],{},"box qpos"," 和最终位置是否变化。",[22,105088,105089,105090,105092],{},"故意把 ",[37,105091,104174],{}," 名称改错，确认程序能报错。",[22,105094,103375,105095,105097,105098,103378,105100,105103],{},[37,105096,102084],{}," 的颜色 ",[37,105099,102996],{},[37,105101,105102],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[22,105105,103375,105106,83494,105108,103378,105111,105114,105115,105117],{},[37,105107,103941],{},[37,105109,105110],{},"pos",[37,105112,105113],{},"0 0 0.2","，观察 ",[37,105116,105062],{}," 如何变化。",[14,105119,103417],{"id":103416},[1233,105121,105123],{"id":105122},"xml-error-schema-violation",[37,105124,105125],{},"XML Error: Schema violation",[40,105127,105128],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[1233,105130,105132,82254,105134],{"id":105131},"mj_name2id-返回-1",[37,105133,104875],{},[37,105135,104879],{},[40,105137,105138,105139,105142],{},"说明名字没有找到。检查 XML 中 ",[37,105140,105141],{},"name=\"...\"","，并确认对象类型正确。",[1233,105144,105145],{"id":105145},"物体不下落",[40,105147,103487],{},[19,105149,105150,105155,105160],{},[22,105151,105152,105153],{},"body 是否有 ",[37,105154,102584],{},[22,105156,105157,105158],{},"gravity 是否为 ",[37,105159,103553],{},[22,105161,105162,105163,105165],{},"body 是否被固定在 ",[37,105164,102805],{}," 中",[1233,105167,105168],{"id":105168},"坐标看起来不符合预期",[40,105170,105171],{},"先区分两种坐标：",[1393,105173,105174,105183],{},[1396,105175,105176],{},[1399,105177,105178,105181],{},[1402,105179,105180],{"align":24699},"坐标",[1402,105182,101664],{"align":24699},[1439,105184,105185,105195],{},[1399,105186,105187,105192],{},[1444,105188,105189,105190],{"align":24699},"XML 里的 ",[37,105191,105110],{},[1444,105193,105194],{"align":24699},"相对父 body 的局部坐标",[1399,105196,105197,105203],{},[1444,105198,105199,25942,105201],{"align":24699},[37,105200,102043],{},[37,105202,104956],{},[1444,105204,105205],{"align":24699},"仿真更新后的世界坐标",[40,105207,105208,105209,105211,105212,83503,105215,105217],{},"如果你修改了 ",[37,105210,102034],{},"，但还没调用 ",[37,105213,105214],{},"mj_forward",[37,105216,102179],{},"，世界坐标可能还没有更新。",[14,105219,103571],{"id":103570},[40,105221,105222],{},"MJCF 建模先掌握四件事：",[19,105224,105225,105230,105235,105240],{},[22,105226,105227,105229],{},[37,105228,52764],{}," 表示刚体层级。",[22,105231,105232,105234],{},[37,105233,102084],{}," 表示形状、碰撞和质量。",[22,105236,105237,105239],{},[37,105238,103920],{}," 决定 body 能不能动、怎么动。",[22,105241,105242,105244],{},[37,105243,104174],{}," 用来标记关键点，方便 Python 读取位置。",[40,105246,105247],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1179,105249,105250],{},"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":35,"searchDepth":61,"depth":61,"links":105252},[105253,105254,105255,105261,105265,105266,105267,105274],{"id":101610,"depth":61,"text":101611},{"id":101733,"depth":61,"text":101734},{"id":102008,"depth":61,"text":102009,"children":105256},[105257,105258,105259,105260],{"id":103924,"depth":93,"text":103924},{"id":104038,"depth":93,"text":104038},{"id":104064,"depth":93,"text":104065},{"id":104168,"depth":93,"text":104169},{"id":102216,"depth":61,"text":102217,"children":105262},[105263,105264],{"id":102536,"depth":93,"text":102536},{"id":102672,"depth":93,"text":102672},{"id":103279,"depth":61,"text":103280},{"id":103311,"depth":61,"text":103312},{"id":103416,"depth":61,"text":103417,"children":105268},[105269,105270,105272,105273],{"id":105122,"depth":93,"text":105125},{"id":105131,"depth":93,"text":105271},"mj_name2id 返回 -1",{"id":105145,"depth":93,"text":105145},{"id":105168,"depth":93,"text":105168},{"id":103570,"depth":61,"text":103571},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103618,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105281,"title":105282,"body":105283,"description":35,"extension":1190,"meta":106778,"navigation":1192,"path":106779,"seo":106780,"stem":106781,"__hash__":106782},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105284,"toc":106750},[105285,105288,105290,105293,105296,105334,105337,105343,105346,105348,105350,105377,105379,105393,105395,105436,105438,105462,105464,105467,105476,105485,105488,105497,105505,105514,105517,105527,105530,105582,105589,105595,105603,105651,105654,105673,105676,105684,105688,105697,105730,105732,106080,106082,106094,106096,106107,106109,106112,106133,106139,106142,106167,106177,106180,106188,106191,106194,106215,106226,106228,106248,106251,106272,106281,106300,106306,106331,106334,106348,106355,106379,106382,106390,106399,106415,106427,106435,106444,106446,106449,106473,106478,106481,106503,106505,106544,106546,106553,106555,106563,106566,106569,106581,106622,106629,106640,106647,106650,106699,106702,106705,106711,106713,106718,106744,106747],[10,105286,105282],{"id":105287},"_3python-控制接口读取状态与推进仿真",[14,105289,101611],{"id":101610},[40,105291,105292],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[40,105294,105295],{},"你将学习:",[19,105297,105298,105303,105308,105312,105317,105328],{},[22,105299,105300],{},[37,105301,105302],{},"MjModel.from_xml_string",[22,105304,105305],{},[37,105306,105307],{},"MjData(model)",[22,105309,105310],{},[37,105311,102179],{},[22,105313,105314],{},[37,105315,105316],{},"mj_resetData",[22,105318,105319,105320,1466,105322,1466,105325],{},"读取 ",[37,105321,104994],{},[37,105323,105324],{},"qvel",[37,105326,105327],{},"ctrl",[22,105329,105330,105331],{},"使用 ",[37,105332,105333],{},"model.opt.timestep",[40,105335,105336],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[29,105338,105341],{"className":105339,"code":105340,"language":34,"meta":35},[32],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[37,105342,105340],{"__ignoreMap":35},[40,105344,105345],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105347,101734],{"id":101733},[40,105349,101737],{},[29,105351,105353],{"className":24785,"code":105352,"language":24787,"meta":35,"style":35},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[37,105354,105355],{"__ignoreMap":35},[51,105356,105357,105359,105361,105363,105365,105368,105370,105372,105374],{"class":53,"line":54},[51,105358,25540],{"class":68},[51,105360,27279],{"class":282},[51,105362,24797],{"class":282},[51,105364,27364],{"class":175},[51,105366,105367],{"class":282}," python3",[51,105369,101762],{"class":282},[51,105371,103465],{"class":282},[51,105373,101778],{"class":282},[51,105375,105376],{"class":282}," glfw\n",[40,105378,103783],{},[29,105380,105381],{"className":24785,"code":101883,"language":24787,"meta":35,"style":35},[37,105382,105383],{"__ignoreMap":35},[51,105384,105385,105387,105389,105391],{"class":53,"line":54},[51,105386,24794],{"class":68},[51,105388,24797],{"class":282},[51,105390,101894],{"class":282},[51,105392,101897],{"class":282},[40,105394,103800],{},[29,105396,105398],{"className":24785,"code":105397,"language":24787,"meta":35,"style":35},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[37,105399,105400,105417,105426],{"__ignoreMap":35},[51,105401,105402,105404,105406,105408,105411,105413,105415],{"class":53,"line":54},[51,105403,31294],{"class":68},[51,105405,30140],{"class":282},[51,105407,26079],{"class":175},[51,105409,105410],{"class":282}," mujoco-python-api",[51,105412,101939],{"class":282},[51,105414,101942],{"class":175},[51,105416,101945],{"class":175},[51,105418,105419,105421,105423],{"class":53,"line":61},[51,105420,31294],{"class":68},[51,105422,101952],{"class":282},[51,105424,105425],{"class":282}," mujoco-python-api\n",[51,105427,105428,105430,105432,105434],{"class":53,"line":93},[51,105429,24794],{"class":68},[51,105431,24797],{"class":282},[51,105433,101894],{"class":282},[51,105435,101897],{"class":282},[40,105437,101968],{},[19,105439,105440,105447,105456],{},[22,105441,105442,101982,105444,105446],{},[37,105443,101639],{},[37,105445,101644],{}," 是官方 Python bindings 的类名。",[22,105448,105449,105450,105453,105454,29349],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[37,105451,105452],{},"mjModel"," 在 Python 中是 ",[37,105455,101673],{},[22,105457,105458,105459,29349],{},"不要使用 ",[37,105460,105461],{},"sim = mujoco_py.MjSim(...)",[14,105463,102009],{"id":102008},[40,105465,105466],{},"仿真推进核心代码:",[29,105468,105470],{"className":31342,"code":105469,"language":31344,"meta":35,"style":35},"mujoco.mj_step(model, data)\n",[37,105471,105472],{"__ignoreMap":35},[51,105473,105474],{"class":53,"line":54},[51,105475,105469],{"class":72},[40,105477,105478,105479,1466,105481,1466,105483,29349],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[37,105480,102034],{},[37,105482,102037],{},[37,105484,102031],{},[40,105486,105487],{},"重置仿真:",[29,105489,105491],{"className":31342,"code":105490,"language":31344,"meta":35,"style":35},"mujoco.mj_resetData(model, data)\n",[37,105492,105493],{"__ignoreMap":35},[51,105494,105495],{"class":53,"line":54},[51,105496,105490],{"class":72},[40,105498,105499,105500,83503,105502,105504],{},"如果手动修改了 ",[37,105501,102034],{},[37,105503,102037],{},"，通常应调用:",[29,105506,105508],{"className":31342,"code":105507,"language":31344,"meta":35,"style":35},"mujoco.mj_forward(model, data)\n",[37,105509,105510],{"__ignoreMap":35},[51,105511,105512],{"class":53,"line":54},[51,105513,105507],{"class":72},[40,105515,105516],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[1233,105518,105520,1466,105522,1466,105524,105526],{"id":105519},"qposqvelctrl-是什么",[37,105521,104994],{},[37,105523,105324],{},[37,105525,105327],{}," 是什么",[40,105528,105529],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1393,105531,105532,105544],{},[1396,105533,105534],{},[1399,105535,105536,105539,105541],{},[1402,105537,105538],{"align":24699},"字段",[1402,105540,101664],{"align":24699},[1402,105542,105543],{"align":24699},"谁来修改",[1439,105545,105546,105558,105570],{},[1399,105547,105548,105552,105555],{},[1444,105549,105550],{"align":24699},[37,105551,102034],{},[1444,105553,105554],{"align":24699},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1444,105556,105557],{"align":24699},"MuJoCo 更新，也可以手动设置初始状态",[1399,105559,105560,105564,105567],{},[1444,105561,105562],{"align":24699},[37,105563,102037],{},[1444,105565,105566],{"align":24699},"广义速度，例如小车速度、关节角速度",[1444,105568,105569],{"align":24699},"MuJoCo 更新，也可以手动清零",[1399,105571,105572,105576,105579],{},[1444,105573,105574],{"align":24699},[37,105575,102040],{},[1444,105577,105578],{"align":24699},"actuator 的控制输入",[1444,105580,105581],{"align":24699},"主要由你的控制代码写入",[40,105583,9987,105584,101982,105586,105588],{},[37,105585,104994],{},[37,105587,105324],{}," 不一定同维。自由刚体就是典型例子：",[29,105590,105593],{"className":105591,"code":105592,"language":34,"meta":35},[32],"freejoint: qpos 7 维，qvel 6 维\n",[37,105594,105592],{"__ignoreMap":35},[1233,105596,105598,101982,105600,105602],{"id":105597},"mj_step-和-mj_forward-的区别",[37,105599,102179],{},[37,105601,105214],{}," 的区别",[1393,105604,105605,105618],{},[1396,105606,105607],{},[1399,105608,105609,105612,105615],{},[1402,105610,105611],{"align":24699},"函数",[1402,105613,105614],{"align":24699},"是否推进时间",[1402,105616,105617],{"align":24699},"什么时候用",[1439,105619,105620,105633],{},[1399,105621,105622,105627,105630],{},[1444,105623,105624],{"align":24699},[37,105625,105626],{},"mj_step(model, data)",[1444,105628,105629],{"align":24699},"是",[1444,105631,105632],{"align":24699},"正常仿真循环，每调用一次前进一步",[1399,105634,105635,105640,105643],{},[1444,105636,105637],{"align":24699},[37,105638,105639],{},"mj_forward(model, data)",[1444,105641,105642],{"align":24699},"否",[1444,105644,105645,105646,1466,105648,105650],{"align":24699},"手动改了 ",[37,105647,104994],{},[37,105649,105324],{}," 后，刷新派生量",[40,105652,105653],{},"例如你写：",[29,105655,105657],{"className":31342,"code":105656,"language":31344,"meta":35,"style":35},"data.qpos[2] = 2.0\n",[37,105658,105659],{"__ignoreMap":35},[51,105660,105661,105664,105666,105668,105670],{"class":53,"line":54},[51,105662,105663],{"class":72},"data.qpos[",[51,105665,1334],{"class":175},[51,105667,5517],{"class":72},[51,105669,108],{"class":64},[51,105671,105672],{"class":175}," 2.0\n",[40,105674,105675],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[29,105677,105678],{"className":31342,"code":105507,"language":31344,"meta":35,"style":35},[37,105679,105680],{"__ignoreMap":35},[51,105681,105682],{"class":53,"line":54},[51,105683,105507],{"class":72},[1233,105685,105687],{"id":105686},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[40,105689,105690,105693,105694,105696],{},[37,105691,105692],{},"mujoco.mj_resetData(model, data)"," 会把 ",[37,105695,34365],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[29,105698,105700],{"className":31342,"code":105699,"language":31344,"meta":35,"style":35},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[37,105701,105702,105706,105716,105726],{"__ignoreMap":35},[51,105703,105704],{"class":53,"line":54},[51,105705,105490],{"class":72},[51,105707,105708,105711,105713],{"class":53,"line":61},[51,105709,105710],{"class":72},"data.qpos[:] ",[51,105712,108],{"class":64},[51,105714,105715],{"class":72}," random_qpos\n",[51,105717,105718,105721,105723],{"class":53,"line":93},[51,105719,105720],{"class":72},"data.qvel[:] ",[51,105722,108],{"class":64},[51,105724,105725],{"class":175}," 0.0\n",[51,105727,105728],{"class":53,"line":99},[51,105729,105507],{"class":72},[14,105731,102217],{"id":102216},[29,105733,105735],{"className":31342,"code":105734,"language":31344,"meta":35,"style":35},"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",[37,105736,105737,105743,105753,105757,105761,105769,105774,105778,105782,105786,105791,105795,105800,105805,105810,105814,105818,105822,105826,105830,105834,105853,105860,105872,105883,105899,105915,105919,105923,105935,105947,105955,105959,105970,105974,105990,105994,105998,106007,106011,106016,106025,106029,106042,106047,106056,106060,106064,106076],{"__ignoreMap":35},[51,105738,105739,105741],{"class":53,"line":54},[51,105740,31356],{"class":64},[51,105742,102265],{"class":72},[51,105744,105745,105747,105749,105751],{"class":53,"line":61},[51,105746,31356],{"class":64},[51,105748,32344],{"class":72},[51,105750,32347],{"class":64},[51,105752,32350],{"class":72},[51,105754,105755],{"class":53,"line":93},[51,105756,3480],{"emptyLinePlaceholder":1192},[51,105758,105759],{"class":53,"line":99},[51,105760,3480],{"emptyLinePlaceholder":1192},[51,105762,105763,105765,105767],{"class":53,"line":120},[51,105764,102278],{"class":175},[51,105766,14526],{"class":64},[51,105768,102283],{"class":282},[51,105770,105771],{"class":53,"line":129},[51,105772,105773],{"class":282},"\u003Cmujoco model=\"state_api\">\n",[51,105775,105776],{"class":53,"line":206},[51,105777,102293],{"class":282},[51,105779,105780],{"class":53,"line":212},[51,105781,3480],{"emptyLinePlaceholder":1192},[51,105783,105784],{"class":53,"line":227},[51,105785,102302],{"class":282},[51,105787,105788],{"class":53,"line":370},[51,105789,105790],{"class":282},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[51,105792,105793],{"class":53,"line":387},[51,105794,3480],{"emptyLinePlaceholder":1192},[51,105796,105797],{"class":53,"line":404},[51,105798,105799],{"class":282},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[51,105801,105802],{"class":53,"line":415},[51,105803,105804],{"class":282},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[51,105806,105807],{"class":53,"line":420},[51,105808,105809],{"class":282},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[51,105811,105812],{"class":53,"line":429},[51,105813,102331],{"class":282},[51,105815,105816],{"class":53,"line":434},[51,105817,102336],{"class":282},[51,105819,105820],{"class":53,"line":448},[51,105821,102341],{"class":282},[51,105823,105824],{"class":53,"line":462},[51,105825,96662],{"class":282},[51,105827,105828],{"class":53,"line":470},[51,105829,3480],{"emptyLinePlaceholder":1192},[51,105831,105832],{"class":53,"line":2783},[51,105833,3480],{"emptyLinePlaceholder":1192},[51,105835,105836,105838,105841,105844,105846,105849,105851],{"class":53,"line":2788},[51,105837,32911],{"class":64},[51,105839,105840],{"class":68}," print_state",[51,105842,105843],{"class":72},"(prefix: ",[51,105845,2407],{"class":175},[51,105847,105848],{"class":72},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[51,105850,96650],{"class":175},[51,105852,4816],{"class":72},[51,105854,105855,105857],{"class":53,"line":2817},[51,105856,32263],{"class":175},[51,105858,105859],{"class":72},"(prefix)\n",[51,105861,105862,105864,105866,105869],{"class":53,"line":2822},[51,105863,32263],{"class":175},[51,105865,73],{"class":72},[51,105867,105868],{"class":282},"\"  timestep:\"",[51,105870,105871],{"class":72},", model.opt.timestep)\n",[51,105873,105874,105876,105878,105881],{"class":53,"line":2839},[51,105875,32263],{"class":175},[51,105877,73],{"class":72},[51,105879,105880],{"class":282},"\"  time:\"",[51,105882,102442],{"class":72},[51,105884,105885,105887,105889,105892,105895,105897],{"class":53,"line":2844},[51,105886,32263],{"class":175},[51,105888,73],{"class":72},[51,105890,105891],{"class":282},"\"  qpos:\"",[51,105893,105894],{"class":72},", np.round(data.qpos.copy(), ",[51,105896,1543],{"class":175},[51,105898,31461],{"class":72},[51,105900,105901,105903,105905,105908,105911,105913],{"class":53,"line":2849},[51,105902,32263],{"class":175},[51,105904,73],{"class":72},[51,105906,105907],{"class":282},"\"  qvel:\"",[51,105909,105910],{"class":72},", np.round(data.qvel.copy(), ",[51,105912,1543],{"class":175},[51,105914,31461],{"class":72},[51,105916,105917],{"class":53,"line":2854},[51,105918,3480],{"emptyLinePlaceholder":1192},[51,105920,105921],{"class":53,"line":2868},[51,105922,3480],{"emptyLinePlaceholder":1192},[51,105924,105925,105927,105929,105931,105933],{"class":53,"line":2873},[51,105926,32911],{"class":64},[51,105928,151],{"class":68},[51,105930,102362],{"class":72},[51,105932,96650],{"class":175},[51,105934,4816],{"class":72},[51,105936,105937,105939,105941,105943,105945],{"class":53,"line":3657},[51,105938,102371],{"class":72},[51,105940,108],{"class":64},[51,105942,102376],{"class":72},[51,105944,102278],{"class":175},[51,105946,90],{"class":72},[51,105948,105949,105951,105953],{"class":53,"line":3671},[51,105950,102385],{"class":72},[51,105952,108],{"class":64},[51,105954,102390],{"class":72},[51,105956,105957],{"class":53,"line":3679},[51,105958,3480],{"emptyLinePlaceholder":1192},[51,105960,105961,105964,105967],{"class":53,"line":3684},[51,105962,105963],{"class":72},"    print_state(",[51,105965,105966],{"class":282},"\"initial\"",[51,105968,105969],{"class":72},", model, data)\n",[51,105971,105972],{"class":53,"line":3690},[51,105973,3480],{"emptyLinePlaceholder":1192},[51,105975,105976,105978,105980,105982,105984,105986,105988],{"class":53,"line":3696},[51,105977,4278],{"class":64},[51,105979,102465],{"class":72},[51,105981,27007],{"class":64},[51,105983,33407],{"class":175},[51,105985,73],{"class":72},[51,105987,1902],{"class":175},[51,105989,31750],{"class":72},[51,105991,105992],{"class":53,"line":3701},[51,105993,102480],{"class":72},[51,105995,105996],{"class":53,"line":8910},[51,105997,3480],{"emptyLinePlaceholder":1192},[51,105999,106000,106002,106005],{"class":53,"line":8934},[51,106001,105963],{"class":72},[51,106003,106004],{"class":282},"\"after 50 steps\"",[51,106006,105969],{"class":72},[51,106008,106009],{"class":53,"line":8939},[51,106010,3480],{"emptyLinePlaceholder":1192},[51,106012,106013],{"class":53,"line":8945},[51,106014,106015],{"class":72},"    mujoco.mj_resetData(model, data)\n",[51,106017,106018,106020,106023],{"class":53,"line":8972},[51,106019,105963],{"class":72},[51,106021,106022],{"class":282},"\"after reset\"",[51,106024,105969],{"class":72},[51,106026,106027],{"class":53,"line":8977},[51,106028,3480],{"emptyLinePlaceholder":1192},[51,106030,106031,106034,106036,106038,106040],{"class":53,"line":8983},[51,106032,106033],{"class":72},"    data.qpos[",[51,106035,1334],{"class":175},[51,106037,5517],{"class":72},[51,106039,108],{"class":64},[51,106041,105672],{"class":175},[51,106043,106044],{"class":53,"line":8995},[51,106045,106046],{"class":72},"    mujoco.mj_forward(model, data)\n",[51,106048,106049,106051,106054],{"class":53,"line":9007},[51,106050,105963],{"class":72},[51,106052,106053],{"class":282},"\"after manual qpos edit\"",[51,106055,105969],{"class":72},[51,106057,106058],{"class":53,"line":9019},[51,106059,3480],{"emptyLinePlaceholder":1192},[51,106061,106062],{"class":53,"line":10678},[51,106063,3480],{"emptyLinePlaceholder":1192},[51,106065,106066,106068,106070,106072,106074],{"class":53,"line":10703},[51,106067,2633],{"class":64},[51,106069,32184],{"class":175},[51,106071,102523],{"class":64},[51,106073,102526],{"class":282},[51,106075,4816],{"class":72},[51,106077,106078],{"class":53,"line":10726},[51,106079,102533],{"class":72},[40,106081,104534],{},[29,106083,106085],{"className":24785,"code":106084,"language":24787,"meta":35,"style":35},"touch ch3_python_state.py\n",[37,106086,106087],{"__ignoreMap":35},[51,106088,106089,106091],{"class":53,"line":54},[51,106090,102247],{"class":68},[51,106092,106093],{"class":282}," ch3_python_state.py\n",[40,106095,103265],{},[29,106097,106099],{"className":24785,"code":106098,"language":24787,"meta":35,"style":35},"python ch3_python_state.py\n",[37,106100,106101],{"__ignoreMap":35},[51,106102,106103,106105],{"class":53,"line":54},[51,106104,31344],{"class":68},[51,106106,106093],{"class":282},[1233,106108,102536],{"id":102536},[40,106110,106111],{},"打印状态的函数：",[29,106113,106115],{"className":31342,"code":106114,"language":31344,"meta":35,"style":35},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[37,106116,106117],{"__ignoreMap":35},[51,106118,106119,106121,106123,106125,106127,106129,106131],{"class":53,"line":54},[51,106120,32911],{"class":64},[51,106122,105840],{"class":68},[51,106124,105843],{"class":72},[51,106126,2407],{"class":175},[51,106128,105848],{"class":72},[51,106130,96650],{"class":175},[51,106132,4816],{"class":72},[40,106134,106135,106136,106138],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[37,106137,34365],{}," 里发生了什么。",[40,106140,106141],{},"推进 50 步：",[29,106143,106145],{"className":31342,"code":106144,"language":31344,"meta":35,"style":35},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[37,106146,106147,106163],{"__ignoreMap":35},[51,106148,106149,106151,106153,106155,106157,106159,106161],{"class":53,"line":54},[51,106150,4102],{"class":64},[51,106152,102465],{"class":72},[51,106154,27007],{"class":64},[51,106156,33407],{"class":175},[51,106158,73],{"class":72},[51,106160,1902],{"class":175},[51,106162,31750],{"class":72},[51,106164,106165],{"class":53,"line":61},[51,106166,102663],{"class":72},[40,106168,106169,106170,106173,106174,106176],{},"由于 ",[37,106171,106172],{},"timestep=0.01","，所以 50 步后时间约为 ",[37,106175,36293],{}," 秒。",[40,106178,106179],{},"重置：",[29,106181,106182],{"className":31342,"code":105490,"language":31344,"meta":35,"style":35},[37,106183,106184],{"__ignoreMap":35},[51,106185,106186],{"class":53,"line":54},[51,106187,105490],{"class":72},[40,106189,106190],{},"这会把时间、位置、速度恢复到初始状态。",[40,106192,106193],{},"手动改高度：",[29,106195,106197],{"className":31342,"code":106196,"language":31344,"meta":35,"style":35},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[37,106198,106199,106211],{"__ignoreMap":35},[51,106200,106201,106203,106205,106207,106209],{"class":53,"line":54},[51,106202,105663],{"class":72},[51,106204,1334],{"class":175},[51,106206,5517],{"class":72},[51,106208,108],{"class":64},[51,106210,105672],{"class":175},[51,106212,106213],{"class":53,"line":61},[51,106214,105507],{"class":72},[40,106216,106217,106218,106221,106222,106225],{},"这个例子里 ",[37,106219,106220],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[37,106223,106224],{},"2.0"," 表示把小球放到更高的位置。",[1233,106227,102672],{"id":102672},[29,106229,106230],{"className":31342,"code":106114,"language":31344,"meta":35,"style":35},[37,106231,106232],{"__ignoreMap":35},[51,106233,106234,106236,106238,106240,106242,106244,106246],{"class":53,"line":54},[51,106235,32911],{"class":64},[51,106237,105840],{"class":68},[51,106239,105843],{"class":72},[51,106241,2407],{"class":175},[51,106243,105848],{"class":72},[51,106245,96650],{"class":175},[51,106247,4816],{"class":72},[40,106249,106250],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[19,106252,106253,106262,106267],{},[22,106254,106255,106258,106259,106261],{},[37,106256,106257],{},"prefix","：一段文字，比如 ",[37,106260,105966],{},"，用来说明现在打印的是哪个阶段。",[22,106263,106264,106266],{},[37,106265,103049],{},"：MuJoCo 模型。",[22,106268,106269,106271],{},[37,106270,34365],{},"：MuJoCo 当前状态。",[40,106273,106274,1466,106277,106280],{},[37,106275,106276],{},"prefix: str",[37,106278,106279],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[29,106282,106284],{"className":31342,"code":106283,"language":31344,"meta":35,"style":35},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[37,106285,106286],{"__ignoreMap":35},[51,106287,106288,106290,106292,106294,106296,106298],{"class":53,"line":54},[51,106289,31379],{"class":175},[51,106291,73],{"class":72},[51,106293,105891],{"class":282},[51,106295,105894],{"class":72},[51,106297,1543],{"class":175},[51,106299,31461],{"class":72},[40,106301,106302,106305],{},[37,106303,106304],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[29,106307,106309],{"className":31342,"code":106308,"language":31344,"meta":35,"style":35},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[37,106310,106311,106323],{"__ignoreMap":35},[51,106312,106313,106315,106317,106319,106321],{"class":53,"line":54},[51,106314,102598],{"class":72},[51,106316,108],{"class":64},[51,106318,102376],{"class":72},[51,106320,102278],{"class":175},[51,106322,90],{"class":72},[51,106324,106325,106327,106329],{"class":53,"line":61},[51,106326,102622],{"class":72},[51,106328,108],{"class":64},[51,106330,102390],{"class":72},[40,106332,106333],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[29,106335,106337],{"className":31342,"code":106336,"language":31344,"meta":35,"style":35},"print_state(\"initial\", model, data)\n",[37,106338,106339],{"__ignoreMap":35},[51,106340,106341,106344,106346],{"class":53,"line":54},[51,106342,106343],{"class":72},"print_state(",[51,106345,105966],{"class":282},[51,106347,105969],{"class":72},[40,106349,106350,106351,106354],{},"调用刚才定义的 ",[37,106352,106353],{},"print_state"," 函数，打印初始状态。",[29,106356,106357],{"className":31342,"code":106144,"language":31344,"meta":35,"style":35},[37,106358,106359,106375],{"__ignoreMap":35},[51,106360,106361,106363,106365,106367,106369,106371,106373],{"class":53,"line":54},[51,106362,4102],{"class":64},[51,106364,102465],{"class":72},[51,106366,27007],{"class":64},[51,106368,33407],{"class":175},[51,106370,73],{"class":72},[51,106372,1902],{"class":175},[51,106374,31750],{"class":72},[51,106376,106377],{"class":53,"line":61},[51,106378,102663],{"class":72},[40,106380,106381],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[29,106383,106384],{"className":31342,"code":105490,"language":31344,"meta":35,"style":35},[37,106385,106386],{"__ignoreMap":35},[51,106387,106388],{"class":53,"line":54},[51,106389,105490],{"class":72},[40,106391,106392,106393,106395,106396,106398],{},"重置 ",[37,106394,34365],{},"。注意它不会重新创建 ",[37,106397,103049],{},"，因为模型结构没有变，只是状态回到初始值。",[29,106400,106401],{"className":31342,"code":105656,"language":31344,"meta":35,"style":35},[37,106402,106403],{"__ignoreMap":35},[51,106404,106405,106407,106409,106411,106413],{"class":53,"line":54},[51,106406,105663],{"class":72},[51,106408,1334],{"class":175},[51,106410,5517],{"class":72},[51,106412,108],{"class":64},[51,106414,105672],{"class":175},[40,106416,106417,106418,1466,106421,1466,106424,106426],{},"这行是“手动改状态”。在 freejoint 中，",[37,106419,106420],{},"qpos[0]",[37,106422,106423],{},"qpos[1]",[37,106425,106220],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[29,106428,106429],{"className":31342,"code":105507,"language":31344,"meta":35,"style":35},[37,106430,106431],{"__ignoreMap":35},[51,106432,106433],{"class":53,"line":54},[51,106434,105507],{"class":72},[40,106436,106437,106438,106440,106441,106443],{},"手动改完 ",[37,106439,104994],{}," 后，调用 ",[37,106442,105214],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106445,103280],{"id":103279},[40,106447,106448],{},"你会看到:",[19,106450,106451,106456,106461,106464],{},[22,106452,106453,106454],{},"初始时间为 ",[37,106455,176],{},[22,106457,106458,106459],{},"50 步后时间约为 ",[37,106460,36293],{},[22,106462,106463],{},"reset 后状态恢复",[22,106465,106466,106467,106470,106471],{},"手动修改 ",[37,106468,106469],{},"data.qpos[2]"," 后，小球高度变为 ",[37,106472,106224],{},[40,106474,106475,106477],{},[37,106476,106220],{}," 在这个例子中表示自由刚体的 z 坐标。",[40,106479,106480],{},"输出里可以重点看三件事：",[19,106482,106483,106491,106496],{},[22,106484,106485,106487,106488,106490],{},[37,106486,3467],{}," 是否随着 ",[37,106489,102179],{}," 增加。",[22,106492,106493,106495],{},[37,106494,104994],{}," 的 z 坐标是否因为下落而变化。",[22,106497,106498,106500,106501,29349],{},[37,106499,105316],{}," 后时间是否回到 ",[37,106502,176],{},[14,106504,103312],{"id":103311},[19,106506,106507,106513,106519,106525,106528,106537],{},[22,106508,106509,106510,29349],{},"修改 timestep 为 ",[37,106511,106512],{},"0.005",[22,106514,106515,106516,29349],{},"重新运行，检查 50 步后时间是否约为 ",[37,106517,106518],{},"0.25",[22,106520,106521,106522,29349],{},"修改重力为 ",[37,106523,106524],{},"0 0 -1.0",[22,106526,106527],{},"观察小球下降速度是否变慢。",[22,106529,103375,106530,103378,106533,106536],{},[37,106531,106532],{},"data.qpos[2] = 2.0",[37,106534,106535],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[22,106538,106539,106540,106543],{},"注释掉 ",[37,106541,106542],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106545,103417],{"id":103416},[1233,106547,106549,106550,106552],{"id":106548},"修改-dataqpos-后位置没有更新","修改 ",[37,106551,102034],{}," 后位置没有更新",[40,106554,103426],{},[29,106556,106557],{"className":31342,"code":105507,"language":31344,"meta":35,"style":35},[37,106558,106559],{"__ignoreMap":35},[51,106560,106561],{"class":53,"line":54},[51,106562,105507],{"class":72},[1233,106564,106565],{"id":106565},"数组维度看不懂",[40,106567,106568],{},"打印模型维度:",[29,106570,106572],{"className":31342,"code":106571,"language":31344,"meta":35,"style":35},"print(model.nq, model.nv, model.nu)\n",[37,106573,106574],{"__ignoreMap":35},[51,106575,106576,106578],{"class":53,"line":54},[51,106577,31379],{"class":175},[51,106579,106580],{"class":72},"(model.nq, model.nv, model.nu)\n",[1393,106582,106583,106591],{},[1396,106584,106585],{},[1399,106586,106587,106589],{},[1402,106588,105538],{"align":24699},[1402,106590,101664],{"align":24699},[1439,106592,106593,106603,106613],{},[1399,106594,106595,106600],{},[1444,106596,106597],{"align":24699},[37,106598,106599],{},"nq",[1444,106601,106602],{"align":24699},"位置变量数量",[1399,106604,106605,106610],{},[1444,106606,106607],{"align":24699},[37,106608,106609],{},"nv",[1444,106611,106612],{"align":24699},"速度变量数量",[1399,106614,106615,106619],{},[1444,106616,106617],{"align":24699},[37,106618,103126],{},[1444,106620,106621],{"align":24699},"控制输入数量",[1233,106623,106625,106626,106628],{"id":106624},"误以为-qpos-一定等于关节数","误以为 ",[37,106627,104994],{}," 一定等于关节数",[40,106630,106631,106632,83494,106634,106636,106637,106639],{},"不是。例如 ",[37,106633,102584],{},[37,106635,104994],{}," 是 7 维，但 ",[37,106638,105324],{}," 是 6 维。",[1233,106641,106643,106644,106646],{"id":106642},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[37,106645,104994],{}," 的第几位",[40,106648,106649],{},"初学时可以先打印：",[29,106651,106653],{"className":31342,"code":106652,"language":31344,"meta":35,"style":35},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[37,106654,106655,106665,106675,106687],{"__ignoreMap":35},[51,106656,106657,106659,106661,106663],{"class":53,"line":54},[51,106658,31379],{"class":175},[51,106660,73],{"class":72},[51,106662,102403],{"class":282},[51,106664,102406],{"class":72},[51,106666,106667,106669,106671,106673],{"class":53,"line":61},[51,106668,31379],{"class":175},[51,106670,73],{"class":72},[51,106672,102415],{"class":282},[51,106674,102418],{"class":72},[51,106676,106677,106679,106681,106684],{"class":53,"line":93},[51,106678,31379],{"class":175},[51,106680,73],{"class":72},[51,106682,106683],{"class":282},"\"qpos:\"",[51,106685,106686],{"class":72},", data.qpos)\n",[51,106688,106689,106691,106693,106696],{"class":53,"line":99},[51,106690,31379],{"class":175},[51,106692,73],{"class":72},[51,106694,106695],{"class":282},"\"qvel:\"",[51,106697,106698],{"class":72},", data.qvel)\n",[40,106700,106701],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[1233,106703,106704],{"id":106704},"仿真结果每次都一样",[40,106706,106707,106708,106710],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[37,106709,104994],{},"、目标点或控制输入。",[14,106712,103571],{"id":103570},[40,106714,106715,106716,25582],{},"Python 控制 MuJoCo 的核心就是读写 ",[37,106717,34365],{},[19,106719,106720,106728,106733,106738],{},[22,106721,106722,106723,101982,106725,106727],{},"用 ",[37,106724,102034],{},[37,106726,102037],{}," 读取状态。",[22,106729,106722,106730,106732],{},[37,106731,102040],{}," 写入控制。",[22,106734,106722,106735,106737],{},[37,106736,102179],{}," 推进时间。",[22,106739,106740,106741,106743],{},"手动改状态后用 ",[37,106742,105214],{}," 刷新派生量。",[40,106745,106746],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1179,106748,106749],{},"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":35,"searchDepth":61,"depth":61,"links":106751},[106752,106753,106754,106761,106765,106766,106767,106777],{"id":101610,"depth":61,"text":101611},{"id":101733,"depth":61,"text":101734},{"id":102008,"depth":61,"text":102009,"children":106755},[106756,106758,106760],{"id":105519,"depth":93,"text":106757},"qpos、qvel、ctrl 是什么",{"id":105597,"depth":93,"text":106759},"mj_step 和 mj_forward 的区别",{"id":105686,"depth":93,"text":105687},{"id":102216,"depth":61,"text":102217,"children":106762},[106763,106764],{"id":102536,"depth":93,"text":102536},{"id":102672,"depth":93,"text":102672},{"id":103279,"depth":61,"text":103280},{"id":103311,"depth":61,"text":103312},{"id":103416,"depth":61,"text":103417,"children":106768},[106769,106771,106772,106774,106776],{"id":106548,"depth":93,"text":106770},"修改 data.qpos 后位置没有更新",{"id":106565,"depth":93,"text":106565},{"id":106624,"depth":93,"text":106773},"误以为 qpos 一定等于关节数",{"id":106642,"depth":93,"text":106775},"不知道某个元素在 qpos 的第几位",{"id":106704,"depth":93,"text":106704},{"id":103570,"depth":61,"text":103571},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105282,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106784,"title":106785,"body":106786,"description":35,"extension":1190,"meta":108476,"navigation":1192,"path":108477,"seo":108478,"stem":108479,"__hash__":108480},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106787,"toc":108452},[106788,106791,106793,106796,106798,106823,106826,106845,106848,106850,106852,106876,106878,106892,106894,106935,106937,106961,106963,106966,107000,107002,107015,107018,107086,107095,107099,107102,107136,107142,107145,107149,107188,107191,107211,107215,107258,107260,107289,107292,107298,107301,107303,107697,107699,107711,107713,107724,107726,107729,107758,107766,107769,107804,107807,107809,107817,107820,107822,107833,107843,107863,107866,107902,107914,107962,107981,108023,108036,108064,108069,108090,108100,108118,108121,108155,108158,108178,108181,108200,108206,108208,108211,108217,108223,108233,108236,108242,108251,108253,108299,108301,108307,108313,108316,108319,108339,108342,108348,108354,108356,108379,108382,108385,108394,108397,108435,108437,108440,108446,108449],[10,106789,106785],{"id":106790},"_4关节actuator-与力控制",[14,106792,101611],{"id":101610},[40,106794,106795],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[40,106797,105295],{},[19,106799,106800,106806,106811,106815,106820],{},[22,106801,106802,106805],{},[37,106803,106804],{},"hinge"," 关节",[22,106807,106808],{},[37,106809,106810],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[22,106812,106813],{},[37,106814,102040],{},[22,106816,106817],{},[37,106818,106819],{},"ctrlrange",[22,106821,106822],{},"读取关节角和角速度",[40,106824,106825],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[29,106827,106829],{"className":31342,"code":106828,"language":31344,"meta":35,"style":35},"data.ctrl[0] = ...\n",[37,106830,106831],{"__ignoreMap":35},[51,106832,106833,106836,106838,106840,106842],{"class":53,"line":54},[51,106834,106835],{"class":72},"data.ctrl[",[51,106837,176],{"class":175},[51,106839,5517],{"class":72},[51,106841,108],{"class":64},[51,106843,106844],{"class":175}," ...\n",[40,106846,106847],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106849,101734],{"id":101733},[40,106851,101737],{},[29,106853,106854],{"className":24785,"code":105352,"language":24787,"meta":35,"style":35},[37,106855,106856],{"__ignoreMap":35},[51,106857,106858,106860,106862,106864,106866,106868,106870,106872,106874],{"class":53,"line":54},[51,106859,25540],{"class":68},[51,106861,27279],{"class":282},[51,106863,24797],{"class":282},[51,106865,27364],{"class":175},[51,106867,105367],{"class":282},[51,106869,101762],{"class":282},[51,106871,103465],{"class":282},[51,106873,101778],{"class":282},[51,106875,105376],{"class":282},[40,106877,103783],{},[29,106879,106880],{"className":24785,"code":101883,"language":24787,"meta":35,"style":35},[37,106881,106882],{"__ignoreMap":35},[51,106883,106884,106886,106888,106890],{"class":53,"line":54},[51,106885,24794],{"class":68},[51,106887,24797],{"class":282},[51,106889,101894],{"class":282},[51,106891,101897],{"class":282},[40,106893,103800],{},[29,106895,106897],{"className":24785,"code":106896,"language":24787,"meta":35,"style":35},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[37,106898,106899,106916,106925],{"__ignoreMap":35},[51,106900,106901,106903,106905,106907,106910,106912,106914],{"class":53,"line":54},[51,106902,31294],{"class":68},[51,106904,30140],{"class":282},[51,106906,26079],{"class":175},[51,106908,106909],{"class":282}," mujoco-control",[51,106911,101939],{"class":282},[51,106913,101942],{"class":175},[51,106915,101945],{"class":175},[51,106917,106918,106920,106922],{"class":53,"line":61},[51,106919,31294],{"class":68},[51,106921,101952],{"class":282},[51,106923,106924],{"class":282}," mujoco-control\n",[51,106926,106927,106929,106931,106933],{"class":53,"line":93},[51,106928,24794],{"class":68},[51,106930,24797],{"class":282},[51,106932,101894],{"class":282},[51,106934,101897],{"class":282},[40,106936,101968],{},[19,106938,106939,106945,106952,106958],{},[22,106940,106941,106944],{},[37,106942,106943],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[22,106946,106947,106949,106950,29349],{},[37,106948,102040],{}," 长度等于 ",[37,106951,103122],{},[22,106953,83186,106954,106957],{},[37,106955,106956],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[22,106959,106960],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106962,102009],{"id":102008},[40,106964,106965],{},"关节决定 body 如何运动:",[29,106967,106969],{"className":54031,"code":106968,"language":54033,"meta":35,"style":35},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[37,106970,106971],{"__ignoreMap":35},[51,106972,106973,106975,106977,106979,106981,106984,106986,106988,106990,106993,106995,106998],{"class":53,"line":54},[51,106974,2154],{"class":72},[51,106976,103920],{"class":52264},[51,106978,15882],{"class":68},[51,106980,108],{"class":72},[51,106982,106983],{"class":282},"\"hinge\"",[51,106985,54788],{"class":68},[51,106987,108],{"class":72},[51,106989,106983],{"class":282},[51,106991,106992],{"class":68}," axis",[51,106994,108],{"class":72},[51,106996,106997],{"class":282},"\"0 1 0\"",[51,106999,102108],{"class":72},[40,107001,104016],{},[19,107003,107004,107009,107012],{},[22,107005,107006,107007],{},"名字是 ",[37,107008,106804],{},[22,107010,107011],{},"类型是旋转关节",[22,107013,107014],{},"绕 y 轴旋转",[40,107016,107017],{},"actuator 决定如何施加控制:",[29,107019,107021],{"className":54031,"code":107020,"language":54033,"meta":35,"style":35},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[37,107022,107023,107032,107078],{"__ignoreMap":35},[51,107024,107025,107027,107030],{"class":53,"line":54},[51,107026,2154],{"class":72},[51,107028,107029],{"class":52264},"actuator",[51,107031,52271],{"class":72},[51,107033,107034,107036,107039,107041,107043,107046,107049,107051,107053,107056,107058,107060,107063,107065,107068,107071,107073,107076],{"class":53,"line":61},[51,107035,53108],{"class":72},[51,107037,107038],{"class":52264},"motor",[51,107040,15882],{"class":68},[51,107042,108],{"class":72},[51,107044,107045],{"class":282},"\"hinge_motor\"",[51,107047,107048],{"class":68}," joint",[51,107050,108],{"class":72},[51,107052,106983],{"class":282},[51,107054,107055],{"class":68}," gear",[51,107057,108],{"class":72},[51,107059,4755],{"class":282},[51,107061,107062],{"class":68}," ctrlrange",[51,107064,108],{"class":72},[51,107066,107067],{"class":282},"\"-2 2\"",[51,107069,107070],{"class":68}," ctrllimited",[51,107072,108],{"class":72},[51,107074,107075],{"class":282},"\"true\"",[51,107077,102108],{"class":72},[51,107079,107080,107082,107084],{"class":53,"line":93},[51,107081,52749],{"class":72},[51,107083,107029],{"class":52264},[51,107085,52271],{"class":72},[40,107087,107088,107091,107092,29349],{},[37,107089,107090],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[37,107093,107094],{},"[-2, 2]",[1233,107096,107098],{"id":107097},"joint-和-actuator-的关系","joint 和 actuator 的关系",[40,107100,107101],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1393,107103,107104,107114],{},[1396,107105,107106],{},[1399,107107,107108,107110,107112],{},[1402,107109,26717],{"align":24699},[1402,107111,103660],{"align":24699},[1402,107113,101698],{"align":24699},[1439,107115,107116,107126],{},[1399,107117,107118,107120,107123],{},[1444,107119,103920],{"align":24699},[1444,107121,107122],{"align":24699},"定义能怎么动",[1444,107124,107125],{"align":24699},"门轴允许门旋转",[1399,107127,107128,107130,107133],{},[1444,107129,107029],{"align":24699},[1444,107131,107132],{"align":24699},"定义怎么施力或控制",[1444,107134,107135],{"align":24699},"人推门、马达带动门",[40,107137,107138,107139,107141],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[37,107140,102040],{}," 主动控制它。",[40,107143,107144],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[1233,107146,107148],{"id":107147},"hinge-joint","hinge joint",[29,107150,107152],{"className":54031,"code":107151,"language":54033,"meta":35,"style":35},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[37,107153,107154],{"__ignoreMap":35},[51,107155,107156,107158,107160,107162,107164,107166,107168,107170,107172,107174,107176,107178,107181,107183,107186],{"class":53,"line":54},[51,107157,2154],{"class":72},[51,107159,103920],{"class":52264},[51,107161,15882],{"class":68},[51,107163,108],{"class":72},[51,107165,106983],{"class":282},[51,107167,54788],{"class":68},[51,107169,108],{"class":72},[51,107171,106983],{"class":282},[51,107173,106992],{"class":68},[51,107175,108],{"class":72},[51,107177,106997],{"class":282},[51,107179,107180],{"class":68}," damping",[51,107182,108],{"class":72},[51,107184,107185],{"class":282},"\"0.1\"",[51,107187,102108],{"class":72},[40,107189,107190],{},"含义：",[19,107192,107193,107199,107205],{},[22,107194,107195,107198],{},[37,107196,107197],{},"type=\"hinge\"","：只能绕一个轴旋转。",[22,107200,107201,107204],{},[37,107202,107203],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[22,107206,107207,107210],{},[37,107208,107209],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[1233,107212,107214],{"id":107213},"motor-actuator","motor actuator",[29,107216,107218],{"className":54031,"code":107217,"language":54033,"meta":35,"style":35},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[37,107219,107220],{"__ignoreMap":35},[51,107221,107222,107224,107226,107228,107230,107232,107234,107236,107238,107240,107242,107244,107246,107248,107250,107252,107254,107256],{"class":53,"line":54},[51,107223,2154],{"class":72},[51,107225,107038],{"class":52264},[51,107227,15882],{"class":68},[51,107229,108],{"class":72},[51,107231,107045],{"class":282},[51,107233,107048],{"class":68},[51,107235,108],{"class":72},[51,107237,106983],{"class":282},[51,107239,107055],{"class":68},[51,107241,108],{"class":72},[51,107243,4755],{"class":282},[51,107245,107062],{"class":68},[51,107247,108],{"class":72},[51,107249,107067],{"class":282},[51,107251,107070],{"class":68},[51,107253,108],{"class":72},[51,107255,107075],{"class":282},[51,107257,102108],{"class":72},[40,107259,107190],{},[19,107261,107262,107271,107277,107283],{},[22,107263,107264,107267,107268,107270],{},[37,107265,107266],{},"joint=\"hinge\"","：这个电机作用在名为 ",[37,107269,106804],{}," 的关节上。",[22,107272,107273,107276],{},[37,107274,107275],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[22,107278,107279,107282],{},[37,107280,107281],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[22,107284,107285,107288],{},[37,107286,107287],{},"ctrllimited=\"true\"","：启用控制范围限制。",[40,107290,107291],{},"简单理解：",[29,107293,107296],{"className":107294,"code":107295,"language":34,"meta":35},[32],"实际施加效果 ≈ data.ctrl[0] * gear\n",[37,107297,107295],{"__ignoreMap":35},[40,107299,107300],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107302,102217],{"id":102216},[29,107304,107306],{"className":31342,"code":107305,"language":31344,"meta":35,"style":35},"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",[37,107307,107308,107315,107319,107325,107335,107339,107343,107351,107356,107361,107365,107369,107374,107379,107383,107388,107393,107398,107403,107407,107411,107415,107420,107425,107430,107434,107438,107442,107446,107458,107470,107478,107482,107492,107502,107512,107516,107529,107542,107546,107563,107577,107612,107616,107620,107631,107646,107661,107673,107677,107681,107693],{"__ignoreMap":35},[51,107309,107310,107312],{"class":53,"line":54},[51,107311,31356],{"class":64},[51,107313,107314],{"class":72}," math\n",[51,107316,107317],{"class":53,"line":61},[51,107318,3480],{"emptyLinePlaceholder":1192},[51,107320,107321,107323],{"class":53,"line":93},[51,107322,31356],{"class":64},[51,107324,102265],{"class":72},[51,107326,107327,107329,107331,107333],{"class":53,"line":99},[51,107328,31356],{"class":64},[51,107330,32344],{"class":72},[51,107332,32347],{"class":64},[51,107334,32350],{"class":72},[51,107336,107337],{"class":53,"line":120},[51,107338,3480],{"emptyLinePlaceholder":1192},[51,107340,107341],{"class":53,"line":129},[51,107342,3480],{"emptyLinePlaceholder":1192},[51,107344,107345,107347,107349],{"class":53,"line":206},[51,107346,102278],{"class":175},[51,107348,14526],{"class":64},[51,107350,102283],{"class":282},[51,107352,107353],{"class":53,"line":212},[51,107354,107355],{"class":282},"\u003Cmujoco model=\"one_link_motor\">\n",[51,107357,107358],{"class":53,"line":227},[51,107359,107360],{"class":282},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[51,107362,107363],{"class":53,"line":370},[51,107364,3480],{"emptyLinePlaceholder":1192},[51,107366,107367],{"class":53,"line":387},[51,107368,102302],{"class":282},[51,107370,107371],{"class":53,"line":404},[51,107372,107373],{"class":282},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[51,107375,107376],{"class":53,"line":415},[51,107377,107378],{"class":282},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[51,107380,107381],{"class":53,"line":420},[51,107382,3480],{"emptyLinePlaceholder":1192},[51,107384,107385],{"class":53,"line":429},[51,107386,107387],{"class":282},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[51,107389,107390],{"class":53,"line":434},[51,107391,107392],{"class":282},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[51,107394,107395],{"class":53,"line":448},[51,107396,107397],{"class":282},"        \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",[51,107399,107400],{"class":53,"line":462},[51,107401,107402],{"class":282},"      \u003C\u002Fbody>\n",[51,107404,107405],{"class":53,"line":470},[51,107406,102331],{"class":282},[51,107408,107409],{"class":53,"line":2783},[51,107410,102336],{"class":282},[51,107412,107413],{"class":53,"line":2788},[51,107414,3480],{"emptyLinePlaceholder":1192},[51,107416,107417],{"class":53,"line":2817},[51,107418,107419],{"class":282},"  \u003Cactuator>\n",[51,107421,107422],{"class":53,"line":2822},[51,107423,107424],{"class":282},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[51,107426,107427],{"class":53,"line":2839},[51,107428,107429],{"class":282},"  \u003C\u002Factuator>\n",[51,107431,107432],{"class":53,"line":2844},[51,107433,102341],{"class":282},[51,107435,107436],{"class":53,"line":2849},[51,107437,96662],{"class":282},[51,107439,107440],{"class":53,"line":2854},[51,107441,3480],{"emptyLinePlaceholder":1192},[51,107443,107444],{"class":53,"line":2868},[51,107445,3480],{"emptyLinePlaceholder":1192},[51,107447,107448,107450,107452,107454,107456],{"class":53,"line":2873},[51,107449,32911],{"class":64},[51,107451,151],{"class":68},[51,107453,102362],{"class":72},[51,107455,96650],{"class":175},[51,107457,4816],{"class":72},[51,107459,107460,107462,107464,107466,107468],{"class":53,"line":3657},[51,107461,102371],{"class":72},[51,107463,108],{"class":64},[51,107465,102376],{"class":72},[51,107467,102278],{"class":175},[51,107469,90],{"class":72},[51,107471,107472,107474,107476],{"class":53,"line":3671},[51,107473,102385],{"class":72},[51,107475,108],{"class":64},[51,107477,102390],{"class":72},[51,107479,107480],{"class":53,"line":3679},[51,107481,3480],{"emptyLinePlaceholder":1192},[51,107483,107484,107486,107488,107490],{"class":53,"line":3684},[51,107485,32263],{"class":175},[51,107487,73],{"class":72},[51,107489,102403],{"class":282},[51,107491,102406],{"class":72},[51,107493,107494,107496,107498,107500],{"class":53,"line":3690},[51,107495,32263],{"class":175},[51,107497,73],{"class":72},[51,107499,102415],{"class":282},[51,107501,102418],{"class":72},[51,107503,107504,107506,107508,107510],{"class":53,"line":3696},[51,107505,32263],{"class":175},[51,107507,73],{"class":72},[51,107509,102427],{"class":282},[51,107511,102430],{"class":72},[51,107513,107514],{"class":53,"line":3701},[51,107515,3480],{"emptyLinePlaceholder":1192},[51,107517,107518,107520,107523,107525,107527],{"class":53,"line":8910},[51,107519,4178],{"class":64},[51,107521,107522],{"class":72}," model.nu ",[51,107524,21910],{"class":64},[51,107526,26082],{"class":175},[51,107528,4816],{"class":72},[51,107530,107531,107533,107535,107537,107540],{"class":53,"line":8934},[51,107532,104396],{"class":64},[51,107534,104399],{"class":175},[51,107536,73],{"class":72},[51,107538,107539],{"class":282},"\"expected exactly one actuator\"",[51,107541,90],{"class":72},[51,107543,107544],{"class":53,"line":8939},[51,107545,3480],{"emptyLinePlaceholder":1192},[51,107547,107548,107550,107552,107554,107556,107558,107561],{"class":53,"line":8945},[51,107549,4278],{"class":64},[51,107551,32580],{"class":72},[51,107553,27007],{"class":64},[51,107555,33407],{"class":175},[51,107557,73],{"class":72},[51,107559,107560],{"class":175},"2000",[51,107562,31750],{"class":72},[51,107564,107565,107568,107570,107572,107574],{"class":53,"line":8972},[51,107566,107567],{"class":72},"        t ",[51,107569,108],{"class":64},[51,107571,32580],{"class":72},[51,107573,1702],{"class":64},[51,107575,107576],{"class":72}," model.opt.timestep\n",[51,107578,107579,107582,107584,107586,107588,107591,107593,107596,107598,107600,107603,107605,107607,107609],{"class":53,"line":8977},[51,107580,107581],{"class":72},"        data.ctrl[",[51,107583,176],{"class":175},[51,107585,5517],{"class":72},[51,107587,108],{"class":64},[51,107589,107590],{"class":175}," 1.5",[51,107592,7480],{"class":64},[51,107594,107595],{"class":72}," math.sin(",[51,107597,106224],{"class":175},[51,107599,7480],{"class":64},[51,107601,107602],{"class":72}," math.pi ",[51,107604,1702],{"class":64},[51,107606,62831],{"class":175},[51,107608,7480],{"class":64},[51,107610,107611],{"class":72}," t)\n",[51,107613,107614],{"class":53,"line":8983},[51,107615,102480],{"class":72},[51,107617,107618],{"class":53,"line":8995},[51,107619,3480],{"emptyLinePlaceholder":1192},[51,107621,107622,107624,107626,107629],{"class":53,"line":9007},[51,107623,32263],{"class":175},[51,107625,73],{"class":72},[51,107627,107628],{"class":282},"\"time:\"",[51,107630,102442],{"class":72},[51,107632,107633,107635,107637,107640,107642,107644],{"class":53,"line":9019},[51,107634,32263],{"class":175},[51,107636,73],{"class":72},[51,107638,107639],{"class":282},"\"joint qpos:\"",[51,107641,105894],{"class":72},[51,107643,1543],{"class":175},[51,107645,31461],{"class":72},[51,107647,107648,107650,107652,107655,107657,107659],{"class":53,"line":10678},[51,107649,32263],{"class":175},[51,107651,73],{"class":72},[51,107653,107654],{"class":282},"\"joint qvel:\"",[51,107656,105910],{"class":72},[51,107658,1543],{"class":175},[51,107660,31461],{"class":72},[51,107662,107663,107665,107667,107670],{"class":53,"line":10703},[51,107664,32263],{"class":175},[51,107666,73],{"class":72},[51,107668,107669],{"class":282},"\"last ctrl:\"",[51,107671,107672],{"class":72},", data.ctrl.copy())\n",[51,107674,107675],{"class":53,"line":10726},[51,107676,3480],{"emptyLinePlaceholder":1192},[51,107678,107679],{"class":53,"line":10750},[51,107680,3480],{"emptyLinePlaceholder":1192},[51,107682,107683,107685,107687,107689,107691],{"class":53,"line":10755},[51,107684,2633],{"class":64},[51,107686,32184],{"class":175},[51,107688,102523],{"class":64},[51,107690,102526],{"class":282},[51,107692,4816],{"class":72},[51,107694,107695],{"class":53,"line":10760},[51,107696,102533],{"class":72},[40,107698,104534],{},[29,107700,107702],{"className":24785,"code":107701,"language":24787,"meta":35,"style":35},"touch ch4_joint_motor.py\n",[37,107703,107704],{"__ignoreMap":35},[51,107705,107706,107708],{"class":53,"line":54},[51,107707,102247],{"class":68},[51,107709,107710],{"class":282}," ch4_joint_motor.py\n",[40,107712,103265],{},[29,107714,107716],{"className":24785,"code":107715,"language":24787,"meta":35,"style":35},"python ch4_joint_motor.py\n",[37,107717,107718],{"__ignoreMap":35},[51,107719,107720,107722],{"class":53,"line":54},[51,107721,31344],{"class":68},[51,107723,107710],{"class":282},[1233,107725,102536],{"id":102536},[40,107727,107728],{},"检查 actuator 数量：",[29,107730,107732],{"className":31342,"code":107731,"language":31344,"meta":35,"style":35},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[37,107733,107734,107746],{"__ignoreMap":35},[51,107735,107736,107738,107740,107742,107744],{"class":53,"line":54},[51,107737,2633],{"class":64},[51,107739,107522],{"class":72},[51,107741,21910],{"class":64},[51,107743,26082],{"class":175},[51,107745,4816],{"class":72},[51,107747,107748,107750,107752,107754,107756],{"class":53,"line":61},[51,107749,104859],{"class":64},[51,107751,104399],{"class":175},[51,107753,73],{"class":72},[51,107755,107539],{"class":282},[51,107757,90],{"class":72},[40,107759,107760,107762,107763,107765],{},[37,107761,103122],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[37,107764,102040],{}," 长度应该是 1。",[40,107767,107768],{},"产生正弦控制信号：",[29,107770,107772],{"className":31342,"code":107771,"language":31344,"meta":35,"style":35},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[37,107773,107774],{"__ignoreMap":35},[51,107775,107776,107778,107780,107782,107784,107786,107788,107790,107792,107794,107796,107798,107800,107802],{"class":53,"line":54},[51,107777,106835],{"class":72},[51,107779,176],{"class":175},[51,107781,5517],{"class":72},[51,107783,108],{"class":64},[51,107785,107590],{"class":175},[51,107787,7480],{"class":64},[51,107789,107595],{"class":72},[51,107791,106224],{"class":175},[51,107793,7480],{"class":64},[51,107795,107602],{"class":72},[51,107797,1702],{"class":64},[51,107799,62831],{"class":175},[51,107801,7480],{"class":64},[51,107803,107611],{"class":72},[40,107805,107806],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[40,107808,102637],{},[29,107810,107811],{"className":31342,"code":105469,"language":31344,"meta":35,"style":35},[37,107812,107813],{"__ignoreMap":35},[51,107814,107815],{"class":53,"line":54},[51,107816,105469],{"class":72},[40,107818,107819],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[1233,107821,102672],{"id":102672},[29,107823,107825],{"className":31342,"code":107824,"language":31344,"meta":35,"style":35},"import math\n",[37,107826,107827],{"__ignoreMap":35},[51,107828,107829,107831],{"class":53,"line":54},[51,107830,31356],{"class":64},[51,107832,107314],{"class":72},[40,107834,107835,107836,101982,107839,107842],{},"导入 Python 标准库里的数学模块。后面要用 ",[37,107837,107838],{},"math.sin",[37,107840,107841],{},"math.pi"," 生成周期变化的控制信号。",[29,107844,107845],{"className":31342,"code":104650,"language":31344,"meta":35,"style":35},[37,107846,107847,107853],{"__ignoreMap":35},[51,107848,107849,107851],{"class":53,"line":54},[51,107850,31356],{"class":64},[51,107852,102265],{"class":72},[51,107854,107855,107857,107859,107861],{"class":53,"line":61},[51,107856,31356],{"class":64},[51,107858,32344],{"class":72},[51,107860,32347],{"class":64},[51,107862,32350],{"class":72},[40,107864,107865],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[29,107867,107868],{"className":54031,"code":107151,"language":54033,"meta":35,"style":35},[37,107869,107870],{"__ignoreMap":35},[51,107871,107872,107874,107876,107878,107880,107882,107884,107886,107888,107890,107892,107894,107896,107898,107900],{"class":53,"line":54},[51,107873,2154],{"class":72},[51,107875,103920],{"class":52264},[51,107877,15882],{"class":68},[51,107879,108],{"class":72},[51,107881,106983],{"class":282},[51,107883,54788],{"class":68},[51,107885,108],{"class":72},[51,107887,106983],{"class":282},[51,107889,106992],{"class":68},[51,107891,108],{"class":72},[51,107893,106997],{"class":282},[51,107895,107180],{"class":68},[51,107897,108],{"class":72},[51,107899,107185],{"class":282},[51,107901,102108],{"class":72},[40,107903,107904,107905,107907,107908,107910,107911,107913],{},"这行定义关节。",[37,107906,106804],{}," 表示旋转关节。",[37,107909,107203],{}," 表示绕 y 轴旋转。",[37,107912,107209],{}," 表示有一点阻尼，运动不会完全无损耗。",[29,107915,107917],{"className":54031,"code":107916,"language":54033,"meta":35,"style":35},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[37,107918,107919],{"__ignoreMap":35},[51,107920,107921,107923,107925,107927,107929,107932,107934,107936,107939,107942,107944,107947,107949,107951,107953,107955,107957,107960],{"class":53,"line":54},[51,107922,2154],{"class":72},[51,107924,102084],{"class":52264},[51,107926,15882],{"class":68},[51,107928,108],{"class":72},[51,107930,107931],{"class":282},"\"link_geom\"",[51,107933,54788],{"class":68},[51,107935,108],{"class":72},[51,107937,107938],{"class":282},"\"capsule\"",[51,107940,107941],{"class":68}," fromto",[51,107943,108],{"class":72},[51,107945,107946],{"class":282},"\"0 0 0 0 0 0.5\"",[51,107948,102100],{"class":68},[51,107950,108],{"class":72},[51,107952,104742],{"class":282},[51,107954,102965],{"class":68},[51,107956,108],{"class":72},[51,107958,107959],{"class":282},"\"0.5\"",[51,107961,102108],{"class":72},[40,107963,107964,107965,107967,107968,107970,107971,107974,107975,29349,107978,107980],{},"这行定义摆杆的形状。",[37,107966,104129],{}," 是胶囊体，适合表示杆子。",[37,107969,104140],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[37,107972,107973],{},"(0,0,0)"," 延伸到 ",[37,107976,107977],{},"(0,0,0.5)",[37,107979,104134],{}," 是半径。",[29,107982,107983],{"className":54031,"code":107217,"language":54033,"meta":35,"style":35},[37,107984,107985],{"__ignoreMap":35},[51,107986,107987,107989,107991,107993,107995,107997,107999,108001,108003,108005,108007,108009,108011,108013,108015,108017,108019,108021],{"class":53,"line":54},[51,107988,2154],{"class":72},[51,107990,107038],{"class":52264},[51,107992,15882],{"class":68},[51,107994,108],{"class":72},[51,107996,107045],{"class":282},[51,107998,107048],{"class":68},[51,108000,108],{"class":72},[51,108002,106983],{"class":282},[51,108004,107055],{"class":68},[51,108006,108],{"class":72},[51,108008,4755],{"class":282},[51,108010,107062],{"class":68},[51,108012,108],{"class":72},[51,108014,107067],{"class":282},[51,108016,107070],{"class":68},[51,108018,108],{"class":72},[51,108020,107075],{"class":282},[51,108022,102108],{"class":72},[40,108024,108025,108026,108028,108029,108032,108033,108035],{},"这行定义电机。它作用在 ",[37,108027,106804],{}," 关节上。",[37,108030,108031],{},"gear"," 可以理解成放大倍数。",[37,108034,106819],{}," 限制控制输入范围。",[29,108037,108038],{"className":31342,"code":107731,"language":31344,"meta":35,"style":35},[37,108039,108040,108052],{"__ignoreMap":35},[51,108041,108042,108044,108046,108048,108050],{"class":53,"line":54},[51,108043,2633],{"class":64},[51,108045,107522],{"class":72},[51,108047,21910],{"class":64},[51,108049,26082],{"class":175},[51,108051,4816],{"class":72},[51,108053,108054,108056,108058,108060,108062],{"class":53,"line":61},[51,108055,104859],{"class":64},[51,108057,104399],{"class":175},[51,108059,73],{"class":72},[51,108061,107539],{"class":282},[51,108063,90],{"class":72},[40,108065,108066,108068],{},[37,108067,103122],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[29,108070,108072],{"className":31342,"code":108071,"language":31344,"meta":35,"style":35},"for step in range(2000):\n",[37,108073,108074],{"__ignoreMap":35},[51,108075,108076,108078,108080,108082,108084,108086,108088],{"class":53,"line":54},[51,108077,4102],{"class":64},[51,108079,32580],{"class":72},[51,108081,27007],{"class":64},[51,108083,33407],{"class":175},[51,108085,73],{"class":72},[51,108087,107560],{"class":175},[51,108089,31750],{"class":72},[40,108091,108092,108093,108095,108096,108099],{},"循环 2000 步。这里没有用 ",[37,108094,2234],{},"，而是用 ",[37,108097,108098],{},"step","，因为后面要用当前步数计算时间。",[29,108101,108103],{"className":31342,"code":108102,"language":31344,"meta":35,"style":35},"t = step * model.opt.timestep\n",[37,108104,108105],{"__ignoreMap":35},[51,108106,108107,108110,108112,108114,108116],{"class":53,"line":54},[51,108108,108109],{"class":72},"t ",[51,108111,108],{"class":64},[51,108113,32580],{"class":72},[51,108115,1702],{"class":64},[51,108117,107576],{"class":72},[40,108119,108120],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[29,108122,108123],{"className":31342,"code":107771,"language":31344,"meta":35,"style":35},[37,108124,108125],{"__ignoreMap":35},[51,108126,108127,108129,108131,108133,108135,108137,108139,108141,108143,108145,108147,108149,108151,108153],{"class":53,"line":54},[51,108128,106835],{"class":72},[51,108130,176],{"class":175},[51,108132,5517],{"class":72},[51,108134,108],{"class":64},[51,108136,107590],{"class":175},[51,108138,7480],{"class":64},[51,108140,107595],{"class":72},[51,108142,106224],{"class":175},[51,108144,7480],{"class":64},[51,108146,107602],{"class":72},[51,108148,1702],{"class":64},[51,108150,62831],{"class":175},[51,108152,7480],{"class":64},[51,108154,107611],{"class":72},[40,108156,108157],{},"这行给电机输入一个正弦波。拆开看：",[19,108159,108160,108166,108172],{},[22,108161,108162,108165],{},[37,108163,108164],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[22,108167,108168,108171],{},[37,108169,108170],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[22,108173,108174,108177],{},[37,108175,108176],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[40,108179,108180],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[29,108182,108184],{"className":31342,"code":108183,"language":31344,"meta":35,"style":35},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[37,108185,108186],{"__ignoreMap":35},[51,108187,108188,108190,108192,108194,108196,108198],{"class":53,"line":54},[51,108189,31379],{"class":175},[51,108191,73],{"class":72},[51,108193,107639],{"class":282},[51,108195,105894],{"class":72},[51,108197,1543],{"class":175},[51,108199,31461],{"class":72},[40,108201,108202,108203,108205],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[37,108204,102034],{}," 只有一个数。",[14,108207,103280],{"id":103279},[40,108209,108210],{},"输出类似:",[29,108212,108215],{"className":108213,"code":108214,"language":34,"meta":35},[32],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[37,108216,108214],{"__ignoreMap":35},[40,108218,108219,108220,108222],{},"这里 ",[37,108221,107090],{}," 是电机输入。",[40,108224,108225,108228,108229,108232],{},[37,108226,108227],{},"joint qpos"," 是关节角度，单位通常是弧度。",[37,108230,108231],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[40,108234,108235],{},"角度单位提示：",[29,108237,108240],{"className":108238,"code":108239,"language":34,"meta":35},[32],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[37,108241,108239],{"__ignoreMap":35},[40,108243,108244,108245,108247,108248,108250],{},"如果你看到 ",[37,108246,104994],{}," 是 ",[37,108249,36293],{},"，大约就是 28.6 度。",[14,108252,103312],{"id":103311},[19,108254,108255,108262,108265,108272,108275,108283,108291],{},[22,108256,103375,108257,103378,108259,29349],{},[37,108258,107275],{},[37,108260,108261],{},"gear=\"5\"",[22,108263,108264],{},"重新运行，观察关节运动是否更剧烈。",[22,108266,103375,108267,103378,108269,29349],{},[37,108268,106819],{},[37,108270,108271],{},"-0.2 0.2",[22,108273,108274],{},"重新运行，观察控制能力是否变弱。",[22,108276,108277,108278,108280,108281,29349],{},"去掉 actuator，确认 ",[37,108279,103122],{}," 变成 ",[37,108282,176],{},[22,108284,103375,108285,103378,108287,108290],{},[37,108286,107209],{},[37,108288,108289],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[22,108292,103375,108293,103378,108295,108298],{},[37,108294,107203],{},[37,108296,108297],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108300,103417],{"id":103416},[1233,108302,108304],{"id":108303},"indexerror-index-0-is-out-of-bounds",[37,108305,108306],{},"IndexError: index 0 is out of bounds",[40,108308,108309,108310,108312],{},"原因是 ",[37,108311,106956],{},"，没有 actuator。",[1233,108314,108315],{"id":108315},"关节几乎不动",[40,108317,108318],{},"可能原因:",[19,108320,108321,108326,108330,108336],{},[22,108322,108323,108325],{},[37,108324,108031],{}," 太小",[22,108327,108328,108325],{},[37,108329,106819],{},[22,108331,108332,108335],{},[37,108333,108334],{},"damping"," 太大",[22,108337,108338],{},"重力方向导致运动不明显",[1233,108340,108341],{"id":108341},"模型编译失败",[40,108343,108344,108345,108347],{},"检查 actuator 引用的 ",[37,108346,107266],{}," 是否存在，joint 名称是否拼写一致。",[1233,108349,108351,108353],{"id":108350},"datactrl0-写了但没有效果",[37,108352,107090],{}," 写了但没有效果",[40,108355,103539],{},[19,108357,108358,108363,108366,108371,108376],{},[22,108359,108360,108362],{},[37,108361,103122],{}," 是否大于 0。",[22,108364,108365],{},"motor 是否引用了正确 joint。",[22,108367,108368,108370],{},[37,108369,108031],{}," 是否太小。",[22,108372,108373,108375],{},[37,108374,106819],{}," 是否把输入限制得太小。",[22,108377,108378],{},"body 是否真的有可动 joint。",[1233,108380,108381],{"id":108381},"控制输入超过范围会怎样",[40,108383,108384],{},"如果设置了：",[29,108386,108388],{"className":54031,"code":108387,"language":54033,"meta":35,"style":35},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[37,108389,108390],{"__ignoreMap":35},[51,108391,108392],{"class":53,"line":54},[51,108393,108387],{"class":72},[40,108395,108396],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[29,108398,108400],{"className":31342,"code":108399,"language":31344,"meta":35,"style":35},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[37,108401,108402,108422],{"__ignoreMap":35},[51,108403,108404,108407,108409,108412,108414,108416,108418,108420],{"class":53,"line":54},[51,108405,108406],{"class":72},"action ",[51,108408,108],{"class":64},[51,108410,108411],{"class":72}," np.clip(action, ",[51,108413,1778],{"class":64},[51,108415,106224],{"class":175},[51,108417,13397],{"class":72},[51,108419,106224],{"class":175},[51,108421,90],{"class":72},[51,108423,108424,108426,108428,108430,108432],{"class":53,"line":61},[51,108425,106835],{"class":72},[51,108427,176],{"class":175},[51,108429,5517],{"class":72},[51,108431,108],{"class":64},[51,108433,108434],{"class":72}," action\n",[14,108436,103571],{"id":103570},[40,108438,108439],{},"这一章建立了控制任务的基本形式：",[29,108441,108444],{"className":108442,"code":108443,"language":34,"meta":35},[32],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[37,108445,108443],{"__ignoreMap":35},[40,108447,108448],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1179,108450,108451],{},"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":35,"searchDepth":61,"depth":61,"links":108453},[108454,108455,108456,108461,108465,108466,108467,108475],{"id":101610,"depth":61,"text":101611},{"id":101733,"depth":61,"text":101734},{"id":102008,"depth":61,"text":102009,"children":108457},[108458,108459,108460],{"id":107097,"depth":93,"text":107098},{"id":107147,"depth":93,"text":107148},{"id":107213,"depth":93,"text":107214},{"id":102216,"depth":61,"text":102217,"children":108462},[108463,108464],{"id":102536,"depth":93,"text":102536},{"id":102672,"depth":93,"text":102672},{"id":103279,"depth":61,"text":103280},{"id":103311,"depth":61,"text":103312},{"id":103416,"depth":61,"text":103417,"children":108468},[108469,108470,108471,108472,108474],{"id":108303,"depth":93,"text":108306},{"id":108315,"depth":93,"text":108315},{"id":108341,"depth":93,"text":108341},{"id":108350,"depth":93,"text":108473},"data.ctrl[0] 写了但没有效果",{"id":108381,"depth":93,"text":108381},{"id":103570,"depth":61,"text":103571},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106785,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108482,"title":108483,"body":108484,"description":35,"extension":1190,"meta":110393,"navigation":1192,"path":110394,"seo":110395,"stem":110396,"__hash__":110397},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108485,"toc":110369},[108486,108489,108491,108494,108502,108505,108522,108525,108550,108553,108599,108601,108603,108658,108660,108679,108681,108724,108727,108744,108747,108763,108773,108780,108782,108785,108788,108822,108825,108873,108877,108880,108894,108903,108907,108910,108935,108938,108942,108955,108958,108964,108967,108982,108984,108987,109247,109249,109261,109264,109576,109578,109590,109592,109595,109610,109615,109618,109640,109643,109646,109680,109683,109687,109698,109701,109718,109721,109735,109742,109762,109769,109783,109786,109798,109813,109833,109836,109858,109861,109865,109880,109891,109906,109909,109939,109955,109984,109992,110016,110019,110037,110047,110059,110066,110075,110081,110090,110093,110095,110104,110107,110122,110124,110127,110138,110141,110152,110155,110173,110175,110192,110195,110223,110225,110229,110232,110262,110268,110271,110275,110283,110286,110288,110309,110312,110315,110331,110334,110350,110352,110355,110366],[10,108487,108483],{"id":108488},"_5viewer-可视化与-renderer-离屏渲染",[14,108490,101611],{"id":101610},[40,108492,108493],{},"本章掌握两类可视化方式:",[19,108495,108496,108499],{},[22,108497,108498],{},"交互式 viewer: 适合人工观察仿真",[22,108500,108501],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[40,108503,108504],{},"使用官方接口:",[29,108506,108508],{"className":31342,"code":108507,"language":31344,"meta":35,"style":35},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[37,108509,108510,108517],{"__ignoreMap":35},[51,108511,108512,108514],{"class":53,"line":54},[51,108513,31356],{"class":64},[51,108515,108516],{"class":72}," mujoco.viewer\n",[51,108518,108519],{"class":53,"line":61},[51,108520,108521],{"class":72},"mujoco.viewer.launch_passive(model, data)\n",[40,108523,108524],{},"以及:",[29,108526,108528],{"className":31342,"code":108527,"language":31344,"meta":35,"style":35},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[37,108529,108530,108540],{"__ignoreMap":35},[51,108531,108532,108535,108537],{"class":53,"line":54},[51,108533,108534],{"class":72},"renderer ",[51,108536,108],{"class":64},[51,108538,108539],{"class":72}," mujoco.Renderer(model)\n",[51,108541,108542,108545,108547],{"class":53,"line":61},[51,108543,108544],{"class":72},"image ",[51,108546,108],{"class":64},[51,108548,108549],{"class":72}," renderer.render()\n",[40,108551,108552],{},"新手建议先理解二者区别：",[1393,108554,108555,108571],{},[1396,108556,108557],{},[1399,108558,108559,108562,108565,108568],{},[1402,108560,108561],{"align":24699},"工具",[1402,108563,108564],{"align":24699},"用途",[1402,108566,108567],{"align":24699},"是否打开窗口",[1402,108569,108570],{"align":24699},"常见场景",[1439,108572,108573,108586],{},[1399,108574,108575,108578,108581,108583],{},[1444,108576,108577],{"align":24699},"Viewer",[1444,108579,108580],{"align":24699},"人眼实时观察仿真",[1444,108582,105629],{"align":24699},[1444,108584,108585],{"align":24699},"调试模型、看控制效果",[1399,108587,108588,108591,108594,108596],{},[1444,108589,108590],{"align":24699},"Renderer",[1444,108592,108593],{"align":24699},"生成图像数组",[1444,108595,105642],{"align":24699},[1444,108597,108598],{"align":24699},"保存图片、训练视觉策略、服务器批量采集",[14,108600,101734],{"id":101733},[40,108602,101737],{},[29,108604,108606],{"className":24785,"code":108605,"language":24787,"meta":35,"style":35},"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",[37,108607,108608,108620,108630,108638,108646],{"__ignoreMap":35},[51,108609,108610,108612,108614,108616,108618],{"class":53,"line":54},[51,108611,25540],{"class":68},[51,108613,27279],{"class":282},[51,108615,24797],{"class":282},[51,108617,27364],{"class":175},[51,108619,25642],{"class":175},[51,108621,108622,108624,108626,108628],{"class":53,"line":61},[51,108623,101772],{"class":282},[51,108625,101775],{"class":282},[51,108627,101778],{"class":282},[51,108629,25642],{"class":175},[51,108631,108632,108634,108636],{"class":53,"line":93},[51,108633,101785],{"class":282},[51,108635,101788],{"class":282},[51,108637,25642],{"class":175},[51,108639,108640,108642,108644],{"class":53,"line":99},[51,108641,101795],{"class":282},[51,108643,101798],{"class":282},[51,108645,25642],{"class":175},[51,108647,108648,108650,108652,108654,108656],{"class":53,"line":120},[51,108649,101805],{"class":282},[51,108651,101808],{"class":282},[51,108653,101811],{"class":282},[51,108655,101814],{"class":282},[51,108657,103480],{"class":282},[40,108659,103783],{},[29,108661,108663],{"className":24785,"code":108662,"language":24787,"meta":35,"style":35},"pip install \"mujoco>=2.3\" numpy pillow\n",[37,108664,108665],{"__ignoreMap":35},[51,108666,108667,108669,108671,108673,108676],{"class":53,"line":54},[51,108668,24794],{"class":68},[51,108670,24797],{"class":282},[51,108672,101894],{"class":282},[51,108674,108675],{"class":282}," numpy",[51,108677,108678],{"class":282}," pillow\n",[40,108680,103800],{},[29,108682,108684],{"className":24785,"code":108683,"language":24787,"meta":35,"style":35},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[37,108685,108686,108703,108712],{"__ignoreMap":35},[51,108687,108688,108690,108692,108694,108697,108699,108701],{"class":53,"line":54},[51,108689,31294],{"class":68},[51,108691,30140],{"class":282},[51,108693,26079],{"class":175},[51,108695,108696],{"class":282}," mujoco-render",[51,108698,101939],{"class":282},[51,108700,101942],{"class":175},[51,108702,101945],{"class":175},[51,108704,108705,108707,108709],{"class":53,"line":61},[51,108706,31294],{"class":68},[51,108708,101952],{"class":282},[51,108710,108711],{"class":282}," mujoco-render\n",[51,108713,108714,108716,108718,108720,108722],{"class":53,"line":93},[51,108715,24794],{"class":68},[51,108717,24797],{"class":282},[51,108719,101894],{"class":282},[51,108721,108675],{"class":282},[51,108723,108678],{"class":282},[40,108725,108726],{},"离屏渲染后端:",[29,108728,108730],{"className":24785,"code":108729,"language":24787,"meta":35,"style":35},"export MUJOCO_GL=egl\n",[37,108731,108732],{"__ignoreMap":35},[51,108733,108734,108736,108739,108741],{"class":53,"line":54},[51,108735,26006],{"class":64},[51,108737,108738],{"class":72}," MUJOCO_GL",[51,108740,108],{"class":64},[51,108742,108743],{"class":72},"egl\n",[40,108745,108746],{},"或:",[29,108748,108750],{"className":24785,"code":108749,"language":24787,"meta":35,"style":35},"export MUJOCO_GL=osmesa\n",[37,108751,108752],{"__ignoreMap":35},[51,108753,108754,108756,108758,108760],{"class":53,"line":54},[51,108755,26006],{"class":64},[51,108757,108738],{"class":72},[51,108759,108],{"class":64},[51,108761,108762],{"class":72},"osmesa\n",[40,108764,108765,108766,108769,108770,29349],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[37,108767,108768],{},"egl"," 失败，再尝试 ",[37,108771,108772],{},"osmesa",[40,108774,108775,108776,108779],{},"如果你在本机桌面环境运行，通常先不要设置 ",[37,108777,108778],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108781,102009],{"id":102008},[40,108783,108784],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[40,108786,108787],{},"典型 viewer 流程:",[29,108789,108791],{"className":31342,"code":108790,"language":31344,"meta":35,"style":35},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[37,108792,108793,108806,108813,108817],{"__ignoreMap":35},[51,108794,108795,108798,108801,108803],{"class":53,"line":54},[51,108796,108797],{"class":64},"with",[51,108799,108800],{"class":72}," mujoco.viewer.launch_passive(model, data) ",[51,108802,32347],{"class":64},[51,108804,108805],{"class":72}," viewer:\n",[51,108807,108808,108810],{"class":53,"line":61},[51,108809,3331],{"class":64},[51,108811,108812],{"class":72}," viewer.is_running():\n",[51,108814,108815],{"class":53,"line":93},[51,108816,102480],{"class":72},[51,108818,108819],{"class":53,"line":99},[51,108820,108821],{"class":72},"        viewer.sync()\n",[40,108823,108824],{},"典型 renderer 流程:",[29,108826,108828],{"className":31342,"code":108827,"language":31344,"meta":35,"style":35},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[37,108829,108830,108856,108860,108865],{"__ignoreMap":35},[51,108831,108832,108834,108836,108839,108841,108843,108845,108847,108849,108851,108854],{"class":53,"line":54},[51,108833,108534],{"class":72},[51,108835,108],{"class":64},[51,108837,108838],{"class":72}," mujoco.Renderer(model, ",[51,108840,25945],{"class":78},[51,108842,108],{"class":64},[51,108844,43306],{"class":175},[51,108846,13397],{"class":72},[51,108848,25941],{"class":78},[51,108850,108],{"class":64},[51,108852,108853],{"class":175},"640",[51,108855,90],{"class":72},[51,108857,108858],{"class":53,"line":61},[51,108859,105469],{"class":72},[51,108861,108862],{"class":53,"line":93},[51,108863,108864],{"class":72},"renderer.update_scene(data)\n",[51,108866,108867,108869,108871],{"class":53,"line":99},[51,108868,108544],{"class":72},[51,108870,108],{"class":64},[51,108872,108549],{"class":72},[1233,108874,108876],{"id":108875},"viewer-的同步逻辑","viewer 的同步逻辑",[40,108878,108879],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[29,108881,108883],{"className":31342,"code":108882,"language":31344,"meta":35,"style":35},"mujoco.mj_step(model, data)\nviewer.sync()\n",[37,108884,108885,108889],{"__ignoreMap":35},[51,108886,108887],{"class":53,"line":54},[51,108888,105469],{"class":72},[51,108890,108891],{"class":53,"line":61},[51,108892,108893],{"class":72},"viewer.sync()\n",[40,108895,108896,108898,108899,108902],{},[37,108897,102179],{}," 负责算物理，",[37,108900,108901],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[1233,108904,108906],{"id":108905},"为什么要-sleep","为什么要 sleep",[40,108908,108909],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[29,108911,108913],{"className":31342,"code":108912,"language":31344,"meta":35,"style":35},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[37,108914,108915],{"__ignoreMap":35},[51,108916,108917,108920,108922,108925,108927,108930,108932],{"class":53,"line":54},[51,108918,108919],{"class":72},"sleep_time ",[51,108921,108],{"class":64},[51,108923,108924],{"class":72}," model.opt.timestep ",[51,108926,1778],{"class":64},[51,108928,108929],{"class":72}," (time.time() ",[51,108931,1778],{"class":64},[51,108933,108934],{"class":72}," step_start)\n",[40,108936,108937],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[1233,108939,108941],{"id":108940},"renderer-输出是什么","renderer 输出是什么",[29,108943,108945],{"className":31342,"code":108944,"language":31344,"meta":35,"style":35},"image = renderer.render()\n",[37,108946,108947],{"__ignoreMap":35},[51,108948,108949,108951,108953],{"class":53,"line":54},[51,108950,108544],{"class":72},[51,108952,108],{"class":64},[51,108954,108549],{"class":72},[40,108956,108957],{},"得到的是 NumPy 数组，形状通常是：",[29,108959,108962],{"className":108960,"code":108961,"language":34,"meta":35},[32],"(height, width, 3)\n",[37,108963,108961],{"__ignoreMap":35},[40,108965,108966],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[29,108968,108970],{"className":31342,"code":108969,"language":31344,"meta":35,"style":35},"Image.fromarray(image).save(\"render_output.png\")\n",[37,108971,108972],{"__ignoreMap":35},[51,108973,108974,108977,108980],{"class":53,"line":54},[51,108975,108976],{"class":72},"Image.fromarray(image).save(",[51,108978,108979],{"class":282},"\"render_output.png\"",[51,108981,90],{"class":72},[14,108983,102217],{"id":102216},[40,108985,108986],{},"交互式 Viewer:",[29,108988,108990],{"className":31342,"code":108989,"language":31344,"meta":35,"style":35},"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",[37,108991,108992,108998,109002,109008,109014,109018,109022,109030,109035,109039,109043,109047,109052,109057,109061,109065,109069,109074,109078,109082,109086,109090,109094,109098,109110,109122,109130,109134,109144,109164,109174,109179,109184,109188,109205,109218,109223,109227,109231,109243],{"__ignoreMap":35},[51,108993,108994,108996],{"class":53,"line":54},[51,108995,31356],{"class":64},[51,108997,32793],{"class":72},[51,108999,109000],{"class":53,"line":61},[51,109001,3480],{"emptyLinePlaceholder":1192},[51,109003,109004,109006],{"class":53,"line":93},[51,109005,31356],{"class":64},[51,109007,102265],{"class":72},[51,109009,109010,109012],{"class":53,"line":99},[51,109011,31356],{"class":64},[51,109013,108516],{"class":72},[51,109015,109016],{"class":53,"line":120},[51,109017,3480],{"emptyLinePlaceholder":1192},[51,109019,109020],{"class":53,"line":129},[51,109021,3480],{"emptyLinePlaceholder":1192},[51,109023,109024,109026,109028],{"class":53,"line":206},[51,109025,102278],{"class":175},[51,109027,14526],{"class":64},[51,109029,102283],{"class":282},[51,109031,109032],{"class":53,"line":212},[51,109033,109034],{"class":282},"\u003Cmujoco model=\"viewer_demo\">\n",[51,109036,109037],{"class":53,"line":227},[51,109038,102293],{"class":282},[51,109040,109041],{"class":53,"line":370},[51,109042,3480],{"emptyLinePlaceholder":1192},[51,109044,109045],{"class":53,"line":387},[51,109046,102302],{"class":282},[51,109048,109049],{"class":53,"line":404},[51,109050,109051],{"class":282},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[51,109053,109054],{"class":53,"line":415},[51,109055,109056],{"class":282},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[51,109058,109059],{"class":53,"line":420},[51,109060,3480],{"emptyLinePlaceholder":1192},[51,109062,109063],{"class":53,"line":429},[51,109064,102316],{"class":282},[51,109066,109067],{"class":53,"line":434},[51,109068,102321],{"class":282},[51,109070,109071],{"class":53,"line":448},[51,109072,109073],{"class":282},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[51,109075,109076],{"class":53,"line":462},[51,109077,102331],{"class":282},[51,109079,109080],{"class":53,"line":470},[51,109081,102336],{"class":282},[51,109083,109084],{"class":53,"line":2783},[51,109085,102341],{"class":282},[51,109087,109088],{"class":53,"line":2788},[51,109089,96662],{"class":282},[51,109091,109092],{"class":53,"line":2817},[51,109093,3480],{"emptyLinePlaceholder":1192},[51,109095,109096],{"class":53,"line":2822},[51,109097,3480],{"emptyLinePlaceholder":1192},[51,109099,109100,109102,109104,109106,109108],{"class":53,"line":2839},[51,109101,32911],{"class":64},[51,109103,151],{"class":68},[51,109105,102362],{"class":72},[51,109107,96650],{"class":175},[51,109109,4816],{"class":72},[51,109111,109112,109114,109116,109118,109120],{"class":53,"line":2844},[51,109113,102371],{"class":72},[51,109115,108],{"class":64},[51,109117,102376],{"class":72},[51,109119,102278],{"class":175},[51,109121,90],{"class":72},[51,109123,109124,109126,109128],{"class":53,"line":2849},[51,109125,102385],{"class":72},[51,109127,108],{"class":64},[51,109129,102390],{"class":72},[51,109131,109132],{"class":53,"line":2854},[51,109133,3480],{"emptyLinePlaceholder":1192},[51,109135,109136,109138,109140,109142],{"class":53,"line":2868},[51,109137,35142],{"class":64},[51,109139,108800],{"class":72},[51,109141,32347],{"class":64},[51,109143,108805],{"class":72},[51,109145,109146,109149,109152,109154,109157,109159,109162],{"class":53,"line":2873},[51,109147,109148],{"class":64},"        while",[51,109150,109151],{"class":72}," viewer.is_running() ",[51,109153,31426],{"class":64},[51,109155,109156],{"class":72}," data.time ",[51,109158,2154],{"class":64},[51,109160,109161],{"class":175}," 5.0",[51,109163,4816],{"class":72},[51,109165,109166,109169,109171],{"class":53,"line":3657},[51,109167,109168],{"class":72},"            step_start ",[51,109170,108],{"class":64},[51,109172,109173],{"class":72}," time.time()\n",[51,109175,109176],{"class":53,"line":3671},[51,109177,109178],{"class":72},"            mujoco.mj_step(model, data)\n",[51,109180,109181],{"class":53,"line":3679},[51,109182,109183],{"class":72},"            viewer.sync()\n",[51,109185,109186],{"class":53,"line":3684},[51,109187,3480],{"emptyLinePlaceholder":1192},[51,109189,109190,109193,109195,109197,109199,109201,109203],{"class":53,"line":3690},[51,109191,109192],{"class":72},"            sleep_time ",[51,109194,108],{"class":64},[51,109196,108924],{"class":72},[51,109198,1778],{"class":64},[51,109200,108929],{"class":72},[51,109202,1778],{"class":64},[51,109204,108934],{"class":72},[51,109206,109207,109209,109212,109214,109216],{"class":53,"line":3696},[51,109208,5716],{"class":64},[51,109210,109211],{"class":72}," sleep_time ",[51,109213,972],{"class":64},[51,109215,5169],{"class":175},[51,109217,4816],{"class":72},[51,109219,109220],{"class":53,"line":3701},[51,109221,109222],{"class":72},"                time.sleep(sleep_time)\n",[51,109224,109225],{"class":53,"line":8910},[51,109226,3480],{"emptyLinePlaceholder":1192},[51,109228,109229],{"class":53,"line":8934},[51,109230,3480],{"emptyLinePlaceholder":1192},[51,109232,109233,109235,109237,109239,109241],{"class":53,"line":8939},[51,109234,2633],{"class":64},[51,109236,32184],{"class":175},[51,109238,102523],{"class":64},[51,109240,102526],{"class":282},[51,109242,4816],{"class":72},[51,109244,109245],{"class":53,"line":8945},[51,109246,102533],{"class":72},[40,109248,104534],{},[29,109250,109252],{"className":24785,"code":109251,"language":24787,"meta":35,"style":35},"touch ch5_viewer.py\n",[37,109253,109254],{"__ignoreMap":35},[51,109255,109256,109258],{"class":53,"line":54},[51,109257,102247],{"class":68},[51,109259,109260],{"class":282}," ch5_viewer.py\n",[40,109262,109263],{},"离屏 Renderer 保存图片:",[29,109265,109267],{"className":31342,"code":109266,"language":31344,"meta":35,"style":35},"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",[37,109268,109269,109281,109285,109291,109301,109305,109309,109317,109322,109326,109330,109334,109338,109343,109347,109351,109355,109359,109363,109367,109371,109375,109379,109383,109387,109399,109411,109419,109444,109448,109464,109468,109472,109487,109496,109500,109514,109519,109524,109528,109540,109552,109556,109560,109572],{"__ignoreMap":35},[51,109270,109271,109273,109276,109278],{"class":53,"line":54},[51,109272,31701],{"class":64},[51,109274,109275],{"class":72}," pathlib ",[51,109277,31356],{"class":64},[51,109279,109280],{"class":72}," Path\n",[51,109282,109283],{"class":53,"line":61},[51,109284,3480],{"emptyLinePlaceholder":1192},[51,109286,109287,109289],{"class":53,"line":93},[51,109288,31356],{"class":64},[51,109290,102265],{"class":72},[51,109292,109293,109295,109297,109299],{"class":53,"line":99},[51,109294,31701],{"class":64},[51,109296,48227],{"class":175},[51,109298,48230],{"class":64},[51,109300,48233],{"class":72},[51,109302,109303],{"class":53,"line":120},[51,109304,3480],{"emptyLinePlaceholder":1192},[51,109306,109307],{"class":53,"line":129},[51,109308,3480],{"emptyLinePlaceholder":1192},[51,109310,109311,109313,109315],{"class":53,"line":206},[51,109312,102278],{"class":175},[51,109314,14526],{"class":64},[51,109316,102283],{"class":282},[51,109318,109319],{"class":53,"line":212},[51,109320,109321],{"class":282},"\u003Cmujoco model=\"renderer_demo\">\n",[51,109323,109324],{"class":53,"line":227},[51,109325,102293],{"class":282},[51,109327,109328],{"class":53,"line":370},[51,109329,3480],{"emptyLinePlaceholder":1192},[51,109331,109332],{"class":53,"line":387},[51,109333,102302],{"class":282},[51,109335,109336],{"class":53,"line":404},[51,109337,109051],{"class":282},[51,109339,109340],{"class":53,"line":415},[51,109341,109342],{"class":282},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[51,109344,109345],{"class":53,"line":420},[51,109346,109056],{"class":282},[51,109348,109349],{"class":53,"line":429},[51,109350,3480],{"emptyLinePlaceholder":1192},[51,109352,109353],{"class":53,"line":434},[51,109354,102316],{"class":282},[51,109356,109357],{"class":53,"line":448},[51,109358,102321],{"class":282},[51,109360,109361],{"class":53,"line":462},[51,109362,109073],{"class":282},[51,109364,109365],{"class":53,"line":470},[51,109366,102331],{"class":282},[51,109368,109369],{"class":53,"line":2783},[51,109370,102336],{"class":282},[51,109372,109373],{"class":53,"line":2788},[51,109374,102341],{"class":282},[51,109376,109377],{"class":53,"line":2817},[51,109378,96662],{"class":282},[51,109380,109381],{"class":53,"line":2822},[51,109382,3480],{"emptyLinePlaceholder":1192},[51,109384,109385],{"class":53,"line":2839},[51,109386,3480],{"emptyLinePlaceholder":1192},[51,109388,109389,109391,109393,109395,109397],{"class":53,"line":2844},[51,109390,32911],{"class":64},[51,109392,151],{"class":68},[51,109394,102362],{"class":72},[51,109396,96650],{"class":175},[51,109398,4816],{"class":72},[51,109400,109401,109403,109405,109407,109409],{"class":53,"line":2849},[51,109402,102371],{"class":72},[51,109404,108],{"class":64},[51,109406,102376],{"class":72},[51,109408,102278],{"class":175},[51,109410,90],{"class":72},[51,109412,109413,109415,109417],{"class":53,"line":2854},[51,109414,102385],{"class":72},[51,109416,108],{"class":64},[51,109418,102390],{"class":72},[51,109420,109421,109424,109426,109428,109430,109432,109434,109436,109438,109440,109442],{"class":53,"line":2868},[51,109422,109423],{"class":72},"    renderer ",[51,109425,108],{"class":64},[51,109427,108838],{"class":72},[51,109429,25945],{"class":78},[51,109431,108],{"class":64},[51,109433,43306],{"class":175},[51,109435,13397],{"class":72},[51,109437,25941],{"class":78},[51,109439,108],{"class":64},[51,109441,108853],{"class":175},[51,109443,90],{"class":72},[51,109445,109446],{"class":53,"line":2873},[51,109447,3480],{"emptyLinePlaceholder":1192},[51,109449,109450,109452,109454,109456,109458,109460,109462],{"class":53,"line":3657},[51,109451,4278],{"class":64},[51,109453,102465],{"class":72},[51,109455,27007],{"class":64},[51,109457,33407],{"class":175},[51,109459,73],{"class":72},[51,109461,612],{"class":175},[51,109463,31750],{"class":72},[51,109465,109466],{"class":53,"line":3671},[51,109467,102480],{"class":72},[51,109469,109470],{"class":53,"line":3679},[51,109471,3480],{"emptyLinePlaceholder":1192},[51,109473,109474,109477,109480,109482,109485],{"class":53,"line":3684},[51,109475,109476],{"class":72},"    renderer.update_scene(data, ",[51,109478,109479],{"class":78},"camera",[51,109481,108],{"class":64},[51,109483,109484],{"class":282},"\"fixed_camera\"",[51,109486,90],{"class":72},[51,109488,109489,109492,109494],{"class":53,"line":3690},[51,109490,109491],{"class":72},"    image ",[51,109493,108],{"class":64},[51,109495,108549],{"class":72},[51,109497,109498],{"class":53,"line":3696},[51,109499,3480],{"emptyLinePlaceholder":1192},[51,109501,109502,109505,109507,109510,109512],{"class":53,"line":3701},[51,109503,109504],{"class":72},"    output_path ",[51,109506,108],{"class":64},[51,109508,109509],{"class":72}," Path(",[51,109511,108979],{"class":282},[51,109513,90],{"class":72},[51,109515,109516],{"class":53,"line":8910},[51,109517,109518],{"class":72},"    Image.fromarray(image).save(output_path)\n",[51,109520,109521],{"class":53,"line":8934},[51,109522,109523],{"class":72},"    renderer.close()\n",[51,109525,109526],{"class":53,"line":8939},[51,109527,3480],{"emptyLinePlaceholder":1192},[51,109529,109530,109532,109534,109537],{"class":53,"line":8945},[51,109531,32263],{"class":175},[51,109533,73],{"class":72},[51,109535,109536],{"class":282},"\"saved:\"",[51,109538,109539],{"class":72},", output_path.resolve())\n",[51,109541,109542,109544,109546,109549],{"class":53,"line":8972},[51,109543,32263],{"class":175},[51,109545,73],{"class":72},[51,109547,109548],{"class":282},"\"image shape:\"",[51,109550,109551],{"class":72},", image.shape)\n",[51,109553,109554],{"class":53,"line":8977},[51,109555,3480],{"emptyLinePlaceholder":1192},[51,109557,109558],{"class":53,"line":8983},[51,109559,3480],{"emptyLinePlaceholder":1192},[51,109561,109562,109564,109566,109568,109570],{"class":53,"line":8995},[51,109563,2633],{"class":64},[51,109565,32184],{"class":175},[51,109567,102523],{"class":64},[51,109569,102526],{"class":282},[51,109571,4816],{"class":72},[51,109573,109574],{"class":53,"line":9007},[51,109575,102533],{"class":72},[40,109577,104534],{},[29,109579,109581],{"className":24785,"code":109580,"language":24787,"meta":35,"style":35},"touch ch5_renderer.py\n",[37,109582,109583],{"__ignoreMap":35},[51,109584,109585,109587],{"class":53,"line":54},[51,109586,102247],{"class":68},[51,109588,109589],{"class":282}," ch5_renderer.py\n",[1233,109591,102536],{"id":102536},[40,109593,109594],{},"viewer 上下文：",[29,109596,109598],{"className":31342,"code":109597,"language":31344,"meta":35,"style":35},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[37,109599,109600],{"__ignoreMap":35},[51,109601,109602,109604,109606,109608],{"class":53,"line":54},[51,109603,108797],{"class":64},[51,109605,108800],{"class":72},[51,109607,32347],{"class":64},[51,109609,108805],{"class":72},[40,109611,109612,109614],{},[37,109613,108797],{}," 语句会创建窗口，并在退出时自动清理资源。",[40,109616,109617],{},"窗口循环：",[29,109619,109621],{"className":31342,"code":109620,"language":31344,"meta":35,"style":35},"while viewer.is_running() and data.time \u003C 5.0:\n",[37,109622,109623],{"__ignoreMap":35},[51,109624,109625,109628,109630,109632,109634,109636,109638],{"class":53,"line":54},[51,109626,109627],{"class":64},"while",[51,109629,109151],{"class":72},[51,109631,31426],{"class":64},[51,109633,109156],{"class":72},[51,109635,2154],{"class":64},[51,109637,109161],{"class":175},[51,109639,4816],{"class":72},[40,109641,109642],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[40,109644,109645],{},"固定相机：",[29,109647,109649],{"className":54031,"code":109648,"language":54033,"meta":35,"style":35},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[37,109650,109651],{"__ignoreMap":35},[51,109652,109653,109655,109657,109659,109661,109663,109665,109667,109670,109673,109675,109678],{"class":53,"line":54},[51,109654,2154],{"class":72},[51,109656,109479],{"class":52264},[51,109658,15882],{"class":68},[51,109660,108],{"class":72},[51,109662,109484],{"class":282},[51,109664,102070],{"class":68},[51,109666,108],{"class":72},[51,109668,109669],{"class":282},"\"1.5 -2.0 1.2\"",[51,109671,109672],{"class":68}," xyaxes",[51,109674,108],{"class":72},[51,109676,109677],{"class":282},"\"1 0.75 0 0 0 1\"",[51,109679,102108],{"class":72},[40,109681,109682],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[1233,109684,109686],{"id":109685},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[29,109688,109690],{"className":31342,"code":109689,"language":31344,"meta":35,"style":35},"import time\n",[37,109691,109692],{"__ignoreMap":35},[51,109693,109694,109696],{"class":53,"line":54},[51,109695,31356],{"class":64},[51,109697,32793],{"class":72},[40,109699,109700],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[29,109702,109704],{"className":31342,"code":109703,"language":31344,"meta":35,"style":35},"import mujoco\nimport mujoco.viewer\n",[37,109705,109706,109712],{"__ignoreMap":35},[51,109707,109708,109710],{"class":53,"line":54},[51,109709,31356],{"class":64},[51,109711,102265],{"class":72},[51,109713,109714,109716],{"class":53,"line":61},[51,109715,31356],{"class":64},[51,109717,108516],{"class":72},[40,109719,109720],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[29,109722,109723],{"className":31342,"code":109597,"language":31344,"meta":35,"style":35},[37,109724,109725],{"__ignoreMap":35},[51,109726,109727,109729,109731,109733],{"class":53,"line":54},[51,109728,108797],{"class":64},[51,109730,108800],{"class":72},[51,109732,32347],{"class":64},[51,109734,108805],{"class":72},[40,109736,109737,109738,109741],{},"打开一个 viewer 窗口。",[37,109739,109740],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[29,109743,109744],{"className":31342,"code":109620,"language":31344,"meta":35,"style":35},[37,109745,109746],{"__ignoreMap":35},[51,109747,109748,109750,109752,109754,109756,109758,109760],{"class":53,"line":54},[51,109749,109627],{"class":64},[51,109751,109151],{"class":72},[51,109753,31426],{"class":64},[51,109755,109156],{"class":72},[51,109757,2154],{"class":64},[51,109759,109161],{"class":175},[51,109761,4816],{"class":72},[40,109763,109764,109765,109768],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[37,109766,109767],{},"viewer.is_running()"," 会变成 false，循环结束。",[29,109770,109772],{"className":31342,"code":109771,"language":31344,"meta":35,"style":35},"step_start = time.time()\n",[37,109773,109774],{"__ignoreMap":35},[51,109775,109776,109779,109781],{"class":53,"line":54},[51,109777,109778],{"class":72},"step_start ",[51,109780,108],{"class":64},[51,109782,109173],{"class":72},[40,109784,109785],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[29,109787,109788],{"className":31342,"code":108882,"language":31344,"meta":35,"style":35},[37,109789,109790,109794],{"__ignoreMap":35},[51,109791,109792],{"class":53,"line":54},[51,109793,105469],{"class":72},[51,109795,109796],{"class":53,"line":61},[51,109797,108893],{"class":72},[40,109799,109800,109802,109803,109805,109806,109808,109809,109812],{},[37,109801,102179],{}," 推进物理仿真。",[37,109804,108901],{}," 把最新的 ",[37,109807,34365],{}," 同步到窗口里显示。没有 ",[37,109810,109811],{},"sync()","，窗口可能看不到最新状态。",[29,109814,109815],{"className":31342,"code":108912,"language":31344,"meta":35,"style":35},[37,109816,109817],{"__ignoreMap":35},[51,109818,109819,109821,109823,109825,109827,109829,109831],{"class":53,"line":54},[51,109820,108919],{"class":72},[51,109822,108],{"class":64},[51,109824,108924],{"class":72},[51,109826,1778],{"class":64},[51,109828,108929],{"class":72},[51,109830,1778],{"class":64},[51,109832,108934],{"class":72},[40,109834,109835],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[29,109837,109839],{"className":31342,"code":109838,"language":31344,"meta":35,"style":35},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[37,109840,109841,109853],{"__ignoreMap":35},[51,109842,109843,109845,109847,109849,109851],{"class":53,"line":54},[51,109844,2633],{"class":64},[51,109846,109211],{"class":72},[51,109848,972],{"class":64},[51,109850,5169],{"class":175},[51,109852,4816],{"class":72},[51,109854,109855],{"class":53,"line":61},[51,109856,109857],{"class":72},"    time.sleep(sleep_time)\n",[40,109859,109860],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[1233,109862,109864],{"id":109863},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[29,109866,109868],{"className":31342,"code":109867,"language":31344,"meta":35,"style":35},"from pathlib import Path\n",[37,109869,109870],{"__ignoreMap":35},[51,109871,109872,109874,109876,109878],{"class":53,"line":54},[51,109873,31701],{"class":64},[51,109875,109275],{"class":72},[51,109877,31356],{"class":64},[51,109879,109280],{"class":72},[40,109881,109882,109883,109886,109887,109890],{},"导入 ",[37,109884,109885],{},"Path","，用来处理文件路径。相比直接写字符串，",[37,109888,109889],{},"Path(\"render_output.png\")"," 更清晰。",[29,109892,109894],{"className":31342,"code":109893,"language":31344,"meta":35,"style":35},"from PIL import Image\n",[37,109895,109896],{"__ignoreMap":35},[51,109897,109898,109900,109902,109904],{"class":53,"line":54},[51,109899,31701],{"class":64},[51,109901,48227],{"class":175},[51,109903,48230],{"class":64},[51,109905,48233],{"class":72},[40,109907,109908],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[29,109910,109911],{"className":54031,"code":109648,"language":54033,"meta":35,"style":35},[37,109912,109913],{"__ignoreMap":35},[51,109914,109915,109917,109919,109921,109923,109925,109927,109929,109931,109933,109935,109937],{"class":53,"line":54},[51,109916,2154],{"class":72},[51,109918,109479],{"class":52264},[51,109920,15882],{"class":68},[51,109922,108],{"class":72},[51,109924,109484],{"class":282},[51,109926,102070],{"class":68},[51,109928,108],{"class":72},[51,109930,109669],{"class":282},[51,109932,109672],{"class":68},[51,109934,108],{"class":72},[51,109936,109677],{"class":282},[51,109938,102108],{"class":72},[40,109940,109941,109942,109944,109945,109947,109948,109951,109952,109954],{},"定义一个相机。",[37,109943,80774],{}," 是相机名字。",[37,109946,105110],{}," 是相机在世界里的位置。",[37,109949,109950],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[37,109953,105110],{}," 来调视角。",[29,109956,109958],{"className":31342,"code":109957,"language":31344,"meta":35,"style":35},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[37,109959,109960],{"__ignoreMap":35},[51,109961,109962,109964,109966,109968,109970,109972,109974,109976,109978,109980,109982],{"class":53,"line":54},[51,109963,108534],{"class":72},[51,109965,108],{"class":64},[51,109967,108838],{"class":72},[51,109969,25945],{"class":78},[51,109971,108],{"class":64},[51,109973,43306],{"class":175},[51,109975,13397],{"class":72},[51,109977,25941],{"class":78},[51,109979,108],{"class":64},[51,109981,108853],{"class":175},[51,109983,90],{"class":72},[40,109985,109986,109987,101982,109989,109991],{},"创建离屏渲染器。",[37,109988,25945],{},[37,109990,25941],{}," 决定输出图片大小。",[29,109993,109994],{"className":31342,"code":102640,"language":31344,"meta":35,"style":35},[37,109995,109996,110012],{"__ignoreMap":35},[51,109997,109998,110000,110002,110004,110006,110008,110010],{"class":53,"line":54},[51,109999,4102],{"class":64},[51,110001,102465],{"class":72},[51,110003,27007],{"class":64},[51,110005,33407],{"class":175},[51,110007,73],{"class":72},[51,110009,612],{"class":175},[51,110011,31750],{"class":72},[51,110013,110014],{"class":53,"line":61},[51,110015,102663],{"class":72},[40,110017,110018],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[29,110020,110022],{"className":31342,"code":110021,"language":31344,"meta":35,"style":35},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[37,110023,110024],{"__ignoreMap":35},[51,110025,110026,110029,110031,110033,110035],{"class":53,"line":54},[51,110027,110028],{"class":72},"renderer.update_scene(data, ",[51,110030,109479],{"class":78},[51,110032,108],{"class":64},[51,110034,109484],{"class":282},[51,110036,90],{"class":72},[40,110038,110039,110040,110042,110043,110046],{},"告诉 renderer：用当前 ",[37,110041,34365],{}," 的状态更新画面，并使用名为 ",[37,110044,110045],{},"fixed_camera"," 的相机视角。",[29,110048,110049],{"className":31342,"code":108944,"language":31344,"meta":35,"style":35},[37,110050,110051],{"__ignoreMap":35},[51,110052,110053,110055,110057],{"class":53,"line":54},[51,110054,108544],{"class":72},[51,110056,108],{"class":64},[51,110058,108549],{"class":72},[40,110060,110061,110062,110065],{},"真正渲染出图像。",[37,110063,110064],{},"image"," 是一个 NumPy 数组，不是文件。",[29,110067,110069],{"className":31342,"code":110068,"language":31344,"meta":35,"style":35},"Image.fromarray(image).save(output_path)\n",[37,110070,110071],{"__ignoreMap":35},[51,110072,110073],{"class":53,"line":54},[51,110074,110068],{"class":72},[40,110076,110077,110078,29349],{},"把数组转换成图片，并保存到 ",[37,110079,110080],{},"render_output.png",[29,110082,110084],{"className":31342,"code":110083,"language":31344,"meta":35,"style":35},"renderer.close()\n",[37,110085,110086],{"__ignoreMap":35},[51,110087,110088],{"class":53,"line":54},[51,110089,110083],{"class":72},[40,110091,110092],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110094,103280],{"id":103279},[40,110096,110097,110098,110100,110101,29349],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[37,110099,110080],{},"，并输出图像数组形状，例如 ",[37,110102,110103],{},"(480, 640, 3)",[40,110105,110106],{},"如果图片里看不到方块，先检查：",[19,110108,110109,110112,110115],{},[22,110110,110111],{},"方块是否掉到相机视野外。",[22,110113,110114],{},"camera 位置是否合理。",[22,110116,110117,110118,110121],{},"是否在 ",[37,110119,110120],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110123,103312],{"id":103311},[40,110125,110126],{},"运行 viewer:",[29,110128,110130],{"className":24785,"code":110129,"language":24787,"meta":35,"style":35},"python ch5_viewer.py\n",[37,110131,110132],{"__ignoreMap":35},[51,110133,110134,110136],{"class":53,"line":54},[51,110135,31344],{"class":68},[51,110137,109260],{"class":282},[40,110139,110140],{},"运行 renderer:",[29,110142,110144],{"className":24785,"code":110143,"language":24787,"meta":35,"style":35},"python ch5_renderer.py\n",[37,110145,110146],{"__ignoreMap":35},[51,110147,110148,110150],{"class":53,"line":54},[51,110149,31344],{"class":68},[51,110151,109589],{"class":282},[40,110153,110154],{},"如果在服务器上运行:",[29,110156,110158],{"className":24785,"code":110157,"language":24787,"meta":35,"style":35},"MUJOCO_GL=egl python ch5_renderer.py\n",[37,110159,110160],{"__ignoreMap":35},[51,110161,110162,110164,110166,110168,110171],{"class":53,"line":54},[51,110163,108778],{"class":72},[51,110165,108],{"class":64},[51,110167,108768],{"class":282},[51,110169,110170],{"class":68}," python",[51,110172,109589],{"class":282},[40,110174,108746],{},[29,110176,110178],{"className":24785,"code":110177,"language":24787,"meta":35,"style":35},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[37,110179,110180],{"__ignoreMap":35},[51,110181,110182,110184,110186,110188,110190],{"class":53,"line":54},[51,110183,108778],{"class":72},[51,110185,108],{"class":64},[51,110187,108772],{"class":282},[51,110189,110170],{"class":68},[51,110191,109589],{"class":282},[40,110193,110194],{},"再做几个练习：",[19,110196,110197,110204,110207,110213],{},[22,110198,110199,110200,110203],{},"把 renderer 分辨率改成 ",[37,110201,110202],{},"height=240, width=320","，观察输出 shape。",[22,110205,110206],{},"把方块颜色改成蓝色，重新保存图片。",[22,110208,110209,110210,110212],{},"把相机 ",[37,110211,105110],{}," 改远一点，观察画面中物体是否变小。",[22,110214,110215,110216,103378,110219,110222],{},"把 viewer 示例中的 ",[37,110217,110218],{},"data.time \u003C 5.0",[37,110220,110221],{},"data.time \u003C 20.0","，观察更长时间。",[14,110224,103417],{"id":103416},[1233,110226,110228],{"id":110227},"viewer-窗口打不开","viewer 窗口打不开",[40,110230,110231],{},"安装:",[29,110233,110235],{"className":24785,"code":110234,"language":24787,"meta":35,"style":35},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[37,110236,110237],{"__ignoreMap":35},[51,110238,110239,110241,110243,110245,110247,110249,110251,110253,110255,110257,110259],{"class":53,"line":54},[51,110240,25540],{"class":68},[51,110242,27279],{"class":282},[51,110244,24797],{"class":282},[51,110246,27364],{"class":175},[51,110248,103470],{"class":282},[51,110250,101798],{"class":282},[51,110252,103475],{"class":282},[51,110254,101811],{"class":282},[51,110256,101817],{"class":282},[51,110258,101808],{"class":282},[51,110260,110261],{"class":282}," libXinerama\n",[1233,110263,110265],{"id":110264},"glfwerror",[37,110266,110267],{},"GLFWError",[40,110269,110270],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[1233,110272,110274],{"id":110273},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[40,110276,110277,110278,83503,110280,110282],{},"尝试 ",[37,110279,102001],{},[37,110281,102004],{},"。可能存在版本差异。",[1233,110284,110285],{"id":110285},"保存图片是黑的",[40,110287,103539],{},[19,110289,110290,110293,110296,110306],{},[22,110291,110292],{},"XML 里是否有 light。",[22,110294,110295],{},"相机是否对着模型。",[22,110297,110298,110299,110302,110303,29349],{},"是否先 ",[37,110300,110301],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[37,110304,110305],{},"renderer.render()",[22,110307,110308],{},"物体是否已经掉出视野。",[1233,110310,110311],{"id":110311},"远程服务器没有显示器",[40,110313,110314],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[29,110316,110317],{"className":24785,"code":110157,"language":24787,"meta":35,"style":35},[37,110318,110319],{"__ignoreMap":35},[51,110320,110321,110323,110325,110327,110329],{"class":53,"line":54},[51,110322,108778],{"class":72},[51,110324,108],{"class":64},[51,110326,108768],{"class":282},[51,110328,110170],{"class":68},[51,110330,109589],{"class":282},[40,110332,110333],{},"如果 EGL 不可用，再尝试：",[29,110335,110336],{"className":24785,"code":110177,"language":24787,"meta":35,"style":35},[37,110337,110338],{"__ignoreMap":35},[51,110339,110340,110342,110344,110346,110348],{"class":53,"line":54},[51,110341,108778],{"class":72},[51,110343,108],{"class":64},[51,110345,108772],{"class":282},[51,110347,110170],{"class":68},[51,110349,109589],{"class":282},[14,110351,103571],{"id":103570},[40,110353,110354],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[19,110356,110357,110360,110363],{},[22,110358,110359],{},"先用 viewer 看模型和控制是否正常。",[22,110361,110362],{},"再用 renderer 保存图片或构造视觉观测。",[22,110364,110365],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1179,110367,110368],{},"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":35,"searchDepth":61,"depth":61,"links":110370},[110371,110372,110373,110378,110383,110384,110385,110392],{"id":101610,"depth":61,"text":101611},{"id":101733,"depth":61,"text":101734},{"id":102008,"depth":61,"text":102009,"children":110374},[110375,110376,110377],{"id":108875,"depth":93,"text":108876},{"id":108905,"depth":93,"text":108906},{"id":108940,"depth":93,"text":108941},{"id":102216,"depth":61,"text":102217,"children":110379},[110380,110381,110382],{"id":102536,"depth":93,"text":102536},{"id":109685,"depth":93,"text":109686},{"id":109863,"depth":93,"text":109864},{"id":103279,"depth":61,"text":103280},{"id":103311,"depth":61,"text":103312},{"id":103416,"depth":61,"text":103417,"children":110386},[110387,110388,110389,110390,110391],{"id":110227,"depth":93,"text":110228},{"id":110264,"depth":93,"text":110267},{"id":110273,"depth":93,"text":110274},{"id":110285,"depth":93,"text":110285},{"id":110311,"depth":93,"text":110311},{"id":103570,"depth":61,"text":103571},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108483,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110399,"title":110400,"body":110401,"description":35,"extension":1190,"meta":112312,"navigation":1192,"path":112313,"seo":112314,"stem":112315,"__hash__":112316},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110402,"toc":112288},[110403,110406,110408,110411,110413,110432,110435,110441,110444,110446,110448,110472,110474,110488,110490,110531,110533,110544,110546,110549,110555,110558,110592,110595,110627,110630,110662,110666,110669,110709,110712,110718,110721,110727,110731,110734,110740,110743,110747,110750,110790,110792,110805,110808,110810,111392,111394,111406,111409,111420,111422,111425,111444,111456,111459,111480,111483,111486,111529,111532,111535,111555,111562,111564,111582,111597,111600,111606,111609,111615,111632,111639,111670,111681,111715,111726,111743,111752,111760,111765,111779,111782,111803,111809,111823,111828,111858,111868,111893,111901,111924,111927,111943,111946,111954,111960,111982,111995,112016,112025,112064,112075,112077,112080,112086,112089,112092,112098,112101,112121,112124,112126,112165,112167,112170,112178,112181,112184,112211,112214,112224,112230,112233,112239,112241,112247,112251,112254,112256,112259,112283,112286],[10,110404,110400],{"id":110405},"_6控制任务cartpole",[14,110407,101611],{"id":101610},[40,110409,110410],{},"本章搭建一个最小 Cartpole 控制任务。",[40,110412,105295],{},[19,110414,110415,110418,110420,110423,110426,110429],{},[22,110416,110417],{},"slide joint",[22,110419,107148],{},[22,110421,110422],{},"cart force actuator",[22,110424,110425],{},"状态观测",[22,110427,110428],{},"简单控制循环",[22,110430,110431],{},"reward 设计雏形",[40,110433,110434],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[29,110436,110439],{"className":110437,"code":110438,"language":34,"meta":35},[32],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[37,110440,110438],{"__ignoreMap":35},[40,110442,110443],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110445,101734],{"id":101733},[40,110447,101737],{},[29,110449,110450],{"className":24785,"code":105352,"language":24787,"meta":35,"style":35},[37,110451,110452],{"__ignoreMap":35},[51,110453,110454,110456,110458,110460,110462,110464,110466,110468,110470],{"class":53,"line":54},[51,110455,25540],{"class":68},[51,110457,27279],{"class":282},[51,110459,24797],{"class":282},[51,110461,27364],{"class":175},[51,110463,105367],{"class":282},[51,110465,101762],{"class":282},[51,110467,103465],{"class":282},[51,110469,101778],{"class":282},[51,110471,105376],{"class":282},[40,110473,103783],{},[29,110475,110476],{"className":24785,"code":101883,"language":24787,"meta":35,"style":35},[37,110477,110478],{"__ignoreMap":35},[51,110479,110480,110482,110484,110486],{"class":53,"line":54},[51,110481,24794],{"class":68},[51,110483,24797],{"class":282},[51,110485,101894],{"class":282},[51,110487,101897],{"class":282},[40,110489,103800],{},[29,110491,110493],{"className":24785,"code":110492,"language":24787,"meta":35,"style":35},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[37,110494,110495,110512,110521],{"__ignoreMap":35},[51,110496,110497,110499,110501,110503,110506,110508,110510],{"class":53,"line":54},[51,110498,31294],{"class":68},[51,110500,30140],{"class":282},[51,110502,26079],{"class":175},[51,110504,110505],{"class":282}," mujoco-cartpole",[51,110507,101939],{"class":282},[51,110509,101942],{"class":175},[51,110511,101945],{"class":175},[51,110513,110514,110516,110518],{"class":53,"line":61},[51,110515,31294],{"class":68},[51,110517,101952],{"class":282},[51,110519,110520],{"class":282}," mujoco-cartpole\n",[51,110522,110523,110525,110527,110529],{"class":53,"line":93},[51,110524,24794],{"class":68},[51,110526,24797],{"class":282},[51,110528,101894],{"class":282},[51,110530,101897],{"class":282},[40,110532,101968],{},[19,110534,110535,110538,110541],{},[22,110536,110537],{},"本章不依赖 Gymnasium。",[22,110539,110540],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[22,110542,110543],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110545,102009],{"id":102008},[40,110547,110548],{},"Cartpole 的模型结构:",[29,110550,110553],{"className":110551,"code":110552,"language":34,"meta":35},[32],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[37,110554,110552],{"__ignoreMap":35},[40,110556,110557],{},"小车通过 slide joint 左右移动:",[29,110559,110561],{"className":54031,"code":110560,"language":54033,"meta":35,"style":35},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[37,110562,110563],{"__ignoreMap":35},[51,110564,110565,110567,110569,110571,110573,110576,110578,110580,110583,110585,110587,110590],{"class":53,"line":54},[51,110566,2154],{"class":72},[51,110568,103920],{"class":52264},[51,110570,15882],{"class":68},[51,110572,108],{"class":72},[51,110574,110575],{"class":282},"\"cart_x\"",[51,110577,54788],{"class":68},[51,110579,108],{"class":72},[51,110581,110582],{"class":282},"\"slide\"",[51,110584,106992],{"class":68},[51,110586,108],{"class":72},[51,110588,110589],{"class":282},"\"1 0 0\"",[51,110591,102108],{"class":72},[40,110593,110594],{},"杆子通过 hinge joint 旋转:",[29,110596,110598],{"className":54031,"code":110597,"language":54033,"meta":35,"style":35},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[37,110599,110600],{"__ignoreMap":35},[51,110601,110602,110604,110606,110608,110610,110613,110615,110617,110619,110621,110623,110625],{"class":53,"line":54},[51,110603,2154],{"class":72},[51,110605,103920],{"class":52264},[51,110607,15882],{"class":68},[51,110609,108],{"class":72},[51,110611,110612],{"class":282},"\"pole_hinge\"",[51,110614,54788],{"class":68},[51,110616,108],{"class":72},[51,110618,106983],{"class":282},[51,110620,106992],{"class":68},[51,110622,108],{"class":72},[51,110624,106997],{"class":282},[51,110626,102108],{"class":72},[40,110628,110629],{},"控制力作用在小车 slide joint 上:",[29,110631,110633],{"className":54031,"code":110632,"language":54033,"meta":35,"style":35},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[37,110634,110635],{"__ignoreMap":35},[51,110636,110637,110639,110641,110643,110645,110648,110650,110652,110654,110656,110658,110660],{"class":53,"line":54},[51,110638,2154],{"class":72},[51,110640,107038],{"class":52264},[51,110642,15882],{"class":68},[51,110644,108],{"class":72},[51,110646,110647],{"class":282},"\"cart_motor\"",[51,110649,107048],{"class":68},[51,110651,108],{"class":72},[51,110653,110575],{"class":282},[51,110655,107055],{"class":68},[51,110657,108],{"class":72},[51,110659,55280],{"class":282},[51,110661,102108],{"class":72},[1233,110663,110665],{"id":110664},"cartpole-的状态是什么","Cartpole 的状态是什么",[40,110667,110668],{},"这个简化模型有两个关节：",[1393,110670,110671,110682],{},[1396,110672,110673],{},[1399,110674,110675,110677,110679],{},[1402,110676,103723],{"align":24699},[1402,110678,24700],{"align":24699},[1402,110680,110681],{"align":24699},"对应状态",[1439,110683,110684,110697],{},[1399,110685,110686,110691,110694],{},[1444,110687,110688],{"align":24699},[37,110689,110690],{},"cart_x",[1444,110692,110693],{"align":24699},"slide",[1444,110695,110696],{"align":24699},"小车 x 位置",[1399,110698,110699,110704,110706],{},[1444,110700,110701],{"align":24699},[37,110702,110703],{},"pole_hinge",[1444,110705,106804],{"align":24699},[1444,110707,110708],{"align":24699},"杆子角度",[40,110710,110711],{},"所以：",[29,110713,110716],{"className":110714,"code":110715,"language":34,"meta":35},[32],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[37,110717,110715],{"__ignoreMap":35},[40,110719,110720],{},"把它们拼起来就是观测：",[29,110722,110725],{"className":110723,"code":110724,"language":34,"meta":35},[32],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[37,110726,110724],{"__ignoreMap":35},[1233,110728,110730],{"id":110729},"action-是什么","action 是什么",[40,110732,110733],{},"本章只有一个 actuator：",[29,110735,110738],{"className":110736,"code":110737,"language":34,"meta":35},[32],"data.ctrl[0] = action\n",[37,110739,110737],{"__ignoreMap":35},[40,110741,110742],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[1233,110744,110746],{"id":110745},"reward-是什么","reward 是什么",[40,110748,110749],{},"奖励函数：",[29,110751,110753],{"className":31342,"code":110752,"language":31344,"meta":35,"style":35},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[37,110754,110755],{"__ignoreMap":35},[51,110756,110757,110759,110762,110764,110766,110768,110771,110773,110776,110778,110780,110782,110785,110787],{"class":53,"line":54},[51,110758,18008],{"class":64},[51,110760,110761],{"class":175}," float",[51,110763,73],{"class":72},[51,110765,103367],{"class":175},[51,110767,53235],{"class":64},[51,110769,110770],{"class":175}," 0.1",[51,110772,7480],{"class":64},[51,110774,110775],{"class":72}," cart_x ",[51,110777,1702],{"class":64},[51,110779,110775],{"class":72},[51,110781,1778],{"class":64},[51,110783,110784],{"class":72}," pole_angle ",[51,110786,1702],{"class":64},[51,110788,110789],{"class":72}," pole_angle)\n",[40,110791,107190],{},[19,110793,110794,110799,110802],{},[22,110795,110796,110797,29349],{},"基础奖励是 ",[37,110798,103367],{},[22,110800,110801],{},"小车离中心越远，扣分越多。",[22,110803,110804],{},"杆子角度越大，扣分越多。",[40,110806,110807],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110809,102217],{"id":102216},[29,110811,110813],{"className":31342,"code":110812,"language":31344,"meta":35,"style":35},"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",[37,110814,110815,110821,110831,110835,110839,110847,110852,110856,110860,110864,110869,110873,110878,110883,110888,110892,110897,110902,110907,110911,110915,110919,110923,110927,110932,110936,110940,110944,110948,110952,110962,110969,110973,110977,110991,111005,111018,111048,111052,111056,111068,111080,111088,111092,111105,111109,111113,111122,111126,111142,111152,111165,111178,111182,111205,111223,111227,111239,111243,111247,111257,111267,111271,111287,111328,111332,111352,111368,111372,111376,111388],{"__ignoreMap":35},[51,110816,110817,110819],{"class":53,"line":54},[51,110818,31356],{"class":64},[51,110820,102265],{"class":72},[51,110822,110823,110825,110827,110829],{"class":53,"line":61},[51,110824,31356],{"class":64},[51,110826,32344],{"class":72},[51,110828,32347],{"class":64},[51,110830,32350],{"class":72},[51,110832,110833],{"class":53,"line":93},[51,110834,3480],{"emptyLinePlaceholder":1192},[51,110836,110837],{"class":53,"line":99},[51,110838,3480],{"emptyLinePlaceholder":1192},[51,110840,110841,110843,110845],{"class":53,"line":120},[51,110842,102278],{"class":175},[51,110844,14526],{"class":64},[51,110846,102283],{"class":282},[51,110848,110849],{"class":53,"line":129},[51,110850,110851],{"class":282},"\u003Cmujoco model=\"cartpole\">\n",[51,110853,110854],{"class":53,"line":206},[51,110855,102293],{"class":282},[51,110857,110858],{"class":53,"line":212},[51,110859,3480],{"emptyLinePlaceholder":1192},[51,110861,110862],{"class":53,"line":227},[51,110863,102302],{"class":282},[51,110865,110866],{"class":53,"line":370},[51,110867,110868],{"class":282},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[51,110870,110871],{"class":53,"line":387},[51,110872,3480],{"emptyLinePlaceholder":1192},[51,110874,110875],{"class":53,"line":404},[51,110876,110877],{"class":282},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[51,110879,110880],{"class":53,"line":415},[51,110881,110882],{"class":282},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[51,110884,110885],{"class":53,"line":420},[51,110886,110887],{"class":282},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[51,110889,110890],{"class":53,"line":429},[51,110891,3480],{"emptyLinePlaceholder":1192},[51,110893,110894],{"class":53,"line":434},[51,110895,110896],{"class":282},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[51,110898,110899],{"class":53,"line":448},[51,110900,110901],{"class":282},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[51,110903,110904],{"class":53,"line":462},[51,110905,110906],{"class":282},"        \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",[51,110908,110909],{"class":53,"line":470},[51,110910,107402],{"class":282},[51,110912,110913],{"class":53,"line":2783},[51,110914,102331],{"class":282},[51,110916,110917],{"class":53,"line":2788},[51,110918,102336],{"class":282},[51,110920,110921],{"class":53,"line":2817},[51,110922,3480],{"emptyLinePlaceholder":1192},[51,110924,110925],{"class":53,"line":2822},[51,110926,107419],{"class":282},[51,110928,110929],{"class":53,"line":2839},[51,110930,110931],{"class":282},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[51,110933,110934],{"class":53,"line":2844},[51,110935,107429],{"class":282},[51,110937,110938],{"class":53,"line":2849},[51,110939,102341],{"class":282},[51,110941,110942],{"class":53,"line":2854},[51,110943,96662],{"class":282},[51,110945,110946],{"class":53,"line":2868},[51,110947,3480],{"emptyLinePlaceholder":1192},[51,110949,110950],{"class":53,"line":2873},[51,110951,3480],{"emptyLinePlaceholder":1192},[51,110953,110954,110956,110959],{"class":53,"line":3657},[51,110955,32911],{"class":64},[51,110957,110958],{"class":68}," get_observation",[51,110960,110961],{"class":72},"(data: mujoco.MjData) -> np.ndarray:\n",[51,110963,110964,110966],{"class":53,"line":3671},[51,110965,123],{"class":64},[51,110967,110968],{"class":72}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[51,110970,110971],{"class":53,"line":3679},[51,110972,3480],{"emptyLinePlaceholder":1192},[51,110974,110975],{"class":53,"line":3684},[51,110976,3480],{"emptyLinePlaceholder":1192},[51,110978,110979,110981,110984,110987,110989],{"class":53,"line":3690},[51,110980,32911],{"class":64},[51,110982,110983],{"class":68}," compute_reward",[51,110985,110986],{"class":72},"(obs: np.ndarray) -> ",[51,110988,1300],{"class":175},[51,110990,4816],{"class":72},[51,110992,110993,110996,110998,111001,111003],{"class":53,"line":3696},[51,110994,110995],{"class":72},"    cart_x ",[51,110997,108],{"class":64},[51,110999,111000],{"class":72}," obs[",[51,111002,176],{"class":175},[51,111004,34210],{"class":72},[51,111006,111007,111010,111012,111014,111016],{"class":53,"line":3701},[51,111008,111009],{"class":72},"    pole_angle ",[51,111011,108],{"class":64},[51,111013,111000],{"class":72},[51,111015,791],{"class":175},[51,111017,34210],{"class":72},[51,111019,111020,111022,111024,111026,111028,111030,111032,111034,111036,111038,111040,111042,111044,111046],{"class":53,"line":8910},[51,111021,123],{"class":64},[51,111023,110761],{"class":175},[51,111025,73],{"class":72},[51,111027,103367],{"class":175},[51,111029,53235],{"class":64},[51,111031,110770],{"class":175},[51,111033,7480],{"class":64},[51,111035,110775],{"class":72},[51,111037,1702],{"class":64},[51,111039,110775],{"class":72},[51,111041,1778],{"class":64},[51,111043,110784],{"class":72},[51,111045,1702],{"class":64},[51,111047,110789],{"class":72},[51,111049,111050],{"class":53,"line":8934},[51,111051,3480],{"emptyLinePlaceholder":1192},[51,111053,111054],{"class":53,"line":8939},[51,111055,3480],{"emptyLinePlaceholder":1192},[51,111057,111058,111060,111062,111064,111066],{"class":53,"line":8945},[51,111059,32911],{"class":64},[51,111061,151],{"class":68},[51,111063,102362],{"class":72},[51,111065,96650],{"class":175},[51,111067,4816],{"class":72},[51,111069,111070,111072,111074,111076,111078],{"class":53,"line":8972},[51,111071,102371],{"class":72},[51,111073,108],{"class":64},[51,111075,102376],{"class":72},[51,111077,102278],{"class":175},[51,111079,90],{"class":72},[51,111081,111082,111084,111086],{"class":53,"line":8977},[51,111083,102385],{"class":72},[51,111085,108],{"class":64},[51,111087,102390],{"class":72},[51,111089,111090],{"class":53,"line":8983},[51,111091,3480],{"emptyLinePlaceholder":1192},[51,111093,111094,111096,111098,111100,111102],{"class":53,"line":8995},[51,111095,106033],{"class":72},[51,111097,791],{"class":175},[51,111099,5517],{"class":72},[51,111101,108],{"class":64},[51,111103,111104],{"class":175}," 0.1\n",[51,111106,111107],{"class":53,"line":9007},[51,111108,106046],{"class":72},[51,111110,111111],{"class":53,"line":9019},[51,111112,3480],{"emptyLinePlaceholder":1192},[51,111114,111115,111118,111120],{"class":53,"line":10678},[51,111116,111117],{"class":72},"    total_reward ",[51,111119,108],{"class":64},[51,111121,105725],{"class":175},[51,111123,111124],{"class":53,"line":10703},[51,111125,3480],{"emptyLinePlaceholder":1192},[51,111127,111128,111130,111132,111134,111136,111138,111140],{"class":53,"line":10726},[51,111129,4278],{"class":64},[51,111131,32580],{"class":72},[51,111133,27007],{"class":64},[51,111135,33407],{"class":175},[51,111137,73],{"class":72},[51,111139,7372],{"class":175},[51,111141,31750],{"class":72},[51,111143,111144,111147,111149],{"class":53,"line":10750},[51,111145,111146],{"class":72},"        obs ",[51,111148,108],{"class":64},[51,111150,111151],{"class":72}," get_observation(data)\n",[51,111153,111154,111157,111159,111161,111163],{"class":53,"line":10755},[51,111155,111156],{"class":72},"        pole_angle ",[51,111158,108],{"class":64},[51,111160,111000],{"class":72},[51,111162,791],{"class":175},[51,111164,34210],{"class":72},[51,111166,111167,111170,111172,111174,111176],{"class":53,"line":10760},[51,111168,111169],{"class":72},"        pole_angular_velocity ",[51,111171,108],{"class":64},[51,111173,111000],{"class":72},[51,111175,1328],{"class":175},[51,111177,34210],{"class":72},[51,111179,111180],{"class":53,"line":10765},[51,111181,3480],{"emptyLinePlaceholder":1192},[51,111183,111184,111187,111189,111192,111194,111196,111198,111200,111202],{"class":53,"line":10774},[51,111185,111186],{"class":72},"        action ",[51,111188,108],{"class":64},[51,111190,111191],{"class":175}," 2.0",[51,111193,7480],{"class":64},[51,111195,110784],{"class":72},[51,111197,114],{"class":64},[51,111199,62831],{"class":175},[51,111201,7480],{"class":64},[51,111203,111204],{"class":72}," pole_angular_velocity\n",[51,111206,111207,111209,111211,111213,111215,111217,111219,111221],{"class":53,"line":10779},[51,111208,111186],{"class":72},[51,111210,108],{"class":64},[51,111212,108411],{"class":72},[51,111214,1778],{"class":64},[51,111216,103367],{"class":175},[51,111218,13397],{"class":72},[51,111220,103367],{"class":175},[51,111222,90],{"class":72},[51,111224,111225],{"class":53,"line":10785},[51,111226,3480],{"emptyLinePlaceholder":1192},[51,111228,111229,111231,111233,111235,111237],{"class":53,"line":10806},[51,111230,107581],{"class":72},[51,111232,176],{"class":175},[51,111234,5517],{"class":72},[51,111236,108],{"class":64},[51,111238,108434],{"class":72},[51,111240,111241],{"class":53,"line":10812},[51,111242,102480],{"class":72},[51,111244,111245],{"class":53,"line":10826},[51,111246,3480],{"emptyLinePlaceholder":1192},[51,111248,111249,111252,111254],{"class":53,"line":10832},[51,111250,111251],{"class":72},"        reward ",[51,111253,108],{"class":64},[51,111255,111256],{"class":72}," compute_reward(get_observation(data))\n",[51,111258,111259,111262,111264],{"class":53,"line":10859},[51,111260,111261],{"class":72},"        total_reward ",[51,111263,10439],{"class":64},[51,111265,111266],{"class":72}," reward\n",[51,111268,111269],{"class":53,"line":10868},[51,111270,3480],{"emptyLinePlaceholder":1192},[51,111272,111273,111275,111277,111279,111281,111283,111285],{"class":53,"line":10874},[51,111274,3577],{"class":64},[51,111276,32580],{"class":72},[51,111278,1577],{"class":64},[51,111280,661],{"class":175},[51,111282,102523],{"class":64},[51,111284,5169],{"class":175},[51,111286,4816],{"class":72},[51,111288,111289,111291,111293,111296,111299,111302,111305,111307,111310,111313,111315,111317,111319,111321,111324,111326],{"class":53,"line":10882},[51,111290,35614],{"class":175},[51,111292,73],{"class":72},[51,111294,111295],{"class":282},"\"step:\"",[51,111297,111298],{"class":72},", step, ",[51,111300,111301],{"class":282},"\"obs:\"",[51,111303,111304],{"class":72},", np.round(obs, ",[51,111306,1328],{"class":175},[51,111308,111309],{"class":72},"), ",[51,111311,111312],{"class":282},"\"action:\"",[51,111314,13397],{"class":72},[51,111316,32982],{"class":175},[51,111318,73],{"class":72},[51,111320,1300],{"class":175},[51,111322,111323],{"class":72},"(action), ",[51,111325,1328],{"class":175},[51,111327,31461],{"class":72},[51,111329,111330],{"class":53,"line":10887},[51,111331,3480],{"emptyLinePlaceholder":1192},[51,111333,111334,111336,111338,111341,111343,111345,111348,111350],{"class":53,"line":17566},[51,111335,32263],{"class":175},[51,111337,73],{"class":72},[51,111339,111340],{"class":282},"\"total_reward:\"",[51,111342,13397],{"class":72},[51,111344,32982],{"class":175},[51,111346,111347],{"class":72},"(total_reward, ",[51,111349,1328],{"class":175},[51,111351,31461],{"class":72},[51,111353,111354,111356,111358,111361,111364,111366],{"class":53,"line":17572},[51,111355,32263],{"class":175},[51,111357,73],{"class":72},[51,111359,111360],{"class":282},"\"final obs:\"",[51,111362,111363],{"class":72},", np.round(get_observation(data), ",[51,111365,1328],{"class":175},[51,111367,31461],{"class":72},[51,111369,111370],{"class":53,"line":17595},[51,111371,3480],{"emptyLinePlaceholder":1192},[51,111373,111374],{"class":53,"line":17601},[51,111375,3480],{"emptyLinePlaceholder":1192},[51,111377,111378,111380,111382,111384,111386],{"class":53,"line":17624},[51,111379,2633],{"class":64},[51,111381,32184],{"class":175},[51,111383,102523],{"class":64},[51,111385,102526],{"class":282},[51,111387,4816],{"class":72},[51,111389,111390],{"class":53,"line":17638},[51,111391,102533],{"class":72},[40,111393,104534],{},[29,111395,111397],{"className":24785,"code":111396,"language":24787,"meta":35,"style":35},"touch ch6_cartpole.py\n",[37,111398,111399],{"__ignoreMap":35},[51,111400,111401,111403],{"class":53,"line":54},[51,111402,102247],{"class":68},[51,111404,111405],{"class":282}," ch6_cartpole.py\n",[40,111407,111408],{},"运行：",[29,111410,111412],{"className":24785,"code":111411,"language":24787,"meta":35,"style":35},"python ch6_cartpole.py\n",[37,111413,111414],{"__ignoreMap":35},[51,111415,111416,111418],{"class":53,"line":54},[51,111417,31344],{"class":68},[51,111419,111405],{"class":282},[1233,111421,102536],{"id":102536},[40,111423,111424],{},"构造观测：",[29,111426,111428],{"className":31342,"code":111427,"language":31344,"meta":35,"style":35},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[37,111429,111430,111438],{"__ignoreMap":35},[51,111431,111432,111434,111436],{"class":53,"line":54},[51,111433,32911],{"class":64},[51,111435,110958],{"class":68},[51,111437,110961],{"class":72},[51,111439,111440,111442],{"class":53,"line":61},[51,111441,123],{"class":64},[51,111443,110968],{"class":72},[40,111445,111446,111449,111450,111452,111453,111455],{},[37,111447,111448],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[37,111451,104994],{}," 2 维，",[37,111454,105324],{}," 2 维，所以 obs 是 4 维。",[40,111457,111458],{},"设置初始角度：",[29,111460,111462],{"className":31342,"code":111461,"language":31344,"meta":35,"style":35},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[37,111463,111464,111476],{"__ignoreMap":35},[51,111465,111466,111468,111470,111472,111474],{"class":53,"line":54},[51,111467,105663],{"class":72},[51,111469,791],{"class":175},[51,111471,5517],{"class":72},[51,111473,108],{"class":64},[51,111475,111104],{"class":175},[51,111477,111478],{"class":53,"line":61},[51,111479,105507],{"class":72},[40,111481,111482],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[40,111484,111485],{},"简单反馈控制：",[29,111487,111489],{"className":31342,"code":111488,"language":31344,"meta":35,"style":35},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[37,111490,111491,111511],{"__ignoreMap":35},[51,111492,111493,111495,111497,111499,111501,111503,111505,111507,111509],{"class":53,"line":54},[51,111494,108406],{"class":72},[51,111496,108],{"class":64},[51,111498,111191],{"class":175},[51,111500,7480],{"class":64},[51,111502,110784],{"class":72},[51,111504,114],{"class":64},[51,111506,62831],{"class":175},[51,111508,7480],{"class":64},[51,111510,111204],{"class":72},[51,111512,111513,111515,111517,111519,111521,111523,111525,111527],{"class":53,"line":61},[51,111514,108406],{"class":72},[51,111516,108],{"class":64},[51,111518,108411],{"class":72},[51,111520,1778],{"class":64},[51,111522,103367],{"class":175},[51,111524,13397],{"class":72},[51,111526,103367],{"class":175},[51,111528,90],{"class":72},[40,111530,111531],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[40,111533,111534],{},"限制动作：",[29,111536,111538],{"className":31342,"code":111537,"language":31344,"meta":35,"style":35},"np.clip(action, -1.0, 1.0)\n",[37,111539,111540],{"__ignoreMap":35},[51,111541,111542,111545,111547,111549,111551,111553],{"class":53,"line":54},[51,111543,111544],{"class":72},"np.clip(action, ",[51,111546,1778],{"class":64},[51,111548,103367],{"class":175},[51,111550,13397],{"class":72},[51,111552,103367],{"class":175},[51,111554,90],{"class":72},[40,111556,111557,111558,111561],{},"因为 XML 里 ",[37,111559,111560],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[1233,111563,102672],{"id":102672},[29,111565,111566],{"className":31342,"code":111427,"language":31344,"meta":35,"style":35},[37,111567,111568,111576],{"__ignoreMap":35},[51,111569,111570,111572,111574],{"class":53,"line":54},[51,111571,32911],{"class":64},[51,111573,110958],{"class":68},[51,111575,110961],{"class":72},[51,111577,111578,111580],{"class":53,"line":61},[51,111579,123],{"class":64},[51,111581,110968],{"class":72},[40,111583,111584,111585,111588,111589,111592,111593,111596],{},"这段定义了一个函数，用来获取当前观测。",[37,111586,111587],{},"data.qpos.copy()"," 是位置数组副本，",[37,111590,111591],{},"data.qvel.copy()"," 是速度数组副本。",[37,111594,111595],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[40,111598,111599],{},"在本章模型里：",[29,111601,111604],{"className":111602,"code":111603,"language":34,"meta":35},[32],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[37,111605,111603],{"__ignoreMap":35},[40,111607,111608],{},"所以返回的 obs 是：",[29,111610,111613],{"className":111611,"code":111612,"language":34,"meta":35},[32],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[37,111614,111612],{"__ignoreMap":35},[29,111616,111618],{"className":31342,"code":111617,"language":31344,"meta":35,"style":35},"def compute_reward(obs: np.ndarray) -> float:\n",[37,111619,111620],{"__ignoreMap":35},[51,111621,111622,111624,111626,111628,111630],{"class":53,"line":54},[51,111623,32911],{"class":64},[51,111625,110983],{"class":68},[51,111627,110986],{"class":72},[51,111629,1300],{"class":175},[51,111631,4816],{"class":72},[40,111633,111634,111635,111638],{},"这行定义奖励函数。输入是观测 ",[37,111636,111637],{},"obs","，输出是一个浮点数奖励。",[29,111640,111642],{"className":31342,"code":111641,"language":31344,"meta":35,"style":35},"cart_x = obs[0]\npole_angle = obs[1]\n",[37,111643,111644,111657],{"__ignoreMap":35},[51,111645,111646,111649,111651,111653,111655],{"class":53,"line":54},[51,111647,111648],{"class":72},"cart_x ",[51,111650,108],{"class":64},[51,111652,111000],{"class":72},[51,111654,176],{"class":175},[51,111656,34210],{"class":72},[51,111658,111659,111662,111664,111666,111668],{"class":53,"line":61},[51,111660,111661],{"class":72},"pole_angle ",[51,111663,108],{"class":64},[51,111665,111000],{"class":72},[51,111667,791],{"class":175},[51,111669,34210],{"class":72},[40,111671,111672,111673,111676,111677,111680],{},"数组索引从 0 开始。",[37,111674,111675],{},"obs[0]"," 是第一个元素，也就是小车位置。",[37,111678,111679],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[29,111682,111683],{"className":31342,"code":110752,"language":31344,"meta":35,"style":35},[37,111684,111685],{"__ignoreMap":35},[51,111686,111687,111689,111691,111693,111695,111697,111699,111701,111703,111705,111707,111709,111711,111713],{"class":53,"line":54},[51,111688,18008],{"class":64},[51,111690,110761],{"class":175},[51,111692,73],{"class":72},[51,111694,103367],{"class":175},[51,111696,53235],{"class":64},[51,111698,110770],{"class":175},[51,111700,7480],{"class":64},[51,111702,110775],{"class":72},[51,111704,1702],{"class":64},[51,111706,110775],{"class":72},[51,111708,1778],{"class":64},[51,111710,110784],{"class":72},[51,111712,1702],{"class":64},[51,111714,110789],{"class":72},[40,111716,111717,111718,111721,111722,111725],{},"这行计算奖励。",[37,111719,111720],{},"cart_x * cart_x"," 是小车位置的平方，",[37,111723,111724],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[29,111727,111729],{"className":31342,"code":111728,"language":31344,"meta":35,"style":35},"data.qpos[1] = 0.1\n",[37,111730,111731],{"__ignoreMap":35},[51,111732,111733,111735,111737,111739,111741],{"class":53,"line":54},[51,111734,105663],{"class":72},[51,111736,791],{"class":175},[51,111738,5517],{"class":72},[51,111740,108],{"class":64},[51,111742,111104],{"class":175},[40,111744,111745,111746,111748,111749,111751],{},"手动设置杆子的初始角度。因为 ",[37,111747,106420],{}," 是小车位置，",[37,111750,106423],{}," 是杆子角度，所以这里改的是杆子。",[29,111753,111754],{"className":31342,"code":105507,"language":31344,"meta":35,"style":35},[37,111755,111756],{"__ignoreMap":35},[51,111757,111758],{"class":53,"line":54},[51,111759,105507],{"class":72},[40,111761,106466,111762,111764],{},[37,111763,104994],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[29,111766,111768],{"className":31342,"code":111767,"language":31344,"meta":35,"style":35},"total_reward = 0.0\n",[37,111769,111770],{"__ignoreMap":35},[51,111771,111772,111775,111777],{"class":53,"line":54},[51,111773,111774],{"class":72},"total_reward ",[51,111776,108],{"class":64},[51,111778,105725],{"class":175},[40,111780,111781],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[29,111783,111785],{"className":31342,"code":111784,"language":31344,"meta":35,"style":35},"for step in range(1000):\n",[37,111786,111787],{"__ignoreMap":35},[51,111788,111789,111791,111793,111795,111797,111799,111801],{"class":53,"line":54},[51,111790,4102],{"class":64},[51,111792,32580],{"class":72},[51,111794,27007],{"class":64},[51,111796,33407],{"class":175},[51,111798,73],{"class":72},[51,111800,7372],{"class":175},[51,111802,31750],{"class":72},[40,111804,111805,111806,111808],{},"循环 1000 步。",[37,111807,108098],{}," 是当前步数，从 0 到 999。",[29,111810,111812],{"className":31342,"code":111811,"language":31344,"meta":35,"style":35},"obs = get_observation(data)\n",[37,111813,111814],{"__ignoreMap":35},[51,111815,111816,111819,111821],{"class":53,"line":54},[51,111817,111818],{"class":72},"obs ",[51,111820,108],{"class":64},[51,111822,111151],{"class":72},[40,111824,111825,111826,29349],{},"读取当前状态，保存到 ",[37,111827,111637],{},[29,111829,111831],{"className":31342,"code":111830,"language":31344,"meta":35,"style":35},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[37,111832,111833,111845],{"__ignoreMap":35},[51,111834,111835,111837,111839,111841,111843],{"class":53,"line":54},[51,111836,111661],{"class":72},[51,111838,108],{"class":64},[51,111840,111000],{"class":72},[51,111842,791],{"class":175},[51,111844,34210],{"class":72},[51,111846,111847,111850,111852,111854,111856],{"class":53,"line":61},[51,111848,111849],{"class":72},"pole_angular_velocity ",[51,111851,108],{"class":64},[51,111853,111000],{"class":72},[51,111855,1328],{"class":175},[51,111857,34210],{"class":72},[40,111859,111860,111861,111864,111865,29349],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[37,111862,111863],{},"obs[3]","？因为 obs 的顺序是 ",[37,111866,111867],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[29,111869,111871],{"className":31342,"code":111870,"language":31344,"meta":35,"style":35},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[37,111872,111873],{"__ignoreMap":35},[51,111874,111875,111877,111879,111881,111883,111885,111887,111889,111891],{"class":53,"line":54},[51,111876,108406],{"class":72},[51,111878,108],{"class":64},[51,111880,111191],{"class":175},[51,111882,7480],{"class":64},[51,111884,110784],{"class":72},[51,111886,114],{"class":64},[51,111888,62831],{"class":175},[51,111890,7480],{"class":64},[51,111892,111204],{"class":72},[40,111894,111895,111896,101982,111898,111900],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[37,111897,106224],{},[37,111899,36293],{}," 是人为设置的系数，不是固定公式。",[29,111902,111904],{"className":31342,"code":111903,"language":31344,"meta":35,"style":35},"action = np.clip(action, -1.0, 1.0)\n",[37,111905,111906],{"__ignoreMap":35},[51,111907,111908,111910,111912,111914,111916,111918,111920,111922],{"class":53,"line":54},[51,111909,108406],{"class":72},[51,111911,108],{"class":64},[51,111913,108411],{"class":72},[51,111915,1778],{"class":64},[51,111917,103367],{"class":175},[51,111919,13397],{"class":72},[51,111921,103367],{"class":175},[51,111923,90],{"class":72},[40,111925,111926],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[29,111928,111929],{"className":31342,"code":110737,"language":31344,"meta":35,"style":35},[37,111930,111931],{"__ignoreMap":35},[51,111932,111933,111935,111937,111939,111941],{"class":53,"line":54},[51,111934,106835],{"class":72},[51,111936,176],{"class":175},[51,111938,5517],{"class":72},[51,111940,108],{"class":64},[51,111942,108434],{"class":72},[40,111944,111945],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[29,111947,111948],{"className":31342,"code":105469,"language":31344,"meta":35,"style":35},[37,111949,111950],{"__ignoreMap":35},[51,111951,111952],{"class":53,"line":54},[51,111953,105469],{"class":72},[40,111955,111956,111957,111959],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[37,111958,107090],{}," 计算小车和杆子的下一刻状态。",[29,111961,111963],{"className":31342,"code":111962,"language":31344,"meta":35,"style":35},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[37,111964,111965,111974],{"__ignoreMap":35},[51,111966,111967,111970,111972],{"class":53,"line":54},[51,111968,111969],{"class":72},"reward ",[51,111971,108],{"class":64},[51,111973,111256],{"class":72},[51,111975,111976,111978,111980],{"class":53,"line":61},[51,111977,111774],{"class":72},[51,111979,10439],{"class":64},[51,111981,111266],{"class":72},[40,111983,111984,111985,111987,111988,111991,111992,29349],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[37,111986,10439],{}," 是简写，",[37,111989,111990],{},"total_reward += reward"," 等价于 ",[37,111993,111994],{},"total_reward = total_reward + reward",[29,111996,111998],{"className":31342,"code":111997,"language":31344,"meta":35,"style":35},"if step % 100 == 0:\n",[37,111999,112000],{"__ignoreMap":35},[51,112001,112002,112004,112006,112008,112010,112012,112014],{"class":53,"line":54},[51,112003,2633],{"class":64},[51,112005,32580],{"class":72},[51,112007,1577],{"class":64},[51,112009,661],{"class":175},[51,112011,102523],{"class":64},[51,112013,5169],{"class":175},[51,112015,4816],{"class":72},[40,112017,112018,112020,112021,112024],{},[37,112019,1577],{}," 是取余数。",[37,112022,112023],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[29,112026,112028],{"className":31342,"code":112027,"language":31344,"meta":35,"style":35},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[37,112029,112030],{"__ignoreMap":35},[51,112031,112032,112034,112036,112038,112040,112042,112044,112046,112048,112050,112052,112054,112056,112058,112060,112062],{"class":53,"line":54},[51,112033,31379],{"class":175},[51,112035,73],{"class":72},[51,112037,111295],{"class":282},[51,112039,111298],{"class":72},[51,112041,111301],{"class":282},[51,112043,111304],{"class":72},[51,112045,1328],{"class":175},[51,112047,111309],{"class":72},[51,112049,111312],{"class":282},[51,112051,13397],{"class":72},[51,112053,32982],{"class":175},[51,112055,73],{"class":72},[51,112057,1300],{"class":175},[51,112059,111323],{"class":72},[51,112061,1328],{"class":175},[51,112063,31461],{"class":72},[40,112065,112066,112067,112070,112071,112074],{},"打印当前步数、观测和动作。",[37,112068,112069],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[37,112072,112073],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112076,103280],{"id":103279},[40,112078,112079],{},"观测向量:",[29,112081,112084],{"className":112082,"code":112083,"language":34,"meta":35},[32],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[37,112085,112083],{"__ignoreMap":35},[40,112087,112088],{},"控制器是教学用的简单线性反馈，不保证最优。",[40,112090,112091],{},"每隔 100 步会打印一次：",[29,112093,112096],{"className":112094,"code":112095,"language":34,"meta":35},[32],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[37,112097,112095],{"__ignoreMap":35},[40,112099,112100],{},"重点观察：",[19,112102,112103,112109,112114],{},[22,112104,112105,112108],{},[37,112106,112107],{},"pole_angle"," 是否越来越大。",[22,112110,112111,112113],{},[37,112112,110690],{}," 是否跑得太远。",[22,112115,112116,112117,83503,112119,29349],{},"action 是否经常被 clip 到 ",[37,112118,104879],{},[37,112120,791],{},[40,112122,112123],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112125,103312],{"id":103311},[19,112127,112128,112134,112137,112143,112153,112159,112162],{},[22,112129,112130,112131,29349],{},"把初始角度改为 ",[37,112132,112133],{},"data.qpos[1] = 0.3",[22,112135,112136],{},"重新运行，观察控制是否变差。",[22,112138,112139,112140,112142],{},"把 actuator ",[37,112141,108031],{}," 改小。",[22,112144,112145,112146,112149,112150,29349],{},"打印 ",[37,112147,112148],{},"model.nq, model.nv, model.nu","，应为 ",[37,112151,112152],{},"2 2 1",[22,112154,112155,112156,112158],{},"把 reward 里的 ",[37,112157,111724],{}," 系数改大，观察总奖励变化。",[22,112160,112161],{},"把控制器改成反号，观察杆子是否更容易倒。",[22,112163,112164],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112166,103417],{"id":103416},[1233,112168,112169],{"id":112169},"杆子方向和预期不一致",[40,112171,103360,112172,112174,112175,112177],{},[37,112173,107203],{}," 和 capsule 的 ",[37,112176,104140],{},"，必要时用 viewer 可视化确认。",[1233,112179,112180],{"id":112180},"控制器越控越倒",[40,112182,112183],{},"说明反馈符号可能反了，尝试:",[29,112185,112187],{"className":31342,"code":112186,"language":31344,"meta":35,"style":35},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[37,112188,112189],{"__ignoreMap":35},[51,112190,112191,112193,112195,112197,112199,112201,112203,112205,112207,112209],{"class":53,"line":54},[51,112192,108406],{"class":72},[51,112194,108],{"class":64},[51,112196,53235],{"class":64},[51,112198,106224],{"class":175},[51,112200,7480],{"class":64},[51,112202,110784],{"class":72},[51,112204,1778],{"class":64},[51,112206,62831],{"class":175},[51,112208,7480],{"class":64},[51,112210,111204],{"class":72},[1233,112212,112213],{"id":112213},"小车飞走",[40,112215,112216,112217,112219,112220,112223],{},"降低 ",[37,112218,108031],{}," 或缩小 ",[37,112221,112222],{},"action"," 的 clip 范围。",[1233,112225,112227,112229],{"id":112226},"obs3-为什么是杆子角速度",[37,112228,111863],{}," 为什么是杆子角速度",[40,112231,112232],{},"因为这个模型里：",[29,112234,112237],{"className":112235,"code":112236,"language":34,"meta":35},[32],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[37,112238,112236],{"__ignoreMap":35},[40,112240,110711],{},[29,112242,112245],{"className":112243,"code":112244,"language":34,"meta":35},[32],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[37,112246,112244],{"__ignoreMap":35},[1233,112248,112250],{"id":112249},"reward-变成负数是否错误","reward 变成负数是否错误",[40,112252,112253],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112255,103571],{"id":103570},[40,112257,112258],{},"一个控制任务通常包含：",[19,112260,112261,112264,112272,112277,112280],{},[22,112262,112263],{},"模型：Cartpole 的 body、joint、actuator。",[22,112265,112266,112267,1466,112269,112271],{},"观测：从 ",[37,112268,104994],{},[37,112270,105324],{}," 里取状态。",[22,112273,112274,112275,29349],{},"动作：写入 ",[37,112276,102040],{},[22,112278,112279],{},"奖励：根据任务目标打分。",[22,112281,112282],{},"循环：obs -> action -> step -> reward。",[40,112284,112285],{},"这就是后面 Gymnasium 环境的基本骨架。",[1179,112287,105250],{},{"title":35,"searchDepth":61,"depth":61,"links":112289},[112290,112291,112292,112297,112301,112302,112303,112311],{"id":101610,"depth":61,"text":101611},{"id":101733,"depth":61,"text":101734},{"id":102008,"depth":61,"text":102009,"children":112293},[112294,112295,112296],{"id":110664,"depth":93,"text":110665},{"id":110729,"depth":93,"text":110730},{"id":110745,"depth":93,"text":110746},{"id":102216,"depth":61,"text":102217,"children":112298},[112299,112300],{"id":102536,"depth":93,"text":102536},{"id":102672,"depth":93,"text":102672},{"id":103279,"depth":61,"text":103280},{"id":103311,"depth":61,"text":103312},{"id":103416,"depth":61,"text":103417,"children":112304},[112305,112306,112307,112308,112310],{"id":112169,"depth":93,"text":112169},{"id":112180,"depth":93,"text":112180},{"id":112213,"depth":93,"text":112213},{"id":112226,"depth":93,"text":112309},"obs[3] 为什么是杆子角速度",{"id":112249,"depth":93,"text":112250},{"id":103570,"depth":61,"text":103571},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110400,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112318,"title":112319,"body":112320,"description":35,"extension":1190,"meta":114334,"navigation":1192,"path":114335,"seo":114336,"stem":114337,"__hash__":114338},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112321,"toc":114310},[112322,112325,112327,112330,112332,112349,112352,112355,112361,112364,112366,112368,112392,112394,112408,112410,112451,112453,112471,112473,112476,112482,112485,112513,112517,112523,112548,112551,112582,112589,112592,112595,112601,112604,112610,112613,112619,112623,112626,112651,112654,112656,113416,113418,113430,113432,113443,113445,113448,113465,113468,113470,113481,113484,113486,113532,113535,113548,113551,113633,113636,113638,113654,113664,113677,113680,113719,113729,113740,113750,113763,113766,113795,113798,113808,113811,113817,113834,113845,113847,113853,113870,113881,113902,113905,113917,113920,113941,113944,113952,113960,113977,113980,114049,114056,114064,114067,114080,114087,114089,114092,114098,114101,114104,114110,114116,114118,114158,114160,114166,114175,114178,114180,114200,114203,114206,114212,114216,114218,114245,114248,114251,114278,114284,114287,114290,114292,114295,114298,114304,114307],[10,112323,112319],{"id":112324},"_7控制任务reacher-机械臂到达目标",[14,112326,101611],{"id":101610},[40,112328,112329],{},"本章搭建一个二维两关节 reacher 任务。",[40,112331,105295],{},[19,112333,112334,112337,112340,112343,112346],{},[22,112335,112336],{},"两个 hinge joint",[22,112338,112339],{},"两个 motor actuator",[22,112341,112342],{},"site 作为末端点和目标点",[22,112344,112345],{},"根据末端和目标距离设计 reward",[22,112347,112348],{},"构造机械臂任务的基本形式",[40,112350,112351],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[40,112353,112354],{},"Reacher 任务可以理解为：",[29,112356,112359],{"className":112357,"code":112358,"language":34,"meta":35},[32],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[37,112360,112358],{"__ignoreMap":35},[40,112362,112363],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112365,101734],{"id":101733},[40,112367,101737],{},[29,112369,112370],{"className":24785,"code":105352,"language":24787,"meta":35,"style":35},[37,112371,112372],{"__ignoreMap":35},[51,112373,112374,112376,112378,112380,112382,112384,112386,112388,112390],{"class":53,"line":54},[51,112375,25540],{"class":68},[51,112377,27279],{"class":282},[51,112379,24797],{"class":282},[51,112381,27364],{"class":175},[51,112383,105367],{"class":282},[51,112385,101762],{"class":282},[51,112387,103465],{"class":282},[51,112389,101778],{"class":282},[51,112391,105376],{"class":282},[40,112393,103783],{},[29,112395,112396],{"className":24785,"code":101883,"language":24787,"meta":35,"style":35},[37,112397,112398],{"__ignoreMap":35},[51,112399,112400,112402,112404,112406],{"class":53,"line":54},[51,112401,24794],{"class":68},[51,112403,24797],{"class":282},[51,112405,101894],{"class":282},[51,112407,101897],{"class":282},[40,112409,103800],{},[29,112411,112413],{"className":24785,"code":112412,"language":24787,"meta":35,"style":35},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[37,112414,112415,112432,112441],{"__ignoreMap":35},[51,112416,112417,112419,112421,112423,112426,112428,112430],{"class":53,"line":54},[51,112418,31294],{"class":68},[51,112420,30140],{"class":282},[51,112422,26079],{"class":175},[51,112424,112425],{"class":282}," mujoco-reacher",[51,112427,101939],{"class":282},[51,112429,101942],{"class":175},[51,112431,101945],{"class":175},[51,112433,112434,112436,112438],{"class":53,"line":61},[51,112435,31294],{"class":68},[51,112437,101952],{"class":282},[51,112439,112440],{"class":282}," mujoco-reacher\n",[51,112442,112443,112445,112447,112449],{"class":53,"line":93},[51,112444,24794],{"class":68},[51,112446,24797],{"class":282},[51,112448,101894],{"class":282},[51,112450,101897],{"class":282},[40,112452,101968],{},[19,112454,112455,112458,112461],{},[22,112456,112457],{},"本章使用低维状态，不使用图像输入。",[22,112459,112460],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[22,112462,112463,112464,1466,112466,1466,112468,112470],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[37,112465,104994],{},[37,112467,105324],{},[37,112469,104644],{}," 的方法一致。",[14,112472,102009],{"id":102008},[40,112474,112475],{},"Reacher 任务核心:",[29,112477,112480],{"className":112478,"code":112479,"language":34,"meta":35},[32],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[37,112481,112479],{"__ignoreMap":35},[40,112483,112484],{},"读取 site 世界坐标:",[29,112486,112488],{"className":31342,"code":112487,"language":31344,"meta":35,"style":35},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[37,112489,112490,112503],{"__ignoreMap":35},[51,112491,112492,112494,112496,112498,112501],{"class":53,"line":54},[51,112493,104598],{"class":72},[51,112495,108],{"class":64},[51,112497,104369],{"class":72},[51,112499,112500],{"class":282},"\"tip\"",[51,112502,90],{"class":72},[51,112504,112505,112508,112510],{"class":53,"line":61},[51,112506,112507],{"class":72},"tip_pos ",[51,112509,108],{"class":64},[51,112511,112512],{"class":72}," data.site_xpos[site_id]\n",[1233,112514,112516],{"id":112515},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[40,112518,112519,112520,112522],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[37,112521,104994],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[29,112524,112526],{"className":31342,"code":112525,"language":31344,"meta":35,"style":35},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[37,112527,112528,112538],{"__ignoreMap":35},[51,112529,112530,112533,112535],{"class":53,"line":54},[51,112531,112532],{"class":72},"tip ",[51,112534,108],{"class":64},[51,112536,112537],{"class":72}," data.site_xpos[tip_site_id]\n",[51,112539,112540,112543,112545],{"class":53,"line":61},[51,112541,112542],{"class":72},"target ",[51,112544,108],{"class":64},[51,112546,112547],{"class":72}," data.site_xpos[target_site_id]\n",[40,112549,112550],{},"这样 reward 就很容易写：",[29,112552,112554],{"className":31342,"code":112553,"language":31344,"meta":35,"style":35},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[37,112555,112556,112571],{"__ignoreMap":35},[51,112557,112558,112561,112563,112566,112568],{"class":53,"line":54},[51,112559,112560],{"class":72},"dist ",[51,112562,108],{"class":64},[51,112564,112565],{"class":72}," np.linalg.norm(tip ",[51,112567,1778],{"class":64},[51,112569,112570],{"class":72}," target)\n",[51,112572,112573,112575,112577,112579],{"class":53,"line":61},[51,112574,111969],{"class":72},[51,112576,108],{"class":64},[51,112578,53235],{"class":64},[51,112580,112581],{"class":72},"dist\n",[40,112583,112584,112585,112588],{},"距离越小，",[37,112586,112587],{},"-dist"," 越接近 0，奖励越高。",[1233,112590,112591],{"id":112591},"两关节机械臂的状态",[40,112593,112594],{},"这个模型有两个 hinge joint：",[29,112596,112599],{"className":112597,"code":112598,"language":34,"meta":35},[32],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[37,112600,112598],{"__ignoreMap":35},[40,112602,112603],{},"再加上末端和目标位置：",[29,112605,112608],{"className":112606,"code":112607,"language":34,"meta":35},[32],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[37,112609,112607],{"__ignoreMap":35},[40,112611,112612],{},"总维度：",[29,112614,112617],{"className":112615,"code":112616,"language":34,"meta":35},[32],"2 + 2 + 3 + 3 = 10\n",[37,112618,112616],{"__ignoreMap":35},[1233,112620,112622],{"id":112621},"为什么-gravity-是-0","为什么 gravity 是 0",[40,112624,112625],{},"本章把重力设为：",[29,112627,112629],{"className":54031,"code":112628,"language":54033,"meta":35,"style":35},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[37,112630,112631],{"__ignoreMap":35},[51,112632,112633,112635,112637,112639,112641,112643,112645,112647,112649],{"class":53,"line":54},[51,112634,2154],{"class":72},[51,112636,70130],{"class":52264},[51,112638,102158],{"class":68},[51,112640,108],{"class":72},[51,112642,102163],{"class":282},[51,112644,102166],{"class":68},[51,112646,108],{"class":72},[51,112648,104735],{"class":282},[51,112650,102108],{"class":72},[40,112652,112653],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112655,102217],{"id":102216},[29,112657,112659],{"className":31342,"code":112658,"language":31344,"meta":35,"style":35},"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",[37,112660,112661,112667,112677,112681,112685,112693,112698,112703,112707,112711,112716,112721,112725,112730,112735,112740,112744,112749,112754,112759,112764,112768,112772,112776,112780,112784,112789,112794,112798,112802,112806,112810,112814,112829,112838,112850,112873,112880,112884,112888,112898,112912,112926,112933,112937,112941,112955,112967,112979,112992,113007,113024,113028,113032,113044,113056,113064,113072,113076,113092,113097,113110,113123,113138,113142,113177,113209,113213,113217,113226,113230,113246,113256,113267,113283,113299,113315,113331,113335,113353,113373,113392,113396,113400,113412],{"__ignoreMap":35},[51,112662,112663,112665],{"class":53,"line":54},[51,112664,31356],{"class":64},[51,112666,102265],{"class":72},[51,112668,112669,112671,112673,112675],{"class":53,"line":61},[51,112670,31356],{"class":64},[51,112672,32344],{"class":72},[51,112674,32347],{"class":64},[51,112676,32350],{"class":72},[51,112678,112679],{"class":53,"line":93},[51,112680,3480],{"emptyLinePlaceholder":1192},[51,112682,112683],{"class":53,"line":99},[51,112684,3480],{"emptyLinePlaceholder":1192},[51,112686,112687,112689,112691],{"class":53,"line":120},[51,112688,102278],{"class":175},[51,112690,14526],{"class":64},[51,112692,102283],{"class":282},[51,112694,112695],{"class":53,"line":129},[51,112696,112697],{"class":282},"\u003Cmujoco model=\"two_link_reacher\">\n",[51,112699,112700],{"class":53,"line":206},[51,112701,112702],{"class":282},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[51,112704,112705],{"class":53,"line":212},[51,112706,3480],{"emptyLinePlaceholder":1192},[51,112708,112709],{"class":53,"line":227},[51,112710,102302],{"class":282},[51,112712,112713],{"class":53,"line":370},[51,112714,112715],{"class":282},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[51,112717,112718],{"class":53,"line":387},[51,112719,112720],{"class":282},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[51,112722,112723],{"class":53,"line":404},[51,112724,3480],{"emptyLinePlaceholder":1192},[51,112726,112727],{"class":53,"line":415},[51,112728,112729],{"class":282},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[51,112731,112732],{"class":53,"line":420},[51,112733,112734],{"class":282},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[51,112736,112737],{"class":53,"line":429},[51,112738,112739],{"class":282},"      \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",[51,112741,112742],{"class":53,"line":434},[51,112743,3480],{"emptyLinePlaceholder":1192},[51,112745,112746],{"class":53,"line":448},[51,112747,112748],{"class":282},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[51,112750,112751],{"class":53,"line":462},[51,112752,112753],{"class":282},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[51,112755,112756],{"class":53,"line":470},[51,112757,112758],{"class":282},"        \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",[51,112760,112761],{"class":53,"line":2783},[51,112762,112763],{"class":282},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[51,112765,112766],{"class":53,"line":2788},[51,112767,107402],{"class":282},[51,112769,112770],{"class":53,"line":2817},[51,112771,102331],{"class":282},[51,112773,112774],{"class":53,"line":2822},[51,112775,102336],{"class":282},[51,112777,112778],{"class":53,"line":2839},[51,112779,3480],{"emptyLinePlaceholder":1192},[51,112781,112782],{"class":53,"line":2844},[51,112783,107419],{"class":282},[51,112785,112786],{"class":53,"line":2849},[51,112787,112788],{"class":282},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[51,112790,112791],{"class":53,"line":2854},[51,112792,112793],{"class":282},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[51,112795,112796],{"class":53,"line":2868},[51,112797,107429],{"class":282},[51,112799,112800],{"class":53,"line":2873},[51,112801,102341],{"class":282},[51,112803,112804],{"class":53,"line":3657},[51,112805,96662],{"class":282},[51,112807,112808],{"class":53,"line":3671},[51,112809,3480],{"emptyLinePlaceholder":1192},[51,112811,112812],{"class":53,"line":3679},[51,112813,3480],{"emptyLinePlaceholder":1192},[51,112815,112816,112818,112821,112824,112826],{"class":53,"line":3684},[51,112817,32911],{"class":64},[51,112819,112820],{"class":68}," site_position",[51,112822,112823],{"class":72},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[51,112825,2407],{"class":175},[51,112827,112828],{"class":72},") -> np.ndarray:\n",[51,112830,112831,112833,112835],{"class":53,"line":3690},[51,112832,104364],{"class":72},[51,112834,108],{"class":64},[51,112836,112837],{"class":72}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[51,112839,112840,112842,112844,112846,112848],{"class":53,"line":3696},[51,112841,4178],{"class":64},[51,112843,104413],{"class":72},[51,112845,2154],{"class":64},[51,112847,5169],{"class":175},[51,112849,4816],{"class":72},[51,112851,112852,112854,112856,112858,112860,112863,112865,112867,112869,112871],{"class":53,"line":3701},[51,112853,104396],{"class":64},[51,112855,104399],{"class":175},[51,112857,73],{"class":72},[51,112859,1311],{"class":64},[51,112861,112862],{"class":282},"\"site not found: ",[51,112864,2140],{"class":175},[51,112866,80774],{"class":72},[51,112868,2190],{"class":175},[51,112870,1503],{"class":282},[51,112872,90],{"class":72},[51,112874,112875,112877],{"class":53,"line":8910},[51,112876,123],{"class":64},[51,112878,112879],{"class":72}," data.site_xpos[site_id].copy()\n",[51,112881,112882],{"class":53,"line":8934},[51,112883,3480],{"emptyLinePlaceholder":1192},[51,112885,112886],{"class":53,"line":8939},[51,112887,3480],{"emptyLinePlaceholder":1192},[51,112889,112890,112892,112895],{"class":53,"line":8945},[51,112891,32911],{"class":64},[51,112893,112894],{"class":68}," get_obs",[51,112896,112897],{"class":72},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[51,112899,112900,112903,112905,112908,112910],{"class":53,"line":8972},[51,112901,112902],{"class":72},"    tip ",[51,112904,108],{"class":64},[51,112906,112907],{"class":72}," site_position(model, data, ",[51,112909,112500],{"class":282},[51,112911,90],{"class":72},[51,112913,112914,112917,112919,112921,112924],{"class":53,"line":8977},[51,112915,112916],{"class":72},"    target ",[51,112918,108],{"class":64},[51,112920,112907],{"class":72},[51,112922,112923],{"class":282},"\"target\"",[51,112925,90],{"class":72},[51,112927,112928,112930],{"class":53,"line":8983},[51,112929,123],{"class":64},[51,112931,112932],{"class":72}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[51,112934,112935],{"class":53,"line":8995},[51,112936,3480],{"emptyLinePlaceholder":1192},[51,112938,112939],{"class":53,"line":9007},[51,112940,3480],{"emptyLinePlaceholder":1192},[51,112942,112943,112945,112948,112951,112953],{"class":53,"line":9019},[51,112944,32911],{"class":64},[51,112946,112947],{"class":68}," reward",[51,112949,112950],{"class":72},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[51,112952,1300],{"class":175},[51,112954,4816],{"class":72},[51,112956,112957,112959,112961,112963,112965],{"class":53,"line":10678},[51,112958,112902],{"class":72},[51,112960,108],{"class":64},[51,112962,112907],{"class":72},[51,112964,112500],{"class":282},[51,112966,90],{"class":72},[51,112968,112969,112971,112973,112975,112977],{"class":53,"line":10703},[51,112970,112916],{"class":72},[51,112972,108],{"class":64},[51,112974,112907],{"class":72},[51,112976,112923],{"class":282},[51,112978,90],{"class":72},[51,112980,112981,112984,112986,112988,112990],{"class":53,"line":10726},[51,112982,112983],{"class":72},"    dist ",[51,112985,108],{"class":64},[51,112987,112565],{"class":72},[51,112989,1778],{"class":64},[51,112991,112570],{"class":72},[51,112993,112994,112997,112999,113002,113004],{"class":53,"line":10750},[51,112995,112996],{"class":72},"    control_cost ",[51,112998,108],{"class":64},[51,113000,113001],{"class":175}," 0.01",[51,113003,7480],{"class":64},[51,113005,113006],{"class":72}," np.sum(np.square(data.ctrl))\n",[51,113008,113009,113011,113013,113015,113017,113019,113021],{"class":53,"line":10755},[51,113010,123],{"class":64},[51,113012,110761],{"class":175},[51,113014,73],{"class":72},[51,113016,1778],{"class":64},[51,113018,112560],{"class":72},[51,113020,1778],{"class":64},[51,113022,113023],{"class":72}," control_cost)\n",[51,113025,113026],{"class":53,"line":10760},[51,113027,3480],{"emptyLinePlaceholder":1192},[51,113029,113030],{"class":53,"line":10765},[51,113031,3480],{"emptyLinePlaceholder":1192},[51,113033,113034,113036,113038,113040,113042],{"class":53,"line":10774},[51,113035,32911],{"class":64},[51,113037,151],{"class":68},[51,113039,102362],{"class":72},[51,113041,96650],{"class":175},[51,113043,4816],{"class":72},[51,113045,113046,113048,113050,113052,113054],{"class":53,"line":10779},[51,113047,102371],{"class":72},[51,113049,108],{"class":64},[51,113051,102376],{"class":72},[51,113053,102278],{"class":175},[51,113055,90],{"class":72},[51,113057,113058,113060,113062],{"class":53,"line":10785},[51,113059,102385],{"class":72},[51,113061,108],{"class":64},[51,113063,102390],{"class":72},[51,113065,113066,113068,113070],{"class":53,"line":10806},[51,113067,111117],{"class":72},[51,113069,108],{"class":64},[51,113071,105725],{"class":175},[51,113073,113074],{"class":53,"line":10812},[51,113075,3480],{"emptyLinePlaceholder":1192},[51,113077,113078,113080,113082,113084,113086,113088,113090],{"class":53,"line":10826},[51,113079,4278],{"class":64},[51,113081,32580],{"class":72},[51,113083,27007],{"class":64},[51,113085,33407],{"class":175},[51,113087,73],{"class":72},[51,113089,66038],{"class":175},[51,113091,31750],{"class":72},[51,113093,113094],{"class":53,"line":10832},[51,113095,113096],{"class":72},"        mujoco.mj_forward(model, data)\n",[51,113098,113099,113102,113104,113106,113108],{"class":53,"line":10859},[51,113100,113101],{"class":72},"        tip ",[51,113103,108],{"class":64},[51,113105,112907],{"class":72},[51,113107,112500],{"class":282},[51,113109,90],{"class":72},[51,113111,113112,113115,113117,113119,113121],{"class":53,"line":10868},[51,113113,113114],{"class":72},"        target ",[51,113116,108],{"class":64},[51,113118,112907],{"class":72},[51,113120,112923],{"class":282},[51,113122,90],{"class":72},[51,113124,113125,113128,113130,113133,113135],{"class":53,"line":10874},[51,113126,113127],{"class":72},"        error ",[51,113129,108],{"class":64},[51,113131,113132],{"class":72}," target ",[51,113134,1778],{"class":64},[51,113136,113137],{"class":72}," tip\n",[51,113139,113140],{"class":53,"line":10882},[51,113141,3480],{"emptyLinePlaceholder":1192},[51,113143,113144,113146,113148,113150,113152,113155,113157,113159,113162,113164,113167,113169,113171,113173,113175],{"class":53,"line":10887},[51,113145,107581],{"class":72},[51,113147,176],{"class":175},[51,113149,5517],{"class":72},[51,113151,108],{"class":64},[51,113153,113154],{"class":72}," np.clip(",[51,113156,106224],{"class":175},[51,113158,7480],{"class":64},[51,113160,113161],{"class":72}," error[",[51,113163,1334],{"class":175},[51,113165,113166],{"class":72},"], ",[51,113168,1778],{"class":64},[51,113170,103367],{"class":175},[51,113172,13397],{"class":72},[51,113174,103367],{"class":175},[51,113176,90],{"class":72},[51,113178,113179,113181,113183,113185,113187,113189,113191,113193,113195,113197,113199,113201,113203,113205,113207],{"class":53,"line":17566},[51,113180,107581],{"class":72},[51,113182,791],{"class":175},[51,113184,5517],{"class":72},[51,113186,108],{"class":64},[51,113188,113154],{"class":72},[51,113190,106224],{"class":175},[51,113192,7480],{"class":64},[51,113194,113161],{"class":72},[51,113196,176],{"class":175},[51,113198,113166],{"class":72},[51,113200,1778],{"class":64},[51,113202,103367],{"class":175},[51,113204,13397],{"class":72},[51,113206,103367],{"class":175},[51,113208,90],{"class":72},[51,113210,113211],{"class":53,"line":17572},[51,113212,3480],{"emptyLinePlaceholder":1192},[51,113214,113215],{"class":53,"line":17595},[51,113216,102480],{"class":72},[51,113218,113219,113221,113223],{"class":53,"line":17601},[51,113220,111261],{"class":72},[51,113222,10439],{"class":64},[51,113224,113225],{"class":72}," reward(model, data)\n",[51,113227,113228],{"class":53,"line":17624},[51,113229,3480],{"emptyLinePlaceholder":1192},[51,113231,113232,113234,113236,113238,113240,113242,113244],{"class":53,"line":17638},[51,113233,3577],{"class":64},[51,113235,32580],{"class":72},[51,113237,1577],{"class":64},[51,113239,661],{"class":175},[51,113241,102523],{"class":64},[51,113243,5169],{"class":175},[51,113245,4816],{"class":72},[51,113247,113248,113251,113253],{"class":53,"line":17658},[51,113249,113250],{"class":72},"            obs ",[51,113252,108],{"class":64},[51,113254,113255],{"class":72}," get_obs(model, data)\n",[51,113257,113258,113260,113262,113264],{"class":53,"line":17664},[51,113259,35614],{"class":175},[51,113261,73],{"class":72},[51,113263,111295],{"class":282},[51,113265,113266],{"class":72},", step)\n",[51,113268,113269,113271,113273,113276,113279,113281],{"class":53,"line":17675},[51,113270,35614],{"class":175},[51,113272,73],{"class":72},[51,113274,113275],{"class":282},"\"  tip:\"",[51,113277,113278],{"class":72},", np.round(tip, ",[51,113280,1328],{"class":175},[51,113282,31461],{"class":72},[51,113284,113285,113287,113289,113292,113295,113297],{"class":53,"line":17698},[51,113286,35614],{"class":175},[51,113288,73],{"class":72},[51,113290,113291],{"class":282},"\"  target:\"",[51,113293,113294],{"class":72},", np.round(target, ",[51,113296,1328],{"class":175},[51,113298,31461],{"class":72},[51,113300,113301,113303,113305,113308,113311,113313],{"class":53,"line":17720},[51,113302,35614],{"class":175},[51,113304,73],{"class":72},[51,113306,113307],{"class":282},"\"  ctrl:\"",[51,113309,113310],{"class":72},", np.round(data.ctrl.copy(), ",[51,113312,1328],{"class":175},[51,113314,31461],{"class":72},[51,113316,113317,113319,113321,113324,113327,113329],{"class":53,"line":17725},[51,113318,35614],{"class":175},[51,113320,73],{"class":72},[51,113322,113323],{"class":282},"\"  obs_dim:\"",[51,113325,113326],{"class":72},", obs.shape[",[51,113328,176],{"class":175},[51,113330,5731],{"class":72},[51,113332,113333],{"class":53,"line":17731},[51,113334,3480],{"emptyLinePlaceholder":1192},[51,113336,113337,113339,113341,113343,113345,113347,113349,113351],{"class":53,"line":17745},[51,113338,32263],{"class":175},[51,113340,73],{"class":72},[51,113342,111340],{"class":282},[51,113344,13397],{"class":72},[51,113346,32982],{"class":175},[51,113348,111347],{"class":72},[51,113350,1328],{"class":175},[51,113352,31461],{"class":72},[51,113354,113355,113357,113359,113362,113365,113367,113369,113371],{"class":53,"line":17758},[51,113356,32263],{"class":175},[51,113358,73],{"class":72},[51,113360,113361],{"class":282},"\"final tip:\"",[51,113363,113364],{"class":72},", np.round(site_position(model, data, ",[51,113366,112500],{"class":282},[51,113368,111309],{"class":72},[51,113370,1328],{"class":175},[51,113372,31461],{"class":72},[51,113374,113375,113377,113379,113382,113384,113386,113388,113390],{"class":53,"line":17763},[51,113376,32263],{"class":175},[51,113378,73],{"class":72},[51,113380,113381],{"class":282},"\"target:\"",[51,113383,113364],{"class":72},[51,113385,112923],{"class":282},[51,113387,111309],{"class":72},[51,113389,1328],{"class":175},[51,113391,31461],{"class":72},[51,113393,113394],{"class":53,"line":17777},[51,113395,3480],{"emptyLinePlaceholder":1192},[51,113397,113398],{"class":53,"line":17782},[51,113399,3480],{"emptyLinePlaceholder":1192},[51,113401,113402,113404,113406,113408,113410],{"class":53,"line":17788},[51,113403,2633],{"class":64},[51,113405,32184],{"class":175},[51,113407,102523],{"class":64},[51,113409,102526],{"class":282},[51,113411,4816],{"class":72},[51,113413,113414],{"class":53,"line":17793},[51,113415,102533],{"class":72},[40,113417,104534],{},[29,113419,113421],{"className":24785,"code":113420,"language":24787,"meta":35,"style":35},"touch ch7_reacher.py\n",[37,113422,113423],{"__ignoreMap":35},[51,113424,113425,113427],{"class":53,"line":54},[51,113426,102247],{"class":68},[51,113428,113429],{"class":282}," ch7_reacher.py\n",[40,113431,111408],{},[29,113433,113435],{"className":24785,"code":113434,"language":24787,"meta":35,"style":35},"python ch7_reacher.py\n",[37,113436,113437],{"__ignoreMap":35},[51,113438,113439,113441],{"class":53,"line":54},[51,113440,31344],{"class":68},[51,113442,113429],{"class":282},[1233,113444,102536],{"id":102536},[40,113446,113447],{},"读取 site 坐标：",[29,113449,113451],{"className":31342,"code":113450,"language":31344,"meta":35,"style":35},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[37,113452,113453],{"__ignoreMap":35},[51,113454,113455,113457,113459,113461,113463],{"class":53,"line":54},[51,113456,32911],{"class":64},[51,113458,112820],{"class":68},[51,113460,112823],{"class":72},[51,113462,2407],{"class":175},[51,113464,112828],{"class":72},[40,113466,113467],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[40,113469,111424],{},[29,113471,113473],{"className":31342,"code":113472,"language":31344,"meta":35,"style":35},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[37,113474,113475],{"__ignoreMap":35},[51,113476,113477,113479],{"class":53,"line":54},[51,113478,18008],{"class":64},[51,113480,112932],{"class":72},[40,113482,113483],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[40,113485,110749],{},[29,113487,113489],{"className":31342,"code":113488,"language":31344,"meta":35,"style":35},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[37,113490,113491,113503,113516],{"__ignoreMap":35},[51,113492,113493,113495,113497,113499,113501],{"class":53,"line":54},[51,113494,112560],{"class":72},[51,113496,108],{"class":64},[51,113498,112565],{"class":72},[51,113500,1778],{"class":64},[51,113502,112570],{"class":72},[51,113504,113505,113508,113510,113512,113514],{"class":53,"line":61},[51,113506,113507],{"class":72},"control_cost ",[51,113509,108],{"class":64},[51,113511,113001],{"class":175},[51,113513,7480],{"class":64},[51,113515,113006],{"class":72},[51,113517,113518,113520,113522,113524,113526,113528,113530],{"class":53,"line":93},[51,113519,18008],{"class":64},[51,113521,110761],{"class":175},[51,113523,73],{"class":72},[51,113525,1778],{"class":64},[51,113527,112560],{"class":72},[51,113529,1778],{"class":64},[51,113531,113023],{"class":72},[40,113533,113534],{},"奖励由两部分组成：",[19,113536,113537,113542],{},[22,113538,113539,113541],{},[37,113540,112587],{},"：末端离目标越远，奖励越低。",[22,113543,113544,113547],{},[37,113545,113546],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[40,113549,113550],{},"简单控制器：",[29,113552,113554],{"className":31342,"code":113553,"language":31344,"meta":35,"style":35},"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",[37,113555,113556,113569,113601],{"__ignoreMap":35},[51,113557,113558,113561,113563,113565,113567],{"class":53,"line":54},[51,113559,113560],{"class":72},"error ",[51,113562,108],{"class":64},[51,113564,113132],{"class":72},[51,113566,1778],{"class":64},[51,113568,113137],{"class":72},[51,113570,113571,113573,113575,113577,113579,113581,113583,113585,113587,113589,113591,113593,113595,113597,113599],{"class":53,"line":61},[51,113572,106835],{"class":72},[51,113574,176],{"class":175},[51,113576,5517],{"class":72},[51,113578,108],{"class":64},[51,113580,113154],{"class":72},[51,113582,106224],{"class":175},[51,113584,7480],{"class":64},[51,113586,113161],{"class":72},[51,113588,1334],{"class":175},[51,113590,113166],{"class":72},[51,113592,1778],{"class":64},[51,113594,103367],{"class":175},[51,113596,13397],{"class":72},[51,113598,103367],{"class":175},[51,113600,90],{"class":72},[51,113602,113603,113605,113607,113609,113611,113613,113615,113617,113619,113621,113623,113625,113627,113629,113631],{"class":53,"line":93},[51,113604,106835],{"class":72},[51,113606,791],{"class":175},[51,113608,5517],{"class":72},[51,113610,108],{"class":64},[51,113612,113154],{"class":72},[51,113614,106224],{"class":175},[51,113616,7480],{"class":64},[51,113618,113161],{"class":72},[51,113620,176],{"class":175},[51,113622,113166],{"class":72},[51,113624,1778],{"class":64},[51,113626,103367],{"class":175},[51,113628,13397],{"class":72},[51,113630,103367],{"class":175},[51,113632,90],{"class":72},[40,113634,113635],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[1233,113637,102672],{"id":102672},[29,113639,113640],{"className":31342,"code":113450,"language":31344,"meta":35,"style":35},[37,113641,113642],{"__ignoreMap":35},[51,113643,113644,113646,113648,113650,113652],{"class":53,"line":54},[51,113645,32911],{"class":64},[51,113647,112820],{"class":68},[51,113649,112823],{"class":72},[51,113651,2407],{"class":175},[51,113653,112828],{"class":72},[40,113655,113656,113657,113659,113660,83503,113662,29349],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[37,113658,80774],{}," 是 site 的名字，比如 ",[37,113661,112500],{},[37,113663,112923],{},[29,113665,113667],{"className":31342,"code":113666,"language":31344,"meta":35,"style":35},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[37,113668,113669],{"__ignoreMap":35},[51,113670,113671,113673,113675],{"class":53,"line":54},[51,113672,104598],{"class":72},[51,113674,108],{"class":64},[51,113676,112837],{"class":72},[40,113678,113679],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[29,113681,113683],{"className":31342,"code":113682,"language":31344,"meta":35,"style":35},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[37,113684,113685,113697],{"__ignoreMap":35},[51,113686,113687,113689,113691,113693,113695],{"class":53,"line":54},[51,113688,2633],{"class":64},[51,113690,104413],{"class":72},[51,113692,2154],{"class":64},[51,113694,5169],{"class":175},[51,113696,4816],{"class":72},[51,113698,113699,113701,113703,113705,113707,113709,113711,113713,113715,113717],{"class":53,"line":61},[51,113700,104859],{"class":64},[51,113702,104399],{"class":175},[51,113704,73],{"class":72},[51,113706,1311],{"class":64},[51,113708,112862],{"class":282},[51,113710,2140],{"class":175},[51,113712,80774],{"class":72},[51,113714,2190],{"class":175},[51,113716,1503],{"class":282},[51,113718,90],{"class":72},[40,113720,113721,113722,113725,113726,113728],{},"如果 site 没找到，就主动报错。",[37,113723,113724],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[37,113727,80774],{}," 的值放进字符串里。",[29,113730,113732],{"className":31342,"code":113731,"language":31344,"meta":35,"style":35},"return data.site_xpos[site_id].copy()\n",[37,113733,113734],{"__ignoreMap":35},[51,113735,113736,113738],{"class":53,"line":54},[51,113737,18008],{"class":64},[51,113739,112879],{"class":72},[40,113741,113742,113743,113745,113746,113749],{},"返回这个 site 的世界坐标。",[37,113744,104644],{}," 里的每一行都是一个 site 的 ",[37,113747,113748],{},"(x, y, z)"," 坐标。",[29,113751,113753],{"className":31342,"code":113752,"language":31344,"meta":35,"style":35},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[37,113754,113755],{"__ignoreMap":35},[51,113756,113757,113759,113761],{"class":53,"line":54},[51,113758,32911],{"class":64},[51,113760,112894],{"class":68},[51,113762,112897],{"class":72},[40,113764,113765],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[29,113767,113769],{"className":31342,"code":113768,"language":31344,"meta":35,"style":35},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[37,113770,113771,113783],{"__ignoreMap":35},[51,113772,113773,113775,113777,113779,113781],{"class":53,"line":54},[51,113774,112532],{"class":72},[51,113776,108],{"class":64},[51,113778,112907],{"class":72},[51,113780,112500],{"class":282},[51,113782,90],{"class":72},[51,113784,113785,113787,113789,113791,113793],{"class":53,"line":61},[51,113786,112542],{"class":72},[51,113788,108],{"class":64},[51,113790,112907],{"class":72},[51,113792,112923],{"class":282},[51,113794,90],{"class":72},[40,113796,113797],{},"分别读取末端点和目标点的世界坐标。",[29,113799,113800],{"className":31342,"code":113472,"language":31344,"meta":35,"style":35},[37,113801,113802],{"__ignoreMap":35},[51,113803,113804,113806],{"class":53,"line":54},[51,113805,18008],{"class":64},[51,113807,112932],{"class":72},[40,113809,113810],{},"把四部分拼成一个观测数组：",[29,113812,113815],{"className":113813,"code":113814,"language":34,"meta":35},[32],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[37,113816,113814],{"__ignoreMap":35},[29,113818,113820],{"className":31342,"code":113819,"language":31344,"meta":35,"style":35},"dist = np.linalg.norm(tip - target)\n",[37,113821,113822],{"__ignoreMap":35},[51,113823,113824,113826,113828,113830,113832],{"class":53,"line":54},[51,113825,112560],{"class":72},[51,113827,108],{"class":64},[51,113829,112565],{"class":72},[51,113831,1778],{"class":64},[51,113833,112570],{"class":72},[40,113835,113836,113837,113840,113841,113844],{},"计算 tip 到 target 的距离。",[37,113838,113839],{},"tip - target"," 得到一个三维向量，",[37,113842,113843],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[40,113846,15595],{},[29,113848,113851],{"className":113849,"code":113850,"language":34,"meta":35},[32],"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",[37,113852,113850],{"__ignoreMap":35},[29,113854,113856],{"className":31342,"code":113855,"language":31344,"meta":35,"style":35},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[37,113857,113858],{"__ignoreMap":35},[51,113859,113860,113862,113864,113866,113868],{"class":53,"line":54},[51,113861,113507],{"class":72},[51,113863,108],{"class":64},[51,113865,113001],{"class":175},[51,113867,7480],{"class":64},[51,113869,113006],{"class":72},[40,113871,113872,113873,113876,113877,113880],{},"计算动作惩罚。",[37,113874,113875],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[37,113878,113879],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[29,113882,113884],{"className":31342,"code":113883,"language":31344,"meta":35,"style":35},"return float(-dist - control_cost)\n",[37,113885,113886],{"__ignoreMap":35},[51,113887,113888,113890,113892,113894,113896,113898,113900],{"class":53,"line":54},[51,113889,18008],{"class":64},[51,113891,110761],{"class":175},[51,113893,73],{"class":72},[51,113895,1778],{"class":64},[51,113897,112560],{"class":72},[51,113899,1778],{"class":64},[51,113901,113023],{"class":72},[40,113903,113904],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[29,113906,113907],{"className":31342,"code":111767,"language":31344,"meta":35,"style":35},[37,113908,113909],{"__ignoreMap":35},[51,113910,113911,113913,113915],{"class":53,"line":54},[51,113912,111774],{"class":72},[51,113914,108],{"class":64},[51,113916,105725],{"class":175},[40,113918,113919],{},"累计奖励变量，记录整个运行过程的总分。",[29,113921,113923],{"className":31342,"code":113922,"language":31344,"meta":35,"style":35},"for step in range(500):\n",[37,113924,113925],{"__ignoreMap":35},[51,113926,113927,113929,113931,113933,113935,113937,113939],{"class":53,"line":54},[51,113928,4102],{"class":64},[51,113930,32580],{"class":72},[51,113932,27007],{"class":64},[51,113934,33407],{"class":175},[51,113936,73],{"class":72},[51,113938,66038],{"class":175},[51,113940,31750],{"class":72},[40,113942,113943],{},"运行 500 个控制步。",[29,113945,113946],{"className":31342,"code":105507,"language":31344,"meta":35,"style":35},[37,113947,113948],{"__ignoreMap":35},[51,113949,113950],{"class":53,"line":54},[51,113951,105507],{"class":72},[40,113953,113954,113955,101982,113957,113959],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[37,113956,104195],{},[37,113958,104198],{}," 是当前状态下的坐标。",[29,113961,113963],{"className":31342,"code":113962,"language":31344,"meta":35,"style":35},"error = target - tip\n",[37,113964,113965],{"__ignoreMap":35},[51,113966,113967,113969,113971,113973,113975],{"class":53,"line":54},[51,113968,113560],{"class":72},[51,113970,108],{"class":64},[51,113972,113132],{"class":72},[51,113974,1778],{"class":64},[51,113976,113137],{"class":72},[40,113978,113979],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[29,113981,113983],{"className":31342,"code":113982,"language":31344,"meta":35,"style":35},"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",[37,113984,113985,114017],{"__ignoreMap":35},[51,113986,113987,113989,113991,113993,113995,113997,113999,114001,114003,114005,114007,114009,114011,114013,114015],{"class":53,"line":54},[51,113988,106835],{"class":72},[51,113990,176],{"class":175},[51,113992,5517],{"class":72},[51,113994,108],{"class":64},[51,113996,113154],{"class":72},[51,113998,106224],{"class":175},[51,114000,7480],{"class":64},[51,114002,113161],{"class":72},[51,114004,1334],{"class":175},[51,114006,113166],{"class":72},[51,114008,1778],{"class":64},[51,114010,103367],{"class":175},[51,114012,13397],{"class":72},[51,114014,103367],{"class":175},[51,114016,90],{"class":72},[51,114018,114019,114021,114023,114025,114027,114029,114031,114033,114035,114037,114039,114041,114043,114045,114047],{"class":53,"line":61},[51,114020,106835],{"class":72},[51,114022,791],{"class":175},[51,114024,5517],{"class":72},[51,114026,108],{"class":64},[51,114028,113154],{"class":72},[51,114030,106224],{"class":175},[51,114032,7480],{"class":64},[51,114034,113161],{"class":72},[51,114036,176],{"class":175},[51,114038,113166],{"class":72},[51,114040,1778],{"class":64},[51,114042,103367],{"class":175},[51,114044,13397],{"class":72},[51,114046,103367],{"class":175},[51,114048,90],{"class":72},[40,114050,114051,114052,114055],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[37,114053,114054],{},"error -> ctrl -> step"," 的流程。",[29,114057,114058],{"className":31342,"code":105469,"language":31344,"meta":35,"style":35},[37,114059,114060],{"__ignoreMap":35},[51,114061,114062],{"class":53,"line":54},[51,114063,105469],{"class":72},[40,114065,114066],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[29,114068,114070],{"className":31342,"code":114069,"language":31344,"meta":35,"style":35},"obs = get_obs(model, data)\n",[37,114071,114072],{"__ignoreMap":35},[51,114073,114074,114076,114078],{"class":53,"line":54},[51,114075,111818],{"class":72},[51,114077,108],{"class":64},[51,114079,113255],{"class":72},[40,114081,114082,114083,114086],{},"读取最新观测。后面打印 ",[37,114084,114085],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114088,103280],{"id":103279},[40,114090,114091],{},"观测维度为:",[29,114093,114096],{"className":114094,"code":114095,"language":34,"meta":35},[32],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[37,114097,114095],{"__ignoreMap":35},[40,114099,114100],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[40,114102,114103],{},"程序每 100 步打印：",[29,114105,114108],{"className":114106,"code":114107,"language":34,"meta":35},[32],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[37,114109,114107],{"__ignoreMap":35},[40,114111,114112,114113,114115],{},"如果控制有效，你应该看到最终 ",[37,114114,104195],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114117,103312],{"id":103311},[19,114119,114120,114123,114126,114132,114138,114145,114155],{},[22,114121,114122],{},"修改目标点位置。",[22,114124,114125],{},"重新运行，观察最终 tip 是否变化。",[22,114127,114128,114129,114131],{},"把 gravity 改成 ",[37,114130,103553],{},"，观察控制是否变差。",[22,114133,112145,114134,112149,114136,29349],{},[37,114135,103122],{},[37,114137,1334],{},[22,114139,103375,114140,103378,114142,114144],{},[37,114141,111560],{},[37,114143,108271],{},"，观察机械臂是否更难移动。",[22,114146,103375,114147,83494,114149,103378,114151,114154],{},[37,114148,104198],{},[37,114150,105110],{},[37,114152,114153],{},"0.2 0 0.6","，观察 reward 和 final tip。",[22,114156,114157],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114159,103417],{"id":103416},[1233,114161,114163],{"id":114162},"site-not-found",[37,114164,114165],{},"site not found",[40,114167,114168,114169,101982,114172,29349],{},"检查 XML 中是否有 ",[37,114170,114171],{},"site name=\"tip\"",[37,114173,114174],{},"site name=\"target\"",[1233,114176,114177],{"id":114177},"机械臂完全不动",[40,114179,103487],{},[19,114181,114182,114187,114190,114195],{},[22,114183,114184,114186],{},[37,114185,103122],{}," 是否为 2",[22,114188,114189],{},"actuator 是否引用正确 joint",[22,114191,114192,114194],{},[37,114193,102040],{}," 是否被赋值",[22,114196,114197,114198],{},"是否执行了 ",[37,114199,101649],{},[1233,114201,114202],{"id":114202},"控制效果不好",[40,114204,114205],{},"正常。本章重点不是控制器最优，而是任务结构:",[29,114207,114210],{"className":114208,"code":114209,"language":34,"meta":35},[32],"obs → action → mj_step → reward → next_obs\n",[37,114211,114209],{"__ignoreMap":35},[1233,114213,114215],{"id":114214},"tip-坐标不变化","tip 坐标不变化",[40,114217,103539],{},[19,114219,114220,114225,114233,114242],{},[22,114221,114222,114223,29349],{},"是否每步调用了 ",[37,114224,101649],{},[22,114226,114227,114228,101982,114230,29349],{},"是否写入了 ",[37,114229,107090],{},[37,114231,114232],{},"data.ctrl[1]",[22,114234,114235,114236,1466,114239,29349],{},"actuator 是否正确引用 ",[37,114237,114238],{},"joint1",[37,114240,114241],{},"joint2",[22,114243,114244],{},"控制输入是否太小。",[1233,114246,114247],{"id":114247},"目标点不会动",[40,114249,114250],{},"本章的 target 是固定 site：",[29,114252,114254],{"className":54031,"code":114253,"language":54033,"meta":35,"style":35},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[37,114255,114256],{"__ignoreMap":35},[51,114257,114258,114260,114262,114264,114266,114268,114270,114272,114275],{"class":53,"line":54},[51,114259,2154],{"class":72},[51,114261,104174],{"class":52264},[51,114263,15882],{"class":68},[51,114265,108],{"class":72},[51,114267,112923],{"class":282},[51,114269,102070],{"class":68},[51,114271,108],{"class":72},[51,114273,114274],{"class":282},"\"0.5 0 0.4\"",[51,114276,114277],{"class":72}," ...\u002F>\n",[40,114279,114280,114281,114283],{},"它直接挂在 ",[37,114282,102805],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[1233,114285,114286],{"id":114286},"机械臂不像真实机械臂",[40,114288,114289],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114291,103571],{"id":103570},[40,114293,114294],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[40,114296,114297],{},"核心公式：",[29,114299,114302],{"className":114300,"code":114301,"language":34,"meta":35},[32],"distance = ||tip - target||\nreward = -distance - action_cost\n",[37,114303,114301],{"__ignoreMap":35},[40,114305,114306],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1179,114308,114309],{},"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":35,"searchDepth":61,"depth":61,"links":114311},[114312,114313,114314,114319,114323,114324,114325,114333],{"id":101610,"depth":61,"text":101611},{"id":101733,"depth":61,"text":101734},{"id":102008,"depth":61,"text":102009,"children":114315},[114316,114317,114318],{"id":112515,"depth":93,"text":112516},{"id":112591,"depth":93,"text":112591},{"id":112621,"depth":93,"text":112622},{"id":102216,"depth":61,"text":102217,"children":114320},[114321,114322],{"id":102536,"depth":93,"text":102536},{"id":102672,"depth":93,"text":102672},{"id":103279,"depth":61,"text":103280},{"id":103311,"depth":61,"text":103312},{"id":103416,"depth":61,"text":103417,"children":114326},[114327,114328,114329,114330,114331,114332],{"id":114162,"depth":93,"text":114165},{"id":114177,"depth":93,"text":114177},{"id":114202,"depth":93,"text":114202},{"id":114214,"depth":93,"text":114215},{"id":114247,"depth":93,"text":114247},{"id":114286,"depth":93,"text":114286},{"id":103570,"depth":61,"text":103571},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112319,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114340,"title":114341,"body":114342,"description":35,"extension":1190,"meta":117804,"navigation":1192,"path":117805,"seo":117806,"stem":117807,"__hash__":117808},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114343,"toc":117775},[114344,114347,114349,114352,114355,114380,114383,114389,114392,114398,114400,114402,114426,114428,114446,114448,114491,114493,114520,114522,114525,114577,114580,114586,114595,114598,114636,114639,114678,114681,114689,114696,114699,114705,114707,114761,114768,114813,114816,114820,114836,114846,114848,116109,116111,116123,116125,116136,116138,116141,116162,116165,116168,116201,116207,116210,116243,116246,116249,116290,116295,116309,116312,116325,116330,116353,116355,116370,116380,116395,116402,116422,116437,116455,116458,116475,116483,116499,116505,116537,116550,116582,116592,116627,116641,116687,116701,116743,116754,116767,116773,116806,116809,116836,116846,116886,116896,116913,116920,116938,116941,116982,116995,117010,117013,117036,117039,117051,117054,117073,117078,117099,117102,117117,117120,117154,117166,117181,117184,117209,117212,117231,117234,117266,117269,117293,117299,117329,117336,117349,117352,117354,117356,117362,117365,117368,117380,117383,117385,117439,117441,117445,117451,117460,117463,117470,117472,117495,117498,117502,117504,117522,117528,117530,117563,117566,117572,117576,117579,117599,117604,117608,117615,117635,117640,117644,117647,117667,117670,117756,117760,117763,117769,117772],[10,114345,114341],{"id":114346},"_8gymnasium-风格强化学习接口基础",[14,114348,101611],{"id":101610},[40,114350,114351],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[40,114353,114354],{},"你将实现:",[29,114356,114358],{"className":31342,"code":114357,"language":31344,"meta":35,"style":35},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[37,114359,114360,114370],{"__ignoreMap":35},[51,114361,114362,114365,114367],{"class":53,"line":54},[51,114363,114364],{"class":72},"obs, info ",[51,114366,108],{"class":64},[51,114368,114369],{"class":72}," env.reset()\n",[51,114371,114372,114375,114377],{"class":53,"line":61},[51,114373,114374],{"class":72},"obs, reward, terminated, truncated, info ",[51,114376,108],{"class":64},[51,114378,114379],{"class":72}," env.step(action)\n",[40,114381,114382],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[40,114384,114385,114386,114388],{},"前面章节的代码都是“脚本式”的：在 ",[37,114387,103259],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[40,114390,114391],{},"可以先记住 Gymnasium 环境的核心交互：",[29,114393,114396],{"className":114394,"code":114395,"language":34,"meta":35},[32],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[37,114397,114395],{"__ignoreMap":35},[14,114399,101734],{"id":101733},[40,114401,101737],{},[29,114403,114404],{"className":24785,"code":105352,"language":24787,"meta":35,"style":35},[37,114405,114406],{"__ignoreMap":35},[51,114407,114408,114410,114412,114414,114416,114418,114420,114422,114424],{"class":53,"line":54},[51,114409,25540],{"class":68},[51,114411,27279],{"class":282},[51,114413,24797],{"class":282},[51,114415,27364],{"class":175},[51,114417,105367],{"class":282},[51,114419,101762],{"class":282},[51,114421,103465],{"class":282},[51,114423,101778],{"class":282},[51,114425,105376],{"class":282},[40,114427,103783],{},[29,114429,114431],{"className":24785,"code":114430,"language":24787,"meta":35,"style":35},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[37,114432,114433],{"__ignoreMap":35},[51,114434,114435,114437,114439,114441,114443],{"class":53,"line":54},[51,114436,24794],{"class":68},[51,114438,24797],{"class":282},[51,114440,101894],{"class":282},[51,114442,108675],{"class":282},[51,114444,114445],{"class":282}," gymnasium\n",[40,114447,103800],{},[29,114449,114451],{"className":24785,"code":114450,"language":24787,"meta":35,"style":35},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[37,114452,114453,114470,114479],{"__ignoreMap":35},[51,114454,114455,114457,114459,114461,114464,114466,114468],{"class":53,"line":54},[51,114456,31294],{"class":68},[51,114458,30140],{"class":282},[51,114460,26079],{"class":175},[51,114462,114463],{"class":282}," mujoco-gym-api",[51,114465,101939],{"class":282},[51,114467,101942],{"class":175},[51,114469,101945],{"class":175},[51,114471,114472,114474,114476],{"class":53,"line":61},[51,114473,31294],{"class":68},[51,114475,101952],{"class":282},[51,114477,114478],{"class":282}," mujoco-gym-api\n",[51,114480,114481,114483,114485,114487,114489],{"class":53,"line":93},[51,114482,24794],{"class":68},[51,114484,24797],{"class":282},[51,114486,101894],{"class":282},[51,114488,108675],{"class":282},[51,114490,114445],{"class":282},[40,114492,101968],{},[19,114494,114495,114505,114508,114514],{},[22,114496,114497,114498,114501,114502,29349],{},"本章使用 ",[37,114499,114500],{},"gymnasium","，不是旧版 ",[37,114503,114504],{},"gym",[22,114506,114507],{},"Gymnasium API 与旧 Gym API 有差异。",[22,114509,114510,114511,29349],{},"旧 Gym 常见返回值是 4 个: ",[37,114512,114513],{},"obs, reward, done, info",[22,114515,114516,114517,29349],{},"Gymnasium 返回值是 5 个: ",[37,114518,114519],{},"obs, reward, terminated, truncated, info",[14,114521,102009],{"id":102008},[40,114523,114524],{},"强化学习环境接口包含:",[1393,114526,114527,114536],{},[1396,114528,114529],{},[1399,114530,114531,114534],{},[1402,114532,114533],{"align":24699},"方法",[1402,114535,103660],{"align":24699},[1439,114537,114538,114548,114558,114568],{},[1399,114539,114540,114545],{},[1444,114541,114542],{"align":24699},[37,114543,114544],{},"reset()",[1444,114546,114547],{"align":24699},"重置环境",[1399,114549,114550,114555],{},[1444,114551,114552],{"align":24699},[37,114553,114554],{},"step(action)",[1444,114556,114557],{"align":24699},"执行动作",[1399,114559,114560,114565],{},[1444,114561,114562],{"align":24699},[37,114563,114564],{},"observation_space",[1444,114566,114567],{"align":24699},"观测空间",[1399,114569,114570,114575],{},[1444,114571,114572],{"align":24699},[37,114573,114574],{},"action_space",[1444,114576,24617],{"align":24699},[40,114578,114579],{},"一个最小环境需要完成:",[29,114581,114584],{"className":114582,"code":114583,"language":34,"meta":35},[32],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[37,114585,114583],{"__ignoreMap":35},[1233,114587,114589,101982,114592,105602],{"id":114588},"terminated-和-truncated-的区别",[37,114590,114591],{},"terminated",[37,114593,114594],{},"truncated",[40,114596,114597],{},"Gymnasium 把“结束”拆成两个概念：",[1393,114599,114600,114610],{},[1396,114601,114602],{},[1399,114603,114604,114606,114608],{},[1402,114605,105538],{"align":24699},[1402,114607,101664],{"align":24699},[1402,114609,22149],{"align":24699},[1439,114611,114612,114624],{},[1399,114613,114614,114618,114621],{},[1444,114615,114616],{"align":24699},[37,114617,114591],{},[1444,114619,114620],{"align":24699},"任务自然结束",[1444,114622,114623],{"align":24699},"机械臂到达目标、机器人摔倒",[1399,114625,114626,114630,114633],{},[1444,114627,114628],{"align":24699},[37,114629,114594],{},[1444,114631,114632],{"align":24699},"因外部限制截断",[1444,114634,114635],{"align":24699},"达到最大步数、时间限制",[40,114637,114638],{},"本章中：",[29,114640,114642],{"className":31342,"code":114641,"language":31344,"meta":35,"style":35},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[37,114643,114644,114659],{"__ignoreMap":35},[51,114645,114646,114649,114651,114654,114656],{"class":53,"line":54},[51,114647,114648],{"class":72},"terminated ",[51,114650,108],{"class":64},[51,114652,114653],{"class":72}," dist ",[51,114655,2154],{"class":64},[51,114657,114658],{"class":175}," 0.05\n",[51,114660,114661,114664,114666,114668,114671,114673,114675],{"class":53,"line":61},[51,114662,114663],{"class":72},"truncated ",[51,114665,108],{"class":64},[51,114667,39837],{"class":175},[51,114669,114670],{"class":72},".steps ",[51,114672,2800],{"class":64},[51,114674,39837],{"class":175},[51,114676,114677],{"class":72},".max_steps\n",[40,114679,114680],{},"也就是：",[19,114682,114683,114686],{},[22,114684,114685],{},"末端距离目标小于 0.05，任务成功结束。",[22,114687,114688],{},"步数超过上限，episode 被截断。",[1233,114690,114692,101982,114694],{"id":114691},"observation_space-和-action_space",[37,114693,114564],{},[37,114695,114574],{},[40,114697,114698],{},"这两个对象告诉算法：",[29,114700,114703],{"className":114701,"code":114702,"language":34,"meta":35},[32],"观测长什么样\n动作允许多大\n",[37,114704,114702],{"__ignoreMap":35},[40,114706,15595],{},[29,114708,114710],{"className":31342,"code":114709,"language":31344,"meta":35,"style":35},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[37,114711,114712],{"__ignoreMap":35},[51,114713,114714,114716,114719,114721,114724,114727,114730,114732,114734,114737,114739,114741,114743,114745,114747,114749,114751,114754,114756,114758],{"class":53,"line":54},[51,114715,31787],{"class":175},[51,114717,114718],{"class":72},".action_space ",[51,114720,108],{"class":64},[51,114722,114723],{"class":72}," spaces.Box(",[51,114725,114726],{"class":78},"low",[51,114728,114729],{"class":64},"=-",[51,114731,103367],{"class":175},[51,114733,13397],{"class":72},[51,114735,114736],{"class":78},"high",[51,114738,108],{"class":64},[51,114740,103367],{"class":175},[51,114742,13397],{"class":72},[51,114744,96927],{"class":78},[51,114746,108],{"class":64},[51,114748,73],{"class":72},[51,114750,1334],{"class":175},[51,114752,114753],{"class":72},",), ",[51,114755,94464],{"class":78},[51,114757,108],{"class":64},[51,114759,114760],{"class":72},"np.float32)\n",[40,114762,114763,114764,114767],{},"表示动作是 2 维数组，每个值都在 ",[37,114765,114766],{},"[-1, 1]"," 范围内。",[29,114769,114771],{"className":31342,"code":114770,"language":31344,"meta":35,"style":35},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[37,114772,114773],{"__ignoreMap":35},[51,114774,114775,114777,114780,114782,114784,114786,114788,114791,114793,114795,114797,114799,114801,114803,114805,114807,114809,114811],{"class":53,"line":54},[51,114776,31787],{"class":175},[51,114778,114779],{"class":72},".observation_space ",[51,114781,108],{"class":64},[51,114783,114723],{"class":72},[51,114785,114726],{"class":78},[51,114787,114729],{"class":64},[51,114789,114790],{"class":72},"np.inf, ",[51,114792,114736],{"class":78},[51,114794,108],{"class":64},[51,114796,114790],{"class":72},[51,114798,96927],{"class":78},[51,114800,108],{"class":64},[51,114802,73],{"class":72},[51,114804,443],{"class":175},[51,114806,114753],{"class":72},[51,114808,94464],{"class":78},[51,114810,108],{"class":64},[51,114812,114760],{"class":72},[40,114814,114815],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[1233,114817,114819],{"id":114818},"frame_skip-是什么","frame_skip 是什么",[29,114821,114823],{"className":31342,"code":114822,"language":31344,"meta":35,"style":35},"self.frame_skip = 5\n",[37,114824,114825],{"__ignoreMap":35},[51,114826,114827,114829,114832,114834],{"class":53,"line":54},[51,114828,31787],{"class":175},[51,114830,114831],{"class":72},".frame_skip ",[51,114833,108],{"class":64},[51,114835,55391],{"class":175},[40,114837,114838,114839,114842,114843,114845],{},"表示外部调用一次 ",[37,114840,114841],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[37,114844,102179],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114847,102217],{"id":102216},[29,114849,114851],{"className":31342,"code":114850,"language":31344,"meta":35,"style":35},"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",[37,114852,114853,114865,114871,114881,114892,114896,114900,114908,114913,114917,114921,114925,114929,114933,114937,114941,114946,114950,114954,114958,114963,114967,114971,114975,114979,114983,114987,114991,114995,114999,115003,115007,115011,115015,115033,115048,115052,115065,115075,115090,115107,115111,115132,115151,115176,115190,115194,115204,115216,115226,115230,115272,115310,115314,115324,115340,115355,115374,115381,115385,115398,115413,115428,115441,115460,115476,115480,115521,115536,115551,115555,115594,115605,115618,115622,115632,115641,115645,115655,115670,115688,115692,115703,115720,115733,115737,115747,115751,115762,115773,115777,115791,115805,115821,115825,115838,115855,115870,115877,115881,115885,115897,115907,115925,115937,115949,115953,115961,115977,115986,115995,116003,116045,116058,116063,116067,116085,116089,116093,116105],{"__ignoreMap":35},[51,114854,114855,114857,114860,114862],{"class":53,"line":54},[51,114856,31356],{"class":64},[51,114858,114859],{"class":72}," gymnasium ",[51,114861,32347],{"class":64},[51,114863,114864],{"class":72}," gym\n",[51,114866,114867,114869],{"class":53,"line":61},[51,114868,31356],{"class":64},[51,114870,102265],{"class":72},[51,114872,114873,114875,114877,114879],{"class":53,"line":93},[51,114874,31356],{"class":64},[51,114876,32344],{"class":72},[51,114878,32347],{"class":64},[51,114880,32350],{"class":72},[51,114882,114883,114885,114887,114889],{"class":53,"line":99},[51,114884,31701],{"class":64},[51,114886,114859],{"class":72},[51,114888,31356],{"class":64},[51,114890,114891],{"class":72}," spaces\n",[51,114893,114894],{"class":53,"line":120},[51,114895,3480],{"emptyLinePlaceholder":1192},[51,114897,114898],{"class":53,"line":129},[51,114899,3480],{"emptyLinePlaceholder":1192},[51,114901,114902,114904,114906],{"class":53,"line":206},[51,114903,102278],{"class":175},[51,114905,14526],{"class":64},[51,114907,102283],{"class":282},[51,114909,114910],{"class":53,"line":212},[51,114911,114912],{"class":282},"\u003Cmujoco model=\"gym_reacher\">\n",[51,114914,114915],{"class":53,"line":227},[51,114916,112702],{"class":282},[51,114918,114919],{"class":53,"line":370},[51,114920,3480],{"emptyLinePlaceholder":1192},[51,114922,114923],{"class":53,"line":387},[51,114924,102302],{"class":282},[51,114926,114927],{"class":53,"line":404},[51,114928,112720],{"class":282},[51,114930,114931],{"class":53,"line":415},[51,114932,3480],{"emptyLinePlaceholder":1192},[51,114934,114935],{"class":53,"line":420},[51,114936,112729],{"class":282},[51,114938,114939],{"class":53,"line":429},[51,114940,112734],{"class":282},[51,114942,114943],{"class":53,"line":434},[51,114944,114945],{"class":282},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[51,114947,114948],{"class":53,"line":448},[51,114949,3480],{"emptyLinePlaceholder":1192},[51,114951,114952],{"class":53,"line":462},[51,114953,112748],{"class":282},[51,114955,114956],{"class":53,"line":470},[51,114957,112753],{"class":282},[51,114959,114960],{"class":53,"line":2783},[51,114961,114962],{"class":282},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[51,114964,114965],{"class":53,"line":2788},[51,114966,112763],{"class":282},[51,114968,114969],{"class":53,"line":2817},[51,114970,107402],{"class":282},[51,114972,114973],{"class":53,"line":2822},[51,114974,102331],{"class":282},[51,114976,114977],{"class":53,"line":2839},[51,114978,102336],{"class":282},[51,114980,114981],{"class":53,"line":2844},[51,114982,3480],{"emptyLinePlaceholder":1192},[51,114984,114985],{"class":53,"line":2849},[51,114986,107419],{"class":282},[51,114988,114989],{"class":53,"line":2854},[51,114990,112788],{"class":282},[51,114992,114993],{"class":53,"line":2868},[51,114994,112793],{"class":282},[51,114996,114997],{"class":53,"line":2873},[51,114998,107429],{"class":282},[51,115000,115001],{"class":53,"line":3657},[51,115002,102341],{"class":282},[51,115004,115005],{"class":53,"line":3671},[51,115006,96662],{"class":282},[51,115008,115009],{"class":53,"line":3679},[51,115010,3480],{"emptyLinePlaceholder":1192},[51,115012,115013],{"class":53,"line":3684},[51,115014,3480],{"emptyLinePlaceholder":1192},[51,115016,115017,115019,115022,115024,115026,115028,115031],{"class":53,"line":3690},[51,115018,15656],{"class":64},[51,115020,115021],{"class":68}," ReacherEnv",[51,115023,73],{"class":72},[51,115025,114504],{"class":68},[51,115027,1804],{"class":72},[51,115029,115030],{"class":68},"Env",[51,115032,31750],{"class":72},[51,115034,115035,115038,115040,115042,115045],{"class":53,"line":3696},[51,115036,115037],{"class":72},"    metadata ",[51,115039,108],{"class":64},[51,115041,5522],{"class":72},[51,115043,115044],{"class":282},"\"render_modes\"",[51,115046,115047],{"class":72},": []}\n",[51,115049,115050],{"class":53,"line":3701},[51,115051,3480],{"emptyLinePlaceholder":1192},[51,115053,115054,115056,115058,115061,115063],{"class":53,"line":8910},[51,115055,31765],{"class":64},[51,115057,31768],{"class":175},[51,115059,115060],{"class":72},"(self) -> ",[51,115062,96650],{"class":175},[51,115064,4816],{"class":72},[51,115066,115067,115069,115071,115073],{"class":53,"line":8934},[51,115068,31781],{"class":175},[51,115070,18223],{"class":72},[51,115072,31793],{"class":175},[51,115074,154],{"class":72},[51,115076,115077,115079,115082,115084,115086,115088],{"class":53,"line":8939},[51,115078,31809],{"class":175},[51,115080,115081],{"class":72},".model ",[51,115083,108],{"class":64},[51,115085,102376],{"class":72},[51,115087,102278],{"class":175},[51,115089,90],{"class":72},[51,115091,115092,115094,115097,115099,115102,115104],{"class":53,"line":8945},[51,115093,31809],{"class":175},[51,115095,115096],{"class":72},".data ",[51,115098,108],{"class":64},[51,115100,115101],{"class":72}," mujoco.MjData(",[51,115103,31787],{"class":175},[51,115105,115106],{"class":72},".model)\n",[51,115108,115109],{"class":53,"line":8972},[51,115110,3480],{"emptyLinePlaceholder":1192},[51,115112,115113,115115,115118,115120,115123,115125,115128,115130],{"class":53,"line":8977},[51,115114,31809],{"class":175},[51,115116,115117],{"class":72},".tip_site_id ",[51,115119,108],{"class":64},[51,115121,115122],{"class":72}," mujoco.mj_name2id(",[51,115124,31787],{"class":175},[51,115126,115127],{"class":72},".model, mujoco.mjtObj.mjOBJ_SITE, ",[51,115129,112500],{"class":282},[51,115131,90],{"class":72},[51,115133,115134,115136,115139,115141,115143,115145,115147,115149],{"class":53,"line":8983},[51,115135,31809],{"class":175},[51,115137,115138],{"class":72},".target_site_id ",[51,115140,108],{"class":64},[51,115142,115122],{"class":72},[51,115144,31787],{"class":175},[51,115146,115127],{"class":72},[51,115148,112923],{"class":282},[51,115150,90],{"class":72},[51,115152,115153,115155,115157,115159,115161,115163,115166,115168,115170,115172,115174],{"class":53,"line":8995},[51,115154,3577],{"class":64},[51,115156,39837],{"class":175},[51,115158,115117],{"class":72},[51,115160,2154],{"class":64},[51,115162,5169],{"class":175},[51,115164,115165],{"class":64}," or",[51,115167,39837],{"class":175},[51,115169,115138],{"class":72},[51,115171,2154],{"class":64},[51,115173,5169],{"class":175},[51,115175,4816],{"class":72},[51,115177,115178,115181,115183,115185,115188],{"class":53,"line":9007},[51,115179,115180],{"class":64},"            raise",[51,115182,104399],{"class":175},[51,115184,73],{"class":72},[51,115186,115187],{"class":282},"\"required sites not found\"",[51,115189,90],{"class":72},[51,115191,115192],{"class":53,"line":9019},[51,115193,3480],{"emptyLinePlaceholder":1192},[51,115195,115196,115198,115200,115202],{"class":53,"line":10678},[51,115197,31809],{"class":175},[51,115199,114831],{"class":72},[51,115201,108],{"class":64},[51,115203,55391],{"class":175},[51,115205,115206,115208,115211,115213],{"class":53,"line":10703},[51,115207,31809],{"class":175},[51,115209,115210],{"class":72},".max_steps ",[51,115212,108],{"class":64},[51,115214,115215],{"class":175}," 200\n",[51,115217,115218,115220,115222,115224],{"class":53,"line":10726},[51,115219,31809],{"class":175},[51,115221,114670],{"class":72},[51,115223,108],{"class":64},[51,115225,48297],{"class":175},[51,115227,115228],{"class":53,"line":10750},[51,115229,3480],{"emptyLinePlaceholder":1192},[51,115231,115232,115234,115236,115238,115240,115242,115244,115246,115248,115250,115252,115254,115256,115258,115260,115262,115264,115266,115268,115270],{"class":53,"line":10755},[51,115233,31809],{"class":175},[51,115235,114718],{"class":72},[51,115237,108],{"class":64},[51,115239,114723],{"class":72},[51,115241,114726],{"class":78},[51,115243,114729],{"class":64},[51,115245,103367],{"class":175},[51,115247,13397],{"class":72},[51,115249,114736],{"class":78},[51,115251,108],{"class":64},[51,115253,103367],{"class":175},[51,115255,13397],{"class":72},[51,115257,96927],{"class":78},[51,115259,108],{"class":64},[51,115261,73],{"class":72},[51,115263,1334],{"class":175},[51,115265,114753],{"class":72},[51,115267,94464],{"class":78},[51,115269,108],{"class":64},[51,115271,114760],{"class":72},[51,115273,115274,115276,115278,115280,115282,115284,115286,115288,115290,115292,115294,115296,115298,115300,115302,115304,115306,115308],{"class":53,"line":10760},[51,115275,31809],{"class":175},[51,115277,114779],{"class":72},[51,115279,108],{"class":64},[51,115281,114723],{"class":72},[51,115283,114726],{"class":78},[51,115285,114729],{"class":64},[51,115287,114790],{"class":72},[51,115289,114736],{"class":78},[51,115291,108],{"class":64},[51,115293,114790],{"class":72},[51,115295,96927],{"class":78},[51,115297,108],{"class":64},[51,115299,73],{"class":72},[51,115301,443],{"class":175},[51,115303,114753],{"class":72},[51,115305,94464],{"class":78},[51,115307,108],{"class":64},[51,115309,114760],{"class":72},[51,115311,115312],{"class":53,"line":10765},[51,115313,3480],{"emptyLinePlaceholder":1192},[51,115315,115316,115318,115321],{"class":53,"line":10774},[51,115317,31765],{"class":64},[51,115319,115320],{"class":68}," _get_obs",[51,115322,115323],{"class":72},"(self) -> np.ndarray:\n",[51,115325,115326,115328,115330,115332,115335,115337],{"class":53,"line":10779},[51,115327,113101],{"class":72},[51,115329,108],{"class":64},[51,115331,39837],{"class":175},[51,115333,115334],{"class":72},".data.site_xpos[",[51,115336,31787],{"class":175},[51,115338,115339],{"class":72},".tip_site_id].copy()\n",[51,115341,115342,115344,115346,115348,115350,115352],{"class":53,"line":10785},[51,115343,113114],{"class":72},[51,115345,108],{"class":64},[51,115347,39837],{"class":175},[51,115349,115334],{"class":72},[51,115351,31787],{"class":175},[51,115353,115354],{"class":72},".target_site_id].copy()\n",[51,115356,115357,115359,115361,115364,115366,115369,115371],{"class":53,"line":10806},[51,115358,111146],{"class":72},[51,115360,108],{"class":64},[51,115362,115363],{"class":72}," np.concatenate([",[51,115365,31787],{"class":175},[51,115367,115368],{"class":72},".data.qpos.copy(), ",[51,115370,31787],{"class":175},[51,115372,115373],{"class":72},".data.qvel.copy(), tip, target])\n",[51,115375,115376,115378],{"class":53,"line":10812},[51,115377,15714],{"class":64},[51,115379,115380],{"class":72}," obs.astype(np.float32)\n",[51,115382,115383],{"class":53,"line":10826},[51,115384,3480],{"emptyLinePlaceholder":1192},[51,115386,115387,115389,115392,115394,115396],{"class":53,"line":10832},[51,115388,31765],{"class":64},[51,115390,115391],{"class":68}," _get_reward",[51,115393,115060],{"class":72},[51,115395,1300],{"class":175},[51,115397,4816],{"class":72},[51,115399,115400,115402,115404,115406,115408,115410],{"class":53,"line":10859},[51,115401,113101],{"class":72},[51,115403,108],{"class":64},[51,115405,39837],{"class":175},[51,115407,115334],{"class":72},[51,115409,31787],{"class":175},[51,115411,115412],{"class":72},".tip_site_id]\n",[51,115414,115415,115417,115419,115421,115423,115425],{"class":53,"line":10868},[51,115416,113114],{"class":72},[51,115418,108],{"class":64},[51,115420,39837],{"class":175},[51,115422,115334],{"class":72},[51,115424,31787],{"class":175},[51,115426,115427],{"class":72},".target_site_id]\n",[51,115429,115430,115433,115435,115437,115439],{"class":53,"line":10874},[51,115431,115432],{"class":72},"        dist ",[51,115434,108],{"class":64},[51,115436,112565],{"class":72},[51,115438,1778],{"class":64},[51,115440,112570],{"class":72},[51,115442,115443,115446,115448,115450,115452,115455,115457],{"class":53,"line":10882},[51,115444,115445],{"class":72},"        control_cost ",[51,115447,108],{"class":64},[51,115449,113001],{"class":175},[51,115451,7480],{"class":64},[51,115453,115454],{"class":72}," np.sum(np.square(",[51,115456,31787],{"class":175},[51,115458,115459],{"class":72},".data.ctrl))\n",[51,115461,115462,115464,115466,115468,115470,115472,115474],{"class":53,"line":10887},[51,115463,15714],{"class":64},[51,115465,110761],{"class":175},[51,115467,73],{"class":72},[51,115469,1778],{"class":64},[51,115471,112560],{"class":72},[51,115473,1778],{"class":64},[51,115475,113023],{"class":72},[51,115477,115478],{"class":53,"line":17566},[51,115479,3480],{"emptyLinePlaceholder":1192},[51,115481,115482,115484,115487,115490,115492,115495,115497,115499,115501,115503,115505,115508,115511,115513,115515,115517,115519],{"class":53,"line":17572},[51,115483,31765],{"class":64},[51,115485,115486],{"class":68}," reset",[51,115488,115489],{"class":72},"(self, ",[51,115491,1702],{"class":64},[51,115493,115494],{"class":72},", seed: ",[51,115496,65],{"class":175},[51,115498,26073],{"class":64},[51,115500,39897],{"class":175},[51,115502,14526],{"class":64},[51,115504,39897],{"class":175},[51,115506,115507],{"class":72},", options: ",[51,115509,115510],{"class":175},"dict",[51,115512,26073],{"class":64},[51,115514,39897],{"class":175},[51,115516,14526],{"class":64},[51,115518,39897],{"class":175},[51,115520,31750],{"class":72},[51,115522,115523,115525,115528,115531,115533],{"class":53,"line":17595},[51,115524,31781],{"class":175},[51,115526,115527],{"class":72},"().reset(",[51,115529,115530],{"class":78},"seed",[51,115532,108],{"class":64},[51,115534,115535],{"class":72},"seed)\n",[51,115537,115538,115541,115543,115546,115548],{"class":53,"line":17601},[51,115539,115540],{"class":72},"        mujoco.mj_resetData(",[51,115542,31787],{"class":175},[51,115544,115545],{"class":72},".model, ",[51,115547,31787],{"class":175},[51,115549,115550],{"class":72},".data)\n",[51,115552,115553],{"class":53,"line":17624},[51,115554,3480],{"emptyLinePlaceholder":1192},[51,115556,115557,115559,115562,115564,115566,115569,115571,115573,115575,115577,115579,115581,115583,115585,115587,115589,115591],{"class":53,"line":17638},[51,115558,31809],{"class":175},[51,115560,115561],{"class":72},".data.qpos[:] ",[51,115563,108],{"class":64},[51,115565,39837],{"class":175},[51,115567,115568],{"class":72},".np_random.uniform(",[51,115570,114726],{"class":78},[51,115572,114729],{"class":64},[51,115574,87174],{"class":175},[51,115576,13397],{"class":72},[51,115578,114736],{"class":78},[51,115580,108],{"class":64},[51,115582,87174],{"class":175},[51,115584,13397],{"class":72},[51,115586,32460],{"class":78},[51,115588,108],{"class":64},[51,115590,31787],{"class":175},[51,115592,115593],{"class":72},".model.nq)\n",[51,115595,115596,115598,115601,115603],{"class":53,"line":17658},[51,115597,31809],{"class":175},[51,115599,115600],{"class":72},".data.qvel[:] ",[51,115602,108],{"class":64},[51,115604,105725],{"class":175},[51,115606,115607,115610,115612,115614,115616],{"class":53,"line":17664},[51,115608,115609],{"class":72},"        mujoco.mj_forward(",[51,115611,31787],{"class":175},[51,115613,115545],{"class":72},[51,115615,31787],{"class":175},[51,115617,115550],{"class":72},[51,115619,115620],{"class":53,"line":17675},[51,115621,3480],{"emptyLinePlaceholder":1192},[51,115623,115624,115626,115628,115630],{"class":53,"line":17698},[51,115625,31809],{"class":175},[51,115627,114670],{"class":72},[51,115629,108],{"class":64},[51,115631,48297],{"class":175},[51,115633,115634,115636,115638],{"class":53,"line":17720},[51,115635,15714],{"class":64},[51,115637,39837],{"class":175},[51,115639,115640],{"class":72},"._get_obs(), {}\n",[51,115642,115643],{"class":53,"line":17725},[51,115644,3480],{"emptyLinePlaceholder":1192},[51,115646,115647,115649,115652],{"class":53,"line":17731},[51,115648,31765],{"class":64},[51,115650,115651],{"class":68}," step",[51,115653,115654],{"class":72},"(self, action):\n",[51,115656,115657,115659,115661,115664,115666,115668],{"class":53,"line":17745},[51,115658,111186],{"class":72},[51,115660,108],{"class":64},[51,115662,115663],{"class":72}," np.asarray(action, ",[51,115665,94464],{"class":78},[51,115667,108],{"class":64},[51,115669,114760],{"class":72},[51,115671,115672,115674,115676,115678,115680,115683,115685],{"class":53,"line":17758},[51,115673,111186],{"class":72},[51,115675,108],{"class":64},[51,115677,108411],{"class":72},[51,115679,31787],{"class":175},[51,115681,115682],{"class":72},".action_space.low, ",[51,115684,31787],{"class":175},[51,115686,115687],{"class":72},".action_space.high)\n",[51,115689,115690],{"class":53,"line":17763},[51,115691,3480],{"emptyLinePlaceholder":1192},[51,115693,115694,115696,115699,115701],{"class":53,"line":17777},[51,115695,31809],{"class":175},[51,115697,115698],{"class":72},".data.ctrl[:] ",[51,115700,108],{"class":64},[51,115702,108434],{"class":72},[51,115704,115705,115707,115709,115711,115713,115715,115717],{"class":53,"line":17782},[51,115706,4480],{"class":64},[51,115708,102465],{"class":72},[51,115710,27007],{"class":64},[51,115712,33407],{"class":175},[51,115714,73],{"class":72},[51,115716,31787],{"class":175},[51,115718,115719],{"class":72},".frame_skip):\n",[51,115721,115722,115725,115727,115729,115731],{"class":53,"line":17788},[51,115723,115724],{"class":72},"            mujoco.mj_step(",[51,115726,31787],{"class":175},[51,115728,115545],{"class":72},[51,115730,31787],{"class":175},[51,115732,115550],{"class":72},[51,115734,115735],{"class":53,"line":17793},[51,115736,3480],{"emptyLinePlaceholder":1192},[51,115738,115739,115741,115743,115745],{"class":53,"line":17807},[51,115740,31809],{"class":175},[51,115742,114670],{"class":72},[51,115744,10439],{"class":64},[51,115746,56663],{"class":175},[51,115748,115749],{"class":53,"line":17812},[51,115750,3480],{"emptyLinePlaceholder":1192},[51,115752,115753,115755,115757,115759],{"class":53,"line":17817},[51,115754,111146],{"class":72},[51,115756,108],{"class":64},[51,115758,39837],{"class":175},[51,115760,115761],{"class":72},"._get_obs()\n",[51,115763,115764,115766,115768,115770],{"class":53,"line":17831},[51,115765,111251],{"class":72},[51,115767,108],{"class":64},[51,115769,39837],{"class":175},[51,115771,115772],{"class":72},"._get_reward()\n",[51,115774,115775],{"class":53,"line":17843},[51,115776,3480],{"emptyLinePlaceholder":1192},[51,115778,115779,115781,115783,115785,115787,115789],{"class":53,"line":17848},[51,115780,113101],{"class":72},[51,115782,108],{"class":64},[51,115784,39837],{"class":175},[51,115786,115334],{"class":72},[51,115788,31787],{"class":175},[51,115790,115412],{"class":72},[51,115792,115793,115795,115797,115799,115801,115803],{"class":53,"line":17861},[51,115794,113114],{"class":72},[51,115796,108],{"class":64},[51,115798,39837],{"class":175},[51,115800,115334],{"class":72},[51,115802,31787],{"class":175},[51,115804,115427],{"class":72},[51,115806,115807,115809,115811,115813,115816,115818],{"class":53,"line":17866},[51,115808,115432],{"class":72},[51,115810,108],{"class":64},[51,115812,110761],{"class":175},[51,115814,115815],{"class":72},"(np.linalg.norm(tip ",[51,115817,1778],{"class":64},[51,115819,115820],{"class":72}," target))\n",[51,115822,115823],{"class":53,"line":17871},[51,115824,3480],{"emptyLinePlaceholder":1192},[51,115826,115827,115830,115832,115834,115836],{"class":53,"line":17876},[51,115828,115829],{"class":72},"        terminated ",[51,115831,108],{"class":64},[51,115833,114653],{"class":72},[51,115835,2154],{"class":64},[51,115837,114658],{"class":175},[51,115839,115840,115843,115845,115847,115849,115851,115853],{"class":53,"line":17889},[51,115841,115842],{"class":72},"        truncated ",[51,115844,108],{"class":64},[51,115846,39837],{"class":175},[51,115848,114670],{"class":72},[51,115850,2800],{"class":64},[51,115852,39837],{"class":175},[51,115854,114677],{"class":72},[51,115856,115857,115860,115862,115864,115867],{"class":53,"line":17894},[51,115858,115859],{"class":72},"        info ",[51,115861,108],{"class":64},[51,115863,5522],{"class":72},[51,115865,115866],{"class":282},"\"distance\"",[51,115868,115869],{"class":72},": dist}\n",[51,115871,115872,115874],{"class":53,"line":33597},[51,115873,15714],{"class":64},[51,115875,115876],{"class":72}," obs, reward, terminated, truncated, info\n",[51,115878,115879],{"class":53,"line":33603},[51,115880,3480],{"emptyLinePlaceholder":1192},[51,115882,115883],{"class":53,"line":33609},[51,115884,3480],{"emptyLinePlaceholder":1192},[51,115886,115887,115889,115891,115893,115895],{"class":53,"line":33615},[51,115888,32911],{"class":64},[51,115890,151],{"class":68},[51,115892,102362],{"class":72},[51,115894,96650],{"class":175},[51,115896,4816],{"class":72},[51,115898,115899,115902,115904],{"class":53,"line":33621},[51,115900,115901],{"class":72},"    env ",[51,115903,108],{"class":64},[51,115905,115906],{"class":72}," ReacherEnv()\n",[51,115908,115909,115912,115914,115917,115919,115921,115923],{"class":53,"line":33632},[51,115910,115911],{"class":72},"    obs, info ",[51,115913,108],{"class":64},[51,115915,115916],{"class":72}," env.reset(",[51,115918,115530],{"class":78},[51,115920,108],{"class":64},[51,115922,176],{"class":175},[51,115924,90],{"class":72},[51,115926,115927,115929,115931,115934],{"class":53,"line":33638},[51,115928,32263],{"class":175},[51,115930,73],{"class":72},[51,115932,115933],{"class":282},"\"initial obs shape:\"",[51,115935,115936],{"class":72},", obs.shape)\n",[51,115938,115939,115941,115943,115946],{"class":53,"line":33658},[51,115940,32263],{"class":175},[51,115942,73],{"class":72},[51,115944,115945],{"class":282},"\"initial info:\"",[51,115947,115948],{"class":72},", info)\n",[51,115950,115951],{"class":53,"line":33664},[51,115952,3480],{"emptyLinePlaceholder":1192},[51,115954,115955,115957,115959],{"class":53,"line":33675},[51,115956,111117],{"class":72},[51,115958,108],{"class":64},[51,115960,105725],{"class":175},[51,115962,115963,115965,115967,115969,115971,115973,115975],{"class":53,"line":33681},[51,115964,4278],{"class":64},[51,115966,32580],{"class":72},[51,115968,27007],{"class":64},[51,115970,33407],{"class":175},[51,115972,73],{"class":72},[51,115974,457],{"class":175},[51,115976,31750],{"class":72},[51,115978,115979,115981,115983],{"class":53,"line":33687},[51,115980,111186],{"class":72},[51,115982,108],{"class":64},[51,115984,115985],{"class":72}," env.action_space.sample()\n",[51,115987,115988,115991,115993],{"class":53,"line":33693},[51,115989,115990],{"class":72},"        obs, reward, terminated, truncated, info ",[51,115992,108],{"class":64},[51,115994,114379],{"class":72},[51,115996,115997,115999,116001],{"class":53,"line":33699},[51,115998,111261],{"class":72},[51,116000,10439],{"class":64},[51,116002,111266],{"class":72},[51,116004,116005,116007,116009,116011,116013,116016,116018,116020,116023,116025,116027,116030,116032,116034,116037,116039,116041,116043],{"class":53,"line":33705},[51,116006,33415],{"class":175},[51,116008,73],{"class":72},[51,116010,111295],{"class":282},[51,116012,111298],{"class":72},[51,116014,116015],{"class":282},"\"reward:\"",[51,116017,13397],{"class":72},[51,116019,32982],{"class":175},[51,116021,116022],{"class":72},"(reward, ",[51,116024,1328],{"class":175},[51,116026,111309],{"class":72},[51,116028,116029],{"class":282},"\"distance:\"",[51,116031,13397],{"class":72},[51,116033,32982],{"class":175},[51,116035,116036],{"class":72},"(info[",[51,116038,115866],{"class":282},[51,116040,113166],{"class":72},[51,116042,1328],{"class":175},[51,116044,31461],{"class":72},[51,116046,116047,116049,116052,116055],{"class":53,"line":33711},[51,116048,3577],{"class":64},[51,116050,116051],{"class":72}," terminated ",[51,116053,116054],{"class":64},"or",[51,116056,116057],{"class":72}," truncated:\n",[51,116059,116060],{"class":53,"line":33717},[51,116061,116062],{"class":64},"            break\n",[51,116064,116065],{"class":53,"line":33737},[51,116066,3480],{"emptyLinePlaceholder":1192},[51,116068,116069,116071,116073,116075,116077,116079,116081,116083],{"class":53,"line":33743},[51,116070,32263],{"class":175},[51,116072,73],{"class":72},[51,116074,111340],{"class":282},[51,116076,13397],{"class":72},[51,116078,32982],{"class":175},[51,116080,111347],{"class":72},[51,116082,1328],{"class":175},[51,116084,31461],{"class":72},[51,116086,116087],{"class":53,"line":33759},[51,116088,3480],{"emptyLinePlaceholder":1192},[51,116090,116091],{"class":53,"line":33765},[51,116092,3480],{"emptyLinePlaceholder":1192},[51,116094,116095,116097,116099,116101,116103],{"class":53,"line":33779},[51,116096,2633],{"class":64},[51,116098,32184],{"class":175},[51,116100,102523],{"class":64},[51,116102,102526],{"class":282},[51,116104,4816],{"class":72},[51,116106,116107],{"class":53,"line":33785},[51,116108,102533],{"class":72},[40,116110,104534],{},[29,116112,116114],{"className":24785,"code":116113,"language":24787,"meta":35,"style":35},"touch ch8_gym_env.py\n",[37,116115,116116],{"__ignoreMap":35},[51,116117,116118,116120],{"class":53,"line":54},[51,116119,102247],{"class":68},[51,116121,116122],{"class":282}," ch8_gym_env.py\n",[40,116124,111408],{},[29,116126,116128],{"className":24785,"code":116127,"language":24787,"meta":35,"style":35},"python ch8_gym_env.py\n",[37,116129,116130],{"__ignoreMap":35},[51,116131,116132,116134],{"class":53,"line":54},[51,116133,31344],{"class":68},[51,116135,116122],{"class":282},[1233,116137,102536],{"id":102536},[40,116139,116140],{},"继承 Gymnasium 环境：",[29,116142,116144],{"className":31342,"code":116143,"language":31344,"meta":35,"style":35},"class ReacherEnv(gym.Env):\n",[37,116145,116146],{"__ignoreMap":35},[51,116147,116148,116150,116152,116154,116156,116158,116160],{"class":53,"line":54},[51,116149,15656],{"class":64},[51,116151,115021],{"class":68},[51,116153,73],{"class":72},[51,116155,114504],{"class":68},[51,116157,1804],{"class":72},[51,116159,115030],{"class":68},[51,116161,31750],{"class":72},[40,116163,116164],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[40,116166,116167],{},"初始化模型：",[29,116169,116171],{"className":31342,"code":116170,"language":31344,"meta":35,"style":35},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[37,116172,116173,116187],{"__ignoreMap":35},[51,116174,116175,116177,116179,116181,116183,116185],{"class":53,"line":54},[51,116176,31787],{"class":175},[51,116178,115081],{"class":72},[51,116180,108],{"class":64},[51,116182,102376],{"class":72},[51,116184,102278],{"class":175},[51,116186,90],{"class":72},[51,116188,116189,116191,116193,116195,116197,116199],{"class":53,"line":61},[51,116190,31787],{"class":175},[51,116192,115096],{"class":72},[51,116194,108],{"class":64},[51,116196,115101],{"class":72},[51,116198,31787],{"class":175},[51,116200,115106],{"class":72},[40,116202,116203,116204,116206],{},"这和前面章节一样，只是现在放到了类的 ",[37,116205,31793],{}," 里。",[40,116208,116209],{},"缓存 site ID：",[29,116211,116213],{"className":31342,"code":116212,"language":31344,"meta":35,"style":35},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[37,116214,116215,116229],{"__ignoreMap":35},[51,116216,116217,116219,116221,116223,116225,116227],{"class":53,"line":54},[51,116218,31787],{"class":175},[51,116220,115117],{"class":72},[51,116222,108],{"class":64},[51,116224,115122],{"class":72},[51,116226,90518],{"class":175},[51,116228,90],{"class":72},[51,116230,116231,116233,116235,116237,116239,116241],{"class":53,"line":61},[51,116232,31787],{"class":175},[51,116234,115138],{"class":72},[51,116236,108],{"class":64},[51,116238,115122],{"class":72},[51,116240,90518],{"class":175},[51,116242,90],{"class":72},[40,116244,116245],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[40,116247,116248],{},"reset：",[29,116250,116252],{"className":31342,"code":116251,"language":31344,"meta":35,"style":35},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[37,116253,116254],{"__ignoreMap":35},[51,116255,116256,116258,116260,116262,116264,116266,116268,116270,116272,116274,116276,116278,116280,116282,116284,116286,116288],{"class":53,"line":54},[51,116257,32911],{"class":64},[51,116259,115486],{"class":68},[51,116261,115489],{"class":72},[51,116263,1702],{"class":64},[51,116265,115494],{"class":72},[51,116267,65],{"class":175},[51,116269,26073],{"class":64},[51,116271,39897],{"class":175},[51,116273,14526],{"class":64},[51,116275,39897],{"class":175},[51,116277,115507],{"class":72},[51,116279,115510],{"class":175},[51,116281,26073],{"class":64},[51,116283,39897],{"class":175},[51,116285,14526],{"class":64},[51,116287,39897],{"class":175},[51,116289,31750],{"class":72},[40,116291,116292,116294],{},[37,116293,71020],{}," 做四件事：",[19,116296,116297,116300,116303,116306],{},[22,116298,116299],{},"设置随机种子。",[22,116301,116302],{},"重置 MuJoCo data。",[22,116304,116305],{},"随机初始化关节角。",[22,116307,116308],{},"返回初始观测和 info。",[40,116310,116311],{},"step：",[29,116313,116315],{"className":31342,"code":116314,"language":31344,"meta":35,"style":35},"def step(self, action):\n",[37,116316,116317],{"__ignoreMap":35},[51,116318,116319,116321,116323],{"class":53,"line":54},[51,116320,32911],{"class":64},[51,116322,115651],{"class":68},[51,116324,115654],{"class":72},[40,116326,116327,116329],{},[37,116328,108098],{}," 做六件事：",[19,116331,116332,116335,116341,116344,116347,116350],{},[22,116333,116334],{},"检查并裁剪 action。",[22,116336,116337,116338,29349],{},"写入 ",[37,116339,116340],{},"self.data.ctrl",[22,116342,116343],{},"连续推进若干个 MuJoCo 物理步。",[22,116345,116346],{},"计算新观测。",[22,116348,116349],{},"计算奖励和结束条件。",[22,116351,116352],{},"返回 Gymnasium 标准五元组。",[1233,116354,102672],{"id":102672},[29,116356,116358],{"className":31342,"code":116357,"language":31344,"meta":35,"style":35},"import gymnasium as gym\n",[37,116359,116360],{"__ignoreMap":35},[51,116361,116362,116364,116366,116368],{"class":53,"line":54},[51,116363,31356],{"class":64},[51,116365,114859],{"class":72},[51,116367,32347],{"class":64},[51,116369,114864],{"class":72},[40,116371,116372,116373,116375,116376,116379],{},"导入 Gymnasium，并起别名 ",[37,116374,114504],{},"。后面写 ",[37,116377,116378],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[29,116381,116383],{"className":31342,"code":116382,"language":31344,"meta":35,"style":35},"from gymnasium import spaces\n",[37,116384,116385],{"__ignoreMap":35},[51,116386,116387,116389,116391,116393],{"class":53,"line":54},[51,116388,31701],{"class":64},[51,116390,114859],{"class":72},[51,116392,31356],{"class":64},[51,116394,114891],{"class":72},[40,116396,116397,116398,116401],{},"导入空间定义工具。",[37,116399,116400],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[29,116403,116404],{"className":31342,"code":116143,"language":31344,"meta":35,"style":35},[37,116405,116406],{"__ignoreMap":35},[51,116407,116408,116410,116412,116414,116416,116418,116420],{"class":53,"line":54},[51,116409,15656],{"class":64},[51,116411,115021],{"class":68},[51,116413,73],{"class":72},[51,116415,114504],{"class":68},[51,116417,1804],{"class":72},[51,116419,115030],{"class":68},[51,116421,31750],{"class":72},[40,116423,116424,116425,116428,116429,116431,116432,101982,116434,116436],{},"定义一个类，名字叫 ",[37,116426,116427],{},"ReacherEnv","。括号里的 ",[37,116430,116378],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[37,116433,71020],{},[37,116435,108098],{}," 这两个核心方法。",[29,116438,116440],{"className":31342,"code":116439,"language":31344,"meta":35,"style":35},"metadata = {\"render_modes\": []}\n",[37,116441,116442],{"__ignoreMap":35},[51,116443,116444,116447,116449,116451,116453],{"class":53,"line":54},[51,116445,116446],{"class":72},"metadata ",[51,116448,108],{"class":64},[51,116450,5522],{"class":72},[51,116452,115044],{"class":282},[51,116454,115047],{"class":72},[40,116456,116457],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[29,116459,116461],{"className":31342,"code":116460,"language":31344,"meta":35,"style":35},"def __init__(self) -> None:\n",[37,116462,116463],{"__ignoreMap":35},[51,116464,116465,116467,116469,116471,116473],{"class":53,"line":54},[51,116466,32911],{"class":64},[51,116468,31768],{"class":175},[51,116470,115060],{"class":72},[51,116472,96650],{"class":175},[51,116474,4816],{"class":72},[40,116476,116477,116479,116480,29349],{},[37,116478,31793],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[37,116481,116482],{},"env = ReacherEnv()",[29,116484,116486],{"className":31342,"code":116485,"language":31344,"meta":35,"style":35},"super().__init__()\n",[37,116487,116488],{"__ignoreMap":35},[51,116489,116490,116493,116495,116497],{"class":53,"line":54},[51,116491,116492],{"class":175},"super",[51,116494,18223],{"class":72},[51,116496,31793],{"class":175},[51,116498,154],{"class":72},[40,116500,116501,116502,116504],{},"调用父类 ",[37,116503,116378],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[29,116506,116507],{"className":31342,"code":116170,"language":31344,"meta":35,"style":35},[37,116508,116509,116523],{"__ignoreMap":35},[51,116510,116511,116513,116515,116517,116519,116521],{"class":53,"line":54},[51,116512,31787],{"class":175},[51,116514,115081],{"class":72},[51,116516,108],{"class":64},[51,116518,102376],{"class":72},[51,116520,102278],{"class":175},[51,116522,90],{"class":72},[51,116524,116525,116527,116529,116531,116533,116535],{"class":53,"line":61},[51,116526,31787],{"class":175},[51,116528,115096],{"class":72},[51,116530,108],{"class":64},[51,116532,115101],{"class":72},[51,116534,31787],{"class":175},[51,116536,115106],{"class":72},[40,116538,116539,116540,116542,116543,101982,116546,116549],{},"把 MuJoCo 模型和状态保存到 ",[37,116541,31787],{}," 上。",[37,116544,116545],{},"self.model",[37,116547,116548],{},"self.data"," 表示这个环境对象自己的模型和状态。",[29,116551,116552],{"className":31342,"code":116212,"language":31344,"meta":35,"style":35},[37,116553,116554,116568],{"__ignoreMap":35},[51,116555,116556,116558,116560,116562,116564,116566],{"class":53,"line":54},[51,116557,31787],{"class":175},[51,116559,115117],{"class":72},[51,116561,108],{"class":64},[51,116563,115122],{"class":72},[51,116565,90518],{"class":175},[51,116567,90],{"class":72},[51,116569,116570,116572,116574,116576,116578,116580],{"class":53,"line":61},[51,116571,31787],{"class":175},[51,116573,115138],{"class":72},[51,116575,108],{"class":64},[51,116577,115122],{"class":72},[51,116579,90518],{"class":175},[51,116581,90],{"class":72},[40,116583,116584,116585,101982,116588,116591],{},"提前查好 tip 和 target 的 site ID。这样 ",[37,116586,116587],{},"_get_obs",[37,116589,116590],{},"_get_reward"," 里就不用每次按名字查找。",[29,116593,116595],{"className":31342,"code":116594,"language":31344,"meta":35,"style":35},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[37,116596,116597,116607,116617],{"__ignoreMap":35},[51,116598,116599,116601,116603,116605],{"class":53,"line":54},[51,116600,31787],{"class":175},[51,116602,114831],{"class":72},[51,116604,108],{"class":64},[51,116606,55391],{"class":175},[51,116608,116609,116611,116613,116615],{"class":53,"line":61},[51,116610,31787],{"class":175},[51,116612,115210],{"class":72},[51,116614,108],{"class":64},[51,116616,115215],{"class":175},[51,116618,116619,116621,116623,116625],{"class":53,"line":93},[51,116620,31787],{"class":175},[51,116622,114670],{"class":72},[51,116624,108],{"class":64},[51,116626,48297],{"class":175},[40,116628,116629,116632,116633,116636,116637,116640],{},[37,116630,116631],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[37,116634,116635],{},"max_steps"," 是一个 episode 最多运行多少步。",[37,116638,116639],{},"steps"," 记录当前 episode 已经走了多少步。",[29,116642,116643],{"className":31342,"code":114709,"language":31344,"meta":35,"style":35},[37,116644,116645],{"__ignoreMap":35},[51,116646,116647,116649,116651,116653,116655,116657,116659,116661,116663,116665,116667,116669,116671,116673,116675,116677,116679,116681,116683,116685],{"class":53,"line":54},[51,116648,31787],{"class":175},[51,116650,114718],{"class":72},[51,116652,108],{"class":64},[51,116654,114723],{"class":72},[51,116656,114726],{"class":78},[51,116658,114729],{"class":64},[51,116660,103367],{"class":175},[51,116662,13397],{"class":72},[51,116664,114736],{"class":78},[51,116666,108],{"class":64},[51,116668,103367],{"class":175},[51,116670,13397],{"class":72},[51,116672,96927],{"class":78},[51,116674,108],{"class":64},[51,116676,73],{"class":72},[51,116678,1334],{"class":175},[51,116680,114753],{"class":72},[51,116682,94464],{"class":78},[51,116684,108],{"class":64},[51,116686,114760],{"class":72},[40,116688,116689,116690,116693,116694,101982,116697,116700],{},"定义动作空间。",[37,116691,116692],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[37,116695,116696],{},"low=-1.0",[37,116698,116699],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[29,116702,116703],{"className":31342,"code":114770,"language":31344,"meta":35,"style":35},[37,116704,116705],{"__ignoreMap":35},[51,116706,116707,116709,116711,116713,116715,116717,116719,116721,116723,116725,116727,116729,116731,116733,116735,116737,116739,116741],{"class":53,"line":54},[51,116708,31787],{"class":175},[51,116710,114779],{"class":72},[51,116712,108],{"class":64},[51,116714,114723],{"class":72},[51,116716,114726],{"class":78},[51,116718,114729],{"class":64},[51,116720,114790],{"class":72},[51,116722,114736],{"class":78},[51,116724,108],{"class":64},[51,116726,114790],{"class":72},[51,116728,96927],{"class":78},[51,116730,108],{"class":64},[51,116732,73],{"class":72},[51,116734,443],{"class":175},[51,116736,114753],{"class":72},[51,116738,94464],{"class":78},[51,116740,108],{"class":64},[51,116742,114760],{"class":72},[40,116744,116745,116746,116749,116750,116753],{},"定义观测空间。",[37,116747,116748],{},"shape=(10,)"," 表示观测是 10 个数。",[37,116751,116752],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[29,116755,116757],{"className":31342,"code":116756,"language":31344,"meta":35,"style":35},"def _get_obs(self) -> np.ndarray:\n",[37,116758,116759],{"__ignoreMap":35},[51,116760,116761,116763,116765],{"class":53,"line":54},[51,116762,32911],{"class":64},[51,116764,115320],{"class":68},[51,116766,115323],{"class":72},[40,116768,116769,116770,116772],{},"定义内部函数，用来生成观测。函数名前面的 ",[37,116771,2234],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[29,116774,116776],{"className":31342,"code":116775,"language":31344,"meta":35,"style":35},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[37,116777,116778,116792],{"__ignoreMap":35},[51,116779,116780,116782,116784,116786,116788,116790],{"class":53,"line":54},[51,116781,112532],{"class":72},[51,116783,108],{"class":64},[51,116785,39837],{"class":175},[51,116787,115334],{"class":72},[51,116789,31787],{"class":175},[51,116791,115339],{"class":72},[51,116793,116794,116796,116798,116800,116802,116804],{"class":53,"line":61},[51,116795,112542],{"class":72},[51,116797,108],{"class":64},[51,116799,39837],{"class":175},[51,116801,115334],{"class":72},[51,116803,31787],{"class":175},[51,116805,115354],{"class":72},[40,116807,116808],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[29,116810,116812],{"className":31342,"code":116811,"language":31344,"meta":35,"style":35},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[37,116813,116814,116830],{"__ignoreMap":35},[51,116815,116816,116818,116820,116822,116824,116826,116828],{"class":53,"line":54},[51,116817,111818],{"class":72},[51,116819,108],{"class":64},[51,116821,115363],{"class":72},[51,116823,31787],{"class":175},[51,116825,115368],{"class":72},[51,116827,31787],{"class":175},[51,116829,115373],{"class":72},[51,116831,116832,116834],{"class":53,"line":61},[51,116833,18008],{"class":64},[51,116835,115380],{"class":72},[40,116837,116838,116839,116842,116843,116845],{},"拼接观测，并转换成 ",[37,116840,116841],{},"float32","。很多强化学习库默认使用 ",[37,116844,116841],{},"，所以这里主动转换。",[29,116847,116848],{"className":31342,"code":116251,"language":31344,"meta":35,"style":35},[37,116849,116850],{"__ignoreMap":35},[51,116851,116852,116854,116856,116858,116860,116862,116864,116866,116868,116870,116872,116874,116876,116878,116880,116882,116884],{"class":53,"line":54},[51,116853,32911],{"class":64},[51,116855,115486],{"class":68},[51,116857,115489],{"class":72},[51,116859,1702],{"class":64},[51,116861,115494],{"class":72},[51,116863,65],{"class":175},[51,116865,26073],{"class":64},[51,116867,39897],{"class":175},[51,116869,14526],{"class":64},[51,116871,39897],{"class":175},[51,116873,115507],{"class":72},[51,116875,115510],{"class":175},[51,116877,26073],{"class":64},[51,116879,39897],{"class":175},[51,116881,14526],{"class":64},[51,116883,39897],{"class":175},[51,116885,31750],{"class":72},[40,116887,116888,116889,116891,116892,116895],{},"定义 reset。",[37,116890,115530],{}," 用来控制随机数，保证实验可以复现。",[37,116893,116894],{},"options"," 用来接收额外配置，本章暂时不用。",[29,116897,116899],{"className":31342,"code":116898,"language":31344,"meta":35,"style":35},"super().reset(seed=seed)\n",[37,116900,116901],{"__ignoreMap":35},[51,116902,116903,116905,116907,116909,116911],{"class":53,"line":54},[51,116904,116492],{"class":175},[51,116906,115527],{"class":72},[51,116908,115530],{"class":78},[51,116910,108],{"class":64},[51,116912,115535],{"class":72},[40,116914,116915,116916,116919],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[37,116917,116918],{},"self.np_random"," 生成可复现的随机数。",[29,116921,116923],{"className":31342,"code":116922,"language":31344,"meta":35,"style":35},"mujoco.mj_resetData(self.model, self.data)\n",[37,116924,116925],{"__ignoreMap":35},[51,116926,116927,116930,116932,116934,116936],{"class":53,"line":54},[51,116928,116929],{"class":72},"mujoco.mj_resetData(",[51,116931,31787],{"class":175},[51,116933,115545],{"class":72},[51,116935,31787],{"class":175},[51,116937,115550],{"class":72},[40,116939,116940],{},"把 MuJoCo 状态重置到默认状态。",[29,116942,116944],{"className":31342,"code":116943,"language":31344,"meta":35,"style":35},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[37,116945,116946],{"__ignoreMap":35},[51,116947,116948,116950,116952,116954,116956,116958,116960,116962,116964,116966,116968,116970,116972,116974,116976,116978,116980],{"class":53,"line":54},[51,116949,31787],{"class":175},[51,116951,115561],{"class":72},[51,116953,108],{"class":64},[51,116955,39837],{"class":175},[51,116957,115568],{"class":72},[51,116959,114726],{"class":78},[51,116961,114729],{"class":64},[51,116963,87174],{"class":175},[51,116965,13397],{"class":72},[51,116967,114736],{"class":78},[51,116969,108],{"class":64},[51,116971,87174],{"class":175},[51,116973,13397],{"class":72},[51,116975,32460],{"class":78},[51,116977,108],{"class":64},[51,116979,31787],{"class":175},[51,116981,115593],{"class":72},[40,116983,116305,116984,116987,116988,116991,116992,116994],{},[37,116985,116986],{},"[:]"," 表示修改整个数组。",[37,116989,116990],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[37,116993,103114],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[29,116996,116998],{"className":31342,"code":116997,"language":31344,"meta":35,"style":35},"self.data.qvel[:] = 0.0\n",[37,116999,117000],{"__ignoreMap":35},[51,117001,117002,117004,117006,117008],{"class":53,"line":54},[51,117003,31787],{"class":175},[51,117005,115600],{"class":72},[51,117007,108],{"class":64},[51,117009,105725],{"class":175},[40,117011,117012],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[29,117014,117016],{"className":31342,"code":117015,"language":31344,"meta":35,"style":35},"self.steps = 0\nreturn self._get_obs(), {}\n",[37,117017,117018,117028],{"__ignoreMap":35},[51,117019,117020,117022,117024,117026],{"class":53,"line":54},[51,117021,31787],{"class":175},[51,117023,114670],{"class":72},[51,117025,108],{"class":64},[51,117027,48297],{"class":175},[51,117029,117030,117032,117034],{"class":53,"line":61},[51,117031,18008],{"class":64},[51,117033,39837],{"class":175},[51,117035,115640],{"class":72},[40,117037,117038],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[29,117040,117041],{"className":31342,"code":116314,"language":31344,"meta":35,"style":35},[37,117042,117043],{"__ignoreMap":35},[51,117044,117045,117047,117049],{"class":53,"line":54},[51,117046,32911],{"class":64},[51,117048,115651],{"class":68},[51,117050,115654],{"class":72},[40,117052,117053],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[29,117055,117057],{"className":31342,"code":117056,"language":31344,"meta":35,"style":35},"action = np.asarray(action, dtype=np.float32)\n",[37,117058,117059],{"__ignoreMap":35},[51,117060,117061,117063,117065,117067,117069,117071],{"class":53,"line":54},[51,117062,108406],{"class":72},[51,117064,108],{"class":64},[51,117066,115663],{"class":72},[51,117068,94464],{"class":78},[51,117070,108],{"class":64},[51,117072,114760],{"class":72},[40,117074,117075,117076,29349],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[37,117077,116841],{},[29,117079,117081],{"className":31342,"code":117080,"language":31344,"meta":35,"style":35},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[37,117082,117083],{"__ignoreMap":35},[51,117084,117085,117087,117089,117091,117093,117095,117097],{"class":53,"line":54},[51,117086,108406],{"class":72},[51,117088,108],{"class":64},[51,117090,108411],{"class":72},[51,117092,31787],{"class":175},[51,117094,115682],{"class":72},[51,117096,31787],{"class":175},[51,117098,115687],{"class":72},[40,117100,117101],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[29,117103,117105],{"className":31342,"code":117104,"language":31344,"meta":35,"style":35},"self.data.ctrl[:] = action\n",[37,117106,117107],{"__ignoreMap":35},[51,117108,117109,117111,117113,117115],{"class":53,"line":54},[51,117110,31787],{"class":175},[51,117112,115698],{"class":72},[51,117114,108],{"class":64},[51,117116,108434],{"class":72},[40,117118,117119],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[29,117121,117123],{"className":31342,"code":117122,"language":31344,"meta":35,"style":35},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[37,117124,117125,117141],{"__ignoreMap":35},[51,117126,117127,117129,117131,117133,117135,117137,117139],{"class":53,"line":54},[51,117128,4102],{"class":64},[51,117130,102465],{"class":72},[51,117132,27007],{"class":64},[51,117134,33407],{"class":175},[51,117136,73],{"class":72},[51,117138,31787],{"class":175},[51,117140,115719],{"class":72},[51,117142,117143,117146,117148,117150,117152],{"class":53,"line":61},[51,117144,117145],{"class":72},"    mujoco.mj_step(",[51,117147,31787],{"class":175},[51,117149,115545],{"class":72},[51,117151,31787],{"class":175},[51,117153,115550],{"class":72},[40,117155,117156,117157,117160,117161,117163,117164,29349],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[37,117158,117159],{},"frame_skip=5","，所以外部调用一次 ",[37,117162,114841],{},"，内部实际执行 5 次 ",[37,117165,102179],{},[29,117167,117169],{"className":31342,"code":117168,"language":31344,"meta":35,"style":35},"self.steps += 1\n",[37,117170,117171],{"__ignoreMap":35},[51,117172,117173,117175,117177,117179],{"class":53,"line":54},[51,117174,31787],{"class":175},[51,117176,114670],{"class":72},[51,117178,10439],{"class":64},[51,117180,56663],{"class":175},[40,117182,117183],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[29,117185,117187],{"className":31342,"code":117186,"language":31344,"meta":35,"style":35},"obs = self._get_obs()\nreward = self._get_reward()\n",[37,117188,117189,117199],{"__ignoreMap":35},[51,117190,117191,117193,117195,117197],{"class":53,"line":54},[51,117192,111818],{"class":72},[51,117194,108],{"class":64},[51,117196,39837],{"class":175},[51,117198,115761],{"class":72},[51,117200,117201,117203,117205,117207],{"class":53,"line":61},[51,117202,111969],{"class":72},[51,117204,108],{"class":64},[51,117206,39837],{"class":175},[51,117208,115772],{"class":72},[40,117210,117211],{},"计算新的观测和奖励。",[29,117213,117215],{"className":31342,"code":117214,"language":31344,"meta":35,"style":35},"dist = float(np.linalg.norm(tip - target))\n",[37,117216,117217],{"__ignoreMap":35},[51,117218,117219,117221,117223,117225,117227,117229],{"class":53,"line":54},[51,117220,112560],{"class":72},[51,117222,108],{"class":64},[51,117224,110761],{"class":175},[51,117226,115815],{"class":72},[51,117228,1778],{"class":64},[51,117230,115820],{"class":72},[40,117232,117233],{},"计算末端到目标的距离，并转换成 Python float。",[29,117235,117236],{"className":31342,"code":114641,"language":31344,"meta":35,"style":35},[37,117237,117238,117250],{"__ignoreMap":35},[51,117239,117240,117242,117244,117246,117248],{"class":53,"line":54},[51,117241,114648],{"class":72},[51,117243,108],{"class":64},[51,117245,114653],{"class":72},[51,117247,2154],{"class":64},[51,117249,114658],{"class":175},[51,117251,117252,117254,117256,117258,117260,117262,117264],{"class":53,"line":61},[51,117253,114663],{"class":72},[51,117255,108],{"class":64},[51,117257,39837],{"class":175},[51,117259,114670],{"class":72},[51,117261,2800],{"class":64},[51,117263,39837],{"class":175},[51,117265,114677],{"class":72},[40,117267,117268],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[29,117270,117272],{"className":31342,"code":117271,"language":31344,"meta":35,"style":35},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[37,117273,117274,117287],{"__ignoreMap":35},[51,117275,117276,117279,117281,117283,117285],{"class":53,"line":54},[51,117277,117278],{"class":72},"info ",[51,117280,108],{"class":64},[51,117282,5522],{"class":72},[51,117284,115866],{"class":282},[51,117286,115869],{"class":72},[51,117288,117289,117291],{"class":53,"line":61},[51,117290,18008],{"class":64},[51,117292,115876],{"class":72},[40,117294,117295,117298],{},[37,117296,117297],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[29,117300,117302],{"className":31342,"code":117301,"language":31344,"meta":35,"style":35},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[37,117303,117304,117313],{"__ignoreMap":35},[51,117305,117306,117309,117311],{"class":53,"line":54},[51,117307,117308],{"class":72},"env ",[51,117310,108],{"class":64},[51,117312,115906],{"class":72},[51,117314,117315,117317,117319,117321,117323,117325,117327],{"class":53,"line":61},[51,117316,114364],{"class":72},[51,117318,108],{"class":64},[51,117320,115916],{"class":72},[51,117322,115530],{"class":78},[51,117324,108],{"class":64},[51,117326,176],{"class":175},[51,117328,90],{"class":72},[40,117330,117331,117332,117335],{},"创建环境并重置。",[37,117333,117334],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[29,117337,117339],{"className":31342,"code":117338,"language":31344,"meta":35,"style":35},"action = env.action_space.sample()\n",[37,117340,117341],{"__ignoreMap":35},[51,117342,117343,117345,117347],{"class":53,"line":54},[51,117344,108406],{"class":72},[51,117346,108],{"class":64},[51,117348,115985],{"class":72},[40,117350,117351],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117353,103280],{"id":103279},[40,117355,106448],{},[29,117357,117360],{"className":117358,"code":117359,"language":34,"meta":35},[32],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[37,117361,117359],{"__ignoreMap":35},[40,117363,117364],{},"这个环境已经具备强化学习环境的基本结构。",[40,117366,117367],{},"主函数里使用随机动作：",[29,117369,117370],{"className":31342,"code":117338,"language":31344,"meta":35,"style":35},[37,117371,117372],{"__ignoreMap":35},[51,117373,117374,117376,117378],{"class":53,"line":54},[51,117375,108406],{"class":72},[51,117377,108],{"class":64},[51,117379,115985],{"class":72},[40,117381,117382],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117384,103312],{"id":103311},[19,117386,117387,117390,117396,117405,117414,117423,117429],{},[22,117388,117389],{},"运行程序。",[22,117391,117392,117393,29349],{},"确认 ",[37,117394,117395],{},"obs.shape == (10,)",[22,117397,112145,117398,117401,117402,29349],{},[37,117399,117400],{},"env.action_space","，应类似 ",[37,117403,117404],{},"Box(-1.0, 1.0, (2,), float32)",[22,117406,106549,117407,117410,117411,29349],{},[37,117408,117409],{},"self.max_steps = 10","，确认环境会更快 ",[37,117412,117413],{},"truncated=True",[22,117415,103375,117416,103378,117419,117422],{},[37,117417,117418],{},"terminated = dist \u003C 0.05",[37,117420,117421],{},"dist \u003C 0.2","，观察是否更容易结束。",[22,117424,103375,117425,117428],{},[37,117426,117427],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[22,117430,117431,117432,117434,117435,117438],{},"在 ",[37,117433,117297],{}," 里加入 ",[37,117436,117437],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117440,103417],{"id":103416},[1233,117442,117444],{"id":117443},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[40,117446,117447,117448,117450],{},"Gymnasium 的 ",[37,117449,108098],{}," 返回 5 个值:",[29,117452,117454],{"className":31342,"code":117453,"language":31344,"meta":35,"style":35},"obs, reward, terminated, truncated, info\n",[37,117455,117456],{"__ignoreMap":35},[51,117457,117458],{"class":53,"line":54},[51,117459,117453],{"class":72},[40,117461,117462],{},"不是旧 Gym 的 4 个值。",[1233,117464,117466,117469],{"id":117465},"datactrl-action-维度错误",[37,117467,117468],{},"data.ctrl[:] = action"," 维度错误",[40,117471,103487],{},[29,117473,117475],{"className":31342,"code":117474,"language":31344,"meta":35,"style":35},"print(self.model.nu)\nprint(action.shape)\n",[37,117476,117477,117488],{"__ignoreMap":35},[51,117478,117479,117481,117483,117485],{"class":53,"line":54},[51,117480,31379],{"class":175},[51,117482,73],{"class":72},[51,117484,31787],{"class":175},[51,117486,117487],{"class":72},".model.nu)\n",[51,117489,117490,117492],{"class":53,"line":61},[51,117491,31379],{"class":175},[51,117493,117494],{"class":72},"(action.shape)\n",[40,117496,117497],{},"两者必须匹配。",[1233,117499,117501],{"id":117500},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[40,117503,103426],{},[29,117505,117507],{"className":31342,"code":117506,"language":31344,"meta":35,"style":35},"mujoco.mj_forward(self.model, self.data)\n",[37,117508,117509],{"__ignoreMap":35},[51,117510,117511,117514,117516,117518,117520],{"class":53,"line":54},[51,117512,117513],{"class":72},"mujoco.mj_forward(",[51,117515,31787],{"class":175},[51,117517,115545],{"class":72},[51,117519,31787],{"class":175},[51,117521,115550],{"class":72},[1233,117523,117525,117527],{"id":117524},"observation_space-维度和-obs-不一致",[37,117526,114564],{}," 维度和 obs 不一致",[40,117529,103539],{},[29,117531,117533],{"className":31342,"code":117532,"language":31344,"meta":35,"style":35},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[37,117534,117535,117545,117552],{"__ignoreMap":35},[51,117536,117537,117539,117541,117543],{"class":53,"line":54},[51,117538,111818],{"class":72},[51,117540,108],{"class":64},[51,117542,39837],{"class":175},[51,117544,115761],{"class":72},[51,117546,117547,117549],{"class":53,"line":61},[51,117548,31379],{"class":175},[51,117550,117551],{"class":72},"(obs.shape)\n",[51,117553,117554,117556,117558,117560],{"class":53,"line":93},[51,117555,31379],{"class":175},[51,117557,73],{"class":72},[51,117559,31787],{"class":175},[51,117561,117562],{"class":72},".observation_space.shape)\n",[40,117564,117565],{},"两者必须一致。本章观测是：",[29,117567,117570],{"className":117568,"code":117569,"language":34,"meta":35},[32],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[37,117571,117569],{"__ignoreMap":35},[1233,117573,117575],{"id":117574},"action-超过范围","action 超过范围",[40,117577,117578],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[29,117580,117581],{"className":31342,"code":117080,"language":31344,"meta":35,"style":35},[37,117582,117583],{"__ignoreMap":35},[51,117584,117585,117587,117589,117591,117593,117595,117597],{"class":53,"line":54},[51,117586,108406],{"class":72},[51,117588,108],{"class":64},[51,117590,108411],{"class":72},[51,117592,31787],{"class":175},[51,117594,115682],{"class":72},[51,117596,31787],{"class":175},[51,117598,115687],{"class":72},[40,117600,117601,117602,29349],{},"这能避免无效动作直接写入 ",[37,117603,102040],{},[1233,117605,117607],{"id":117606},"忘记返回-info","忘记返回 info",[40,117609,117447,117610,101982,117612,117614],{},[37,117611,71020],{},[37,117613,108098],{}," 都会返回 info：",[29,117616,117617],{"className":31342,"code":114357,"language":31344,"meta":35,"style":35},[37,117618,117619,117627],{"__ignoreMap":35},[51,117620,117621,117623,117625],{"class":53,"line":54},[51,117622,114364],{"class":72},[51,117624,108],{"class":64},[51,117626,114369],{"class":72},[51,117628,117629,117631,117633],{"class":53,"line":61},[51,117630,114374],{"class":72},[51,117632,108],{"class":64},[51,117634,114379],{"class":72},[40,117636,117637,117638,29349],{},"即使暂时没有额外信息，也返回 ",[37,117639,33423],{},[14,117641,117643],{"id":117642},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[40,117645,117646],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[19,117648,117649,117652,117655,117658,117661,117664],{},[22,117650,117651],{},"更稳定的 reward。",[22,117653,117654],{},"合理的 episode 长度。",[22,117656,117657],{},"可重复的随机目标采样。",[22,117659,117660],{},"render 接口。",[22,117662,117663],{},"环境注册代码。",[22,117665,117666],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[40,117668,117669],{},"如果只是自己写训练循环，最小形式是：",[29,117671,117673],{"className":31342,"code":117672,"language":31344,"meta":35,"style":35},"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",[37,117674,117675,117683,117699,117703,117719,117728,117737,117747],{"__ignoreMap":35},[51,117676,117677,117679,117681],{"class":53,"line":54},[51,117678,117308],{"class":72},[51,117680,108],{"class":64},[51,117682,115906],{"class":72},[51,117684,117685,117687,117689,117691,117693,117695,117697],{"class":53,"line":61},[51,117686,114364],{"class":72},[51,117688,108],{"class":64},[51,117690,115916],{"class":72},[51,117692,115530],{"class":78},[51,117694,108],{"class":64},[51,117696,176],{"class":175},[51,117698,90],{"class":72},[51,117700,117701],{"class":53,"line":93},[51,117702,3480],{"emptyLinePlaceholder":1192},[51,117704,117705,117707,117709,117711,117713,117715,117717],{"class":53,"line":99},[51,117706,4102],{"class":64},[51,117708,102465],{"class":72},[51,117710,27007],{"class":64},[51,117712,33407],{"class":175},[51,117714,73],{"class":72},[51,117716,7372],{"class":175},[51,117718,31750],{"class":72},[51,117720,117721,117724,117726],{"class":53,"line":120},[51,117722,117723],{"class":72},"    action ",[51,117725,108],{"class":64},[51,117727,115985],{"class":72},[51,117729,117730,117733,117735],{"class":53,"line":129},[51,117731,117732],{"class":72},"    obs, reward, terminated, truncated, info ",[51,117734,108],{"class":64},[51,117736,114379],{"class":72},[51,117738,117739,117741,117743,117745],{"class":53,"line":206},[51,117740,4178],{"class":64},[51,117742,116051],{"class":72},[51,117744,116054],{"class":64},[51,117746,116057],{"class":72},[51,117748,117749,117752,117754],{"class":53,"line":212},[51,117750,117751],{"class":72},"        obs, info ",[51,117753,108],{"class":64},[51,117755,114369],{"class":72},[14,117757,117759],{"id":117758},"_9本章小结","9.本章小结",[40,117761,117762],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[29,117764,117767],{"className":117765,"code":117766,"language":34,"meta":35},[32],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[37,117768,117766],{"__ignoreMap":35},[40,117770,117771],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1179,117773,117774],{},"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":35,"searchDepth":61,"depth":61,"links":117776},[117777,117778,117779,117786,117790,117791,117792,117802,117803],{"id":101610,"depth":61,"text":101611},{"id":101733,"depth":61,"text":101734},{"id":102008,"depth":61,"text":102009,"children":117780},[117781,117783,117785],{"id":114588,"depth":93,"text":117782},"terminated 和 truncated 的区别",{"id":114691,"depth":93,"text":117784},"observation_space 和 action_space",{"id":114818,"depth":93,"text":114819},{"id":102216,"depth":61,"text":102217,"children":117787},[117788,117789],{"id":102536,"depth":93,"text":102536},{"id":102672,"depth":93,"text":102672},{"id":103279,"depth":61,"text":103280},{"id":103311,"depth":61,"text":103312},{"id":103416,"depth":61,"text":103417,"children":117793},[117794,117795,117797,117798,117800,117801],{"id":117443,"depth":93,"text":117444},{"id":117465,"depth":93,"text":117796},"data.ctrl[:] = action 维度错误",{"id":117500,"depth":93,"text":117501},{"id":117524,"depth":93,"text":117799},"observation_space 维度和 obs 不一致",{"id":117574,"depth":93,"text":117575},{"id":117606,"depth":93,"text":117607},{"id":117642,"depth":61,"text":117643},{"id":117758,"depth":61,"text":117759},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114341,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117810,"title":117811,"body":117812,"description":118235,"extension":1190,"meta":118236,"navigation":1192,"path":118237,"seo":118238,"stem":118239,"__hash__":118240},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117813,"toc":118225},[117814,117818,117821,117824,117844,117850,117856,117866,117869,117872,117892,117895,117899,117902,117908,117911,117925,117928,117931,118005,118008,118014,118017,118040,118043,118093,118096,118102,118105,118108,118111,118130,118133,118139,118142,118145,118148,118168,118171,118174,118177,118222],[10,117815,117817],{"id":117816},"mujoco-学习","MuJoCo 学习",[40,117819,117820],{},"初版",[40,117822,117823],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[19,117825,117826,117829,117832,117841],{},[22,117827,117828],{},"MuJoCo 模型文件在描述什么。",[22,117830,117831],{},"Python 代码怎样读取和推进仿真。",[22,117833,117834,1466,117836,1466,117838,117840],{},[37,117835,104994],{},[37,117837,105324],{},[37,117839,105327],{}," 这些数组为什么重要。",[22,117842,117843],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[40,117845,117846,117847,117849],{},"默认环境为 Fedora 44、Python >= 3.10、",[37,117848,101991],{}," 官方 Python bindings。",[40,117851,117852,117853,117855],{},"注意：本文禁止使用 ",[37,117854,101976],{},"。所有示例均使用：",[29,117857,117858],{"className":31342,"code":102542,"language":31344,"meta":35,"style":35},[37,117859,117860],{"__ignoreMap":35},[51,117861,117862,117864],{"class":53,"line":54},[51,117863,31356],{"class":64},[51,117865,102265],{"class":72},[14,117867,117868],{"id":117868},"适合谁阅读",[40,117870,117871],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[19,117873,117874,117877,117880,117883],{},[22,117875,117876],{},"没学过 MuJoCo，只会一点 Python。",[22,117878,117879],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[22,117881,117882],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[22,117884,117885,117886,117888,117889,117891],{},"以前接触过 ",[37,117887,101976],{},"，现在想迁移到官方 ",[37,117890,101985],{}," Python bindings。",[40,117893,117894],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117896,117898],{"id":117897},"mujoco-到底是什么","MuJoCo 到底是什么",[40,117900,117901],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[29,117903,117906],{"className":117904,"code":117905,"language":34,"meta":35},[32],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[37,117907,117905],{"__ignoreMap":35},[40,117909,117910],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[19,117912,117913,117916,117919,117922],{},[22,117914,117915],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[22,117917,117918],{},"快速测试控制算法，不必一开始就上真实机器人。",[22,117920,117921],{},"生成强化学习环境。",[22,117923,117924],{},"采集状态、动作、图像、奖励等训练数据。",[14,117926,117927],{"id":117927},"学习前的心智模型",[40,117929,117930],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1393,117932,117933,117945],{},[1396,117934,117935],{},[1399,117936,117937,117940,117943],{},[1402,117938,117939],{"align":24699},"部分",[1402,117941,117942],{"align":24699},"负责什么",[1402,117944,22149],{"align":24699},[1439,117946,117947,117958,117970,117982,117994],{},[1399,117948,117949,117952,117955],{},[1444,117950,117951],{"align":24699},"MJCF XML",[1444,117953,117954],{"align":24699},"定义世界和机器人结构",[1444,117956,117957],{"align":24699},"地面、盒子、关节、电机、摄像头",[1399,117959,117960,117964,117967],{},[1444,117961,117962],{"align":24699},[37,117963,101673],{},[1444,117965,117966],{"align":24699},"编译后的静态模型",[1444,117968,117969],{"align":24699},"有几个关节、有几个电机、时间步长是多少",[1399,117971,117972,117976,117979],{},[1444,117973,117974],{"align":24699},[37,117975,101683],{},[1444,117977,117978],{"align":24699},"运行中的动态状态",[1444,117980,117981],{"align":24699},"当前时间、位置、速度、电机输入",[1399,117983,117984,117988,117991],{},[1444,117985,117986],{"align":24699},[37,117987,102179],{},[1444,117989,117990],{"align":24699},"推进一步物理仿真",[1444,117992,117993],{"align":24699},"根据重力、力、碰撞更新状态",[1399,117995,117996,117999,118002],{},[1444,117997,117998],{"align":24699},"Viewer \u002F Renderer",[1444,118000,118001],{"align":24699},"把仿真显示出来",[1444,118003,118004],{"align":24699},"打开窗口或保存图片",[40,118006,118007],{},"一句话总结：",[29,118009,118012],{"className":118010,"code":118011,"language":34,"meta":35},[32],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[37,118013,118011],{"__ignoreMap":35},[40,118015,118016],{},"参考来源：",[1000,118018,118019,118026,118033],{},[22,118020,118021,118022],{},"MuJoCo Python 官方文档：",[981,118023,118024],{"href":118024,"rel":118025},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24828],[22,118027,118028,118029],{},"MuJoCo XML Reference：",[981,118030,118031],{"href":118031,"rel":118032},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24828],[22,118034,118035,118036],{},"MuJoCo Overview：",[981,118037,118038],{"href":118038,"rel":118039},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24828],[14,118041,118042],{"id":118042},"章节目录",[19,118044,118045,118051,118057,118063,118069,118075,118081,118087],{},[22,118046,118047],{},[981,118048,118050],{"href":118049},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[22,118052,118053],{},[981,118054,118056],{"href":118055},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[22,118058,118059],{},[981,118060,118062],{"href":118061},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[22,118064,118065],{},[981,118066,118068],{"href":118067},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[22,118070,118071],{},[981,118072,118074],{"href":118073},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[22,118076,118077],{},[981,118078,118080],{"href":118079},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[22,118082,118083],{},[981,118084,118086],{"href":118085},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[22,118088,118089],{},[981,118090,118092],{"href":118091},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118094,118095],{"id":118095},"推荐学习路线",[29,118097,118100],{"className":118098,"code":118099,"language":34,"meta":35},[32],"环境安装\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",[37,118101,118099],{"__ignoreMap":35},[40,118103,118104],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118106,118107],{"id":118107},"建议的目录结构",[40,118109,118110],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[29,118112,118114],{"className":24785,"code":118113,"language":24787,"meta":35,"style":35},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[37,118115,118116,118124],{"__ignoreMap":35},[51,118117,118118,118120,118122],{"class":53,"line":54},[51,118119,102230],{"class":68},[51,118121,30180],{"class":175},[51,118123,102235],{"class":282},[51,118125,118126,118128],{"class":53,"line":61},[51,118127,102240],{"class":175},[51,118129,102235],{"class":282},[40,118131,118132],{},"每一章的代码都单独保存：",[29,118134,118137],{"className":118135,"code":118136,"language":34,"meta":35},[32],"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",[37,118138,118136],{"__ignoreMap":35},[40,118140,118141],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118143,118144],{"id":118144},"学习方法",[40,118146,118147],{},"每章建议按这个顺序操作：",[19,118149,118150,118153,118156,118159,118162,118165],{},[22,118151,118152],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[22,118154,118155],{},"复制最小可运行代码，保存成指定文件。",[22,118157,118158],{},"运行代码，确认没有报错。",[22,118160,118161],{},"对照“运行结果说明”理解输出。",[22,118163,118164],{},"做“验证步骤”，主动改一两个参数。",[22,118166,118167],{},"遇到报错先看“常见错误与解决方案”。",[40,118169,118170],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118172,118173],{"id":118173},"全局排错顺序",[40,118175,118176],{},"遇到问题时，按下面顺序查：",[19,118178,118179,118185,118191,118196,118199,118202,118209,118219],{},[22,118180,118181,118182],{},"Python 环境是否激活：",[37,118183,118184],{},"which python",[22,118186,118187,118188],{},"MuJoCo 是否能导入：",[37,118189,118190],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[22,118192,118193,118194],{},"是否误装了 ",[37,118195,101976],{},[22,118197,118198],{},"XML 标签是否闭合、属性是否拼写正确",[22,118200,118201],{},"actuator 引用的 joint 名字是否存在",[22,118203,118204,118206,118207],{},[37,118205,102040],{}," 的长度是否等于 ",[37,118208,103122],{},[22,118210,106549,118211,83503,118213,118215,118216],{},[37,118212,104994],{},[37,118214,105324],{}," 后是否调用了 ",[37,118217,118218],{},"mujoco.mj_forward",[22,118220,118221],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1179,118223,118224],{},"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":35,"searchDepth":61,"depth":61,"links":118226},[118227,118228,118229,118230,118231,118232,118233,118234],{"id":117868,"depth":61,"text":117868},{"id":117897,"depth":61,"text":117898},{"id":117927,"depth":61,"text":117927},{"id":118042,"depth":61,"text":118042},{"id":118095,"depth":61,"text":118095},{"id":118107,"depth":61,"text":118107},{"id":118144,"depth":61,"text":118144},{"id":118173,"depth":61,"text":118173},"仿真搭建。",{"category":24341},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117811,"description":118235},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118242,"title":118243,"body":118244,"description":24339,"extension":1190,"meta":118699,"navigation":1192,"path":118700,"seo":118701,"stem":118702,"__hash__":118703},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118245,"toc":118697},[118246,118249,118252,118258,118694],[10,118247,118243],{"id":118248},"_1-最常用的基本操作更新",[40,118250,118251],{},"装linux系统教程：",[40,118253,118254],{},[981,118255,118256],{"href":118256,"rel":118257},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24828],[29,118259,118263],{"className":118260,"code":118261,"language":118262,"meta":35,"style":35},"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",[37,118264,118265,118270,118275,118284,118289,118298,118303,118323,118328,118339,118344,118353,118358,118386,118391,118410,118415,118434,118438,118443,118459,118463,118468,118498,118502,118507,118523,118527,118532,118547,118551,118556,118572,118576,118581,118593,118605,118609,118614,118631,118635,118640,118658,118662,118667,118676,118680,118685],{"__ignoreMap":35},[51,118266,118267],{"class":53,"line":54},[51,118268,118269],{"class":57},"#更新相关的知识\n",[51,118271,118272],{"class":53,"line":61},[51,118273,118274],{"class":57},"# 更新软件包列表（从服务器获取最新软件信息）\n",[51,118276,118277,118279,118282],{"class":53,"line":93},[51,118278,25540],{"class":68},[51,118280,118281],{"class":282}," apt",[51,118283,27206],{"class":282},[51,118285,118286],{"class":53,"line":99},[51,118287,118288],{"class":57},"# 升级所有可更新的软件包（不删除旧包）\n",[51,118290,118291,118293,118295],{"class":53,"line":120},[51,118292,25540],{"class":68},[51,118294,118281],{"class":282},[51,118296,118297],{"class":282}," upgrade\n",[51,118299,118300],{"class":53,"line":129},[51,118301,118302],{"class":57},"#更新和升级软件包\n",[51,118304,118305,118307,118309,118312,118314,118316,118318,118321],{"class":53,"line":206},[51,118306,25540],{"class":68},[51,118308,118281],{"class":282},[51,118310,118311],{"class":282}," update",[51,118313,27154],{"class":72},[51,118315,25540],{"class":68},[51,118317,118281],{"class":282},[51,118319,118320],{"class":282}," upgrade",[51,118322,101945],{"class":175},[51,118324,118325],{"class":53,"line":212},[51,118326,118327],{"class":57},"#列出可更新的软件包及版本信息\n",[51,118329,118330,118333,118336],{"class":53,"line":227},[51,118331,118332],{"class":68},"apt",[51,118334,118335],{"class":282}," list",[51,118337,118338],{"class":175}," --upgradable\n",[51,118340,118341],{"class":53,"line":370},[51,118342,118343],{"class":57},"#彻底升级（处理依赖关系，可能删除旧包）\n",[51,118345,118346,118348,118350],{"class":53,"line":387},[51,118347,25540],{"class":68},[51,118349,118281],{"class":282},[51,118351,118352],{"class":282}," full-upgrade\n",[51,118354,118355],{"class":53,"line":404},[51,118356,118357],{"class":57},"#设置指定版本\n",[51,118359,118360,118362,118364,118366,118368,118371,118373,118375,118377,118379,118382,118384],{"class":53,"line":415},[51,118361,25540],{"class":68},[51,118363,118281],{"class":282},[51,118365,24797],{"class":282},[51,118367,29866],{"class":64},[51,118369,118370],{"class":282},"package_nam",[51,118372,1331],{"class":72},[51,118374,972],{"class":64},[51,118376,108],{"class":282},[51,118378,2154],{"class":64},[51,118380,118381],{"class":282},"version_numbe",[51,118383,1916],{"class":72},[51,118385,52271],{"class":64},[51,118387,118388],{"class":53,"line":420},[51,118389,118390],{"class":57},"#只安装软件包不升级\n",[51,118392,118393,118395,118397,118399,118401,118403,118405,118407],{"class":53,"line":429},[51,118394,25540],{"class":68},[51,118396,118281],{"class":282},[51,118398,24797],{"class":282},[51,118400,29866],{"class":64},[51,118402,118370],{"class":282},[51,118404,1331],{"class":72},[51,118406,972],{"class":64},[51,118408,118409],{"class":175}," --no-upgrade\n",[51,118411,118412],{"class":53,"line":434},[51,118413,118414],{"class":57},"#只升级，不存在就不安装\n",[51,118416,118417,118419,118421,118423,118425,118427,118429,118431],{"class":53,"line":448},[51,118418,25540],{"class":68},[51,118420,118281],{"class":282},[51,118422,24797],{"class":282},[51,118424,29866],{"class":64},[51,118426,118370],{"class":282},[51,118428,1331],{"class":72},[51,118430,972],{"class":64},[51,118432,118433],{"class":175}," --only-upgrade\n",[51,118435,118436],{"class":53,"line":462},[51,118437,3480],{"emptyLinePlaceholder":1192},[51,118439,118440],{"class":53,"line":470},[51,118441,118442],{"class":57},"#安装指定的软件命令\n",[51,118444,118445,118447,118449,118451,118453,118455,118457],{"class":53,"line":2783},[51,118446,25540],{"class":68},[51,118448,118281],{"class":282},[51,118450,24797],{"class":282},[51,118452,29866],{"class":64},[51,118454,118370],{"class":282},[51,118456,1331],{"class":72},[51,118458,52271],{"class":64},[51,118460,118461],{"class":53,"line":2788},[51,118462,3480],{"emptyLinePlaceholder":1192},[51,118464,118465],{"class":53,"line":2817},[51,118466,118467],{"class":57},"#安装多个软件包\n",[51,118469,118470,118472,118474,118476,118478,118481,118484,118486,118488,118491,118493,118495],{"class":53,"line":2822},[51,118471,25540],{"class":68},[51,118473,118281],{"class":282},[51,118475,24797],{"class":282},[51,118477,29866],{"class":64},[51,118479,118480],{"class":282},"package_",[51,118482,118483],{"class":64},"1>",[51,118485,29866],{"class":64},[51,118487,118480],{"class":282},[51,118489,118490],{"class":64},"2>",[51,118492,29866],{"class":64},[51,118494,118480],{"class":282},[51,118496,118497],{"class":64},"3>\n",[51,118499,118500],{"class":53,"line":2839},[51,118501,3480],{"emptyLinePlaceholder":1192},[51,118503,118504],{"class":53,"line":2844},[51,118505,118506],{"class":57},"#更新指定的软件命令\n",[51,118508,118509,118511,118513,118515,118517,118519,118521],{"class":53,"line":2849},[51,118510,25540],{"class":68},[51,118512,118281],{"class":282},[51,118514,118311],{"class":282},[51,118516,29866],{"class":64},[51,118518,118370],{"class":282},[51,118520,1331],{"class":72},[51,118522,52271],{"class":64},[51,118524,118525],{"class":53,"line":2854},[51,118526,3480],{"emptyLinePlaceholder":1192},[51,118528,118529],{"class":53,"line":2868},[51,118530,118531],{"class":57},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[51,118533,118534,118536,118539,118541,118543,118545],{"class":53,"line":2873},[51,118535,118332],{"class":68},[51,118537,118538],{"class":282}," show",[51,118540,29866],{"class":64},[51,118542,118370],{"class":282},[51,118544,1331],{"class":72},[51,118546,52271],{"class":64},[51,118548,118549],{"class":53,"line":3657},[51,118550,3480],{"emptyLinePlaceholder":1192},[51,118552,118553],{"class":53,"line":3671},[51,118554,118555],{"class":57},"#删除软件包命令\n",[51,118557,118558,118560,118562,118564,118566,118568,118570],{"class":53,"line":3679},[51,118559,25540],{"class":68},[51,118561,118281],{"class":282},[51,118563,27043],{"class":282},[51,118565,29866],{"class":64},[51,118567,118370],{"class":282},[51,118569,1331],{"class":72},[51,118571,52271],{"class":64},[51,118573,118574],{"class":53,"line":3684},[51,118575,3480],{"emptyLinePlaceholder":1192},[51,118577,118578],{"class":53,"line":3690},[51,118579,118580],{"class":57},"# 清理旧版本和缓存（释放磁盘空间）\n",[51,118582,118583,118585,118587,118590],{"class":53,"line":3696},[51,118584,25540],{"class":68},[51,118586,118281],{"class":282},[51,118588,118589],{"class":282}," autoremove",[51,118591,118592],{"class":57},"  # 删除不再需要的依赖和库文件\n",[51,118594,118595,118597,118599,118602],{"class":53,"line":3701},[51,118596,25540],{"class":68},[51,118598,118281],{"class":282},[51,118600,118601],{"class":282}," clean",[51,118603,118604],{"class":57},"       # 清理下载的缓存包\n",[51,118606,118607],{"class":53,"line":8910},[51,118608,3480],{"emptyLinePlaceholder":1192},[51,118610,118611],{"class":53,"line":8934},[51,118612,118613],{"class":57},"#移除软件包及配置文件\n",[51,118615,118616,118618,118620,118623,118625,118627,118629],{"class":53,"line":8939},[51,118617,25540],{"class":68},[51,118619,118281],{"class":282},[51,118621,118622],{"class":282}," purge",[51,118624,29866],{"class":64},[51,118626,118370],{"class":282},[51,118628,1331],{"class":72},[51,118630,52271],{"class":64},[51,118632,118633],{"class":53,"line":8945},[51,118634,3480],{"emptyLinePlaceholder":1192},[51,118636,118637],{"class":53,"line":8972},[51,118638,118639],{"class":57},"#查找软件包命令\n",[51,118641,118642,118644,118646,118649,118651,118654,118656],{"class":53,"line":8977},[51,118643,25540],{"class":68},[51,118645,118281],{"class":282},[51,118647,118648],{"class":282}," search",[51,118650,29866],{"class":64},[51,118652,118653],{"class":282},"keywor",[51,118655,1563],{"class":72},[51,118657,52271],{"class":64},[51,118659,118660],{"class":53,"line":8983},[51,118661,3480],{"emptyLinePlaceholder":1192},[51,118663,118664],{"class":53,"line":8995},[51,118665,118666],{"class":57},"#列出所有已安装的包\n",[51,118668,118669,118671,118673],{"class":53,"line":9007},[51,118670,118332],{"class":68},[51,118672,118335],{"class":282},[51,118674,118675],{"class":175}," --installed\n",[51,118677,118678],{"class":53,"line":9019},[51,118679,3480],{"emptyLinePlaceholder":1192},[51,118681,118682],{"class":53,"line":10678},[51,118683,118684],{"class":57},"#列出所有已安装的包的版本信息\n",[51,118686,118687,118689,118691],{"class":53,"line":10703},[51,118688,118332],{"class":68},[51,118690,118335],{"class":282},[51,118692,118693],{"class":175}," --all-versions\n",[1179,118695,118696],{},"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":35,"searchDepth":61,"depth":61,"links":118698},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118243,"description":24339},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118705,"title":118706,"body":118707,"description":24339,"extension":1190,"meta":119448,"navigation":1192,"path":119449,"seo":119450,"stem":119451,"__hash__":119452},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118708,"toc":119435},[118709,118712,118716,118719,118725,118729,118733,118739,118744,118749,118754,118759,118764,118767,118770,118773,118776,118780,118783,118788,118791,118796,118799,118804,118811,118814,118817,118820,118823,118826,118837,118841,118845,118850,118855,118859,118864,118868,118873,118877,118881,118886,118889,118934,118939,118943,118947,118952,118958,118963,118973,118978,118988,118993,118998,119025,119029,119032,119037,119040,119065,119069,119074,119077,119082,119087,119107,119112,119115,119130,119134,119187,119190,119195,119199,119202,119217,119220,119223,119228,119232,119236,119239,119243,119247,119250,119255,119260,119264,119271,119279,119282,119289,119294,119299,119302,119307,119314,119319,119326,119330,119332,119337,119341,119344,119347,119352,119355,119360,119363,119368,119373,119378,119382,119387,119391,119432],[10,118710,118706],{"id":118711},"_2-linux装机教程",[14,118713,118715],{"id":118714},"_21-实体机","2.1 实体机",[40,118717,118718],{},"使用清华源：（Ubuntu24.04）",[40,118720,118721],{},[981,118722,118723],{"href":118723,"rel":118724},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24828],[14,118726,118728],{"id":118727},"_22-普通虚拟机","2.2 普通虚拟机",[1233,118730,118732],{"id":118731},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[40,118734,118735],{},[981,118736,118737],{"href":118737,"rel":118738},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24828],[40,118740,118741],{},[2564,118742],{"alt":35,"src":118743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[40,118745,118746],{},[2564,118747],{"alt":35,"src":118748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[40,118750,118751],{},[2564,118752],{"alt":35,"src":118753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[40,118755,118756],{},[2564,118757],{"alt":35,"src":118758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[40,118760,118761],{},[2564,118762],{"alt":35,"src":118763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[40,118765,118766],{},"内存4G（4096MB）；",[40,118768,118769],{},"CPU给4个核；",[40,118771,118772],{},"硬盘动态分配60G；",[40,118774,118775],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[1233,118777,118779],{"id":118778},"_222-安装ubuntu","2.2.2 安装Ubuntu",[40,118781,118782],{},"按照1.1的步骤下载Ubuntu",[40,118784,118785],{},[2564,118786],{"alt":35,"src":118787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[40,118789,118790],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[40,118792,118793],{},[2564,118794],{"alt":35,"src":118795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[40,118797,118798],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[40,118800,118801],{},[2564,118802],{"alt":35,"src":118803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[40,118805,118806,118807,118810],{},"选择“正常安装”(找不到都用Alt+F7)， ",[840,118808,118809],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[40,118812,118813],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[40,118815,118816],{},"将改动写入磁盘吗 继续",[40,118818,118819],{},"选择东八区（shanghai，大致在地图上点一下），继续",[40,118821,118822],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[40,118824,118825],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[40,118827,118828,118829,118832,118833,118836],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[840,118830,118831],{},"除了"," 选不发送系统信息与不升级之外， ",[840,118834,118835],{},"其它"," 都跳过或前进）",[1233,118838,118840],{"id":118839},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22960,118842,118844],{"id":118843},"_2231-全屏","2.2.3.1 全屏",[40,118846,118847],{},[2564,118848],{"alt":35,"src":118849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[40,118851,118852],{},[2564,118853],{"alt":35,"src":118854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22960,118856,118858],{"id":118857},"_2232-文件交换","2.2.3.2 文件交换",[40,118860,118861],{},[2564,118862],{"alt":35,"src":118863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22960,118865,118867],{"id":118866},"_2233-新建文本文档","2.2.3.3 新建文本文档",[40,118869,118870],{},[2564,118871],{"alt":35,"src":118872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118874,118876],{"id":118875},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[1233,118878,118880],{"id":118879},"_231-简介与优缺点","2.3.1 简介与优缺点",[19,118882,118883],{},[22,118884,118885],{},"什么情况下推荐？",[40,118887,118888],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[19,118890,118891],{"start":61},[22,118892,118893,118894],{},"优缺点：",[19,118895,118896,118926],{},[22,118897,118898,118899],{},"优点：",[19,118900,118901,118904,118911,118914,118917,118920,118923],{},[22,118902,118903],{},"WSL2是最好的Linux发行版;(bushi)",[22,118905,118906,118907,118910],{},"性能损耗极低。且比在Windows上跑深度性能 ",[840,118908,118909],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[22,118912,118913],{},"非常方便调用USB设备，可以USB直通;",[22,118915,118916],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[22,118918,118919],{},"非常方便Win与WSL2互相传文件等协同操作;",[22,118921,118922],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[22,118924,118925],{},"非常方便使用Windows的VScode远程开发;",[22,118927,118928,118929],{},"缺点：",[19,118930,118931],{},[22,118932,118933],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[40,118935,118936],{},[2564,118937],{"alt":35,"src":118938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[1233,118940,118942],{"id":118941},"_232-安装教程","2.3.2 安装教程",[22960,118944,118946],{"id":118945},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[19,118948,118949],{},[22,118950,118951],{},"方法一(图形界面)",[40,118953,118954,118955,25582],{},"用Win+R输入",[37,118956,118957],{},"appwiz.cpl",[40,118959,118960],{},[2564,118961],{"alt":35,"src":118962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[40,118964,118965,118966,118969,118970,27437],{},"点击OK进入 ",[840,118967,118968],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[840,118971,118972],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[40,118974,118975],{},[2564,118976],{"alt":35,"src":118977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[40,118979,118980,118981,101982,118984,118987],{},"选择 ",[840,118982,118983],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[840,118985,118986],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[40,118989,118990],{},[2564,118991],{"alt":35,"src":118992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[19,118994,118995],{"start":61},[22,118996,118997],{},"方法二(命令行)",[29,118999,119003],{"className":119000,"code":119001,"language":119002,"meta":35,"style":35},"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",[37,119004,119005,119010,119015,119020],{"__ignoreMap":35},[51,119006,119007],{"class":53,"line":54},[51,119008,119009],{},"# 开启 Linux 子系统\n",[51,119011,119012],{"class":53,"line":61},[51,119013,119014],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[51,119016,119017],{"class":53,"line":93},[51,119018,119019],{},"# 开启虚拟机平台\n",[51,119021,119022],{"class":53,"line":99},[51,119023,119024],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22960,119026,119028],{"id":119027},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[40,119030,119031],{},"用管理员权限打开powershell",[40,119033,119034],{},[2564,119035],{"alt":35,"src":119036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[40,119038,119039],{},"升级WSL并设置默认版本为WSL2",[29,119041,119043],{"className":119000,"code":119042,"language":119002,"meta":35,"style":35},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[37,119044,119045,119050,119055,119060],{"__ignoreMap":35},[51,119046,119047],{"class":53,"line":54},[51,119048,119049],{},"# 更新 wsl\n",[51,119051,119052],{"class":53,"line":61},[51,119053,119054],{},"wsl --update\n",[51,119056,119057],{"class":53,"line":93},[51,119058,119059],{},"# 将 wsl 版本设置为 wsl2\n",[51,119061,119062],{"class":53,"line":99},[51,119063,119064],{},"wsl --set-default-version 2\n",[22960,119066,119068],{"id":119067},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[19,119070,119071],{},[22,119072,119073],{},"方式一(商店下载)",[40,119075,119076],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[40,119078,119079],{},[2564,119080],{"alt":35,"src":119081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[19,119083,119084],{"start":61},[22,119085,119086],{},"方式二(命令行安装)",[29,119088,119090],{"className":119000,"code":119089,"language":119002,"meta":35,"style":35},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[37,119091,119092,119097,119102],{"__ignoreMap":35},[51,119093,119094],{"class":53,"line":54},[51,119095,119096],{},"# 列出可安装的 Linux 版本\n",[51,119098,119099],{"class":53,"line":61},[51,119100,119101],{},"#（需要科学手段）\n",[51,119103,119104],{"class":53,"line":93},[51,119105,119106],{},"wsl --list --online\n",[40,119108,119109],{},[2564,119110],{"alt":35,"src":119111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[40,119113,119114],{},"选择对应发行版并安装",[29,119116,119118],{"className":119000,"code":119117,"language":119002,"meta":35,"style":35},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[37,119119,119120,119125],{"__ignoreMap":35},[51,119121,119122],{"class":53,"line":54},[51,119123,119124],{},"# Ubuntu安装完毕后需要重启系统\n",[51,119126,119127],{"class":53,"line":61},[51,119128,119129],{},"wsl --install -d Ubuntu-24.04\n",[22960,119131,119133],{"id":119132},"_2324-查看系统状态","2.3.2.4 查看系统状态",[29,119135,119137],{"className":119000,"code":119136,"language":119002,"meta":35,"style":35},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[37,119138,119139,119144,119149,119154,119159,119163,119167,119172,119177,119182],{"__ignoreMap":35},[51,119140,119141],{"class":53,"line":54},[51,119142,119143],{},"# 查看 wsl\n",[51,119145,119146],{"class":53,"line":61},[51,119147,119148],{},"wsl -l\n",[51,119150,119151],{"class":53,"line":93},[51,119152,119153],{},"# 查看 wsl 运行版本或模式\n",[51,119155,119156],{"class":53,"line":99},[51,119157,119158],{},"wsl -l -v\n",[51,119160,119161],{"class":53,"line":120},[51,119162,3480],{"emptyLinePlaceholder":1192},[51,119164,119165],{"class":53,"line":129},[51,119166,3480],{"emptyLinePlaceholder":1192},[51,119168,119169],{"class":53,"line":206},[51,119170,119171],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[51,119173,119174],{"class":53,"line":212},[51,119175,119176],{},"wsl --set-version \u003Cdistro> 2\n",[51,119178,119179],{"class":53,"line":227},[51,119180,119181],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[51,119183,119184],{"class":53,"line":370},[51,119185,119186],{},"wsl --unregister \u003Cdistro>\n",[40,119188,119189],{},"输出Version为2即正常",[40,119191,119192],{},[2564,119193],{"alt":35,"src":119194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22960,119196,119198],{"id":119197},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[40,119200,119201],{},"直接在Powershell里输入wsl命令进入子系统",[29,119203,119205],{"className":119000,"code":119204,"language":119002,"meta":35,"style":35},"# 进入子系统\nwsl\n",[37,119206,119207,119212],{"__ignoreMap":35},[51,119208,119209],{"class":53,"line":54},[51,119210,119211],{},"# 进入子系统\n",[51,119213,119214],{"class":53,"line":61},[51,119215,119216],{},"wsl\n",[40,119218,119219],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[40,119221,119222],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[40,119224,119225],{},[2564,119226],{"alt":35,"src":119227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[1233,119229,119231],{"id":119230},"_233-配置各种环境","2.3.3 配置各种环境",[22960,119233,119235],{"id":119234},"_2331-换源","2.3.3.1 换源",[40,119237,119238],{},"(同实体机LINUX，往下找教程)",[22960,119240,119242],{"id":119241},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23872,119244,119246],{"id":119245},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[40,119248,119249],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[40,119251,119252],{},[2564,119253],{"alt":35,"src":119254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[40,119256,119257],{},[2564,119258],{"alt":35,"src":119259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23872,119261,119263],{"id":119262},"_23322-cuda","2.3.3.2.2 CUDA",[40,119265,119266,119267],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[981,119268,119269],{"href":119269,"rel":119270},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24828],[40,119272,119273,119276],{},[2564,119274],{"alt":35,"src":119275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[2564,119277],{"alt":35,"src":119278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[40,119280,119281],{},"在下方的网站，选择合适的版本。",[40,119283,119284,119285],{},"WSL2 专属 CUDA 指南：",[981,119286,119287],{"href":119287,"rel":119288},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24828],[40,119290,119291],{},[840,119292,119293],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[40,119295,119296],{},[2564,119297],{"alt":35,"src":119298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[40,119300,119301],{},"挨行敲一遍",[40,119303,119304],{},[2564,119305],{"alt":35,"src":119306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[40,119308,119309,119310,119313],{},"敲完后，输入",[37,119311,119312],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[40,119315,119316],{},[2564,119317],{"alt":35,"src":119318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[40,119320,119321,119322,119325],{},"（请详看下方教程的",[840,119323,119324],{},"安装CUDA的配置环境来看","如何配置环境）",[23872,119327,119329],{"id":119328},"_23323-cudnn","2.3.3.2.3 cuDNN",[40,119331,119238],{},[40,119333,119334],{},[2564,119335],{"alt":35,"src":119336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22960,119338,119340],{"id":119339},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[40,119342,119343],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[40,119345,119346],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[40,119348,119349],{},[2564,119350],{"alt":35,"src":119351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[40,119353,119354],{},"连接WSL2",[40,119356,119357],{},[2564,119358],{"alt":35,"src":119359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[40,119361,119362],{},"远程开发成功。",[40,119364,119365],{},[2564,119366],{"alt":35,"src":119367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[40,119369,119370],{},[2564,119371],{"alt":35,"src":119372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[40,119374,119375],{},[2564,119376],{"alt":35,"src":119377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22960,119379,119381],{"id":119380},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[40,119383,119384],{},[2564,119385],{"alt":35,"src":119386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22960,119388,119390],{"id":119389},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[29,119392,119394],{"className":118260,"code":119393,"language":118262,"meta":35,"style":35},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[37,119395,119396,119404,119412,119423,119427],{"__ignoreMap":35},[51,119397,119398,119400,119402],{"class":53,"line":54},[51,119399,25540],{"class":68},[51,119401,118281],{"class":282},[51,119403,27206],{"class":282},[51,119405,119406,119408,119410],{"class":53,"line":61},[51,119407,25540],{"class":68},[51,119409,118281],{"class":282},[51,119411,118297],{"class":282},[51,119413,119414,119416,119418,119420],{"class":53,"line":93},[51,119415,25540],{"class":68},[51,119417,118281],{"class":282},[51,119419,24797],{"class":282},[51,119421,119422],{"class":282}," mesa-utils\n",[51,119424,119425],{"class":53,"line":99},[51,119426,3480],{"emptyLinePlaceholder":1192},[51,119428,119429],{"class":53,"line":120},[51,119430,119431],{"class":57},"#然后重启wsl2即可\n",[1179,119433,119434],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":35,"searchDepth":61,"depth":61,"links":119436},[119437,119438,119443],{"id":118714,"depth":61,"text":118715},{"id":118727,"depth":61,"text":118728,"children":119439},[119440,119441,119442],{"id":118731,"depth":93,"text":118732},{"id":118778,"depth":93,"text":118779},{"id":118839,"depth":93,"text":118840},{"id":118875,"depth":61,"text":118876,"children":119444},[119445,119446,119447],{"id":118879,"depth":93,"text":118880},{"id":118941,"depth":93,"text":118942},{"id":119230,"depth":93,"text":119231},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118706,"description":24339},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119454,"title":119455,"body":119456,"description":24339,"extension":1190,"meta":122392,"navigation":1192,"path":122393,"seo":122394,"stem":122395,"__hash__":122396},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119457,"toc":122364},[119458,119461,119465,119471,119475,119481,119485,119673,119676,119681,119685,119689,119692,119695,119701,119706,119709,119712,119717,119750,119755,119759,119836,119839,119844,119848,119851,119890,119893,119902,119920,119925,119932,120049,120054,120057,120084,120089,120093,120102,120152,120159,120163,120166,120180,120187,120221,120226,120230,120253,120256,120261,120265,120268,120271,120274,120316,120320,120323,120326,120367,120371,120375,120378,120383,120388,120391,120414,120417,120425,120430,120433,120438,120443,120446,120451,120455,120460,120483,120488,120550,120558,120563,120568,120571,120576,120579,120584,120589,120607,120612,120618,120623,120637,120641,120644,120647,120650,120693,120696,120701,120802,120805,120810,120814,120818,120855,120859,120863,120867,120913,120917,120962,120966,120973,120981,121036,121039,121116,121119,121142,121146,121149,121154,121159,121167,121170,121175,121180,121185,121188,121193,121202,121205,121210,121213,121284,121289,121292,121297,121300,121305,121308,121313,121316,121321,121326,121329,121404,121407,121420,121425,121428,121442,121445,121474,121479,121508,121511,121516,121520,121525,121534,121537,121542,121545,121550,121553,121556,121561,121564,121569,121574,121577,121582,121585,121710,121715,121745,121748,121753,121758,121775,121778,121821,121824,121851,121856,121869,122012,122016,122021,122035,122038,122089,122092,122122,122125,122141,122146,122160,122163,122230,122235,122244,122249,122252,122264,122269,122276,122300,122303,122308,122311,122330,122335,122342,122354,122361],[10,119459,119455],{"id":119460},"_3-安装必备配置",[14,119462,119464],{"id":119463},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[29,119466,119469],{"className":119467,"code":119468,"language":34},[32],"  打开下方网站（注意，该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",[37,119470,119468],{"__ignoreMap":35},[1233,119472,119474],{"id":119473},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[29,119476,119479],{"className":119477,"code":119478,"language":34},[32],"  输入以下命令\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",[37,119480,119478],{"__ignoreMap":35},[1233,119482,119484],{"id":119483},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[29,119486,119490],{"className":119487,"code":119488,"language":119489,"meta":35,"style":35},"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",[37,119491,119492,119500,119511,119523,119537,119541,119551,119556,119560,119564,119569,119573,119585,119589,119594,119598,119609,119613,119629,119633,119644,119648,119653,119657,119665],{"__ignoreMap":35},[51,119493,119494,119496,119498],{"class":53,"line":54},[51,119495,25540],{"class":68},[51,119497,118281],{"class":282},[51,119499,27206],{"class":282},[51,119501,119502,119504,119506,119508],{"class":53,"line":61},[51,119503,25540],{"class":68},[51,119505,118281],{"class":282},[51,119507,24797],{"class":282},[51,119509,119510],{"class":282}," vim\n",[51,119512,119513,119515,119518,119520],{"class":53,"line":93},[51,119514,25540],{"class":68},[51,119516,119517],{"class":282}," rm",[51,119519,26289],{"class":175},[51,119521,119522],{"class":282}," \u002Fetc\u002Fapt\u002Fsources.list\n",[51,119524,119525,119527,119529,119531,119534],{"class":53,"line":99},[51,119526,25540],{"class":68},[51,119528,119517],{"class":282},[51,119530,26289],{"class":175},[51,119532,119533],{"class":282}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[51,119535,119536],{"class":175},"**\n",[51,119538,119539],{"class":53,"line":120},[51,119540,3480],{"emptyLinePlaceholder":1192},[51,119542,119543,119545,119548],{"class":53,"line":129},[51,119544,25540],{"class":68},[51,119546,119547],{"class":282}," vim",[51,119549,119550],{"class":282}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[51,119552,119553],{"class":53,"line":206},[51,119554,119555],{"class":282},"```\n",[51,119557,119558],{"class":53,"line":212},[51,119559,3480],{"emptyLinePlaceholder":1192},[51,119561,119562],{"class":53,"line":227},[51,119563,3480],{"emptyLinePlaceholder":1192},[51,119565,119566],{"class":53,"line":370},[51,119567,119568],{"class":68},"选择好Ubuntu版本后，复制下方的内容。\n",[51,119570,119571],{"class":53,"line":387},[51,119572,3480],{"emptyLinePlaceholder":1192},[51,119574,119575,119577,119580,119583],{"class":53,"line":404},[51,119576,1479],{"class":64},[51,119578,119579],{"class":282},"[](",[51,119581,119582],{"class":68},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[51,119584,90],{"class":282},[51,119586,119587],{"class":53,"line":415},[51,119588,3480],{"emptyLinePlaceholder":1192},[51,119590,119591],{"class":53,"line":420},[51,119592,119593],{"class":68},"粘贴进去\n",[51,119595,119596],{"class":53,"line":429},[51,119597,3480],{"emptyLinePlaceholder":1192},[51,119599,119600,119602,119604,119607],{"class":53,"line":434},[51,119601,1479],{"class":64},[51,119603,119579],{"class":282},[51,119605,119606],{"class":68},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[51,119608,90],{"class":282},[51,119610,119611],{"class":53,"line":448},[51,119612,3480],{"emptyLinePlaceholder":1192},[51,119614,119615,119618,119621,119624,119626],{"class":53,"line":462},[51,119616,119617],{"class":68},"按一下ESC，然后英文冒号，输入",[51,119619,119620],{"class":282}," `",[51,119622,119623],{"class":68},":wq!",[51,119625,2215],{"class":282},[51,119627,119628],{"class":68},"然后回车\n",[51,119630,119631],{"class":53,"line":470},[51,119632,3480],{"emptyLinePlaceholder":1192},[51,119634,119635,119637,119639,119642],{"class":53,"line":2783},[51,119636,1479],{"class":64},[51,119638,119579],{"class":282},[51,119640,119641],{"class":68},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[51,119643,90],{"class":282},[51,119645,119646],{"class":53,"line":2788},[51,119647,3480],{"emptyLinePlaceholder":1192},[51,119649,119650],{"class":53,"line":2817},[51,119651,119652],{"class":68},"输入以下命令\n",[51,119654,119655],{"class":53,"line":2822},[51,119656,3480],{"emptyLinePlaceholder":1192},[51,119658,119659,119662],{"class":53,"line":2839},[51,119660,119661],{"class":282},"```",[51,119663,119664],{"class":68},"Bash\n",[51,119666,119667,119669,119671],{"class":53,"line":2844},[51,119668,25540],{"class":68},[51,119670,118281],{"class":282},[51,119672,27206],{"class":282},[40,119674,119675],{},"这里被替换成对应学校则成功",[40,119677,119678],{},[2564,119679],{"alt":35,"src":119680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119682,119684],{"id":119683},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[1233,119686,119688],{"id":119687},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[40,119690,119691],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[40,119693,119694],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[40,119696,119697],{},[981,119698,119699],{"href":119699,"rel":119700},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24828],[40,119702,119703],{},[2564,119704],{"alt":35,"src":119705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[40,119707,119708],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[40,119710,119711],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[40,119713,119714],{},[2564,119715],{"alt":35,"src":119716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[29,119718,119720],{"className":118260,"code":119719,"language":118262,"meta":35,"style":35},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[37,119721,119722,119727,119734,119739],{"__ignoreMap":35},[51,119723,119724],{"class":53,"line":54},[51,119725,119726],{"class":57},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[51,119728,119729,119731],{"class":53,"line":61},[51,119730,102240],{"class":175},[51,119732,119733],{"class":282}," ~\u002FDownloads\n",[51,119735,119736],{"class":53,"line":93},[51,119737,119738],{"class":57},"#下方chrome安装包名不一定是这个，根据名字来看\n",[51,119740,119741,119743,119745,119747],{"class":53,"line":99},[51,119742,25540],{"class":68},[51,119744,118281],{"class":282},[51,119746,24797],{"class":282},[51,119748,119749],{"class":282}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[40,119751,119752],{},[2564,119753],{"alt":35,"src":119754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[1233,119756,119758],{"id":119757},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[29,119760,119762],{"className":118260,"code":119761,"language":118262,"meta":35,"style":35},"# 老版\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",[37,119763,119764,119769,119777,119788,119793,119797,119802,119812,119820,119831],{"__ignoreMap":35},[51,119765,119766],{"class":53,"line":54},[51,119767,119768],{"class":57},"# 老版\n",[51,119770,119771,119773,119775],{"class":53,"line":61},[51,119772,25540],{"class":68},[51,119774,118281],{"class":282},[51,119776,27206],{"class":282},[51,119778,119779,119781,119783,119785],{"class":53,"line":93},[51,119780,25540],{"class":68},[51,119782,118281],{"class":282},[51,119784,24797],{"class":282},[51,119786,119787],{"class":282}," neofetch\n",[51,119789,119790],{"class":53,"line":99},[51,119791,119792],{"class":68},"neofetch\n",[51,119794,119795],{"class":53,"line":120},[51,119796,3480],{"emptyLinePlaceholder":1192},[51,119798,119799],{"class":53,"line":129},[51,119800,119801],{"class":57},"# 新版\n",[51,119803,119804,119806,119809],{"class":53,"line":206},[51,119805,25540],{"class":68},[51,119807,119808],{"class":282}," add-apt-repository",[51,119810,119811],{"class":282}," ppa:zhangsongcui3371\u002Ffastfetch\n",[51,119813,119814,119816,119818],{"class":53,"line":212},[51,119815,25540],{"class":68},[51,119817,118281],{"class":282},[51,119819,27206],{"class":282},[51,119821,119822,119824,119826,119828],{"class":53,"line":227},[51,119823,25540],{"class":68},[51,119825,118281],{"class":282},[51,119827,24797],{"class":282},[51,119829,119830],{"class":282}," fastfetch\n",[51,119832,119833],{"class":53,"line":370},[51,119834,119835],{"class":68},"fastfetch\n",[40,119837,119838],{},"这里显示，一共有3162个debian的程序，7个snap程序",[40,119840,119841],{},[2564,119842],{"alt":35,"src":119843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[1233,119845,119847],{"id":119846},"_323-移除snap应用","3.2.3 移除snap应用",[40,119849,119850],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[29,119852,119854],{"className":118260,"code":119853,"language":118262,"meta":35,"style":35},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[37,119855,119856,119868,119879],{"__ignoreMap":35},[51,119857,119858,119860,119862,119865],{"class":53,"line":54},[51,119859,25540],{"class":68},[51,119861,27477],{"class":282},[51,119863,119864],{"class":282}," disable",[51,119866,119867],{"class":282}," snapd.service\n",[51,119869,119870,119872,119874,119876],{"class":53,"line":61},[51,119871,25540],{"class":68},[51,119873,27477],{"class":282},[51,119875,119864],{"class":282},[51,119877,119878],{"class":282}," snapd.socket\n",[51,119880,119881,119883,119885,119887],{"class":53,"line":93},[51,119882,25540],{"class":68},[51,119884,27477],{"class":282},[51,119886,119864],{"class":282},[51,119888,119889],{"class":282}," snapd.seeded.service\n",[40,119891,119892],{},"然后查看snap应用列表",[40,119894,119895,119896,119901],{},"根据你安装的选择不同（最小安装或普通安装），有",[981,119897,119900],{"href":119898,"rel":119899},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24828],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[29,119903,119905],{"className":118260,"code":119904,"language":118262,"meta":35,"style":35},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[37,119906,119907,119912],{"__ignoreMap":35},[51,119908,119909],{"class":53,"line":54},[51,119910,119911],{"class":57},"# 查询当前系统上snap安装了哪些app\n",[51,119913,119914,119917],{"class":53,"line":61},[51,119915,119916],{"class":68},"snap",[51,119918,119919],{"class":282}," list\n",[40,119921,119922],{},[2564,119923],{"alt":35,"src":119924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[40,119926,119927,119928,119931],{},"卸载掉图中所有应用，按照 ",[840,119929,119930],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[29,119933,119935],{"className":118260,"code":119934,"language":118262,"meta":35,"style":35},"#移除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",[37,119936,119937,119942,119954,119959,119970,119975,119986,119991,120002,120007,120011,120016,120027,120038],{"__ignoreMap":35},[51,119938,119939],{"class":53,"line":54},[51,119940,119941],{"class":57},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[51,119943,119944,119946,119949,119951],{"class":53,"line":61},[51,119945,25540],{"class":68},[51,119947,119948],{"class":282}," snap",[51,119950,27043],{"class":282},[51,119952,119953],{"class":282}," snap-store\n",[51,119955,119956],{"class":53,"line":93},[51,119957,119958],{"class":57},"#移除firefox浏览器\n",[51,119960,119961,119963,119965,119967],{"class":53,"line":99},[51,119962,25540],{"class":68},[51,119964,119948],{"class":282},[51,119966,27043],{"class":282},[51,119968,119969],{"class":282}," firefox\n",[51,119971,119972],{"class":53,"line":120},[51,119973,119974],{"class":57},"#移除gnome-42-2204\n",[51,119976,119977,119979,119981,119983],{"class":53,"line":129},[51,119978,25540],{"class":68},[51,119980,119948],{"class":282},[51,119982,27043],{"class":282},[51,119984,119985],{"class":282}," gnome-42-2204\n",[51,119987,119988],{"class":53,"line":206},[51,119989,119990],{"class":57},"#移除gtk-common-themes\n",[51,119992,119993,119995,119997,119999],{"class":53,"line":212},[51,119994,25540],{"class":68},[51,119996,119948],{"class":282},[51,119998,27043],{"class":282},[51,120000,120001],{"class":282}," gtk-common-themes\n",[51,120003,120004],{"class":53,"line":227},[51,120005,120006],{"class":57},"#移除其它...\n",[51,120008,120009],{"class":53,"line":370},[51,120010,3754],{"class":72},[51,120012,120013],{"class":53,"line":387},[51,120014,120015],{"class":57},"#移除core22,bare以及snapd\n",[51,120017,120018,120020,120022,120024],{"class":53,"line":404},[51,120019,25540],{"class":68},[51,120021,119948],{"class":282},[51,120023,27043],{"class":282},[51,120025,120026],{"class":282}," core22\n",[51,120028,120029,120031,120033,120035],{"class":53,"line":415},[51,120030,25540],{"class":68},[51,120032,119948],{"class":282},[51,120034,27043],{"class":282},[51,120036,120037],{"class":282}," bare\n",[51,120039,120040,120042,120044,120046],{"class":53,"line":420},[51,120041,25540],{"class":68},[51,120043,119948],{"class":282},[51,120045,27043],{"class":282},[51,120047,120048],{"class":282}," snapd\n",[40,120050,120051],{},[2564,120052],{"alt":35,"src":120053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[40,120055,120056],{},"输入以下命令查看是否还有snap包",[29,120058,120060],{"className":118260,"code":120059,"language":118262,"meta":35,"style":35},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[37,120061,120062,120068,120072,120076,120080],{"__ignoreMap":35},[51,120063,120064,120066],{"class":53,"line":54},[51,120065,119916],{"class":68},[51,120067,119919],{"class":282},[51,120069,120070],{"class":53,"line":61},[51,120071,119768],{"class":57},[51,120073,120074],{"class":53,"line":93},[51,120075,119792],{"class":68},[51,120077,120078],{"class":53,"line":99},[51,120079,119801],{"class":57},[51,120081,120082],{"class":53,"line":120},[51,120083,119835],{"class":68},[40,120085,120086],{},[2564,120087],{"alt":35,"src":120088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[1233,120090,120092],{"id":120091},"_324-移除snap","3.2.4 移除snap",[40,120094,120095,120096,120101],{},"在删除掉",[981,120097,120100],{"href":120098,"rel":120099},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24828],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[29,120103,120105],{"className":118260,"code":120104,"language":118262,"meta":35,"style":35}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[37,120106,120107,120112,120125,120130,120141],{"__ignoreMap":35},[51,120108,120109],{"class":53,"line":54},[51,120110,120111],{"class":57}," #使用apt移除掉snap\n",[51,120113,120114,120116,120118,120120,120123],{"class":53,"line":61},[51,120115,25540],{"class":68},[51,120117,118281],{"class":282},[51,120119,118589],{"class":282},[51,120121,120122],{"class":175}," --purge",[51,120124,120048],{"class":282},[51,120126,120127],{"class":53,"line":93},[51,120128,120129],{"class":57},"#移除snapd的一些目录\n",[51,120131,120132,120134,120136,120138],{"class":53,"line":99},[51,120133,25540],{"class":68},[51,120135,119517],{"class":282},[51,120137,26289],{"class":175},[51,120139,120140],{"class":282}," \u002Fvar\u002Fcache\u002Fsnapd\n",[51,120142,120143,120145,120147,120149],{"class":53,"line":120},[51,120144,25540],{"class":68},[51,120146,119517],{"class":282},[51,120148,26289],{"class":175},[51,120150,120151],{"class":282}," ~\u002Fsnap\n",[40,120153,120154,120155,120158],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[37,120156,120157],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[1233,120160,120162],{"id":120161},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[40,120164,120165],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[29,120167,120169],{"className":118260,"code":120168,"language":118262,"meta":35,"style":35},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[37,120170,120171],{"__ignoreMap":35},[51,120172,120173,120175,120177],{"class":53,"line":54},[51,120174,25540],{"class":68},[51,120176,119547],{"class":282},[51,120178,120179],{"class":282}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[40,120181,120182,120183,120186],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[37,120184,120185],{},":wq"," 回车",[29,120188,120190],{"className":118260,"code":120189,"language":118262,"meta":35,"style":35},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[37,120191,120192,120199,120213],{"__ignoreMap":35},[51,120193,120194,120197],{"class":53,"line":54},[51,120195,120196],{"class":68},"Package:",[51,120198,120048],{"class":282},[51,120200,120201,120204,120207,120210],{"class":53,"line":61},[51,120202,120203],{"class":68},"Pin:",[51,120205,120206],{"class":282}," release",[51,120208,120209],{"class":282}," a=",[51,120211,120212],{"class":175},"*\n",[51,120214,120215,120218],{"class":53,"line":93},[51,120216,120217],{"class":68},"Pin-Priority:",[51,120219,120220],{"class":175}," -10\n",[40,120222,120223],{},[2564,120224],{"alt":35,"src":120225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[1233,120227,120229],{"id":120228},"_326-测试是否成功","3.2.6 测试是否成功",[29,120231,120233],{"className":118260,"code":120232,"language":118262,"meta":35,"style":35},"sudo apt update\nsudo apt install firefox\n",[37,120234,120235,120243],{"__ignoreMap":35},[51,120236,120237,120239,120241],{"class":53,"line":54},[51,120238,25540],{"class":68},[51,120240,118281],{"class":282},[51,120242,27206],{"class":282},[51,120244,120245,120247,120249,120251],{"class":53,"line":61},[51,120246,25540],{"class":68},[51,120248,118281],{"class":282},[51,120250,24797],{"class":282},[51,120252,119969],{"class":282},[40,120254,120255],{},"这里提示snapd无法被安装，就证明成功了",[40,120257,120258],{},[2564,120259],{"alt":35,"src":120260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[1233,120262,120264],{"id":120263},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[40,120266,120267],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[40,120269,120270],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[40,120272,120273],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[29,120275,120277],{"className":118260,"code":120276,"language":118262,"meta":35,"style":35},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[37,120278,120279,120284,120293,120298,120306],{"__ignoreMap":35},[51,120280,120281],{"class":53,"line":54},[51,120282,120283],{"class":57},"# 添加Mozilla提供的源\n",[51,120285,120286,120288,120290],{"class":53,"line":61},[51,120287,25540],{"class":68},[51,120289,119808],{"class":282},[51,120291,120292],{"class":282}," ppa:mozillateam\u002Fppa\n",[51,120294,120295],{"class":53,"line":93},[51,120296,120297],{"class":57},"# 安装Firefox\n",[51,120299,120300,120302,120304],{"class":53,"line":99},[51,120301,25540],{"class":68},[51,120303,118281],{"class":282},[51,120305,27206],{"class":282},[51,120307,120308,120310,120312,120314],{"class":53,"line":120},[51,120309,25540],{"class":68},[51,120311,118281],{"class":282},[51,120313,24797],{"class":282},[51,120315,119969],{"class":282},[1233,120317,120319],{"id":120318},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[40,120321,120322],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[40,120324,120325],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[29,120327,120329],{"className":118260,"code":120328,"language":118262,"meta":35,"style":35},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[37,120330,120331,120336,120346,120354,120358],{"__ignoreMap":35},[51,120332,120333],{"class":53,"line":54},[51,120334,120335],{"class":57},"#删掉禁止安装snap的配置文件\n",[51,120337,120338,120340,120342,120344],{"class":53,"line":61},[51,120339,25540],{"class":68},[51,120341,119517],{"class":282},[51,120343,26289],{"class":175},[51,120345,120179],{"class":282},[51,120347,120348,120350,120352],{"class":53,"line":93},[51,120349,25540],{"class":68},[51,120351,118281],{"class":282},[51,120353,27206],{"class":282},[51,120355,120356],{"class":53,"line":99},[51,120357,3480],{"emptyLinePlaceholder":1192},[51,120359,120360,120362,120364],{"class":53,"line":120},[51,120361,25540],{"class":68},[51,120363,118281],{"class":282},[51,120365,120366],{"class":282}," dist-update\n",[14,120368,120370],{"id":120369},"_33-中文输入法","3.3 中文输入法",[1233,120372,120374],{"id":120373},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[40,120376,120377],{},"官网下载搜狗输入法",[40,120379,120380],{},[2564,120381],{"alt":35,"src":120382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[40,120384,120385],{},[2564,120386],{"alt":35,"src":120387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[40,120389,120390],{},"打开终端输入如下",[29,120392,120394],{"className":118260,"code":120393,"language":118262,"meta":35,"style":35},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[37,120395,120396,120403],{"__ignoreMap":35},[51,120397,120398,120400],{"class":53,"line":54},[51,120399,102240],{"class":175},[51,120401,120402],{"class":282}," ~\u002FDownloads\u002F\n",[51,120404,120405,120407,120409,120411],{"class":53,"line":61},[51,120406,25540],{"class":68},[51,120408,118281],{"class":282},[51,120410,24797],{"class":282},[51,120412,120413],{"class":282}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[40,120415,120416],{},"打开Fcitx",[40,120418,120419,120422],{},[2564,120420],{"alt":35,"src":120421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[2564,120423],{"alt":35,"src":120424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[40,120426,120427],{},[2564,120428],{"alt":35,"src":120429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[40,120431,120432],{},"添加搜狗输入法",[40,120434,120435],{},[2564,120436],{"alt":35,"src":120437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[40,120439,120440],{},[2564,120441],{"alt":35,"src":120442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[40,120444,120445],{},"将搜狗输入法设置为唯一输入法",[40,120447,120448],{},[2564,120449],{"alt":35,"src":120450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[1233,120452,120454],{"id":120453},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[19,120456,120457],{},[22,120458,120459],{},"卸载旧输入法",[29,120461,120463],{"className":119487,"code":120462,"language":119489,"meta":35,"style":35},"sudo apt purge fcitx* ibus*\n",[37,120464,120465],{"__ignoreMap":35},[51,120466,120467,120469,120471,120473,120476,120478,120481],{"class":53,"line":54},[51,120468,25540],{"class":68},[51,120470,118281],{"class":282},[51,120472,118622],{"class":282},[51,120474,120475],{"class":282}," fcitx",[51,120477,1702],{"class":175},[51,120479,120480],{"class":282}," ibus",[51,120482,120212],{"class":175},[19,120484,120485],{"start":61},[22,120486,120487],{},"安装Fcitx5",[29,120489,120491],{"className":118260,"code":120490,"language":118262,"meta":35,"style":35},"# 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",[37,120492,120493,120498,120512,120516,120521,120530,120538],{"__ignoreMap":35},[51,120494,120495],{"class":53,"line":54},[51,120496,120497],{"class":57},"# Ubuntu22.04及以上、Debian12及以上\n",[51,120499,120500,120502,120504,120506,120509],{"class":53,"line":61},[51,120501,25540],{"class":68},[51,120503,118281],{"class":282},[51,120505,24797],{"class":282},[51,120507,120508],{"class":282}," fcitx5",[51,120510,120511],{"class":282}," fcitx5-chinese-addons\n",[51,120513,120514],{"class":53,"line":93},[51,120515,3480],{"emptyLinePlaceholder":1192},[51,120517,120518],{"class":53,"line":99},[51,120519,120520],{"class":57},"# Ubuntu20.04\n",[51,120522,120523,120525,120527],{"class":53,"line":120},[51,120524,25540],{"class":68},[51,120526,119808],{"class":282},[51,120528,120529],{"class":282}," ppa:zhsj\u002Ffcitx5\n",[51,120531,120532,120534,120536],{"class":53,"line":129},[51,120533,25540],{"class":68},[51,120535,118281],{"class":282},[51,120537,27206],{"class":282},[51,120539,120540,120542,120544,120546,120548],{"class":53,"line":206},[51,120541,25540],{"class":68},[51,120543,118281],{"class":282},[51,120545,24797],{"class":282},[51,120547,120508],{"class":282},[51,120549,120511],{"class":282},[19,120551,120552,120555],{"start":93},[22,120553,120554],{},"Reboot System",[22,120556,120557],{},"启动Fcitx5",[40,120559,120560],{},[2564,120561],{"alt":35,"src":120562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[19,120564,120565],{"start":120},[22,120566,120567],{},"修改一些设置",[40,120569,120570],{},"将Pinyin和Keyboard - English US加入到左边。",[40,120572,120573],{},[2564,120574],{"alt":35,"src":120575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[40,120577,120578],{},"添加快捷键以便于更好切换中英文",[40,120580,120581],{},[2564,120582],{"alt":35,"src":120583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[19,120585,120586],{"start":129},[22,120587,120588],{},"重启",[29,120590,120592],{"className":119487,"code":120591,"language":119489,"meta":35,"style":35},"sudo shutdown -r now\n",[37,120593,120594],{"__ignoreMap":35},[51,120595,120596,120598,120601,120604],{"class":53,"line":54},[51,120597,25540],{"class":68},[51,120599,120600],{"class":282}," shutdown",[51,120602,120603],{"class":175}," -r",[51,120605,120606],{"class":282}," now\n",[19,120608,120609],{"start":206},[22,120610,120611],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[40,120613,120614],{},[981,120615,120616],{"href":120616,"rel":120617},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24828],[19,120619,120620],{"start":212},[22,120621,120622],{},"再重启",[29,120624,120625],{"className":119487,"code":120591,"language":119489,"meta":35,"style":35},[37,120626,120627],{"__ignoreMap":35},[51,120628,120629,120631,120633,120635],{"class":53,"line":54},[51,120630,25540],{"class":68},[51,120632,120600],{"class":282},[51,120634,120603],{"class":175},[51,120636,120606],{"class":282},[14,120638,120640],{"id":120639},"_34-pip3源替换","3.4 pip3源替换",[40,120642,120643],{},"非Debian系发行版需要做。",[40,120645,120646],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[40,120648,120649],{},"使用dnf的系统也可能不用做。",[29,120651,120653],{"className":118260,"code":120652,"language":118262,"meta":35,"style":35},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[37,120654,120655,120660,120667,120672,120677],{"__ignoreMap":35},[51,120656,120657],{"class":53,"line":54},[51,120658,120659],{"class":57},"# 检查是否已安装 pip\n",[51,120661,120662,120665],{"class":53,"line":61},[51,120663,120664],{"class":68},"pip3",[51,120666,27257],{"class":175},[51,120668,120669],{"class":53,"line":93},[51,120670,120671],{"class":57},"# 如果未安装，先安装 pip3（见下方）\n",[51,120673,120674],{"class":53,"line":99},[51,120675,120676],{"class":57},"# 配置 pip 使用清华源\n",[51,120678,120679,120681,120684,120687,120690],{"class":53,"line":120},[51,120680,120664],{"class":68},[51,120682,120683],{"class":282}," config",[51,120685,120686],{"class":282}," set",[51,120688,120689],{"class":282}," global.index-url",[51,120691,120692],{"class":282}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[40,120694,120695],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[40,120697,120698],{},[2564,120699],{"alt":35,"src":120700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[29,120702,120704],{"className":118260,"code":120703,"language":118262,"meta":35,"style":35},"#安装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",[37,120705,120706,120711,120719,120730,120734,120739,120758,120762,120767,120779,120783,120788],{"__ignoreMap":35},[51,120707,120708],{"class":53,"line":54},[51,120709,120710],{"class":57},"#安装pip3\n",[51,120712,120713,120715,120717],{"class":53,"line":61},[51,120714,25540],{"class":68},[51,120716,118281],{"class":282},[51,120718,27206],{"class":282},[51,120720,120721,120723,120725,120727],{"class":53,"line":93},[51,120722,25540],{"class":68},[51,120724,27040],{"class":282},[51,120726,24797],{"class":282},[51,120728,120729],{"class":282}," python3-pip\n",[51,120731,120732],{"class":53,"line":99},[51,120733,3480],{"emptyLinePlaceholder":1192},[51,120735,120736],{"class":53,"line":120},[51,120737,120738],{"class":57},"#更新pip3\n",[51,120740,120741,120743,120745,120747,120749,120751,120754,120756],{"class":53,"line":129},[51,120742,101843],{"class":68},[51,120744,101846],{"class":175},[51,120746,101869],{"class":282},[51,120748,24797],{"class":282},[51,120750,27394],{"class":175},[51,120752,120753],{"class":282}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[51,120755,101874],{"class":175},[51,120757,101877],{"class":282},[51,120759,120760],{"class":53,"line":206},[51,120761,3480],{"emptyLinePlaceholder":1192},[51,120763,120764],{"class":53,"line":212},[51,120765,120766],{"class":57},"#设置pip源为清华源\n",[51,120768,120769,120771,120773,120775,120777],{"class":53,"line":227},[51,120770,120664],{"class":68},[51,120772,120683],{"class":282},[51,120774,120686],{"class":282},[51,120776,120689],{"class":282},[51,120778,120692],{"class":282},[51,120780,120781],{"class":53,"line":370},[51,120782,3480],{"emptyLinePlaceholder":1192},[51,120784,120785],{"class":53,"line":387},[51,120786,120787],{"class":57},"#测试\n",[51,120789,120790,120792,120794,120796,120798,120800],{"class":53,"line":404},[51,120791,101843],{"class":68},[51,120793,101846],{"class":175},[51,120795,101869],{"class":282},[51,120797,24797],{"class":282},[51,120799,101874],{"class":175},[51,120801,101877],{"class":282},[40,120803,120804],{},"成功的话，会看到Looking后面是tsinghua字样。",[40,120806,120807],{},[2564,120808],{"alt":35,"src":120809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120811,120813],{"id":120812},"_35-显卡驱动安装","3.5 显卡驱动安装",[1233,120815,120817],{"id":120816},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[29,120819,120821],{"className":119487,"code":120820,"language":119489,"meta":35,"style":35},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[37,120822,120823,120828,120843,120848],{"__ignoreMap":35},[51,120824,120825],{"class":53,"line":54},[51,120826,120827],{"class":57},"# 如果是使用apt安装的驱动\n",[51,120829,120830,120832,120834,120836,120838,120841],{"class":53,"line":61},[51,120831,25540],{"class":68},[51,120833,27040],{"class":282},[51,120835,27043],{"class":282},[51,120837,120122],{"class":175},[51,120839,120840],{"class":282}," nvidia",[51,120842,120212],{"class":175},[51,120844,120845],{"class":53,"line":93},[51,120846,120847],{"class":57},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[51,120849,120850,120852],{"class":53,"line":99},[51,120851,25540],{"class":68},[51,120853,120854],{"class":282}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[1233,120856,120858],{"id":120857},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22960,120860,120862],{"id":120861},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23872,120864,120866],{"id":120865},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[29,120868,120870],{"className":119487,"code":120869,"language":119489,"meta":35,"style":35},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[37,120871,120872,120877,120888,120893,120903,120908],{"__ignoreMap":35},[51,120873,120874],{"class":53,"line":54},[51,120875,120876],{"class":57},"# 安装英伟达驱动\n",[51,120878,120879,120881,120883,120885],{"class":53,"line":61},[51,120880,25540],{"class":68},[51,120882,118281],{"class":282},[51,120884,24797],{"class":282},[51,120886,120887],{"class":282}," nvidia-driver-版本号\n",[51,120889,120890],{"class":53,"line":93},[51,120891,120892],{"class":57},"# 重启 \n",[51,120894,120895,120897,120899,120901],{"class":53,"line":99},[51,120896,25540],{"class":68},[51,120898,120600],{"class":282},[51,120900,120603],{"class":175},[51,120902,120606],{"class":282},[51,120904,120905],{"class":53,"line":120},[51,120906,120907],{"class":57},"# 检查驱动是否安装成功\n",[51,120909,120910],{"class":53,"line":129},[51,120911,120912],{"class":68},"nvidia-smi\n",[23872,120914,120916],{"id":120915},"_35212-debian","3.5.2.1.2 Debian",[29,120918,120920],{"className":119487,"code":120919,"language":119489,"meta":35,"style":35},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[37,120921,120922,120926,120940,120944,120954,120958],{"__ignoreMap":35},[51,120923,120924],{"class":53,"line":54},[51,120925,120876],{"class":57},[51,120927,120928,120930,120932,120934,120937],{"class":53,"line":61},[51,120929,25540],{"class":68},[51,120931,118281],{"class":282},[51,120933,24797],{"class":282},[51,120935,120936],{"class":282}," nvidia-driver",[51,120938,120939],{"class":282}," nvidia-settings\n",[51,120941,120942],{"class":53,"line":93},[51,120943,120892],{"class":57},[51,120945,120946,120948,120950,120952],{"class":53,"line":99},[51,120947,25540],{"class":68},[51,120949,120600],{"class":282},[51,120951,120603],{"class":175},[51,120953,120606],{"class":282},[51,120955,120956],{"class":53,"line":120},[51,120957,120907],{"class":57},[51,120959,120960],{"class":53,"line":129},[51,120961,120912],{"class":68},[22960,120963,120965],{"id":120964},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[40,120967,120968,120969,120972],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[840,120970,120971],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[40,120974,120975,120976],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24516,120977,120978],{},[840,120979,120980],{},"（也可以不禁用桌面环境，直接进行下一步。）",[29,120982,120984],{"className":119487,"code":120983,"language":119489,"meta":35,"style":35},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[37,120985,120986,120991,121001,121006,121019,121024],{"__ignoreMap":35},[51,120987,120988],{"class":53,"line":54},[51,120989,120990],{"class":57},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[51,120992,120993,120995,120998],{"class":53,"line":61},[51,120994,25540],{"class":68},[51,120996,120997],{"class":282}," telinit",[51,120999,121000],{"class":175}," 3\n",[51,121002,121003],{"class":53,"line":93},[51,121004,121005],{"class":57},"# ubuntu 使用下方命令\n",[51,121007,121008,121010,121013,121016],{"class":53,"line":99},[51,121009,25540],{"class":68},[51,121011,121012],{"class":282}," service",[51,121014,121015],{"class":282}," lightdm",[51,121017,121018],{"class":282}," stop\n",[51,121020,121021],{"class":53,"line":120},[51,121022,121023],{"class":57},"# Fedora 使用下方命令\n",[51,121025,121026,121028,121030,121033],{"class":53,"line":129},[51,121027,25540],{"class":68},[51,121029,27477],{"class":282},[51,121031,121032],{"class":282}," isolate",[51,121034,121035],{"class":282}," multi-user.target\n",[40,121037,121038],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[29,121040,121042],{"className":119487,"code":121041,"language":119489,"meta":35,"style":35},"# 编译环境+准备工作\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",[37,121043,121044,121049,121060,121065,121072,121077,121089,121094,121101,121106],{"__ignoreMap":35},[51,121045,121046],{"class":53,"line":54},[51,121047,121048],{"class":57},"# 编译环境+准备工作\n",[51,121050,121051,121053,121055,121057],{"class":53,"line":61},[51,121052,25540],{"class":68},[51,121054,118281],{"class":282},[51,121056,24797],{"class":282},[51,121058,121059],{"class":282}," build-essential\n",[51,121061,121062],{"class":53,"line":93},[51,121063,121064],{"class":57},"# 进入到.run目录中\n",[51,121066,121067,121069],{"class":53,"line":99},[51,121068,102240],{"class":175},[51,121070,121071],{"class":282}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[51,121073,121074],{"class":53,"line":120},[51,121075,121076],{"class":57},"# 给驱动文件增加可执行权限：\n",[51,121078,121079,121081,121083,121086],{"class":53,"line":129},[51,121080,25540],{"class":68},[51,121082,25543],{"class":282},[51,121084,121085],{"class":282}," a+x",[51,121087,121088],{"class":282}," NVIDIA-Linux-x86_64-550.107.02.run\n",[51,121090,121091],{"class":53,"line":206},[51,121092,121093],{"class":57},"# 然后执行安装：\n",[51,121095,121096,121098],{"class":53,"line":212},[51,121097,25540],{"class":68},[51,121099,121100],{"class":282}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[51,121102,121103],{"class":53,"line":227},[51,121104,121105],{"class":57},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[51,121107,121108,121110,121113],{"class":53,"line":370},[51,121109,25540],{"class":68},[51,121111,121112],{"class":282}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[51,121114,121115],{"class":175},"  --no-opengl-files\n",[40,121117,121118],{},"安装完毕重启即可",[29,121120,121122],{"className":119487,"code":121121,"language":119489,"meta":35,"style":35},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[37,121123,121124,121128,121134,121138],{"__ignoreMap":35},[51,121125,121126],{"class":53,"line":54},[51,121127,120892],{"class":57},[51,121129,121130,121132],{"class":53,"line":61},[51,121131,25540],{"class":68},[51,121133,27611],{"class":282},[51,121135,121136],{"class":53,"line":93},[51,121137,120907],{"class":57},[51,121139,121140],{"class":53,"line":99},[51,121141,120912],{"class":68},[1233,121143,121145],{"id":121144},"_353-安装cuda","3.5.3 安装CUDA",[40,121147,121148],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[40,121150,121151],{},[2564,121152],{"alt":35,"src":121153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[19,121155,121156],{},[22,121157,121158],{},"先查看显卡驱动所支持的最高CUDA版本",[29,121160,121161],{"className":119487,"code":120912,"language":119489,"meta":35,"style":35},[37,121162,121163],{"__ignoreMap":35},[51,121164,121165],{"class":53,"line":54},[51,121166,120912],{"class":68},[40,121168,121169],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[40,121171,121172],{},[2564,121173],{"alt":35,"src":121174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[19,121176,121177],{"start":61},[22,121178,121179],{},"下载CUDA并安装CUDA",[40,121181,119266,121182],{},[981,121183,119269],{"href":119269,"rel":121184},[24828],[40,121186,121187],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[40,121189,121190],{},[2564,121191],{"alt":35,"src":121192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[40,121194,121195,121196,121201],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[981,121197,121200],{"href":121198,"rel":121199},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24828],"Vinci机器人队单片机教程","）",[40,121203,121204],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[40,121206,121207],{},[2564,121208],{"alt":35,"src":121209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[40,121211,121212],{},"将最下方框框里的命令敲入终端",[29,121214,121216],{"className":119487,"code":121215,"language":119489,"meta":35,"style":35},"# 在当前文件夹下创建一个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",[37,121217,121218,121223,121232,121237,121244,121249,121257,121262,121273,121278],{"__ignoreMap":35},[51,121219,121220],{"class":53,"line":54},[51,121221,121222],{"class":57},"# 在当前文件夹下创建一个ttt的子文件夹\n",[51,121224,121225,121227,121229],{"class":53,"line":61},[51,121226,102230],{"class":68},[51,121228,30180],{"class":175},[51,121230,121231],{"class":282}," .\u002Fttt\n",[51,121233,121234],{"class":53,"line":93},[51,121235,121236],{"class":57},"# 进入ttt文件夹\n",[51,121238,121239,121241],{"class":53,"line":99},[51,121240,102240],{"class":175},[51,121242,121243],{"class":282}," ttt\n",[51,121245,121246],{"class":53,"line":120},[51,121247,121248],{"class":57},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[51,121250,121251,121254],{"class":53,"line":129},[51,121252,121253],{"class":68},"wget",[51,121255,121256],{"class":282}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[51,121258,121259],{"class":53,"line":206},[51,121260,121261],{"class":57},"# 给予权限\n",[51,121263,121264,121266,121268,121270],{"class":53,"line":212},[51,121265,25540],{"class":68},[51,121267,25543],{"class":282},[51,121269,121085],{"class":282},[51,121271,121272],{"class":282}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[51,121274,121275],{"class":53,"line":227},[51,121276,121277],{"class":57},"# 运行脚本\n",[51,121279,121280,121282],{"class":53,"line":370},[51,121281,25540],{"class":68},[51,121283,121272],{"class":282},[40,121285,121286],{},[2564,121287],{"alt":35,"src":121288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[40,121290,121291],{},"正在安装中：",[40,121293,121294],{},[2564,121295],{"alt":35,"src":121296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[40,121298,121299],{},"输入accept接受即可",[40,121301,121302],{},[2564,121303],{"alt":35,"src":121304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[40,121306,121307],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[40,121309,121310],{},[2564,121311],{"alt":35,"src":121312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[40,121314,121315],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[40,121317,121318],{},[2564,121319],{"alt":35,"src":121320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[19,121322,121323],{"start":93},[22,121324,121325],{},"配置环境",[40,121327,121328],{},"根据上方确认一下路径，比如我上面红色框起来的为",[29,121330,121332],{"className":119487,"code":121331,"language":119489,"meta":35,"style":35},"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",[37,121333,121334,121350,121365],{"__ignoreMap":35},[51,121335,121336,121339,121342,121345,121348],{"class":53,"line":54},[51,121337,121338],{"class":68},"Please",[51,121340,121341],{"class":282}," make",[51,121343,121344],{"class":282}," sure",[51,121346,121347],{"class":282}," that",[51,121349,3754],{"class":72},[51,121351,121352,121354,121357,121360,121363],{"class":53,"line":61},[51,121353,53235],{"class":68},[51,121355,121356],{"class":282},"   PATH",[51,121358,121359],{"class":282}," includes",[51,121361,121362],{"class":282}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[51,121364,3754],{"class":72},[51,121366,121367,121369,121372,121374,121377,121380,121382,121385,121388,121391,121394,121396,121399,121401],{"class":53,"line":93},[51,121368,53235],{"class":68},[51,121370,121371],{"class":282},"   LD_LIBRARY_PATH",[51,121373,121359],{"class":282},[51,121375,121376],{"class":282}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[51,121378,121379],{"class":282}," or,",[51,121381,69],{"class":282},[51,121383,121384],{"class":282}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[51,121386,121387],{"class":282}," to",[51,121389,121390],{"class":282}," \u002Fetc\u002Fld.so.conf",[51,121392,121393],{"class":282}," and",[51,121395,28194],{"class":282},[51,121397,121398],{"class":282}," ldconfig",[51,121400,65568],{"class":282},[51,121402,121403],{"class":282}," root\n",[40,121405,121406],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[29,121408,121410],{"className":119487,"code":121409,"language":119489,"meta":35,"style":35},"which nvcc\n",[37,121411,121412],{"__ignoreMap":35},[51,121413,121414,121417],{"class":53,"line":54},[51,121415,121416],{"class":175},"which",[51,121418,121419],{"class":282}," nvcc\n",[40,121421,121422],{},[2564,121423],{"alt":35,"src":121424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[40,121426,121427],{},"所以我进行以下操作：",[29,121429,121431],{"className":119487,"code":121430,"language":119489,"meta":35,"style":35},"sudo vim ~\u002F.bashrc\n",[37,121432,121433],{"__ignoreMap":35},[51,121434,121435,121437,121439],{"class":53,"line":54},[51,121436,25540],{"class":68},[51,121438,119547],{"class":282},[51,121440,121441],{"class":282}," ~\u002F.bashrc\n",[40,121443,121444],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[29,121446,121448],{"className":119487,"code":121447,"language":119489,"meta":35,"style":35},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[37,121449,121450,121462],{"__ignoreMap":35},[51,121451,121452,121454,121457,121459],{"class":53,"line":54},[51,121453,26006],{"class":64},[51,121455,121456],{"class":72}," PATH",[51,121458,108],{"class":64},[51,121460,121461],{"class":72},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[51,121463,121464,121466,121469,121471],{"class":53,"line":61},[51,121465,26006],{"class":64},[51,121467,121468],{"class":72}," LD_LIBRARY_PATH",[51,121470,108],{"class":64},[51,121472,121473],{"class":72},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[40,121475,121476],{},[2564,121477],{"alt":35,"src":121478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[29,121480,121482],{"className":119487,"code":121481,"language":119489,"meta":35,"style":35},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[37,121483,121484,121489,121495,121500],{"__ignoreMap":35},[51,121485,121486],{"class":53,"line":54},[51,121487,121488],{"class":57},"# 刷新当前终端的环境变量\n",[51,121490,121491,121493],{"class":53,"line":61},[51,121492,101857],{"class":175},[51,121494,121441],{"class":282},[51,121496,121497],{"class":53,"line":93},[51,121498,121499],{"class":57},"# 验证CUDA是否安装成功\n",[51,121501,121502,121505],{"class":53,"line":99},[51,121503,121504],{"class":68},"nvcc",[51,121506,121507],{"class":175}," -V\n",[40,121509,121510],{},"出现下图这种则安装成功。",[40,121512,121513],{},[2564,121514],{"alt":35,"src":121515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[1233,121517,121519],{"id":121518},"_354-安装cudnn","3.5.4 安装cuDNN",[19,121521,121522],{},[22,121523,121524],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[40,121526,121527,121528,121533],{},"前往 NVIDIA cuDNN 下载页面：",[981,121529,121532],{"href":121530,"rel":121531},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24828],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[40,121535,121536],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[40,121538,121539],{},[2564,121540],{"alt":35,"src":121541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[40,121543,121544],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[40,121546,121547],{},[2564,121548],{"alt":35,"src":121549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[40,121551,121552],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[40,121554,121555],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[40,121557,121558],{},[840,121559,121560],{},"我这里选择所有Linux X86_64最通用的办法：",[40,121562,121563],{},"下载好的：",[40,121565,121566],{},[2564,121567],{"alt":35,"src":121568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[19,121570,121571],{"start":61},[22,121572,121573],{},"安装cuDNN",[40,121575,121576],{},"找到该文件所在目录，并打开终端，cd到该目录。",[40,121578,121579],{},[2564,121580],{"alt":35,"src":121581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[40,121583,121584],{},"解压文件，并复制到对应位置完成安装",[29,121586,121588],{"className":119487,"code":121587,"language":119489,"meta":35,"style":35},"# 解压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",[37,121589,121590,121595,121606,121611,121618,121623,121639,121653,121658,121669,121678,121682,121698],{"__ignoreMap":35},[51,121591,121592],{"class":53,"line":54},[51,121593,121594],{"class":57},"# 解压cuDNN文件\n",[51,121596,121597,121600,121603],{"class":53,"line":61},[51,121598,121599],{"class":68},"tar",[51,121601,121602],{"class":175}," -xvf",[51,121604,121605],{"class":282}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[51,121607,121608],{"class":53,"line":93},[51,121609,121610],{"class":57},"# cd进文件夹\n",[51,121612,121613,121615],{"class":53,"line":99},[51,121614,102240],{"class":175},[51,121616,121617],{"class":282}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[51,121619,121620],{"class":53,"line":120},[51,121621,121622],{"class":57},"# 复制cuDNN文件到CUDA目录\n",[51,121624,121625,121627,121629,121632,121634,121637],{"class":53,"line":129},[51,121626,25540],{"class":68},[51,121628,28825],{"class":282},[51,121630,121631],{"class":282}," include\u002Fcudnn",[51,121633,1702],{"class":175},[51,121635,121636],{"class":282},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[51,121638,3754],{"class":72},[51,121640,121641,121643,121645,121648,121650],{"class":53,"line":206},[51,121642,25540],{"class":68},[51,121644,28825],{"class":282},[51,121646,121647],{"class":282}," lib\u002Flibcudnn",[51,121649,1702],{"class":175},[51,121651,121652],{"class":282},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[51,121654,121655],{"class":53,"line":212},[51,121656,121657],{"class":57},"# 对比一下有没有缺文件\n",[51,121659,121660,121662,121665,121667],{"class":53,"line":227},[51,121661,27725],{"class":68},[51,121663,121664],{"class":282}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[51,121666,1702],{"class":175},[51,121668,3754],{"class":72},[51,121670,121671,121673,121676],{"class":53,"line":370},[51,121672,27725],{"class":68},[51,121674,121675],{"class":282}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[51,121677,120212],{"class":175},[51,121679,121680],{"class":53,"line":387},[51,121681,121261],{"class":57},[51,121683,121684,121686,121688,121691,121693,121695],{"class":53,"line":404},[51,121685,25540],{"class":68},[51,121687,25543],{"class":282},[51,121689,121690],{"class":282}," a+r",[51,121692,121664],{"class":282},[51,121694,1702],{"class":175},[51,121696,121697],{"class":72},"   \n",[51,121699,121700,121702,121704,121706,121708],{"class":53,"line":415},[51,121701,25540],{"class":68},[51,121703,25543],{"class":282},[51,121705,121690],{"class":282},[51,121707,121675],{"class":282},[51,121709,120212],{"class":175},[19,121711,121712],{"start":93},[22,121713,121714],{},"检查是否安装成功",[29,121716,121718],{"className":119487,"code":121717,"language":119489,"meta":35,"style":35},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[37,121719,121720,121725],{"__ignoreMap":35},[51,121721,121722],{"class":53,"line":54},[51,121723,121724],{"class":57},"# 检查cuDNN版本命令\n",[51,121726,121727,121730,121733,121735,121737,121740,121743],{"class":53,"line":61},[51,121728,121729],{"class":68},"cat",[51,121731,121732],{"class":282}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[51,121734,26073],{"class":64},[51,121736,31200],{"class":68},[51,121738,121739],{"class":282}," CUDNN_MAJOR",[51,121741,121742],{"class":175}," -A",[51,121744,48687],{"class":175},[40,121746,121747],{},"出现下图这样的就是安装成功了",[40,121749,121750],{},[2564,121751],{"alt":35,"src":121752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[19,121754,121755],{"start":99},[22,121756,121757],{},"软链接(一般不需要)",[29,121759,121761],{"className":119487,"code":121760,"language":119489,"meta":35,"style":35},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[37,121762,121763,121768],{"__ignoreMap":35},[51,121764,121765],{"class":53,"line":54},[51,121766,121767],{"class":57},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[51,121769,121770,121772],{"class":53,"line":61},[51,121771,25540],{"class":68},[51,121773,121774],{"class":282}," ldconfig\n",[40,121776,121777],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[29,121779,121784],{"className":121780,"code":121781,"language":121782,"meta":121783,"style":35},"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",[37,121785,121786,121791,121796,121801,121806,121811,121816],{"__ignoreMap":35},[51,121787,121788],{"class":53,"line":54},[51,121789,121790],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[51,121792,121793],{"class":53,"line":61},[51,121794,121795],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[51,121797,121798],{"class":53,"line":93},[51,121799,121800],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[51,121802,121803],{"class":53,"line":99},[51,121804,121805],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[51,121807,121808],{"class":53,"line":120},[51,121809,121810],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[51,121812,121813],{"class":53,"line":129},[51,121814,121815],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[51,121817,121818],{"class":53,"line":206},[51,121819,121820],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[40,121822,121823],{},"运行下方的命令",[29,121825,121827],{"className":119487,"code":121826,"language":119489,"meta":35,"style":35},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[37,121828,121829,121834,121841,121846],{"__ignoreMap":35},[51,121830,121831],{"class":53,"line":54},[51,121832,121833],{"class":57},"# cd进入CUDA路径\n",[51,121835,121836,121838],{"class":53,"line":61},[51,121837,102240],{"class":175},[51,121839,121840],{"class":282}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[51,121842,121843],{"class":53,"line":93},[51,121844,121845],{"class":57}," # 查看本路径下的需要软链接的文件名\n",[51,121847,121848],{"class":53,"line":99},[51,121849,121850],{"class":68}," ls\n",[40,121852,121853],{},[2564,121854],{"alt":35,"src":121855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[40,121857,121858,121859,19372,121862,19372,121865,121868],{},"如上图，我需要将",[37,121860,121861],{},"libcudnn_xxx_xxxxx.so.8.9.7",[37,121863,121864],{},"libcudnn_xxx_xxxxx.so.8",[37,121866,121867],{},"libcudnn_xxx_xxxxx.so","软链接",[29,121870,121872],{"className":119487,"code":121871,"language":119489,"meta":35,"style":35},"# 创建符号链接。对于每个 .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",[37,121873,121874,121879,121895,121909,121923,121937,121951,121965,121979,121984,121990,121995],{"__ignoreMap":35},[51,121875,121876],{"class":53,"line":54},[51,121877,121878],{"class":57},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[51,121880,121881,121883,121886,121889,121892],{"class":53,"line":61},[51,121882,25540],{"class":68},[51,121884,121885],{"class":282}," ln",[51,121887,121888],{"class":175}," -sf",[51,121890,121891],{"class":282}," libcudnn_cnn_train.so.8.9.7",[51,121893,121894],{"class":282}," libcudnn_cnn_train.so.8\n",[51,121896,121897,121899,121901,121903,121906],{"class":53,"line":93},[51,121898,25540],{"class":68},[51,121900,121885],{"class":282},[51,121902,121888],{"class":175},[51,121904,121905],{"class":282}," libcudnn_adv_infer.so.8.9.7",[51,121907,121908],{"class":282}," libcudnn_adv_infer.so.8\n",[51,121910,121911,121913,121915,121917,121920],{"class":53,"line":99},[51,121912,25540],{"class":68},[51,121914,121885],{"class":282},[51,121916,121888],{"class":175},[51,121918,121919],{"class":282}," libcudnn_adv_train.so.8.9.7",[51,121921,121922],{"class":282}," libcudnn_adv_train.so.8\n",[51,121924,121925,121927,121929,121931,121934],{"class":53,"line":120},[51,121926,25540],{"class":68},[51,121928,121885],{"class":282},[51,121930,121888],{"class":175},[51,121932,121933],{"class":282}," libcudnn_cnn_infer.so.8.9.7",[51,121935,121936],{"class":282}," libcudnn_cnn_infer.so.8\n",[51,121938,121939,121941,121943,121945,121948],{"class":53,"line":129},[51,121940,25540],{"class":68},[51,121942,121885],{"class":282},[51,121944,121888],{"class":175},[51,121946,121947],{"class":282}," libcudnn.so.8.9.7",[51,121949,121950],{"class":282}," libcudnn.so.8\n",[51,121952,121953,121955,121957,121959,121962],{"class":53,"line":206},[51,121954,25540],{"class":68},[51,121956,121885],{"class":282},[51,121958,121888],{"class":175},[51,121960,121961],{"class":282}," libcudnn_ops_infer.so.8.9.7",[51,121963,121964],{"class":282}," libcudnn_ops_infer.so.8\n",[51,121966,121967,121969,121971,121973,121976],{"class":53,"line":212},[51,121968,25540],{"class":68},[51,121970,121885],{"class":282},[51,121972,121888],{"class":175},[51,121974,121975],{"class":282}," libcudnn_ops_train.so.8.9.7",[51,121977,121978],{"class":282}," libcudnn_ops_train.so.8\n",[51,121980,121981],{"class":53,"line":227},[51,121982,121983],{"class":57},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[51,121985,121986,121988],{"class":53,"line":370},[51,121987,25540],{"class":68},[51,121989,121774],{"class":282},[51,121991,121992],{"class":53,"line":387},[51,121993,121994],{"class":57},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[51,121996,121997,121999,122002,122005,122007,122010],{"class":53,"line":404},[51,121998,27725],{"class":68},[51,122000,122001],{"class":175}," -l",[51,122003,122004],{"class":282}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[51,122006,1702],{"class":175},[51,122008,122009],{"class":282},".so",[51,122011,120212],{"class":175},[1233,122013,122015],{"id":122014},"_355-常见问题","3.5.5 常见问题",[19,122017,122018],{},[22,122019,122020],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[29,122022,122024],{"className":119487,"code":122023,"language":119489,"meta":35,"style":35},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[37,122025,122026],{"__ignoreMap":35},[51,122027,122028,122030,122032],{"class":53,"line":54},[51,122029,25540],{"class":68},[51,122031,119547],{"class":282},[51,122033,122034],{"class":282}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[40,122036,122037],{},"blacklist-nouveau.conf文件内容如下：",[29,122039,122041],{"className":119487,"code":122040,"language":119489,"meta":35,"style":35},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[37,122042,122043,122051,122058,122070,122080],{"__ignoreMap":35},[51,122044,122045,122048],{"class":53,"line":54},[51,122046,122047],{"class":68},"blacklist",[51,122049,122050],{"class":282}," nouveau\n",[51,122052,122053,122055],{"class":53,"line":61},[51,122054,122047],{"class":68},[51,122056,122057],{"class":282}," lbm-nouveau\n",[51,122059,122060,122062,122065,122068],{"class":53,"line":93},[51,122061,116894],{"class":68},[51,122063,122064],{"class":282}," nouveau",[51,122066,122067],{"class":282}," modeset=",[51,122069,4162],{"class":175},[51,122071,122072,122075,122077],{"class":53,"line":99},[51,122073,122074],{"class":175},"alias",[51,122076,122064],{"class":282},[51,122078,122079],{"class":282}," off\n",[51,122081,122082,122084,122087],{"class":53,"line":120},[51,122083,122074],{"class":175},[51,122085,122086],{"class":282}," lbm-nouveau",[51,122088,122079],{"class":282},[40,122090,122091],{},"接着运行下方命令",[29,122093,122095],{"className":119487,"code":122094,"language":119489,"meta":35,"style":35},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[37,122096,122097,122107,122112],{"__ignoreMap":35},[51,122098,122099,122101,122104],{"class":53,"line":54},[51,122100,25540],{"class":68},[51,122102,122103],{"class":282}," update-initramfs",[51,122105,122106],{"class":175}," -u\n",[51,122108,122109],{"class":53,"line":61},[51,122110,122111],{"class":68},"或者\n",[51,122113,122114,122116,122119],{"class":53,"line":93},[51,122115,25540],{"class":68},[51,122117,122118],{"class":282}," dracut",[51,122120,122121],{"class":175}," --force\n",[40,122123,122124],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[29,122126,122128],{"className":119487,"code":122127,"language":119489,"meta":35,"style":35},"lsmod | grep nouveau\n",[37,122129,122130],{"__ignoreMap":35},[51,122131,122132,122135,122137,122139],{"class":53,"line":54},[51,122133,122134],{"class":68},"lsmod",[51,122136,26073],{"class":64},[51,122138,31200],{"class":68},[51,122140,122050],{"class":282},[19,122142,122143],{"start":61},[22,122144,122145],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[29,122147,122149],{"className":119487,"code":122148,"language":119489,"meta":35,"style":35},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[37,122150,122151],{"__ignoreMap":35},[51,122152,122153,122155,122157],{"class":53,"line":54},[51,122154,25540],{"class":68},[51,122156,119547],{"class":282},[51,122158,122159],{"class":282}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[40,122161,122162],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[29,122164,122166],{"className":119487,"code":122165,"language":119489,"meta":35,"style":35},"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",[37,122167,122168,122176,122184,122192,122199,122207,122217,122225],{"__ignoreMap":35},[51,122169,122170,122173],{"class":53,"line":54},[51,122171,122172],{"class":68},"Section",[51,122174,122175],{"class":282}," \"OutputClass\"\n",[51,122177,122178,122181],{"class":53,"line":61},[51,122179,122180],{"class":68},"   Identifier",[51,122182,122183],{"class":282}," \"nvidia\"\n",[51,122185,122186,122189],{"class":53,"line":93},[51,122187,122188],{"class":68},"   MatchDriver",[51,122190,122191],{"class":282}," \"nvidia-drm\"\n",[51,122193,122194,122197],{"class":53,"line":99},[51,122195,122196],{"class":68},"   Driver",[51,122198,122183],{"class":282},[51,122200,122201,122204],{"class":53,"line":120},[51,122202,122203],{"class":68},"   Option",[51,122205,122206],{"class":282}," \"AllowEmptyInitialConfiguration\"\n",[51,122208,122209,122211,122214],{"class":53,"line":129},[51,122210,122203],{"class":68},[51,122212,122213],{"class":282}," \"PrimaryGPU\"",[51,122215,122216],{"class":282}," \"yes\"\n",[51,122218,122219,122222],{"class":53,"line":206},[51,122220,122221],{"class":68},"   ModulePath",[51,122223,122224],{"class":282}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[51,122226,122227],{"class":53,"line":212},[51,122228,122229],{"class":68},"EndSection\n",[19,122231,122232],{"start":93},[22,122233,122234],{},"安装N卡驱动提示错误",[29,122236,122238],{"className":121780,"code":122237,"language":121782,"meta":121783,"style":35},"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",[37,122239,122240],{"__ignoreMap":35},[51,122241,122242],{"class":53,"line":54},[51,122243,122237],{},[19,122245,122246],{},[22,122247,122248],{},"检查当前运行的内核版本：",[40,122250,122251],{},"运行以下命令以查看你当前正在使用的内核版本：",[29,122253,122255],{"className":118260,"code":122254,"language":118262,"meta":35,"style":35},"uname -r\n",[37,122256,122257],{"__ignoreMap":35},[51,122258,122259,122261],{"class":53,"line":54},[51,122260,71168],{"class":68},[51,122262,122263],{"class":175}," -r\n",[19,122265,122266],{"start":61},[22,122267,122268],{},"安装内核开发文件：",[40,122270,122271,122272,122275],{},"确保你已经安装了与当前内核版本相匹配的 ",[37,122273,122274],{},"kernel-devel"," 包。运行以下命令来安装：",[29,122277,122279],{"className":118260,"code":122278,"language":118262,"meta":35,"style":35},"sudo dnf install kernel-devel-$(uname -r)\n",[37,122280,122281],{"__ignoreMap":35},[51,122282,122283,122285,122287,122289,122292,122294,122296,122298],{"class":53,"line":54},[51,122284,25540],{"class":68},[51,122286,27279],{"class":282},[51,122288,24797],{"class":282},[51,122290,122291],{"class":282}," kernel-devel-",[51,122293,26063],{"class":72},[51,122295,71168],{"class":68},[51,122297,120603],{"class":175},[51,122299,90],{"class":72},[40,122301,122302],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[19,122304,122305],{"start":93},[22,122306,122307],{},"安装内核源代码（如果需要）：",[40,122309,122310],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[29,122312,122314],{"className":118260,"code":122313,"language":118262,"meta":35,"style":35},"sudo dnf install kernel-headers kernel-source\n",[37,122315,122316],{"__ignoreMap":35},[51,122317,122318,122320,122322,122324,122327],{"class":53,"line":54},[51,122319,25540],{"class":68},[51,122321,27279],{"class":282},[51,122323,24797],{"class":282},[51,122325,122326],{"class":282}," kernel-headers",[51,122328,122329],{"class":282}," kernel-source\n",[19,122331,122332],{"start":99},[22,122333,122334],{},"检查安装：",[40,122336,122337,122338,122341],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[37,122339,122340],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[29,122343,122345],{"className":118260,"code":122344,"language":118262,"meta":35,"style":35},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[37,122346,122347],{"__ignoreMap":35},[51,122348,122349,122351],{"class":53,"line":54},[51,122350,27725],{"class":68},[51,122352,122353],{"class":282}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[40,122355,122356,122357,122360],{},"如果仍然遇到问题，可以通过 ",[37,122358,122359],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1179,122362,122363],{},"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":35,"searchDepth":61,"depth":61,"links":122365},[122366,122370,122380,122384,122385],{"id":119463,"depth":61,"text":119464,"children":122367},[122368,122369],{"id":119473,"depth":93,"text":119474},{"id":119483,"depth":93,"text":119484},{"id":119683,"depth":61,"text":119684,"children":122371},[122372,122373,122374,122375,122376,122377,122378,122379],{"id":119687,"depth":93,"text":119688},{"id":119757,"depth":93,"text":119758},{"id":119846,"depth":93,"text":119847},{"id":120091,"depth":93,"text":120092},{"id":120161,"depth":93,"text":120162},{"id":120228,"depth":93,"text":120229},{"id":120263,"depth":93,"text":120264},{"id":120318,"depth":93,"text":120319},{"id":120369,"depth":61,"text":120370,"children":122381},[122382,122383],{"id":120373,"depth":93,"text":120374},{"id":120453,"depth":93,"text":120454},{"id":120639,"depth":61,"text":120640},{"id":120812,"depth":61,"text":120813,"children":122386},[122387,122388,122389,122390,122391],{"id":120816,"depth":93,"text":120817},{"id":120857,"depth":93,"text":120858},{"id":121144,"depth":93,"text":121145},{"id":121518,"depth":93,"text":121519},{"id":122014,"depth":93,"text":122015},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119455,"description":24339},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122398,"title":122399,"body":122400,"description":24339,"extension":1190,"meta":122740,"navigation":1192,"path":122741,"seo":122742,"stem":122743,"__hash__":122744},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122401,"toc":122738},[122402,122405,122410,122413,122659,122664,122667,122703,122706,122735],[10,122403,122399],{"id":122404},"_4-命令教程长期积累",[19,122406,122407],{},[22,122408,122409],{},"大多数命令",[40,122411,122412],{},"常用 Linux 命令速查：",[29,122414,122416],{"className":118260,"code":122415,"language":118262,"meta":35,"style":35},"# 文件与目录\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",[37,122417,122418,122423,122430,122437,122445,122452,122459,122467,122475,122482,122489,122497,122501,122506,122513,122521,122528,122532,122537,122544,122552,122560,122568,122576,122580,122585,122593,122600,122607,122615,122623,122627,122632,122641,122650],{"__ignoreMap":35},[51,122419,122420],{"class":53,"line":54},[51,122421,122422],{"class":57},"# 文件与目录\n",[51,122424,122425,122427],{"class":53,"line":61},[51,122426,27725],{"class":68},[51,122428,122429],{"class":57},"        # 列出目录内容\n",[51,122431,122432,122434],{"class":53,"line":93},[51,122433,102240],{"class":175},[51,122435,122436],{"class":57},"        # 切换目录\n",[51,122438,122439,122442],{"class":53,"line":99},[51,122440,122441],{"class":175},"pwd",[51,122443,122444],{"class":57},"       # 显示当前路径\n",[51,122446,122447,122449],{"class":53,"line":120},[51,122448,102230],{"class":68},[51,122450,122451],{"class":57},"     # 创建目录\n",[51,122453,122454,122456],{"class":53,"line":129},[51,122455,26286],{"class":68},[51,122457,122458],{"class":57},"        # 删除文件或目录\n",[51,122460,122461,122464],{"class":53,"line":206},[51,122462,122463],{"class":68},"cp",[51,122465,122466],{"class":57},"        # 复制文件或目录\n",[51,122468,122469,122472],{"class":53,"line":212},[51,122470,122471],{"class":68},"mv",[51,122473,122474],{"class":57},"        # 移动\u002F重命名文件或目录\n",[51,122476,122477,122479],{"class":53,"line":227},[51,122478,102247],{"class":68},[51,122480,122481],{"class":57},"     # 创建空文件\n",[51,122483,122484,122486],{"class":53,"line":370},[51,122485,121729],{"class":68},[51,122487,122488],{"class":57},"       # 查看文件内容\n",[51,122490,122491,122494],{"class":53,"line":387},[51,122492,122493],{"class":68},"head\u002Ftail",[51,122495,122496],{"class":57}," # 查看文件头部\u002F尾部\n",[51,122498,122499],{"class":53,"line":404},[51,122500,3480],{"emptyLinePlaceholder":1192},[51,122502,122503],{"class":53,"line":415},[51,122504,122505],{"class":57},"# 权限管理\n",[51,122507,122508,122510],{"class":53,"line":420},[51,122509,25575],{"class":68},[51,122511,122512],{"class":57},"     # 修改文件权限\n",[51,122514,122515,122518],{"class":53,"line":429},[51,122516,122517],{"class":68},"chown",[51,122519,122520],{"class":57},"     # 修改文件所有者\n",[51,122522,122523,122525],{"class":53,"line":434},[51,122524,25540],{"class":68},[51,122526,122527],{"class":57},"      # 以管理员身份执行\n",[51,122529,122530],{"class":53,"line":448},[51,122531,3480],{"emptyLinePlaceholder":1192},[51,122533,122534],{"class":53,"line":462},[51,122535,122536],{"class":57},"# 系统信息\n",[51,122538,122539,122541],{"class":53,"line":470},[51,122540,71168],{"class":68},[51,122542,122543],{"class":57},"     # 系统信息\n",[51,122545,122546,122549],{"class":53,"line":2783},[51,122547,122548],{"class":68},"df",[51,122550,122551],{"class":57},"        # 磁盘使用情况\n",[51,122553,122554,122557],{"class":53,"line":2788},[51,122555,122556],{"class":68},"free",[51,122558,122559],{"class":57},"      # 内存使用情况\n",[51,122561,122562,122565],{"class":53,"line":2817},[51,122563,122564],{"class":68},"top\u002Fhtop",[51,122566,122567],{"class":57},"  # 进程监控\n",[51,122569,122570,122573],{"class":53,"line":2822},[51,122571,122572],{"class":68},"ps",[51,122574,122575],{"class":57},"        # 查看进程\n",[51,122577,122578],{"class":53,"line":2839},[51,122579,3480],{"emptyLinePlaceholder":1192},[51,122581,122582],{"class":53,"line":2844},[51,122583,122584],{"class":57},"# 网络\n",[51,122586,122587,122590],{"class":53,"line":2849},[51,122588,122589],{"class":68},"ping",[51,122591,122592],{"class":57},"      # 测试网络连通性\n",[51,122594,122595,122597],{"class":53,"line":2854},[51,122596,27813],{"class":68},[51,122598,122599],{"class":57},"      # 发送 HTTP 请求\n",[51,122601,122602,122604],{"class":53,"line":2868},[51,122603,121253],{"class":68},[51,122605,122606],{"class":57},"      # 下载文件\n",[51,122608,122609,122612],{"class":53,"line":2873},[51,122610,122611],{"class":68},"ssh",[51,122613,122614],{"class":57},"       # 远程登录\n",[51,122616,122617,122620],{"class":53,"line":3657},[51,122618,122619],{"class":68},"scp",[51,122621,122622],{"class":57},"       # 远程文件传输\n",[51,122624,122625],{"class":53,"line":3671},[51,122626,3480],{"emptyLinePlaceholder":1192},[51,122628,122629],{"class":53,"line":3679},[51,122630,122631],{"class":57},"# 包管理（Debian\u002FUbuntu）\n",[51,122633,122634,122636,122638],{"class":53,"line":3684},[51,122635,118332],{"class":68},[51,122637,118311],{"class":282},[51,122639,122640],{"class":57},"   # 更新软件源\n",[51,122642,122643,122645,122647],{"class":53,"line":3690},[51,122644,118332],{"class":68},[51,122646,24797],{"class":282},[51,122648,122649],{"class":57},"  # 安装软件包\n",[51,122651,122652,122654,122656],{"class":53,"line":3696},[51,122653,118332],{"class":68},[51,122655,27043],{"class":282},[51,122657,122658],{"class":57},"   # 卸载软件包\n",[19,122660,122661],{"start":61},[22,122662,122663],{},"KDE Dolphin 以root打开",[40,122665,122666],{},"kde5",[29,122668,122670],{"className":118260,"code":122669,"language":118262,"meta":35,"style":35},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[37,122671,122672],{"__ignoreMap":35},[51,122673,122674,122677,122680,122683,122685,122687,122690,122693,122695,122698,122700],{"class":53,"line":54},[51,122675,122676],{"class":68},"pkexec",[51,122678,122679],{"class":282}," env",[51,122681,122682],{"class":282}," DISPLAY=",[51,122684,29107],{"class":72},[51,122686,29165],{"class":282},[51,122688,122689],{"class":72},"$XAUTHORITY ",[51,122691,122692],{"class":282},"KDE_SESSION_VERSION=",[51,122694,1568],{"class":175},[51,122696,122697],{"class":282}," KDE_FULL_SESSION=",[51,122699,2467],{"class":175},[51,122701,122702],{"class":282}," dolphin\n",[40,122704,122705],{},"kde6",[29,122707,122709],{"className":118260,"code":122708,"language":118262,"meta":35,"style":35},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[37,122710,122711],{"__ignoreMap":35},[51,122712,122713,122715,122717,122719,122721,122723,122725,122727,122729,122731,122733],{"class":53,"line":54},[51,122714,122676],{"class":68},[51,122716,122679],{"class":282},[51,122718,122682],{"class":282},[51,122720,29107],{"class":72},[51,122722,29165],{"class":282},[51,122724,122689],{"class":72},[51,122726,122692],{"class":282},[51,122728,1593],{"class":175},[51,122730,122697],{"class":282},[51,122732,2467],{"class":175},[51,122734,122702],{"class":282},[1179,122736,122737],{},"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":35,"searchDepth":61,"depth":61,"links":122739},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122399,"description":24339},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122746,"title":122747,"body":122748,"description":24339,"extension":1190,"meta":122762,"navigation":1192,"path":122763,"seo":122764,"stem":122765,"__hash__":122766},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122749,"toc":122760},[122750,122753],[10,122751,122747],{"id":122752},"_5-各种环境配置",[40,122754,122755],{},[981,122756,122759],{"href":122757,"rel":122758},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24828],"电控组环境搭建大全",{"title":35,"searchDepth":61,"depth":61,"links":122761},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122747,"description":24339},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122768,"title":122769,"body":122770,"description":24339,"extension":1190,"meta":123118,"navigation":1192,"path":123119,"seo":123120,"stem":123121,"__hash__":123122},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122771,"toc":123110},[122772,122775,122779,122783,122787,122792,122799,122803,123096,123100,123107],[10,122773,122769],{"id":122774},"_6-拓展功能",[14,122776,122778],{"id":122777},"_61-wine","6.1 Wine",[14,122780,122782],{"id":122781},"_62-android","6.2 Android",[1233,122784,122786],{"id":122785},"_621-i卡a卡","6.2.1 I卡、A卡",[19,122788,122789],{},[22,122790,122791],{},"Wayland-Waydroid(体验超级好)",[40,122793,122794,122795],{},"Waydroid 官网与安装指南：",[981,122796,122797],{"href":122797,"rel":122798},"https:\u002F\u002Fwaydro.id\u002F",[24828],[1233,122800,122802],{"id":122801},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[19,122804,122805],{},[22,122806,122807,122808,122810,122811,122815,122817,122820,122825,123022],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54680,122809],{},"BlissOS 官网下载：",[981,122812,122813],{"href":122813,"rel":122814},"https:\u002F\u002Fblissos.org\u002F",[24828],[54680,122816],{},[2564,122818],{"alt":35,"src":122819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[19,122821,122822],{"start":93},[22,122823,122824],{},"比较推荐的配置",[29,122826,122828],{"className":118260,"code":122827,"language":118262,"meta":35,"style":35},"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",[37,122829,122830,122837,122847,122857,122867,122879,122889,122896,122906,122915,122924,122934,122944,122953,122963,122973,122985,122995,123004,123014],{"__ignoreMap":35},[51,122831,122832,122835],{"class":53,"line":54},[51,122833,122834],{"class":68},"qemu-system-x86_64",[51,122836,25642],{"class":175},[51,122838,122839,122842,122845],{"class":53,"line":61},[51,122840,122841],{"class":175},"        -M",[51,122843,122844],{"class":282}," q35,vmport=off",[51,122846,25642],{"class":175},[51,122848,122849,122852,122855],{"class":53,"line":93},[51,122850,122851],{"class":175},"        -accel",[51,122853,122854],{"class":282}," kvm",[51,122856,25642],{"class":175},[51,122858,122859,122862,122865],{"class":53,"line":99},[51,122860,122861],{"class":175},"        -cpu",[51,122863,122864],{"class":282}," qemu64,+sse3,+sse4.2",[51,122866,25642],{"class":175},[51,122868,122869,122872,122875,122877],{"class":53,"line":120},[51,122870,122871],{"class":175},"        -smp",[51,122873,122874],{"class":282}," 8,cores=",[51,122876,1543],{"class":175},[51,122878,25642],{"class":175},[51,122880,122881,122884,122887],{"class":53,"line":129},[51,122882,122883],{"class":175},"        -m",[51,122885,122886],{"class":282}," 6G",[51,122888,25642],{"class":175},[51,122890,122891,122894],{"class":53,"line":206},[51,122892,122893],{"class":175},"        -usb",[51,122895,25642],{"class":175},[51,122897,122898,122901,122904],{"class":53,"line":212},[51,122899,122900],{"class":175},"        -device",[51,122902,122903],{"class":282}," virtio-tablet",[51,122905,25642],{"class":175},[51,122907,122908,122910,122913],{"class":53,"line":227},[51,122909,122900],{"class":175},[51,122911,122912],{"class":282}," virtio-keyboard",[51,122914,25642],{"class":175},[51,122916,122917,122919,122922],{"class":53,"line":370},[51,122918,122900],{"class":175},[51,122920,122921],{"class":282}," usb-tablet",[51,122923,25642],{"class":175},[51,122925,122926,122929,122932],{"class":53,"line":387},[51,122927,122928],{"class":175},"        -bios",[51,122930,122931],{"class":282}," OVMF-pure-efi64.fd",[51,122933,25642],{"class":175},[51,122935,122936,122939,122942],{"class":53,"line":404},[51,122937,122938],{"class":175},"        -net",[51,122940,122941],{"class":282}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[51,122943,25642],{"class":175},[51,122945,122946,122948,122951],{"class":53,"line":415},[51,122947,122938],{"class":175},[51,122949,122950],{"class":282}," nic,model=virtio",[51,122952,25642],{"class":175},[51,122954,122955,122958,122961],{"class":53,"line":420},[51,122956,122957],{"class":175},"        -audio",[51,122959,122960],{"class":282}," sdl,model=hda",[51,122962,25642],{"class":175},[51,122964,122965,122968,122971],{"class":53,"line":429},[51,122966,122967],{"class":175},"        -display",[51,122969,122970],{"class":282}," sdl,gl=on,show-cursor=on",[51,122972,25642],{"class":175},[51,122974,122975,122977,122980,122983],{"class":53,"line":434},[51,122976,122900],{"class":175},[51,122978,122979],{"class":282}," virtio-vga-gl,xres=1920,yres=",[51,122981,122982],{"class":175},"1080",[51,122984,25642],{"class":175},[51,122986,122987,122990,122993],{"class":53,"line":448},[51,122988,122989],{"class":175},"        -drive",[51,122991,122992],{"class":282}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[51,122994,25642],{"class":175},[51,122996,122997,122999,123002],{"class":53,"line":462},[51,122998,122989],{"class":175},[51,123000,123001],{"class":282}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[51,123003,25642],{"class":175},[51,123005,123006,123009,123012],{"class":53,"line":470},[51,123007,123008],{"class":175},"        -monitor",[51,123010,123011],{"class":282}," stdio",[51,123013,25642],{"class":175},[51,123015,123016,123019],{"class":53,"line":2783},[51,123017,123018],{"class":175},"        -serial",[51,123020,123021],{"class":282}," none\n",[19,123023,123024],{"start":120},[22,123025,123026,123027],{},"常用操作：",[19,123028,123029,123032,123088],{},[22,123030,123031],{},"全屏：Ctrl+Alt+F",[22,123033,123034,123035,123040],{},"adb调试",[19,123036,123037],{},[22,123038,123039],{},"使Linux与Android用ADB连接。",[29,123041,123043],{"className":118260,"code":123042,"language":118262,"meta":35,"style":35},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[37,123044,123045,123050,123061,123066,123078,123083],{"__ignoreMap":35},[51,123046,123047],{"class":53,"line":54},[51,123048,123049],{"class":57},"# 连接安卓\n",[51,123051,123052,123055,123058],{"class":53,"line":61},[51,123053,123054],{"class":68},"adb",[51,123056,123057],{"class":282}," connect",[51,123059,123060],{"class":175}," 127.0.0.1\n",[51,123062,123063],{"class":53,"line":93},[51,123064,123065],{"class":57},"# 打开shell\n",[51,123067,123068,123070,123072,123075],{"class":53,"line":99},[51,123069,123054],{"class":68},[51,123071,27847],{"class":175},[51,123073,123074],{"class":282}," 127.0.0.1:5555",[51,123076,123077],{"class":282}," shell\n",[51,123079,123080],{"class":53,"line":120},[51,123081,123082],{"class":57},"# 使用root权限\n",[51,123084,123085],{"class":53,"line":129},[51,123086,123087],{"class":68},"su\n",[22,123089,123090,123091],{},"中文输入法",[19,123092,123093],{},[22,123094,123095],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123097,123099],{"id":123098},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[40,123101,123102,123103],{},"rEFInd 官网与文档：",[981,123104,123105],{"href":123105,"rel":123106},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24828],[1179,123108,123109],{},"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":35,"searchDepth":61,"depth":61,"links":123111},[123112,123113,123117],{"id":122777,"depth":61,"text":122778},{"id":122781,"depth":61,"text":122782,"children":123114},[123115,123116],{"id":122785,"depth":93,"text":122786},{"id":122801,"depth":93,"text":122802},{"id":123098,"depth":61,"text":123099},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122769,"description":24339},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123124,"title":123125,"body":123126,"description":24339,"extension":1190,"meta":126425,"navigation":1192,"path":126426,"seo":126427,"stem":126428,"__hash__":126429},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123127,"toc":126399},[123128,123131,123135,123138,123145,123395,123398,123470,123473,123477,123481,123486,123489,123492,123495,123500,123503,123506,123509,123514,123517,123522,123525,123528,123533,123536,123541,123544,123548,123552,123555,123560,123563,123577,123580,123583,123592,123595,123604,123607,123610,123619,123622,123631,123634,123637,123646,123649,123652,123667,123670,123673,123682,123687,123690,123693,123702,123705,123714,123717,123726,123729,123738,123743,123746,123754,123759,123762,123771,123774,123782,123787,123790,123799,123802,123805,123809,123812,123817,123820,123825,123839,123844,123849,123860,123865,123871,123876,123891,123896,123899,123904,123909,123914,123922,123927,123934,123939,123950,123955,123958,123962,123965,123968,123973,123976,123995,124000,124003,124012,124017,124020,124042,124045,124075,124078,124083,124086,124100,124105,124124,124127,124130,124135,124147,124152,124157,124160,124165,124168,124183,124186,124191,124196,124200,124205,124245,124248,124252,124258,124264,124269,124272,124279,124284,124291,124294,124297,124304,124318,124321,124381,124384,124398,124410,124413,124416,124419,124483,124486,124489,124492,124512,124515,124520,124527,124531,124534,124538,124543,124548,124552,124555,124558,124600,124605,124608,124630,124645,124647,124652,124664,124724,124726,124728,124782,124784,124786,124792,124797,124800,124805,124809,124812,124874,124879,124882,124884,124888,124900,124982,124984,124986,125040,125046,125048,125052,125057,125059,125064,125068,125088,125123,125127,125130,125133,125136,125143,125146,125158,125161,125176,125179,125198,125246,125249,125266,125269,125283,125288,125291,125300,125315,125327,125365,125370,125379,125384,125389,125415,125424,125428,125432,125437,125440,125444,125448,125453,125456,125461,125464,125469,125472,125477,125480,125484,125489,125492,125497,125500,125504,125509,125512,125517,125520,125525,125528,125532,125537,125540,125545,125548,125553,125556,125560,125565,125568,125573,125576,125581,125584,125589,125592,125597,125600,125605,125608,125612,125617,125620,125625,125632,125636,125641,125644,125649,125652,125656,125661,125664,125667,125670,125673,125676,125680,125683,125693,125698,125703,125725,125730,125735,125742,125746,125751,125754,125757,125762,125765,125768,125771,125774,125777,125780,125783,125786,125789,125792,125795,125798,125803,125808,125813,125818,125823,125828,125833,125836,125840,125843,125847,125852,125857,125862,125867,125871,125877,125885,125890,125893,125898,125913,125916,125921,125955,125970,125973,126028,126054,126066,126069,126078,126081,126096,126101,126104,126110,126115,126118,126123,126126,126131,126136,126143,126146,126161,126164,126199,126204,126212,126250,126253,126256,126261,126264,126269,126280,126314,126319,126322,126331,126336,126342,126345,126350,126359,126364,126367,126370,126375,126383,126386,126391,126396],[10,123129,123125],{"id":123130},"_7-其他操作",[14,123132,123134],{"id":123133},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[40,123136,123137],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[40,123139,123140,123141,123144],{},"进入工控机的硬盘目录，进入",[37,123142,123143],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[29,123146,123150],{"className":123147,"code":123148,"language":123149,"meta":35,"style":35},"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",[37,123151,123152,123160,123171,123178,123185,123197,123204,123216,123227,123238,123245,123252,123259,123271,123283,123290,123302,123314,123321,123333,123345,123357,123368,123375,123386],{"__ignoreMap":35},[51,123153,123154,123157],{"class":53,"line":54},[51,123155,123156],{"class":52264},"network",[51,123158,123159],{"class":72},": \n",[51,123161,123162,123165,123167,123169],{"class":53,"line":61},[51,123163,123164],{"class":52264},"  version",[51,123166,52401],{"class":72},[51,123168,1334],{"class":175},[51,123170,3754],{"class":72},[51,123172,123173,123176],{"class":53,"line":93},[51,123174,123175],{"class":52264},"  wifis",[51,123177,123159],{"class":72},[51,123179,123180,123183],{"class":53,"line":99},[51,123181,123182],{"class":52264},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[51,123184,123159],{"class":72},[51,123186,123187,123190,123192,123195],{"class":53,"line":120},[51,123188,123189],{"class":52264},"      renderer",[51,123191,52401],{"class":72},[51,123193,123194],{"class":282},"NetworkManager",[51,123196,3754],{"class":72},[51,123198,123199,123202],{"class":53,"line":129},[51,123200,123201],{"class":52264},"      match",[51,123203,123159],{"class":72},[51,123205,123206,123209,123211,123214],{"class":53,"line":206},[51,123207,123208],{"class":52264},"        name",[51,123210,52401],{"class":72},[51,123212,123213],{"class":282},"\"wlan0\"",[51,123215,3754],{"class":72},[51,123217,123218,123221,123223,123225],{"class":53,"line":212},[51,123219,123220],{"class":52264},"      dhcp4",[51,123222,52401],{"class":72},[51,123224,2467],{"class":175},[51,123226,3754],{"class":72},[51,123228,123229,123232,123234,123236],{"class":53,"line":227},[51,123230,123231],{"class":52264},"      dhcp6",[51,123233,52401],{"class":72},[51,123235,2467],{"class":175},[51,123237,3754],{"class":72},[51,123239,123240,123243],{"class":53,"line":370},[51,123241,123242],{"class":52264},"      access-points",[51,123244,123159],{"class":72},[51,123246,123247,123250],{"class":53,"line":387},[51,123248,123249],{"class":282},"        \"EMIS_Vinci_Robocon_5G\"",[51,123251,123159],{"class":72},[51,123253,123254,123257],{"class":53,"line":404},[51,123255,123256],{"class":52264},"          auth",[51,123258,123159],{"class":72},[51,123260,123261,123264,123266,123269],{"class":53,"line":415},[51,123262,123263],{"class":52264},"            key-management",[51,123265,52401],{"class":72},[51,123267,123268],{"class":282},"\"psk\"",[51,123270,3754],{"class":72},[51,123272,123273,123276,123278,123281],{"class":53,"line":420},[51,123274,123275],{"class":52264},"            password",[51,123277,52401],{"class":72},[51,123279,123280],{"class":282},"\"vinci666\"",[51,123282,3754],{"class":72},[51,123284,123285,123288],{"class":53,"line":429},[51,123286,123287],{"class":52264},"          networkmanager",[51,123289,123159],{"class":72},[51,123291,123292,123295,123297,123300],{"class":53,"line":434},[51,123293,123294],{"class":52264},"            uuid",[51,123296,52401],{"class":72},[51,123298,123299],{"class":282},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[51,123301,3754],{"class":72},[51,123303,123304,123307,123309,123312],{"class":53,"line":448},[51,123305,123306],{"class":52264},"            name",[51,123308,52401],{"class":72},[51,123310,123311],{"class":282},"\"EMIS_Vinci_Robocon_5G\"",[51,123313,3754],{"class":72},[51,123315,123316,123319],{"class":53,"line":462},[51,123317,123318],{"class":52264},"            passthrough",[51,123320,123159],{"class":72},[51,123322,123323,123326,123328,123331],{"class":53,"line":470},[51,123324,123325],{"class":52264},"              wifi-security.auth-alg",[51,123327,52401],{"class":72},[51,123329,123330],{"class":282},"\"open\"",[51,123332,3754],{"class":72},[51,123334,123335,123338,123340,123343],{"class":53,"line":2783},[51,123336,123337],{"class":52264},"              ipv6.addr-gen-mode",[51,123339,52401],{"class":72},[51,123341,123342],{"class":282},"\"default\"",[51,123344,3754],{"class":72},[51,123346,123347,123350,123352,123355],{"class":53,"line":2788},[51,123348,123349],{"class":52264},"              ipv6.ip6-privacy",[51,123351,52401],{"class":72},[51,123353,123354],{"class":282},"\"-1\"",[51,123356,3754],{"class":72},[51,123358,123359,123362,123364,123366],{"class":53,"line":2817},[51,123360,123361],{"class":52264},"              proxy._",[51,123363,52401],{"class":72},[51,123365,8614],{"class":282},[51,123367,3754],{"class":72},[51,123369,123370,123373],{"class":53,"line":2822},[51,123371,123372],{"class":52264},"      networkmanager",[51,123374,123159],{"class":72},[51,123376,123377,123380,123382,123384],{"class":53,"line":2839},[51,123378,123379],{"class":52264},"        uuid",[51,123381,52401],{"class":72},[51,123383,123299],{"class":282},[51,123385,3754],{"class":72},[51,123387,123388,123390,123392],{"class":53,"line":2844},[51,123389,123208],{"class":52264},[51,123391,52401],{"class":72},[51,123393,123394],{"class":282},"\"EMIS_Vinci_Robocon_5G\"\n",[40,123396,123397],{},"将其改为新wifi的名和密码：",[29,123399,123401],{"className":123147,"code":123400,"language":123149,"meta":35,"style":35},"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",[37,123402,123403,123409,123418,123424,123431,123440,123448,123454,123460],{"__ignoreMap":35},[51,123404,123405,123407],{"class":53,"line":54},[51,123406,123156],{"class":52264},[51,123408,4816],{"class":72},[51,123410,123411,123413,123415],{"class":53,"line":61},[51,123412,123164],{"class":52264},[51,123414,52401],{"class":72},[51,123416,123417],{"class":175},"2\n",[51,123419,123420,123422],{"class":53,"line":93},[51,123421,123175],{"class":52264},[51,123423,4816],{"class":72},[51,123425,123426,123429],{"class":53,"line":99},[51,123427,123428],{"class":52264},"    wlan0",[51,123430,4816],{"class":72},[51,123432,123433,123435,123437],{"class":53,"line":120},[51,123434,123220],{"class":52264},[51,123436,52401],{"class":72},[51,123438,123439],{"class":175},"true\n",[51,123441,123442,123444,123446],{"class":53,"line":129},[51,123443,123231],{"class":52264},[51,123445,52401],{"class":72},[51,123447,123439],{"class":175},[51,123449,123450,123452],{"class":53,"line":206},[51,123451,123242],{"class":52264},[51,123453,4816],{"class":72},[51,123455,123456,123458],{"class":53,"line":212},[51,123457,123249],{"class":282},[51,123459,4816],{"class":72},[51,123461,123462,123465,123467],{"class":53,"line":227},[51,123463,123464],{"class":52264},"          password",[51,123466,52401],{"class":72},[51,123468,123469],{"class":282},"\"vinci666\"\n",[40,123471,123472],{},"工控机开机即可连上网。",[14,123474,123476],{"id":123475},"_72-ssh远程开发","7.2 SSH远程开发",[1233,123478,123480],{"id":123479},"_721-环境准备","7.2.1 环境准备",[40,123482,123483],{},[840,123484,123485],{},"1.硬件准备",[40,123487,123488],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[40,123490,123491],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[40,123493,123494],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[40,123496,123497],{},[840,123498,123499],{},"2.设置固定IP",[40,123501,123502],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[40,123504,123505],{},"1.进入设置界面",[40,123507,123508],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[40,123510,123511],{},[2564,123512],{"alt":35,"src":123513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[40,123515,123516],{},"2.配置所连接的网络",[40,123518,123519],{},[2564,123520],{"alt":35,"src":123521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[40,123523,123524],{},"3.设置固定IP",[40,123526,123527],{},"查看当前IP地址。",[40,123529,123530],{},[2564,123531],{"alt":35,"src":123532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[40,123534,123535],{},"设置固定IP。",[40,123537,123538],{},[2564,123539],{"alt":35,"src":123540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[40,123542,123543],{},"至此，IP配置完毕。",[1233,123545,123547],{"id":123546},"_722-环境搭建","7.2.2 环境搭建",[40,123549,123550],{},[840,123551,26717],{},[40,123553,123554],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[40,123556,123557],{},[840,123558,123559],{},"实现",[40,123561,123562],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[19,123564,123565,123568,123571,123574],{},[22,123566,123567],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[22,123569,123570],{},"远程主机启动SSH服务；",[22,123572,123573],{},"本地主机登陆远程主机；",[22,123575,123576],{},"实现数据传输。",[40,123578,123579],{},"1.安装SSH客户端与服务端",[40,123581,123582],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[29,123584,123586],{"className":121780,"code":123585,"language":121782,"meta":121783,"style":35}," sudo apt install openssh-server\n",[37,123587,123588],{"__ignoreMap":35},[51,123589,123590],{"class":53,"line":54},[51,123591,123585],{},[40,123593,123594],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[29,123596,123598],{"className":121780,"code":123597,"language":121782,"meta":121783,"style":35},"sudo apt install openssh-client\n",[37,123599,123600],{"__ignoreMap":35},[51,123601,123602],{"class":53,"line":54},[51,123603,123597],{},[40,123605,123606],{},"2.远程主机启动SSH服务",[40,123608,123609],{},"远程主机启动 ssh 服务命令如下：",[29,123611,123613],{"className":121780,"code":123612,"language":121782,"meta":121783,"style":35},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[37,123614,123615],{"__ignoreMap":35},[51,123616,123617],{"class":53,"line":54},[51,123618,123612],{},[40,123620,123621],{},"启动后可使用如下命令查看服务是否正常运行：",[29,123623,123625],{"className":121780,"code":123624,"language":121782,"meta":121783,"style":35},"ps -e | grep ssh\n",[37,123626,123627],{"__ignoreMap":35},[51,123628,123629],{"class":53,"line":54},[51,123630,123624],{},[40,123632,123633],{},"如果启动成功，会包含 sshd 程序。",[40,123635,123636],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[29,123638,123640],{"className":121780,"code":123639,"language":121782,"meta":121783,"style":35},"sudo systemctl enable ssh\n",[37,123641,123642],{"__ignoreMap":35},[51,123643,123644],{"class":53,"line":54},[51,123645,123639],{},[40,123647,123648],{},"3.本地远程登录",[40,123650,123651],{},"登录远程主机可以调用如下命令:",[29,123653,123655],{"className":118260,"code":123654,"language":118262,"meta":35,"style":35},"ssh -X 用户名@ip地址\n",[37,123656,123657],{"__ignoreMap":35},[51,123658,123659,123661,123664],{"class":53,"line":54},[51,123660,122611],{"class":68},[51,123662,123663],{"class":175}," -X",[51,123665,123666],{"class":282}," 用户名@ip地址\n",[40,123668,123669],{},"然后根据提示，录入登陆密码，即可成功登录。",[40,123671,123672],{},"如果退出，可以调用exit命令：",[29,123674,123676],{"className":121780,"code":123675,"language":121782,"meta":121783,"style":35},"exit\n",[37,123677,123678],{"__ignoreMap":35},[51,123679,123680],{"class":53,"line":54},[51,123681,123675],{},[40,123683,123684],{},[840,123685,123686],{},"4.实现数据传输",[40,123688,123689],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[40,123691,123692],{},"上传文件指令格式如下：",[29,123694,123696],{"className":121780,"code":123695,"language":121782,"meta":121783,"style":35},"scp 本地文件路径 账号@ip:路径\n",[37,123697,123698],{"__ignoreMap":35},[51,123699,123700],{"class":53,"line":54},[51,123701,123695],{},[40,123703,123704],{},"上传文件夹指令格式如下：",[29,123706,123708],{"className":121780,"code":123707,"language":121782,"meta":121783,"style":35},"scp -r 本地文件夹路径 账号@ip:路径\n",[37,123709,123710],{"__ignoreMap":35},[51,123711,123712],{"class":53,"line":54},[51,123713,123707],{},[40,123715,123716],{},"下载文件指令格式如下：",[29,123718,123720],{"className":121780,"code":123719,"language":121782,"meta":121783,"style":35},"scp 账号@ip:路径 本地文件夹路径\n",[37,123721,123722],{"__ignoreMap":35},[51,123723,123724],{"class":53,"line":54},[51,123725,123719],{},[40,123727,123728],{},"下载文件夹指令格式如下：",[29,123730,123732],{"className":121780,"code":123731,"language":121782,"meta":121783,"style":35},"scp -r 账号@ip:路径 本地文件夹路径\n",[37,123733,123734],{"__ignoreMap":35},[51,123735,123736],{"class":53,"line":54},[51,123737,123731],{},[40,123739,123740],{},[840,123741,123742],{},"优化",[40,123744,123745],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[19,123747,123748,123751],{},[22,123749,123750],{},"本地生成密钥对；",[22,123752,123753],{},"将公钥上传至远程主机。",[40,123755,123756],{},[840,123757,123758],{},"1.生成密钥对",[40,123760,123761],{},"本地客户端生成公私钥：（一路回车默认即可）",[29,123763,123765],{"className":121780,"code":123764,"language":121782,"meta":121783,"style":35},"ssh-keygen\n",[37,123766,123767],{"__ignoreMap":35},[51,123768,123769],{"class":53,"line":54},[51,123770,123764],{},[40,123772,123773],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[19,123775,123776,123779],{},[22,123777,123778],{},"id_rsa （私钥）；",[22,123780,123781],{},"id_rsa.pub (公钥)。",[40,123783,123784],{},[840,123785,123786],{},"2.公钥上传",[40,123788,123789],{},"上传指令如下：",[29,123791,123793],{"className":121780,"code":123792,"language":121782,"meta":121783,"style":35},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[37,123794,123795],{"__ignoreMap":35},[51,123796,123797],{"class":53,"line":54},[51,123798,123792],{},[40,123800,123801],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[40,123803,123804],{},"以后再远程登录就无需录入密码了。",[1233,123806,123808],{"id":123807},"_723-使用vscode优化","7.2.3 使用VScode优化",[40,123810,123811],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[40,123813,123814],{},[840,123815,123816],{},"1.准备工作",[40,123818,123819],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[40,123821,123822],{},[840,123823,123824],{},"2.为VScode安装远程开发插件",[40,123826,123827,123828,123831,123832,123835,123836,29349],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[37,123829,123830],{},"扩展：商店","的搜索栏输入",[37,123833,123834],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[37,123837,123838],{},"安装",[40,123840,123841],{},[2564,123842],{"alt":35,"src":123843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[40,123845,123846],{},[840,123847,123848],{},"3.配置远程连接",[40,123850,123851,123852,123855,123856,123859],{},"步骤1：使用快捷键",[37,123853,123854],{},"ctrl + shift + p","打开命令输入窗口，并输入",[37,123857,123858],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[40,123861,123862],{},[2564,123863],{"alt":35,"src":123864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[40,123866,123867,123868,29349],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[37,123869,123870],{},"Add New SSH Host",[40,123872,123873],{},[2564,123874],{"alt":35,"src":123875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[40,123877,123878,123879,123882,123883,123886,123887,123890],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[37,123880,123881],{},"ssh +X ubuntu@192.168.43.164","，其中，",[37,123884,123885],{},"ubuntu","需要替换为你的登录用户名，",[37,123888,123889],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[40,123892,123893],{},[2564,123894],{"alt":35,"src":123895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[40,123897,123898],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[40,123900,123901],{},[2564,123902],{"alt":35,"src":123903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[40,123905,123906],{},[2564,123907],{"alt":35,"src":123908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[40,123910,123911],{},[840,123912,123913],{},"4.使用",[40,123915,123916,123917,123855,123919,123921],{},"步骤1：继续使用快捷键",[37,123918,123854],{},[37,123920,123858],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[40,123923,123924],{},[2564,123925],{"alt":35,"src":123926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[40,123928,123929,123930,123933],{},"或者，也可以点击侧边栏的",[37,123931,123932],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[40,123935,123936],{},[2564,123937],{"alt":35,"src":123938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[40,123940,123941,123942,123945,123946,123949],{},"步骤2：选择菜单栏的",[37,123943,123944],{},"文件","下的",[37,123947,123948],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[40,123951,123952],{},[2564,123953],{"alt":35,"src":123954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[40,123956,123957],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123959,123961],{"id":123960},"_73-远程桌面","7.3 远程桌面",[40,123963,123964],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[40,123966,123967],{},"我们选择使用VNC来看。",[19,123969,123970],{},[22,123971,123972],{},"安装VNC服务器：",[40,123974,123975],{},"这里以TigerVNC为例进行安装：",[29,123977,123979],{"className":118260,"code":123978,"language":118262,"meta":35,"style":35},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[37,123980,123981],{"__ignoreMap":35},[51,123982,123983,123985,123987,123989,123992],{"class":53,"line":54},[51,123984,25540],{"class":68},[51,123986,118281],{"class":282},[51,123988,24797],{"class":282},[51,123990,123991],{"class":282}," tigervnc-standalone-server",[51,123993,123994],{"class":282}," tigervnc-common\n",[19,123996,123997],{"start":61},[22,123998,123999],{},"设置VNC密码：",[40,124001,124002],{},"为VNC用户设置密码，运行以下命令：",[29,124004,124006],{"className":118260,"code":124005,"language":118262,"meta":35,"style":35},"vncpasswd\n",[37,124007,124008],{"__ignoreMap":35},[51,124009,124010],{"class":53,"line":54},[51,124011,124005],{"class":68},[19,124013,124014],{"start":93},[22,124015,124016],{},"配置VNC启动脚本:",[40,124018,124019],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[29,124021,124023],{"className":118260,"code":124022,"language":118262,"meta":35,"style":35},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[37,124024,124025,124034],{"__ignoreMap":35},[51,124026,124027,124029,124031],{"class":53,"line":54},[51,124028,102230],{"class":68},[51,124030,30180],{"class":175},[51,124032,124033],{"class":282}," ~\u002F.vnc\n",[51,124035,124036,124039],{"class":53,"line":61},[51,124037,124038],{"class":68},"nano",[51,124040,124041],{"class":282}," ~\u002F.vnc\u002Fxstartup\n",[40,124043,124044],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[29,124046,124048],{"className":118260,"code":124047,"language":118262,"meta":35,"style":35},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[37,124049,124050,124055,124063,124070],{"__ignoreMap":35},[51,124051,124052],{"class":53,"line":54},[51,124053,124054],{"class":57},"#!\u002Fbin\u002Fsh\n",[51,124056,124057,124060],{"class":53,"line":61},[51,124058,124059],{"class":175},"unset",[51,124061,124062],{"class":282}," SESSION_MANAGER\n",[51,124064,124065,124067],{"class":53,"line":93},[51,124066,124059],{"class":175},[51,124068,124069],{"class":282}," DBUS_SESSION_BUS_ADDRESS\n",[51,124071,124072],{"class":53,"line":99},[51,124073,124074],{"class":68},"gnome-session\n",[40,124076,124077],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[19,124079,124080],{"start":99},[22,124081,124082],{},"给予执行权限：",[40,124084,124085],{},"为xstartup文件设置执行权限：",[29,124087,124089],{"className":118260,"code":124088,"language":118262,"meta":35,"style":35},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[37,124090,124091],{"__ignoreMap":35},[51,124092,124093,124095,124098],{"class":53,"line":54},[51,124094,25575],{"class":68},[51,124096,124097],{"class":282}," +x",[51,124099,124041],{"class":282},[19,124101,124102],{"start":120},[22,124103,124104],{},"启动VNC服务器：",[29,124106,124108],{"className":118260,"code":124107,"language":118262,"meta":35,"style":35},"vncserver -geometry 1920x1080 -localhost=0\n",[37,124109,124110],{"__ignoreMap":35},[51,124111,124112,124115,124118,124121],{"class":53,"line":54},[51,124113,124114],{"class":68},"vncserver",[51,124116,124117],{"class":175}," -geometry",[51,124119,124120],{"class":282}," 1920x1080",[51,124122,124123],{"class":175}," -localhost=0\n",[40,124125,124126],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[40,124128,124129],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[19,124131,124132],{"start":129},[22,124133,124134],{},"查看已开启的VNC服务器：",[29,124136,124138],{"className":118260,"code":124137,"language":118262,"meta":35,"style":35},"vncserver -list\n",[37,124139,124140],{"__ignoreMap":35},[51,124141,124142,124144],{"class":53,"line":54},[51,124143,124114],{"class":68},[51,124145,124146],{"class":175}," -list\n",[40,124148,124149],{},[2564,124150],{"alt":35,"src":124151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[19,124153,124154],{"start":206},[22,124155,124156],{},"连接到VNC服务器：",[40,124158,124159],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[19,124161,124162],{"start":212},[22,124163,124164],{},"停止VNC服务器：",[40,124166,124167],{},"如果需要停止VNC服务器，可以使用以下命令：",[29,124169,124171],{"className":118260,"code":124170,"language":118262,"meta":35,"style":35},"vncserver -kill :1\n",[37,124172,124173],{"__ignoreMap":35},[51,124174,124175,124177,124180],{"class":53,"line":54},[51,124176,124114],{"class":68},[51,124178,124179],{"class":175}," -kill",[51,124181,124182],{"class":282}," :1\n",[40,124184,124185],{},"将:1替换为你实际使用的显示编号。",[40,124187,124188],{},[2564,124189],{"alt":35,"src":124190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[40,124192,124193],{},[2564,124194],{"alt":35,"src":124195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124197,124199],{"id":124198},"_74-usb端口设置","7.4 USB端口设置",[40,124201,124202],{},[840,124203,124204],{},"首先先配置好权限",[29,124206,124208],{"className":118260,"code":124207,"language":118262,"meta":35,"style":35},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[37,124209,124210,124215,124228,124235,124240],{"__ignoreMap":35},[51,124211,124212],{"class":53,"line":54},[51,124213,124214],{"class":57},"# 将用户权限提高\n",[51,124216,124217,124219,124221,124223,124226],{"class":53,"line":61},[51,124218,25540],{"class":68},[51,124220,27538],{"class":282},[51,124222,27541],{"class":175},[51,124224,124225],{"class":282}," dialout",[51,124227,27546],{"class":72},[51,124229,124230,124232],{"class":53,"line":93},[51,124231,27565],{"class":68},[51,124233,124234],{"class":282}," dialout\n",[51,124236,124237],{"class":53,"line":99},[51,124238,124239],{"class":57},"# 查看下面命令是否输出dialout（若输出才正常）\n",[51,124241,124242],{"class":53,"line":120},[51,124243,124244],{"class":68},"groups\n",[40,124246,124247],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[1233,124249,124251],{"id":124250},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[40,124253,124254,124257],{},[840,124255,124256],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[40,124259,124260,124263],{},[840,124261,124262],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[40,124265,124266],{},[840,124267,124268],{},"流程如下：",[40,124270,124271],{},"（1）.查找设备idVendor和idProduct",[40,124273,124274,124275,124278],{},"接入两个USB设备，在终端调用指令",[37,124276,124277],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[40,124280,124281],{},[2564,124282],{"alt":35,"src":124283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[40,124285,124286,124287,124290],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[37,124288,124289],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[40,124292,124293],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[40,124295,124296],{},"（2）.编写映射规则",[40,124298,124299,124300,124303],{},"在",[37,124301,124302],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[29,124305,124307],{"className":118260,"code":124306,"language":118262,"meta":35,"style":35},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[37,124308,124309],{"__ignoreMap":35},[51,124310,124311,124313,124315],{"class":53,"line":54},[51,124312,25540],{"class":68},[51,124314,119547],{"class":282},[51,124316,124317],{"class":282}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[40,124319,124320],{},"输入如下内容：",[29,124322,124324],{"className":118260,"code":124323,"language":118262,"meta":35,"style":35},"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",[37,124325,124326,124356],{"__ignoreMap":35},[51,124327,124328,124331,124333,124336,124339,124342,124345,124347,124350,124353],{"class":53,"line":54},[51,124329,124330],{"class":72},"KERNEL",[51,124332,108],{"class":64},[51,124334,124335],{"class":282},"=\"ttyUSB*\",",[51,124337,124338],{"class":68}," ATTRS",[51,124340,124341],{"class":282},"{idVendor}==",[51,124343,124344],{"class":68},"\"10c4\"",[51,124346,82],{"class":68},[51,124348,124349],{"class":282}," ATTRS{idProduct}==\"ea60\",",[51,124351,124352],{"class":282}," MODE:=\"0777\",",[51,124354,124355],{"class":282}," SYMLINK+=\"mylidar\"\n",[51,124357,124358,124360,124362,124364,124366,124368,124371,124373,124376,124378],{"class":53,"line":61},[51,124359,124330],{"class":72},[51,124361,108],{"class":64},[51,124363,124335],{"class":282},[51,124365,124338],{"class":68},[51,124367,124341],{"class":282},[51,124369,124370],{"class":68},"\"1a86\"",[51,124372,82],{"class":68},[51,124374,124375],{"class":282}," ATTRS{idProduct}==\"7523\",",[51,124377,124352],{"class":282},[51,124379,124380],{"class":282}," SYMLINK+=\"mycar\"\n",[40,124382,124383],{},"代码解释：",[1000,124385,124386,124389,124392,124395],{},[22,124387,124388],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[22,124390,124391],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[22,124393,124394],{},"SYMLINK是符号连接，即绑定的别名；",[22,124396,124397],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[40,124399,124400,124401,124404,124407],{},"***小提示：***",[24516,124402,124403],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[37,124405,124406],{},"\u002Fetc\u002Fudev\u002Frule.d",[24516,124408,124409],{},"目录即可。",[40,124411,124412],{},"表格 还在加载中，请等待加载完成后再尝试复制",[40,124414,124415],{},"（3）.使规则生效",[40,124417,124418],{},"在终端下输入如下指令：",[29,124420,124422],{"className":118260,"code":124421,"language":118262,"meta":35,"style":35},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[37,124423,124424,124429,124441,124452,124456,124461,124474],{"__ignoreMap":35},[51,124425,124426],{"class":53,"line":54},[51,124427,124428],{"class":57},"# Ubuntu用下方命令\n",[51,124430,124431,124433,124435,124438],{"class":53,"line":61},[51,124432,25540],{"class":68},[51,124434,121012],{"class":282},[51,124436,124437],{"class":282}," udev",[51,124439,124440],{"class":282}," reload\n",[51,124442,124443,124445,124447,124449],{"class":53,"line":93},[51,124444,25540],{"class":68},[51,124446,121012],{"class":282},[51,124448,124437],{"class":282},[51,124450,124451],{"class":282}," restart\n",[51,124453,124454],{"class":53,"line":99},[51,124455,3480],{"emptyLinePlaceholder":1192},[51,124457,124458],{"class":53,"line":120},[51,124459,124460],{"class":57},"#Fedora用下方命令\n",[51,124462,124463,124465,124468,124471],{"class":53,"line":129},[51,124464,25540],{"class":68},[51,124466,124467],{"class":282}," udevadm",[51,124469,124470],{"class":282}," control",[51,124472,124473],{"class":175}," --reload\n",[51,124475,124476,124478,124480],{"class":53,"line":206},[51,124477,25540],{"class":68},[51,124479,124467],{"class":282},[51,124481,124482],{"class":282}," trigger\n",[40,124484,124485],{},"再重新插拔设备即可。",[40,124487,124488],{},"（4）.测试",[40,124490,124491],{},"终端下输入如下指令",[29,124493,124495],{"className":118260,"code":124494,"language":118262,"meta":35,"style":35},"ll \u002Fdev | grep ttyUSB\n",[37,124496,124497],{"__ignoreMap":35},[51,124498,124499,124502,124505,124507,124509],{"class":53,"line":54},[51,124500,124501],{"class":68},"ll",[51,124503,124504],{"class":282}," \u002Fdev",[51,124506,26073],{"class":64},[51,124508,31200],{"class":68},[51,124510,124511],{"class":282}," ttyUSB\n",[40,124513,124514],{},"运行结果如下：",[40,124516,124517],{},[2564,124518],{"alt":35,"src":124519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[40,124521,124522,124523,124526],{},"也可以多次插拔USB设备，会发现设备端口",[37,124524,124525],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[40,124528,124529],{},[840,124530,118928],{},[40,124532,124533],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[1233,124535,124537],{"id":124536},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[40,124539,124540,124542],{},[840,124541,124256],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[40,124544,124545,124547],{},[840,124546,124262],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[40,124549,124550],{},[840,124551,124268],{},[40,124553,124554],{},"（1）.查看所连接的主机USB接口的KERNELS",[40,124556,124557],{},"调用如下指令查看第一台雷达的USB信息：",[29,124559,124561],{"className":118260,"code":124560,"language":118262,"meta":35,"style":35},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[37,124562,124563,124583],{"__ignoreMap":35},[51,124564,124565,124568,124570,124573,124576,124578,124580],{"class":53,"line":54},[51,124566,124567],{"class":68},"udevadm",[51,124569,70785],{"class":282},[51,124571,124572],{"class":175}," --attribute-walk",[51,124574,124575],{"class":175}," --name=\u002Fdev\u002FttyUSB0",[51,124577,26073],{"class":64},[51,124579,31200],{"class":68},[51,124581,124582],{"class":282}," KERNELS\n",[51,124584,124585,124587,124589,124591,124594,124596,124598],{"class":53,"line":61},[51,124586,124567],{"class":68},[51,124588,70785],{"class":282},[51,124590,124572],{"class":175},[51,124592,124593],{"class":175}," --name=\u002Fdev\u002FttyACM0",[51,124595,26073],{"class":64},[51,124597,31200],{"class":68},[51,124599,124582],{"class":282},[40,124601,124602],{},[2564,124603],{"alt":35,"src":124604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[40,124606,124607],{},"调用如下指令查看第二台雷达的USB信息：",[29,124609,124611],{"className":118260,"code":124610,"language":118262,"meta":35,"style":35},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[37,124612,124613],{"__ignoreMap":35},[51,124614,124615,124617,124619,124621,124624,124626,124628],{"class":53,"line":54},[51,124616,124567],{"class":68},[51,124618,70785],{"class":282},[51,124620,124572],{"class":175},[51,124622,124623],{"class":175}," --name=\u002Fdev\u002FttyUSB1",[51,124625,26073],{"class":64},[51,124627,31200],{"class":68},[51,124629,124582],{"class":282},[40,124631,124632,124633,124636,124637,124640,124641,124644],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[37,124634,124635],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[37,124638,124639],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[840,124642,124643],{},"唯一性标识","”。",[40,124646,124296],{},[40,124648,124299,124649,124651],{},[37,124650,124302],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[29,124653,124654],{"className":118260,"code":124306,"language":118262,"meta":35,"style":35},[37,124655,124656],{"__ignoreMap":35},[51,124657,124658,124660,124662],{"class":53,"line":54},[51,124659,25540],{"class":68},[51,124661,119547],{"class":282},[51,124663,124317],{"class":282},[29,124665,124667],{"className":118260,"code":124666,"language":118262,"meta":35,"style":35},"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",[37,124668,124669,124698],{"__ignoreMap":35},[51,124670,124671,124673,124675,124677,124680,124682,124685,124688,124690,124693,124695],{"class":53,"line":54},[51,124672,124330],{"class":72},[51,124674,108],{"class":64},[51,124676,124335],{"class":282},[51,124678,124679],{"class":72}," KERNELS",[51,124681,108],{"class":64},[51,124683,124684],{"class":282},"=\"1-1.3:1.0\",",[51,124686,124687],{"class":68}," MODE:",[51,124689,108],{"class":282},[51,124691,124692],{"class":68},"\"0777\"",[51,124694,82],{"class":68},[51,124696,124697],{"class":282}," SYMLINK+=\"rplidar_front\"\n",[51,124699,124700,124702,124704,124706,124708,124710,124713,124715,124717,124719,124721],{"class":53,"line":61},[51,124701,124330],{"class":72},[51,124703,108],{"class":64},[51,124705,124335],{"class":282},[51,124707,124679],{"class":72},[51,124709,108],{"class":64},[51,124711,124712],{"class":282},"=\"1-1.4:1.0\",",[51,124714,124687],{"class":68},[51,124716,108],{"class":282},[51,124718,124692],{"class":68},[51,124720,82],{"class":68},[51,124722,124723],{"class":282}," SYMLINK+=\"rplidar_back\"\n",[40,124725,124415],{},[40,124727,124418],{},[29,124729,124730],{"className":118260,"code":124421,"language":118262,"meta":35,"style":35},[37,124731,124732,124736,124746,124756,124760,124764,124774],{"__ignoreMap":35},[51,124733,124734],{"class":53,"line":54},[51,124735,124428],{"class":57},[51,124737,124738,124740,124742,124744],{"class":53,"line":61},[51,124739,25540],{"class":68},[51,124741,121012],{"class":282},[51,124743,124437],{"class":282},[51,124745,124440],{"class":282},[51,124747,124748,124750,124752,124754],{"class":53,"line":93},[51,124749,25540],{"class":68},[51,124751,121012],{"class":282},[51,124753,124437],{"class":282},[51,124755,124451],{"class":282},[51,124757,124758],{"class":53,"line":99},[51,124759,3480],{"emptyLinePlaceholder":1192},[51,124761,124762],{"class":53,"line":120},[51,124763,124460],{"class":57},[51,124765,124766,124768,124770,124772],{"class":53,"line":129},[51,124767,25540],{"class":68},[51,124769,124467],{"class":282},[51,124771,124470],{"class":282},[51,124773,124473],{"class":175},[51,124775,124776,124778,124780],{"class":53,"line":206},[51,124777,25540],{"class":68},[51,124779,124467],{"class":282},[51,124781,124482],{"class":282},[40,124783,124485],{},[40,124785,124488],{},[40,124787,124491,124788,124791],{},[37,124789,124790],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[40,124793,124794],{},[2564,124795],{"alt":35,"src":124796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[40,124798,124799],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[40,124801,124802,124804],{},[840,124803,118928],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[1233,124806,124808],{"id":124807},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[40,124810,124811],{},"（1）.查看所连接的主机USB接口的信息",[29,124813,124815],{"className":118260,"code":124814,"language":118262,"meta":35,"style":35},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[37,124816,124817,124847],{"__ignoreMap":35},[51,124818,124819,124821,124823,124826,124828,124830,124832,124834,124837,124840,124842,124845],{"class":53,"line":54},[51,124820,124567],{"class":68},[51,124822,70785],{"class":282},[51,124824,124825],{"class":175}," -a",[51,124827,30180],{"class":175},[51,124829,29386],{"class":72},[51,124831,124567],{"class":68},[51,124833,70785],{"class":282},[51,124835,124836],{"class":175}," -q",[51,124838,124839],{"class":282}," path",[51,124841,26079],{"class":175},[51,124843,124844],{"class":282}," \u002Fdev\u002FttyACM0",[51,124846,90],{"class":72},[51,124848,124849,124851,124853,124855,124857,124859,124861,124863,124865,124867,124869,124872],{"class":53,"line":61},[51,124850,124567],{"class":68},[51,124852,70785],{"class":282},[51,124854,124825],{"class":175},[51,124856,30180],{"class":175},[51,124858,29386],{"class":72},[51,124860,124567],{"class":68},[51,124862,70785],{"class":282},[51,124864,124836],{"class":175},[51,124866,124839],{"class":282},[51,124868,26079],{"class":175},[51,124870,124871],{"class":282}," \u002Fdev\u002FttyUSB0",[51,124873,90],{"class":72},[40,124875,124876],{},[2564,124877],{"alt":35,"src":124878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[40,124880,124881],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[40,124883,124296],{},[40,124885,124299,124886,124651],{},[37,124887,124302],{},[29,124889,124890],{"className":118260,"code":124306,"language":118262,"meta":35,"style":35},[37,124891,124892],{"__ignoreMap":35},[51,124893,124894,124896,124898],{"class":53,"line":54},[51,124895,25540],{"class":68},[51,124897,119547],{"class":282},[51,124899,124317],{"class":282},[29,124901,124903],{"className":118260,"code":124902,"language":118262,"meta":35,"style":35},"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",[37,124904,124905,124933,124959],{"__ignoreMap":35},[51,124906,124907,124909,124911,124914,124916,124918,124920,124922,124925,124928,124930],{"class":53,"line":54},[51,124908,124330],{"class":72},[51,124910,108],{"class":64},[51,124912,124913],{"class":282},"=\"ttyACM*\",",[51,124915,124338],{"class":68},[51,124917,124341],{"class":282},[51,124919,124370],{"class":68},[51,124921,82],{"class":68},[51,124923,124924],{"class":282}," ATTRS{idProduct}==\"55d4\",",[51,124926,124927],{"class":282}," ATTRS{serial}==\"0001\",",[51,124929,124352],{"class":282},[51,124931,124932],{"class":282}," SYMLINK+=\"ttyACM_MCU\"\n",[51,124934,124935,124937,124939,124941,124943,124945,124947,124949,124951,124954,124956],{"class":53,"line":61},[51,124936,124330],{"class":72},[51,124938,108],{"class":64},[51,124940,124913],{"class":282},[51,124942,124338],{"class":68},[51,124944,124341],{"class":282},[51,124946,124370],{"class":68},[51,124948,82],{"class":68},[51,124950,124924],{"class":282},[51,124952,124953],{"class":282}," ATTRS{serial}==\"0002\",",[51,124955,124352],{"class":282},[51,124957,124958],{"class":282}," SYMLINK+=\"ttyACM_Lidar\"\n",[51,124960,124961,124963,124965,124967,124969,124971,124973,124975,124977,124979],{"class":53,"line":93},[51,124962,124330],{"class":72},[51,124964,108],{"class":64},[51,124966,124335],{"class":282},[51,124968,124338],{"class":68},[51,124970,124341],{"class":282},[51,124972,124370],{"class":68},[51,124974,82],{"class":68},[51,124976,124375],{"class":282},[51,124978,124352],{"class":282},[51,124980,124981],{"class":282}," SYMLINK+=\"ttyUSB_IMU\"\n",[40,124983,124415],{},[40,124985,124418],{},[29,124987,124988],{"className":118260,"code":124421,"language":118262,"meta":35,"style":35},[37,124989,124990,124994,125004,125014,125018,125022,125032],{"__ignoreMap":35},[51,124991,124992],{"class":53,"line":54},[51,124993,124428],{"class":57},[51,124995,124996,124998,125000,125002],{"class":53,"line":61},[51,124997,25540],{"class":68},[51,124999,121012],{"class":282},[51,125001,124437],{"class":282},[51,125003,124440],{"class":282},[51,125005,125006,125008,125010,125012],{"class":53,"line":93},[51,125007,25540],{"class":68},[51,125009,121012],{"class":282},[51,125011,124437],{"class":282},[51,125013,124451],{"class":282},[51,125015,125016],{"class":53,"line":99},[51,125017,3480],{"emptyLinePlaceholder":1192},[51,125019,125020],{"class":53,"line":120},[51,125021,124460],{"class":57},[51,125023,125024,125026,125028,125030],{"class":53,"line":129},[51,125025,25540],{"class":68},[51,125027,124467],{"class":282},[51,125029,124470],{"class":282},[51,125031,124473],{"class":175},[51,125033,125034,125036,125038],{"class":53,"line":206},[51,125035,25540],{"class":68},[51,125037,124467],{"class":282},[51,125039,124482],{"class":282},[40,125041,125042,125043],{},"再重新插拔设备即可，或者 ",[840,125044,125045],{},"直接重启系统。",[40,125047,124488],{},[40,125049,124491,125050,124791],{},[37,125051,124790],{},[40,125053,125054],{},[2564,125055],{"alt":35,"src":125056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[40,125058,124799],{},[40,125060,125061,125063],{},[840,125062,118928],{}," 一些设备可能没有串口号等。",[1233,125065,125067],{"id":125066},"_744-其他注意事项","7.4.4 其他注意事项",[40,125069,125070,125071,125073,125074,125077,125078,19372,125081,125084,125085,125087],{},"并非所有的USB设备端口号都是",[37,125072,124525],{},"的格式，比如Arduino的端口号可能是",[37,125075,125076],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[37,125079,125080],{},"videon",[37,125082,125083],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[37,125086,125080],{},"端口，绑定时需要关联的也是该接口。",[40,125089,125090,125091,125094,125095,125098,125099,125101,125102,125105,125106,125109,125110,125113,125114,125113,125117,125113,125120,29349],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[37,125092,125093],{},"KERNEL==\"ttyUSB*\"","修改为",[37,125096,125097],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[37,125100,125093],{},"修改为类似于",[37,125103,125104],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[37,125107,125108],{},"video[0,2,4,6]","表示可以绑定的端口为",[37,125111,125112],{},"video0","或",[37,125115,125116],{},"video2",[37,125118,125119],{},"video4",[37,125121,125122],{},"video6",[14,125124,125126],{"id":125125},"_75-挂载内网网页","7.5 挂载内网网页",[40,125128,125129],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[40,125131,125132],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[40,125134,125135],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[40,125137,125138,125139],{},"Termux 下载地址（F-Droid）：",[981,125140,125141],{"href":125141,"rel":125142},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24828],[40,125144,125145],{},"首先打开app后，先更新软件缓存：",[29,125147,125149],{"className":118260,"code":125148,"language":118262,"meta":35,"style":35},"pkg update\n",[37,125150,125151],{"__ignoreMap":35},[51,125152,125153,125156],{"class":53,"line":54},[51,125154,125155],{"class":68},"pkg",[51,125157,27206],{"class":282},[40,125159,125160],{},"然后换源",[29,125162,125164],{"className":118260,"code":125163,"language":118262,"meta":35,"style":35},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[37,125165,125166],{"__ignoreMap":35},[51,125167,125168,125170,125173],{"class":53,"line":54},[51,125169,124038],{"class":68},[51,125171,125172],{"class":72}," $PREFIX",[51,125174,125175],{"class":282},"\u002Fetc\u002Fapt\u002Fsources.list\n",[40,125177,125178],{},"将该文件内容替换为下面：",[29,125180,125182],{"className":118260,"code":125181,"language":118262,"meta":35,"style":35},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[37,125183,125184],{"__ignoreMap":35},[51,125185,125186,125189,125192,125195],{"class":53,"line":54},[51,125187,125188],{"class":68},"deb",[51,125190,125191],{"class":282}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[51,125193,125194],{"class":282}," stable",[51,125196,125197],{"class":282}," main\n",[1000,125199,125200,125227],{},[22,125201,125202,125203,125205,125206],{},"如果你使用的是",[37,125204,124038],{},"编辑器：",[1000,125207,125208,125215,125221],{},[22,125209,125210,125211,125214],{},"按 ",[37,125212,125213],{},"Ctrl+O"," 保存文件。",[22,125216,125210,125217,125220],{},[37,125218,125219],{},"Enter"," 确认文件名。",[22,125222,125210,125223,125226],{},[37,125224,125225],{},"Ctrl+X"," 退出编辑器。",[22,125228,125202,125229,125205,125232],{},[37,125230,125231],{},"vim",[1000,125233,125234,125240],{},[22,125235,125210,125236,125239],{},[37,125237,125238],{},"Esc"," 退出编辑模式。",[22,125241,125242,125243,125245],{},"输入 ",[37,125244,120185],{}," 保存并退出。",[40,125247,125248],{},"接下来重新更新软件源：",[29,125250,125252],{"className":118260,"code":125251,"language":118262,"meta":35,"style":35},"pkg update && pkg upgrade\n",[37,125253,125254],{"__ignoreMap":35},[51,125255,125256,125258,125260,125262,125264],{"class":53,"line":54},[51,125257,125155],{"class":68},[51,125259,118311],{"class":282},[51,125261,27154],{"class":72},[51,125263,125155],{"class":68},[51,125265,118297],{"class":282},[40,125267,125268],{},"安装python：",[29,125270,125272],{"className":118260,"code":125271,"language":118262,"meta":35,"style":35},"pkg install python\n",[37,125273,125274],{"__ignoreMap":35},[51,125275,125276,125278,125280],{"class":53,"line":54},[51,125277,125155],{"class":68},[51,125279,24797],{"class":282},[51,125281,125282],{"class":282}," python\n",[40,125284,125285,27437],{},[840,125286,125287],{},"通过Termux访问设备存储",[40,125289,125290],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[29,125292,125294],{"className":118260,"code":125293,"language":118262,"meta":35,"style":35},"termux-setup-storage\n",[37,125295,125296],{"__ignoreMap":35},[51,125297,125298],{"class":53,"line":54},[51,125299,125293],{"class":68},[19,125301,125302],{},[22,125303,125304,27437,125307],{},[840,125305,125306],{},"进入HTML文件所在的目录",[19,125308,125309],{},[22,125310,125311,125312,125314],{},"使用",[37,125313,102240],{},"命令进入HTML文件所在的目录：",[29,125316,125318],{"className":118260,"code":125317,"language":118262,"meta":35,"style":35},"cd ~\u002Fyour_html_folder\n",[37,125319,125320],{"__ignoreMap":35},[51,125321,125322,125324],{"class":53,"line":54},[51,125323,102240],{"class":175},[51,125325,125326],{"class":282}," ~\u002Fyour_html_folder\n",[19,125328,125329],{"start":61},[22,125330,125331,27437,125334,125339,125356],{},[840,125332,125333],{},"启动Python HTTP服务器",[19,125335,125336],{},[22,125337,125338],{},"运行以下命令启动一个简单的HTTP服务器：",[29,125340,125342],{"className":118260,"code":125341,"language":118262,"meta":35,"style":35},"python -m http.server 8000\n",[37,125343,125344],{"__ignoreMap":35},[51,125345,125346,125348,125350,125353],{"class":53,"line":54},[51,125347,31344],{"class":68},[51,125349,101846],{"class":175},[51,125351,125352],{"class":282}," http.server",[51,125354,125355],{"class":175}," 8000\n",[19,125357,125358],{"start":93},[22,125359,125360,125361,125364],{},"这会在端口",[37,125362,125363],{},"8000","上启动一个Web服务器。",[1000,125366,125367],{},[22,125368,125369],{},"启动服务器后，Termux会显示日志信息，例如：",[29,125371,125373],{"className":121780,"code":125372,"language":121782,"meta":121783,"style":35},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[37,125374,125375],{"__ignoreMap":35},[51,125376,125377],{"class":53,"line":54},[51,125378,125372],{},[1000,125380,125381],{},[22,125382,125383],{},"这表示服务器已成功启动。",[40,125385,125386],{},[840,125387,125388],{},"在浏览器中访问HTML文件",[19,125390,125391],{},[22,125392,125393,27437,125396,125401],{},[840,125394,125395],{},"在同一设备上访问",[19,125397,125398],{},[22,125399,125400],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[29,125402,125405],{"className":125403,"code":125404,"language":72628,"meta":35,"style":35},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[37,125406,125407],{"__ignoreMap":35},[51,125408,125409,125412],{"class":53,"line":54},[51,125410,125411],{"class":72},"http:",[51,125413,125414],{"class":57},"\u002F\u002Flocalhost:8000\n",[1000,125416,125417],{},[22,125418,125419,125420,125423],{},"如果HTML文件中有",[37,125421,125422],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125425,125427],{"id":125426},"_76-linux重点知识","7.6 Linux重点知识",[1233,125429,125431],{"id":125430},"_761-关于点的说明","7.6.1 关于点的说明",[40,125433,125434],{},[2564,125435],{"alt":35,"src":125436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[40,125438,125439],{},"一点本目录，两点上目录",[1233,125441,125443],{"id":125442},"_762-目录","7.6.2 目录",[22960,125445,125447],{"id":125446},"_7621-系统启动必须","7.6.2.1 系统启动必须",[40,125449,125450],{},[840,125451,125452],{},"\u002Fboot:",[40,125454,125455],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[40,125457,125458],{},[840,125459,125460],{},"\u002Fetc:",[40,125462,125463],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[40,125465,125466],{},[840,125467,125468],{},"\u002Flib：",[40,125470,125471],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[40,125473,125474],{},[840,125475,125476],{},"\u002Fsys:",[40,125478,125479],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22960,125481,125483],{"id":125482},"_7622-指令集合","7.6.2.2 指令集合",[40,125485,125486],{},[840,125487,125488],{},"\u002Fbin:",[40,125490,125491],{},"为二进制文件的缩写，存放最经常使用的命令",[40,125493,125494],{},[840,125495,125496],{},"\u002Fsbin:",[40,125498,125499],{},"只有系统管理员才能使用的程序和指令",[22960,125501,125503],{"id":125502},"_7623-外部文件管理","7.6.2.3 外部文件管理",[40,125505,125506],{},[840,125507,125508],{},"\u002Fdev:",[40,125510,125511],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[40,125513,125514],{},[840,125515,125516],{},"\u002Fmedia:",[40,125518,125519],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[40,125521,125522],{},[840,125523,125524],{},"\u002Fmnt:",[40,125526,125527],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22960,125529,125531],{"id":125530},"_7624-临时文件","7.6.2.4 临时文件",[40,125533,125534],{},[840,125535,125536],{},"\u002Frun:",[40,125538,125539],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[40,125541,125542],{},[840,125543,125544],{},"\u002Flost+found:",[40,125546,125547],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[40,125549,125550],{},[840,125551,125552],{},"\u002Ftmp:",[40,125554,125555],{},"这个目录是用来存放一些临时文件的",[22960,125557,125559],{"id":125558},"_7625-账户","7.6.2.5 账户",[40,125561,125562],{},[840,125563,125564],{},"\u002Froot：",[40,125566,125567],{},"系统管理员的用户主目录",[40,125569,125570,27437],{},[840,125571,125572],{},"\u002Fhome",[40,125574,125575],{},"用户的主目录，以用户的账号命名的",[40,125577,125578,27437],{},[840,125579,125580],{},"\u002Fusr",[40,125582,125583],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[40,125585,125586],{},[840,125587,125588],{},"\u002Fusr\u002Fbin：",[40,125590,125591],{},"系统用户使用的应用程序与指令",[40,125593,125594],{},[840,125595,125596],{},"\u002Fusr\u002Fsbin：",[40,125598,125599],{},"超级用户使用的比较高级的管理程序和系统守护程序",[40,125601,125602],{},[840,125603,125604],{},"\u002Fusr\u002Fsrc：",[40,125606,125607],{},"内核源代码默认的放置目录",[22960,125609,125611],{"id":125610},"_7626-运行过程要用","7.6.2.6 运行过程要用",[40,125613,125614],{},[840,125615,125616],{},"\u002Fvar：",[40,125618,125619],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[40,125621,125622],{},[840,125623,125624],{},"\u002Fproc:",[40,125626,125627,125628,125631],{},"管理 ",[840,125629,125630],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22960,125633,125635],{"id":125634},"_7627-扩展用的","7.6.2.7 扩展用的",[40,125637,125638],{},[840,125639,125640],{},"\u002Fopt:",[40,125642,125643],{},"默认是空的，我们安装额外软件可以放在这个里面",[40,125645,125646],{},[840,125647,125648],{},"\u002Fsrv:",[40,125650,125651],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[1233,125653,125655],{"id":125654},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[40,125657,125658],{},[2564,125659],{"alt":35,"src":125660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[40,125662,125663],{},"windows-->linux:",[40,125665,125666],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[40,125668,125669],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[40,125671,125672],{},"linux传输文件到windows",[40,125674,125675],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[1233,125677,125679],{"id":125678},"_764-易忘知识","7.6.4 易忘知识",[40,125681,125682],{},"操作系统内核查看",[29,125684,125685],{"className":118260,"code":122254,"language":118262,"meta":35,"style":35},[37,125686,125687],{"__ignoreMap":35},[51,125688,125689,125691],{"class":53,"line":54},[51,125690,71168],{"class":68},[51,125692,122263],{"class":175},[40,125694,125695],{},[2564,125696],{"alt":35,"src":125697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[40,125699,125700],{},[2564,125701],{"alt":35,"src":125702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[29,125704,125706],{"className":118260,"code":125705,"language":118262,"meta":35,"style":35},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[37,125707,125708,125720],{"__ignoreMap":35},[51,125709,125710,125712,125715,125718],{"class":53,"line":54},[51,125711,122471],{"class":68},[51,125713,125714],{"class":282}," mvtest",[51,125716,125717],{"class":282}," mvtest2",[51,125719,3754],{"class":72},[51,125721,125722],{"class":53,"line":61},[51,125723,125724],{"class":68},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[40,125726,125727],{},[2564,125728],{"alt":35,"src":125729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[40,125731,125732],{},[2564,125733],{"alt":35,"src":125734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[40,125736,125737,125738,125741],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[37,125739,125740],{},"du -a"," 可以快速查看磁盘使用细节。",[1233,125743,125745],{"id":125744},"_765-vim","7.6.5 Vim",[40,125747,125748],{},[2564,125749],{"alt":35,"src":125750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[40,125752,125753],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[40,125755,125756],{},"一开始进去为命令模式，此时点击输入的字母为命令",[40,125758,125759],{},[840,125760,125761],{},"1.命令模式：",[40,125763,125764],{},"i 切换到输入模式，在光标当前位置开始输入文本",[40,125766,125767],{},"x 删除当前光标所在处的字符",[40,125769,125770],{},"：切换到底线命令模式，以在最底一行输入命令",[40,125772,125773],{},"a 进行插入模式，在光标下一个位置输入文本",[40,125775,125776],{},"o 在当前的下方插入一个新行，并进入插入模式",[40,125778,125779],{},"0 在当前行的上方插入一个新行，并进入插入模式",[40,125781,125782],{},"dd 剪切当前行",[40,125784,125785],{},"yy 复制当前行",[40,125787,125788],{},"p 粘贴剪贴板内容到光标下方",[40,125790,125791],{},"P 粘贴剪贴板内容到光标上方",[40,125793,125794],{},"u 撤销上一次操作",[40,125796,125797],{},"ctrl+r 重做上一次操作",[40,125799,125800,125802],{},[2040,125801],{}," 保存文件",[40,125804,125805,125807],{},[1891,125806],{}," 退出Vim编辑器",[40,125809,125810,125812],{},[1891,125811],{},"! 强制退出Vim编辑器，不保存修改",[40,125814,125815],{},[840,125816,125817],{},"2.输入模式：",[40,125819,125820],{},[2564,125821],{"alt":35,"src":125822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[40,125824,125825],{},[840,125826,125827],{},"3.底线命令模式：",[40,125829,125830],{},[2564,125831],{"alt":35,"src":125832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[40,125834,125835],{},"按下esc可以退出底线命令模式",[1233,125837,125839],{"id":125838},"_766-apt","7.6.6 apt",[40,125841,125842],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[1233,125844,125846],{"id":125845},"_767-home与root的区别","7.6.7 home与root的区别",[40,125848,125849],{},[2564,125850],{"alt":35,"src":125851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[40,125853,125854],{},[2564,125855],{"alt":35,"src":125856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[40,125858,125859],{},[2564,125860],{"alt":35,"src":125861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[40,125863,125864],{},[2564,125865],{"alt":35,"src":125866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[1233,125868,125870],{"id":125869},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[40,125872,125873],{},[981,125874,125875],{"href":125875,"rel":125876},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24828],[19,125878,125879,125882],{},[22,125880,125881],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[22,125883,125884],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[40,125886,125887],{},[2564,125888],{"alt":35,"src":125889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[40,125891,125892],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[40,125894,125895],{},[2564,125896],{"alt":35,"src":125897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[29,125899,125901],{"className":121780,"code":125900,"language":121782,"meta":121783,"style":35},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[37,125902,125903,125908],{"__ignoreMap":35},[51,125904,125905],{"class":53,"line":54},[51,125906,125907],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[51,125909,125910],{"class":53,"line":61},[51,125911,125912],{},".\u002Fpycharm.sh\n",[40,125914,125915],{},"3️⃣创建.desktop文件",[40,125917,125918],{},[840,125919,125920],{},"原理：",[1000,125922,125923,125933],{},[22,125924,125925,125926,125932],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[840,125927,125928,125931],{},[37,125929,125930],{},".desktop"," 文件"," 来识别应用。",[22,125934,125935,125937,125938],{},[37,125936,125930],{}," 文件相当于一个“应用注册表”，告诉系统：",[1000,125939,125940,125943,125946,125949,125952],{},[22,125941,125942],{},"应用名字（Name）",[22,125944,125945],{},"图标（Icon）",[22,125947,125948],{},"执行命令（Exec）",[22,125950,125951],{},"分类（Categories）",[22,125953,125954],{},"是否需要终端（Terminal）",[29,125956,125958],{"className":121780,"code":125957,"language":121782,"meta":121783,"style":35},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[37,125959,125960,125965],{"__ignoreMap":35},[51,125961,125962],{"class":53,"line":54},[51,125963,125964],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[51,125966,125967],{"class":53,"line":61},[51,125968,125969],{},"nano pycharm.desktop\n",[40,125971,125972],{},"nano是一个命令行下的编辑器，也可以使用vim",[29,125974,125976],{"className":121780,"code":125975,"language":121782,"meta":121783,"style":35},"[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",[37,125977,125978,125983,125988,125993,125998,126003,126008,126013,126018,126023],{"__ignoreMap":35},[51,125979,125980],{"class":53,"line":54},[51,125981,125982],{},"[Desktop Entry]\n",[51,125984,125985],{"class":53,"line":61},[51,125986,125987],{},"Version=1.0\n",[51,125989,125990],{"class":53,"line":93},[51,125991,125992],{},"Type=Application\n",[51,125994,125995],{"class":53,"line":99},[51,125996,125997],{},"Name=PyCharm\n",[51,125999,126000],{"class":53,"line":120},[51,126001,126002],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[51,126004,126005],{"class":53,"line":129},[51,126006,126007],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[51,126009,126010],{"class":53,"line":206},[51,126011,126012],{},"Comment=JetBrains PyCharm IDE\n",[51,126014,126015],{"class":53,"line":212},[51,126016,126017],{},"Categories=Development;IDE;\n",[51,126019,126020],{"class":53,"line":227},[51,126021,126022],{},"Terminal=false\n",[51,126024,126025],{"class":53,"line":370},[51,126026,126027],{},"StartupWMClass=jetbrains-pycharm\n",[1000,126029,126030,126036,126042,126048],{},[22,126031,126032,126035],{},[37,126033,126034],{},"Exec"," → 点击图标时执行的命令",[22,126037,126038,126041],{},[37,126039,126040],{},"Icon"," → 显示在菜单和桌面上的图标",[22,126043,126044,126047],{},[37,126045,126046],{},"Terminal=false"," → 不打开终端",[22,126049,126050,126053],{},[37,126051,126052],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126055,126056,126057],"blockquote",{},[40,126058,126059,126060,126062,126063],{},"可以理解成 ",[37,126061,125930],{}," 文件是 Linux 的 ",[840,126064,126065],{},"快捷方式配置文件",[40,126067,126068],{},"4️⃣设置可执行权限",[29,126070,126072],{"className":121780,"code":126071,"language":121782,"meta":121783,"style":35},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[37,126073,126074],{"__ignoreMap":35},[51,126075,126076],{"class":53,"line":54},[51,126077,126071],{},[40,126079,126080],{},"5️⃣桌面图标启动的话如下：",[29,126082,126084],{"className":121780,"code":126083,"language":121782,"meta":121783,"style":35},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[37,126085,126086,126091],{"__ignoreMap":35},[51,126087,126088],{"class":53,"line":54},[51,126089,126090],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[51,126092,126093],{"class":53,"line":61},[51,126094,126095],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[19,126097,126098],{"start":93},[22,126099,126100],{},"下载Appimage文件实现软件的安装",[40,126102,126103],{},"1️⃣先下载appimage",[40,126105,126106],{},[981,126107,126108],{"href":126108,"rel":126109},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24828],[40,126111,126112],{},[2564,126113],{"alt":35,"src":126114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[40,126116,126117],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[40,126119,126120],{},[2564,126121],{"alt":35,"src":126122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[40,126124,126125],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[40,126127,126128],{},[2564,126129],{"alt":35,"src":126130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[40,126132,126133],{},[2564,126134],{"alt":35,"src":126135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[40,126137,126138,126139,126142],{},"3️⃣给他们放在",[37,126140,126141],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[40,126144,126145],{},"4️⃣给软件执行权限",[29,126147,126149],{"className":121780,"code":126148,"language":121782,"meta":121783,"style":35},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[37,126150,126151,126156],{"__ignoreMap":35},[51,126152,126153],{"class":53,"line":54},[51,126154,126155],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[51,126157,126158],{"class":53,"line":61},[51,126159,126160],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[40,126162,126163],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[29,126165,126167],{"className":118260,"code":126166,"language":118262,"meta":35,"style":35},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[37,126168,126169,126176,126183,126189],{"__ignoreMap":35},[51,126170,126171,126173],{"class":53,"line":54},[51,126172,102240],{"class":175},[51,126174,126175],{"class":282}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[51,126177,126178,126180],{"class":53,"line":61},[51,126179,102247],{"class":68},[51,126181,126182],{"class":282}," .\u002Fqqmusic.desktop\n",[51,126184,126185,126187],{"class":53,"line":93},[51,126186,125231],{"class":68},[51,126188,126182],{"class":282},[51,126190,126191,126193,126195,126197],{"class":53,"line":99},[51,126192,25540],{"class":68},[51,126194,25543],{"class":282},[51,126196,124097],{"class":282},[51,126198,126182],{"class":282},[40,126200,126201,126203],{},[37,126202,102247],{},"：一个 Linux 命令，主要功能是：",[1000,126205,126206,126209],{},[22,126207,126208],{},"如果文件不存在，就创建一个新的空文件",[22,126210,126211],{},"如果文件已存在，就更新该文件的最后修改时间",[29,126213,126215],{"className":121780,"code":126214,"language":121782,"meta":121783,"style":35},"[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",[37,126216,126217,126221,126226,126231,126236,126240,126245],{"__ignoreMap":35},[51,126218,126219],{"class":53,"line":54},[51,126220,125982],{},[51,126222,126223],{"class":53,"line":61},[51,126224,126225],{},"Name=QQ音乐\n",[51,126227,126228],{"class":53,"line":93},[51,126229,126230],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[51,126232,126233],{"class":53,"line":99},[51,126234,126235],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[51,126237,126238],{"class":53,"line":120},[51,126239,125992],{},[51,126241,126242],{"class":53,"line":129},[51,126243,126244],{},"Categories=Audio;Music;Player;\n",[51,126246,126247],{"class":53,"line":206},[51,126248,126249],{},"Comment=QQ Music Client for Linux\n",[40,126251,126252],{},"将文件复制进去",[40,126254,126255],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[40,126257,126258],{},[2564,126259],{"alt":35,"src":126260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[40,126262,126263],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[40,126265,126266],{},[2564,126267],{"alt":35,"src":126268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[40,126270,126271,126272,126275,126276,126279],{},"如果你用的不是KDE，那么也可以直接修改",[37,126273,126274],{},"qqmuic.desktop","：在exec的末尾加上",[37,126277,126278],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[29,126281,126283],{"className":121780,"code":126282,"language":121782,"meta":121783,"style":35},"[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",[37,126284,126285,126289,126293,126298,126302,126306,126310],{"__ignoreMap":35},[51,126286,126287],{"class":53,"line":54},[51,126288,125982],{},[51,126290,126291],{"class":53,"line":61},[51,126292,126225],{},[51,126294,126295],{"class":53,"line":93},[51,126296,126297],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[51,126299,126300],{"class":53,"line":99},[51,126301,126235],{},[51,126303,126304],{"class":53,"line":120},[51,126305,125992],{},[51,126307,126308],{"class":53,"line":129},[51,126309,126244],{},[51,126311,126312],{"class":53,"line":206},[51,126313,126249],{},[40,126315,126316],{},[2564,126317],{"alt":35,"src":126318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[40,126320,126321],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[29,126323,126325],{"className":121780,"code":126324,"language":121782,"meta":121783,"style":35},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[37,126326,126327],{"__ignoreMap":35},[51,126328,126329],{"class":53,"line":54},[51,126330,126324],{},[19,126332,126333],{"start":99},[22,126334,126335],{},"去Flathub上安装软件",[40,126337,126338],{},[981,126339,126340],{"href":126340,"rel":126341},"https:\u002F\u002Fflathub.org\u002F",[24828],[40,126343,126344],{},"1️⃣去上面的官网搜索软件+下载软件",[40,126346,126347],{},[2564,126348],{"alt":35,"src":126349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[29,126351,126353],{"className":121780,"code":126352,"language":121782,"meta":121783,"style":35},"flatpak install flathub com.obsproject.Studio\n",[37,126354,126355],{"__ignoreMap":35},[51,126356,126357],{"class":53,"line":54},[51,126358,126352],{},[40,126360,126361],{},[2564,126362],{"alt":35,"src":126363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[40,126365,126366],{},"2️⃣运行软件",[40,126368,126369],{},"a.官方方式：",[40,126371,126372],{},[2564,126373],{"alt":35,"src":126374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[29,126376,126377],{"className":121780,"code":126352,"language":121782,"meta":121783,"style":35},[37,126378,126379],{"__ignoreMap":35},[51,126380,126381],{"class":53,"line":54},[51,126382,126352],{},[40,126384,126385],{},"b.当普通软件运行：",[40,126387,126388],{},[2564,126389],{"alt":35,"src":126390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[40,126392,126393],{},[2564,126394],{"alt":35,"src":126395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1179,126397,126398],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":35,"searchDepth":61,"depth":61,"links":126400},[126401,126402,126407,126408,126414,126415],{"id":123133,"depth":61,"text":123134},{"id":123475,"depth":61,"text":123476,"children":126403},[126404,126405,126406],{"id":123479,"depth":93,"text":123480},{"id":123546,"depth":93,"text":123547},{"id":123807,"depth":93,"text":123808},{"id":123960,"depth":61,"text":123961},{"id":124198,"depth":61,"text":124199,"children":126409},[126410,126411,126412,126413],{"id":124250,"depth":93,"text":124251},{"id":124536,"depth":93,"text":124537},{"id":124807,"depth":93,"text":124808},{"id":125066,"depth":93,"text":125067},{"id":125125,"depth":61,"text":125126},{"id":125426,"depth":61,"text":125427,"children":126416},[126417,126418,126419,126420,126421,126422,126423,126424],{"id":125430,"depth":93,"text":125431},{"id":125442,"depth":93,"text":125443},{"id":125654,"depth":93,"text":125655},{"id":125678,"depth":93,"text":125679},{"id":125744,"depth":93,"text":125745},{"id":125838,"depth":93,"text":125839},{"id":125845,"depth":93,"text":125846},{"id":125869,"depth":93,"text":125870},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123125,"description":24339},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126431,"title":126432,"body":126433,"description":24339,"extension":1190,"meta":126437,"navigation":1192,"path":126438,"seo":126439,"stem":126440,"__hash__":126441},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126434,"toc":126435},[],{"title":35,"searchDepth":61,"depth":61,"links":126436},[],{"category":31227},"\u002Fwiki\u002F2025-01-27-linux",{"title":126432,"description":24339},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126443,"title":126444,"body":126445,"description":126449,"extension":1190,"meta":126840,"navigation":1192,"path":126841,"seo":126842,"stem":126843,"__hash__":126844},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126446,"toc":126838},[126447,126450,126454,126471,126474,126527,126531,126533,126573,126582,126586,126589,126830,126835],[40,126448,126449],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126451,126453],{"id":126452},"_1ubuntu环境配置","1.Ubuntu环境配置",[19,126455,126456,126459,126462,126465,126468],{},[22,126457,126458],{},"ubuntu环境换源",[22,126460,126461],{},"安装cuda",[22,126463,126464],{},"安装miniconda",[22,126466,126467],{},"安装pytorch",[22,126469,126470],{},"安装genesis",[40,126472,126473],{},"参考链接：",[29,126475,126477],{"className":24785,"code":126476,"language":24787,"meta":35,"style":35},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[37,126478,126479],{"__ignoreMap":35},[51,126480,126481,126484,126487,126490,126492,126495,126498,126500,126503,126506,126508,126511,126514,126516,126519,126522,126524],{"class":53,"line":54},[51,126482,126483],{"class":68},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[51,126485,126486],{"class":282},"=blogdetail",[51,126488,126489],{"class":72},"&sharetype",[51,126491,108],{"class":64},[51,126493,126494],{"class":282},"blogdetail",[51,126496,126497],{"class":72},"&sharerId",[51,126499,108],{"class":64},[51,126501,126502],{"class":282},"144728092",[51,126504,126505],{"class":72},"&sharerefer",[51,126507,108],{"class":64},[51,126509,126510],{"class":282},"PC",[51,126512,126513],{"class":72},"&sharesource",[51,126515,108],{"class":64},[51,126517,126518],{"class":282},"qq_69379513",[51,126520,126521],{"class":72},"&sharefrom",[51,126523,108],{"class":64},[51,126525,126526],{"class":282},"from_link\n",[10,126528,126530],{"id":126529},"_2genesis-报错issue","2.Genesis 报错issue",[40,126532,126473],{},[29,126534,126535],{"className":24785,"code":126476,"language":24787,"meta":35,"style":35},[37,126536,126537],{"__ignoreMap":35},[51,126538,126539,126541,126543,126545,126547,126549,126551,126553,126555,126557,126559,126561,126563,126565,126567,126569,126571],{"class":53,"line":54},[51,126540,126483],{"class":68},[51,126542,126486],{"class":282},[51,126544,126489],{"class":72},[51,126546,108],{"class":64},[51,126548,126494],{"class":282},[51,126550,126497],{"class":72},[51,126552,108],{"class":64},[51,126554,126502],{"class":282},[51,126556,126505],{"class":72},[51,126558,108],{"class":64},[51,126560,126510],{"class":282},[51,126562,126513],{"class":72},[51,126564,108],{"class":64},[51,126566,126518],{"class":282},[51,126568,126521],{"class":72},[51,126570,108],{"class":64},[51,126572,126526],{"class":282},[29,126574,126576],{"className":24785,"code":126575,"language":24787,"meta":35,"style":35},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[37,126577,126578],{"__ignoreMap":35},[51,126579,126580],{"class":53,"line":54},[51,126581,126575],{"class":68},[10,126583,126585],{"id":126584},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[40,126587,126588],{},"hello_robot.py",[29,126590,126592],{"className":31342,"code":126591,"language":31344,"meta":35,"style":35},"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",[37,126593,126594,126600,126615,126619,126631,126643,126647,126660,126664,126683,126693,126703,126717,126721,126725,126730,126734,126744,126751,126765,126772,126782,126787,126791,126809,126814,126818,126825],{"__ignoreMap":35},[51,126595,126596,126598],{"class":53,"line":54},[51,126597,31356],{"class":64},[51,126599,46269],{"class":72},[51,126601,126602,126605,126608,126610,126612],{"class":53,"line":61},[51,126603,126604],{"class":72},"os.environ[",[51,126606,126607],{"class":282},"'PYOPENGL_PLATFORM'",[51,126609,5517],{"class":72},[51,126611,108],{"class":64},[51,126613,126614],{"class":282}," 'glx'\n",[51,126616,126617],{"class":53,"line":93},[51,126618,3480],{"emptyLinePlaceholder":1192},[51,126620,126621,126623,126626,126628],{"class":53,"line":99},[51,126622,31356],{"class":64},[51,126624,126625],{"class":72}," genesis ",[51,126627,32347],{"class":64},[51,126629,126630],{"class":72}," gs\n",[51,126632,126633,126635,126638,126640],{"class":53,"line":120},[51,126634,31701],{"class":64},[51,126636,126637],{"class":72}," pynput ",[51,126639,31356],{"class":64},[51,126641,126642],{"class":72}," keyboard\n",[51,126644,126645],{"class":53,"line":129},[51,126646,3480],{"emptyLinePlaceholder":1192},[51,126648,126649,126652,126655,126657],{"class":53,"line":206},[51,126650,126651],{"class":72},"gs.init(",[51,126653,126654],{"class":78},"backend",[51,126656,108],{"class":64},[51,126658,126659],{"class":72},"gs.gpu)\n",[51,126661,126662],{"class":53,"line":212},[51,126663,3480],{"emptyLinePlaceholder":1192},[51,126665,126666,126669,126671,126674,126677,126679,126681],{"class":53,"line":227},[51,126667,126668],{"class":72},"scene ",[51,126670,108],{"class":64},[51,126672,126673],{"class":72}," gs.Scene(",[51,126675,126676],{"class":78},"show_viewer",[51,126678,108],{"class":64},[51,126680,32440],{"class":175},[51,126682,90],{"class":72},[51,126684,126685,126688,126690],{"class":53,"line":370},[51,126686,126687],{"class":72},"plane ",[51,126689,108],{"class":64},[51,126691,126692],{"class":72}," scene.add_entity(gs.morphs.Plane())\n",[51,126694,126695,126698,126700],{"class":53,"line":387},[51,126696,126697],{"class":72},"franka ",[51,126699,108],{"class":64},[51,126701,126702],{"class":72}," scene.add_entity(\n",[51,126704,126705,126708,126710,126712,126715],{"class":53,"line":404},[51,126706,126707],{"class":72},"    gs.morphs.MJCF(",[51,126709,46318],{"class":78},[51,126711,108],{"class":64},[51,126713,126714],{"class":282},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[51,126716,39011],{"class":72},[51,126718,126719],{"class":53,"line":415},[51,126720,90],{"class":72},[51,126722,126723],{"class":53,"line":420},[51,126724,3480],{"emptyLinePlaceholder":1192},[51,126726,126727],{"class":53,"line":429},[51,126728,126729],{"class":72},"scene.build()\n",[51,126731,126732],{"class":53,"line":434},[51,126733,3480],{"emptyLinePlaceholder":1192},[51,126735,126736,126738,126741],{"class":53,"line":448},[51,126737,32911],{"class":64},[51,126739,126740],{"class":68}," on_press",[51,126742,126743],{"class":72},"(key):\n",[51,126745,126746,126749],{"class":53,"line":462},[51,126747,126748],{"class":64},"    try",[51,126750,4816],{"class":72},[51,126752,126753,126755,126758,126760,126763],{"class":53,"line":470},[51,126754,3577],{"class":64},[51,126756,126757],{"class":72}," key.char ",[51,126759,4026],{"class":64},[51,126761,126762],{"class":282}," 'q'",[51,126764,4816],{"class":72},[51,126766,126767,126769],{"class":53,"line":2783},[51,126768,16694],{"class":64},[51,126770,126771],{"class":175}," False\n",[51,126773,126774,126777,126780],{"class":53,"line":2788},[51,126775,126776],{"class":64},"    except",[51,126778,126779],{"class":175}," AttributeError",[51,126781,4816],{"class":72},[51,126783,126784],{"class":53,"line":2817},[51,126785,126786],{"class":64},"        pass\n",[51,126788,126789],{"class":53,"line":2822},[51,126790,3480],{"emptyLinePlaceholder":1192},[51,126792,126793,126796,126798,126801,126804,126806],{"class":53,"line":2839},[51,126794,126795],{"class":72},"listener ",[51,126797,108],{"class":64},[51,126799,126800],{"class":72}," keyboard.Listener(",[51,126802,126803],{"class":78},"on_press",[51,126805,108],{"class":64},[51,126807,126808],{"class":72},"on_press)\n",[51,126810,126811],{"class":53,"line":2844},[51,126812,126813],{"class":72},"listener.start()\n",[51,126815,126816],{"class":53,"line":2849},[51,126817,3480],{"emptyLinePlaceholder":1192},[51,126819,126820,126822],{"class":53,"line":2854},[51,126821,109627],{"class":64},[51,126823,126824],{"class":72}," listener.running:\n",[51,126826,126827],{"class":53,"line":2868},[51,126828,126829],{"class":72},"    scene.step()\n",[40,126831,126832],{},[2564,126833],{"alt":35,"src":126834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1179,126836,126837],{},"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":35,"searchDepth":61,"depth":61,"links":126839},[],{"category":24341},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126444,"description":126449},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126846,"title":126847,"body":126848,"description":24339,"extension":1190,"meta":126863,"navigation":1192,"path":126864,"seo":126865,"stem":126866,"__hash__":126867},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126849,"toc":126860},[126850,126853,126857],[10,126851,126847],{"id":126852},"_1-基础知识",[14,126854,126856],{"id":126855},"_11-js的组成","1.1 js的组成",[40,126858,126859],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":35,"searchDepth":61,"depth":61,"links":126861},[126862],{"id":126855,"depth":61,"text":126856},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126847,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126869,"title":126870,"body":126871,"description":24339,"extension":1190,"meta":127010,"navigation":1192,"path":127011,"seo":127012,"stem":127013,"__hash__":127014},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126872,"toc":126998},[126873,126876,126880,126883,126887,126897,126901,126904,126907,126910,126914,126921,126927,126931,126937,126948,126952,126955,126959,126962,126966,126969,126973,126976,126980,126983,126986,126989,126992,126995],[10,126874,126870],{"id":126875},"_2-vscode必备内容",[14,126877,126879],{"id":126878},"_21-标签分类","2.1 标签分类",[40,126881,126882],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126884,126886],{"id":126885},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[40,126888,126889,126890,126892,126893,126896],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[37,126891,1479],{}," 然后按 ",[37,126894,126895],{},"Tab","，快速自动生成基本结构。",[14,126898,126900],{"id":126899},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[40,126902,126903],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[40,126905,126906],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[40,126908,126909],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126911,126913],{"id":126912},"_24-视图缩放","2.4 视图缩放",[40,126915,126916,126917,126920],{},"缩放视图 ",[37,126918,126919],{},"ctrl+"," 可实现代码增大。",[40,126922,126923,126926],{},[37,126924,126925],{},"ctrl-"," 可实现代码减小。",[14,126928,126930],{"id":126929},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[40,126932,126933,126934,29349],{},"VSCode 新建文件快捷键为 ",[37,126935,126936],{},"ctrl+N",[40,126938,126939,126940,126943,126944,126947],{},"保存快捷键为 ",[37,126941,126942],{},"ctrl+S","，将文本保存为 ",[37,126945,126946],{},".html"," 文件。",[14,126949,126951],{"id":126950},"_26-auto-rename-tag","2.6 Auto Rename Tag",[40,126953,126954],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126956,126958],{"id":126957},"_27-vscode-icons","2.7 vscode-icons",[40,126960,126961],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126963,126965],{"id":126964},"_28-easy-less","2.8 Easy LESS",[40,126967,126968],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126970,126972],{"id":126971},"_29-会了吧插件","2.9 会了吧插件",[40,126974,126975],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126977,126979],{"id":126978},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[40,126981,126982],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[40,126984,126985],{},"②选定多个相同的单词:ctrl+D",[40,126987,126988],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[40,126990,126991],{},"④全局替换某些单词:ctrl+h",[40,126993,126994],{},"⑤快速定位到某一行:ctrl+g",[40,126996,126997],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":35,"searchDepth":61,"depth":61,"links":126999},[127000,127001,127002,127003,127004,127005,127006,127007,127008,127009],{"id":126878,"depth":61,"text":126879},{"id":126885,"depth":61,"text":126886},{"id":126899,"depth":61,"text":126900},{"id":126912,"depth":61,"text":126913},{"id":126929,"depth":61,"text":126930},{"id":126950,"depth":61,"text":126951},{"id":126957,"depth":61,"text":126958},{"id":126964,"depth":61,"text":126965},{"id":126971,"depth":61,"text":126972},{"id":126978,"depth":61,"text":126979},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126870,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127016,"title":127017,"body":127018,"description":24339,"extension":1190,"meta":127177,"navigation":1192,"path":127178,"seo":127179,"stem":127180,"__hash__":127181},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127019,"toc":127169},[127020,127023,127027,127037,127043,127049,127053,127062,127066,127071,127074,127077,127081,127084,127094,127103,127112,127121,127131,127138,127143,127148,127161],[10,127021,127017],{"id":127022},"_3-html文本与容器标签",[14,127024,127026],{"id":127025},"_31-标题标签","3.1 标题标签",[40,127028,127029,127032,127033,127036],{},[37,127030,127031],{},"\u003Ch1>","我是一级标签",[37,127034,127035],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[40,127038,127039,127032,127041],{},[37,127040,127031],{},[37,127042,127035],{},[40,127044,124299,127045,127048],{},[37,127046,127047],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127050,127052],{"id":127051},"_32-段落标签","3.2 段落标签",[40,127054,127055,127058,127059],{},[37,127056,127057],{},"\u003Cp>","....",[37,127060,127061],{},"\u003C\u002Fp>",[14,127063,127065],{"id":127064},"_33-换行标签","3.3 换行标签",[40,127067,127068],{},[37,127069,127070],{},"\u003Cbr \u002F>",[40,127072,127073],{},"具有强制换行的作用",[40,127075,127076],{},"单标签",[14,127078,127080],{"id":127079},"_34-文本格式化标签","3.4 文本格式化标签",[40,127082,127083],{},"提供粗体、斜体和下划线等效果",[40,127085,127086,127087,83503,127090,127093],{},"加粗：",[37,127088,127089],{},"\u003Cstrong>...\u003C\u002Fstrong>",[37,127091,127092],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[40,127095,127096,127097,83503,127100,127093],{},"斜体：",[37,127098,127099],{},"\u003Cem>...\u003C\u002Fem>",[37,127101,127102],{},"\u003Ci>...\u003C\u002Fi>",[40,127104,127105,127106,83503,127109,127093],{},"删除线：",[37,127107,127108],{},"\u003Cdel>...\u003C\u002Fdel>",[37,127110,127111],{},"\u003Cs>...\u003C\u002Fs>",[40,127113,127114,127115,83503,127118,127093],{},"下划线：",[37,127116,127117],{},"\u003Cins>...\u003C\u002Fins>",[37,127119,127120],{},"\u003Cu>...\u003C\u002Fu>",[14,127122,127124,127125,19372,127128,103657],{"id":127123},"_35-div和span标签","3.5 ",[37,127126,127127],{},"\u003Cdiv>",[37,127129,127130],{},"\u003Cspan>",[40,127132,127133,101982,127135,127137],{},[37,127134,127127],{},[37,127136,127130],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[40,127139,127140],{},[37,127141,127142],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[40,127144,127145],{},[37,127146,127147],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[40,127149,127150,127151,127153,127154,127156,127157,127160],{},"两者特点：①",[37,127152,127127],{}," 标签用来布局，但一行通常只放一个 ",[37,127155,127127],{},"。可以理解为一个大盒子，独占一行，在 ",[37,127158,127159],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[40,127162,78213,127163,127165,127166,127168],{},[37,127164,127130],{}," 标签也可用于布局，一行可以放多个 ",[37,127167,127130],{},"，可理解为小盒子。",{"title":35,"searchDepth":61,"depth":61,"links":127170},[127171,127172,127173,127174,127175],{"id":127025,"depth":61,"text":127026},{"id":127051,"depth":61,"text":127052},{"id":127064,"depth":61,"text":127065},{"id":127079,"depth":61,"text":127080},{"id":127123,"depth":61,"text":127176},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127017,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127183,"title":127184,"body":127185,"description":24339,"extension":1190,"meta":127382,"navigation":1192,"path":127383,"seo":127384,"stem":127385,"__hash__":127386},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127186,"toc":127374},[127187,127190,127194,127197,127203,127210,127216,127222,127225,127228,127231,127234,127237,127240,127243,127247,127250,127253,127256,127262,127268,127274,127281,127285,127291,127297,127300,127303,127309,127315,127321,127324,127327,127331,127334,127344,127350,127354,127363,127367,127370],[10,127188,127184],{"id":127189},"_4-html图像与链接",[14,127191,127193],{"id":127192},"_41-图像标签","4.1 图像标签",[40,127195,127196],{},"（1）标签",[40,127198,127199,127202],{},[37,127200,127201],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[40,127204,127205,127206,127209],{},"src是",[37,127207,127208],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[40,127211,127212,127213],{},"alt:文本，替换文本。图像不能显示的文字 ",[37,127214,127215],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[40,127217,127218,127219],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[37,127220,127221],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[40,127223,127224],{},"width:像素，设置图像的宽度",[40,127226,127227],{},"height:像素，设置图像的高度",[40,127229,127230],{},"border：像素，设置图像的边框粗细",[40,127232,127233],{},"（2）图像标签属性的注意点：",[40,127235,127236],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[40,127238,127239],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[40,127241,127242],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127244,127246],{"id":127245},"_42-路径注意要点","4.2 路径注意要点：",[40,127248,127249],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[40,127251,127252],{},"（2）根目录：就是打开文件夹的第一层根目录",[40,127254,127255],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[40,127257,127258,127259],{},"①同一级路径：图像文件位于HTML文件同一级，如",[37,127260,127261],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[40,127263,127264,127265],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[37,127266,127267],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[40,127269,127270,127271],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[37,127272,127273],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[40,127275,127276,127277,1503],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[981,127278,127279],{"href":127279,"rel":127280},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24828],[14,127282,127284],{"id":127283},"_43-超链接标签","4.3 超链接标签",[40,127286,127287,127290],{},[37,127288,127289],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[40,127292,127293,127294],{},"①语法格式：",[37,127295,127296],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[40,127298,127299],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[40,127301,127302],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[40,127304,127305,127306],{},"③链接分类：外部链接：",[37,127307,127308],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[40,127310,127311,127312],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[37,127313,127314],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[40,127316,127317,127318],{},"空链接：如果当时没有确定链接目标时，",[37,127319,127320],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[40,127322,127323],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[40,127325,127326],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127328,127330],{"id":127329},"_44-锚点链接","4.4 锚点链接",[40,127332,127333],{},"点我们点击链接，可以快速定位到页面中的某个位置",[40,127335,127336,127337,127340,127341],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[37,127338,127339],{},"\u003Ca href=\"#two\">","第二级",[37,127342,127343],{},"\u003C\u002Fa>",[40,127345,127346,127347],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[37,127348,127349],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127351,127353],{"id":127352},"_45-注释标签","4.5 注释标签",[40,127355,127356,127359,127360],{},[37,127357,127358],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[37,127361,127362],{},"ctrl+\u002F",[14,127364,127366],{"id":127365},"_46-特殊字符","4.6 特殊字符",[40,127368,127369],{},"可以实现添加多个空格",[2564,127371],{"style":127372,"src":127373},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":35,"searchDepth":61,"depth":61,"links":127375},[127376,127377,127378,127379,127380,127381],{"id":127192,"depth":61,"text":127193},{"id":127245,"depth":61,"text":127246},{"id":127283,"depth":61,"text":127284},{"id":127329,"depth":61,"text":127330},{"id":127352,"depth":61,"text":127353},{"id":127365,"depth":61,"text":127366},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127184,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127388,"title":127389,"body":127390,"description":24339,"extension":1190,"meta":127683,"navigation":1192,"path":127684,"seo":127685,"stem":127686,"__hash__":127687},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127391,"toc":127674},[127392,127395,127399,127402,127405,127408,127411,127414,127417,127420,127423,127426,127446,127452,127456,127459,127462,127465,127468,127471,127474,127478,127481,127484,127487,127490,127503,127508,127511,127514,127529,127532,127535,127538,127541,127544,127548,127551,127558,127561,127564,127567,127570,127573,127579,127582,127585,127591,127594,127597,127600,127606,127609,127612,127626,127633,127636,127639,127646,127655,127658,127661,127664,127668,127671],[10,127393,127389],{"id":127394},"_5-html表格列表与表单",[14,127396,127398],{"id":127397},"_51-表格标签","5.1 表格标签",[40,127400,127401],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[40,127403,127404],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[40,127406,127407],{},"②表格基本语法：",[2564,127409],{"style":127372,"src":127410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[40,127412,127413],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[2564,127415],{"style":127372,"src":127416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[40,127418,127419],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[2564,127421],{"style":127372,"src":127422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[40,127424,127425],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[40,127427,127428,127431,127432,127434,127435,127438,127439,127441,127442,127445],{},[37,127429,127430],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[37,127433,127430],{},"内部必须拥有",[37,127436,127437],{},"\u003Ctr>","标签，一般位于第一行，",[37,127440,127430],{},"比",[37,127443,127444],{},"\u003Cth>","范围广",[40,127447,127448,127451],{},[37,127449,127450],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127453,127455],{"id":127454},"_52-合并单元格","5.2 合并单元格",[40,127457,127458],{},"（1）合并单元格方式：",[40,127460,127461],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[40,127463,127464],{},"②跨列合并：colspan=\"合并单元格的个数\"",[40,127466,127467],{},"（2）目标单元格：",[40,127469,127470],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[40,127472,127473],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127475,127477],{"id":127476},"_53-列表标签","5.3 列表标签",[40,127479,127480],{},"（1）分类：无序列表、有序列表、自定义列表",[40,127482,127483],{},"①无序列表：",[2564,127485],{"style":127372,"src":127486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[40,127488,127489],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[40,127491,127492,127495,127496,127499,127500,127502],{},[37,127493,127494],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[37,127497,127498],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[37,127501,127494],{},"中输入其他标签或文字是不对的",[40,127504,127505,127507],{},[37,127506,127498],{},"之间相当于一个容器，可以容纳所有元素",[40,127509,127510],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[40,127512,127513],{},"在css中去除前边的小圆点采用如下代码:",[29,127515,127519],{"className":127516,"code":127517,"language":127518,"meta":35,"style":35},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[37,127520,127521],{"__ignoreMap":35},[51,127522,127523,127526],{"class":53,"line":54},[51,127524,127525],{"class":52264},"list-style",[51,127527,127528],{"class":72},": none;\n",[40,127530,127531],{},"②有序列表：",[2564,127533],{"style":127372,"src":127534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[40,127536,127537],{},"③自定义列表：",[2564,127539],{"style":127372,"src":127540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[2564,127542],{"style":127372,"src":127543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127545,127547],{"id":127546},"_54-表单标签","5.4 表单标签",[40,127549,127550],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[40,127552,127553,127554,127557],{},"（1）表单域：包含单元素的区域，",[37,127555,127556],{},"\u003Cform>","标签可以实现信息的收集和传递。",[2564,127559],{"style":127372,"src":127560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[40,127562,127563],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[40,127565,127566],{},"表单元素提交必须有name属性",[40,127568,127569],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[40,127571,127572],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[40,127574,78190,127575,127578],{},[37,127576,127577],{},"\u003Cinput>","输入表单元素",[2564,127580],{"style":127372,"src":127581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[2564,127583],{"style":127372,"src":127584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[40,127586,127587,127588],{},"单选按钮：",[37,127589,127590],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[2564,127592],{"style":127372,"src":127593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[40,127595,127596],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[2564,127598],{"style":127372,"src":127599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[40,127601,127602,127605],{},[840,127603,127604],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[40,127607,127608],{},"②select下拉表单元素：可以节约页面控件",[2564,127610],{"style":127372,"src":127611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[40,127613,127614,14757,127616,127619,127620,127622,127623,127625],{},[840,127615,1290],{},[37,127617,127618],{},"\u003Cselect>","中至少包含一对",[37,127621,103678],{},"；在",[37,127624,103678],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[40,127627,127628,127629,127632],{},"③",[37,127630,127631],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[2564,127634],{"style":127372,"src":127635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[40,127637,127638],{},"3行20列",[14,127640,127642,127643,103657],{"id":127641},"_55-lable标签","5.5 ",[37,127644,127645],{},"\u003Clable>",[40,127647,127648,127649,127651,127652,127654],{},"它不是表单标签，但常常与表单标签搭配使用，",[37,127650,127645],{},"标签用于绑定一个表单标签，当点击",[37,127653,127645],{},"标签内的文本",[40,127656,127657],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[2564,127659],{"style":127372,"src":127660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[2564,127662],{"style":127372,"src":127663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127665,127667],{"id":127666},"_56-实例","5.6 实例",[2564,127669],{"style":127372,"src":127670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1179,127672,127673],{},"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":35,"searchDepth":61,"depth":61,"links":127675},[127676,127677,127678,127679,127680,127682],{"id":127397,"depth":61,"text":127398},{"id":127454,"depth":61,"text":127455},{"id":127476,"depth":61,"text":127477},{"id":127546,"depth":61,"text":127547},{"id":127641,"depth":61,"text":127681},"5.5 \u003Clable>标签",{"id":127666,"depth":61,"text":127667},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127389,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127689,"title":127690,"body":127691,"description":24339,"extension":1190,"meta":128240,"navigation":1192,"path":128241,"seo":128242,"stem":128243,"__hash__":128244},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127692,"toc":128215},[127693,127696,127700,127703,127706,127710,127713,127716,127719,127722,127725,127728,127731,127735,127738,127742,127745,127748,127751,127755,127758,127761,127764,127770,127773,127776,127779,127782,127785,127788,127791,127824,127828,127831,127834,127837,127841,127844,127847,127850,127853,127856,127860,127863,127866,127869,127873,127876,127880,127883,127887,127890,127895,127899,127902,127906,127909,127912,127915,127918,127945,127948,127952,127955,127958,127963,127966,127969,127973,127976,127981,127984,127987,127990,127994,127997,128000,128003,128007,128010,128013,128016,128020,128024,128027,128067,128070,128074,128081,128084,128088,128091,128137,128141,128144,128147,128150,128178,128182,128185,128212],[10,127694,127690],{"id":127695},"_6-css语法与文本样式",[14,127697,127699],{"id":127698},"_61-css语法规范","6.1 css语法规范",[40,127701,127702],{},"由两部分组成，选择器及一条或多条声明",[2564,127704],{"style":127372,"src":127705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[40,127707,127708],{},[840,127709,1290],{},[40,127711,127712],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[40,127714,127715],{},"②属性与属性值以“键值对”的形式出现",[40,127717,127718],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[40,127720,127721],{},"④属性和属性值之间用英文“;”分开",[2564,127723],{"style":127372,"src":127724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[2564,127726],{"style":127372,"src":127727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[2564,127729],{"style":127372,"src":127730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127732,127734],{"id":127733},"_62-css选择器","6.2 css选择器",[40,127736,127737],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[1233,127739,127741],{"id":127740},"_621-标签选择器","6.2.1 标签选择器",[40,127743,127744],{},"①优点：能快速为页面中同类型的标签统一设置样式",[40,127746,127747],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[2564,127749],{"style":127372,"src":127750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[1233,127752,127754],{"id":127753},"_622-类选择器","6.2.2 类选择器",[40,127756,127757],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[40,127759,127760],{},"②样例",[2564,127762],{"style":127372,"src":127763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[40,127765,127766,127767,127769],{},"③ ",[840,127768,127604],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[40,127771,127772],{},"可以理解为给这个标签起了个名字，来表示；",[40,127774,127775],{},"长名称或词组可以使用横线来为选择器命名；",[40,127777,127778],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[40,127780,127781],{},"命名要有意义；",[2564,127783],{"style":127372,"src":127784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[40,127786,127787],{},"类选择器也可以指定特殊的元素p.center{}",[40,127789,127790],{},"p.center和.center都对",[29,127792,127794],{"className":127516,"code":127793,"language":127518,"meta":35,"style":35},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[37,127795,127796,127801,127810,127820],{"__ignoreMap":35},[51,127797,127798],{"class":53,"line":54},[51,127799,127800],{"class":57},"\u002F* 类选择器指定特殊元素 *\u002F\n",[51,127802,127803,127805,127808],{"class":53,"line":61},[51,127804,40],{"class":52264},[51,127806,127807],{"class":68},".center",[51,127809,16534],{"class":72},[51,127811,127812,127814,127816,127818],{"class":53,"line":93},[51,127813,71490],{"class":175},[51,127815,52401],{"class":72},[51,127817,52556],{"class":175},[51,127819,179],{"class":72},[51,127821,127822],{"class":53,"line":99},[51,127823,132],{"class":72},[1233,127825,127827],{"id":127826},"_623-多类名使用","6.2.3 多类名使用",[40,127829,127830],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[2564,127832],{"style":127372,"src":127833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[40,127835,127836],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[1233,127838,127840],{"id":127839},"_624-id选择器","6.2.4 id选择器",[40,127842,127843],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[40,127845,127846],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[2564,127848],{"style":127372,"src":127849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[40,127851,127852],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[40,127854,127855],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[1233,127857,127859],{"id":127858},"_625-通配符选择器","6.2.5 通配符选择器",[40,127861,127862],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[40,127864,127865],{},"* {",[40,127867,127868],{},"color=\"red\"}",[1233,127870,127872],{"id":127871},"_626-总结","6.2.6 总结",[2564,127874],{"style":127372,"src":127875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127877,127879],{"id":127878},"_63-css字体属性","6.3 css字体属性",[40,127881,127882],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[1233,127884,127886],{"id":127885},"_631-字体系列","6.3.1 字体系列",[40,127888,127889],{},"font-family: '宋体';",[40,127891,127892,127894],{},[840,127893,1290],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[1233,127896,127898],{"id":127897},"_632-字体大小","6.3.2 字体大小",[40,127900,127901],{},"font-size: 20px",[40,127903,127904,27437],{},[840,127905,127604],{},[40,127907,127908],{},"①px（像素）大小是网页的最常用单位",[40,127910,127911],{},"②谷歌浏览器默认为16px",[40,127913,127914],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[40,127916,127917],{},"④可以给body指定整个页面的大小：会自动引用",[29,127919,127921],{"className":127516,"code":127920,"language":127518,"meta":35,"style":35},"body {\n  font-size: 16px;\n}\n",[37,127922,127923,127929,127941],{"__ignoreMap":35},[51,127924,127925,127927],{"class":53,"line":54},[51,127926,52764],{"class":52264},[51,127928,16534],{"class":72},[51,127930,127931,127933,127935,127937,127939],{"class":53,"line":61},[51,127932,71590],{"class":175},[51,127934,52401],{"class":72},[51,127936,1847],{"class":175},[51,127938,52456],{"class":64},[51,127940,179],{"class":72},[51,127942,127943],{"class":53,"line":93},[51,127944,132],{"class":72},[40,127946,127947],{},"⑤标题标签比较特殊，需要单独指定大小",[1233,127949,127951],{"id":127950},"_633-字体粗细","6.3.3 字体粗细",[40,127953,127954],{},"font-weight: bold;",[40,127956,127957],{},"font-weight: 100；",[40,127959,127960,127962],{},[840,127961,1290],{}," ①粗体文字变细：尽量别用normal，多用数字",[40,127964,127965],{},"font-weight= 400;",[40,127967,127968],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[1233,127970,127972],{"id":127971},"_634-文字样式","6.3.4 文字样式",[40,127974,127975],{},"font-style: normal；",[40,127977,127978,27437],{},[840,127979,127980],{},"属性值",[40,127982,127983],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[40,127985,127986],{},"②italic：浏览器会显示斜体的字体样式",[2564,127988],{"style":127372,"src":127989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[1233,127991,127993],{"id":127992},"_635-字体符合属性","6.3.5 字体符合属性",[2564,127995],{"style":127372,"src":127996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[2564,127998],{"style":127372,"src":127999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[40,128001,128002],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[40,128004,128005,27437],{},[840,128006,127604],{},[40,128008,128009],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[40,128011,128012],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[40,128014,128015],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128017,128019],{"id":128018},"_64-css-test文本属性","6.4 css test文本属性",[1233,128021,128023],{"id":128022},"_641-文本颜色","6.4.1 文本颜色",[40,128025,128026],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[29,128028,128030],{"className":127516,"code":128029,"language":127518,"meta":35,"style":35},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[37,128031,128032,128037,128043,128053,128058,128063],{"__ignoreMap":35},[51,128033,128034],{"class":53,"line":54},[51,128035,128036],{"class":57},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[51,128038,128039,128041],{"class":53,"line":61},[51,128040,40],{"class":52264},[51,128042,16534],{"class":72},[51,128044,128045,128047,128049,128051],{"class":53,"line":93},[51,128046,71869],{"class":175},[51,128048,52401],{"class":72},[51,128050,58385],{"class":175},[51,128052,179],{"class":72},[51,128054,128055],{"class":53,"line":99},[51,128056,128057],{"class":57},"  \u002F* color: #ff0000; *\u002F\n",[51,128059,128060],{"class":53,"line":120},[51,128061,128062],{"class":57},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[51,128064,128065],{"class":53,"line":129},[51,128066,132],{"class":72},[2564,128068],{"style":127372,"src":128069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[1233,128071,128073],{"id":128072},"_642-对齐文本","6.4.2 对齐文本",[40,128075,128076,128077,128080],{},"text-align属于用于设置元素内文本内容的 ",[840,128078,128079],{},"水平对齐"," 方式",[40,128082,128083],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[1233,128085,128087],{"id":128086},"_643-装饰文本","6.4.3 装饰文本",[40,128089,128090],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[29,128092,128094],{"className":127516,"code":128093,"language":127518,"meta":35,"style":35},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[37,128095,128096,128102,128112,128116,128122,128133],{"__ignoreMap":35},[51,128097,128098,128100],{"class":53,"line":54},[51,128099,981],{"class":52264},[51,128101,16534],{"class":72},[51,128103,128104,128106,128108,128110],{"class":53,"line":61},[51,128105,71466],{"class":175},[51,128107,52401],{"class":72},[51,128109,55701],{"class":175},[51,128111,179],{"class":72},[51,128113,128114],{"class":53,"line":93},[51,128115,132],{"class":72},[51,128117,128118,128120],{"class":53,"line":99},[51,128119,40],{"class":52264},[51,128121,16534],{"class":72},[51,128123,128124,128126,128128,128131],{"class":53,"line":120},[51,128125,71466],{"class":175},[51,128127,52401],{"class":72},[51,128129,128130],{"class":175},"underline",[51,128132,179],{"class":72},[51,128134,128135],{"class":53,"line":129},[51,128136,132],{"class":72},[1233,128138,128140],{"id":128139},"_644-文本缩进","6.4.4 文本缩进",[40,128142,128143],{},"实现文本的第一行首行缩进自己指定的距离",[40,128145,128146],{},"20px往右边走；-20px往左边走",[40,128148,128149],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[29,128151,128153],{"className":127516,"code":128152,"language":127518,"meta":35,"style":35},"p {\n  text-indent: 2em;\n}\n",[37,128154,128155,128161,128174],{"__ignoreMap":35},[51,128156,128157,128159],{"class":53,"line":54},[51,128158,40],{"class":52264},[51,128160,16534],{"class":72},[51,128162,128163,128166,128168,128170,128172],{"class":53,"line":61},[51,128164,128165],{"class":175},"  text-indent",[51,128167,52401],{"class":72},[51,128169,1334],{"class":175},[51,128171,24516],{"class":64},[51,128173,179],{"class":72},[51,128175,128176],{"class":53,"line":93},[51,128177,132],{"class":72},[1233,128179,128181],{"id":128180},"_645-行间距","6.4.5 行间距",[40,128183,128184],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[29,128186,128188],{"className":127516,"code":128187,"language":127518,"meta":35,"style":35},"p {\n  line-height: 1.6;\n}\n",[37,128189,128190,128196,128208],{"__ignoreMap":35},[51,128191,128192,128194],{"class":53,"line":54},[51,128193,40],{"class":52264},[51,128195,16534],{"class":72},[51,128197,128198,128201,128203,128206],{"class":53,"line":61},[51,128199,128200],{"class":175},"  line-height",[51,128202,52401],{"class":72},[51,128204,128205],{"class":175},"1.6",[51,128207,179],{"class":72},[51,128209,128210],{"class":53,"line":93},[51,128211,132],{"class":72},[1179,128213,128214],{},"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":35,"searchDepth":61,"depth":61,"links":128216},[128217,128218,128226,128233],{"id":127698,"depth":61,"text":127699},{"id":127733,"depth":61,"text":127734,"children":128219},[128220,128221,128222,128223,128224,128225],{"id":127740,"depth":93,"text":127741},{"id":127753,"depth":93,"text":127754},{"id":127826,"depth":93,"text":127827},{"id":127839,"depth":93,"text":127840},{"id":127858,"depth":93,"text":127859},{"id":127871,"depth":93,"text":127872},{"id":127878,"depth":61,"text":127879,"children":128227},[128228,128229,128230,128231,128232],{"id":127885,"depth":93,"text":127886},{"id":127897,"depth":93,"text":127898},{"id":127950,"depth":93,"text":127951},{"id":127971,"depth":93,"text":127972},{"id":127992,"depth":93,"text":127993},{"id":128018,"depth":61,"text":128019,"children":128234},[128235,128236,128237,128238,128239],{"id":128022,"depth":93,"text":128023},{"id":128072,"depth":93,"text":128073},{"id":128086,"depth":93,"text":128087},{"id":128139,"depth":93,"text":128140},{"id":128180,"depth":93,"text":128181},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127690,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128246,"title":128247,"body":128248,"description":24339,"extension":1190,"meta":128897,"navigation":1192,"path":128898,"seo":128899,"stem":128900,"__hash__":128901},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128249,"toc":128878},[128250,128253,128257,128261,128321,128325,128335,128338,128341,128345,128370,128374,128377,128380,128383,128386,128389,128393,128396,128399,128441,128444,128470,128476,128479,128483,128487,128493,128496,128499,128502,128505,128508,128511,128556,128560,128563,128566,128570,128574,128603,128606,128611,128614,128617,128620,128623,128627,128631,128634,128636,128639,128643,128646,128650,128653,128656,128659,128663,128667,128673,128683,128686,128689,128692,128695,128698,128821,128829,128837,128875],[10,128251,128247],{"id":128252},"_7-css引入方式与选择器进阶",[14,128254,128256],{"id":128255},"_71-css引入方式","7.1 css引入方式",[1233,128258,128260],{"id":128259},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[29,128262,128266],{"className":128263,"code":128264,"language":128265,"meta":35,"style":35},"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",[37,128267,128268,128276,128283,128295,128308,128313],{"__ignoreMap":35},[51,128269,128270,128272,128274],{"class":53,"line":54},[51,128271,2154],{"class":72},[51,128273,1179],{"class":52264},[51,128275,52271],{"class":72},[51,128277,128278,128281],{"class":53,"line":61},[51,128279,128280],{"class":52264},"  h1",[51,128282,16534],{"class":72},[51,128284,128285,128288,128290,128293],{"class":53,"line":93},[51,128286,128287],{"class":175},"    color",[51,128289,52401],{"class":72},[51,128291,128292],{"class":175},"blue",[51,128294,179],{"class":72},[51,128296,128297,128300,128302,128304,128306],{"class":53,"line":99},[51,128298,128299],{"class":175},"    font-size",[51,128301,52401],{"class":72},[51,128303,2045],{"class":175},[51,128305,52456],{"class":64},[51,128307,179],{"class":72},[51,128309,128310],{"class":53,"line":120},[51,128311,128312],{"class":72},"  }\n",[51,128314,128315,128317,128319],{"class":53,"line":129},[51,128316,52749],{"class":72},[51,128318,1179],{"class":52264},[51,128320,52271],{"class":72},[40,128322,128323,27437],{},[840,128324,127604],{},[40,128326,78190,128327,128330,128331,128334],{},[37,128328,128329],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[37,128332,128333],{},"\u003Chead>","标签中",[40,128336,128337],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[40,128339,128340],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[1233,128342,128344],{"id":128343},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[29,128346,128348],{"className":128263,"code":128347,"language":128265,"meta":35,"style":35},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[37,128349,128350],{"__ignoreMap":35},[51,128351,128352,128354,128356,128358,128360,128363,128366,128368],{"class":53,"line":54},[51,128353,2154],{"class":72},[51,128355,40],{"class":52264},[51,128357,63590],{"class":68},[51,128359,108],{"class":72},[51,128361,128362],{"class":282},"\"color: red; font-size: 16px;\"",[51,128364,128365],{"class":72},">这是一个段落\u003C\u002F",[51,128367,40],{"class":52264},[51,128369,52271],{"class":72},[40,128371,128372,27437],{},[840,128373,127604],{},[40,128375,128376],{},"①style其实就是标签的属性",[40,128378,128379],{},"②在双引号中间，写法要符合css规范",[40,128381,128382],{},"③可以控制当前的标签设置样式",[40,128384,128385],{},"④书写繁琐，简单时才用",[40,128387,128388],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[1233,128390,128392],{"id":128391},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[40,128394,128395],{},"使用最多，单独建一个css文件，然后html引用",[40,128397,128398],{},"①css文件部分： style.css",[29,128400,128402],{"className":127516,"code":128401,"language":127518,"meta":35,"style":35},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[37,128403,128404,128409,128415,128425,128437],{"__ignoreMap":35},[51,128405,128406],{"class":53,"line":54},[51,128407,128408],{"class":57},"\u002F* style.css *\u002F\n",[51,128410,128411,128413],{"class":53,"line":61},[51,128412,10],{"class":52264},[51,128414,16534],{"class":72},[51,128416,128417,128419,128421,128423],{"class":53,"line":93},[51,128418,71869],{"class":175},[51,128420,52401],{"class":72},[51,128422,128292],{"class":175},[51,128424,179],{"class":72},[51,128426,128427,128429,128431,128433,128435],{"class":53,"line":99},[51,128428,71590],{"class":175},[51,128430,52401],{"class":72},[51,128432,2045],{"class":175},[51,128434,52456],{"class":64},[51,128436,179],{"class":72},[51,128438,128439],{"class":53,"line":120},[51,128440,132],{"class":72},[40,128442,128443],{},"②html部分",[29,128445,128447],{"className":128263,"code":128446,"language":128265,"meta":35,"style":35},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[37,128448,128449],{"__ignoreMap":35},[51,128450,128451,128453,128455,128457,128459,128461,128463,128465,128468],{"class":53,"line":54},[51,128452,2154],{"class":72},[51,128454,69969],{"class":52264},[51,128456,69972],{"class":68},[51,128458,108],{"class":72},[51,128460,69977],{"class":282},[51,128462,62021],{"class":68},[51,128464,108],{"class":72},[51,128466,128467],{"class":282},"\"style.css\"",[51,128469,52271],{"class":72},[40,128471,128472,128475],{},[37,128473,128474],{},"\u003Chr>","水平线标签（但是不常用！）",[40,128477,128478],{},"ctrl+0回到页面原来大小",[14,128480,128482],{"id":128481},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[1233,128484,128486],{"id":128485},"_721-快速生成html","7.2.1 快速生成html",[40,128488,128489,128490],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[37,128491,128492],{},"\u003Cdiv>``\u003C\u002Fdiv>",[40,128494,128495],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[40,128497,128498],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[40,128500,128501],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[40,128503,128504],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[40,128506,128507],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[40,128509,128510],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[29,128512,128514],{"className":128263,"code":128513,"language":128265,"meta":35,"style":35},"\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",[37,128515,128516,128521,128526,128531,128536,128541,128546,128551],{"__ignoreMap":35},[51,128517,128518],{"class":53,"line":54},[51,128519,128520],{"class":57},"\u003C!-- Emmet 语法示例 -->\n",[51,128522,128523],{"class":53,"line":61},[51,128524,128525],{"class":57},"\u003C!-- div*3        → 生成3个div -->\n",[51,128527,128528],{"class":53,"line":93},[51,128529,128530],{"class":57},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[51,128532,128533],{"class":53,"line":99},[51,128534,128535],{"class":57},"\u003C!-- div+p        → 兄弟div和p -->\n",[51,128537,128538],{"class":53,"line":120},[51,128539,128540],{"class":57},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[51,128542,128543],{"class":53,"line":129},[51,128544,128545],{"class":57},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[51,128547,128548],{"class":53,"line":206},[51,128549,128550],{"class":57},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[51,128552,128553],{"class":53,"line":212},[51,128554,128555],{"class":57},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[1233,128557,128559],{"id":128558},"_722-快速生成css","7.2.2 快速生成css",[40,128561,128562],{},"简写开头",[40,128564,128565],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128567,128569],{"id":128568},"_73-css复合选择器","7.3 css复合选择器",[1233,128571,128573],{"id":128572},"_731-后代选择器","7.3.1 后代选择器",[29,128575,128577],{"className":127516,"code":128576,"language":127518,"meta":35,"style":35},".parent .child {\n  color: blue;\n}\n",[37,128578,128579,128589,128599],{"__ignoreMap":35},[51,128580,128581,128584,128587],{"class":53,"line":54},[51,128582,128583],{"class":68},".parent",[51,128585,128586],{"class":68}," .child",[51,128588,16534],{"class":72},[51,128590,128591,128593,128595,128597],{"class":53,"line":61},[51,128592,71869],{"class":175},[51,128594,52401],{"class":72},[51,128596,128292],{"class":175},[51,128598,179],{"class":72},[51,128600,128601],{"class":53,"line":93},[51,128602,132],{"class":72},[40,128604,128605],{},"元素1 元素2 {样式声明}",[40,128607,128608],{},[840,128609,128610],{},"注意点:",[40,128612,128613],{},"①元素1和元素2中间用空格隔开",[40,128615,128616],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[40,128618,128619],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[40,128621,128622],{},"④元素1和元素2可以是任意基础选择器",[1233,128624,128626],{"id":128625},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[40,128628,128629],{},[840,128630,128610],{},[40,128632,128633],{},"①元素1和元素2中间用大于号隔开",[40,128635,128616],{},[40,128637,128638],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[1233,128640,128642],{"id":128641},"_733-并集选择器","7.3.3 并集选择器",[40,128644,128645],{},"元素1，元素2 {样式声明}",[40,128647,128648],{},[840,128649,128610],{},[40,128651,128652],{},"①元素1和元素2中间用逗号隔开",[40,128654,128655],{},"②逗号可以理解为和的意思",[40,128657,128658],{},"③并集选择器通常用于集体声明",[1233,128660,128662],{"id":128661},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[40,128664,128665],{},[840,128666,128610],{},[40,128668,128669,128670,128672],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69969,128671],{},"－:visited－:hover－:active。",[40,128674,128675,128676,128679,128680,26704],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128677,128678],"hover",{}," 、 ",[128681,128682],"first-child",{},[40,128684,128685],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[40,128687,128688],{},"link对没访问的进行设置",[40,128690,128691],{},"vistied对已访问的进行改变",[40,128693,128694],{},"hover鼠标经过就会变",[40,128696,128697],{},"active常按(点)就会变",[29,128699,128701],{"className":127516,"code":128700,"language":127518,"meta":35,"style":35},"\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",[37,128702,128703,128708,128717,128727,128737,128741,128750,128761,128765,128773,128783,128793,128797,128806,128817],{"__ignoreMap":35},[51,128704,128705],{"class":53,"line":54},[51,128706,128707],{"class":57},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[51,128709,128710,128712,128715],{"class":53,"line":61},[51,128711,981],{"class":52264},[51,128713,128714],{"class":68},":link",[51,128716,16534],{"class":72},[51,128718,128719,128721,128723,128725],{"class":53,"line":93},[51,128720,71869],{"class":175},[51,128722,52401],{"class":72},[51,128724,63333],{"class":175},[51,128726,179],{"class":72},[51,128728,128729,128731,128733,128735],{"class":53,"line":99},[51,128730,71466],{"class":175},[51,128732,52401],{"class":72},[51,128734,55701],{"class":175},[51,128736,179],{"class":72},[51,128738,128739],{"class":53,"line":120},[51,128740,132],{"class":72},[51,128742,128743,128745,128748],{"class":53,"line":129},[51,128744,981],{"class":52264},[51,128746,128747],{"class":68},":visited",[51,128749,16534],{"class":72},[51,128751,128752,128754,128756,128759],{"class":53,"line":206},[51,128753,71869],{"class":175},[51,128755,52401],{"class":72},[51,128757,128758],{"class":175},"purple",[51,128760,179],{"class":72},[51,128762,128763],{"class":53,"line":212},[51,128764,132],{"class":72},[51,128766,128767,128769,128771],{"class":53,"line":227},[51,128768,981],{"class":52264},[51,128770,61904],{"class":68},[51,128772,16534],{"class":72},[51,128774,128775,128777,128779,128781],{"class":53,"line":370},[51,128776,71869],{"class":175},[51,128778,52401],{"class":72},[51,128780,55853],{"class":175},[51,128782,179],{"class":72},[51,128784,128785,128787,128789,128791],{"class":53,"line":387},[51,128786,71466],{"class":175},[51,128788,52401],{"class":72},[51,128790,128130],{"class":175},[51,128792,179],{"class":72},[51,128794,128795],{"class":53,"line":404},[51,128796,132],{"class":72},[51,128798,128799,128801,128804],{"class":53,"line":415},[51,128800,981],{"class":52264},[51,128802,128803],{"class":68},":active",[51,128805,16534],{"class":72},[51,128807,128808,128810,128812,128815],{"class":53,"line":420},[51,128809,71869],{"class":175},[51,128811,52401],{"class":72},[51,128813,128814],{"class":175},"green",[51,128816,179],{"class":72},[51,128818,128819],{"class":53,"line":429},[51,128820,132],{"class":72},[1233,128822,128824,128825,128828],{"id":128823},"_735-伪类选择器","7.3.5 ",[128826,128827],"focus",{},"伪类选择器",[40,128830,128831,128833,128834,128836],{},[128826,128832],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[37,128835,127577],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[29,128838,128840],{"className":127516,"code":128839,"language":127518,"meta":35,"style":35},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[37,128841,128842,128850,128861,128871],{"__ignoreMap":35},[51,128843,128844,128846,128848],{"class":53,"line":54},[51,128845,54785],{"class":52264},[51,128847,62864],{"class":68},[51,128849,16534],{"class":72},[51,128851,128852,128855,128857,128859],{"class":53,"line":61},[51,128853,128854],{"class":175},"  border-color",[51,128856,52401],{"class":72},[51,128858,55853],{"class":175},[51,128860,179],{"class":72},[51,128862,128863,128865,128867,128869],{"class":53,"line":93},[51,128864,71762],{"class":175},[51,128866,52401],{"class":72},[51,128868,55701],{"class":175},[51,128870,179],{"class":72},[51,128872,128873],{"class":53,"line":99},[51,128874,132],{"class":72},[1179,128876,128877],{},"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":35,"searchDepth":61,"depth":61,"links":128879},[128880,128885,128889],{"id":128255,"depth":61,"text":128256,"children":128881},[128882,128883,128884],{"id":128259,"depth":93,"text":128260},{"id":128343,"depth":93,"text":128344},{"id":128391,"depth":93,"text":128392},{"id":128481,"depth":61,"text":128482,"children":128886},[128887,128888],{"id":128485,"depth":93,"text":128486},{"id":128558,"depth":93,"text":128559},{"id":128568,"depth":61,"text":128569,"children":128890},[128891,128892,128893,128894,128895],{"id":128572,"depth":93,"text":128573},{"id":128625,"depth":93,"text":128626},{"id":128641,"depth":93,"text":128642},{"id":128661,"depth":93,"text":128662},{"id":128823,"depth":93,"text":128896},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128247,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128903,"title":128904,"body":128905,"description":24339,"extension":1190,"meta":130828,"navigation":1192,"path":130829,"seo":130830,"stem":130831,"__hash__":130832},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128906,"toc":130802},[128907,128910,128914,128923,128927,128953,128958,128961,128964,128967,128970,128974,128977,128987,128995,128999,129034,129039,129042,129045,129048,129051,129055,129058,129067,129071,129084,129089,129092,129095,129098,129102,129105,129109,129112,129167,129170,129201,129204,129258,129262,129265,129431,129554,129557,129560,129563,129566,129570,129573,129577,129580,129583,129587,129590,129621,129648,129676,129679,129683,129709,129752,129756,129850,129853,129880,129883,129886,129889,129892,129895,129898,129901,129904,129907,129911,129968,129995,129999,130047,130051,130092,130094,130097,130100,130103,130106,130110,130202,130205,130208,130211,130215,130338,130539,130543,130547,130550,130553,130556,130560,130563,130566,130591,130594,130597,130600,130603,130606,130610,130618,130680,130683,130741,130744,130747,130750,130753,130756,130759,130762,130799],[10,128908,128904],{"id":128909},"_8-css显示模式与背景特性",[14,128911,128913],{"id":128912},"_81-css元素显示模式","8.1 css元素显示模式",[40,128915,128916,128917,128919,128920,128922],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[37,128918,127127],{},"自己占一行，比如一行可以放多个",[37,128921,127130],{},"，HTML 元素一般分为块元素和行内元素两种类型",[1233,128924,128926],{"id":128925},"_811-块元素","8.1.1 块元素",[40,128928,128929,128930,128932,128933,1466,128936,1466,128938,1466,128940,1466,128943,1466,128946,128949,128950,128952],{},"常见的块元素有",[37,128931,127031],{},"~",[37,128934,128935],{},"\u003Ch6>",[37,128937,127057],{},[37,128939,127127],{},[37,128941,128942],{},"\u003Cul>",[37,128944,128945],{},"\u003Col>",[37,128947,128948],{},"\u003Cli>","等，其中 ",[37,128951,127127],{}," 标签是最典型的块元素",[40,128954,128955],{},[840,128956,128957],{},"块级元素的特点：",[40,128959,128960],{},"① 比较霸道，自己独占一行。",[40,128962,128963],{},"② 高度，宽度、外边距以及内边距都可以控制。",[40,128965,128966],{},"③ 宽度默认是容器（父级宽度）的100%。",[40,128968,128969],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[40,128971,128972],{},[840,128973,1290],{},[40,128975,128976],{},"①文字类的元素内不能使用块级元素",[40,128978,78213,128979,128981,128982,128984,128985],{},[37,128980,127057],{}," 标签主要用于存放文字，因此 ",[37,128983,127057],{}," 里面不能放块级元素，特别是不能放",[37,128986,127127],{},[40,128988,128989,128990,128932,128992,128994],{},"⑥同理， ",[37,128991,127031],{},[37,128993,128935],{},"等都是文字类块级标签，里面也不能放其他块级元素",[1233,128996,128998],{"id":128997},"_812-行内元素","8.1.2 行内元素",[40,129000,129001,129002,1466,129004,1466,129007,1466,129010,1466,129013,1466,129016,1466,129019,1466,129022,1466,129025,1466,129028,129030,129031,129033],{},"常见的行内元素有 ",[37,129003,127289],{},[37,129005,129006],{},"\u003Cstrong>",[37,129008,129009],{},"\u003Cb>",[37,129011,129012],{},"\u003Cem>",[37,129014,129015],{},"\u003Ci>",[37,129017,129018],{},"\u003Cdel>",[37,129020,129021],{},"\u003Cs>",[37,129023,129024],{},"\u003Cins>",[37,129026,129027],{},"\u003Cu>",[37,129029,127130],{}," 等，其中 ",[37,129032,127130],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[40,129035,129036],{},[840,129037,129038],{},"特点：",[40,129040,129041],{},"① 相邻行内元素在一行上，一行可以显示多个。",[40,129043,129044],{},"② 高、宽直接设置是无效的。",[40,129046,129047],{},"③ 默认宽度就是它本身内容的宽度。",[40,129049,129050],{},"④ 行内元素只能容纳文本或其他行内元素。",[40,129052,129053],{},[840,129054,1290],{},[40,129056,129057],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[40,129059,129060,129061,129063,129064,129066],{},"②特殊情况链接 ",[37,129062,127289],{}," 里面可以放块级元素，但是给 ",[37,129065,127289],{}," 转换一下块级模式最安全",[1233,129068,129070],{"id":129069},"_813-行内块元素","8.1.3 行内块元素",[40,129072,129073,129074,1466,129077,1466,129080,129083],{},"在行内元素中有几个特殊的标签 —— ",[37,129075,129076],{},"\u003Cimg \u002F>",[37,129078,129079],{},"\u003Cinput \u002F>",[37,129081,129082],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[40,129085,129086],{},[840,129087,129088],{},"行内块元素的特点：",[40,129090,129091],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[40,129093,129094],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[40,129096,129097],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[1233,129099,129101],{"id":129100},"_814-总结","8.1.4 总结",[2564,129103],{"style":127372,"src":129104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[1233,129106,129108],{"id":129107},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[40,129110,129111],{},"①转换为块元素：display:block;",[29,129113,129115],{"className":127516,"code":129114,"language":127518,"meta":35,"style":35},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[37,129116,129117,129122,129128,129139,129151,129163],{"__ignoreMap":35},[51,129118,129119],{"class":53,"line":54},[51,129120,129121],{"class":57},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[51,129123,129124,129126],{"class":53,"line":61},[51,129125,981],{"class":52264},[51,129127,16534],{"class":72},[51,129129,129130,129133,129135,129137],{"class":53,"line":93},[51,129131,129132],{"class":175},"  display",[51,129134,52401],{"class":72},[51,129136,61833],{"class":175},[51,129138,179],{"class":72},[51,129140,129141,129143,129145,129147,129149],{"class":53,"line":99},[51,129142,71532],{"class":175},[51,129144,52401],{"class":72},[51,129146,612],{"class":175},[51,129148,52456],{"class":64},[51,129150,179],{"class":72},[51,129152,129153,129155,129157,129159,129161],{"class":53,"line":120},[51,129154,71752],{"class":175},[51,129156,52401],{"class":72},[51,129158,1649],{"class":175},[51,129160,52456],{"class":64},[51,129162,179],{"class":72},[51,129164,129165],{"class":53,"line":129},[51,129166,132],{"class":72},[40,129168,129169],{},"②转换为行内元素：display:inline;",[29,129171,129173],{"className":127516,"code":129172,"language":127518,"meta":35,"style":35},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[37,129174,129175,129180,129186,129197],{"__ignoreMap":35},[51,129176,129177],{"class":53,"line":54},[51,129178,129179],{"class":57},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[51,129181,129182,129184],{"class":53,"line":61},[51,129183,52575],{"class":52264},[51,129185,16534],{"class":72},[51,129187,129188,129190,129192,129195],{"class":53,"line":93},[51,129189,129132],{"class":175},[51,129191,52401],{"class":72},[51,129193,129194],{"class":175},"inline",[51,129196,179],{"class":72},[51,129198,129199],{"class":53,"line":99},[51,129200,132],{"class":72},[40,129202,129203],{},"③转换为行内块：display:inline-block;",[29,129205,129207],{"className":127516,"code":129206,"language":127518,"meta":35,"style":35},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[37,129208,129209,129214,129220,129230,129242,129254],{"__ignoreMap":35},[51,129210,129211],{"class":53,"line":54},[51,129212,129213],{"class":57},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[51,129215,129216,129218],{"class":53,"line":61},[51,129217,51],{"class":52264},[51,129219,16534],{"class":72},[51,129221,129222,129224,129226,129228],{"class":53,"line":93},[51,129223,129132],{"class":175},[51,129225,52401],{"class":72},[51,129227,73347],{"class":175},[51,129229,179],{"class":72},[51,129231,129232,129234,129236,129238,129240],{"class":53,"line":99},[51,129233,71532],{"class":175},[51,129235,52401],{"class":72},[51,129237,1858],{"class":175},[51,129239,52456],{"class":64},[51,129241,179],{"class":72},[51,129243,129244,129246,129248,129250,129252],{"class":53,"line":120},[51,129245,71752],{"class":175},[51,129247,52401],{"class":72},[51,129249,2195],{"class":175},[51,129251,52456],{"class":64},[51,129253,179],{"class":72},[51,129255,129256],{"class":53,"line":129},[51,129257,132],{"class":72},[1233,129259,129261],{"id":129260},"_816-小米侧边栏","8.1.6 小米侧边栏",[2564,129263],{"style":127372,"src":129264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[29,129266,129268],{"className":128263,"code":129267,"language":128265,"meta":35,"style":35},"\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",[37,129269,129270,129275,129290,129309,129328,129347,129366,129385,129404,129423],{"__ignoreMap":35},[51,129271,129272],{"class":53,"line":54},[51,129273,129274],{"class":57},"\u003C!-- 小米侧边栏案例 -->\n",[51,129276,129277,129279,129281,129283,129285,129288],{"class":53,"line":61},[51,129278,2154],{"class":72},[51,129280,52575],{"class":52264},[51,129282,54450],{"class":68},[51,129284,108],{"class":72},[51,129286,129287],{"class":282},"\"sidebar\"",[51,129289,52271],{"class":72},[51,129291,129292,129294,129296,129298,129300,129302,129305,129307],{"class":53,"line":93},[51,129293,53108],{"class":72},[51,129295,981],{"class":52264},[51,129297,62021],{"class":68},[51,129299,108],{"class":72},[51,129301,62026],{"class":282},[51,129303,129304],{"class":72},">手机 电话卡\u003C\u002F",[51,129306,981],{"class":52264},[51,129308,52271],{"class":72},[51,129310,129311,129313,129315,129317,129319,129321,129324,129326],{"class":53,"line":99},[51,129312,53108],{"class":72},[51,129314,981],{"class":52264},[51,129316,62021],{"class":68},[51,129318,108],{"class":72},[51,129320,62026],{"class":282},[51,129322,129323],{"class":72},">电视 盒子\u003C\u002F",[51,129325,981],{"class":52264},[51,129327,52271],{"class":72},[51,129329,129330,129332,129334,129336,129338,129340,129343,129345],{"class":53,"line":120},[51,129331,53108],{"class":72},[51,129333,981],{"class":52264},[51,129335,62021],{"class":68},[51,129337,108],{"class":72},[51,129339,62026],{"class":282},[51,129341,129342],{"class":72},">笔记本 平板\u003C\u002F",[51,129344,981],{"class":52264},[51,129346,52271],{"class":72},[51,129348,129349,129351,129353,129355,129357,129359,129362,129364],{"class":53,"line":129},[51,129350,53108],{"class":72},[51,129352,981],{"class":52264},[51,129354,62021],{"class":68},[51,129356,108],{"class":72},[51,129358,62026],{"class":282},[51,129360,129361],{"class":72},">出行 穿戴\u003C\u002F",[51,129363,981],{"class":52264},[51,129365,52271],{"class":72},[51,129367,129368,129370,129372,129374,129376,129378,129381,129383],{"class":53,"line":206},[51,129369,53108],{"class":72},[51,129371,981],{"class":52264},[51,129373,62021],{"class":68},[51,129375,108],{"class":72},[51,129377,62026],{"class":282},[51,129379,129380],{"class":72},">智能 路由器\u003C\u002F",[51,129382,981],{"class":52264},[51,129384,52271],{"class":72},[51,129386,129387,129389,129391,129393,129395,129397,129400,129402],{"class":53,"line":212},[51,129388,53108],{"class":72},[51,129390,981],{"class":52264},[51,129392,62021],{"class":68},[51,129394,108],{"class":72},[51,129396,62026],{"class":282},[51,129398,129399],{"class":72},">健康 儿童\u003C\u002F",[51,129401,981],{"class":52264},[51,129403,52271],{"class":72},[51,129405,129406,129408,129410,129412,129414,129416,129419,129421],{"class":53,"line":227},[51,129407,53108],{"class":72},[51,129409,981],{"class":52264},[51,129411,62021],{"class":68},[51,129413,108],{"class":72},[51,129415,62026],{"class":282},[51,129417,129418],{"class":72},">耳机 音响\u003C\u002F",[51,129420,981],{"class":52264},[51,129422,52271],{"class":72},[51,129424,129425,129427,129429],{"class":53,"line":370},[51,129426,52749],{"class":72},[51,129428,52575],{"class":52264},[51,129430,52271],{"class":72},[29,129432,129434],{"className":127516,"code":129433,"language":127518,"meta":35,"style":35},".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",[37,129435,129436,129445,129455,129468,129480,129492,129504,129514,129525,129529,129539,129550],{"__ignoreMap":35},[51,129437,129438,129441,129443],{"class":53,"line":54},[51,129439,129440],{"class":68},".sidebar",[51,129442,170],{"class":52264},[51,129444,16534],{"class":72},[51,129446,129447,129449,129451,129453],{"class":53,"line":61},[51,129448,129132],{"class":175},[51,129450,52401],{"class":72},[51,129452,61833],{"class":175},[51,129454,179],{"class":72},[51,129456,129457,129459,129461,129464,129466],{"class":53,"line":93},[51,129458,71532],{"class":175},[51,129460,52401],{"class":72},[51,129462,129463],{"class":175},"234",[51,129465,52456],{"class":64},[51,129467,179],{"class":72},[51,129469,129470,129472,129474,129476,129478],{"class":53,"line":99},[51,129471,71752],{"class":175},[51,129473,52401],{"class":72},[51,129475,1699],{"class":175},[51,129477,52456],{"class":64},[51,129479,179],{"class":72},[51,129481,129482,129484,129486,129488,129490],{"class":53,"line":120},[51,129483,128200],{"class":175},[51,129485,52401],{"class":72},[51,129487,1699],{"class":175},[51,129489,52456],{"class":64},[51,129491,179],{"class":72},[51,129493,129494,129496,129498,129500,129502],{"class":53,"line":129},[51,129495,71787],{"class":175},[51,129497,52401],{"class":72},[51,129499,2195],{"class":175},[51,129501,52456],{"class":64},[51,129503,179],{"class":72},[51,129505,129506,129508,129510,129512],{"class":53,"line":206},[51,129507,71869],{"class":175},[51,129509,52401],{"class":72},[51,129511,61806],{"class":175},[51,129513,179],{"class":72},[51,129515,129516,129518,129520,129523],{"class":53,"line":212},[51,129517,71842],{"class":175},[51,129519,52401],{"class":72},[51,129521,129522],{"class":175},"#55585a",[51,129524,179],{"class":72},[51,129526,129527],{"class":53,"line":227},[51,129528,132],{"class":72},[51,129530,129531,129533,129535,129537],{"class":53,"line":370},[51,129532,129440],{"class":68},[51,129534,170],{"class":52264},[51,129536,61904],{"class":68},[51,129538,16534],{"class":72},[51,129540,129541,129543,129545,129548],{"class":53,"line":387},[51,129542,71842],{"class":175},[51,129544,52401],{"class":72},[51,129546,129547],{"class":175},"#ff6700",[51,129549,179],{"class":72},[51,129551,129552],{"class":53,"line":404},[51,129553,132],{"class":72},[2564,129555],{"style":127372,"src":129556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[40,129558,129559],{},"行高=盒子高度：实现文字的垂直居中",[40,129561,129562],{},"原理讲解：",[2564,129564],{"style":127372,"src":129565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129567,129569],{"id":129568},"_82-css背景","8.2 css背景",[40,129571,129572],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[1233,129574,129576],{"id":129575},"_821-背景颜色","8.2.1 背景颜色",[40,129578,129579],{},"background-color:颜色值;",[40,129581,129582],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[1233,129584,129586],{"id":129585},"_822-背景图片","8.2.2 背景图片",[40,129588,129589],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[29,129591,129593],{"className":127516,"code":129592,"language":127518,"meta":35,"style":35},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[37,129594,129595,129601,129617],{"__ignoreMap":35},[51,129596,129597,129599],{"class":53,"line":54},[51,129598,52575],{"class":52264},[51,129600,16534],{"class":72},[51,129602,129603,129606,129608,129610,129612,129615],{"class":53,"line":61},[51,129604,129605],{"class":175},"  background-image",[51,129607,52401],{"class":72},[51,129609,62690],{"class":175},[51,129611,73],{"class":72},[51,129613,129614],{"class":78},"images\u002Fbg.png",[51,129616,615],{"class":72},[51,129618,129619],{"class":53,"line":93},[51,129620,132],{"class":72},[1393,129622,129623,129632],{},[1396,129624,129625],{},[1399,129626,129627,129630],{},[1402,129628,129629],{"align":24699},"参数值",[1402,129631,103660],{"align":24699},[1439,129633,129634,129641],{},[1399,129635,129636,129638],{},[1444,129637,55701],{"align":24699},[1444,129639,129640],{"align":24699},"无背景图（默认的）",[1399,129642,129643,129645],{},[1444,129644,62690],{"align":24699},[1444,129646,129647],{"align":24699},"使用绝对或相对地址指定背景图像",[29,129649,129650],{"className":127516,"code":129592,"language":127518,"meta":35,"style":35},[37,129651,129652,129658,129672],{"__ignoreMap":35},[51,129653,129654,129656],{"class":53,"line":54},[51,129655,52575],{"class":52264},[51,129657,16534],{"class":72},[51,129659,129660,129662,129664,129666,129668,129670],{"class":53,"line":61},[51,129661,129605],{"class":175},[51,129663,52401],{"class":72},[51,129665,62690],{"class":175},[51,129667,73],{"class":72},[51,129669,129614],{"class":78},[51,129671,615],{"class":72},[51,129673,129674],{"class":53,"line":93},[51,129675,132],{"class":72},[40,129677,129678],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[1233,129680,129682],{"id":129681},"_823-背景平铺","8.2.3 背景平铺",[29,129684,129686],{"className":127516,"code":129685,"language":127518,"meta":35,"style":35},"div {\n  background-repeat: no-repeat;\n}\n",[37,129687,129688,129694,129705],{"__ignoreMap":35},[51,129689,129690,129692],{"class":53,"line":54},[51,129691,52575],{"class":52264},[51,129693,16534],{"class":72},[51,129695,129696,129699,129701,129703],{"class":53,"line":61},[51,129697,129698],{"class":175},"  background-repeat",[51,129700,52401],{"class":72},[51,129702,62700],{"class":175},[51,129704,179],{"class":72},[51,129706,129707],{"class":53,"line":93},[51,129708,132],{"class":72},[1393,129710,129711,129719],{},[1396,129712,129713],{},[1399,129714,129715,129717],{},[1402,129716,129629],{"align":24699},[1402,129718,103660],{"align":24699},[1439,129720,129721,129729,129736,129744],{},[1399,129722,129723,129726],{},[1444,129724,129725],{"align":24699},"repeat",[1444,129727,129728],{"align":24699},"背景图像在纵向和横向上平铺（默认的）",[1399,129730,129731,129733],{},[1444,129732,62700],{"align":24699},[1444,129734,129735],{"align":24699},"背景图像不平铺",[1399,129737,129738,129741],{},[1444,129739,129740],{"align":24699},"repeat-x",[1444,129742,129743],{"align":24699},"背景图像在横向上平铺",[1399,129745,129746,129749],{},[1444,129747,129748],{"align":24699},"repeat-y",[1444,129750,129751],{"align":24699},"背景图像在纵向平铺",[1233,129753,129755],{"id":129754},"_824-背景图片位置","8.2.4 背景图片位置",[29,129757,129759],{"className":127516,"code":129758,"language":127518,"meta":35,"style":35},"\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",[37,129760,129761,129766,129772,129786,129790,129795,129801,129817,129821,129826,129832,129846],{"__ignoreMap":35},[51,129762,129763],{"class":53,"line":54},[51,129764,129765],{"class":57},"\u002F* 方位名词 *\u002F\n",[51,129767,129768,129770],{"class":53,"line":61},[51,129769,52575],{"class":52264},[51,129771,16534],{"class":72},[51,129773,129774,129777,129779,129781,129784],{"class":53,"line":93},[51,129775,129776],{"class":175},"  background-position",[51,129778,52401],{"class":72},[51,129780,52556],{"class":175},[51,129782,129783],{"class":175}," top",[51,129785,179],{"class":72},[51,129787,129788],{"class":53,"line":99},[51,129789,132],{"class":72},[51,129791,129792],{"class":53,"line":120},[51,129793,129794],{"class":57},"\u002F* 精确单位 *\u002F\n",[51,129796,129797,129799],{"class":53,"line":129},[51,129798,52575],{"class":52264},[51,129800,16534],{"class":72},[51,129802,129803,129805,129807,129809,129811,129813,129815],{"class":53,"line":206},[51,129804,129776],{"class":175},[51,129806,52401],{"class":72},[51,129808,457],{"class":175},[51,129810,52456],{"class":64},[51,129812,58468],{"class":175},[51,129814,52456],{"class":64},[51,129816,179],{"class":72},[51,129818,129819],{"class":53,"line":212},[51,129820,132],{"class":72},[51,129822,129823],{"class":53,"line":227},[51,129824,129825],{"class":57},"\u002F* 混合单位 *\u002F\n",[51,129827,129828,129830],{"class":53,"line":370},[51,129829,52575],{"class":52264},[51,129831,16534],{"class":72},[51,129833,129834,129836,129838,129840,129842,129844],{"class":53,"line":387},[51,129835,129776],{"class":175},[51,129837,52401],{"class":72},[51,129839,457],{"class":175},[51,129841,52456],{"class":64},[51,129843,18106],{"class":175},[51,129845,179],{"class":72},[51,129847,129848],{"class":53,"line":404},[51,129849,132],{"class":72},[40,129851,129852],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1393,129854,129855,129863],{},[1396,129856,129857],{},[1399,129858,129859,129861],{},[1402,129860,129629],{"align":24699},[1402,129862,26833],{"align":24699},[1439,129864,129865,129872],{},[1399,129866,129867,129869],{},[1444,129868,52932],{"align":24699},[1444,129870,129871],{"align":24699},"百分数|由浮点数和单位标识符组成的长度值",[1399,129873,129874,129877],{},[1444,129875,129876],{"align":24699},"position",[1444,129878,129879],{"align":24699},"top|center|bottom|left|center|right 方位名词",[40,129881,129882],{},"其他说明：",[40,129884,129885],{},"①参数是方位名词",[40,129887,129888],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[40,129890,129891],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[40,129893,129894],{},"②参数是精确单位",[40,129896,129897],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[40,129899,129900],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[40,129902,129903],{},"③参数是混合单位",[40,129905,129906],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[1233,129908,129910],{"id":129909},"_825-背景图片固定","8.2.5 背景图片固定",[29,129912,129914],{"className":127516,"code":129913,"language":127518,"meta":35,"style":35},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[37,129915,129916,129921,129927,129939,129943,129948,129954,129964],{"__ignoreMap":35},[51,129917,129918],{"class":53,"line":54},[51,129919,129920],{"class":57},"\u002F* 背景滚动（默认） *\u002F\n",[51,129922,129923,129925],{"class":53,"line":61},[51,129924,52575],{"class":52264},[51,129926,16534],{"class":72},[51,129928,129929,129932,129934,129937],{"class":53,"line":93},[51,129930,129931],{"class":175},"  background-attachment",[51,129933,52401],{"class":72},[51,129935,129936],{"class":175},"scroll",[51,129938,179],{"class":72},[51,129940,129941],{"class":53,"line":99},[51,129942,132],{"class":72},[51,129944,129945],{"class":53,"line":120},[51,129946,129947],{"class":57},"\u002F* 背景固定 *\u002F\n",[51,129949,129950,129952],{"class":53,"line":129},[51,129951,52575],{"class":52264},[51,129953,16534],{"class":72},[51,129955,129956,129958,129960,129962],{"class":53,"line":206},[51,129957,129931],{"class":175},[51,129959,52401],{"class":72},[51,129961,87197],{"class":175},[51,129963,179],{"class":72},[51,129965,129966],{"class":53,"line":212},[51,129967,132],{"class":72},[1393,129969,129970,129979],{},[1396,129971,129972],{},[1399,129973,129974,129977],{},[1402,129975,129976],{"align":24699},"参数",[1402,129978,103660],{"align":24699},[1439,129980,129981,129988],{},[1399,129982,129983,129985],{},[1444,129984,129936],{"align":24699},[1444,129986,129987],{"align":24699},"背景图像是随对象内容滚动",[1399,129989,129990,129992],{},[1444,129991,87197],{"align":24699},[1444,129993,129994],{"align":24699},"背景图像固定",[1233,129996,129998],{"id":129997},"_826-背景样式合写","8.2.6 背景样式合写",[29,130000,130002],{"className":127516,"code":130001,"language":127518,"meta":35,"style":35},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[37,130003,130004,130009,130015,130043],{"__ignoreMap":35},[51,130005,130006],{"class":53,"line":54},[51,130007,130008],{"class":57},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[51,130010,130011,130013],{"class":53,"line":61},[51,130012,52575],{"class":52264},[51,130014,16534],{"class":72},[51,130016,130017,130019,130021,130023,130026,130028,130030,130032,130034,130037,130039,130041],{"class":53,"line":93},[51,130018,71575],{"class":175},[51,130020,52401],{"class":72},[51,130022,61806],{"class":175},[51,130024,130025],{"class":175}," url",[51,130027,73],{"class":72},[51,130029,129614],{"class":78},[51,130031,14676],{"class":72},[51,130033,62700],{"class":175},[51,130035,130036],{"class":175}," fixed",[51,130038,18106],{"class":175},[51,130040,129783],{"class":175},[51,130042,179],{"class":72},[51,130044,130045],{"class":53,"line":99},[51,130046,132],{"class":72},[1233,130048,130050],{"id":130049},"_827-背景色半透明","8.2.7 背景色半透明",[29,130052,130054],{"className":127516,"code":130053,"language":127518,"meta":35,"style":35},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[37,130055,130056,130062,130088],{"__ignoreMap":35},[51,130057,130058,130060],{"class":53,"line":54},[51,130059,52575],{"class":52264},[51,130061,16534],{"class":72},[51,130063,130064,130066,130068,130070,130072,130074,130076,130078,130080,130082,130084,130086],{"class":53,"line":61},[51,130065,71575],{"class":175},[51,130067,52401],{"class":72},[51,130069,56074],{"class":175},[51,130071,73],{"class":72},[51,130073,176],{"class":175},[51,130075,13397],{"class":72},[51,130077,176],{"class":175},[51,130079,13397],{"class":72},[51,130081,176],{"class":175},[51,130083,13397],{"class":72},[51,130085,101485],{"class":175},[51,130087,615],{"class":72},[51,130089,130090],{"class":53,"line":93},[51,130091,132],{"class":72},[40,130093,100360],{},[40,130095,130096],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[40,130098,130099],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[40,130101,130102],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[40,130104,130105],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[1233,130107,130109],{"id":130108},"_828-总结","8.2.8 总结",[1393,130111,130112,130123],{},[1396,130113,130114],{},[1399,130115,130116,130119,130121],{},[1402,130117,130118],{"align":24699},"属性",[1402,130120,103660],{"align":24699},[1402,130122,1407],{"align":24699},[1439,130124,130125,130136,130147,130158,130169,130180,130191],{},[1399,130126,130127,130130,130133],{},[1444,130128,130129],{"align":24699},"background-color",[1444,130131,130132],{"align":24699},"背景颜色",[1444,130134,130135],{"align":24699},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1399,130137,130138,130141,130144],{},[1444,130139,130140],{"align":24699},"background-image",[1444,130142,130143],{"align":24699},"背景图片",[1444,130145,130146],{"align":24699},"url(图片路径)",[1399,130148,130149,130152,130155],{},[1444,130150,130151],{"align":24699},"background-repeat",[1444,130153,130154],{"align":24699},"是否平铺",[1444,130156,130157],{"align":24699},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1399,130159,130160,130163,130166],{},[1444,130161,130162],{"align":24699},"background-position",[1444,130164,130165],{"align":24699},"背景位置",[1444,130167,130168],{"align":24699},"length\u002Fposition 分别是x和y坐标",[1399,130170,130171,130174,130177],{},[1444,130172,130173],{"align":24699},"background-attachment",[1444,130175,130176],{"align":24699},"背景附着",[1444,130178,130179],{"align":24699},"scroll(背景滚动) \u002Ffixed (背景固定)",[1399,130181,130182,130185,130188],{},[1444,130183,130184],{"align":24699},"背景简写",[1444,130186,130187],{"align":24699},"书写更简单",[1444,130189,130190],{"align":24699},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1399,130192,130193,130196,130199],{},[1444,130194,130195],{"align":24699},"背景半透明",[1444,130197,130198],{"align":24699},"背景颜色半透明",[1444,130200,130201],{"align":24699},"background: rgba(0,0,0.3); 后面必须是4个值",[40,130203,130204],{},"颜色渐变：",[2564,130206],{"style":127372,"src":130207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[2564,130209],{"style":127372,"src":130210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[1233,130212,130214],{"id":130213},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[29,130216,130218],{"className":128263,"code":130217,"language":128265,"meta":35,"style":35},"\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",[37,130219,130220,130235,130254,130273,130292,130311,130330],{"__ignoreMap":35},[51,130221,130222,130224,130226,130228,130230,130233],{"class":53,"line":54},[51,130223,2154],{"class":72},[51,130225,52575],{"class":52264},[51,130227,54450],{"class":68},[51,130229,108],{"class":72},[51,130231,130232],{"class":282},"\"nav\"",[51,130234,52271],{"class":72},[51,130236,130237,130239,130241,130243,130245,130247,130250,130252],{"class":53,"line":61},[51,130238,53108],{"class":72},[51,130240,981],{"class":52264},[51,130242,62021],{"class":68},[51,130244,108],{"class":72},[51,130246,62026],{"class":282},[51,130248,130249],{"class":72},">五彩导航1\u003C\u002F",[51,130251,981],{"class":52264},[51,130253,52271],{"class":72},[51,130255,130256,130258,130260,130262,130264,130266,130269,130271],{"class":53,"line":93},[51,130257,53108],{"class":72},[51,130259,981],{"class":52264},[51,130261,62021],{"class":68},[51,130263,108],{"class":72},[51,130265,62026],{"class":282},[51,130267,130268],{"class":72},">五彩导航2\u003C\u002F",[51,130270,981],{"class":52264},[51,130272,52271],{"class":72},[51,130274,130275,130277,130279,130281,130283,130285,130288,130290],{"class":53,"line":99},[51,130276,53108],{"class":72},[51,130278,981],{"class":52264},[51,130280,62021],{"class":68},[51,130282,108],{"class":72},[51,130284,62026],{"class":282},[51,130286,130287],{"class":72},">五彩导航3\u003C\u002F",[51,130289,981],{"class":52264},[51,130291,52271],{"class":72},[51,130293,130294,130296,130298,130300,130302,130304,130307,130309],{"class":53,"line":120},[51,130295,53108],{"class":72},[51,130297,981],{"class":52264},[51,130299,62021],{"class":68},[51,130301,108],{"class":72},[51,130303,62026],{"class":282},[51,130305,130306],{"class":72},">五彩导航4\u003C\u002F",[51,130308,981],{"class":52264},[51,130310,52271],{"class":72},[51,130312,130313,130315,130317,130319,130321,130323,130326,130328],{"class":53,"line":129},[51,130314,53108],{"class":72},[51,130316,981],{"class":52264},[51,130318,62021],{"class":68},[51,130320,108],{"class":72},[51,130322,62026],{"class":282},[51,130324,130325],{"class":72},">五彩导航5\u003C\u002F",[51,130327,981],{"class":52264},[51,130329,52271],{"class":72},[51,130331,130332,130334,130336],{"class":53,"line":206},[51,130333,52749],{"class":72},[51,130335,52575],{"class":52264},[51,130337,52271],{"class":72},[29,130339,130341],{"className":127516,"code":130340,"language":127518,"meta":35,"style":35},".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",[37,130342,130343,130352,130362,130374,130386,130396,130408,130418,130422,130447,130470,130493,130516],{"__ignoreMap":35},[51,130344,130345,130348,130350],{"class":53,"line":54},[51,130346,130347],{"class":68},".nav",[51,130349,170],{"class":52264},[51,130351,16534],{"class":72},[51,130353,130354,130356,130358,130360],{"class":53,"line":61},[51,130355,129132],{"class":175},[51,130357,52401],{"class":72},[51,130359,73347],{"class":175},[51,130361,179],{"class":72},[51,130363,130364,130366,130368,130370,130372],{"class":53,"line":93},[51,130365,71532],{"class":175},[51,130367,52401],{"class":72},[51,130369,2062],{"class":175},[51,130371,52456],{"class":64},[51,130373,179],{"class":72},[51,130375,130376,130378,130380,130382,130384],{"class":53,"line":99},[51,130377,71752],{"class":175},[51,130379,52401],{"class":72},[51,130381,2101],{"class":175},[51,130383,52456],{"class":64},[51,130385,179],{"class":72},[51,130387,130388,130390,130392,130394],{"class":53,"line":120},[51,130389,71490],{"class":175},[51,130391,52401],{"class":72},[51,130393,52556],{"class":175},[51,130395,179],{"class":72},[51,130397,130398,130400,130402,130404,130406],{"class":53,"line":129},[51,130399,128200],{"class":175},[51,130401,52401],{"class":72},[51,130403,2101],{"class":175},[51,130405,52456],{"class":64},[51,130407,179],{"class":72},[51,130409,130410,130412,130414,130416],{"class":53,"line":206},[51,130411,71869],{"class":175},[51,130413,52401],{"class":72},[51,130415,61806],{"class":175},[51,130417,179],{"class":72},[51,130419,130420],{"class":53,"line":212},[51,130421,132],{"class":72},[51,130423,130424,130426,130428,130431,130433,130435,130438,130440,130442,130444],{"class":53,"line":227},[51,130425,130347],{"class":68},[51,130427,170],{"class":52264},[51,130429,130430],{"class":68},":nth-child",[51,130432,73],{"class":72},[51,130434,791],{"class":175},[51,130436,130437],{"class":72},") { ",[51,130439,130129],{"class":175},[51,130441,52401],{"class":72},[51,130443,129547],{"class":175},[51,130445,130446],{"class":72},"; }\n",[51,130448,130449,130451,130453,130455,130457,130459,130461,130463,130465,130468],{"class":53,"line":370},[51,130450,130347],{"class":68},[51,130452,170],{"class":52264},[51,130454,130430],{"class":68},[51,130456,73],{"class":72},[51,130458,1334],{"class":175},[51,130460,130437],{"class":72},[51,130462,130129],{"class":175},[51,130464,52401],{"class":72},[51,130466,130467],{"class":175},"#ff0000",[51,130469,130446],{"class":72},[51,130471,130472,130474,130476,130478,130480,130482,130484,130486,130488,130491],{"class":53,"line":387},[51,130473,130347],{"class":68},[51,130475,170],{"class":52264},[51,130477,130430],{"class":68},[51,130479,73],{"class":72},[51,130481,1328],{"class":175},[51,130483,130437],{"class":72},[51,130485,130129],{"class":175},[51,130487,52401],{"class":72},[51,130489,130490],{"class":175},"#00a4ff",[51,130492,130446],{"class":72},[51,130494,130495,130497,130499,130501,130503,130505,130507,130509,130511,130514],{"class":53,"line":404},[51,130496,130347],{"class":68},[51,130498,170],{"class":52264},[51,130500,130430],{"class":68},[51,130502,73],{"class":72},[51,130504,1543],{"class":175},[51,130506,130437],{"class":72},[51,130508,130129],{"class":175},[51,130510,52401],{"class":72},[51,130512,130513],{"class":175},"#ff00ff",[51,130515,130446],{"class":72},[51,130517,130518,130520,130522,130524,130526,130528,130530,130532,130534,130537],{"class":53,"line":415},[51,130519,130347],{"class":68},[51,130521,170],{"class":52264},[51,130523,130430],{"class":68},[51,130525,73],{"class":72},[51,130527,1568],{"class":175},[51,130529,130437],{"class":72},[51,130531,130129],{"class":175},[51,130533,52401],{"class":72},[51,130535,130536],{"class":175},"#00ff00",[51,130538,130446],{"class":72},[14,130540,130542],{"id":130541},"_83-css三大特性","8.3 css三大特性",[1233,130544,130546],{"id":130545},"_831-层叠性","8.3.1 层叠性",[40,130548,130549],{},"为了解决样式冲突问题",[40,130551,130552],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[40,130554,130555],{},"   ②样式不冲突，不会层叠",[1233,130557,130559],{"id":130558},"_832-继承性","8.3.2 继承性",[40,130561,130562],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[40,130564,130565],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[29,130567,130569],{"className":127516,"code":130568,"language":127518,"meta":35,"style":35},"p {\n  color: #333;\n}\n",[37,130570,130571,130577,130587],{"__ignoreMap":35},[51,130572,130573,130575],{"class":53,"line":54},[51,130574,40],{"class":52264},[51,130576,16534],{"class":72},[51,130578,130579,130581,130583,130585],{"class":53,"line":61},[51,130580,71869],{"class":175},[51,130582,52401],{"class":72},[51,130584,63333],{"class":175},[51,130586,179],{"class":72},[51,130588,130589],{"class":53,"line":93},[51,130590,132],{"class":72},[2564,130592],{"style":127372,"src":130593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[40,130595,130596],{},"解释：①行高可以跟单位也可以不跟单位",[40,130598,130599],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[40,130601,130602],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[40,130604,130605],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[1233,130607,130609],{"id":130608},"_833-优先级","8.3.3 优先级",[19,130611,130612,130615],{},[22,130613,130614],{},"选择器相同，则执行层叠性",[22,130616,130617],{},"选择器不同，则根据选择器权重执行",[1393,130619,130620,130630],{},[1396,130621,130622],{},[1399,130623,130624,130627],{},[1402,130625,130626],{"align":24699},"选择器",[1402,130628,130629],{"align":24699},"选择器权重",[1439,130631,130632,130640,130648,130656,130664,130672],{},[1399,130633,130634,130637],{},[1444,130635,130636],{"align":24699},"继承 或者*",[1444,130638,130639],{"align":24699},"0，0，0，0",[1399,130641,130642,130645],{},[1444,130643,130644],{"align":24699},"标签选择器",[1444,130646,130647],{"align":24699},"0，0，0，1",[1399,130649,130650,130653],{},[1444,130651,130652],{"align":24699},"类选择器，伪类选择器",[1444,130654,130655],{"align":24699},"0，0，1，0",[1399,130657,130658,130661],{},[1444,130659,130660],{"align":24699},"ID选择器",[1444,130662,130663],{"align":24699},"0，1，0，0",[1399,130665,130666,130669],{},[1444,130667,130668],{"align":24699},"行内样式",[1444,130670,130671],{"align":24699},"1，0，0，0",[1399,130673,130674,130677],{},[1444,130675,130676],{"align":24699},"！important",[1444,130678,130679],{"align":24699},"无穷大",[40,130681,130682],{},"! important用法：",[29,130684,130686],{"className":127516,"code":130685,"language":127518,"meta":35,"style":35},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[37,130687,130688,130693,130699,130712,130716,130721,130727,130737],{"__ignoreMap":35},[51,130689,130690],{"class":53,"line":54},[51,130691,130692],{"class":57},"\u002F* !important 拥有最高优先级 *\u002F\n",[51,130694,130695,130697],{"class":53,"line":61},[51,130696,52575],{"class":52264},[51,130698,16534],{"class":72},[51,130700,130701,130703,130705,130707,130710],{"class":53,"line":93},[51,130702,71869],{"class":175},[51,130704,52401],{"class":72},[51,130706,52609],{"class":175},[51,130708,130709],{"class":64}," !important",[51,130711,179],{"class":72},[51,130713,130714],{"class":53,"line":99},[51,130715,132],{"class":72},[51,130717,130718],{"class":53,"line":120},[51,130719,130720],{"class":57},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[51,130722,130723,130725],{"class":53,"line":129},[51,130724,52575],{"class":52264},[51,130726,16534],{"class":72},[51,130728,130729,130731,130733,130735],{"class":53,"line":206},[51,130730,71869],{"class":175},[51,130732,52401],{"class":72},[51,130734,58385],{"class":175},[51,130736,179],{"class":72},[51,130738,130739],{"class":53,"line":212},[51,130740,132],{"class":72},[40,130742,130743],{},"优先级注意点：",[40,130745,130746],{},"①权重是有4组数字组成,但是不会有进位",[40,130748,130749],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[40,130751,130752],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[40,130754,130755],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[40,130757,130758],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[40,130760,130761],{},"⑥复合选择器",[1393,130763,130764,130774],{},[1396,130765,130766],{},[1399,130767,130768,130771],{},[1402,130769,130770],{"align":24699},"div ul li",[1402,130772,130773],{"align":24699},"0,0,0,3",[1439,130775,130776,130784,130792],{},[1399,130777,130778,130781],{},[1444,130779,130780],{"align":24699},".nav ul li",[1444,130782,130783],{"align":24699},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1399,130785,130786,130789],{},[1444,130787,130788],{"align":24699},"a:hover",[1444,130790,130791],{"align":24699},"0,0,1,1",[1399,130793,130794,130797],{},[1444,130795,130796],{"align":24699},".nav a",[1444,130798,130791],{"align":24699},[1179,130800,130801],{},"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":35,"searchDepth":61,"depth":61,"links":130803},[130804,130812,130823],{"id":128912,"depth":61,"text":128913,"children":130805},[130806,130807,130808,130809,130810,130811],{"id":128925,"depth":93,"text":128926},{"id":128997,"depth":93,"text":128998},{"id":129069,"depth":93,"text":129070},{"id":129100,"depth":93,"text":129101},{"id":129107,"depth":93,"text":129108},{"id":129260,"depth":93,"text":129261},{"id":129568,"depth":61,"text":129569,"children":130813},[130814,130815,130816,130817,130818,130819,130820,130821,130822],{"id":129575,"depth":93,"text":129576},{"id":129585,"depth":93,"text":129586},{"id":129681,"depth":93,"text":129682},{"id":129754,"depth":93,"text":129755},{"id":129909,"depth":93,"text":129910},{"id":129997,"depth":93,"text":129998},{"id":130049,"depth":93,"text":130050},{"id":130108,"depth":93,"text":130109},{"id":130213,"depth":93,"text":130214},{"id":130541,"depth":61,"text":130542,"children":130824},[130825,130826,130827],{"id":130545,"depth":93,"text":130546},{"id":130558,"depth":93,"text":130559},{"id":130608,"depth":93,"text":130609},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128904,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130834,"title":130835,"body":130836,"description":24339,"extension":1190,"meta":132426,"navigation":1192,"path":132427,"seo":132428,"stem":132429,"__hash__":132430},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130837,"toc":132405},[130838,130841,130845,130848,130851,130854,130857,130860,130863,130866,130870,130878,130915,130951,130954,130968,130973,131007,131010,131103,131108,131111,131141,131144,131149,131157,131161,131168,131214,131258,131263,131266,131269,131272,131275,131278,131281,131283,131286,131290,131295,131339,131344,131347,131350,131387,131392,131395,131398,131401,131404,131436,131439,131442,131445,131477,131480,131483,131486,131490,131493,131525,131528,131532,131552,131555,131563,131566,131570,131575,131578,131610,131615,131618,131656,131660,131665,131668,131671,131702,131705,131722,131727,131779,131839,131844,131898,131936,131940,131944,131947,131951,131959,131962,131964,131975,131980,132028,132062,132065,132068,132071,132074,132118,132121,132124,132127,132130,132133,132136,132180,132183,132186,132189,132192,132195,132198,132204,132207,132251,132254,132257,132260,132263,132266,132310,132313,132315,132318,132322,132326,132364,132368,132371,132374,132378,132386,132390,132393,132396,132399,132402],[10,130839,130835],{"id":130840},"_9-css盒模型浮动与切图",[14,130842,130844],{"id":130843},"_91-盒子模型","9.1 盒子模型",[40,130846,130847],{},"利用盒子来设计网页",[40,130849,130850],{},"盒子包含：边框、外边距、内边距、实际内容",[40,130852,130853],{},"网页布局设置：",[40,130855,130856],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[40,130858,130859],{},"②利用css设置好盒子样式，然后摆放到相应位置",[40,130861,130862],{},"③往盒子里装内容",[2564,130864],{"style":127372,"src":130865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[1233,130867,130869],{"id":130868},"_911-边框border","9.1.1 边框（border）",[19,130871,130872,130875],{},[22,130873,130874],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[22,130876,130877],{},"语法",[29,130879,130881],{"className":127516,"code":130880,"language":127518,"meta":35,"style":35},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[37,130882,130883,130888,130894,130911],{"__ignoreMap":35},[51,130884,130885],{"class":53,"line":54},[51,130886,130887],{"class":57},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[51,130889,130890,130892],{"class":53,"line":61},[51,130891,52575],{"class":52264},[51,130893,16534],{"class":72},[51,130895,130896,130898,130900,130902,130904,130906,130909],{"class":53,"line":93},[51,130897,71860],{"class":175},[51,130899,52401],{"class":72},[51,130901,791],{"class":175},[51,130903,52456],{"class":64},[51,130905,52485],{"class":175},[51,130907,130908],{"class":175}," #ccc",[51,130910,179],{"class":72},[51,130912,130913],{"class":53,"line":99},[51,130914,132],{"class":72},[1393,130916,130917,130925],{},[1396,130918,130919],{},[1399,130920,130921,130923],{},[1402,130922,130118],{"align":24699},[1402,130924,103660],{"align":24699},[1439,130926,130927,130935,130943],{},[1399,130928,130929,130932],{},[1444,130930,130931],{"align":24699},"border-width",[1444,130933,130934],{"align":24699},"定义边框粗细，单位是px",[1399,130936,130937,130940],{},[1444,130938,130939],{"align":24699},"border-style",[1444,130941,130942],{"align":24699},"边框的样式",[1399,130944,130945,130948],{},[1444,130946,130947],{"align":24699},"border-color",[1444,130949,130950],{"align":24699},"边框的颜色",[40,130952,130953],{},"边框样式 border-style 可以设置如下值：",[1000,130955,130956,130959,130962,130965],{},[22,130957,130958],{},"none：没有边框即忽略所有边框的宽度（默认值）",[22,130960,130961],{},"solid：边框为单实线(最为常用的)",[22,130963,130964],{},"dashed：边框为虚线",[22,130966,130967],{},"dotted：边框为点线",[19,130969,130970],{"start":93},[22,130971,130972],{},"边框的合写分写",[29,130974,130975],{"className":127516,"code":130880,"language":127518,"meta":35,"style":35},[37,130976,130977,130981,130987,131003],{"__ignoreMap":35},[51,130978,130979],{"class":53,"line":54},[51,130980,130887],{"class":57},[51,130982,130983,130985],{"class":53,"line":61},[51,130984,52575],{"class":52264},[51,130986,16534],{"class":72},[51,130988,130989,130991,130993,130995,130997,130999,131001],{"class":53,"line":93},[51,130990,71860],{"class":175},[51,130992,52401],{"class":72},[51,130994,791],{"class":175},[51,130996,52456],{"class":64},[51,130998,52485],{"class":175},[51,131000,130908],{"class":175},[51,131002,179],{"class":72},[51,131004,131005],{"class":53,"line":99},[51,131006,132],{"class":72},[40,131008,131009],{},"边框分开写法：",[29,131011,131013],{"className":127516,"code":131012,"language":127518,"meta":35,"style":35},"\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",[37,131014,131015,131020,131026,131044,131062,131081,131099],{"__ignoreMap":35},[51,131016,131017],{"class":53,"line":54},[51,131018,131019],{"class":57},"\u002F* 边框分开写法 *\u002F\n",[51,131021,131022,131024],{"class":53,"line":61},[51,131023,52575],{"class":52264},[51,131025,16534],{"class":72},[51,131027,131028,131031,131033,131035,131037,131039,131042],{"class":53,"line":93},[51,131029,131030],{"class":175},"  border-top",[51,131032,52401],{"class":72},[51,131034,791],{"class":175},[51,131036,52456],{"class":64},[51,131038,52485],{"class":175},[51,131040,131041],{"class":175}," #000",[51,131043,179],{"class":72},[51,131045,131046,131049,131051,131053,131055,131057,131060],{"class":53,"line":99},[51,131047,131048],{"class":175},"  border-right",[51,131050,52401],{"class":72},[51,131052,1334],{"class":175},[51,131054,52456],{"class":64},[51,131056,63205],{"class":175},[51,131058,131059],{"class":175}," #333",[51,131061,179],{"class":72},[51,131063,131064,131067,131069,131071,131073,131076,131079],{"class":53,"line":120},[51,131065,131066],{"class":175},"  border-bottom",[51,131068,52401],{"class":72},[51,131070,1328],{"class":175},[51,131072,52456],{"class":64},[51,131074,131075],{"class":175}," dotted",[51,131077,131078],{"class":175}," #666",[51,131080,179],{"class":72},[51,131082,131083,131086,131088,131090,131092,131094,131097],{"class":53,"line":129},[51,131084,131085],{"class":175},"  border-left",[51,131087,52401],{"class":72},[51,131089,791],{"class":175},[51,131091,52456],{"class":64},[51,131093,52485],{"class":175},[51,131095,131096],{"class":175}," #999",[51,131098,179],{"class":72},[51,131100,131101],{"class":53,"line":206},[51,131102,132],{"class":72},[19,131104,131105],{"start":99},[22,131106,131107],{},"表格的细线边框",[40,131109,131110],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[29,131112,131114],{"className":127516,"code":131113,"language":127518,"meta":35,"style":35},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[37,131115,131116,131121,131127,131137],{"__ignoreMap":35},[51,131117,131118],{"class":53,"line":54},[51,131119,131120],{"class":57},"\u002F* 表格细线边框合并 *\u002F\n",[51,131122,131123,131125],{"class":53,"line":61},[51,131124,1393],{"class":52264},[51,131126,16534],{"class":72},[51,131128,131129,131131,131133,131135],{"class":53,"line":93},[51,131130,71542],{"class":175},[51,131132,52401],{"class":72},[51,131134,65999],{"class":175},[51,131136,179],{"class":72},[51,131138,131139],{"class":53,"line":99},[51,131140,132],{"class":72},[40,131142,131143],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[19,131145,131146],{"start":120},[22,131147,131148],{},"解决边框额外增加盒子的实际大小的方法：",[1000,131150,131151,131154],{},[22,131152,131153],{},"测量盒子大小的时候,不量边框",[22,131155,131156],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[1233,131158,131160],{"id":131159},"_912-内边距","9.1.2 内边距",[19,131162,131163,131166],{},[22,131164,131165],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[22,131167,130877],{},[1393,131169,131170,131180],{},[1396,131171,131172],{},[1399,131173,131174,131177],{},[1402,131175,131176],{"align":24699},"值的个数",[1402,131178,131179],{"align":24699},"表达意思",[1439,131181,131182,131190,131198,131206],{},[1399,131183,131184,131187],{},[1444,131185,131186],{"align":24699},"padding: 5px;",[1444,131188,131189],{"align":24699},"1个值，代表上下左右都有5个元素",[1399,131191,131192,131195],{},[1444,131193,131194],{"align":24699},"padding: 5px 10px;",[1444,131196,131197],{"align":24699},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1399,131199,131200,131203],{},[1444,131201,131202],{"align":24699},"padding: 5px 10px 20px;",[1444,131204,131205],{"align":24699},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1399,131207,131208,131211],{},[1444,131209,131210],{"align":24699},"padding: 5px 10px 20px 30px;",[1444,131212,131213],{"align":24699},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1393,131215,131216,131224],{},[1396,131217,131218],{},[1399,131219,131220,131222],{},[1402,131221,130118],{"align":24699},[1402,131223,103660],{"align":24699},[1439,131225,131226,131234,131242,131250],{},[1399,131227,131228,131231],{},[1444,131229,131230],{"align":24699},"padding-left",[1444,131232,131233],{"align":24699},"左内边距",[1399,131235,131236,131239],{},[1444,131237,131238],{"align":24699},"padding-right",[1444,131240,131241],{"align":24699},"右内边距",[1399,131243,131244,131247],{},[1444,131245,131246],{"align":24699},"padding-top",[1444,131248,131249],{"align":24699},"上内边距",[1399,131251,131252,131255],{},[1444,131253,131254],{"align":24699},"padding-bottom",[1444,131256,131257],{"align":24699},"下内边距",[19,131259,131260],{"start":93},[22,131261,131262],{},"内边距会影响盒子的实际大小",[40,131264,131265],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[40,131267,131268],{},"①内容和边框有了距离，添加了内边距",[40,131270,131271],{},"②padding影响了盒子实际大小",[40,131273,131274],{},"内边距对盒子大小的影响：",[40,131276,131277],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[40,131279,131280],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[40,131282,96184],{},[40,131284,131285],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[1233,131287,131289],{"id":131288},"_913-外边距","9.1.3 外边距",[19,131291,131292],{},[22,131293,131294],{},"控制盒子与盒子之间的距离",[1393,131296,131297,131305],{},[1396,131298,131299],{},[1399,131300,131301,131303],{},[1402,131302,130118],{"align":24699},[1402,131304,103660],{"align":24699},[1439,131306,131307,131315,131323,131331],{},[1399,131308,131309,131312],{},[1444,131310,131311],{"align":24699},"margin-left",[1444,131313,131314],{"align":24699},"左外边距",[1399,131316,131317,131320],{},[1444,131318,131319],{"align":24699},"margin-right",[1444,131321,131322],{"align":24699},"右外边距",[1399,131324,131325,131328],{},[1444,131326,131327],{"align":24699},"margin-top",[1444,131329,131330],{"align":24699},"上外边距",[1399,131332,131333,131336],{},[1444,131334,131335],{"align":24699},"margin-bottom",[1444,131337,131338],{"align":24699},"下外边距",[19,131340,131341],{"start":61},[22,131342,131343],{},"外边距可以让块级盒子水平居中的两个条件：",[40,131345,131346],{},"①盒子必须指定了宽度（width）",[40,131348,131349],{},"②盒子左右的外边距都设置为 auto",[29,131351,131353],{"className":127516,"code":131352,"language":127518,"meta":35,"style":35},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[37,131354,131355,131360,131367,131383],{"__ignoreMap":35},[51,131356,131357],{"class":53,"line":54},[51,131358,131359],{"class":57},"\u002F* margin 复合写法（同上） *\u002F\n",[51,131361,131362,131365],{"class":53,"line":61},[51,131363,131364],{"class":68},".box",[51,131366,16534],{"class":72},[51,131368,131369,131371,131373,131375,131377,131380],{"class":53,"line":93},[51,131370,71434],{"class":175},[51,131372,52401],{"class":72},[51,131374,176],{"class":175},[51,131376,52520],{"class":175},[51,131378,131379],{"class":72},";  ",[51,131381,131382],{"class":57},"\u002F* 块级盒子水平居中 *\u002F\n",[51,131384,131385],{"class":53,"line":99},[51,131386,132],{"class":72},[19,131388,131389],{"start":93},[22,131390,131391],{},"外边距塌陷问题",[40,131393,131394],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[2564,131396],{"style":127372,"src":131397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[40,131399,131400],{},"解决方案：",[40,131402,131403],{},"①可以为父亲元素定义上边距",[29,131405,131406],{"className":127516,"code":131352,"language":127518,"meta":35,"style":35},[37,131407,131408,131412,131418,131432],{"__ignoreMap":35},[51,131409,131410],{"class":53,"line":54},[51,131411,131359],{"class":57},[51,131413,131414,131416],{"class":53,"line":61},[51,131415,131364],{"class":68},[51,131417,16534],{"class":72},[51,131419,131420,131422,131424,131426,131428,131430],{"class":53,"line":93},[51,131421,71434],{"class":175},[51,131423,52401],{"class":72},[51,131425,176],{"class":175},[51,131427,52520],{"class":175},[51,131429,131379],{"class":72},[51,131431,131382],{"class":57},[51,131433,131434],{"class":53,"line":99},[51,131435,132],{"class":72},[40,131437,131438],{},"②可以为父亲元素定义上内边距",[40,131440,131441],{},"③可以为父亲元素添加overflow:hidden",[2564,131443],{"style":127372,"src":131444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[29,131446,131447],{"className":127516,"code":131352,"language":127518,"meta":35,"style":35},[37,131448,131449,131453,131459,131473],{"__ignoreMap":35},[51,131450,131451],{"class":53,"line":54},[51,131452,131359],{"class":57},[51,131454,131455,131457],{"class":53,"line":61},[51,131456,131364],{"class":68},[51,131458,16534],{"class":72},[51,131460,131461,131463,131465,131467,131469,131471],{"class":53,"line":93},[51,131462,71434],{"class":175},[51,131464,52401],{"class":72},[51,131466,176],{"class":175},[51,131468,52520],{"class":175},[51,131470,131379],{"class":72},[51,131472,131382],{"class":57},[51,131474,131475],{"class":53,"line":99},[51,131476,132],{"class":72},[2564,131478],{"style":127372,"src":131479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[40,131481,131482],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[40,131484,131485],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[1233,131487,131489],{"id":131488},"_914-清除内外边距","9.1.4 清除内外边距",[40,131491,131492],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[29,131494,131495],{"className":127516,"code":131352,"language":127518,"meta":35,"style":35},[37,131496,131497,131501,131507,131521],{"__ignoreMap":35},[51,131498,131499],{"class":53,"line":54},[51,131500,131359],{"class":57},[51,131502,131503,131505],{"class":53,"line":61},[51,131504,131364],{"class":68},[51,131506,16534],{"class":72},[51,131508,131509,131511,131513,131515,131517,131519],{"class":53,"line":93},[51,131510,71434],{"class":175},[51,131512,52401],{"class":72},[51,131514,176],{"class":175},[51,131516,52520],{"class":175},[51,131518,131379],{"class":72},[51,131520,131382],{"class":57},[51,131522,131523],{"class":53,"line":99},[51,131524,132],{"class":72},[40,131526,131527],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[1233,131529,131531],{"id":131530},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1000,131533,131534,131537,131540,131543,131546,131549],{},[22,131535,131536],{},"文件→打开 ：可以打开我们要测量的图片",[22,131538,131539],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[22,131541,131542],{},"右击标尺，把里面的单位改为像素",[22,131544,131545],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[22,131547,131548],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[22,131550,131551],{},"用选区拖动 可以测量大小",[2564,131553],{"style":127372,"src":131554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1000,131556,131557,131560],{},[22,131558,131559],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[22,131561,131562],{},"吸管取色工具",[2564,131564],{"style":127372,"src":131565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[1233,131567,131569],{"id":131568},"_916-案例","9.1.6 案例",[19,131571,131572],{},[22,131573,131574],{},"小米商品",[2564,131576],{"style":127372,"src":131577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[29,131579,131580],{"className":127516,"code":131352,"language":127518,"meta":35,"style":35},[37,131581,131582,131586,131592,131606],{"__ignoreMap":35},[51,131583,131584],{"class":53,"line":54},[51,131585,131359],{"class":57},[51,131587,131588,131590],{"class":53,"line":61},[51,131589,131364],{"class":68},[51,131591,16534],{"class":72},[51,131593,131594,131596,131598,131600,131602,131604],{"class":53,"line":93},[51,131595,71434],{"class":175},[51,131597,52401],{"class":72},[51,131599,176],{"class":175},[51,131601,52520],{"class":175},[51,131603,131379],{"class":72},[51,131605,131382],{"class":57},[51,131607,131608],{"class":53,"line":99},[51,131609,132],{"class":72},[19,131611,131612],{"start":61},[22,131613,131614],{},"快报模块",[2564,131616],{"style":127372,"src":131617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[29,131619,131621],{"className":128263,"code":131620,"language":128265,"meta":35,"style":35},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[37,131622,131623,131628,131643,131648],{"__ignoreMap":35},[51,131624,131625],{"class":53,"line":54},[51,131626,131627],{"class":57},"\u003C!-- HTML 代码示例 -->\n",[51,131629,131630,131632,131634,131636,131638,131641],{"class":53,"line":61},[51,131631,2154],{"class":72},[51,131633,52575],{"class":52264},[51,131635,54450],{"class":68},[51,131637,108],{"class":72},[51,131639,131640],{"class":282},"\"example\"",[51,131642,52271],{"class":72},[51,131644,131645],{"class":53,"line":93},[51,131646,131647],{"class":72},"  示例内容\n",[51,131649,131650,131652,131654],{"class":53,"line":99},[51,131651,52749],{"class":72},[51,131653,52575],{"class":52264},[51,131655,52271],{"class":72},[1233,131657,131659],{"id":131658},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[19,131661,131662],{},[22,131663,131664],{},"圆角边框",[40,131666,131667],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[2564,131669],{"style":127372,"src":131670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[29,131672,131674],{"className":127516,"code":131673,"language":127518,"meta":35,"style":35},"div {\n  border: 1px solid #ccc;\n}\n",[37,131675,131676,131682,131698],{"__ignoreMap":35},[51,131677,131678,131680],{"class":53,"line":54},[51,131679,52575],{"class":52264},[51,131681,16534],{"class":72},[51,131683,131684,131686,131688,131690,131692,131694,131696],{"class":53,"line":61},[51,131685,71860],{"class":175},[51,131687,52401],{"class":72},[51,131689,791],{"class":175},[51,131691,52456],{"class":64},[51,131693,52485],{"class":175},[51,131695,130908],{"class":175},[51,131697,179],{"class":72},[51,131699,131700],{"class":53,"line":93},[51,131701,132],{"class":72},[40,131703,131704],{},"解释:",[1000,131706,131707,131710,131713,131716,131719],{},[22,131708,131709],{},"参数值可以为数值或百分比的形式",[22,131711,131712],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[22,131714,131715],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[22,131717,131718],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[22,131720,131721],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[19,131723,131724],{"start":61},[22,131725,131726],{},"盒子阴影",[29,131728,131730],{"className":127516,"code":131729,"language":127518,"meta":35,"style":35},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[37,131731,131732,131738,131775],{"__ignoreMap":35},[51,131733,131734,131736],{"class":53,"line":54},[51,131735,52575],{"class":52264},[51,131737,16534],{"class":72},[51,131739,131740,131743,131745,131747,131749,131751,131753,131755,131757,131759,131761,131763,131765,131767,131769,131771,131773],{"class":53,"line":61},[51,131741,131742],{"class":175},"  box-shadow",[51,131744,52401],{"class":72},[51,131746,176],{"class":175},[51,131748,15717],{"class":175},[51,131750,52456],{"class":64},[51,131752,3118],{"class":175},[51,131754,52456],{"class":64},[51,131756,79731],{"class":175},[51,131758,73],{"class":72},[51,131760,176],{"class":175},[51,131762,13397],{"class":72},[51,131764,176],{"class":175},[51,131766,13397],{"class":72},[51,131768,176],{"class":175},[51,131770,13397],{"class":72},[51,131772,87174],{"class":175},[51,131774,615],{"class":72},[51,131776,131777],{"class":53,"line":93},[51,131778,132],{"class":72},[1393,131780,131781,131789],{},[1396,131782,131783],{},[1399,131784,131785,131787],{},[1402,131786,1407],{"align":24699},[1402,131788,28453],{"align":24699},[1439,131790,131791,131799,131807,131815,131823,131831],{},[1399,131792,131793,131796],{},[1444,131794,131795],{"align":24699},"h-shadow",[1444,131797,131798],{"align":24699},"必需,水平阴影的位置,允许负值",[1399,131800,131801,131804],{},[1444,131802,131803],{"align":24699},"v-shadow",[1444,131805,131806],{"align":24699},"必需,垂直阴影的位置,允许负值",[1399,131808,131809,131812],{},[1444,131810,131811],{"align":24699},"blur",[1444,131813,131814],{"align":24699},"可选,模糊距离,就是影子的虚实",[1399,131816,131817,131820],{},[1444,131818,131819],{"align":24699},"spread",[1444,131821,131822],{"align":24699},"可选,阴影尺寸",[1399,131824,131825,131828],{},[1444,131826,131827],{"align":24699},"color",[1444,131829,131830],{"align":24699},"可选,阴影的颜色",[1399,131832,131833,131836],{},[1444,131834,131835],{"align":24699},"inset",[1444,131837,131838],{"align":24699},"可选,将外部阴影(outset)改为内部阴影",[19,131840,131841],{"start":93},[22,131842,131843],{},"文字阴影",[29,131845,131847],{"className":127516,"code":131846,"language":127518,"meta":35,"style":35},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[37,131848,131849,131855,131894],{"__ignoreMap":35},[51,131850,131851,131853],{"class":53,"line":54},[51,131852,40],{"class":52264},[51,131854,16534],{"class":72},[51,131856,131857,131860,131862,131864,131866,131868,131870,131872,131874,131876,131878,131880,131882,131884,131886,131888,131890,131892],{"class":53,"line":61},[51,131858,131859],{"class":175},"  text-shadow",[51,131861,52401],{"class":72},[51,131863,791],{"class":175},[51,131865,52456],{"class":64},[51,131867,26082],{"class":175},[51,131869,52456],{"class":64},[51,131871,15717],{"class":175},[51,131873,52456],{"class":64},[51,131875,79731],{"class":175},[51,131877,73],{"class":72},[51,131879,176],{"class":175},[51,131881,13397],{"class":72},[51,131883,176],{"class":175},[51,131885,13397],{"class":72},[51,131887,176],{"class":175},[51,131889,13397],{"class":72},[51,131891,101485],{"class":175},[51,131893,615],{"class":72},[51,131895,131896],{"class":53,"line":93},[51,131897,132],{"class":72},[1393,131899,131900,131908],{},[1396,131901,131902],{},[1399,131903,131904,131906],{},[1402,131905,1407],{"align":24699},[1402,131907,28453],{"align":24699},[1439,131909,131910,131916,131923,131930],{},[1399,131911,131912,131914],{},[1444,131913,131795],{"align":24699},[1444,131915,131798],{"align":24699},[1399,131917,131918,131920],{},[1444,131919,131803],{"align":24699},[1444,131921,131922],{"align":24699},"必需,垂直阴影位置,允许负值",[1399,131924,131925,131927],{},[1444,131926,131811],{"align":24699},[1444,131928,131929],{"align":24699},"可选,模糊的距离",[1399,131931,131932,131934],{},[1444,131933,131827],{"align":24699},[1444,131935,131830],{"align":24699},[14,131937,131939],{"id":131938},"_92-浮动","9.2 浮动",[1233,131941,131943],{"id":131942},"_921-浮动介绍","9.2.1 浮动介绍",[40,131945,131946],{},"在16.2中详细介绍",[1233,131948,131950],{"id":131949},"_922-清除浮动","9.2.2 清除浮动",[19,131952,131953,131956],{},[22,131954,131955],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[22,131957,131958],{},"清除浮动的本质",[40,131960,131961],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[40,131963,9987],{},[1000,131965,131966,131969,131972],{},[22,131967,131968],{},"如果父盒子本身有高度，则不需要清除浮动",[22,131970,131971],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[22,131973,131974],{},"父级有了高度，就不会影响下面的标准流了",[19,131976,131977],{"start":93},[22,131978,131979],{},"清除浮动样式",[29,131981,131983],{"className":127516,"code":131982,"language":127518,"meta":35,"style":35},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[37,131984,131985,131992,132003,132007,132014,132024],{"__ignoreMap":35},[51,131986,131987,131990],{"class":53,"line":54},[51,131988,131989],{"class":68},".left",[51,131991,16534],{"class":72},[51,131993,131994,131997,131999,132001],{"class":53,"line":61},[51,131995,131996],{"class":175},"  float",[51,131998,52401],{"class":72},[51,132000,24699],{"class":175},[51,132002,179],{"class":72},[51,132004,132005],{"class":53,"line":93},[51,132006,132],{"class":72},[51,132008,132009,132012],{"class":53,"line":99},[51,132010,132011],{"class":68},".right",[51,132013,16534],{"class":72},[51,132015,132016,132018,132020,132022],{"class":53,"line":120},[51,132017,131996],{"class":175},[51,132019,52401],{"class":72},[51,132021,73486],{"class":175},[51,132023,179],{"class":72},[51,132025,132026],{"class":53,"line":129},[51,132027,132],{"class":72},[1393,132029,132030,132038],{},[1396,132031,132032],{},[1399,132033,132034,132036],{},[1402,132035,127980],{"align":24699},[1402,132037,28453],{"align":24699},[1439,132039,132040,132047,132054],{},[1399,132041,132042,132044],{},[1444,132043,24699],{"align":24699},[1444,132045,132046],{"align":24699},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1399,132048,132049,132051],{},[1444,132050,73486],{"align":24699},[1444,132052,132053],{"align":24699},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1399,132055,132056,132059],{},[1444,132057,132058],{"align":24699},"both",[1444,132060,132061],{"align":24699},"同时清除左右侧浮动的影响",[40,132063,132064],{},"法一",[40,132066,132067],{},"额外标签法也称为隔墙法",[40,132069,132070],{},"使用方式：",[40,132072,132073],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[29,132075,132076],{"className":127516,"code":131982,"language":127518,"meta":35,"style":35},[37,132077,132078,132084,132094,132098,132104,132114],{"__ignoreMap":35},[51,132079,132080,132082],{"class":53,"line":54},[51,132081,131989],{"class":68},[51,132083,16534],{"class":72},[51,132085,132086,132088,132090,132092],{"class":53,"line":61},[51,132087,131996],{"class":175},[51,132089,52401],{"class":72},[51,132091,24699],{"class":175},[51,132093,179],{"class":72},[51,132095,132096],{"class":53,"line":93},[51,132097,132],{"class":72},[51,132099,132100,132102],{"class":53,"line":99},[51,132101,132011],{"class":68},[51,132103,16534],{"class":72},[51,132105,132106,132108,132110,132112],{"class":53,"line":120},[51,132107,131996],{"class":175},[51,132109,52401],{"class":72},[51,132111,73486],{"class":175},[51,132113,179],{"class":72},[51,132115,132116],{"class":53,"line":129},[51,132117,132],{"class":72},[40,132119,132120],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[40,132122,132123],{},"优点： 通俗易懂，书写方便",[40,132125,132126],{},"缺点： 添加许多无意义的标签，结构化较差",[40,132128,132129],{},"注意： 要求这个新的空标签必须是块级元素。",[40,132131,132132],{},"法二",[40,132134,132135],{},"父级添加overflow属性",[29,132137,132138],{"className":127516,"code":131982,"language":127518,"meta":35,"style":35},[37,132139,132140,132146,132156,132160,132166,132176],{"__ignoreMap":35},[51,132141,132142,132144],{"class":53,"line":54},[51,132143,131989],{"class":68},[51,132145,16534],{"class":72},[51,132147,132148,132150,132152,132154],{"class":53,"line":61},[51,132149,131996],{"class":175},[51,132151,52401],{"class":72},[51,132153,24699],{"class":175},[51,132155,179],{"class":72},[51,132157,132158],{"class":53,"line":93},[51,132159,132],{"class":72},[51,132161,132162,132164],{"class":53,"line":99},[51,132163,132011],{"class":68},[51,132165,16534],{"class":72},[51,132167,132168,132170,132172,132174],{"class":53,"line":120},[51,132169,131996],{"class":175},[51,132171,52401],{"class":72},[51,132173,73486],{"class":175},[51,132175,179],{"class":72},[51,132177,132178],{"class":53,"line":129},[51,132179,132],{"class":72},[40,132181,132182],{},"overflow: hidden;",[40,132184,132185],{},"优点：代码简洁",[40,132187,132188],{},"缺点：无法显示溢出的部分",[40,132190,132191],{},"注意：是给父元素添加代码",[40,132193,132194],{},"法三",[40,132196,132197],{},"父级添加after伪元素",[40,132199,132200,132203],{},[132201,132202],"after",{}," 方式是额外标签法的升级版",[40,132205,132206],{},"使用的时候复制就可以",[29,132208,132209],{"className":127516,"code":131982,"language":127518,"meta":35,"style":35},[37,132210,132211,132217,132227,132231,132237,132247],{"__ignoreMap":35},[51,132212,132213,132215],{"class":53,"line":54},[51,132214,131989],{"class":68},[51,132216,16534],{"class":72},[51,132218,132219,132221,132223,132225],{"class":53,"line":61},[51,132220,131996],{"class":175},[51,132222,52401],{"class":72},[51,132224,24699],{"class":175},[51,132226,179],{"class":72},[51,132228,132229],{"class":53,"line":93},[51,132230,132],{"class":72},[51,132232,132233,132235],{"class":53,"line":99},[51,132234,132011],{"class":68},[51,132236,16534],{"class":72},[51,132238,132239,132241,132243,132245],{"class":53,"line":120},[51,132240,131996],{"class":175},[51,132242,52401],{"class":72},[51,132244,73486],{"class":175},[51,132246,179],{"class":72},[51,132248,132249],{"class":53,"line":129},[51,132250,132],{"class":72},[40,132252,132253],{},"优点：没有增加标签，结构更简单",[40,132255,132256],{},"缺点：照顾低版本浏览器",[40,132258,132259],{},"代表网站： 百度、淘宝网、网易等",[40,132261,132262],{},"法四",[40,132264,132265],{},"父级添加双伪元素",[29,132267,132268],{"className":127516,"code":131982,"language":127518,"meta":35,"style":35},[37,132269,132270,132276,132286,132290,132296,132306],{"__ignoreMap":35},[51,132271,132272,132274],{"class":53,"line":54},[51,132273,131989],{"class":68},[51,132275,16534],{"class":72},[51,132277,132278,132280,132282,132284],{"class":53,"line":61},[51,132279,131996],{"class":175},[51,132281,52401],{"class":72},[51,132283,24699],{"class":175},[51,132285,179],{"class":72},[51,132287,132288],{"class":53,"line":93},[51,132289,132],{"class":72},[51,132291,132292,132294],{"class":53,"line":99},[51,132293,132011],{"class":68},[51,132295,16534],{"class":72},[51,132297,132298,132300,132302,132304],{"class":53,"line":120},[51,132299,131996],{"class":175},[51,132301,52401],{"class":72},[51,132303,73486],{"class":175},[51,132305,179],{"class":72},[51,132307,132308],{"class":53,"line":129},[51,132309,132],{"class":72},[40,132311,132312],{},"优点：代码更简洁",[40,132314,132256],{},[40,132316,132317],{},"代表网站：小米、腾讯等",[14,132319,132321],{"id":132320},"_93-ps切图","9.3 PS切图",[1233,132323,132325],{"id":132324},"_931-常见图片格式","9.3.1 常见图片格式",[1393,132327,132328,132338],{},[1396,132329,132330],{},[1399,132331,132332,132335],{},[1402,132333,132334],{"align":24699},"jpg图像格式",[1402,132336,132337],{"align":24699},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1439,132339,132340,132348,132356],{},[1399,132341,132342,132345],{},[1444,132343,132344],{"align":24699},"gif图像格式",[1444,132346,132347],{"align":24699},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1399,132349,132350,132353],{},[1444,132351,132352],{"align":24699},"png图像格式",[1444,132354,132355],{"align":24699},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1399,132357,132358,132361],{},[1444,132359,132360],{"align":24699},"PSD图像格式",[1444,132362,132363],{"align":24699},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[1233,132365,132367],{"id":132366},"_932-图层切图","9.3.2 图层切图",[40,132369,132370],{},"最简单的切图方式：右击图层 → 导出 → 切片",[40,132372,132373],{},"按住shift选中两个图层->图层菜单->合并图层",[1233,132375,132377],{"id":132376},"_933-切片切图","9.3.3 切片切图",[1000,132379,132380,132383],{},[22,132381,132382],{},"利用切片工具手动划出",[22,132384,132385],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[1233,132387,132389],{"id":132388},"_934-切图步骤","9.3.4 切图步骤",[40,132391,132392],{},"用切片工具选中：",[2564,132394],{"style":127372,"src":132395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[40,132397,132398],{},"文件 -> 导出",[2564,132400],{"style":127372,"src":132401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1179,132403,132404],{},"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":35,"searchDepth":61,"depth":61,"links":132406},[132407,132416,132420],{"id":130843,"depth":61,"text":130844,"children":132408},[132409,132410,132411,132412,132413,132414,132415],{"id":130868,"depth":93,"text":130869},{"id":131159,"depth":93,"text":131160},{"id":131288,"depth":93,"text":131289},{"id":131488,"depth":93,"text":131489},{"id":131530,"depth":93,"text":131531},{"id":131568,"depth":93,"text":131569},{"id":131658,"depth":93,"text":131659},{"id":131938,"depth":61,"text":131939,"children":132417},[132418,132419],{"id":131942,"depth":93,"text":131943},{"id":131949,"depth":93,"text":131950},{"id":132320,"depth":61,"text":132321,"children":132421},[132422,132423,132424,132425],{"id":132324,"depth":93,"text":132325},{"id":132366,"depth":93,"text":132367},{"id":132376,"depth":93,"text":132377},{"id":132388,"depth":93,"text":132389},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130835,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132432,"title":132433,"body":132434,"description":24339,"extension":1190,"meta":133075,"navigation":1192,"path":133076,"seo":133077,"stem":133078,"__hash__":133079},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132435,"toc":133063},[132436,132439,132443,132469,132503,132507,132511,132514,132556,132563,132573,132581,132583,132586,132589,132592,132599,132613,132617,132620,132649,132653,132656,132670,132674,132677,132705,132709,132712,132738,132742,132747,132780,132785,132813,132817,132834,132880,132885,132929,132946,133053,133061],[10,132437,132433],{"id":132438},"_10-css规范与学成在线案例",[14,132440,132442],{"id":132441},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[19,132444,132445,132451,132457,132463],{},[22,132446,132447,132450],{},[840,132448,132449],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[22,132452,132453,132456],{},[840,132454,132455],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[22,132458,132459,132462],{},[840,132460,132461],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[22,132464,132465,132468],{},[840,132466,132467],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[29,132470,132471],{"className":127516,"code":130880,"language":127518,"meta":35,"style":35},[37,132472,132473,132477,132483,132499],{"__ignoreMap":35},[51,132474,132475],{"class":53,"line":54},[51,132476,130887],{"class":57},[51,132478,132479,132481],{"class":53,"line":61},[51,132480,52575],{"class":52264},[51,132482,16534],{"class":72},[51,132484,132485,132487,132489,132491,132493,132495,132497],{"class":53,"line":93},[51,132486,71860],{"class":175},[51,132488,52401],{"class":72},[51,132490,791],{"class":175},[51,132492,52456],{"class":64},[51,132494,52485],{"class":175},[51,132496,130908],{"class":175},[51,132498,179],{"class":72},[51,132500,132501],{"class":53,"line":99},[51,132502,132],{"class":72},[14,132504,132506],{"id":132505},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[1233,132508,132510],{"id":132509},"_1021-header头部制作","10.2.1 header头部制作",[2564,132512],{"style":127372,"src":132513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1000,132515,132516,132523,132530,132536,132543,132550],{},[22,132517,132518,132519,132522],{},"1号是版心盒子 ",[840,132520,132521],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[22,132524,132525,132526,132529],{},"版心盒子 里面包含 2号盒子 ",[840,132527,132528],{},"logo"," 图标",[22,132531,132532,132533,132535],{},"版心盒子 里面包含 3号盒子 ",[840,132534,54677],{}," 导航栏",[22,132537,132538,132539,132542],{},"版心盒子 里面包含 4号盒子 ",[840,132540,132541],{},"search"," 搜索框",[22,132544,132545,132546,132549],{},"版心盒子 里面包含 5号盒子 ",[840,132547,132548],{},"user"," 个人信息",[22,132551,132552,132553],{},"注意，要求里面的 ",[840,132554,132555],{},"4个子盒子 必须都浮动",[19,132557,132558],{},[22,132559,132560],{},[840,132561,132562],{},"导航栏注意点:",[40,132564,132565,132566,132569,132570],{},"实际开发中， ",[840,132567,132568],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[840,132571,132572],{},"用 li 包含链接(li+a)的做法",[1000,132574,132575,132578],{},[22,132576,132577],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[22,132579,132580],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[40,132582,9987],{},[40,132584,132585],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[40,132587,132588],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[40,132590,132591],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[19,132593,132594],{"start":61},[22,132595,132596],{},[840,132597,132598],{},"4号盒子search的细节：",[1000,132600,132601,132604,132607],{},[22,132602,132603],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[22,132605,132606],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[22,132608,132609,132612],{},[37,132610,132611],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[1233,132614,132616],{"id":132615},"_1022-banner制作","10.2.2 banner制作",[2564,132618],{"style":127372,"src":132619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1000,132621,132622,132629,132635,132642],{},[22,132623,132624,132625,132628],{},"1号盒子是通栏的大盒子 ",[840,132626,132627],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[22,132630,132631,132632,132634],{},"2号盒子是版心 ",[840,132633,2040],{}," ， 要水平居中对齐",[22,132636,132637,132638,132641],{},"3号盒子版心内，左对齐 ",[840,132639,132640],{},"subnav"," 侧导航栏",[22,132643,132644,132645,132648],{},"4号盒子版心内，右对齐 ",[840,132646,132647],{},"course"," 课程",[1233,132650,132652],{"id":132651},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[2564,132654],{"style":127372,"src":132655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1000,132657,132658,132661,132664,132667],{},[22,132659,132660],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[22,132662,132663],{},"1号盒子是标题 H3 左侧浮动",[22,132665,132666],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[22,132668,132669],{},"3号盒子 右浮动 mod 修改",[1233,132671,132673],{"id":132672},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[2564,132675],{"style":127372,"src":132676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1000,132678,132679,132685,132692,132699,132702],{},[22,132680,132681,132682,132684],{},"1号盒子为最大的盒子 ",[840,132683,54678],{}," 版心水平居中对齐",[22,132686,132687,132688,132691],{},"2号盒子为上面部分 ",[840,132689,132690],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[22,132693,132694,132695,132698],{},"3号盒子为底下部分 ",[840,132696,132697],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[22,132700,132701],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[22,132703,132704],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[1233,132706,132708],{"id":132707},"_1025-底部模块制作","10.2.5 底部模块制作",[2564,132710],{"style":127372,"src":132711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1000,132713,132714,132721,132724,132731],{},[22,132715,132716,132717,132720],{},"1号盒子通栏大盒子 底部 ",[840,132718,132719],{},"footer"," 给高度 底色是白色",[22,132722,132723],{},"2号盒子版心水平居中",[22,132725,132726,132727,132730],{},"3号盒子版权 ",[840,132728,132729],{},"copyright"," 左对齐",[22,132732,132733,132734,132737],{},"4号盒子 链接组 ",[840,132735,132736],{},"links"," 右对齐",[1233,132739,132741],{"id":132740},"_1026-代码模块","10.2.6 代码模块",[19,132743,132744],{},[22,132745,132746],{},"html部分",[29,132748,132750],{"className":128263,"code":132749,"language":128265,"meta":35,"style":35},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[37,132751,132752],{"__ignoreMap":35},[51,132753,132754,132756,132758,132760,132762,132765,132768,132770,132773,132776,132778],{"class":53,"line":54},[51,132755,2154],{"class":72},[51,132757,981],{"class":52264},[51,132759,62021],{"class":68},[51,132761,108],{"class":72},[51,132763,132764],{"class":282},"\"https:\u002F\u002Fexample.com\"",[51,132766,132767],{"class":68}," target",[51,132769,108],{"class":72},[51,132771,132772],{"class":282},"\"_blank\"",[51,132774,132775],{"class":72},">链接文字\u003C\u002F",[51,132777,981],{"class":52264},[51,132779,52271],{"class":72},[19,132781,132782],{"start":61},[22,132783,132784],{},"css部分",[29,132786,132787],{"className":128263,"code":132749,"language":128265,"meta":35,"style":35},[37,132788,132789],{"__ignoreMap":35},[51,132790,132791,132793,132795,132797,132799,132801,132803,132805,132807,132809,132811],{"class":53,"line":54},[51,132792,2154],{"class":72},[51,132794,981],{"class":52264},[51,132796,62021],{"class":68},[51,132798,108],{"class":72},[51,132800,132764],{"class":282},[51,132802,132767],{"class":68},[51,132804,108],{"class":72},[51,132806,132772],{"class":282},[51,132808,132775],{"class":72},[51,132810,981],{"class":52264},[51,132812,52271],{"class":72},[1233,132814,132816],{"id":132815},"_1027-收获","10.2.7 收获",[19,132818,132819,132822,132825,132828,132831],{},[22,132820,132821],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[22,132823,132824],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[22,132826,132827],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[22,132829,132830],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[22,132832,132833],{},"遗忘代码",[29,132835,132837],{"className":127516,"code":132836,"language":127518,"meta":35,"style":35},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[37,132838,132839,132861,132866,132876],{"__ignoreMap":35},[51,132840,132841,132843,132845,132847,132849,132851,132853,132855,132857,132859],{"class":53,"line":54},[51,132842,52575],{"class":52264},[51,132844,13397],{"class":72},[51,132846,40],{"class":52264},[51,132848,13397],{"class":72},[51,132850,10],{"class":52264},[51,132852,13397],{"class":72},[51,132854,1000],{"class":52264},[51,132856,13397],{"class":72},[51,132858,22],{"class":52264},[51,132860,16534],{"class":72},[51,132862,132863],{"class":53,"line":61},[51,132864,132865],{"class":57},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[51,132867,132868,132870,132872,132874],{"class":53,"line":93},[51,132869,129132],{"class":175},[51,132871,52401],{"class":72},[51,132873,61833],{"class":175},[51,132875,179],{"class":72},[51,132877,132878],{"class":53,"line":99},[51,132879,132],{"class":72},[19,132881,132882],{"start":129},[22,132883,132884],{},"html引css的程序",[29,132886,132887],{"className":127516,"code":132836,"language":127518,"meta":35,"style":35},[37,132888,132889,132911,132915,132925],{"__ignoreMap":35},[51,132890,132891,132893,132895,132897,132899,132901,132903,132905,132907,132909],{"class":53,"line":54},[51,132892,52575],{"class":52264},[51,132894,13397],{"class":72},[51,132896,40],{"class":52264},[51,132898,13397],{"class":72},[51,132900,10],{"class":52264},[51,132902,13397],{"class":72},[51,132904,1000],{"class":52264},[51,132906,13397],{"class":72},[51,132908,22],{"class":52264},[51,132910,16534],{"class":72},[51,132912,132913],{"class":53,"line":61},[51,132914,132865],{"class":57},[51,132916,132917,132919,132921,132923],{"class":53,"line":93},[51,132918,129132],{"class":175},[51,132920,52401],{"class":72},[51,132922,61833],{"class":175},[51,132924,179],{"class":72},[51,132926,132927],{"class":53,"line":99},[51,132928,132],{"class":72},[19,132930,132931,132934,132937,132940,132943],{"start":206},[22,132932,132933],{},"浮动的盒子不会有外边距合并问题",[22,132935,132936],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[22,132938,132939],{},"ctrl+g快速定位行；shift+alt多个光标",[22,132941,132942],{},"学习上方各个模块的选择器起名方法，以后就这样用",[22,132944,132945],{},"在写选择器时尽量写全一些，例如",[29,132947,132949],{"className":127516,"code":132948,"language":127518,"meta":35,"style":35},"\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",[37,132950,132951,132956,132972,132977,132992,132997,133012,133017,133032,133037],{"__ignoreMap":35},[51,132952,132953],{"class":53,"line":54},[51,132954,132955],{"class":57},"\u002F* 静态定位（默认） *\u002F\n",[51,132957,132958,132961,132963,132965,132967,132970],{"class":53,"line":61},[51,132959,132960],{"class":68},".static",[51,132962,80771],{"class":72},[51,132964,129876],{"class":175},[51,132966,52401],{"class":72},[51,132968,132969],{"class":175},"static",[51,132971,130446],{"class":72},[51,132973,132974],{"class":53,"line":93},[51,132975,132976],{"class":57},"\u002F* 相对定位 *\u002F\n",[51,132978,132979,132982,132984,132986,132988,132990],{"class":53,"line":99},[51,132980,132981],{"class":68},".relative",[51,132983,80771],{"class":72},[51,132985,129876],{"class":175},[51,132987,52401],{"class":72},[51,132989,55728],{"class":175},[51,132991,130446],{"class":72},[51,132993,132994],{"class":53,"line":120},[51,132995,132996],{"class":57},"\u002F* 绝对定位 *\u002F\n",[51,132998,132999,133002,133004,133006,133008,133010],{"class":53,"line":129},[51,133000,133001],{"class":68},".absolute",[51,133003,80771],{"class":72},[51,133005,129876],{"class":175},[51,133007,52401],{"class":72},[51,133009,55795],{"class":175},[51,133011,130446],{"class":72},[51,133013,133014],{"class":53,"line":206},[51,133015,133016],{"class":57},"\u002F* 固定定位 *\u002F\n",[51,133018,133019,133022,133024,133026,133028,133030],{"class":53,"line":212},[51,133020,133021],{"class":68},".fixed",[51,133023,80771],{"class":72},[51,133025,129876],{"class":175},[51,133027,52401],{"class":72},[51,133029,87197],{"class":175},[51,133031,130446],{"class":72},[51,133033,133034],{"class":53,"line":227},[51,133035,133036],{"class":57},"\u002F* 粘性定位 *\u002F\n",[51,133038,133039,133042,133044,133046,133048,133051],{"class":53,"line":370},[51,133040,133041],{"class":68},".sticky",[51,133043,80771],{"class":72},[51,133045,129876],{"class":175},[51,133047,52401],{"class":72},[51,133049,133050],{"class":175},"sticky",[51,133052,130446],{"class":72},[19,133054,133055,133058],{"start":404},[22,133056,133057],{},"一定要用好注释",[22,133059,133060],{},"浮动的盒子不会有外边距合并的问题",[1179,133062,132404],{},{"title":35,"searchDepth":61,"depth":61,"links":133064},[133065,133066],{"id":132441,"depth":61,"text":132442},{"id":132505,"depth":61,"text":132506,"children":133067},[133068,133069,133070,133071,133072,133073,133074],{"id":132509,"depth":93,"text":132510},{"id":132615,"depth":93,"text":132616},{"id":132651,"depth":93,"text":132652},{"id":132672,"depth":93,"text":132673},{"id":132707,"depth":93,"text":132708},{"id":132740,"depth":93,"text":132741},{"id":132815,"depth":93,"text":132816},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132433,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133081,"title":133082,"body":133083,"description":24339,"extension":1190,"meta":134569,"navigation":1192,"path":134570,"seo":134571,"stem":134572,"__hash__":134573},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133084,"toc":134561},[133085,133088,133092,133096,133107,133111,133128,133172,133205,133208,133225,133228,133231,133275,133279,133283,133286,133289,133293,133296,133307,133370,133411,133414,133429,133483,133491,133494,133505,133559,133585,133588,133601,133655,133687,133741,133764,133818,133821,133824,133831,133885,133906,133960,133963,133966,134051,134059,134116,134139,134143,134146,134164,134168,134187,134241,134279,134283,134286,134289,134311,134315,134323,134326,134331,134342,134345,134349,134363,134407,134410,134414,134417,134422,134448,134453,134530,134533,134537,134540,134543,134546,134549,134552,134555,134558],[10,133086,133082],{"id":133087},"_11-传统布局与定位体系",[14,133089,133091],{"id":133090},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[1233,133093,133095],{"id":133094},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1000,133097,133098,133101,133104],{},[22,133099,133100],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[22,133102,133103],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[22,133105,133106],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[1233,133108,133110],{"id":133109},"_1112-浮动","11.1.2 浮动",[1000,133112,133113,133116,133119,133122,133125],{},[22,133114,133115],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[22,133117,133118],{},"浮动可以改变元素标签默认的排列方式",[22,133120,133121],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[22,133123,133124],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[22,133126,133127],{},"在使用行内块转换时盒子之间是有空隙的",[29,133129,133130],{"className":127516,"code":131982,"language":127518,"meta":35,"style":35},[37,133131,133132,133138,133148,133152,133158,133168],{"__ignoreMap":35},[51,133133,133134,133136],{"class":53,"line":54},[51,133135,131989],{"class":68},[51,133137,16534],{"class":72},[51,133139,133140,133142,133144,133146],{"class":53,"line":61},[51,133141,131996],{"class":175},[51,133143,52401],{"class":72},[51,133145,24699],{"class":175},[51,133147,179],{"class":72},[51,133149,133150],{"class":53,"line":93},[51,133151,132],{"class":72},[51,133153,133154,133156],{"class":53,"line":99},[51,133155,132011],{"class":68},[51,133157,16534],{"class":72},[51,133159,133160,133162,133164,133166],{"class":53,"line":120},[51,133161,131996],{"class":175},[51,133163,52401],{"class":72},[51,133165,73486],{"class":175},[51,133167,179],{"class":72},[51,133169,133170],{"class":53,"line":129},[51,133171,132],{"class":72},[1393,133173,133174,133182],{},[1396,133175,133176],{},[1399,133177,133178,133180],{},[1402,133179,127980],{"align":24699},[1402,133181,28453],{"align":24699},[1439,133183,133184,133191,133198],{},[1399,133185,133186,133188],{},[1444,133187,55701],{"align":24699},[1444,133189,133190],{"align":24699},"元素不浮动（默认值）",[1399,133192,133193,133195],{},[1444,133194,24699],{"align":24699},[1444,133196,133197],{"align":24699},"元素向左浮动",[1399,133199,133200,133202],{},[1444,133201,73486],{"align":24699},[1444,133203,133204],{"align":24699},"元素向右浮动",[40,133206,133207],{},"浮动重点：",[1000,133209,133210,133213,133216,133219,133222],{},[22,133211,133212],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[22,133214,133215],{},"浮动的元素会一行内显示并且元素顶部对齐",[22,133217,133218],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[22,133220,133221],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[22,133223,133224],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[40,133226,133227],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[40,133229,133230],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[29,133232,133233],{"className":127516,"code":131982,"language":127518,"meta":35,"style":35},[37,133234,133235,133241,133251,133255,133261,133271],{"__ignoreMap":35},[51,133236,133237,133239],{"class":53,"line":54},[51,133238,131989],{"class":68},[51,133240,16534],{"class":72},[51,133242,133243,133245,133247,133249],{"class":53,"line":61},[51,133244,131996],{"class":175},[51,133246,52401],{"class":72},[51,133248,24699],{"class":175},[51,133250,179],{"class":72},[51,133252,133253],{"class":53,"line":93},[51,133254,132],{"class":72},[51,133256,133257,133259],{"class":53,"line":99},[51,133258,132011],{"class":68},[51,133260,16534],{"class":72},[51,133262,133263,133265,133267,133269],{"class":53,"line":120},[51,133264,131996],{"class":175},[51,133266,52401],{"class":72},[51,133268,73486],{"class":175},[51,133270,179],{"class":72},[51,133272,133273],{"class":53,"line":129},[51,133274,132],{"class":72},[1233,133276,133278],{"id":133277},"_1113-定位","11.1.3 定位",[22960,133280,133282],{"id":133281},"_11131-使用场景","11.1.3.1 使用场景",[40,133284,133285],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[40,133287,133288],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22960,133290,133292],{"id":133291},"_11132-定位组成","11.1.3.2 定位组成",[40,133294,133295],{},"定位 = 定位模式 + 边偏移",[19,133297,133298],{},[22,133299,133300,133303,133304],{},[840,133301,133302],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[840,133305,133306],{},"定位模式",[29,133308,133310],{"className":127516,"code":133309,"language":127518,"meta":35,"style":35},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[37,133311,133312,133318,133332,133349,133366],{"__ignoreMap":35},[51,133313,133314,133316],{"class":53,"line":54},[51,133315,131364],{"class":68},[51,133317,16534],{"class":72},[51,133319,133320,133323,133325,133327,133329],{"class":53,"line":61},[51,133321,133322],{"class":175},"  position",[51,133324,52401],{"class":72},[51,133326,55728],{"class":175},[51,133328,131379],{"class":72},[51,133330,133331],{"class":57},"\u002F* 定位模式 *\u002F\n",[51,133333,133334,133337,133339,133341,133343,133346],{"class":53,"line":93},[51,133335,133336],{"class":175},"  top",[51,133338,52401],{"class":72},[51,133340,443],{"class":175},[51,133342,52456],{"class":64},[51,133344,133345],{"class":72},";           ",[51,133347,133348],{"class":57},"\u002F* 边偏移：上 *\u002F\n",[51,133350,133351,133354,133356,133358,133360,133363],{"class":53,"line":99},[51,133352,133353],{"class":175},"  left",[51,133355,52401],{"class":72},[51,133357,457],{"class":175},[51,133359,52456],{"class":64},[51,133361,133362],{"class":72},";          ",[51,133364,133365],{"class":57},"\u002F* 边偏移：左 *\u002F\n",[51,133367,133368],{"class":53,"line":120},[51,133369,132],{"class":72},[1393,133371,133372,133381],{},[1396,133373,133374],{},[1399,133375,133376,133378],{},[1402,133377,1407],{"align":24699},[1402,133379,133380],{"align":24699},"语义",[1439,133382,133383,133390,133397,133404],{},[1399,133384,133385,133387],{},[1444,133386,132969],{"align":24699},[1444,133388,133389],{"align":24699},"静态定位",[1399,133391,133392,133394],{},[1444,133393,55728],{"align":24699},[1444,133395,133396],{"align":24699},"相对定位",[1399,133398,133399,133401],{},[1444,133400,55795],{"align":24699},[1444,133402,133403],{"align":24699},"绝对定位",[1399,133405,133406,133408],{},[1444,133407,87197],{"align":24699},[1444,133409,133410],{"align":24699},"固定定位",[40,133412,133413],{},"（1）静态定位：",[1000,133415,133416,133427],{},[22,133417,133418,133419,133422,133423,133426],{},"静态定位是元素的 ",[840,133420,133421],{},"默认定位方式"," ， ",[840,133424,133425],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[22,133428,27],{},[29,133430,133431],{"className":127516,"code":133309,"language":127518,"meta":35,"style":35},[37,133432,133433,133439,133451,133465,133479],{"__ignoreMap":35},[51,133434,133435,133437],{"class":53,"line":54},[51,133436,131364],{"class":68},[51,133438,16534],{"class":72},[51,133440,133441,133443,133445,133447,133449],{"class":53,"line":61},[51,133442,133322],{"class":175},[51,133444,52401],{"class":72},[51,133446,55728],{"class":175},[51,133448,131379],{"class":72},[51,133450,133331],{"class":57},[51,133452,133453,133455,133457,133459,133461,133463],{"class":53,"line":93},[51,133454,133336],{"class":175},[51,133456,52401],{"class":72},[51,133458,443],{"class":175},[51,133460,52456],{"class":64},[51,133462,133345],{"class":72},[51,133464,133348],{"class":57},[51,133466,133467,133469,133471,133473,133475,133477],{"class":53,"line":99},[51,133468,133353],{"class":175},[51,133470,52401],{"class":72},[51,133472,457],{"class":175},[51,133474,52456],{"class":64},[51,133476,133362],{"class":72},[51,133478,133365],{"class":57},[51,133480,133481],{"class":53,"line":120},[51,133482,132],{"class":72},[1000,133484,133485,133488],{},[22,133486,133487],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[22,133489,133490],{},"静态定位在布局时我们几乎不用的",[40,133492,133493],{},"（2）相对定位",[1000,133495,133496,133503],{},[22,133497,133498,133499,133502],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[840,133500,133501],{},"原来的位置"," 来说的（自恋型）",[22,133504,27],{},[29,133506,133507],{"className":127516,"code":133309,"language":127518,"meta":35,"style":35},[37,133508,133509,133515,133527,133541,133555],{"__ignoreMap":35},[51,133510,133511,133513],{"class":53,"line":54},[51,133512,131364],{"class":68},[51,133514,16534],{"class":72},[51,133516,133517,133519,133521,133523,133525],{"class":53,"line":61},[51,133518,133322],{"class":175},[51,133520,52401],{"class":72},[51,133522,55728],{"class":175},[51,133524,131379],{"class":72},[51,133526,133331],{"class":57},[51,133528,133529,133531,133533,133535,133537,133539],{"class":53,"line":93},[51,133530,133336],{"class":175},[51,133532,52401],{"class":72},[51,133534,443],{"class":175},[51,133536,52456],{"class":64},[51,133538,133345],{"class":72},[51,133540,133348],{"class":57},[51,133542,133543,133545,133547,133549,133551,133553],{"class":53,"line":99},[51,133544,133353],{"class":175},[51,133546,52401],{"class":72},[51,133548,457],{"class":175},[51,133550,52456],{"class":64},[51,133552,133362],{"class":72},[51,133554,133365],{"class":57},[51,133556,133557],{"class":53,"line":120},[51,133558,132],{"class":72},[1000,133560,133561],{},[22,133562,133563,133564,133566,133567,133569,133570,133573,133574,133577,133578,133580,133581,133584],{},"相对定位的特点：",[54680,133565],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54680,133568],{},"  ② ",[840,133571,133572],{},"原来"," 在标准流的 ",[840,133575,133576],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54680,133579],{},"  ③因此， ",[840,133582,133583],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[40,133586,133587],{},"（3）绝对定位",[1000,133589,133590,133599],{},[22,133591,133592,133594,133595,133598],{},[840,133593,133403],{}," 是元素在移动位置的时候，是相对于它 ",[840,133596,133597],{},"祖先元素"," 来说的（拼爹型）",[22,133600,27],{},[29,133602,133603],{"className":127516,"code":133309,"language":127518,"meta":35,"style":35},[37,133604,133605,133611,133623,133637,133651],{"__ignoreMap":35},[51,133606,133607,133609],{"class":53,"line":54},[51,133608,131364],{"class":68},[51,133610,16534],{"class":72},[51,133612,133613,133615,133617,133619,133621],{"class":53,"line":61},[51,133614,133322],{"class":175},[51,133616,52401],{"class":72},[51,133618,55728],{"class":175},[51,133620,131379],{"class":72},[51,133622,133331],{"class":57},[51,133624,133625,133627,133629,133631,133633,133635],{"class":53,"line":93},[51,133626,133336],{"class":175},[51,133628,52401],{"class":72},[51,133630,443],{"class":175},[51,133632,52456],{"class":64},[51,133634,133345],{"class":72},[51,133636,133348],{"class":57},[51,133638,133639,133641,133643,133645,133647,133649],{"class":53,"line":99},[51,133640,133353],{"class":175},[51,133642,52401],{"class":72},[51,133644,457],{"class":175},[51,133646,52456],{"class":64},[51,133648,133362],{"class":72},[51,133650,133365],{"class":57},[51,133652,133653],{"class":53,"line":120},[51,133654,132],{"class":72},[1000,133656,133657,133672,133681,133684],{},[22,133658,133659,133660,133662,133663,133665,133666,133668,133669,133671],{},"绝对定位的特点：",[54680,133661],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54680,133664],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54680,133667],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54680,133670],{},"  (4)固定定位",[22,133673,133674,133676,133677,133680],{},[840,133675,133410],{}," 是元素 ",[840,133678,133679],{},"固定于浏览器可视区的位置"," 。（认死理型）",[22,133682,133683],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[22,133685,133686],{},"语法:",[29,133688,133689],{"className":127516,"code":133309,"language":127518,"meta":35,"style":35},[37,133690,133691,133697,133709,133723,133737],{"__ignoreMap":35},[51,133692,133693,133695],{"class":53,"line":54},[51,133694,131364],{"class":68},[51,133696,16534],{"class":72},[51,133698,133699,133701,133703,133705,133707],{"class":53,"line":61},[51,133700,133322],{"class":175},[51,133702,52401],{"class":72},[51,133704,55728],{"class":175},[51,133706,131379],{"class":72},[51,133708,133331],{"class":57},[51,133710,133711,133713,133715,133717,133719,133721],{"class":53,"line":93},[51,133712,133336],{"class":175},[51,133714,52401],{"class":72},[51,133716,443],{"class":175},[51,133718,52456],{"class":64},[51,133720,133345],{"class":72},[51,133722,133348],{"class":57},[51,133724,133725,133727,133729,133731,133733,133735],{"class":53,"line":99},[51,133726,133353],{"class":175},[51,133728,52401],{"class":72},[51,133730,457],{"class":175},[51,133732,52456],{"class":64},[51,133734,133362],{"class":72},[51,133736,133365],{"class":57},[51,133738,133739],{"class":53,"line":120},[51,133740,132],{"class":72},[1000,133742,133743,133752],{},[22,133744,133745,133746,133748,133749,133751],{},"特点:",[54680,133747],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54680,133750],{},"  ②固定定位不再占有原先的位置,完全脱标",[22,133753,133754,133755,133757,133758,133760,133761,133763],{},"固定在版心位置的方法:",[54680,133756],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54680,133759],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54680,133762],{},"  实例：",[29,133765,133766],{"className":127516,"code":133309,"language":127518,"meta":35,"style":35},[37,133767,133768,133774,133786,133800,133814],{"__ignoreMap":35},[51,133769,133770,133772],{"class":53,"line":54},[51,133771,131364],{"class":68},[51,133773,16534],{"class":72},[51,133775,133776,133778,133780,133782,133784],{"class":53,"line":61},[51,133777,133322],{"class":175},[51,133779,52401],{"class":72},[51,133781,55728],{"class":175},[51,133783,131379],{"class":72},[51,133785,133331],{"class":57},[51,133787,133788,133790,133792,133794,133796,133798],{"class":53,"line":93},[51,133789,133336],{"class":175},[51,133791,52401],{"class":72},[51,133793,443],{"class":175},[51,133795,52456],{"class":64},[51,133797,133345],{"class":72},[51,133799,133348],{"class":57},[51,133801,133802,133804,133806,133808,133810,133812],{"class":53,"line":99},[51,133803,133353],{"class":175},[51,133805,52401],{"class":72},[51,133807,457],{"class":175},[51,133809,52456],{"class":64},[51,133811,133362],{"class":72},[51,133813,133365],{"class":57},[51,133815,133816],{"class":53,"line":120},[51,133817,132],{"class":72},[2564,133819],{"style":127372,"src":133820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[40,133822,133823],{},"(5)粘性定位",[1000,133825,133826,133829],{},[22,133827,133828],{},"粘性定位可以被认为是相对定位和固定定位的混合",[22,133830,27],{},[29,133832,133833],{"className":127516,"code":133309,"language":127518,"meta":35,"style":35},[37,133834,133835,133841,133853,133867,133881],{"__ignoreMap":35},[51,133836,133837,133839],{"class":53,"line":54},[51,133838,131364],{"class":68},[51,133840,16534],{"class":72},[51,133842,133843,133845,133847,133849,133851],{"class":53,"line":61},[51,133844,133322],{"class":175},[51,133846,52401],{"class":72},[51,133848,55728],{"class":175},[51,133850,131379],{"class":72},[51,133852,133331],{"class":57},[51,133854,133855,133857,133859,133861,133863,133865],{"class":53,"line":93},[51,133856,133336],{"class":175},[51,133858,52401],{"class":72},[51,133860,443],{"class":175},[51,133862,52456],{"class":64},[51,133864,133345],{"class":72},[51,133866,133348],{"class":57},[51,133868,133869,133871,133873,133875,133877,133879],{"class":53,"line":99},[51,133870,133353],{"class":175},[51,133872,52401],{"class":72},[51,133874,457],{"class":175},[51,133876,52456],{"class":64},[51,133878,133362],{"class":72},[51,133880,133365],{"class":57},[51,133882,133883],{"class":53,"line":120},[51,133884,132],{"class":72},[1000,133886,133887],{},[22,133888,133889,133890,133892,133893,133895,133896,133898,133899,133902,133903,133905],{},"粘性定位的特点：",[54680,133891],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54680,133894],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54680,133897],{},"  ③必须添加 top 、left、right、bottom ",[840,133900,133901],{},"其中一个"," 才有效",[54680,133904],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[29,133907,133908],{"className":127516,"code":133309,"language":127518,"meta":35,"style":35},[37,133909,133910,133916,133928,133942,133956],{"__ignoreMap":35},[51,133911,133912,133914],{"class":53,"line":54},[51,133913,131364],{"class":68},[51,133915,16534],{"class":72},[51,133917,133918,133920,133922,133924,133926],{"class":53,"line":61},[51,133919,133322],{"class":175},[51,133921,52401],{"class":72},[51,133923,55728],{"class":175},[51,133925,131379],{"class":72},[51,133927,133331],{"class":57},[51,133929,133930,133932,133934,133936,133938,133940],{"class":53,"line":93},[51,133931,133336],{"class":175},[51,133933,52401],{"class":72},[51,133935,443],{"class":175},[51,133937,52456],{"class":64},[51,133939,133345],{"class":72},[51,133941,133348],{"class":57},[51,133943,133944,133946,133948,133950,133952,133954],{"class":53,"line":99},[51,133945,133353],{"class":175},[51,133947,52401],{"class":72},[51,133949,457],{"class":175},[51,133951,52456],{"class":64},[51,133953,133362],{"class":72},[51,133955,133365],{"class":57},[51,133957,133958],{"class":53,"line":120},[51,133959,132],{"class":72},[2564,133961],{"style":127372,"src":133962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[40,133964,133965],{},"(6)总结",[1393,133967,133968,133983],{},[1396,133969,133970],{},[1399,133971,133972,133974,133977,133980],{},[1402,133973,133306],{"align":24699},[1402,133975,133976],{"align":24699},"是否脱标",[1402,133978,133979],{"align":24699},"移动位置",[1402,133981,133982],{"align":24699},"是否常用",[1439,133984,133985,133998,134012,134026,134039],{},[1399,133986,133987,133990,133992,133995],{},[1444,133988,133989],{"align":24699},"Static 静态定位",[1444,133991,105642],{"align":24699},[1444,133993,133994],{"align":24699},"不能使用边偏移",[1444,133996,133997],{"align":24699},"很少",[1399,133999,134000,134003,134006,134009],{},[1444,134001,134002],{"align":24699},"Relative 相对定位",[1444,134004,134005],{"align":24699},"否(占有位置)",[1444,134007,134008],{"align":24699},"相对于自身位置移动",[1444,134010,134011],{"align":24699},"基本单独使用",[1399,134013,134014,134017,134020,134023],{},[1444,134015,134016],{"align":24699},"Absolute 绝对定位",[1444,134018,134019],{"align":24699},"是(不占有位置)",[1444,134021,134022],{"align":24699},"带有定位的父级",[1444,134024,134025],{"align":24699},"要和定位父级元素搭配使用",[1399,134027,134028,134031,134033,134036],{},[1444,134029,134030],{"align":24699},"Fixed 固定定位",[1444,134032,134019],{"align":24699},[1444,134034,134035],{"align":24699},"浏览器可视区",[1444,134037,134038],{"align":24699},"单独使用,不需要父级",[1399,134040,134041,134044,134046,134048],{},[1444,134042,134043],{"align":24699},"Sticky 粘性定位",[1444,134045,134005],{"align":24699},[1444,134047,134035],{"align":24699},[1444,134049,134050],{"align":24699},"当前阶段少",[19,134052,134053],{"start":61},[22,134054,134055,134058],{},[840,134056,134057],{},"边偏移"," 则决定了该元素的最终位置",[1393,134060,134061,134072],{},[1396,134062,134063],{},[1399,134064,134065,134068,134070],{},[1402,134066,134067],{"align":24699},"边偏移属性",[1402,134069,28456],{"align":24699},[1402,134071,28453],{"align":24699},[1439,134073,134074,134085,134096,134106],{},[1399,134075,134076,134079,134082],{},[1444,134077,134078],{"align":24699},"top",[1444,134080,134081],{"align":24699},"top: 80px;",[1444,134083,134084],{"align":24699},"顶端偏移量，定义元素相对于父元素上边线的距离",[1399,134086,134087,134090,134093],{},[1444,134088,134089],{"align":24699},"bottom",[1444,134091,134092],{"align":24699},"bottom: 80px ;",[1444,134094,134095],{"align":24699},"底部偏移量，定义元素相对于其父元素下边线的距离",[1399,134097,134098,134100,134103],{},[1444,134099,24699],{"align":24699},[1444,134101,134102],{"align":24699},"left: 80px ;",[1444,134104,134105],{"align":24699},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1399,134107,134108,134110,134113],{},[1444,134109,73486],{"align":24699},[1444,134111,134112],{"align":24699},"right: 80px ;",[1444,134114,134115],{"align":24699},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1000,134117,134118],{},[22,134119,9987,134120,134122,134123,134125,134126,134128,134129,134132,134133,134135,134136,134138],{},[54680,134121],{},"  ① ",[840,134124,134057],{}," 需要和 ",[840,134127,133306],{}," 联合使用， ",[840,134130,134131],{},"单独使用无效"," ；",[54680,134134],{},"  ②top和bottom不要同时使用",[54680,134137],{},"  ③left和right不要同时使用",[22960,134140,134142],{"id":134141},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[40,134144,134145],{},"子级是绝对定位的话，父级要用相对定位",[1000,134147,134148,134151,134154,134157],{},[22,134149,134150],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[22,134152,134153],{},"父盒子需要加定位限制子盒子在父盒子内显示",[22,134155,134156],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[22,134158,134159,134160,134163],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[840,134161,134162],{},"子绝父绝"," 也会遇到",[22960,134165,134167],{"id":134166},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1000,134169,134170,134185],{},[22,134171,134172,134173,134176,134177,134180,134181,134184],{},"在使用 ",[840,134174,134175],{},"定位"," 布局时，可能会 ",[840,134178,134179],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[840,134182,134183],{},"z-index"," 来控制盒子的前后次序 (z轴)",[22,134186,27],{},[29,134188,134189],{"className":127516,"code":133309,"language":127518,"meta":35,"style":35},[37,134190,134191,134197,134209,134223,134237],{"__ignoreMap":35},[51,134192,134193,134195],{"class":53,"line":54},[51,134194,131364],{"class":68},[51,134196,16534],{"class":72},[51,134198,134199,134201,134203,134205,134207],{"class":53,"line":61},[51,134200,133322],{"class":175},[51,134202,52401],{"class":72},[51,134204,55728],{"class":175},[51,134206,131379],{"class":72},[51,134208,133331],{"class":57},[51,134210,134211,134213,134215,134217,134219,134221],{"class":53,"line":93},[51,134212,133336],{"class":175},[51,134214,52401],{"class":72},[51,134216,443],{"class":175},[51,134218,52456],{"class":64},[51,134220,133345],{"class":72},[51,134222,133348],{"class":57},[51,134224,134225,134227,134229,134231,134233,134235],{"class":53,"line":99},[51,134226,133353],{"class":175},[51,134228,52401],{"class":72},[51,134230,457],{"class":175},[51,134232,52456],{"class":64},[51,134234,133362],{"class":72},[51,134236,133365],{"class":57},[51,134238,134239],{"class":53,"line":120},[51,134240,132],{"class":72},[1000,134242,134243],{},[22,134244,134245,134246,134122,134248,134250,134251,128679,134254,83503,134257,134259,134260,134262,134263,134266,134267,134132,134270,134272,134273,134276,134278],{},"z-index的特性",[54680,134247],{},[840,134249,127980],{}," ： ",[840,134252,134253],{},"正整数",[840,134255,134256],{},"负整数",[840,134258,176],{}," ，默认值是 0，数值越大，盒子越靠上；",[54680,134261],{},"  ②如果 ",[840,134264,134265],{},"属性值相同"," ，则按照书写顺序， ",[840,134268,134269],{},"后来居上",[54680,134271],{},"  ③数字后面 ",[840,134274,134275],{},"不能加单位",[54680,134277],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22960,134280,134282],{"id":134281},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[40,134284,134285],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[40,134287,134288],{},"方法:",[1000,134290,134291,134301],{},[22,134292,134293,134294,134297,134298],{},"left: 50%; 让 ",[840,134295,134296],{},"盒子的左侧"," 移动到 ",[840,134299,134300],{},"父级元素的水平中心位置",[22,134302,134303,134304,134307,134308],{},"margin-left: -100px; 让盒子 ",[840,134305,134306],{},"向左"," 移动 ",[840,134309,134310],{},"自身宽度的一半",[22960,134312,134314],{"id":134313},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[19,134316,134317,134320],{},[22,134318,134319],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[22,134321,134322],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[40,134324,134325],{},"也就是说绝对定位和固定定位和浮动类似",[19,134327,134328],{"start":93},[22,134329,134330],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1000,134332,134333,134336,134339],{},[22,134334,134335],{},"可以用inline-block 转换为行内块",[22,134337,134338],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[22,134340,134341],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[40,134343,134344],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22960,134346,134348],{"id":134347},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[19,134350,134351,134354,134357,134360],{},[22,134352,134353],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[22,134355,134356],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[22,134358,134359],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[22,134361,134362],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[29,134364,134365],{"className":127516,"code":131982,"language":127518,"meta":35,"style":35},[37,134366,134367,134373,134383,134387,134393,134403],{"__ignoreMap":35},[51,134368,134369,134371],{"class":53,"line":54},[51,134370,131989],{"class":68},[51,134372,16534],{"class":72},[51,134374,134375,134377,134379,134381],{"class":53,"line":61},[51,134376,131996],{"class":175},[51,134378,52401],{"class":72},[51,134380,24699],{"class":175},[51,134382,179],{"class":72},[51,134384,134385],{"class":53,"line":93},[51,134386,132],{"class":72},[51,134388,134389,134391],{"class":53,"line":99},[51,134390,132011],{"class":68},[51,134392,16534],{"class":72},[51,134394,134395,134397,134399,134401],{"class":53,"line":120},[51,134396,131996],{"class":175},[51,134398,52401],{"class":72},[51,134400,73486],{"class":175},[51,134402,179],{"class":72},[51,134404,134405],{"class":53,"line":129},[51,134406,132],{"class":72},[2564,134408],{"style":127372,"src":134409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22960,134411,134413],{"id":134412},"_11138-轮播图","11.1.3.8 轮播图",[2564,134415],{"style":127372,"src":134416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[19,134418,134419],{},[22,134420,134421],{},"制作顺序:",[1000,134423,134424,134427,134430,134439],{},[22,134425,134426],{},"大盒子我们类名为： tb-promo 淘宝广告",[22,134428,134429],{},"里面先放一张图片",[22,134431,134432,134433,134435,134436,134438],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54680,134434],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54680,134437],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[22,134440,134441,134442,134444,134445,134447],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54680,134443],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54680,134446],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[19,134449,134450],{"start":61},[22,134451,134452],{},"代码模块",[29,134454,134456],{"className":127516,"code":134455,"language":127518,"meta":35,"style":35},"\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",[37,134457,134458,134463,134470,134480,134490,134500,134504,134509,134516,134526],{"__ignoreMap":35},[51,134459,134460],{"class":53,"line":54},[51,134461,134462],{"class":57},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[51,134464,134465,134468],{"class":53,"line":61},[51,134466,134467],{"class":68},".son",[51,134469,16534],{"class":72},[51,134471,134472,134474,134476,134478],{"class":53,"line":93},[51,134473,133322],{"class":175},[51,134475,52401],{"class":72},[51,134477,55795],{"class":175},[51,134479,179],{"class":72},[51,134481,134482,134484,134486,134488],{"class":53,"line":99},[51,134483,133336],{"class":175},[51,134485,52401],{"class":72},[51,134487,176],{"class":175},[51,134489,179],{"class":72},[51,134491,134492,134494,134496,134498],{"class":53,"line":120},[51,134493,133353],{"class":175},[51,134495,52401],{"class":72},[51,134497,176],{"class":175},[51,134499,179],{"class":72},[51,134501,134502],{"class":53,"line":129},[51,134503,132],{"class":72},[51,134505,134506],{"class":53,"line":206},[51,134507,134508],{"class":57},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[51,134510,134511,134514],{"class":53,"line":212},[51,134512,134513],{"class":68},".father",[51,134515,16534],{"class":72},[51,134517,134518,134520,134522,134524],{"class":53,"line":227},[51,134519,133322],{"class":175},[51,134521,52401],{"class":72},[51,134523,55728],{"class":175},[51,134525,179],{"class":72},[51,134527,134528],{"class":53,"line":370},[51,134529,132],{"class":72},[40,134531,134532],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[1233,134534,134536],{"id":134535},"_1114-定位数值的移动","11.1.4 定位数值的移动",[2564,134538],{"style":127372,"src":134539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[40,134541,134542],{},"✨ 黄金口诀：",[40,134544,134545],{},"\"TOP正下负上，LEFT正右负左\"",[40,134547,134548],{},"\"RIGHT正左负右，BOTTOM正上负下",[40,134550,134551],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[40,134553,134554],{},"✨ 简单记：",[40,134556,134557],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1179,134559,134560],{},"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":35,"searchDepth":61,"depth":61,"links":134562},[134563],{"id":133090,"depth":61,"text":133091,"children":134564},[134565,134566,134567,134568],{"id":133094,"depth":93,"text":133095},{"id":133109,"depth":93,"text":133110},{"id":133277,"depth":93,"text":133278},{"id":134535,"depth":93,"text":134536},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133082,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134575,"title":134576,"body":134577,"description":24339,"extension":1190,"meta":136000,"navigation":1192,"path":136001,"seo":136002,"stem":136003,"__hash__":136004},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134578,"toc":135979},[134579,134582,134586,134594,134598,134603,134611,134623,134627,134632,134640,134651,134655,134660,134701,134709,134713,134716,134719,134722,134816,134819,134913,134916,135010,135013,135016,135051,135054,135057,135087,135090,135093,135096,135099,135102,135105,135108,135178,135181,135185,135189,135230,135234,135240,135243,135246,135250,135253,135256,135259,135340,135343,135346,135350,135354,135357,135360,135363,135366,135369,135375,135384,135388,135407,135411,135421,135424,135427,135430,135433,135436,135439,135442,135445,135454,135458,135467,135470,135475,135528,135533,135699,135702,135705,135710,135713,135716,135719,135722,135727,135875,135878,135881,135886,135889,135894,135928,135931,135934,135938,135941,135948,135951,135954,135957,135960,135963,135966,135969,135973,135976],[10,134580,134576],{"id":134581},"_12-显示隐藏与图形资源",[14,134583,134585],{"id":134584},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1000,134587,134588,134591],{},[22,134589,134590],{},"目的:让一个元素在页面中消失或者显示出来",[22,134592,134593],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[1233,134595,134597],{"id":134596},"_1211-display-显示","12.1.1 display 显示",[19,134599,134600],{},[22,134601,134602],{},"display 设置或检索对象是否及如何显示",[1000,134604,134605,134608],{},[22,134606,134607],{},"display: none;隐藏对象",[22,134609,134610],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[19,134612,134613,134620],{"start":61},[22,134614,134615,134616,134619],{},"特点： display 隐藏元素后， ",[840,134617,134618],{},"不再占"," 有原来的位置",[22,134621,134622],{},"在js中使用非常的广泛",[1233,134624,134626],{"id":134625},"_1212-visibility可见性","12.1.2 visibility可见性",[19,134628,134629],{},[22,134630,134631],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1000,134633,134634,134637],{},[22,134635,134636],{},"visibility： visible；元素可见",[22,134638,134639],{},"visibility：hidden；元素隐藏",[19,134641,134642,134645,134648],{"start":61},[22,134643,134644],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[22,134646,134647],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[22,134649,134650],{},"隐藏后继续占有原有位置",[1233,134652,134654],{"id":134653},"_1213-overflow溢出","12.1.3 overflow溢出",[1000,134656,134657],{},[22,134658,134659],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1393,134661,134662,134670],{},[1396,134663,134664],{},[1399,134665,134666,134668],{},[1402,134667,127980],{"align":24699},[1402,134669,28453],{"align":24699},[1439,134671,134672,134680,134687,134694],{},[1399,134673,134674,134677],{},[1444,134675,134676],{"align":24699},"visible",[1444,134678,134679],{"align":24699},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1399,134681,134682,134684],{},[1444,134683,62678],{"align":24699},[1444,134685,134686],{"align":24699},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1399,134688,134689,134691],{},[1444,134690,129936],{"align":24699},[1444,134692,134693],{"align":24699},"不管超出内容否，总是显示滚动条",[1399,134695,134696,134698],{},[1444,134697,73627],{"align":24699},[1444,134699,134700],{"align":24699},"超出自动显示滚动条，不超出不显示滚动条",[1000,134702,134703,134706],{},[22,134704,134705],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[22,134707,134708],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[1233,134710,134712],{"id":134711},"_1214-案例收获","12.1.4 案例收获",[2564,134714],{"style":127372,"src":134715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[40,134717,134718],{},"问题：没做出来动态效果，使用hover没实现",[40,134720,134721],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[29,134723,134724],{"className":127516,"code":132948,"language":127518,"meta":35,"style":35},[37,134725,134726,134730,134744,134748,134762,134766,134780,134784,134798,134802],{"__ignoreMap":35},[51,134727,134728],{"class":53,"line":54},[51,134729,132955],{"class":57},[51,134731,134732,134734,134736,134738,134740,134742],{"class":53,"line":61},[51,134733,132960],{"class":68},[51,134735,80771],{"class":72},[51,134737,129876],{"class":175},[51,134739,52401],{"class":72},[51,134741,132969],{"class":175},[51,134743,130446],{"class":72},[51,134745,134746],{"class":53,"line":93},[51,134747,132976],{"class":57},[51,134749,134750,134752,134754,134756,134758,134760],{"class":53,"line":99},[51,134751,132981],{"class":68},[51,134753,80771],{"class":72},[51,134755,129876],{"class":175},[51,134757,52401],{"class":72},[51,134759,55728],{"class":175},[51,134761,130446],{"class":72},[51,134763,134764],{"class":53,"line":120},[51,134765,132996],{"class":57},[51,134767,134768,134770,134772,134774,134776,134778],{"class":53,"line":129},[51,134769,133001],{"class":68},[51,134771,80771],{"class":72},[51,134773,129876],{"class":175},[51,134775,52401],{"class":72},[51,134777,55795],{"class":175},[51,134779,130446],{"class":72},[51,134781,134782],{"class":53,"line":206},[51,134783,133016],{"class":57},[51,134785,134786,134788,134790,134792,134794,134796],{"class":53,"line":212},[51,134787,133021],{"class":68},[51,134789,80771],{"class":72},[51,134791,129876],{"class":175},[51,134793,52401],{"class":72},[51,134795,87197],{"class":175},[51,134797,130446],{"class":72},[51,134799,134800],{"class":53,"line":227},[51,134801,133036],{"class":57},[51,134803,134804,134806,134808,134810,134812,134814],{"class":53,"line":370},[51,134805,133041],{"class":68},[51,134807,80771],{"class":72},[51,134809,129876],{"class":175},[51,134811,52401],{"class":72},[51,134813,133050],{"class":175},[51,134815,130446],{"class":72},[40,134817,134818],{},"完整代码：",[29,134820,134821],{"className":127516,"code":132948,"language":127518,"meta":35,"style":35},[37,134822,134823,134827,134841,134845,134859,134863,134877,134881,134895,134899],{"__ignoreMap":35},[51,134824,134825],{"class":53,"line":54},[51,134826,132955],{"class":57},[51,134828,134829,134831,134833,134835,134837,134839],{"class":53,"line":61},[51,134830,132960],{"class":68},[51,134832,80771],{"class":72},[51,134834,129876],{"class":175},[51,134836,52401],{"class":72},[51,134838,132969],{"class":175},[51,134840,130446],{"class":72},[51,134842,134843],{"class":53,"line":93},[51,134844,132976],{"class":57},[51,134846,134847,134849,134851,134853,134855,134857],{"class":53,"line":99},[51,134848,132981],{"class":68},[51,134850,80771],{"class":72},[51,134852,129876],{"class":175},[51,134854,52401],{"class":72},[51,134856,55728],{"class":175},[51,134858,130446],{"class":72},[51,134860,134861],{"class":53,"line":120},[51,134862,132996],{"class":57},[51,134864,134865,134867,134869,134871,134873,134875],{"class":53,"line":129},[51,134866,133001],{"class":68},[51,134868,80771],{"class":72},[51,134870,129876],{"class":175},[51,134872,52401],{"class":72},[51,134874,55795],{"class":175},[51,134876,130446],{"class":72},[51,134878,134879],{"class":53,"line":206},[51,134880,133016],{"class":57},[51,134882,134883,134885,134887,134889,134891,134893],{"class":53,"line":212},[51,134884,133021],{"class":68},[51,134886,80771],{"class":72},[51,134888,129876],{"class":175},[51,134890,52401],{"class":72},[51,134892,87197],{"class":175},[51,134894,130446],{"class":72},[51,134896,134897],{"class":53,"line":227},[51,134898,133036],{"class":57},[51,134900,134901,134903,134905,134907,134909,134911],{"class":53,"line":370},[51,134902,133041],{"class":68},[51,134904,80771],{"class":72},[51,134906,129876],{"class":175},[51,134908,52401],{"class":72},[51,134910,133050],{"class":175},[51,134912,130446],{"class":72},[40,134914,134915],{},"分布思路重点详解：",[29,134917,134918],{"className":127516,"code":132948,"language":127518,"meta":35,"style":35},[37,134919,134920,134924,134938,134942,134956,134960,134974,134978,134992,134996],{"__ignoreMap":35},[51,134921,134922],{"class":53,"line":54},[51,134923,132955],{"class":57},[51,134925,134926,134928,134930,134932,134934,134936],{"class":53,"line":61},[51,134927,132960],{"class":68},[51,134929,80771],{"class":72},[51,134931,129876],{"class":175},[51,134933,52401],{"class":72},[51,134935,132969],{"class":175},[51,134937,130446],{"class":72},[51,134939,134940],{"class":53,"line":93},[51,134941,132976],{"class":57},[51,134943,134944,134946,134948,134950,134952,134954],{"class":53,"line":99},[51,134945,132981],{"class":68},[51,134947,80771],{"class":72},[51,134949,129876],{"class":175},[51,134951,52401],{"class":72},[51,134953,55728],{"class":175},[51,134955,130446],{"class":72},[51,134957,134958],{"class":53,"line":120},[51,134959,132996],{"class":57},[51,134961,134962,134964,134966,134968,134970,134972],{"class":53,"line":129},[51,134963,133001],{"class":68},[51,134965,80771],{"class":72},[51,134967,129876],{"class":175},[51,134969,52401],{"class":72},[51,134971,55795],{"class":175},[51,134973,130446],{"class":72},[51,134975,134976],{"class":53,"line":206},[51,134977,133016],{"class":57},[51,134979,134980,134982,134984,134986,134988,134990],{"class":53,"line":212},[51,134981,133021],{"class":68},[51,134983,80771],{"class":72},[51,134985,129876],{"class":175},[51,134987,52401],{"class":72},[51,134989,87197],{"class":175},[51,134991,130446],{"class":72},[51,134993,134994],{"class":53,"line":227},[51,134995,133036],{"class":57},[51,134997,134998,135000,135002,135004,135006,135008],{"class":53,"line":370},[51,134999,133041],{"class":68},[51,135001,80771],{"class":72},[51,135003,129876],{"class":175},[51,135005,52401],{"class":72},[51,135007,133050],{"class":175},[51,135009,130446],{"class":72},[2564,135011],{"style":127372,"src":135012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[40,135014,135015],{},"图片太大，盒子太小，此时需要修改图片的大小",[29,135017,135019],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[37,135020,135021],{"__ignoreMap":35},[51,135022,135023,135025,135027,135029,135031,135034,135036,135038,135041,135044,135046,135049],{"class":53,"line":54},[51,135024,2154],{"class":72},[51,135026,2564],{"class":52264},[51,135028,56203],{"class":68},[51,135030,108],{"class":72},[51,135032,135033],{"class":282},"\"images\u002Fpic.jpg\"",[51,135035,56211],{"class":68},[51,135037,108],{"class":72},[51,135039,135040],{"class":282},"\"描述文字\"",[51,135042,135043],{"class":68}," title",[51,135045,108],{"class":72},[51,135047,135048],{"class":282},"\"悬停提示\"",[51,135050,52271],{"class":72},[2564,135052],{"style":127372,"src":135053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[40,135055,135056],{},"制造遮罩层",[29,135058,135059],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,135060,135061],{"__ignoreMap":35},[51,135062,135063,135065,135067,135069,135071,135073,135075,135077,135079,135081,135083,135085],{"class":53,"line":54},[51,135064,2154],{"class":72},[51,135066,2564],{"class":52264},[51,135068,56203],{"class":68},[51,135070,108],{"class":72},[51,135072,135033],{"class":282},[51,135074,56211],{"class":68},[51,135076,108],{"class":72},[51,135078,135040],{"class":282},[51,135080,135043],{"class":68},[51,135082,108],{"class":72},[51,135084,135048],{"class":282},[51,135086,52271],{"class":72},[40,135088,135089],{},"此时是这样的为标准流",[2564,135091],{"style":127372,"src":135092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[40,135094,135095],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[40,135097,135098],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[40,135100,135101],{},"让他在中间，用center(background-position)",[40,135103,135104],{},"将需要变的尽可能放到一个盒子中",[40,135106,135107],{},"放大盒子上内部盒子发生变化",[29,135109,135111],{"className":127516,"code":135110,"language":127518,"meta":35,"style":35},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[37,135112,135113,135119,135129,135133,135140,135150,135162,135174],{"__ignoreMap":35},[51,135114,135115,135117],{"class":53,"line":54},[51,135116,128583],{"class":68},[51,135118,16534],{"class":72},[51,135120,135121,135123,135125,135127],{"class":53,"line":61},[51,135122,133322],{"class":175},[51,135124,52401],{"class":72},[51,135126,55728],{"class":175},[51,135128,179],{"class":72},[51,135130,135131],{"class":53,"line":93},[51,135132,132],{"class":72},[51,135134,135135,135138],{"class":53,"line":99},[51,135136,135137],{"class":68},".child",[51,135139,16534],{"class":72},[51,135141,135142,135144,135146,135148],{"class":53,"line":120},[51,135143,133322],{"class":175},[51,135145,52401],{"class":72},[51,135147,55795],{"class":175},[51,135149,179],{"class":72},[51,135151,135152,135154,135156,135158,135160],{"class":53,"line":129},[51,135153,133336],{"class":175},[51,135155,52401],{"class":72},[51,135157,1902],{"class":175},[51,135159,1577],{"class":64},[51,135161,179],{"class":72},[51,135163,135164,135166,135168,135170,135172],{"class":53,"line":206},[51,135165,133353],{"class":175},[51,135167,52401],{"class":72},[51,135169,1902],{"class":175},[51,135171,1577],{"class":64},[51,135173,179],{"class":72},[51,135175,135176],{"class":53,"line":212},[51,135177,132],{"class":72},[40,135179,135180],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135182,135184],{"id":135183},"_122-精灵图","12.2 精灵图",[1233,135186,135188],{"id":135187},"_1221-理解","12.2.1 理解",[19,135190,135191,135209],{},[22,135192,135193,135194,133422,135197,135200,135201,135204,135205,135208],{},"目的： ",[840,135195,135196],{},"为了有效地减少服务器接收和发送请求的次数",[840,135198,135199],{},"提高"," 页面的 ",[840,135202,135203],{},"加载速度"," ，出现了 ",[840,135206,135207],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[22,135210,135211,135212,135214,135215,135217,135218,135220,135221,135223,135224,135226,135227,135229],{},"使用精灵图核心：",[54680,135213],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54680,135216],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54680,135219],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54680,135222],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54680,135225],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54680,135228],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[1233,135231,135233],{"id":135232},"_1222-扒图","12.2.2 扒图",[29,135235,135238],{"className":135236,"code":135237,"language":34},[32],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[37,135239,135237],{"__ignoreMap":35},[2564,135241],{"style":127372,"src":135242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[2564,135244],{"style":127372,"src":135245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[1233,135247,135249],{"id":135248},"_1223-精灵图的实现","12.2.3 精灵图的实现",[2564,135251],{"style":127372,"src":135252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[40,135254,135255],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[2564,135257],{"style":127372,"src":135258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[29,135260,135262],{"className":127516,"code":135261,"language":127518,"meta":35,"style":35},"\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",[37,135263,135264,135269,135276,135288,135300,135319,135336],{"__ignoreMap":35},[51,135265,135266],{"class":53,"line":54},[51,135267,135268],{"class":57},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[51,135270,135271,135274],{"class":53,"line":61},[51,135272,135273],{"class":68},".icon",[51,135275,16534],{"class":72},[51,135277,135278,135280,135282,135284,135286],{"class":53,"line":93},[51,135279,71532],{"class":175},[51,135281,52401],{"class":72},[51,135283,457],{"class":175},[51,135285,52456],{"class":64},[51,135287,179],{"class":72},[51,135289,135290,135292,135294,135296,135298],{"class":53,"line":99},[51,135291,71752],{"class":175},[51,135293,52401],{"class":72},[51,135295,457],{"class":175},[51,135297,52456],{"class":64},[51,135299,179],{"class":72},[51,135301,135302,135304,135306,135308,135310,135313,135315,135317],{"class":53,"line":120},[51,135303,71575],{"class":175},[51,135305,52401],{"class":72},[51,135307,62690],{"class":175},[51,135309,73],{"class":72},[51,135311,135312],{"class":78},"sprites.png",[51,135314,14676],{"class":72},[51,135316,62700],{"class":175},[51,135318,179],{"class":72},[51,135320,135321,135323,135325,135327,135329,135332,135334],{"class":53,"line":129},[51,135322,129776],{"class":175},[51,135324,52401],{"class":72},[51,135326,52727],{"class":175},[51,135328,52456],{"class":64},[51,135330,135331],{"class":175}," -20",[51,135333,52456],{"class":64},[51,135335,179],{"class":72},[51,135337,135338],{"class":53,"line":206},[51,135339,132],{"class":72},[2564,135341],{"style":127372,"src":135342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[40,135344,135345],{},"在前端中坐标轴的正方向是右和下",[14,135347,135349],{"id":135348},"_123-字体图标","12.3 字体图标",[1233,135351,135353],{"id":135352},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[40,135355,135356],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[40,135358,135359],{},"精灵图是有诸多优点的，但是缺点很明显。",[40,135361,135362],{},"1.图片文件还是比较大的。",[40,135364,135365],{},"2.图片本身放大和缩小会失真。",[40,135367,135368],{},"3.一旦图片制作完毕想要更换非常复杂。",[40,135370,135371,135372,26704],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[840,135373,135374],{},"字体图标 iconfont",[40,135376,135377,135380,135381,29349],{},[840,135378,135379],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[840,135382,135383],{},"展示的是图标，本质属于字体",[1233,135385,135387],{"id":135386},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1000,135389,135390,135395,135398,135401,135404],{},[22,135391,135392,135394],{},[840,135393,26840],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[22,135396,135397],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[22,135399,135400],{},"兼容性：几乎支持所有的浏览器，请放心使用",[22,135402,135403],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[22,135405,135406],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[1233,135408,135410],{"id":135409},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1000,135412,135413],{},[22,135414,135415,135416],{},"icomoon字体库：",[981,135417,135420],{"href":135418,"rel":135419},"http:\u002F\u002Ficomoon.io\u002F",[24828],"http:\u002F\u002Ficomoon.io",[40,135422,135423],{},"进去之后点icomoon app",[2564,135425],{"style":127372,"src":135426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[40,135428,135429],{},"可以对其编辑：",[2564,135431],{"style":127372,"src":135432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[40,135434,135435],{},"生成字体：",[2564,135437],{"style":127372,"src":135438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[40,135440,135441],{},"下载：",[2564,135443],{"style":127372,"src":135444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1000,135446,135447],{},[22,135448,135449,135450],{},"阿里iconfont字体库： ",[981,135451,135452],{"href":135452,"rel":135453},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24828],[1233,135455,135457],{"id":135456},"_1234-字体图标的引入","12.3.4 字体图标的引入",[19,135459,135460],{},[22,135461,135462,135463,135466],{},"把下载包里面的 ",[840,135464,135465],{},"fonts"," 文件夹放入页面根目录下",[2564,135468],{"style":127372,"src":135469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[19,135471,135472],{"start":61},[22,135473,135474],{},"字体文件格式",[1393,135476,135477,135486],{},[1396,135478,135479],{},[1399,135480,135481,135484],{},[1402,135482,135483],{"align":24699},"格式",[1402,135485,24703],{"align":24699},[1439,135487,135488,135498,135508,135518],{},[1399,135489,135490,135495],{},[1444,135491,135492],{"align":24699},[840,135493,135494],{},".ttf",[1444,135496,135497],{"align":24699},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1399,135499,135500,135505],{},[1444,135501,135502],{"align":24699},[840,135503,135504],{},".woff",[1444,135506,135507],{"align":24699},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1399,135509,135510,135515],{},[1444,135511,135512],{"align":24699},[840,135513,135514],{},".eot",[1444,135516,135517],{"align":24699},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1399,135519,135520,135525],{},[1444,135521,135522],{"align":24699},[840,135523,135524],{},"svg",[1444,135526,135527],{"align":24699},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[19,135529,135530],{"start":93},[22,135531,135532],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[29,135534,135536],{"className":127516,"code":135535,"language":127518,"meta":35,"style":35},"\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",[37,135537,135538,135543,135550,135562,135578,135603,135624,135644,135664,135668,135674,135684,135695],{"__ignoreMap":35},[51,135539,135540],{"class":53,"line":54},[51,135541,135542],{"class":57},"\u002F* 引入字体图标 *\u002F\n",[51,135544,135545,135548],{"class":53,"line":61},[51,135546,135547],{"class":64},"@font-face",[51,135549,16534],{"class":72},[51,135551,135552,135555,135557,135560],{"class":53,"line":93},[51,135553,135554],{"class":175},"  font-family",[51,135556,52401],{"class":72},[51,135558,135559],{"class":282},"'icomoon'",[51,135561,179],{"class":72},[51,135563,135564,135567,135569,135571,135573,135576],{"class":53,"line":99},[51,135565,135566],{"class":175},"  src",[51,135568,52401],{"class":72},[51,135570,62690],{"class":175},[51,135572,73],{"class":72},[51,135574,135575],{"class":282},"'fonts\u002Ficomoon.eot'",[51,135577,615],{"class":72},[51,135579,135580,135582,135584,135586,135588,135591,135593,135596,135598,135601],{"class":53,"line":120},[51,135581,135566],{"class":175},[51,135583,52401],{"class":72},[51,135585,62690],{"class":175},[51,135587,73],{"class":72},[51,135589,135590],{"class":282},"'fonts\u002Ficomoon.eot?#iefix'",[51,135592,14676],{"class":72},[51,135594,135595],{"class":175},"format",[51,135597,73],{"class":72},[51,135599,135600],{"class":282},"'embedded-opentype'",[51,135602,39011],{"class":72},[51,135604,135605,135608,135610,135613,135615,135617,135619,135622],{"class":53,"line":129},[51,135606,135607],{"class":175},"       url",[51,135609,73],{"class":72},[51,135611,135612],{"class":282},"'fonts\u002Ficomoon.woff'",[51,135614,14676],{"class":72},[51,135616,135595],{"class":175},[51,135618,73],{"class":72},[51,135620,135621],{"class":282},"'woff'",[51,135623,39011],{"class":72},[51,135625,135626,135628,135630,135633,135635,135637,135639,135642],{"class":53,"line":206},[51,135627,135607],{"class":175},[51,135629,73],{"class":72},[51,135631,135632],{"class":282},"'fonts\u002Ficomoon.ttf'",[51,135634,14676],{"class":72},[51,135636,135595],{"class":175},[51,135638,73],{"class":72},[51,135640,135641],{"class":282},"'truetype'",[51,135643,39011],{"class":72},[51,135645,135646,135648,135650,135653,135655,135657,135659,135662],{"class":53,"line":212},[51,135647,135607],{"class":175},[51,135649,73],{"class":72},[51,135651,135652],{"class":282},"'fonts\u002Ficomoon.svg#icomoon'",[51,135654,14676],{"class":72},[51,135656,135595],{"class":175},[51,135658,73],{"class":72},[51,135660,135661],{"class":282},"'svg'",[51,135663,615],{"class":72},[51,135665,135666],{"class":53,"line":227},[51,135667,132],{"class":72},[51,135669,135670,135672],{"class":53,"line":370},[51,135671,135273],{"class":68},[51,135673,16534],{"class":72},[51,135675,135676,135678,135680,135682],{"class":53,"line":387},[51,135677,135554],{"class":175},[51,135679,52401],{"class":72},[51,135681,135559],{"class":282},[51,135683,179],{"class":72},[51,135685,135686,135689,135691,135693],{"class":53,"line":404},[51,135687,135688],{"class":175},"  font-style",[51,135690,52401],{"class":72},[51,135692,64805],{"class":175},[51,135694,179],{"class":72},[51,135696,135697],{"class":53,"line":415},[51,135698,132],{"class":72},[40,135700,135701],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[2564,135703],{"style":127372,"src":135704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[19,135706,135707],{"start":99},[22,135708,135709],{},"添加字体",[2564,135711],{"style":127372,"src":135712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[40,135714,135715],{},"复制：",[2564,135717],{"style":127372,"src":135718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[40,135720,135721],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[19,135723,135724],{"start":120},[22,135725,135726],{},"代码展示：",[29,135728,135729],{"className":127516,"code":135535,"language":127518,"meta":35,"style":35},[37,135730,135731,135735,135741,135751,135765,135787,135805,135823,135841,135845,135851,135861,135871],{"__ignoreMap":35},[51,135732,135733],{"class":53,"line":54},[51,135734,135542],{"class":57},[51,135736,135737,135739],{"class":53,"line":61},[51,135738,135547],{"class":64},[51,135740,16534],{"class":72},[51,135742,135743,135745,135747,135749],{"class":53,"line":93},[51,135744,135554],{"class":175},[51,135746,52401],{"class":72},[51,135748,135559],{"class":282},[51,135750,179],{"class":72},[51,135752,135753,135755,135757,135759,135761,135763],{"class":53,"line":99},[51,135754,135566],{"class":175},[51,135756,52401],{"class":72},[51,135758,62690],{"class":175},[51,135760,73],{"class":72},[51,135762,135575],{"class":282},[51,135764,615],{"class":72},[51,135766,135767,135769,135771,135773,135775,135777,135779,135781,135783,135785],{"class":53,"line":120},[51,135768,135566],{"class":175},[51,135770,52401],{"class":72},[51,135772,62690],{"class":175},[51,135774,73],{"class":72},[51,135776,135590],{"class":282},[51,135778,14676],{"class":72},[51,135780,135595],{"class":175},[51,135782,73],{"class":72},[51,135784,135600],{"class":282},[51,135786,39011],{"class":72},[51,135788,135789,135791,135793,135795,135797,135799,135801,135803],{"class":53,"line":129},[51,135790,135607],{"class":175},[51,135792,73],{"class":72},[51,135794,135612],{"class":282},[51,135796,14676],{"class":72},[51,135798,135595],{"class":175},[51,135800,73],{"class":72},[51,135802,135621],{"class":282},[51,135804,39011],{"class":72},[51,135806,135807,135809,135811,135813,135815,135817,135819,135821],{"class":53,"line":206},[51,135808,135607],{"class":175},[51,135810,73],{"class":72},[51,135812,135632],{"class":282},[51,135814,14676],{"class":72},[51,135816,135595],{"class":175},[51,135818,73],{"class":72},[51,135820,135641],{"class":282},[51,135822,39011],{"class":72},[51,135824,135825,135827,135829,135831,135833,135835,135837,135839],{"class":53,"line":212},[51,135826,135607],{"class":175},[51,135828,73],{"class":72},[51,135830,135652],{"class":282},[51,135832,14676],{"class":72},[51,135834,135595],{"class":175},[51,135836,73],{"class":72},[51,135838,135661],{"class":282},[51,135840,615],{"class":72},[51,135842,135843],{"class":53,"line":227},[51,135844,132],{"class":72},[51,135846,135847,135849],{"class":53,"line":370},[51,135848,135273],{"class":68},[51,135850,16534],{"class":72},[51,135852,135853,135855,135857,135859],{"class":53,"line":387},[51,135854,135554],{"class":175},[51,135856,52401],{"class":72},[51,135858,135559],{"class":282},[51,135860,179],{"class":72},[51,135862,135863,135865,135867,135869],{"class":53,"line":404},[51,135864,135688],{"class":175},[51,135866,52401],{"class":72},[51,135868,64805],{"class":175},[51,135870,179],{"class":72},[51,135872,135873],{"class":53,"line":415},[51,135874,132],{"class":72},[2564,135876],{"style":127372,"src":135877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[40,135879,135880],{},"更加细节展示：",[19,135882,135883],{},[22,135884,135885],{},"html 标签内添加小图标",[2564,135887],{"style":127372,"src":135888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[19,135890,135891],{"start":61},[22,135892,135893],{},"给标签定义字体",[29,135895,135896],{"className":128263,"code":131620,"language":128265,"meta":35,"style":35},[37,135897,135898,135902,135916,135920],{"__ignoreMap":35},[51,135899,135900],{"class":53,"line":54},[51,135901,131627],{"class":57},[51,135903,135904,135906,135908,135910,135912,135914],{"class":53,"line":61},[51,135905,2154],{"class":72},[51,135907,52575],{"class":52264},[51,135909,54450],{"class":68},[51,135911,108],{"class":72},[51,135913,131640],{"class":282},[51,135915,52271],{"class":72},[51,135917,135918],{"class":53,"line":93},[51,135919,131647],{"class":72},[51,135921,135922,135924,135926],{"class":53,"line":99},[51,135923,52749],{"class":72},[51,135925,52575],{"class":52264},[51,135927,52271],{"class":72},[40,135929,135930],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[2564,135932],{"style":127372,"src":135933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[1233,135935,135937],{"id":135936},"_1235-字体图标的追加","12.3.5 字体图标的追加",[40,135939,135940],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[40,135942,135943,135944,135947],{},"把压缩包里面的 ",[840,135945,135946],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[40,135949,135950],{},"打开网站，点下方：",[2564,135952],{"style":127372,"src":135953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[2564,135955],{"style":127372,"src":135956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[2564,135958],{"style":127372,"src":135959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[40,135961,135962],{},"点yes重新加载",[40,135964,135965],{},"然后重复之前的操作就可以实现了",[40,135967,135968],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[1233,135970,135972],{"id":135971},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[2564,135974],{"style":127372,"src":135975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1179,135977,135978],{},"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":35,"searchDepth":61,"depth":61,"links":135980},[135981,135987,135992],{"id":134584,"depth":61,"text":134585,"children":135982},[135983,135984,135985,135986],{"id":134596,"depth":93,"text":134597},{"id":134625,"depth":93,"text":134626},{"id":134653,"depth":93,"text":134654},{"id":134711,"depth":93,"text":134712},{"id":135183,"depth":61,"text":135184,"children":135988},[135989,135990,135991],{"id":135187,"depth":93,"text":135188},{"id":135232,"depth":93,"text":135233},{"id":135248,"depth":93,"text":135249},{"id":135348,"depth":61,"text":135349,"children":135993},[135994,135995,135996,135997,135998,135999],{"id":135352,"depth":93,"text":135353},{"id":135386,"depth":93,"text":135387},{"id":135409,"depth":93,"text":135410},{"id":135456,"depth":93,"text":135457},{"id":135936,"depth":93,"text":135937},{"id":135971,"depth":93,"text":135972},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134576,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136006,"title":136007,"body":136008,"description":24339,"extension":1190,"meta":137235,"navigation":1192,"path":137236,"seo":137237,"stem":137238,"__hash__":137239},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136009,"toc":137216},[136010,136013,136017,136020,136034,136102,136132,136135,136139,136143,136245,136292,136296,136299,136302,136336,136339,136342,136345,136348,136351,136354,136357,136359,136362,136365,136368,136371,136374,136377,136380,136408,136411,136415,136418,136425,136428,136431,136457,136460,136464,136467,136470,136477,136481,136484,136486,136518,136521,136524,136536,136542,136545,136548,136551,136553,136557,136560,136563,136566,136611,136615,136617,136620,136627,136669,136672,136676,136681,136695,136699,136702,136705,136708,136711,136714,136748,136751,136754,136808,136811,136814,136817,136820,136872,136875,136878,136927,136931,136933,136936,136939,136942,136945,136948,137006,137009,137015,137018,137021,137053,137056,137060,137064,137067,137099,137103,137106,137150,137154,137157,137160,137163,137166,137169,137172,137175,137177,137180,137182,137185,137188,137191,137194,137199,137202,137204,137207,137210,137213],[10,136011,136007],{"id":136012},"_13-界面样式与布局技巧",[14,136014,136016],{"id":136015},"_131-css三角","13.1 css三角",[40,136018,136019],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1000,136021,136022,136025,136028,136031],{},[22,136023,136024],{},"用css 边框可以模拟三角效果",[22,136026,136027],{},"宽度高度为0",[22,136029,136030],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[22,136032,136033],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[29,136035,136037],{"className":127516,"code":136036,"language":127518,"meta":35,"style":35},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[37,136038,136039,136044,136051,136061,136071,136087,136098],{"__ignoreMap":35},[51,136040,136041],{"class":53,"line":54},[51,136042,136043],{"class":57},"\u002F* CSS 实现三角形 *\u002F\n",[51,136045,136046,136049],{"class":53,"line":61},[51,136047,136048],{"class":68},".triangle",[51,136050,16534],{"class":72},[51,136052,136053,136055,136057,136059],{"class":53,"line":93},[51,136054,71532],{"class":175},[51,136056,52401],{"class":72},[51,136058,176],{"class":175},[51,136060,179],{"class":72},[51,136062,136063,136065,136067,136069],{"class":53,"line":99},[51,136064,71752],{"class":175},[51,136066,52401],{"class":72},[51,136068,176],{"class":175},[51,136070,179],{"class":72},[51,136072,136073,136075,136077,136079,136081,136083,136085],{"class":53,"line":120},[51,136074,71860],{"class":175},[51,136076,52401],{"class":72},[51,136078,443],{"class":175},[51,136080,52456],{"class":64},[51,136082,52485],{"class":175},[51,136084,64955],{"class":175},[51,136086,179],{"class":72},[51,136088,136089,136092,136094,136096],{"class":53,"line":129},[51,136090,136091],{"class":175},"  border-bottom-color",[51,136093,52401],{"class":72},[51,136095,63333],{"class":175},[51,136097,179],{"class":72},[51,136099,136100],{"class":53,"line":206},[51,136101,132],{"class":72},[29,136103,136104],{"className":127516,"code":131673,"language":127518,"meta":35,"style":35},[37,136105,136106,136112,136128],{"__ignoreMap":35},[51,136107,136108,136110],{"class":53,"line":54},[51,136109,52575],{"class":52264},[51,136111,16534],{"class":72},[51,136113,136114,136116,136118,136120,136122,136124,136126],{"class":53,"line":61},[51,136115,71860],{"class":175},[51,136117,52401],{"class":72},[51,136119,791],{"class":175},[51,136121,52456],{"class":64},[51,136123,52485],{"class":175},[51,136125,130908],{"class":175},[51,136127,179],{"class":72},[51,136129,136130],{"class":53,"line":93},[51,136131,132],{"class":72},[2564,136133],{"style":127372,"src":136134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136136,136138],{"id":136137},"_132-css用户界面样式","13.2 css用户界面样式",[1233,136140,136142],{"id":136141},"_1321-鼠标样式","13.2.1 鼠标样式",[29,136144,136146],{"className":127516,"code":136145,"language":127518,"meta":35,"style":35},"\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",[37,136147,136148,136153,136172,136190,136209,136226],{"__ignoreMap":35},[51,136149,136150],{"class":53,"line":54},[51,136151,136152],{"class":57},"\u002F* 鼠标样式 *\u002F\n",[51,136154,136155,136157,136159,136162,136164,136166,136169],{"class":53,"line":61},[51,136156,52575],{"class":52264},[51,136158,80771],{"class":72},[51,136160,136161],{"class":175},"cursor",[51,136163,52401],{"class":72},[51,136165,62994],{"class":175},[51,136167,136168],{"class":72},"; }   ",[51,136170,136171],{"class":57},"\u002F* 手型 *\u002F\n",[51,136173,136174,136176,136178,136180,136182,136185,136187],{"class":53,"line":93},[51,136175,52575],{"class":52264},[51,136177,80771],{"class":72},[51,136179,136161],{"class":175},[51,136181,52401],{"class":72},[51,136183,136184],{"class":175},"default",[51,136186,136168],{"class":72},[51,136188,136189],{"class":57},"\u002F* 默认 *\u002F\n",[51,136191,136192,136194,136196,136198,136200,136203,136206],{"class":53,"line":99},[51,136193,52575],{"class":52264},[51,136195,80771],{"class":72},[51,136197,136161],{"class":175},[51,136199,52401],{"class":72},[51,136201,136202],{"class":175},"move",[51,136204,136205],{"class":72},"; }      ",[51,136207,136208],{"class":57},"\u002F* 移动 *\u002F\n",[51,136210,136211,136213,136215,136217,136219,136221,136223],{"class":53,"line":120},[51,136212,52575],{"class":52264},[51,136214,80771],{"class":72},[51,136216,136161],{"class":175},[51,136218,52401],{"class":72},[51,136220,34],{"class":175},[51,136222,136205],{"class":72},[51,136224,136225],{"class":57},"\u002F* 文本 *\u002F\n",[51,136227,136228,136230,136232,136234,136236,136239,136242],{"class":53,"line":129},[51,136229,52575],{"class":52264},[51,136231,80771],{"class":72},[51,136233,136161],{"class":175},[51,136235,52401],{"class":72},[51,136237,136238],{"class":175},"not-allowed",[51,136240,136241],{"class":72},"; } ",[51,136243,136244],{"class":57},"\u002F* 禁止 *\u002F\n",[1393,136246,136247,136255],{},[1396,136248,136249],{},[1399,136250,136251,136253],{},[1402,136252,127980],{"align":24699},[1402,136254,28453],{"align":24699},[1439,136256,136257,136264,136271,136278,136285],{},[1399,136258,136259,136261],{},[1444,136260,136184],{"align":24699},[1444,136262,136263],{"align":24699},"小白 默认",[1399,136265,136266,136268],{},[1444,136267,62994],{"align":24699},[1444,136269,136270],{"align":24699},"小手",[1399,136272,136273,136275],{},[1444,136274,136202],{"align":24699},[1444,136276,136277],{"align":24699},"移动",[1399,136279,136280,136282],{},[1444,136281,34],{"align":24699},[1444,136283,136284],{"align":24699},"文本",[1399,136286,136287,136289],{},[1444,136288,136238],{"align":24699},[1444,136290,136291],{"align":24699},"禁止",[1233,136293,136295],{"id":136294},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[40,136297,136298],{},"去除表单轮廓线",[40,136300,136301],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[29,136303,136304],{"className":127516,"code":130880,"language":127518,"meta":35,"style":35},[37,136305,136306,136310,136316,136332],{"__ignoreMap":35},[51,136307,136308],{"class":53,"line":54},[51,136309,130887],{"class":57},[51,136311,136312,136314],{"class":53,"line":61},[51,136313,52575],{"class":52264},[51,136315,16534],{"class":72},[51,136317,136318,136320,136322,136324,136326,136328,136330],{"class":53,"line":93},[51,136319,71860],{"class":175},[51,136321,52401],{"class":72},[51,136323,791],{"class":175},[51,136325,52456],{"class":64},[51,136327,52485],{"class":175},[51,136329,130908],{"class":175},[51,136331,179],{"class":72},[51,136333,136334],{"class":53,"line":99},[51,136335,132],{"class":72},[40,136337,136338],{},"文本域：",[2564,136340],{"style":127372,"src":136341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[40,136343,136344],{},"此时会有一个空白区域",[2564,136346],{"style":127372,"src":136347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[40,136349,136350],{},"写在同一行就不会出现这个问题",[2564,136352],{"style":127372,"src":136353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[40,136355,136356],{},"文本域是行内块元素，一定记住！！！",[40,136358,99197],{},[2564,136360],{"style":127372,"src":136361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[40,136363,136364],{},"文本域尽量放在一行",[40,136366,136367],{},"知识回顾：cols是列，rols是行",[2564,136369],{"style":127372,"src":136370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[40,136372,136373],{},"它可以进行拖动，显然这是我们不愿意看到的",[2564,136375],{"style":127372,"src":136376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[40,136378,136379],{},"使用resize进行解决",[29,136381,136383],{"className":127516,"code":136382,"language":127518,"meta":35,"style":35},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[37,136384,136385,136391,136404],{"__ignoreMap":35},[51,136386,136387,136389],{"class":53,"line":54},[51,136388,54785],{"class":52264},[51,136390,16534],{"class":72},[51,136392,136393,136395,136397,136399,136401],{"class":53,"line":61},[51,136394,71762],{"class":175},[51,136396,52401],{"class":72},[51,136398,55701],{"class":175},[51,136400,131379],{"class":72},[51,136402,136403],{"class":57},"\u002F* 取消表单轮廓线 *\u002F\n",[51,136405,136406],{"class":53,"line":93},[51,136407,132],{"class":72},[40,136409,136410],{},"此时就无法通过右下方实现拖动了",[1233,136412,136414],{"id":136413},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[40,136416,136417],{},"实现一个盒子中的文字和图片对齐",[40,136419,136420,136421,136424],{},"用于设置一个元素的 ",[840,136422,136423],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[40,136426,136427],{},"图片和文字默认是基线对齐",[2564,136429],{"style":127372,"src":136430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[29,136432,136433],{"className":127516,"code":136382,"language":127518,"meta":35,"style":35},[37,136434,136435,136441,136453],{"__ignoreMap":35},[51,136436,136437,136439],{"class":53,"line":54},[51,136438,54785],{"class":52264},[51,136440,16534],{"class":72},[51,136442,136443,136445,136447,136449,136451],{"class":53,"line":61},[51,136444,71762],{"class":175},[51,136446,52401],{"class":72},[51,136448,55701],{"class":175},[51,136450,131379],{"class":72},[51,136452,136403],{"class":57},[51,136454,136455],{"class":53,"line":93},[51,136456,132],{"class":72},[2564,136458],{"style":127372,"src":136459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22960,136461,136463],{"id":136462},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[40,136465,136466],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[2564,136468],{"style":127372,"src":136469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[40,136471,136472,136473,136476],{},"此时可以给图片、表单这些行内块元素的 ",[840,136474,136475],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22960,136478,136480],{"id":136479},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[40,136482,136483],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[40,136485,15595],{},[29,136487,136489],{"className":127516,"code":136488,"language":127518,"meta":35,"style":35},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[37,136490,136491,136496,136502,136514],{"__ignoreMap":35},[51,136492,136493],{"class":53,"line":54},[51,136494,136495],{"class":57},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[51,136497,136498,136500],{"class":53,"line":61},[51,136499,2564],{"class":52264},[51,136501,16534],{"class":72},[51,136503,136504,136507,136509,136512],{"class":53,"line":93},[51,136505,136506],{"class":175},"  vertical-align",[51,136508,52401],{"class":72},[51,136510,136511],{"class":175},"middle",[51,136513,179],{"class":72},[51,136515,136516],{"class":53,"line":99},[51,136517,132],{"class":72},[2564,136519],{"style":127372,"src":136520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[40,136522,136523],{},"主要解决方法有两种：",[19,136525,136526],{},[22,136527,136528,136531,136532,136535],{},[840,136529,136530],{},"给图片"," 添加 ",[840,136533,136534],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[40,136537,136538,136539],{},"2.把图片转换为块级元素 ",[840,136540,136541],{},"display: block",[40,136543,136544],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[40,136546,136547],{},"img {",[40,136549,136550],{},"vertical-align:middle;",[40,136552,2190],{},[1233,136554,136556],{"id":136555},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[40,136558,136559],{},"效果：",[2564,136561],{"style":127372,"src":136562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[40,136564,136565],{},"单行文本溢出显示省略号--必须满足三个条件：",[29,136567,136569],{"className":127516,"code":136568,"language":127518,"meta":35,"style":35},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[37,136570,136571,136576,136582,136592,136597,136607],{"__ignoreMap":35},[51,136572,136573],{"class":53,"line":54},[51,136574,136575],{"class":57},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[51,136577,136578,136580],{"class":53,"line":61},[51,136579,2564],{"class":52264},[51,136581,16534],{"class":72},[51,136583,136584,136586,136588,136590],{"class":53,"line":93},[51,136585,136506],{"class":175},[51,136587,52401],{"class":72},[51,136589,136511],{"class":175},[51,136591,179],{"class":72},[51,136593,136594],{"class":53,"line":99},[51,136595,136596],{"class":57},"  \u002F* 或 *\u002F\n",[51,136598,136599,136601,136603,136605],{"class":53,"line":120},[51,136600,129132],{"class":175},[51,136602,52401],{"class":72},[51,136604,61833],{"class":175},[51,136606,179],{"class":72},[51,136608,136609],{"class":53,"line":129},[51,136610,132],{"class":72},[1233,136612,136614],{"id":136613},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[40,136616,136559],{},[2564,136618],{"style":127372,"src":136619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[40,136621,136622,136623,136626],{},"多行文本溢出显示省略号， ",[840,136624,136625],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[29,136628,136629],{"className":127516,"code":136568,"language":127518,"meta":35,"style":35},[37,136630,136631,136635,136641,136651,136655,136665],{"__ignoreMap":35},[51,136632,136633],{"class":53,"line":54},[51,136634,136575],{"class":57},[51,136636,136637,136639],{"class":53,"line":61},[51,136638,2564],{"class":52264},[51,136640,16534],{"class":72},[51,136642,136643,136645,136647,136649],{"class":53,"line":93},[51,136644,136506],{"class":175},[51,136646,52401],{"class":72},[51,136648,136511],{"class":175},[51,136650,179],{"class":72},[51,136652,136653],{"class":53,"line":99},[51,136654,136596],{"class":57},[51,136656,136657,136659,136661,136663],{"class":53,"line":120},[51,136658,129132],{"class":175},[51,136660,52401],{"class":72},[51,136662,61833],{"class":175},[51,136664,179],{"class":72},[51,136666,136667],{"class":53,"line":129},[51,136668,132],{"class":72},[40,136670,136671],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136673,136675],{"id":136674},"_133-常见布局技巧","13.3 常见布局技巧",[40,136677,136678],{},[840,136679,136680],{},"巧妙利用一个技术更快更好的布局：",[19,136682,136683,136686,136689,136692],{},[22,136684,136685],{},"margin负值的运用",[22,136687,136688],{},"文字围绕浮动元素",[22,136690,136691],{},"行内块的巧妙运用",[22,136693,136694],{},"CSS三角强化",[1233,136696,136698],{"id":136697},"_1331-margin负值的运用","13.3.1 margin负值的运用",[40,136700,136701],{},"应用场景：",[2564,136703],{"style":127372,"src":136704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[2564,136706],{"style":127372,"src":136707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[40,136709,136710],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[40,136712,136713],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[29,136715,136716],{"className":127516,"code":130880,"language":127518,"meta":35,"style":35},[37,136717,136718,136722,136728,136744],{"__ignoreMap":35},[51,136719,136720],{"class":53,"line":54},[51,136721,130887],{"class":57},[51,136723,136724,136726],{"class":53,"line":61},[51,136725,52575],{"class":52264},[51,136727,16534],{"class":72},[51,136729,136730,136732,136734,136736,136738,136740,136742],{"class":53,"line":93},[51,136731,71860],{"class":175},[51,136733,52401],{"class":72},[51,136735,791],{"class":175},[51,136737,52456],{"class":64},[51,136739,52485],{"class":175},[51,136741,130908],{"class":175},[51,136743,179],{"class":72},[51,136745,136746],{"class":53,"line":99},[51,136747,132],{"class":72},[2564,136749],{"style":127372,"src":136750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[40,136752,136753],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[29,136755,136757],{"className":127516,"code":136756,"language":127518,"meta":35,"style":35},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[37,136758,136759,136764,136770,136780,136792,136804],{"__ignoreMap":35},[51,136760,136761],{"class":53,"line":54},[51,136762,136763],{"class":57},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[51,136765,136766,136768],{"class":53,"line":61},[51,136767,131364],{"class":68},[51,136769,16534],{"class":72},[51,136771,136772,136774,136776,136778],{"class":53,"line":93},[51,136773,133322],{"class":175},[51,136775,52401],{"class":72},[51,136777,55728],{"class":175},[51,136779,179],{"class":72},[51,136781,136782,136784,136786,136788,136790],{"class":53,"line":99},[51,136783,133336],{"class":175},[51,136785,52401],{"class":72},[51,136787,443],{"class":175},[51,136789,52456],{"class":64},[51,136791,179],{"class":72},[51,136793,136794,136796,136798,136800,136802],{"class":53,"line":120},[51,136795,133353],{"class":175},[51,136797,52401],{"class":72},[51,136799,457],{"class":175},[51,136801,52456],{"class":64},[51,136803,179],{"class":72},[51,136805,136806],{"class":53,"line":129},[51,136807,132],{"class":72},[40,136809,136810],{},"加上上述代码会发现：",[2564,136812],{"style":127372,"src":136813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[40,136815,136816],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[40,136818,136819],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[29,136821,136822],{"className":127516,"code":136756,"language":127518,"meta":35,"style":35},[37,136823,136824,136828,136834,136844,136856,136868],{"__ignoreMap":35},[51,136825,136826],{"class":53,"line":54},[51,136827,136763],{"class":57},[51,136829,136830,136832],{"class":53,"line":61},[51,136831,131364],{"class":68},[51,136833,16534],{"class":72},[51,136835,136836,136838,136840,136842],{"class":53,"line":93},[51,136837,133322],{"class":175},[51,136839,52401],{"class":72},[51,136841,55728],{"class":175},[51,136843,179],{"class":72},[51,136845,136846,136848,136850,136852,136854],{"class":53,"line":99},[51,136847,133336],{"class":175},[51,136849,52401],{"class":72},[51,136851,443],{"class":175},[51,136853,52456],{"class":64},[51,136855,179],{"class":72},[51,136857,136858,136860,136862,136864,136866],{"class":53,"line":120},[51,136859,133353],{"class":175},[51,136861,52401],{"class":72},[51,136863,457],{"class":175},[51,136865,52456],{"class":64},[51,136867,179],{"class":72},[51,136869,136870],{"class":53,"line":129},[51,136871,132],{"class":72},[40,136873,136874],{},"解决方式2：",[40,136876,136877],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[29,136879,136881],{"className":127516,"code":136880,"language":127518,"meta":35,"style":35},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[37,136882,136883,136889,136899,136911,136923],{"__ignoreMap":35},[51,136884,136885,136887],{"class":53,"line":54},[51,136886,52575],{"class":52264},[51,136888,16534],{"class":72},[51,136890,136891,136893,136895,136897],{"class":53,"line":61},[51,136892,133322],{"class":175},[51,136894,52401],{"class":72},[51,136896,55728],{"class":175},[51,136898,179],{"class":72},[51,136900,136901,136903,136905,136907,136909],{"class":53,"line":93},[51,136902,133336],{"class":175},[51,136904,52401],{"class":72},[51,136906,443],{"class":175},[51,136908,52456],{"class":64},[51,136910,179],{"class":72},[51,136912,136913,136915,136917,136919,136921],{"class":53,"line":99},[51,136914,133353],{"class":175},[51,136916,52401],{"class":72},[51,136918,457],{"class":175},[51,136920,52456],{"class":64},[51,136922,179],{"class":72},[51,136924,136925],{"class":53,"line":120},[51,136926,132],{"class":72},[1233,136928,136930],{"id":136929},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[40,136932,136701],{},[2564,136934],{"style":127372,"src":136935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[40,136937,136938],{},"实现结构图：",[2564,136940],{"style":127372,"src":136941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[40,136943,136944],{},"巧妙运用浮动元素不会压住文字的特性",[40,136946,136947],{},"代码显示：",[29,136949,136951],{"className":127516,"code":136950,"language":127518,"meta":35,"style":35},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[37,136952,136953,136959,136969,136973,136978,136982,136988,137002],{"__ignoreMap":35},[51,136954,136955,136957],{"class":53,"line":54},[51,136956,131364],{"class":68},[51,136958,16534],{"class":72},[51,136960,136961,136963,136965,136967],{"class":53,"line":61},[51,136962,131996],{"class":175},[51,136964,52401],{"class":72},[51,136966,24699],{"class":175},[51,136968,179],{"class":72},[51,136970,136971],{"class":53,"line":93},[51,136972,132],{"class":72},[51,136974,136975],{"class":53,"line":99},[51,136976,136977],{"class":72},"```Css\n",[51,136979,136980],{"class":53,"line":120},[51,136981,131359],{"class":57},[51,136983,136984,136986],{"class":53,"line":129},[51,136985,131364],{"class":68},[51,136987,16534],{"class":72},[51,136989,136990,136992,136994,136996,136998,137000],{"class":53,"line":206},[51,136991,71434],{"class":175},[51,136993,52401],{"class":72},[51,136995,176],{"class":175},[51,136997,52520],{"class":175},[51,136999,131379],{"class":72},[51,137001,131382],{"class":57},[51,137003,137004],{"class":53,"line":212},[51,137005,132],{"class":72},[40,137007,137008],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[29,137010,137013],{"className":137011,"code":137012,"language":34},[32],"\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",[37,137014,137012],{"__ignoreMap":35},[2564,137016],{"style":127372,"src":137017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[40,137019,137020],{},"最终展示结果：",[29,137022,137023],{"className":127516,"code":131352,"language":127518,"meta":35,"style":35},[37,137024,137025,137029,137035,137049],{"__ignoreMap":35},[51,137026,137027],{"class":53,"line":54},[51,137028,131359],{"class":57},[51,137030,137031,137033],{"class":53,"line":61},[51,137032,131364],{"class":68},[51,137034,16534],{"class":72},[51,137036,137037,137039,137041,137043,137045,137047],{"class":53,"line":93},[51,137038,71434],{"class":175},[51,137040,52401],{"class":72},[51,137042,176],{"class":175},[51,137044,52520],{"class":175},[51,137046,131379],{"class":72},[51,137048,131382],{"class":57},[51,137050,137051],{"class":53,"line":99},[51,137052,132],{"class":72},[2564,137054],{"style":127372,"src":137055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137057,137059],{"id":137058},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[1233,137061,137063],{"id":137062},"_1341-原理","13.4.1 原理",[2564,137065],{"style":127372,"src":137066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[29,137068,137069],{"className":127516,"code":131352,"language":127518,"meta":35,"style":35},[37,137070,137071,137075,137081,137095],{"__ignoreMap":35},[51,137072,137073],{"class":53,"line":54},[51,137074,131359],{"class":57},[51,137076,137077,137079],{"class":53,"line":61},[51,137078,131364],{"class":68},[51,137080,16534],{"class":72},[51,137082,137083,137085,137087,137089,137091,137093],{"class":53,"line":93},[51,137084,71434],{"class":175},[51,137086,52401],{"class":72},[51,137088,176],{"class":175},[51,137090,52520],{"class":175},[51,137092,131379],{"class":72},[51,137094,131382],{"class":57},[51,137096,137097],{"class":53,"line":99},[51,137098,132],{"class":72},[1233,137100,137102],{"id":137101},"_1342-实例","13.4.2 实例",[2564,137104],{"style":127372,"src":137105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[29,137107,137108],{"className":127516,"code":131982,"language":127518,"meta":35,"style":35},[37,137109,137110,137116,137126,137130,137136,137146],{"__ignoreMap":35},[51,137111,137112,137114],{"class":53,"line":54},[51,137113,131989],{"class":68},[51,137115,16534],{"class":72},[51,137117,137118,137120,137122,137124],{"class":53,"line":61},[51,137119,131996],{"class":175},[51,137121,52401],{"class":72},[51,137123,24699],{"class":175},[51,137125,179],{"class":72},[51,137127,137128],{"class":53,"line":93},[51,137129,132],{"class":72},[51,137131,137132,137134],{"class":53,"line":99},[51,137133,132011],{"class":68},[51,137135,16534],{"class":72},[51,137137,137138,137140,137142,137144],{"class":53,"line":120},[51,137139,131996],{"class":175},[51,137141,52401],{"class":72},[51,137143,73486],{"class":175},[51,137145,179],{"class":72},[51,137147,137148],{"class":53,"line":129},[51,137149,132],{"class":72},[14,137151,137153],{"id":137152},"_135-css的初始化","13.5 css的初始化",[40,137155,137156],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[40,137158,137159],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[40,137161,137162],{},"每个网页都必须首先进行 CSS初始化。",[40,137164,137165],{},"这里我们以 京东CSS初始化代码为例。",[40,137167,137168],{},"在网页右键查看网页源代码",[40,137170,137171],{},"找到css的link引入语句",[40,137173,137174],{},"然后ctrl+f 输入body",[40,137176,78190],{},[2564,137178],{"style":127372,"src":137179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[40,137181,78213],{},[2564,137183],{"style":127372,"src":137184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[40,137186,137187],{},"③打开了网页上传压缩的代码",[2564,137189],{"style":127372,"src":137190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[40,137192,137193],{},"④从body前可以查看这个网页的初始化代码",[40,137195,137196],{},[840,137197,137198],{},"Unicode编码字体：",[40,137200,137201],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[40,137203,84171],{},[40,137205,137206],{},"黑体 \\9ED1\\4F53",[40,137208,137209],{},"宋体 \\5B8B\\4F53",[40,137211,137212],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1179,137214,137215],{},"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":35,"searchDepth":61,"depth":61,"links":137217},[137218,137219,137226,137230,137234],{"id":136015,"depth":61,"text":136016},{"id":136137,"depth":61,"text":136138,"children":137220},[137221,137222,137223,137224,137225],{"id":136141,"depth":93,"text":136142},{"id":136294,"depth":93,"text":136295},{"id":136413,"depth":93,"text":136414},{"id":136555,"depth":93,"text":136556},{"id":136613,"depth":93,"text":136614},{"id":136674,"depth":61,"text":136675,"children":137227},[137228,137229],{"id":136697,"depth":93,"text":136698},{"id":136929,"depth":93,"text":136930},{"id":137058,"depth":61,"text":137059,"children":137231},[137232,137233],{"id":137062,"depth":93,"text":137063},{"id":137101,"depth":93,"text":137102},{"id":137152,"depth":61,"text":137153},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136007,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137241,"title":137242,"body":137243,"description":24339,"extension":1190,"meta":138929,"navigation":1192,"path":138930,"seo":138931,"stem":138932,"__hash__":138933},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137244,"toc":138918},[137245,137248,137252,137256,137259,137266,137269,137272,137310,137313,137315,137329,137333,137342,137346,137351,137354,137357,137360,137395,137400,137403,137433,137436,137441,137444,137447,137477,137480,137534,137537,137541,137546,137558,137561,137565,137595,137598,137603,137606,137636,137639,137643,137660,137664,137668,137671,137704,137707,137711,137714,137717,137720,137723,137726,137837,137840,137843,137846,137948,137951,137955,137959,137963,137966,138006,138009,138011,138027,138031,138034,138039,138120,138123,138126,138252,138257,138260,138268,138271,138276,138361,138364,138368,138371,138374,138378,138398,138403,138487,138490,138495,138498,138501,138579,138582,138585,138588,138591,138594,138599,138602,138605,138677,138680,138685,138688,138785,138788,138794,138797,138800,138803,138806,138809,138812,138815,138818,138822,138827,138830,138863,138868,138871,138912,138915],[10,137246,137242],{"id":137247},"_14-html5与css3新特性",[14,137249,137251],{"id":137250},"_141-html5的新特性","14.1 HTML5的新特性",[1233,137253,137255],{"id":137254},"_1411-基本标签","14.1.1 基本标签",[40,137257,137258],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[40,137260,137261,137262,137265],{},"这些新特性都有兼容性问题，基本是 ",[840,137263,137264],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[40,137267,137268],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[40,137270,137271],{},"现在使用的是新特性：",[1000,137273,137274,137280,137286,137292,137298,137304],{},[22,137275,137276,137279],{},[37,137277,137278],{},"\u003Cheader>"," 头部标签",[22,137281,137282,137285],{},[37,137283,137284],{},"\u003Cnav>"," 导航标签",[22,137287,137288,137291],{},[37,137289,137290],{},"\u003Carticle>"," 内容标签",[22,137293,137294,137297],{},[37,137295,137296],{},"\u003Csection>"," 定义文档某个区域",[22,137299,137300,137303],{},[37,137301,137302],{},"\u003Caside>"," 侧边栏标签",[22,137305,137306,137309],{},[37,137307,137308],{},"\u003Cfooter>"," 尾部标签",[2564,137311],{"style":127372,"src":137312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[40,137314,1290],{},[1000,137316,137317,137320,137323,137326],{},[22,137318,137319],{},"这种语义化标准主要是针对搜索引擎的",[22,137321,137322],{},"这些标签页面中可以经常使用",[22,137324,137325],{},"在IE9中，需要把这些元素转换为块级元素",[22,137327,137328],{},"移动端更喜欢使用这些标签",[1233,137330,137332],{"id":137331},"_1412-多媒体标签","14.1.2 多媒体标签",[40,137334,137335,137336,137338,137339,137341],{},"音频 ",[840,137337,29138],{}," 和视频 ",[840,137340,29147],{}," 两个标签",[22960,137343,137345],{"id":137344},"_14121-视频标签-video","14.1.2.1 视频标签- video",[19,137347,137348],{},[22,137349,137350],{},"支持格式：",[2564,137352],{"style":127372,"src":137353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[40,137355,137356],{},"尽量使用MP4，兼容性好",[40,137358,137359],{},"用MP4就可以",[29,137361,137363],{"className":128263,"code":137362,"language":128265,"meta":35,"style":35},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[37,137364,137365],{"__ignoreMap":35},[51,137366,137367,137369,137371,137373,137375,137378,137380,137383,137386,137389,137391,137393],{"class":53,"line":54},[51,137368,2154],{"class":72},[51,137370,29147],{"class":52264},[51,137372,56203],{"class":68},[51,137374,108],{"class":72},[51,137376,137377],{"class":282},"\"movie.mp4\"",[51,137379,93387],{"class":68},[51,137381,137382],{"class":68}," autoplay",[51,137384,137385],{"class":68}," muted",[51,137387,137388],{"class":68}," loop",[51,137390,56278],{"class":72},[51,137392,29147],{"class":52264},[51,137394,52271],{"class":72},[19,137396,137397],{"start":61},[22,137398,137399],{},"兼容写法",[40,137401,137402],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[29,137404,137405],{"className":128263,"code":137362,"language":128265,"meta":35,"style":35},[37,137406,137407],{"__ignoreMap":35},[51,137408,137409,137411,137413,137415,137417,137419,137421,137423,137425,137427,137429,137431],{"class":53,"line":54},[51,137410,2154],{"class":72},[51,137412,29147],{"class":52264},[51,137414,56203],{"class":68},[51,137416,108],{"class":72},[51,137418,137377],{"class":282},[51,137420,93387],{"class":68},[51,137422,137382],{"class":68},[51,137424,137385],{"class":68},[51,137426,137388],{"class":68},[51,137428,56278],{"class":72},[51,137430,29147],{"class":52264},[51,137432,52271],{"class":72},[40,137434,137435],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[19,137437,137438],{"start":93},[22,137439,137440],{},"video常用属性",[2564,137442],{"style":127372,"src":137443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[40,137445,137446],{},"poster属性后面是跟的等待加载图片的地址",[29,137448,137449],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,137450,137451],{"__ignoreMap":35},[51,137452,137453,137455,137457,137459,137461,137463,137465,137467,137469,137471,137473,137475],{"class":53,"line":54},[51,137454,2154],{"class":72},[51,137456,2564],{"class":52264},[51,137458,56203],{"class":68},[51,137460,108],{"class":72},[51,137462,135033],{"class":282},[51,137464,56211],{"class":68},[51,137466,108],{"class":72},[51,137468,135040],{"class":282},[51,137470,135043],{"class":68},[51,137472,108],{"class":72},[51,137474,135048],{"class":282},[51,137476,52271],{"class":72},[40,137478,137479],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[29,137481,137483],{"className":127516,"code":137482,"language":127518,"meta":35,"style":35},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[37,137484,137485,137490,137496,137520,137525,137530],{"__ignoreMap":35},[51,137486,137487],{"class":53,"line":54},[51,137488,137489],{"class":57},"\u002F* 2D 位移 *\u002F\n",[51,137491,137492,137494],{"class":53,"line":61},[51,137493,52575],{"class":52264},[51,137495,16534],{"class":72},[51,137497,137498,137501,137503,137506,137508,137510,137512,137514,137516,137518],{"class":53,"line":93},[51,137499,137500],{"class":175},"  transform",[51,137502,52401],{"class":72},[51,137504,137505],{"class":175},"translate",[51,137507,73],{"class":72},[51,137509,612],{"class":175},[51,137511,52456],{"class":64},[51,137513,13397],{"class":72},[51,137515,1902],{"class":175},[51,137517,52456],{"class":64},[51,137519,615],{"class":72},[51,137521,137522],{"class":53,"line":99},[51,137523,137524],{"class":57},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[51,137526,137527],{"class":53,"line":120},[51,137528,137529],{"class":57},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[51,137531,137532],{"class":53,"line":129},[51,137533,132],{"class":72},[40,137535,137536],{},"muted:自动静音属性",[22960,137538,137540],{"id":137539},"_14122-音频标签audio","14.1.2.2 音频标签audio",[19,137542,137543],{},[22,137544,137545],{},"基本使用",[40,137547,137548,137549,137554,137555],{},"当前 ",[840,137550,137551],{},[37,137552,137553],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[840,137556,137557],{},"mp3格式",[2564,137559],{"style":127372,"src":137560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[19,137562,137563],{"start":61},[22,137564,137399],{},[29,137566,137567],{"className":128263,"code":137362,"language":128265,"meta":35,"style":35},[37,137568,137569],{"__ignoreMap":35},[51,137570,137571,137573,137575,137577,137579,137581,137583,137585,137587,137589,137591,137593],{"class":53,"line":54},[51,137572,2154],{"class":72},[51,137574,29147],{"class":52264},[51,137576,56203],{"class":68},[51,137578,108],{"class":72},[51,137580,137377],{"class":282},[51,137582,93387],{"class":68},[51,137584,137382],{"class":68},[51,137586,137385],{"class":68},[51,137588,137388],{"class":68},[51,137590,56278],{"class":72},[51,137592,29147],{"class":52264},[51,137594,52271],{"class":72},[40,137596,137597],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[19,137599,137600],{"start":93},[22,137601,137602],{},"常用属性",[2564,137604],{"style":127372,"src":137605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[29,137607,137608],{"className":128263,"code":137362,"language":128265,"meta":35,"style":35},[37,137609,137610],{"__ignoreMap":35},[51,137611,137612,137614,137616,137618,137620,137622,137624,137626,137628,137630,137632,137634],{"class":53,"line":54},[51,137613,2154],{"class":72},[51,137615,29147],{"class":52264},[51,137617,56203],{"class":68},[51,137619,108],{"class":72},[51,137621,137377],{"class":282},[51,137623,93387],{"class":68},[51,137625,137382],{"class":68},[51,137627,137385],{"class":68},[51,137629,137388],{"class":68},[51,137631,56278],{"class":72},[51,137633,29147],{"class":52264},[51,137635,52271],{"class":72},[40,137637,137638],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22960,137640,137642],{"id":137641},"_14123-总结","14.1.2.3 总结",[1000,137644,137645,137648,137651,137654,137657],{},[22,137646,137647],{},"音频标签和视频标签使用方式基本一致",[22,137649,137650],{},"浏览器支持情况不同",[22,137652,137653],{},"谷歌浏览器把音频和视频自动播放禁止了",[22,137655,137656],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[22,137658,137659],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[1233,137661,137663],{"id":137662},"_1413-表单元素","14.1.3 表单元素",[22960,137665,137667],{"id":137666},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[2564,137669],{"style":127372,"src":137670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[29,137672,137674],{"className":128263,"code":137673,"language":128265,"meta":35,"style":35},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[37,137675,137676],{"__ignoreMap":35},[51,137677,137678,137680,137682,137684,137686,137688,137690,137692,137695,137697,137699,137702],{"class":53,"line":54},[51,137679,2154],{"class":72},[51,137681,54785],{"class":52264},[51,137683,54788],{"class":68},[51,137685,108],{"class":72},[51,137687,63663],{"class":282},[51,137689,15882],{"class":68},[51,137691,108],{"class":72},[51,137693,137694],{"class":282},"\"username\"",[51,137696,61984],{"class":68},[51,137698,108],{"class":72},[51,137700,137701],{"class":282},"\"请输入用户名\"",[51,137703,52271],{"class":72},[2564,137705],{"style":127372,"src":137706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22960,137708,137710],{"id":137709},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[2564,137712],{"style":127372,"src":137713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[40,137715,137716],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[40,137718,137719],{},"快捷操作：",[2564,137721],{"style":127372,"src":137722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[40,137724,137725],{},"例子1：",[29,137727,137729],{"className":128263,"code":137728,"language":128265,"meta":35,"style":35},"\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",[37,137730,137731,137754,137781,137810,137829],{"__ignoreMap":35},[51,137732,137733,137735,137737,137739,137741,137744,137747,137749,137752],{"class":53,"line":54},[51,137734,2154],{"class":72},[51,137736,67589],{"class":52264},[51,137738,67592],{"class":68},[51,137740,108],{"class":72},[51,137742,137743],{"class":282},"\"\u002Fsubmit\"",[51,137745,137746],{"class":68}," method",[51,137748,108],{"class":72},[51,137750,137751],{"class":282},"\"post\"",[51,137753,52271],{"class":72},[51,137755,137756,137758,137760,137762,137764,137766,137768,137770,137772,137774,137776,137779],{"class":53,"line":61},[51,137757,53108],{"class":72},[51,137759,54785],{"class":52264},[51,137761,54788],{"class":68},[51,137763,108],{"class":72},[51,137765,63663],{"class":282},[51,137767,15882],{"class":68},[51,137769,108],{"class":72},[51,137771,137694],{"class":282},[51,137773,61984],{"class":68},[51,137775,108],{"class":72},[51,137777,137778],{"class":282},"\"用户名\"",[51,137780,52271],{"class":72},[51,137782,137783,137785,137787,137789,137791,137794,137796,137798,137801,137803,137805,137808],{"class":53,"line":93},[51,137784,53108],{"class":72},[51,137786,54785],{"class":52264},[51,137788,54788],{"class":68},[51,137790,108],{"class":72},[51,137792,137793],{"class":282},"\"password\"",[51,137795,15882],{"class":68},[51,137797,108],{"class":72},[51,137799,137800],{"class":282},"\"pwd\"",[51,137802,61984],{"class":68},[51,137804,108],{"class":72},[51,137806,137807],{"class":282},"\"密码\"",[51,137809,52271],{"class":72},[51,137811,137812,137814,137816,137818,137820,137822,137825,137827],{"class":53,"line":99},[51,137813,53108],{"class":72},[51,137815,54851],{"class":52264},[51,137817,54788],{"class":68},[51,137819,108],{"class":72},[51,137821,67612],{"class":282},[51,137823,137824],{"class":72},">提交\u003C\u002F",[51,137826,54851],{"class":52264},[51,137828,52271],{"class":72},[51,137830,137831,137833,137835],{"class":53,"line":120},[51,137832,52749],{"class":72},[51,137834,67589],{"class":52264},[51,137836,52271],{"class":72},[2564,137838],{"style":127372,"src":137839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[40,137841,137842],{},"value是表单域的内容",[40,137844,137845],{},"例子2：",[29,137847,137848],{"className":128263,"code":137728,"language":128265,"meta":35,"style":35},[37,137849,137850,137870,137896,137922,137940],{"__ignoreMap":35},[51,137851,137852,137854,137856,137858,137860,137862,137864,137866,137868],{"class":53,"line":54},[51,137853,2154],{"class":72},[51,137855,67589],{"class":52264},[51,137857,67592],{"class":68},[51,137859,108],{"class":72},[51,137861,137743],{"class":282},[51,137863,137746],{"class":68},[51,137865,108],{"class":72},[51,137867,137751],{"class":282},[51,137869,52271],{"class":72},[51,137871,137872,137874,137876,137878,137880,137882,137884,137886,137888,137890,137892,137894],{"class":53,"line":61},[51,137873,53108],{"class":72},[51,137875,54785],{"class":52264},[51,137877,54788],{"class":68},[51,137879,108],{"class":72},[51,137881,63663],{"class":282},[51,137883,15882],{"class":68},[51,137885,108],{"class":72},[51,137887,137694],{"class":282},[51,137889,61984],{"class":68},[51,137891,108],{"class":72},[51,137893,137778],{"class":282},[51,137895,52271],{"class":72},[51,137897,137898,137900,137902,137904,137906,137908,137910,137912,137914,137916,137918,137920],{"class":53,"line":93},[51,137899,53108],{"class":72},[51,137901,54785],{"class":52264},[51,137903,54788],{"class":68},[51,137905,108],{"class":72},[51,137907,137793],{"class":282},[51,137909,15882],{"class":68},[51,137911,108],{"class":72},[51,137913,137800],{"class":282},[51,137915,61984],{"class":68},[51,137917,108],{"class":72},[51,137919,137807],{"class":282},[51,137921,52271],{"class":72},[51,137923,137924,137926,137928,137930,137932,137934,137936,137938],{"class":53,"line":99},[51,137925,53108],{"class":72},[51,137927,54851],{"class":52264},[51,137929,54788],{"class":68},[51,137931,108],{"class":72},[51,137933,67612],{"class":282},[51,137935,137824],{"class":72},[51,137937,54851],{"class":52264},[51,137939,52271],{"class":72},[51,137941,137942,137944,137946],{"class":53,"line":120},[51,137943,52749],{"class":72},[51,137945,67589],{"class":52264},[51,137947,52271],{"class":72},[2564,137949],{"style":127372,"src":137950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137952,137954],{"id":137953},"_142-css新特性","14.2 CSS新特性",[1233,137956,137958],{"id":137957},"_1421-新增选择器","14.2.1 新增选择器",[22960,137960,137962],{"id":137961},"_14211-属性选择器","14.2.1.1 属性选择器",[2564,137964],{"style":127372,"src":137965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[29,137967,137969],{"className":127516,"code":137968,"language":127518,"meta":35,"style":35},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[37,137970,137971,137986,138002],{"__ignoreMap":35},[51,137972,137973,137975,137977,137979,137981,137983],{"class":53,"line":54},[51,137974,54785],{"class":52264},[51,137976,2134],{"class":72},[51,137978,104071],{"class":68},[51,137980,108],{"class":64},[51,137982,63663],{"class":282},[51,137984,137985],{"class":72},"] {\n",[51,137987,137988,137990,137992,137994,137996,137998,138000],{"class":53,"line":61},[51,137989,71860],{"class":175},[51,137991,52401],{"class":72},[51,137993,791],{"class":175},[51,137995,52456],{"class":64},[51,137997,52485],{"class":175},[51,137999,131096],{"class":175},[51,138001,179],{"class":72},[51,138003,138004],{"class":53,"line":93},[51,138005,132],{"class":72},[2564,138007],{"style":127372,"src":138008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[40,138010,1290],{},[1000,138012,138013,138016,138019,138022],{},[22,138014,138015],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[22,138017,138018],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[22,138020,138021],{},"属性选择器也可以选择出来自定义的属性",[22,138023,138024,138026],{},[840,138025,9987],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22960,138028,138030],{"id":138029},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[2564,138032],{"style":127372,"src":138033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[19,138035,138036],{},[22,138037,138038],{},"fist-child",[29,138040,138042],{"className":127516,"code":138041,"language":127518,"meta":35,"style":35},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[37,138043,138044,138049,138064,138084,138102],{"__ignoreMap":35},[51,138045,138046],{"class":53,"line":54},[51,138047,138048],{"class":57},"\u002F* 属性选择器 *\u002F\n",[51,138050,138051,138053,138055,138057,138059,138061],{"class":53,"line":61},[51,138052,54785],{"class":52264},[51,138054,2134],{"class":72},[51,138056,104071],{"class":68},[51,138058,108],{"class":64},[51,138060,63663],{"class":282},[51,138062,138063],{"class":72},"] { }\n",[51,138065,138066,138068,138070,138072,138075,138078,138081],{"class":53,"line":93},[51,138067,54785],{"class":52264},[51,138069,2134],{"class":72},[51,138071,15656],{"class":68},[51,138073,138074],{"class":64},"^=",[51,138076,138077],{"class":282},"\"icon\"",[51,138079,138080],{"class":72},"] { }  ",[51,138082,138083],{"class":57},"\u002F* 以 icon 开头 *\u002F\n",[51,138085,138086,138088,138090,138092,138095,138097,138099],{"class":53,"line":99},[51,138087,54785],{"class":52264},[51,138089,2134],{"class":72},[51,138091,15656],{"class":68},[51,138093,138094],{"class":64},"$=",[51,138096,138077],{"class":282},[51,138098,138080],{"class":72},[51,138100,138101],{"class":57},"\u002F* 以 icon 结尾 *\u002F\n",[51,138103,138104,138106,138108,138110,138113,138115,138117],{"class":53,"line":120},[51,138105,54785],{"class":52264},[51,138107,2134],{"class":72},[51,138109,15656],{"class":68},[51,138111,138112],{"class":64},"*=",[51,138114,138077],{"class":282},[51,138116,138080],{"class":72},[51,138118,138119],{"class":57},"\u002F* 包含 icon *\u002F\n",[40,138121,138122],{},"ul的第一个儿子文本为红色",[40,138124,138125],{},"一定要在冒号前加空格，不然就是选中所有的了",[29,138127,138129],{"className":127516,"code":138128,"language":127518,"meta":35,"style":35},".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",[37,138130,138131,138137,138147,138151,138155,138160,138173,138186,138202,138219,138236],{"__ignoreMap":35},[51,138132,138133,138135],{"class":53,"line":54},[51,138134,127807],{"class":68},[51,138136,16534],{"class":72},[51,138138,138139,138141,138143,138145],{"class":53,"line":61},[51,138140,71869],{"class":175},[51,138142,52401],{"class":72},[51,138144,58385],{"class":175},[51,138146,179],{"class":72},[51,138148,138149],{"class":53,"line":93},[51,138150,132],{"class":72},[51,138152,138153],{"class":53,"line":99},[51,138154,136977],{"class":72},[51,138156,138157],{"class":53,"line":120},[51,138158,138159],{"class":57},"\u002F* 结构伪类选择器 *\u002F\n",[51,138161,138162,138164,138167,138170],{"class":53,"line":129},[51,138163,22],{"class":52264},[51,138165,138166],{"class":68},":first-child",[51,138168,138169],{"class":72}," { }           ",[51,138171,138172],{"class":57},"\u002F* 第一个 *\u002F\n",[51,138174,138175,138177,138180,138183],{"class":53,"line":206},[51,138176,22],{"class":52264},[51,138178,138179],{"class":68},":last-child",[51,138181,138182],{"class":72}," { }            ",[51,138184,138185],{"class":57},"\u002F* 最后一个 *\u002F\n",[51,138187,138188,138190,138192,138194,138196,138199],{"class":53,"line":212},[51,138189,22],{"class":52264},[51,138191,130430],{"class":68},[51,138193,73],{"class":72},[51,138195,1334],{"class":175},[51,138197,138198],{"class":72},") { }          ",[51,138200,138201],{"class":57},"\u002F* 第2个 *\u002F\n",[51,138203,138204,138206,138208,138210,138213,138216],{"class":53,"line":227},[51,138205,22],{"class":52264},[51,138207,130430],{"class":68},[51,138209,73],{"class":72},[51,138211,138212],{"class":175},"2n",[51,138214,138215],{"class":72},") { }         ",[51,138217,138218],{"class":57},"\u002F* 偶数 *\u002F\n",[51,138220,138221,138223,138225,138227,138230,138233],{"class":53,"line":370},[51,138222,22],{"class":52264},[51,138224,130430],{"class":68},[51,138226,73],{"class":72},[51,138228,138229],{"class":175},"2n+1",[51,138231,138232],{"class":72},") { }       ",[51,138234,138235],{"class":57},"\u002F* 奇数 *\u002F\n",[51,138237,138238,138240,138242,138244,138247,138249],{"class":53,"line":387},[51,138239,22],{"class":52264},[51,138241,130430],{"class":68},[51,138243,73],{"class":72},[51,138245,138246],{"class":175},"-n+3",[51,138248,138232],{"class":72},[51,138250,138251],{"class":57},"\u002F* 前3个 *\u002F\n",[52575,138253,138256],{"className":138254},[138255],"example","\n  示例内容\n",[40,138258,138259],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1000,138261,138262],{},[22,138263,138264,138267],{},[37,138265,138266],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[40,138269,138270],{},"也就是说它选择的是熊大",[19,138272,138273],{"start":129},[22,138274,138275],{},"权重",[29,138277,138279],{"className":127516,"code":138278,"language":127518,"meta":35,"style":35},"\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",[37,138280,138281,138285,138295,138305,138319,138333,138347],{"__ignoreMap":35},[51,138282,138283],{"class":53,"line":54},[51,138284,138159],{"class":57},[51,138286,138287,138289,138291,138293],{"class":53,"line":61},[51,138288,22],{"class":52264},[51,138290,138166],{"class":68},[51,138292,138169],{"class":72},[51,138294,138172],{"class":57},[51,138296,138297,138299,138301,138303],{"class":53,"line":93},[51,138298,22],{"class":52264},[51,138300,138179],{"class":68},[51,138302,138182],{"class":72},[51,138304,138185],{"class":57},[51,138306,138307,138309,138311,138313,138315,138317],{"class":53,"line":99},[51,138308,22],{"class":52264},[51,138310,130430],{"class":68},[51,138312,73],{"class":72},[51,138314,1334],{"class":175},[51,138316,138198],{"class":72},[51,138318,138201],{"class":57},[51,138320,138321,138323,138325,138327,138329,138331],{"class":53,"line":120},[51,138322,22],{"class":52264},[51,138324,130430],{"class":68},[51,138326,73],{"class":72},[51,138328,138212],{"class":175},[51,138330,138215],{"class":72},[51,138332,138218],{"class":57},[51,138334,138335,138337,138339,138341,138343,138345],{"class":53,"line":129},[51,138336,22],{"class":52264},[51,138338,130430],{"class":68},[51,138340,73],{"class":72},[51,138342,138229],{"class":175},[51,138344,138232],{"class":72},[51,138346,138235],{"class":57},[51,138348,138349,138351,138353,138355,138357,138359],{"class":53,"line":206},[51,138350,22],{"class":52264},[51,138352,130430],{"class":68},[51,138354,73],{"class":72},[51,138356,138246],{"class":175},[51,138358,138232],{"class":72},[51,138360,138251],{"class":57},[40,138362,138363],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22960,138365,138367],{"id":138366},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[40,138369,138370],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[2564,138372],{"style":127372,"src":138373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[19,138375,138376],{},[22,138377,1290],{},[1000,138379,138380,138383,138386,138389,138392,138395],{},[22,138381,138382],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[22,138384,138385],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[22,138387,138388],{},"语法： element::before {}",[22,138390,138391],{},"before 和 after 必须有 content 属性",[22,138393,138394],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[22,138396,138397],{},"伪元素选择器和标签选择器一样，权重为 1",[19,138399,138400],{"start":61},[22,138401,138402],{},"实例",[29,138404,138405],{"className":127516,"code":138278,"language":127518,"meta":35,"style":35},[37,138406,138407,138411,138421,138431,138445,138459,138473],{"__ignoreMap":35},[51,138408,138409],{"class":53,"line":54},[51,138410,138159],{"class":57},[51,138412,138413,138415,138417,138419],{"class":53,"line":61},[51,138414,22],{"class":52264},[51,138416,138166],{"class":68},[51,138418,138169],{"class":72},[51,138420,138172],{"class":57},[51,138422,138423,138425,138427,138429],{"class":53,"line":93},[51,138424,22],{"class":52264},[51,138426,138179],{"class":68},[51,138428,138182],{"class":72},[51,138430,138185],{"class":57},[51,138432,138433,138435,138437,138439,138441,138443],{"class":53,"line":99},[51,138434,22],{"class":52264},[51,138436,130430],{"class":68},[51,138438,73],{"class":72},[51,138440,1334],{"class":175},[51,138442,138198],{"class":72},[51,138444,138201],{"class":57},[51,138446,138447,138449,138451,138453,138455,138457],{"class":53,"line":120},[51,138448,22],{"class":52264},[51,138450,130430],{"class":68},[51,138452,73],{"class":72},[51,138454,138212],{"class":175},[51,138456,138215],{"class":72},[51,138458,138218],{"class":57},[51,138460,138461,138463,138465,138467,138469,138471],{"class":53,"line":129},[51,138462,22],{"class":52264},[51,138464,130430],{"class":68},[51,138466,73],{"class":72},[51,138468,138229],{"class":175},[51,138470,138232],{"class":72},[51,138472,138235],{"class":57},[51,138474,138475,138477,138479,138481,138483,138485],{"class":53,"line":206},[51,138476,22],{"class":52264},[51,138478,130430],{"class":68},[51,138480,73],{"class":72},[51,138482,138246],{"class":175},[51,138484,138232],{"class":72},[51,138486,138251],{"class":57},[2564,138488],{"style":127372,"src":138489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[19,138491,138492],{"start":93},[22,138493,138494],{},"使用场景1",[2564,138496],{"style":127372,"src":138497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[40,138499,138500],{},"不需要再加盒子来整红色那部分了",[29,138502,138504],{"className":127516,"code":138503,"language":127518,"meta":35,"style":35},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[37,138505,138506,138511,138520,138531,138541,138545,138554,138565,138575],{"__ignoreMap":35},[51,138507,138508],{"class":53,"line":54},[51,138509,138510],{"class":57},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[51,138512,138513,138515,138518],{"class":53,"line":61},[51,138514,52575],{"class":52264},[51,138516,138517],{"class":68},"::before",[51,138519,16534],{"class":72},[51,138521,138522,138525,138527,138529],{"class":53,"line":93},[51,138523,138524],{"class":175},"  content",[51,138526,52401],{"class":72},[51,138528,8614],{"class":282},[51,138530,179],{"class":72},[51,138532,138533,138535,138537,138539],{"class":53,"line":99},[51,138534,129132],{"class":175},[51,138536,52401],{"class":72},[51,138538,61833],{"class":175},[51,138540,179],{"class":72},[51,138542,138543],{"class":53,"line":120},[51,138544,132],{"class":72},[51,138546,138547,138549,138552],{"class":53,"line":129},[51,138548,52575],{"class":52264},[51,138550,138551],{"class":68},"::after",[51,138553,16534],{"class":72},[51,138555,138556,138558,138560,138563],{"class":53,"line":206},[51,138557,138524],{"class":175},[51,138559,52401],{"class":72},[51,138561,138562],{"class":282},"\"→\"",[51,138564,179],{"class":72},[51,138566,138567,138569,138571,138573],{"class":53,"line":212},[51,138568,71869],{"class":175},[51,138570,52401],{"class":72},[51,138572,63034],{"class":175},[51,138574,179],{"class":72},[51,138576,138577],{"class":53,"line":227},[51,138578,132],{"class":72},[2564,138580],{"style":127372,"src":138581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[40,138583,138584],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[2564,138586],{"style":127372,"src":138587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[40,138589,138590],{},"但是在引用时需要先转义一下",[40,138592,138593],{},"content='\\e930'",[19,138595,138596],{"start":99},[22,138597,138598],{},"使用场景2",[40,138600,138601],{},"仿土豆效果",[40,138603,138604],{},"通过使用伪元素选择器可以减少body中盒子的数量",[29,138606,138607],{"className":127516,"code":138503,"language":127518,"meta":35,"style":35},[37,138608,138609,138613,138621,138631,138641,138645,138653,138663,138673],{"__ignoreMap":35},[51,138610,138611],{"class":53,"line":54},[51,138612,138510],{"class":57},[51,138614,138615,138617,138619],{"class":53,"line":61},[51,138616,52575],{"class":52264},[51,138618,138517],{"class":68},[51,138620,16534],{"class":72},[51,138622,138623,138625,138627,138629],{"class":53,"line":93},[51,138624,138524],{"class":175},[51,138626,52401],{"class":72},[51,138628,8614],{"class":282},[51,138630,179],{"class":72},[51,138632,138633,138635,138637,138639],{"class":53,"line":99},[51,138634,129132],{"class":175},[51,138636,52401],{"class":72},[51,138638,61833],{"class":175},[51,138640,179],{"class":72},[51,138642,138643],{"class":53,"line":120},[51,138644,132],{"class":72},[51,138646,138647,138649,138651],{"class":53,"line":129},[51,138648,52575],{"class":52264},[51,138650,138551],{"class":68},[51,138652,16534],{"class":72},[51,138654,138655,138657,138659,138661],{"class":53,"line":206},[51,138656,138524],{"class":175},[51,138658,52401],{"class":72},[51,138660,138562],{"class":282},[51,138662,179],{"class":72},[51,138664,138665,138667,138669,138671],{"class":53,"line":212},[51,138666,71869],{"class":175},[51,138668,52401],{"class":72},[51,138670,63034],{"class":175},[51,138672,179],{"class":72},[51,138674,138675],{"class":53,"line":227},[51,138676,132],{"class":72},[2564,138678],{"style":127372,"src":138679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[19,138681,138682],{"start":120},[22,138683,138684],{},"使用场景3",[40,138686,138687],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[29,138689,138691],{"className":127516,"code":138690,"language":127518,"meta":35,"style":35},".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",[37,138692,138693,138699,138709,138713,138717,138721,138729,138739,138749,138753,138761,138771,138781],{"__ignoreMap":35},[51,138694,138695,138697],{"class":53,"line":54},[51,138696,131364],{"class":68},[51,138698,16534],{"class":72},[51,138700,138701,138703,138705,138707],{"class":53,"line":61},[51,138702,131996],{"class":175},[51,138704,52401],{"class":72},[51,138706,24699],{"class":175},[51,138708,179],{"class":72},[51,138710,138711],{"class":53,"line":93},[51,138712,132],{"class":72},[51,138714,138715],{"class":53,"line":99},[51,138716,136977],{"class":72},[51,138718,138719],{"class":53,"line":120},[51,138720,138510],{"class":57},[51,138722,138723,138725,138727],{"class":53,"line":129},[51,138724,52575],{"class":52264},[51,138726,138517],{"class":68},[51,138728,16534],{"class":72},[51,138730,138731,138733,138735,138737],{"class":53,"line":206},[51,138732,138524],{"class":175},[51,138734,52401],{"class":72},[51,138736,8614],{"class":282},[51,138738,179],{"class":72},[51,138740,138741,138743,138745,138747],{"class":53,"line":212},[51,138742,129132],{"class":175},[51,138744,52401],{"class":72},[51,138746,61833],{"class":175},[51,138748,179],{"class":72},[51,138750,138751],{"class":53,"line":227},[51,138752,132],{"class":72},[51,138754,138755,138757,138759],{"class":53,"line":370},[51,138756,52575],{"class":52264},[51,138758,138551],{"class":68},[51,138760,16534],{"class":72},[51,138762,138763,138765,138767,138769],{"class":53,"line":387},[51,138764,138524],{"class":175},[51,138766,52401],{"class":72},[51,138768,138562],{"class":282},[51,138770,179],{"class":72},[51,138772,138773,138775,138777,138779],{"class":53,"line":404},[51,138774,71869],{"class":175},[51,138776,52401],{"class":72},[51,138778,63034],{"class":175},[51,138780,179],{"class":72},[51,138782,138783],{"class":53,"line":415},[51,138784,132],{"class":72},[40,138786,138787],{},"div {\nmargin: 0 auto;\n}",[29,138789,138792],{"className":138790,"code":138791,"language":34},[32],"\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",[37,138793,138791],{"__ignoreMap":35},[40,138795,138796],{},"如果想让多个元素都发生变化",[40,138798,138799],{},"不能如下操作：",[40,138801,138802],{},"transition: width 2s ease 0.5s;",[40,138804,138805],{},"transition: height 2s ease 0.5s;不对！！！",[40,138807,138808],{},"上方会样式冲突，导致不显示任何过渡效果",[40,138810,138811],{},"使用如下：加逗号隔开",[40,138813,138814],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[40,138816,138817],{},"transition all 2s ease;",[1233,138819,138821],{"id":138820},"_1426-过渡练习","14.2.6 过渡练习",[19,138823,138824],{},[22,138825,138826],{},"进度条",[2564,138828],{"style":127372,"src":138829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[29,138831,138833],{"className":127516,"code":138832,"language":127518,"meta":35,"style":35},"div {\n  transition: all 0.3s ease;\n}\n",[37,138834,138835,138841,138859],{"__ignoreMap":35},[51,138836,138837,138839],{"class":53,"line":54},[51,138838,52575],{"class":52264},[51,138840,16534],{"class":72},[51,138842,138843,138846,138848,138850,138853,138855,138857],{"class":53,"line":61},[51,138844,138845],{"class":175},"  transition",[51,138847,52401],{"class":72},[51,138849,29085],{"class":175},[51,138851,138852],{"class":175}," 0.3",[51,138854,1941],{"class":64},[51,138856,79644],{"class":175},[51,138858,179],{"class":72},[51,138860,138861],{"class":53,"line":93},[51,138862,132],{"class":72},[19,138864,138865],{"start":61},[22,138866,138867],{},"小米logo",[40,138869,138870],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[29,138872,138874],{"className":127516,"code":138873,"language":127518,"meta":35,"style":35},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[37,138875,138876,138881,138887,138903,138908],{"__ignoreMap":35},[51,138877,138878],{"class":53,"line":54},[51,138879,138880],{"class":57},"\u002F* CSS3 过渡 *\u002F\n",[51,138882,138883,138885],{"class":53,"line":61},[51,138884,52575],{"class":52264},[51,138886,16534],{"class":72},[51,138888,138889,138891,138893,138895,138897,138899,138901],{"class":53,"line":93},[51,138890,138845],{"class":175},[51,138892,52401],{"class":72},[51,138894,29085],{"class":175},[51,138896,138852],{"class":175},[51,138898,1941],{"class":64},[51,138900,79644],{"class":175},[51,138902,179],{"class":72},[51,138904,138905],{"class":53,"line":99},[51,138906,138907],{"class":57},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[51,138909,138910],{"class":53,"line":120},[51,138911,132],{"class":72},[40,138913,138914],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1179,138916,138917],{},"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":35,"searchDepth":61,"depth":61,"links":138919},[138920,138925],{"id":137250,"depth":61,"text":137251,"children":138921},[138922,138923,138924],{"id":137254,"depth":93,"text":137255},{"id":137331,"depth":93,"text":137332},{"id":137662,"depth":93,"text":137663},{"id":137953,"depth":61,"text":137954,"children":138926},[138927,138928],{"id":137957,"depth":93,"text":137958},{"id":138820,"depth":93,"text":138821},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137242,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138935,"title":138936,"body":138937,"description":24339,"extension":1190,"meta":140681,"navigation":1192,"path":140682,"seo":140683,"stem":140684,"__hash__":140685},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138938,"toc":140662},[138939,138942,138946,138949,138955,138961,138965,138967,138970,138973,138976,138979,138982,138985,138988,138992,138996,138999,139002,139005,139009,139012,139015,139020,139023,139026,139029,139033,139036,139045,139048,139051,139055,139058,139061,139066,139073,139087,139095,139102,139107,139110,139113,139116,139123,139127,139133,139139,139142,139145,139150,139156,139158,139166,139171,139174,139180,139182,139187,139192,139195,139197,139202,139205,139210,139215,139249,139253,139257,139260,139264,139267,139353,139356,139393,139396,139432,139436,139441,139454,139508,139510,139538,139540,139568,139574,139588,139590,139634,139636,139680,139683,139690,139701,139703,139730,139732,139758,139765,139781,139783,139877,139879,139973,139980,139983,139988,139994,140068,140071,140073,140109,140111,140147,140150,140157,140176,140179,140182,140184,140209,140211,140235,140238,140241,140271,140275,140278,140341,140343,140409,140411,140475,140478,140510,140512,140538,140540,140566,140569,140600,140602,140628,140630,140656,140659],[10,138940,138936],{"id":138941},"_15-品优购项目上篇-搭建与公共模块",[14,138943,138945],{"id":138944},"_151-项目规划","15.1 项目规划",[2564,138947],{"style":127372,"src":138948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[40,138950,138951,138954],{},[840,138952,138953],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[40,138956,138957,138960],{},[840,138958,138959],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138962,138964],{"id":138963},"_152-项目介绍","15.2 项目介绍",[40,138966,138953],{},[2564,138968],{"style":127372,"src":138969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[40,138971,138972],{},"主页：",[2564,138974],{"style":127372,"src":138975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[40,138977,138978],{},"列表页：",[2564,138980],{"style":127372,"src":138981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[40,138983,138984],{},"注册页：",[2564,138986],{"style":127372,"src":138987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138989,138991],{"id":138990},"_153-项目搭建工作","15.3 项目搭建工作",[1233,138993,138995],{"id":138994},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[2564,138997],{"style":127372,"src":138998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[40,139000,139001],{},"经常更换的图片要放到upload文件夹中",[40,139003,139004],{},"不经常换的放到images文件夹中",[1233,139006,139008],{"id":139007},"_1532-创建文件如下","15.3.2 创建文件如下",[2564,139010],{"style":127372,"src":139011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[2564,139013],{"style":127372,"src":139014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[40,139016,139017],{},[840,139018,139019],{},"初始化样式：",[40,139021,139022],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[40,139024,139025],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[40,139027,139028],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[1233,139030,139032],{"id":139031},"_1533-项目模块化开发","15.3.3 项目模块化开发",[40,139034,139035],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[40,139037,139038,139039,139044],{},"这里最典型的应用就是 ",[840,139040,139041],{},[37,139042,139043],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[2564,139046],{"style":127372,"src":139047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[40,139049,139050],{},"通过link方法来引入",[1233,139052,139054],{"id":139053},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[2564,139056],{"style":127372,"src":139057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[40,139059,139060],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[19,139062,139063],{},[22,139064,139065],{},"制作favicon图标",[40,139067,139068,139069,139072],{},"①把品优购图标切成 ",[37,139070,139071],{},"png"," 图片",[40,139074,139075,139076,139078,139079,139082,139083],{},"②把 ",[37,139077,139071],{}," 图片转换为 ",[37,139080,139081],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[981,139084,139085],{"href":139085,"rel":139086},"http:\u002F\u002Fwww.bitbug.net\u002F",[24828],[19,139088,139089,139092],{"start":61},[22,139090,139091],{},"favicon图标放到网站根目录下",[22,139093,139094],{},"HTML页面引入favicon",[40,139096,139097,139098,139101],{},"在html 页面里面的 ",[37,139099,139100],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[40,139103,139104],{},[37,139105,139106],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[40,139108,139109],{},"复制这行代码或者在生成这个的网站进行复制",[2564,139111],{"style":127372,"src":139112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[40,139114,139115],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[40,139117,139118,139119],{},"例如:",[981,139120,139121],{"href":139121,"rel":139122},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24828],[1233,139124,139126],{"id":139125},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[40,139128,139129,139132],{},[840,139130,139131],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[40,139134,139135,139138],{},[840,139136,139137],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[40,139140,139141],{},"页面必须有三个标签用来符合 SEO 优化",[2564,139143],{"style":127372,"src":139144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[19,139146,139147],{},[22,139148,139149],{},"title网站标题",[40,139151,139152,139155],{},[840,139153,139154],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[40,139157,69754],{},[1000,139159,139160,139163],{},[22,139161,139162],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[22,139164,139165],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[19,139167,139168],{"start":61},[22,139169,139170],{},"description网站描述",[40,139172,139173],{},"简要说明我们网站主要是做什么的",[40,139175,139176,139179],{},[840,139177,139178],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[40,139181,69754],{},[40,139183,139184],{},[37,139185,139186],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[19,139188,139189],{"start":93},[22,139190,139191],{},"keywords关键词",[40,139193,139194],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[40,139196,69754],{},[40,139198,139199],{},[37,139200,139201],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[40,139203,139204],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[40,139206,139207],{},[840,139208,139209],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[19,139211,139212],{"start":99},[22,139213,139214],{},"代码总结",[29,139216,139217],{"className":128263,"code":131620,"language":128265,"meta":35,"style":35},[37,139218,139219,139223,139237,139241],{"__ignoreMap":35},[51,139220,139221],{"class":53,"line":54},[51,139222,131627],{"class":57},[51,139224,139225,139227,139229,139231,139233,139235],{"class":53,"line":61},[51,139226,2154],{"class":72},[51,139228,52575],{"class":52264},[51,139230,54450],{"class":68},[51,139232,108],{"class":72},[51,139234,131640],{"class":282},[51,139236,52271],{"class":72},[51,139238,139239],{"class":53,"line":93},[51,139240,131647],{"class":72},[51,139242,139243,139245,139247],{"class":53,"line":99},[51,139244,52749],{"class":72},[51,139246,52575],{"class":52264},[51,139248,52271],{"class":72},[14,139250,139252],{"id":139251},"_154-项目公共部分制作","15.4 项目公共部分制作",[1233,139254,139256],{"id":139255},"_1541-常用模块类命名","15.4.1 常用模块类命名",[2564,139258],{"style":127372,"src":139259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[1233,139261,139263],{"id":139262},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[40,139265,139266],{},"布局思路：",[1000,139268,139269,139272,139275,139297,139330],{},[22,139270,139271],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[22,139273,139274],{},"里面包含版心的盒子",[22,139276,139277,139278],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1000,139279,139280,139288,139294],{},[22,139281,139282,139283,22462,139285,139287],{},"1 号盒子 里面包含一个",[37,139284,1000],{},[37,139286,1000],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[22,139289,139290,139291,139293],{},"里面的内容是水平排列，所以需要给",[37,139292,22],{},"设置浮动",[22,139295,139296],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[22,139298,139299,139300],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1000,139301,139302,139316,139321],{},[22,139303,139304,139305,22462,139307,139309,139310,139312,139313,139315],{},"2 号盒子 里面包含一个",[37,139306,1000],{},[37,139308,1000],{},"包裹",[37,139311,22],{},"，中间的",[37,139314,2165],{},"可以用样式去设置，也可以用字符 |",[22,139317,139318,139319,139293],{},"里面内容水平排列，给",[37,139320,22],{},[22,139322,139323,139324,139326,139327,139329],{},"找到里面所有偶数的 ",[37,139325,22],{}," 设置样式（偶数的 ",[37,139328,22],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[22,139331,139332,139333],{},"需要用到字体图标",[1000,139334,139335,139341,139344,139347,139350],{},[22,139336,139337,139338],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[37,139339,139340],{},"arrow-icon",[22,139342,139343],{},"先要引入字体图片的资源",[22,139345,139346],{},"在样式里面利用 font-face 来进行声明",[22,139348,139349],{},"在伪元素的 content属性设置 图标的编码",[22,139351,139352],{},"给伪元素设置font-family属性",[40,139354,139355],{},"结构实例代码：",[29,139357,139359],{"className":127516,"code":139358,"language":127518,"meta":35,"style":35},"div::before {\n  content: \"\";\n  display: block;\n}\n",[37,139360,139361,139369,139379,139389],{"__ignoreMap":35},[51,139362,139363,139365,139367],{"class":53,"line":54},[51,139364,52575],{"class":52264},[51,139366,138517],{"class":68},[51,139368,16534],{"class":72},[51,139370,139371,139373,139375,139377],{"class":53,"line":61},[51,139372,138524],{"class":175},[51,139374,52401],{"class":72},[51,139376,8614],{"class":282},[51,139378,179],{"class":72},[51,139380,139381,139383,139385,139387],{"class":53,"line":93},[51,139382,129132],{"class":175},[51,139384,52401],{"class":72},[51,139386,61833],{"class":175},[51,139388,179],{"class":72},[51,139390,139391],{"class":53,"line":99},[51,139392,132],{"class":72},[40,139394,139395],{},"样式实例代码：",[29,139397,139398],{"className":127516,"code":139358,"language":127518,"meta":35,"style":35},[37,139399,139400,139408,139418,139428],{"__ignoreMap":35},[51,139401,139402,139404,139406],{"class":53,"line":54},[51,139403,52575],{"class":52264},[51,139405,138517],{"class":68},[51,139407,16534],{"class":72},[51,139409,139410,139412,139414,139416],{"class":53,"line":61},[51,139411,138524],{"class":175},[51,139413,52401],{"class":72},[51,139415,8614],{"class":282},[51,139417,179],{"class":72},[51,139419,139420,139422,139424,139426],{"class":53,"line":93},[51,139421,129132],{"class":175},[51,139423,52401],{"class":72},[51,139425,61833],{"class":175},[51,139427,179],{"class":72},[51,139429,139430],{"class":53,"line":99},[51,139431,132],{"class":72},[1233,139433,139435],{"id":139434},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1000,139437,139438],{},[22,139439,139440],{},"header 盒子必须要有高度",[40,139442,139443,139444,139446,139447],{},"1 号盒子是 ",[37,139445,132528],{}," 标志定位，在正常开发过程中， ",[840,139448,139449,139450,139453],{},"logo的布局其实是有讲究的，需要进行 ",[37,139451,139452],{},"logoSEO","的优化 （★★★）",[1000,139455,139456,139464,139472,139499],{},[22,139457,139458,139460,139461,139463],{},[37,139459,132528],{}," 里面首先放一个 ",[37,139462,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[22,139465,139466,139468,139469,139471],{},[37,139467,10],{}," 里面再放一个链接，可以返回首页的，把 ",[37,139470,132528],{}," 的背景图片给链接即可",[22,139473,139474,139475],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1000,139476,139477,139492],{},[22,139478,139479,139480,139483,139484,139487,139488,139491],{},"方法1：",[37,139481,139482],{},"text-indent"," 移到盒子外面（",[37,139485,139486],{},"text-indent: -9999px",") ，然后 ",[37,139489,139490],{},"overflow:hidden"," ，淘宝的做法",[22,139493,139494,139495,139498],{},"方法2：直接给 ",[37,139496,139497],{},"font-size: 0;"," 就看不到文字了，京东的做法",[22,139500,139501,139502,139504,139505,139507],{},"最后给链接一个 ",[37,139503,52371],{}," 属性，这样鼠标放到 ",[37,139506,132528],{}," 上就可以看到提示文字了",[40,139509,139355],{},[29,139511,139512],{"className":128263,"code":132749,"language":128265,"meta":35,"style":35},[37,139513,139514],{"__ignoreMap":35},[51,139515,139516,139518,139520,139522,139524,139526,139528,139530,139532,139534,139536],{"class":53,"line":54},[51,139517,2154],{"class":72},[51,139519,981],{"class":52264},[51,139521,62021],{"class":68},[51,139523,108],{"class":72},[51,139525,132764],{"class":282},[51,139527,132767],{"class":68},[51,139529,108],{"class":72},[51,139531,132772],{"class":282},[51,139533,132775],{"class":72},[51,139535,981],{"class":52264},[51,139537,52271],{"class":72},[40,139539,139395],{},[29,139541,139542],{"className":128263,"code":132749,"language":128265,"meta":35,"style":35},[37,139543,139544],{"__ignoreMap":35},[51,139545,139546,139548,139550,139552,139554,139556,139558,139560,139562,139564,139566],{"class":53,"line":54},[51,139547,2154],{"class":72},[51,139549,981],{"class":52264},[51,139551,62021],{"class":68},[51,139553,108],{"class":72},[51,139555,132764],{"class":282},[51,139557,132767],{"class":68},[51,139559,108],{"class":72},[51,139561,132772],{"class":282},[51,139563,132775],{"class":72},[51,139565,981],{"class":52264},[51,139567,52271],{"class":72},[40,139569,139570,139571,139573],{},"2 号盒子是 ",[37,139572,132541],{}," 搜索模块定位",[1000,139575,139576,139579,139582,139585],{},[22,139577,139578],{},"search盒子利用定位的方式放在对应的位置",[22,139580,139581],{},"search盒子设置绝对定位，header盒子设置相对定位",[22,139583,139584],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[22,139586,139587],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[40,139589,139355],{},[29,139591,139592],{"className":127516,"code":132836,"language":127518,"meta":35,"style":35},[37,139593,139594,139616,139620,139630],{"__ignoreMap":35},[51,139595,139596,139598,139600,139602,139604,139606,139608,139610,139612,139614],{"class":53,"line":54},[51,139597,52575],{"class":52264},[51,139599,13397],{"class":72},[51,139601,40],{"class":52264},[51,139603,13397],{"class":72},[51,139605,10],{"class":52264},[51,139607,13397],{"class":72},[51,139609,1000],{"class":52264},[51,139611,13397],{"class":72},[51,139613,22],{"class":52264},[51,139615,16534],{"class":72},[51,139617,139618],{"class":53,"line":61},[51,139619,132865],{"class":57},[51,139621,139622,139624,139626,139628],{"class":53,"line":93},[51,139623,129132],{"class":175},[51,139625,52401],{"class":72},[51,139627,61833],{"class":175},[51,139629,179],{"class":72},[51,139631,139632],{"class":53,"line":99},[51,139633,132],{"class":72},[40,139635,139395],{},[29,139637,139638],{"className":127516,"code":132836,"language":127518,"meta":35,"style":35},[37,139639,139640,139662,139666,139676],{"__ignoreMap":35},[51,139641,139642,139644,139646,139648,139650,139652,139654,139656,139658,139660],{"class":53,"line":54},[51,139643,52575],{"class":52264},[51,139645,13397],{"class":72},[51,139647,40],{"class":52264},[51,139649,13397],{"class":72},[51,139651,10],{"class":52264},[51,139653,13397],{"class":72},[51,139655,1000],{"class":52264},[51,139657,13397],{"class":72},[51,139659,22],{"class":52264},[51,139661,16534],{"class":72},[51,139663,139664],{"class":53,"line":61},[51,139665,132865],{"class":57},[51,139667,139668,139670,139672,139674],{"class":53,"line":93},[51,139669,129132],{"class":175},[51,139671,52401],{"class":72},[51,139673,61833],{"class":175},[51,139675,179],{"class":72},[51,139677,139678],{"class":53,"line":99},[51,139679,132],{"class":72},[40,139681,139682],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[40,139684,139685,139686,139689],{},"3 号盒子是 ",[37,139687,139688],{},"hotwords"," 热词模块定位",[1000,139691,139692,139695,139698],{},[22,139693,139694],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[22,139696,139697],{},"给里面所有的a标签设置 左右10px的外边距",[22,139699,139700],{},"给第一个a标签设置文字变红色（#c81623）",[40,139702,139355],{},[29,139704,139706],{"className":127516,"code":139705,"language":127518,"meta":35,"style":35},"div {\n  margin: 0 auto;\n}\n",[37,139707,139708,139714,139726],{"__ignoreMap":35},[51,139709,139710,139712],{"class":53,"line":54},[51,139711,52575],{"class":52264},[51,139713,16534],{"class":72},[51,139715,139716,139718,139720,139722,139724],{"class":53,"line":61},[51,139717,71434],{"class":175},[51,139719,52401],{"class":72},[51,139721,176],{"class":175},[51,139723,52520],{"class":175},[51,139725,179],{"class":72},[51,139727,139728],{"class":53,"line":93},[51,139729,132],{"class":72},[40,139731,139395],{},[29,139733,139734],{"className":127516,"code":139705,"language":127518,"meta":35,"style":35},[37,139735,139736,139742,139754],{"__ignoreMap":35},[51,139737,139738,139740],{"class":53,"line":54},[51,139739,52575],{"class":52264},[51,139741,16534],{"class":72},[51,139743,139744,139746,139748,139750,139752],{"class":53,"line":61},[51,139745,71434],{"class":175},[51,139747,52401],{"class":72},[51,139749,176],{"class":175},[51,139751,52520],{"class":175},[51,139753,179],{"class":72},[51,139755,139756],{"class":53,"line":93},[51,139757,132],{"class":72},[40,139759,139760,139761,139764],{},"4 号盒子是 ",[37,139762,139763],{},"shopcar"," 购物车模块",[1000,139766,139767,139772,139775,139778],{},[22,139768,124299,139769,139771],{},[37,139770,139763],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[22,139773,139774],{},"count 统计部分用绝对定位做",[22,139776,139777],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[22,139779,139780],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[40,139782,139355],{},[29,139784,139785],{"className":127516,"code":132948,"language":127518,"meta":35,"style":35},[37,139786,139787,139791,139805,139809,139823,139827,139841,139845,139859,139863],{"__ignoreMap":35},[51,139788,139789],{"class":53,"line":54},[51,139790,132955],{"class":57},[51,139792,139793,139795,139797,139799,139801,139803],{"class":53,"line":61},[51,139794,132960],{"class":68},[51,139796,80771],{"class":72},[51,139798,129876],{"class":175},[51,139800,52401],{"class":72},[51,139802,132969],{"class":175},[51,139804,130446],{"class":72},[51,139806,139807],{"class":53,"line":93},[51,139808,132976],{"class":57},[51,139810,139811,139813,139815,139817,139819,139821],{"class":53,"line":99},[51,139812,132981],{"class":68},[51,139814,80771],{"class":72},[51,139816,129876],{"class":175},[51,139818,52401],{"class":72},[51,139820,55728],{"class":175},[51,139822,130446],{"class":72},[51,139824,139825],{"class":53,"line":120},[51,139826,132996],{"class":57},[51,139828,139829,139831,139833,139835,139837,139839],{"class":53,"line":129},[51,139830,133001],{"class":68},[51,139832,80771],{"class":72},[51,139834,129876],{"class":175},[51,139836,52401],{"class":72},[51,139838,55795],{"class":175},[51,139840,130446],{"class":72},[51,139842,139843],{"class":53,"line":206},[51,139844,133016],{"class":57},[51,139846,139847,139849,139851,139853,139855,139857],{"class":53,"line":212},[51,139848,133021],{"class":68},[51,139850,80771],{"class":72},[51,139852,129876],{"class":175},[51,139854,52401],{"class":72},[51,139856,87197],{"class":175},[51,139858,130446],{"class":72},[51,139860,139861],{"class":53,"line":227},[51,139862,133036],{"class":57},[51,139864,139865,139867,139869,139871,139873,139875],{"class":53,"line":370},[51,139866,133041],{"class":68},[51,139868,80771],{"class":72},[51,139870,129876],{"class":175},[51,139872,52401],{"class":72},[51,139874,133050],{"class":175},[51,139876,130446],{"class":72},[40,139878,139395],{},[29,139880,139881],{"className":127516,"code":132948,"language":127518,"meta":35,"style":35},[37,139882,139883,139887,139901,139905,139919,139923,139937,139941,139955,139959],{"__ignoreMap":35},[51,139884,139885],{"class":53,"line":54},[51,139886,132955],{"class":57},[51,139888,139889,139891,139893,139895,139897,139899],{"class":53,"line":61},[51,139890,132960],{"class":68},[51,139892,80771],{"class":72},[51,139894,129876],{"class":175},[51,139896,52401],{"class":72},[51,139898,132969],{"class":175},[51,139900,130446],{"class":72},[51,139902,139903],{"class":53,"line":93},[51,139904,132976],{"class":57},[51,139906,139907,139909,139911,139913,139915,139917],{"class":53,"line":99},[51,139908,132981],{"class":68},[51,139910,80771],{"class":72},[51,139912,129876],{"class":175},[51,139914,52401],{"class":72},[51,139916,55728],{"class":175},[51,139918,130446],{"class":72},[51,139920,139921],{"class":53,"line":120},[51,139922,132996],{"class":57},[51,139924,139925,139927,139929,139931,139933,139935],{"class":53,"line":129},[51,139926,133001],{"class":68},[51,139928,80771],{"class":72},[51,139930,129876],{"class":175},[51,139932,52401],{"class":72},[51,139934,55795],{"class":175},[51,139936,130446],{"class":72},[51,139938,139939],{"class":53,"line":206},[51,139940,133016],{"class":57},[51,139942,139943,139945,139947,139949,139951,139953],{"class":53,"line":212},[51,139944,133021],{"class":68},[51,139946,80771],{"class":72},[51,139948,129876],{"class":175},[51,139950,52401],{"class":72},[51,139952,87197],{"class":175},[51,139954,130446],{"class":72},[51,139956,139957],{"class":53,"line":227},[51,139958,133036],{"class":57},[51,139960,139961,139963,139965,139967,139969,139971],{"class":53,"line":370},[51,139962,133041],{"class":68},[51,139964,80771],{"class":72},[51,139966,129876],{"class":175},[51,139968,52401],{"class":72},[51,139970,133050],{"class":175},[51,139972,130446],{"class":72},[1233,139974,139976,139977,139979],{"id":139975},"_1544-nav导航模块制作","15.4.4 ",[37,139978,54677],{},"导航模块制作",[2564,139981],{"style":127372,"src":139982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[40,139984,139985,139987],{},[37,139986,54677],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[40,139989,139990,139991],{},"1 号盒子左侧浮动，",[37,139992,139993],{},"dropdown",[1000,139995,139996,140006,140014,140020,140028,140038,140046,140057],{},[22,139997,139998,139999,101982,140002,140005],{},"1号盒子有讲究，根据相关性 里面包含 ",[37,140000,140001],{},".dt",[37,140003,140004],{},".dd"," 两个盒子",[22,140007,140008,140010,140011,140013],{},[37,140009,140001],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[37,140012,140004],{}," 挤到下面去了",[22,140015,140016,140017,140019],{},"给 ",[37,140018,140004],{}," 盒子设置宽度 和 高度，以及背景颜色",[22,140021,140016,140022,140024,140025,121201],{},[37,140023,140004],{}," 盒子里面定义 无序列表 （",[37,140026,140027],{},"ul > li > a",[22,140029,140030,140031,140033,140034,140037],{},"每个 ",[37,140032,22],{}," 都有一个高度（",[37,140035,140036],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[22,140039,140016,140040,140042,140043,121201],{},[37,140041,22],{}," 里面的a设置文字大小（",[37,140044,140045],{},"14px",[22,140047,140016,140048,140050,140051,140053,140054,140056],{},[37,140049,22],{}," 设置 ",[37,140052,128677],{},"，当鼠标移入的时候，让",[37,140055,22],{},"的背景变成白色，让里面的文字变成红色",[22,140058,140059,140061,140062,140064,140065,140067],{},[37,140060,22],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[37,140063,22],{},"的右侧，那么给",[37,140066,22],{},"设置相对定位",[40,140069,140070],{},"一定要注意相关性",[40,140072,139355],{},[29,140074,140075],{"className":127516,"code":139358,"language":127518,"meta":35,"style":35},[37,140076,140077,140085,140095,140105],{"__ignoreMap":35},[51,140078,140079,140081,140083],{"class":53,"line":54},[51,140080,52575],{"class":52264},[51,140082,138517],{"class":68},[51,140084,16534],{"class":72},[51,140086,140087,140089,140091,140093],{"class":53,"line":61},[51,140088,138524],{"class":175},[51,140090,52401],{"class":72},[51,140092,8614],{"class":282},[51,140094,179],{"class":72},[51,140096,140097,140099,140101,140103],{"class":53,"line":93},[51,140098,129132],{"class":175},[51,140100,52401],{"class":72},[51,140102,61833],{"class":175},[51,140104,179],{"class":72},[51,140106,140107],{"class":53,"line":99},[51,140108,132],{"class":72},[40,140110,139395],{},[29,140112,140113],{"className":127516,"code":139358,"language":127518,"meta":35,"style":35},[37,140114,140115,140123,140133,140143],{"__ignoreMap":35},[51,140116,140117,140119,140121],{"class":53,"line":54},[51,140118,52575],{"class":52264},[51,140120,138517],{"class":68},[51,140122,16534],{"class":72},[51,140124,140125,140127,140129,140131],{"class":53,"line":61},[51,140126,138524],{"class":175},[51,140128,52401],{"class":72},[51,140130,8614],{"class":282},[51,140132,179],{"class":72},[51,140134,140135,140137,140139,140141],{"class":53,"line":93},[51,140136,129132],{"class":175},[51,140138,52401],{"class":72},[51,140140,61833],{"class":175},[51,140142,179],{"class":72},[51,140144,140145],{"class":53,"line":99},[51,140146,132],{"class":72},[40,140148,140149],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[40,140151,140152,140153,140156],{},"2 号盒子左侧浮动，",[37,140154,140155],{},"navitems"," 导航栏组",[1000,140158,140159,140164,140173],{},[22,140160,140161,140162],{},"里面结构是 ",[37,140163,140027],{},[22,140165,140166,140167,140169,140170,140172],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[37,140168,981],{},"左右的",[37,140171,31847],{},"把两侧撑开",[22,140174,140175],{},"让文字垂直居中（行高等于高度）",[2564,140177],{"style":127372,"src":140178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[40,140180,140181],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[40,140183,139355],{},[29,140185,140187],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},".box {\n  float: left;\n}\n",[37,140188,140189,140195,140205],{"__ignoreMap":35},[51,140190,140191,140193],{"class":53,"line":54},[51,140192,131364],{"class":68},[51,140194,16534],{"class":72},[51,140196,140197,140199,140201,140203],{"class":53,"line":61},[51,140198,131996],{"class":175},[51,140200,52401],{"class":72},[51,140202,24699],{"class":175},[51,140204,179],{"class":72},[51,140206,140207],{"class":53,"line":93},[51,140208,132],{"class":72},[40,140210,139395],{},[29,140212,140213],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},[37,140214,140215,140221,140231],{"__ignoreMap":35},[51,140216,140217,140219],{"class":53,"line":54},[51,140218,131364],{"class":68},[51,140220,16534],{"class":72},[51,140222,140223,140225,140227,140229],{"class":53,"line":61},[51,140224,131996],{"class":175},[51,140226,52401],{"class":72},[51,140228,24699],{"class":175},[51,140230,179],{"class":72},[51,140232,140233],{"class":53,"line":93},[51,140234,132],{"class":72},[40,140236,140237],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[2564,140239],{"style":127372,"src":140240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[29,140242,140243],{"className":127516,"code":131673,"language":127518,"meta":35,"style":35},[37,140244,140245,140251,140267],{"__ignoreMap":35},[51,140246,140247,140249],{"class":53,"line":54},[51,140248,52575],{"class":52264},[51,140250,16534],{"class":72},[51,140252,140253,140255,140257,140259,140261,140263,140265],{"class":53,"line":61},[51,140254,71860],{"class":175},[51,140256,52401],{"class":72},[51,140258,791],{"class":175},[51,140260,52456],{"class":64},[51,140262,52485],{"class":175},[51,140264,130908],{"class":175},[51,140266,179],{"class":72},[51,140268,140269],{"class":53,"line":93},[51,140270,132],{"class":72},[1233,140272,140274],{"id":140273},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[2564,140276],{"style":127372,"src":140277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1000,140279,140280,140285,140290],{},[22,140281,140282,140284],{},[37,140283,132719],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[22,140286,140287,140289],{},[37,140288,132719],{}," 里面有一个大的版心",[22,140291,140292,140293,140296,140297],{},"版心里面包含 1 号盒子，",[37,140294,140295],{},"mod_service"," 是服务模块，mod 是模块的意思",[1000,140298,140299,140304,140317,140333,140338],{},[22,140300,140016,140301,140303],{},[37,140302,140295],{}," 设置高度（80px）和下边框",[22,140305,140306,140307,140310,140311,140313,140314,140316],{},"在里面定义 ",[37,140308,140309],{},"ul > li"," ,每个",[37,140312,22],{}," 宽度是300px 高度是 50px，给每个",[37,140315,22],{},"设置35px的左内边距",[22,140318,140319,140320,140322,140323,140325,140326,140328,140329,19372,140331,121201],{},"在每个",[37,140321,22],{},"里面，放一个 ",[37,140324,23872],{},"（里面放图标），一个",[37,140327,52575],{},"（里面放",[37,140330,52575],{},[37,140332,40],{},[22,140334,140016,140335,140337],{},[37,140336,23872],{},"设置浮动，让h5与这个div左右排列",[22,140339,140340],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[40,140342,139355],{},[29,140344,140346],{"className":127516,"code":140345,"language":127518,"meta":35,"style":35},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[37,140347,140348,140354,140366,140378,140405],{"__ignoreMap":35},[51,140349,140350,140352],{"class":53,"line":54},[51,140351,135273],{"class":68},[51,140353,16534],{"class":72},[51,140355,140356,140358,140360,140362,140364],{"class":53,"line":61},[51,140357,71532],{"class":175},[51,140359,52401],{"class":72},[51,140361,457],{"class":175},[51,140363,52456],{"class":64},[51,140365,179],{"class":72},[51,140367,140368,140370,140372,140374,140376],{"class":53,"line":93},[51,140369,71752],{"class":175},[51,140371,52401],{"class":72},[51,140373,457],{"class":175},[51,140375,52456],{"class":64},[51,140377,179],{"class":72},[51,140379,140380,140382,140384,140386,140388,140390,140392,140394,140397,140399,140401,140403],{"class":53,"line":99},[51,140381,71575],{"class":175},[51,140383,52401],{"class":72},[51,140385,62690],{"class":175},[51,140387,73],{"class":72},[51,140389,135312],{"class":78},[51,140391,14676],{"class":72},[51,140393,62700],{"class":175},[51,140395,140396],{"class":175}," -10",[51,140398,52456],{"class":64},[51,140400,135331],{"class":175},[51,140402,52456],{"class":64},[51,140404,179],{"class":72},[51,140406,140407],{"class":53,"line":120},[51,140408,132],{"class":72},[40,140410,139395],{},[29,140412,140413],{"className":127516,"code":140345,"language":127518,"meta":35,"style":35},[37,140414,140415,140421,140433,140445,140471],{"__ignoreMap":35},[51,140416,140417,140419],{"class":53,"line":54},[51,140418,135273],{"class":68},[51,140420,16534],{"class":72},[51,140422,140423,140425,140427,140429,140431],{"class":53,"line":61},[51,140424,71532],{"class":175},[51,140426,52401],{"class":72},[51,140428,457],{"class":175},[51,140430,52456],{"class":64},[51,140432,179],{"class":72},[51,140434,140435,140437,140439,140441,140443],{"class":53,"line":93},[51,140436,71752],{"class":175},[51,140438,52401],{"class":72},[51,140440,457],{"class":175},[51,140442,52456],{"class":64},[51,140444,179],{"class":72},[51,140446,140447,140449,140451,140453,140455,140457,140459,140461,140463,140465,140467,140469],{"class":53,"line":99},[51,140448,71575],{"class":175},[51,140450,52401],{"class":72},[51,140452,62690],{"class":175},[51,140454,73],{"class":72},[51,140456,135312],{"class":78},[51,140458,14676],{"class":72},[51,140460,62700],{"class":175},[51,140462,140396],{"class":175},[51,140464,52456],{"class":64},[51,140466,135331],{"class":175},[51,140468,52456],{"class":64},[51,140470,179],{"class":72},[51,140472,140473],{"class":53,"line":120},[51,140474,132],{"class":72},[40,140476,140477],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1000,140479,140480,140483,140489,140495,140507],{},[22,140481,140482],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[22,140484,140485,140486,121201],{},"里面的布局利用 自定义列表来实现（",[37,140487,140488],{},"dl > dt + dd",[22,140490,140016,140491,140494],{},[37,140492,140493],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[22,140496,140016,140497,140500,140501,19372,140503,140506],{},[37,140498,140499],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[37,140502,140499],{},[37,140504,140505],{},"dd","之间有些距离",[22,140508,140509],{},"最后一个 dl 结构和样式不一样，需要单独设置",[40,140511,139355],{},[29,140513,140514],{"className":127516,"code":139705,"language":127518,"meta":35,"style":35},[37,140515,140516,140522,140534],{"__ignoreMap":35},[51,140517,140518,140520],{"class":53,"line":54},[51,140519,52575],{"class":52264},[51,140521,16534],{"class":72},[51,140523,140524,140526,140528,140530,140532],{"class":53,"line":61},[51,140525,71434],{"class":175},[51,140527,52401],{"class":72},[51,140529,176],{"class":175},[51,140531,52520],{"class":175},[51,140533,179],{"class":72},[51,140535,140536],{"class":53,"line":93},[51,140537,132],{"class":72},[40,140539,139395],{},[29,140541,140542],{"className":127516,"code":139705,"language":127518,"meta":35,"style":35},[37,140543,140544,140550,140562],{"__ignoreMap":35},[51,140545,140546,140548],{"class":53,"line":54},[51,140547,52575],{"class":52264},[51,140549,16534],{"class":72},[51,140551,140552,140554,140556,140558,140560],{"class":53,"line":61},[51,140553,71434],{"class":175},[51,140555,52401],{"class":72},[51,140557,176],{"class":175},[51,140559,52520],{"class":175},[51,140561,179],{"class":72},[51,140563,140564],{"class":53,"line":93},[51,140565,132],{"class":72},[40,140567,140568],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1000,140570,140571,140580,140583,140594],{},[22,140572,140573,140574,140576,140577,140579],{},"分为上下两块，上面是 ",[37,140575,132736],{}," 友情链接，下面是 ",[37,140578,132729],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[22,140581,140582],{},"把内容分别复制到相应模块中",[22,140584,140016,140585,140587,140588,140590,140591,140593],{},[37,140586,132736],{}," 设置 15px 的下外边距，给",[37,140589,132736],{}," 里面 的 ",[37,140592,981],{}," 标签设置 左右 3px 的外边距",[22,140595,140596,140597,140599],{},"给",[37,140598,132729],{}," 设置 20px 的行高",[40,140601,139355],{},[29,140603,140604],{"className":127516,"code":139705,"language":127518,"meta":35,"style":35},[37,140605,140606,140612,140624],{"__ignoreMap":35},[51,140607,140608,140610],{"class":53,"line":54},[51,140609,52575],{"class":52264},[51,140611,16534],{"class":72},[51,140613,140614,140616,140618,140620,140622],{"class":53,"line":61},[51,140615,71434],{"class":175},[51,140617,52401],{"class":72},[51,140619,176],{"class":175},[51,140621,52520],{"class":175},[51,140623,179],{"class":72},[51,140625,140626],{"class":53,"line":93},[51,140627,132],{"class":72},[40,140629,139395],{},[29,140631,140632],{"className":127516,"code":139705,"language":127518,"meta":35,"style":35},[37,140633,140634,140640,140652],{"__ignoreMap":35},[51,140635,140636,140638],{"class":53,"line":54},[51,140637,52575],{"class":52264},[51,140639,16534],{"class":72},[51,140641,140642,140644,140646,140648,140650],{"class":53,"line":61},[51,140643,71434],{"class":175},[51,140645,52401],{"class":72},[51,140647,176],{"class":175},[51,140649,52520],{"class":175},[51,140651,179],{"class":72},[51,140653,140654],{"class":53,"line":93},[51,140655,132],{"class":72},[40,140657,140658],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1179,140660,140661],{},"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":35,"searchDepth":61,"depth":61,"links":140663},[140664,140665,140666,140673],{"id":138944,"depth":61,"text":138945},{"id":138963,"depth":61,"text":138964},{"id":138990,"depth":61,"text":138991,"children":140667},[140668,140669,140670,140671,140672],{"id":138994,"depth":93,"text":138995},{"id":139007,"depth":93,"text":139008},{"id":139031,"depth":93,"text":139032},{"id":139053,"depth":93,"text":139054},{"id":139125,"depth":93,"text":139126},{"id":139251,"depth":61,"text":139252,"children":140674},[140675,140676,140677,140678,140680],{"id":139255,"depth":93,"text":139256},{"id":139262,"depth":93,"text":139263},{"id":139434,"depth":93,"text":139435},{"id":139975,"depth":93,"text":140679},"15.4.4 nav导航模块制作",{"id":140273,"depth":93,"text":140274},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138936,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140687,"title":140688,"body":140689,"description":24339,"extension":1190,"meta":143091,"navigation":1192,"path":143092,"seo":143093,"stem":143094,"__hash__":143095},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140690,"toc":143068},[140691,140694,140698,140702,140714,140717,140720,140723,140734,140736,140760,140762,140786,140791,140794,140796,140832,140834,140870,140873,140878,140881,140884,140887,140917,140924,140927,140937,140939,140973,140976,141010,141016,141033,141035,141071,141073,141109,141114,141139,141141,141167,141169,141193,141200,141203,141267,141269,141311,141313,141353,141360,141365,141367,141397,141399,141429,141433,141436,141443,141455,141457,141483,141485,141509,141512,141514,141538,141544,141554,141556,141586,141588,141618,141625,141666,141668,141704,141706,141742,141746,141749,141752,141755,141761,141766,141769,141792,141795,141819,141822,141846,141851,141854,141857,141860,141863,141866,141940,141942,141972,141974,142004,142007,142010,142042,142046,142050,142064,142073,142076,142081,142083,142177,142179,142273,142296,142298,142322,142324,142348,142355,142358,142368,142370,142394,142399,142407,142409,142439,142444,142484,142486,142512,142514,142540,142544,142547,142552,142555,142559,142567,142574,142582,142584,142614,142616,142646,142654,142657,142660,142662,142692,142694,142724,142727,142732,142734,142758,142760,142784,142787,142872,142874,142898,142900,142924,142928,142930,142954,142956,142990,142994,143008,143011,143016,143019,143024,143027,143057,143065],[10,140692,140688],{"id":140693},"_16-品优购项目下篇-主体与页面开发",[14,140695,140697],{"id":140696},"_161-项目主体模块制作","16.1 项目主体模块制作",[1233,140699,140701],{"id":140700},"_1611-首页制作","16.1.1 首页制作",[40,140703,140704,140706,140707,140709,140710,140713],{},[840,140705,103022],{}," 主体模块是 ",[840,140708,75022],{}," 里面专有的，注意需要新的样式文件 ",[840,140711,140712],{},"index.css，"," 就不要写在common.css中了",[2564,140715],{"style":127372,"src":140716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[2564,140718],{"style":127372,"src":140719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[40,140721,140722],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1000,140724,140725,140728,140731],{},[22,140726,140727],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[22,140729,140730],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[22,140732,140733],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[40,140735,139355],{},[29,140737,140738],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},[37,140739,140740,140746,140756],{"__ignoreMap":35},[51,140741,140742,140744],{"class":53,"line":54},[51,140743,131364],{"class":68},[51,140745,16534],{"class":72},[51,140747,140748,140750,140752,140754],{"class":53,"line":61},[51,140749,131996],{"class":175},[51,140751,52401],{"class":72},[51,140753,24699],{"class":175},[51,140755,179],{"class":72},[51,140757,140758],{"class":53,"line":93},[51,140759,132],{"class":72},[40,140761,139395],{},[29,140763,140764],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},[37,140765,140766,140772,140782],{"__ignoreMap":35},[51,140767,140768,140770],{"class":53,"line":54},[51,140769,131364],{"class":68},[51,140771,16534],{"class":72},[51,140773,140774,140776,140778,140780],{"class":53,"line":61},[51,140775,131996],{"class":175},[51,140777,52401],{"class":72},[51,140779,24699],{"class":175},[51,140781,179],{"class":72},[51,140783,140784],{"class":53,"line":93},[51,140785,132],{"class":72},[19,140787,140788],{},[22,140789,140790],{},"左侧focus模块制作",[2564,140792],{"style":127372,"src":140793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[40,140795,139355],{},[29,140797,140798],{"className":127516,"code":128839,"language":127518,"meta":35,"style":35},[37,140799,140800,140808,140818,140828],{"__ignoreMap":35},[51,140801,140802,140804,140806],{"class":53,"line":54},[51,140803,54785],{"class":52264},[51,140805,62864],{"class":68},[51,140807,16534],{"class":72},[51,140809,140810,140812,140814,140816],{"class":53,"line":61},[51,140811,128854],{"class":175},[51,140813,52401],{"class":72},[51,140815,55853],{"class":175},[51,140817,179],{"class":72},[51,140819,140820,140822,140824,140826],{"class":53,"line":93},[51,140821,71762],{"class":175},[51,140823,52401],{"class":72},[51,140825,55701],{"class":175},[51,140827,179],{"class":72},[51,140829,140830],{"class":53,"line":99},[51,140831,132],{"class":72},[40,140833,139395],{},[29,140835,140836],{"className":127516,"code":128839,"language":127518,"meta":35,"style":35},[37,140837,140838,140846,140856,140866],{"__ignoreMap":35},[51,140839,140840,140842,140844],{"class":53,"line":54},[51,140841,54785],{"class":52264},[51,140843,62864],{"class":68},[51,140845,16534],{"class":72},[51,140847,140848,140850,140852,140854],{"class":53,"line":61},[51,140849,128854],{"class":175},[51,140851,52401],{"class":72},[51,140853,55853],{"class":175},[51,140855,179],{"class":72},[51,140857,140858,140860,140862,140864],{"class":53,"line":93},[51,140859,71762],{"class":175},[51,140861,52401],{"class":72},[51,140863,55701],{"class":175},[51,140865,179],{"class":72},[51,140867,140868],{"class":53,"line":99},[51,140869,132],{"class":72},[40,140871,140872],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[19,140874,140875],{"start":61},[22,140876,140877],{},"右侧newsflash模块制作",[2564,140879],{"style":127372,"src":140880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[40,140882,140883],{},"右侧的模块 分为上中下三个盒子",[40,140885,140886],{},"结构代码：",[29,140888,140889],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,140890,140891],{"__ignoreMap":35},[51,140892,140893,140895,140897,140899,140901,140903,140905,140907,140909,140911,140913,140915],{"class":53,"line":54},[51,140894,2154],{"class":72},[51,140896,2564],{"class":52264},[51,140898,56203],{"class":68},[51,140900,108],{"class":72},[51,140902,135033],{"class":282},[51,140904,56211],{"class":68},[51,140906,108],{"class":72},[51,140908,135040],{"class":282},[51,140910,135043],{"class":68},[51,140912,108],{"class":72},[51,140914,135048],{"class":282},[51,140916,52271],{"class":72},[40,140918,140919,140920,140923],{},"1 号盒子为 ",[37,140921,140922],{},"news"," 新闻模块 高度为 165px",[2564,140925],{"style":127372,"src":140926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[40,140928,140929,140930,140933,140934],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[37,140931,140932],{},"news-hd","，下面是 ",[37,140935,140936],{},"news-bd",[40,140938,140886],{},[29,140940,140941],{"className":128263,"code":131620,"language":128265,"meta":35,"style":35},[37,140942,140943,140947,140961,140965],{"__ignoreMap":35},[51,140944,140945],{"class":53,"line":54},[51,140946,131627],{"class":57},[51,140948,140949,140951,140953,140955,140957,140959],{"class":53,"line":61},[51,140950,2154],{"class":72},[51,140952,52575],{"class":52264},[51,140954,54450],{"class":68},[51,140956,108],{"class":72},[51,140958,131640],{"class":282},[51,140960,52271],{"class":72},[51,140962,140963],{"class":53,"line":93},[51,140964,131647],{"class":72},[51,140966,140967,140969,140971],{"class":53,"line":99},[51,140968,52749],{"class":72},[51,140970,52575],{"class":52264},[51,140972,52271],{"class":72},[40,140974,140975],{},"样式代码：",[29,140977,140978],{"className":128263,"code":131620,"language":128265,"meta":35,"style":35},[37,140979,140980,140984,140998,141002],{"__ignoreMap":35},[51,140981,140982],{"class":53,"line":54},[51,140983,131627],{"class":57},[51,140985,140986,140988,140990,140992,140994,140996],{"class":53,"line":61},[51,140987,2154],{"class":72},[51,140989,52575],{"class":52264},[51,140991,54450],{"class":68},[51,140993,108],{"class":72},[51,140995,131640],{"class":282},[51,140997,52271],{"class":72},[51,140999,141000],{"class":53,"line":93},[51,141001,131647],{"class":72},[51,141003,141004,141006,141008],{"class":53,"line":99},[51,141005,52749],{"class":72},[51,141007,52575],{"class":52264},[51,141009,52271],{"class":72},[40,141011,141012,141013,141015],{},"上面是",[37,141014,140932],{},"，设置高度是 33px，设置下边框",[1000,141017,141018,141024],{},[22,141019,141020,141021,141023],{},"里面放一个",[37,141022,23872],{}," 标题",[22,141025,141026,141027,141029,141030,141032],{},"放一个a",[37,141028,103657],{},"，内容是 更多，然后让 ",[37,141031,981],{}," 进行右浮动，三角用伪元素设置字体图标就好",[40,141034,140886],{},[29,141036,141037],{"className":127516,"code":139358,"language":127518,"meta":35,"style":35},[37,141038,141039,141047,141057,141067],{"__ignoreMap":35},[51,141040,141041,141043,141045],{"class":53,"line":54},[51,141042,52575],{"class":52264},[51,141044,138517],{"class":68},[51,141046,16534],{"class":72},[51,141048,141049,141051,141053,141055],{"class":53,"line":61},[51,141050,138524],{"class":175},[51,141052,52401],{"class":72},[51,141054,8614],{"class":282},[51,141056,179],{"class":72},[51,141058,141059,141061,141063,141065],{"class":53,"line":93},[51,141060,129132],{"class":175},[51,141062,52401],{"class":72},[51,141064,61833],{"class":175},[51,141066,179],{"class":72},[51,141068,141069],{"class":53,"line":99},[51,141070,132],{"class":72},[40,141072,140975],{},[29,141074,141075],{"className":127516,"code":139358,"language":127518,"meta":35,"style":35},[37,141076,141077,141085,141095,141105],{"__ignoreMap":35},[51,141078,141079,141081,141083],{"class":53,"line":54},[51,141080,52575],{"class":52264},[51,141082,138517],{"class":68},[51,141084,16534],{"class":72},[51,141086,141087,141089,141091,141093],{"class":53,"line":61},[51,141088,138524],{"class":175},[51,141090,52401],{"class":72},[51,141092,8614],{"class":282},[51,141094,179],{"class":72},[51,141096,141097,141099,141101,141103],{"class":53,"line":93},[51,141098,129132],{"class":175},[51,141100,52401],{"class":72},[51,141102,61833],{"class":175},[51,141104,179],{"class":72},[51,141106,141107],{"class":53,"line":99},[51,141108,132],{"class":72},[40,141110,141111,141112],{},"下面是",[37,141113,140936],{},[1000,141115,141116,141124],{},[22,141117,141118,141119,101982,141121,141123],{},"里面包含 ",[37,141120,1000],{},[37,141122,22],{}," 还有链接",[22,141125,140596,141126,141128,141129,141131,141132,141135,141136],{},[37,141127,22],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[37,141130,132182],{}," 2.设置 ",[37,141133,141134],{},"white-space: nowrap;"," 3. 设置 ",[37,141137,141138],{},"text-overflow: ellipsis;",[40,141140,140886],{},[29,141142,141144],{"className":127516,"code":141143,"language":127518,"meta":35,"style":35},"div {\n  overflow: hidden;\n}\n",[37,141145,141146,141152,141163],{"__ignoreMap":35},[51,141147,141148,141150],{"class":53,"line":54},[51,141149,52575],{"class":52264},[51,141151,16534],{"class":72},[51,141153,141154,141157,141159,141161],{"class":53,"line":61},[51,141155,141156],{"class":175},"  overflow",[51,141158,52401],{"class":72},[51,141160,62678],{"class":175},[51,141162,179],{"class":72},[51,141164,141165],{"class":53,"line":93},[51,141166,132],{"class":72},[40,141168,140975],{},[29,141170,141171],{"className":127516,"code":141143,"language":127518,"meta":35,"style":35},[37,141172,141173,141179,141189],{"__ignoreMap":35},[51,141174,141175,141177],{"class":53,"line":54},[51,141176,52575],{"class":52264},[51,141178,16534],{"class":72},[51,141180,141181,141183,141185,141187],{"class":53,"line":61},[51,141182,141156],{"class":175},[51,141184,52401],{"class":72},[51,141186,62678],{"class":175},[51,141188,179],{"class":72},[51,141190,141191],{"class":53,"line":93},[51,141192,132],{"class":72},[40,141194,141195,141196,141199],{},"2 号盒子为 ",[37,141197,141198],{},"lifeservice"," 生活服务模块 高度为 209px",[2564,141201],{"style":127372,"src":141202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1000,141204,141205,141208,141218,141242,141253],{},[22,141206,141207],{},"设置边框（左右下边框）",[22,141209,141210,141211,141214,141215,141217],{},"里面的内容 是 ",[37,141212,141213],{},"ul > 12*li","，给",[37,141216,22],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[22,141219,141220,141221],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1000,141222,141223,141228,141237],{},[22,141224,141225,141227],{},[37,141226,141198],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[22,141229,141230,141231,141233,141234,141236],{},"可以让 ",[37,141232,141198],{}," 里面的 ",[37,141235,1000],{}," 宽度为 252，就可以装的下 4 个 小 li",[22,141238,141239,141241],{},[37,141240,141198],{}," 盒子 overflow 隐藏多余的部分就可以了",[22,141243,117431,141244,141246,141247,141249,141250,141252],{},[37,141245,22],{}," 里面放一个 ",[37,141248,1689],{},"（里面放图标），下面的文本用 ",[37,141251,40],{}," 标签包裹",[22,141254,140016,141255,141257,141258,141260,141261,140050,141263,141266],{},[37,141256,1689],{}," 设置 24px宽和28px的高（注意 ",[37,141259,1689],{}," 是行内元素， 转成行内块），给 ",[37,141262,22],{},[37,141264,141265],{},"text-align:center"," 让里面内容居中显示",[40,141268,140886],{},[29,141270,141272],{"className":127516,"code":141271,"language":127518,"meta":35,"style":35},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[37,141273,141274,141292,141297,141307],{"__ignoreMap":35},[51,141275,141276,141278,141280,141282,141284,141286,141288,141290],{"class":53,"line":54},[51,141277,51],{"class":52264},[51,141279,13397],{"class":72},[51,141281,981],{"class":52264},[51,141283,13397],{"class":72},[51,141285,24516],{"class":52264},[51,141287,13397],{"class":72},[51,141289,840],{"class":52264},[51,141291,16534],{"class":72},[51,141293,141294],{"class":53,"line":61},[51,141295,141296],{"class":57},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[51,141298,141299,141301,141303,141305],{"class":53,"line":93},[51,141300,129132],{"class":175},[51,141302,52401],{"class":72},[51,141304,129194],{"class":175},[51,141306,179],{"class":72},[51,141308,141309],{"class":53,"line":99},[51,141310,132],{"class":72},[40,141312,140975],{},[29,141314,141315],{"className":127516,"code":141271,"language":127518,"meta":35,"style":35},[37,141316,141317,141335,141339,141349],{"__ignoreMap":35},[51,141318,141319,141321,141323,141325,141327,141329,141331,141333],{"class":53,"line":54},[51,141320,51],{"class":52264},[51,141322,13397],{"class":72},[51,141324,981],{"class":52264},[51,141326,13397],{"class":72},[51,141328,24516],{"class":52264},[51,141330,13397],{"class":72},[51,141332,840],{"class":52264},[51,141334,16534],{"class":72},[51,141336,141337],{"class":53,"line":61},[51,141338,141296],{"class":57},[51,141340,141341,141343,141345,141347],{"class":53,"line":93},[51,141342,129132],{"class":175},[51,141344,52401],{"class":72},[51,141346,129194],{"class":175},[51,141348,179],{"class":72},[51,141350,141351],{"class":53,"line":99},[51,141352,132],{"class":72},[40,141354,141355,141356,141359],{},"3 号盒子为 ",[37,141357,141358],{},"bargain"," 特价商品",[1000,141361,141362],{},[22,141363,141364],{},"这个比较简单，直接插入一张图片即可",[40,141366,140886],{},[29,141368,141369],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,141370,141371],{"__ignoreMap":35},[51,141372,141373,141375,141377,141379,141381,141383,141385,141387,141389,141391,141393,141395],{"class":53,"line":54},[51,141374,2154],{"class":72},[51,141376,2564],{"class":52264},[51,141378,56203],{"class":68},[51,141380,108],{"class":72},[51,141382,135033],{"class":282},[51,141384,56211],{"class":68},[51,141386,108],{"class":72},[51,141388,135040],{"class":282},[51,141390,135043],{"class":68},[51,141392,108],{"class":72},[51,141394,135048],{"class":282},[51,141396,52271],{"class":72},[40,141398,140975],{},[29,141400,141401],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,141402,141403],{"__ignoreMap":35},[51,141404,141405,141407,141409,141411,141413,141415,141417,141419,141421,141423,141425,141427],{"class":53,"line":54},[51,141406,2154],{"class":72},[51,141408,2564],{"class":52264},[51,141410,56203],{"class":68},[51,141412,108],{"class":72},[51,141414,135033],{"class":282},[51,141416,56211],{"class":68},[51,141418,108],{"class":72},[51,141420,135040],{"class":282},[51,141422,135043],{"class":68},[51,141424,108],{"class":72},[51,141426,135048],{"class":282},[51,141428,52271],{"class":72},[1233,141430,141432],{"id":141431},"_1612-推荐模块制作","16.1.2 推荐模块制作",[2564,141434],{"style":127372,"src":141435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[40,141437,141438,141439,141442],{},"大盒子 ",[37,141440,141441],{},"recom"," 推荐模块 recommend",[1000,141444,141445],{},[22,141446,141447,141448,141450,141451,141454],{},"给这个 ",[37,141449,141441],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[37,141452,141453],{},"#ebebeb","），设置距离上边 12px",[40,141456,140886],{},[29,141458,141460],{"className":127516,"code":141459,"language":127518,"meta":35,"style":35},"div {\n  background-color: #f0f0f0;\n}\n",[37,141461,141462,141468,141479],{"__ignoreMap":35},[51,141463,141464,141466],{"class":53,"line":54},[51,141465,52575],{"class":52264},[51,141467,16534],{"class":72},[51,141469,141470,141472,141474,141477],{"class":53,"line":61},[51,141471,71842],{"class":175},[51,141473,52401],{"class":72},[51,141475,141476],{"class":175},"#f0f0f0",[51,141478,179],{"class":72},[51,141480,141481],{"class":53,"line":93},[51,141482,132],{"class":72},[40,141484,140975],{},[29,141486,141487],{"className":127516,"code":141459,"language":127518,"meta":35,"style":35},[37,141488,141489,141495,141505],{"__ignoreMap":35},[51,141490,141491,141493],{"class":53,"line":54},[51,141492,52575],{"class":52264},[51,141494,16534],{"class":72},[51,141496,141497,141499,141501,141503],{"class":53,"line":61},[51,141498,71842],{"class":175},[51,141500,52401],{"class":72},[51,141502,141476],{"class":175},[51,141504,179],{"class":72},[51,141506,141507],{"class":53,"line":93},[51,141508,132],{"class":72},[40,141510,141511],{},"里面包含 2 个盒子， 浮动即可",[40,141513,140886],{},[29,141515,141516],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},[37,141517,141518,141524,141534],{"__ignoreMap":35},[51,141519,141520,141522],{"class":53,"line":54},[51,141521,131364],{"class":68},[51,141523,16534],{"class":72},[51,141525,141526,141528,141530,141532],{"class":53,"line":61},[51,141527,131996],{"class":175},[51,141529,52401],{"class":72},[51,141531,24699],{"class":175},[51,141533,179],{"class":72},[51,141535,141536],{"class":53,"line":93},[51,141537,132],{"class":72},[40,141539,141540,141541],{},"1 号盒子 ",[37,141542,141543],{},"recom_hd",[1000,141545,141546,141549],{},[22,141547,141548],{},"设置宽度205px，高度163px",[22,141550,141020,141551,141553],{},[37,141552,2564],{},"标签，插入图片即可",[40,141555,140886],{},[29,141557,141558],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,141559,141560],{"__ignoreMap":35},[51,141561,141562,141564,141566,141568,141570,141572,141574,141576,141578,141580,141582,141584],{"class":53,"line":54},[51,141563,2154],{"class":72},[51,141565,2564],{"class":52264},[51,141567,56203],{"class":68},[51,141569,108],{"class":72},[51,141571,135033],{"class":282},[51,141573,56211],{"class":68},[51,141575,108],{"class":72},[51,141577,135040],{"class":282},[51,141579,135043],{"class":68},[51,141581,108],{"class":72},[51,141583,135048],{"class":282},[51,141585,52271],{"class":72},[40,141587,140975],{},[29,141589,141590],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,141591,141592],{"__ignoreMap":35},[51,141593,141594,141596,141598,141600,141602,141604,141606,141608,141610,141612,141614,141616],{"class":53,"line":54},[51,141595,2154],{"class":72},[51,141597,2564],{"class":52264},[51,141599,56203],{"class":68},[51,141601,108],{"class":72},[51,141603,135033],{"class":282},[51,141605,56211],{"class":68},[51,141607,108],{"class":72},[51,141609,135040],{"class":282},[51,141611,135043],{"class":68},[51,141613,108],{"class":72},[51,141615,135048],{"class":282},[51,141617,52271],{"class":72},[40,141619,141620,141621,141624],{},"2 号盒子 ",[37,141622,141623],{},"recom_bd"," ，注意里面的小竖线",[1000,141626,141627,141638,141641,141646,141651],{},[22,141628,141629,141630,141632,141633,141635,141636],{},"右侧结构里面放 ",[37,141631,1000],{}," 包含 4个 ",[37,141634,22],{},"，每个li里面包含一个",[37,141637,2564],{},[22,141639,141640],{},"直接利用切片工具把里面的内容当成一张图片",[22,141642,140016,141643,141645],{},[37,141644,22],{}," 设置浮动",[22,141647,140016,141648,141650],{},[37,141649,2564],{}," 设置宽高，宽度 248px，高度 163px",[22,141652,141653,141654,141214,141657,141659,141660,141662,141663],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[37,141655,141656],{},"top 10px",[37,141658,22],{},"设置相对定位（注意，最后一个",[37,141661,22],{},"不用设置伪元素），可以利用 ",[37,141664,141665],{},"nth-child(-n+3){...}",[40,141667,140886],{},[29,141669,141670],{"className":127516,"code":139358,"language":127518,"meta":35,"style":35},[37,141671,141672,141680,141690,141700],{"__ignoreMap":35},[51,141673,141674,141676,141678],{"class":53,"line":54},[51,141675,52575],{"class":52264},[51,141677,138517],{"class":68},[51,141679,16534],{"class":72},[51,141681,141682,141684,141686,141688],{"class":53,"line":61},[51,141683,138524],{"class":175},[51,141685,52401],{"class":72},[51,141687,8614],{"class":282},[51,141689,179],{"class":72},[51,141691,141692,141694,141696,141698],{"class":53,"line":93},[51,141693,129132],{"class":175},[51,141695,52401],{"class":72},[51,141697,61833],{"class":175},[51,141699,179],{"class":72},[51,141701,141702],{"class":53,"line":99},[51,141703,132],{"class":72},[40,141705,140975],{},[29,141707,141708],{"className":127516,"code":139358,"language":127518,"meta":35,"style":35},[37,141709,141710,141718,141728,141738],{"__ignoreMap":35},[51,141711,141712,141714,141716],{"class":53,"line":54},[51,141713,52575],{"class":52264},[51,141715,138517],{"class":68},[51,141717,16534],{"class":72},[51,141719,141720,141722,141724,141726],{"class":53,"line":61},[51,141721,138524],{"class":175},[51,141723,52401],{"class":72},[51,141725,8614],{"class":282},[51,141727,179],{"class":72},[51,141729,141730,141732,141734,141736],{"class":53,"line":93},[51,141731,129132],{"class":175},[51,141733,52401],{"class":72},[51,141735,61833],{"class":175},[51,141737,179],{"class":72},[51,141739,141740],{"class":53,"line":99},[51,141741,132],{"class":72},[1233,141743,141745],{"id":141744},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[2564,141747],{"style":127372,"src":141748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[40,141750,141751],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[40,141753,141754],{},"第一楼是家用电器模块： 里面包含两个盒子",[40,141756,141757,141760],{},[37,141758,141759],{},"box_hd"," 制作",[40,141762,141540,141763,141765],{},[37,141764,141759],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[2564,141767],{"style":127372,"src":141768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1000,141770,141771,141776,141781,141784],{},[22,141772,141773,141775],{},[37,141774,141759],{}," 给 30px 的高度，2个像素的下边框",[22,141777,141778,141779],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[37,141780,140027],{},[22,141782,141783],{},"左侧盒左浮动，右侧盒子右浮动",[22,141785,141786,141788,141789,141791],{},[37,141787,981],{},"标签之间的距离用左右的",[37,141790,31847],{},"撑开即可",[40,141793,141794],{},"结构代码",[29,141796,141797],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},[37,141798,141799,141805,141815],{"__ignoreMap":35},[51,141800,141801,141803],{"class":53,"line":54},[51,141802,131364],{"class":68},[51,141804,16534],{"class":72},[51,141806,141807,141809,141811,141813],{"class":53,"line":61},[51,141808,131996],{"class":175},[51,141810,52401],{"class":72},[51,141812,24699],{"class":175},[51,141814,179],{"class":72},[51,141816,141817],{"class":53,"line":93},[51,141818,132],{"class":72},[40,141820,141821],{},"样式代码",[29,141823,141824],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},[37,141825,141826,141832,141842],{"__ignoreMap":35},[51,141827,141828,141830],{"class":53,"line":54},[51,141829,131364],{"class":68},[51,141831,16534],{"class":72},[51,141833,141834,141836,141838,141840],{"class":53,"line":61},[51,141835,131996],{"class":175},[51,141837,52401],{"class":72},[51,141839,24699],{"class":175},[51,141841,179],{"class":72},[51,141843,141844],{"class":53,"line":93},[51,141845,132],{"class":72},[40,141847,141848,141760],{},[37,141849,141850],{},"box_bd",[40,141852,141853],{},"2 号盒子 box_bd，不要给高度",[2564,141855],{"style":127372,"src":141856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[40,141858,141859],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[40,141861,141862],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[40,141864,141865],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1000,141867,141868,141880,141896],{},[22,141869,141870,141872,141873,141876,141877,141879],{},[37,141871,141850],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[37,141874,141875],{},"tab_content","，在",[37,141878,141875],{}," 里面包裹tab选项卡对应的内容",[22,141881,141882,141883,141886,141887,141889,141890,141892,141893,141895],{},"内容被一个大盒子包裹（",[37,141884,141885],{},"tab_list_item","），里面是 ",[37,141888,1000],{}," 包裹 5个 ",[37,141891,22],{},"，每个",[37,141894,22],{},"设置对应的宽度，然后设置浮动",[22,141897,141898,141899,141901,141902,141904,141905],{},"而这5个",[37,141900,22],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[37,141903,22],{},"设置",[1000,141906,141907,141925,141928],{},[22,141908,141909,141910,141912,141913,141915,141916,141918,141919,141921,141922,141924],{},"第一个小 ",[37,141911,22],{}," 分为上下结构，上面是 ",[37,141914,1000],{}," 包裹 ",[37,141917,22],{}," ，",[37,141920,22],{},"里面包裹 ",[37,141923,981],{},"，下面插入一张图片",[22,141926,141927],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[22,141929,141930,141931,141933,141934,141936,141937,141939],{},"后面的小 ",[37,141932,22],{}," 里面先放一个",[37,141935,981],{},"标签，然后在",[37,141938,981],{},"标签里面插入图片即可",[40,141941,141794],{},[29,141943,141944],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,141945,141946],{"__ignoreMap":35},[51,141947,141948,141950,141952,141954,141956,141958,141960,141962,141964,141966,141968,141970],{"class":53,"line":54},[51,141949,2154],{"class":72},[51,141951,2564],{"class":52264},[51,141953,56203],{"class":68},[51,141955,108],{"class":72},[51,141957,135033],{"class":282},[51,141959,56211],{"class":68},[51,141961,108],{"class":72},[51,141963,135040],{"class":282},[51,141965,135043],{"class":68},[51,141967,108],{"class":72},[51,141969,135048],{"class":282},[51,141971,52271],{"class":72},[40,141973,141821],{},[29,141975,141976],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,141977,141978],{"__ignoreMap":35},[51,141979,141980,141982,141984,141986,141988,141990,141992,141994,141996,141998,142000,142002],{"class":53,"line":54},[51,141981,2154],{"class":72},[51,141983,2564],{"class":52264},[51,141985,56203],{"class":68},[51,141987,108],{"class":72},[51,141989,135033],{"class":282},[51,141991,56211],{"class":68},[51,141993,108],{"class":72},[51,141995,135040],{"class":282},[51,141997,135043],{"class":68},[51,141999,108],{"class":72},[51,142001,135048],{"class":282},[51,142003,52271],{"class":72},[40,142005,142006],{},"tab栏切换需求！！！！！！介绍：",[2564,142008],{"style":127372,"src":142009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1000,142011,142012,142020,142026,142029],{},[22,142013,142014,142017,142018],{},[37,142015,142016],{},"tab","栏的布局是 ",[37,142019,140027],{},[22,142021,142022,142023,142025],{},"有多少个",[37,142024,142016],{},"选项卡，那么对应就有多少个内容",[22,142027,142028],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[22,142030,142031,142032,142035,142036,142038,142039,142041],{},"等后面我们学习了",[37,142033,142034],{},"js","之后，我们就会配合",[37,142037,142034],{},"来实现，",[37,142040,142016],{},"栏的切换",[14,142043,142045],{"id":142044},"_162-列表制作","16.2 列表制作",[1233,142047,142049],{"id":142048},"_1621-准备工作","16.2.1 准备工作",[1000,142051,142052,142055,142058,142061],{},[22,142053,142054],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[22,142056,142057],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[22,142059,142060],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[22,142062,142063],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[1233,142065,142067,142068,101982,142070,142072],{"id":142066},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[37,142069,132521],{},[37,142071,54677],{}," 修改",[2564,142074],{"style":127372,"src":142075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1000,142077,142078],{},[22,142079,142080],{},"秒杀盒子 sk（ second kill ） 定位即可",[40,142082,140886],{},[29,142084,142085],{"className":127516,"code":132948,"language":127518,"meta":35,"style":35},[37,142086,142087,142091,142105,142109,142123,142127,142141,142145,142159,142163],{"__ignoreMap":35},[51,142088,142089],{"class":53,"line":54},[51,142090,132955],{"class":57},[51,142092,142093,142095,142097,142099,142101,142103],{"class":53,"line":61},[51,142094,132960],{"class":68},[51,142096,80771],{"class":72},[51,142098,129876],{"class":175},[51,142100,52401],{"class":72},[51,142102,132969],{"class":175},[51,142104,130446],{"class":72},[51,142106,142107],{"class":53,"line":93},[51,142108,132976],{"class":57},[51,142110,142111,142113,142115,142117,142119,142121],{"class":53,"line":99},[51,142112,132981],{"class":68},[51,142114,80771],{"class":72},[51,142116,129876],{"class":175},[51,142118,52401],{"class":72},[51,142120,55728],{"class":175},[51,142122,130446],{"class":72},[51,142124,142125],{"class":53,"line":120},[51,142126,132996],{"class":57},[51,142128,142129,142131,142133,142135,142137,142139],{"class":53,"line":129},[51,142130,133001],{"class":68},[51,142132,80771],{"class":72},[51,142134,129876],{"class":175},[51,142136,52401],{"class":72},[51,142138,55795],{"class":175},[51,142140,130446],{"class":72},[51,142142,142143],{"class":53,"line":206},[51,142144,133016],{"class":57},[51,142146,142147,142149,142151,142153,142155,142157],{"class":53,"line":212},[51,142148,133021],{"class":68},[51,142150,80771],{"class":72},[51,142152,129876],{"class":175},[51,142154,52401],{"class":72},[51,142156,87197],{"class":175},[51,142158,130446],{"class":72},[51,142160,142161],{"class":53,"line":227},[51,142162,133036],{"class":57},[51,142164,142165,142167,142169,142171,142173,142175],{"class":53,"line":370},[51,142166,133041],{"class":68},[51,142168,80771],{"class":72},[51,142170,129876],{"class":175},[51,142172,52401],{"class":72},[51,142174,133050],{"class":175},[51,142176,130446],{"class":72},[40,142178,140975],{},[29,142180,142181],{"className":127516,"code":132948,"language":127518,"meta":35,"style":35},[37,142182,142183,142187,142201,142205,142219,142223,142237,142241,142255,142259],{"__ignoreMap":35},[51,142184,142185],{"class":53,"line":54},[51,142186,132955],{"class":57},[51,142188,142189,142191,142193,142195,142197,142199],{"class":53,"line":61},[51,142190,132960],{"class":68},[51,142192,80771],{"class":72},[51,142194,129876],{"class":175},[51,142196,52401],{"class":72},[51,142198,132969],{"class":175},[51,142200,130446],{"class":72},[51,142202,142203],{"class":53,"line":93},[51,142204,132976],{"class":57},[51,142206,142207,142209,142211,142213,142215,142217],{"class":53,"line":99},[51,142208,132981],{"class":68},[51,142210,80771],{"class":72},[51,142212,129876],{"class":175},[51,142214,52401],{"class":72},[51,142216,55728],{"class":175},[51,142218,130446],{"class":72},[51,142220,142221],{"class":53,"line":120},[51,142222,132996],{"class":57},[51,142224,142225,142227,142229,142231,142233,142235],{"class":53,"line":129},[51,142226,133001],{"class":68},[51,142228,80771],{"class":72},[51,142230,129876],{"class":175},[51,142232,52401],{"class":72},[51,142234,55795],{"class":175},[51,142236,130446],{"class":72},[51,142238,142239],{"class":53,"line":206},[51,142240,133016],{"class":57},[51,142242,142243,142245,142247,142249,142251,142253],{"class":53,"line":212},[51,142244,133021],{"class":68},[51,142246,80771],{"class":72},[51,142248,129876],{"class":175},[51,142250,52401],{"class":72},[51,142252,87197],{"class":175},[51,142254,130446],{"class":72},[51,142256,142257],{"class":53,"line":227},[51,142258,133036],{"class":57},[51,142260,142261,142263,142265,142267,142269,142271],{"class":53,"line":370},[51,142262,133041],{"class":68},[51,142264,80771],{"class":72},[51,142266,129876],{"class":175},[51,142268,52401],{"class":72},[51,142270,133050],{"class":175},[51,142272,130446],{"class":72},[1000,142274,142275,142286],{},[22,142276,142277,142278,142281,142282,101982,142284],{},"1 号盒子左侧浮动 ",[37,142279,142280],{},"sk_list"," 里面包含 ",[37,142283,1000],{},[37,142285,22],{},[22,142287,142288,142289,142281,142292,101982,142294],{},"2 号盒子左侧浮动 ",[37,142290,142291],{},"sk_con",[37,142293,1000],{},[37,142295,22],{},[40,142297,140886],{},[29,142299,142300],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},[37,142301,142302,142308,142318],{"__ignoreMap":35},[51,142303,142304,142306],{"class":53,"line":54},[51,142305,131364],{"class":68},[51,142307,16534],{"class":72},[51,142309,142310,142312,142314,142316],{"class":53,"line":61},[51,142311,131996],{"class":175},[51,142313,52401],{"class":72},[51,142315,24699],{"class":175},[51,142317,179],{"class":72},[51,142319,142320],{"class":53,"line":93},[51,142321,132],{"class":72},[40,142323,140975],{},[29,142325,142326],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},[37,142327,142328,142334,142344],{"__ignoreMap":35},[51,142329,142330,142332],{"class":53,"line":54},[51,142331,131364],{"class":68},[51,142333,16534],{"class":72},[51,142335,142336,142338,142340,142342],{"class":53,"line":61},[51,142337,131996],{"class":175},[51,142339,52401],{"class":72},[51,142341,24699],{"class":175},[51,142343,179],{"class":72},[51,142345,142346],{"class":53,"line":93},[51,142347,132],{"class":72},[1233,142349,142351,142352],{"id":142350},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[37,142353,142354],{},"sk_container",[2564,142356],{"style":127372,"src":142357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1000,142359,142360,142365],{},[22,142361,141540,142362,142364],{},[37,142363,142354],{}," 给宽度 1200，不要给高度",[22,142366,142367],{},"一定不要忘记清除浮动",[40,142369,140886],{},[29,142371,142372],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},[37,142373,142374,142380,142390],{"__ignoreMap":35},[51,142375,142376,142378],{"class":53,"line":54},[51,142377,131364],{"class":68},[51,142379,16534],{"class":72},[51,142381,142382,142384,142386,142388],{"class":53,"line":61},[51,142383,131996],{"class":175},[51,142385,52401],{"class":72},[51,142387,24699],{"class":175},[51,142389,179],{"class":72},[51,142391,142392],{"class":53,"line":93},[51,142393,132],{"class":72},[19,142395,142396],{},[22,142397,142398],{},"sk_hd制作",[1000,142400,142401],{},[22,142402,141620,142403,142406],{},[37,142404,142405],{},"sk_hd"," ，插入图片即可",[40,142408,140886],{},[29,142410,142411],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,142412,142413],{"__ignoreMap":35},[51,142414,142415,142417,142419,142421,142423,142425,142427,142429,142431,142433,142435,142437],{"class":53,"line":54},[51,142416,2154],{"class":72},[51,142418,2564],{"class":52264},[51,142420,56203],{"class":68},[51,142422,108],{"class":72},[51,142424,135033],{"class":282},[51,142426,56211],{"class":68},[51,142428,108],{"class":72},[51,142430,135040],{"class":282},[51,142432,135043],{"class":68},[51,142434,108],{"class":72},[51,142436,135048],{"class":282},[51,142438,52271],{"class":72},[19,142440,142441],{"start":61},[22,142442,142443],{},"sk_bd制作",[1000,142445,142446],{},[22,142447,142448,142449,142452,142453,101982,142455,142457],{},"3 号盒子 ",[37,142450,142451],{},"sk_bd"," ，里面包含很多的 ",[37,142454,1000],{},[37,142456,22],{},[1000,142458,142459,142468],{},[22,142460,142461,142462,142464,142465,142467],{},"当鼠标移入到 ",[37,142463,22],{}," 上面的时候显示红色的边框，在这里先给 ",[37,142466,22],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[22,142469,142470,142471,142473,142474,142476,142477,142480,142481,142483],{},"由于给每个 ",[37,142472,22],{}," 都设置了外边距，导致一行的最后一个 ",[37,142475,22],{}," 掉了下来，在这里我们利用 ",[37,142478,142479],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[37,142482,22],{},"，去掉外边距就好了",[40,142485,140886],{},[29,142487,142488],{"className":127516,"code":139705,"language":127518,"meta":35,"style":35},[37,142489,142490,142496,142508],{"__ignoreMap":35},[51,142491,142492,142494],{"class":53,"line":54},[51,142493,52575],{"class":52264},[51,142495,16534],{"class":72},[51,142497,142498,142500,142502,142504,142506],{"class":53,"line":61},[51,142499,71434],{"class":175},[51,142501,52401],{"class":72},[51,142503,176],{"class":175},[51,142505,52520],{"class":175},[51,142507,179],{"class":72},[51,142509,142510],{"class":53,"line":93},[51,142511,132],{"class":72},[40,142513,140975],{},[29,142515,142516],{"className":127516,"code":139705,"language":127518,"meta":35,"style":35},[37,142517,142518,142524,142536],{"__ignoreMap":35},[51,142519,142520,142522],{"class":53,"line":54},[51,142521,52575],{"class":52264},[51,142523,16534],{"class":72},[51,142525,142526,142528,142530,142532,142534],{"class":53,"line":61},[51,142527,71434],{"class":175},[51,142529,52401],{"class":72},[51,142531,176],{"class":175},[51,142533,52520],{"class":175},[51,142535,179],{"class":72},[51,142537,142538],{"class":53,"line":93},[51,142539,132],{"class":72},[14,142541,142543],{"id":142542},"_163-注册页面制作","16.3 注册页面制作",[2564,142545],{"style":127372,"src":142546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[40,142548,142549,142551],{},[840,142550,9987],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[2564,142553],{"style":127372,"src":142554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[1233,142556,142558],{"id":142557},"_1631-准备工作","16.3.1 准备工作",[1000,142560,142561,142564],{},[22,142562,142563],{},"创建register.html，引入 base.css，引入favicon图标",[22,142565,142566],{},"创建register.css ，在html页面进行引入",[1233,142568,142570,142571,142573],{"id":142569},"_1632-header-头部实现","16.3.2 ",[37,142572,132521],{}," 头部实现",[1000,142575,142576,142579],{},[22,142577,142578],{},"整个内容用 版心 进行包裹",[22,142580,142581],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[40,142583,140886],{},[29,142585,142586],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,142587,142588],{"__ignoreMap":35},[51,142589,142590,142592,142594,142596,142598,142600,142602,142604,142606,142608,142610,142612],{"class":53,"line":54},[51,142591,2154],{"class":72},[51,142593,2564],{"class":52264},[51,142595,56203],{"class":68},[51,142597,108],{"class":72},[51,142599,135033],{"class":282},[51,142601,56211],{"class":68},[51,142603,108],{"class":72},[51,142605,135040],{"class":282},[51,142607,135043],{"class":68},[51,142609,108],{"class":72},[51,142611,135048],{"class":282},[51,142613,52271],{"class":72},[40,142615,140975],{},[29,142617,142618],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,142619,142620],{"__ignoreMap":35},[51,142621,142622,142624,142626,142628,142630,142632,142634,142636,142638,142640,142642,142644],{"class":53,"line":54},[51,142623,2154],{"class":72},[51,142625,2564],{"class":52264},[51,142627,56203],{"class":68},[51,142629,108],{"class":72},[51,142631,135033],{"class":282},[51,142633,56211],{"class":68},[51,142635,108],{"class":72},[51,142637,135040],{"class":282},[51,142639,135043],{"class":68},[51,142641,108],{"class":72},[51,142643,135048],{"class":282},[51,142645,52271],{"class":72},[1233,142647,142649,142650,142653],{"id":142648},"_1633-registerarea-主体模块实现","16.3.3 ",[37,142651,142652],{},"registerarea"," 主体模块实现",[2564,142655],{"style":127372,"src":142656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[40,142658,142659],{},"整个大盒子 高度为 522px，设置4个边框",[40,142661,140886],{},[29,142663,142664],{"className":127516,"code":131673,"language":127518,"meta":35,"style":35},[37,142665,142666,142672,142688],{"__ignoreMap":35},[51,142667,142668,142670],{"class":53,"line":54},[51,142669,52575],{"class":52264},[51,142671,16534],{"class":72},[51,142673,142674,142676,142678,142680,142682,142684,142686],{"class":53,"line":61},[51,142675,71860],{"class":175},[51,142677,52401],{"class":72},[51,142679,791],{"class":175},[51,142681,52456],{"class":64},[51,142683,52485],{"class":175},[51,142685,130908],{"class":175},[51,142687,179],{"class":72},[51,142689,142690],{"class":53,"line":93},[51,142691,132],{"class":72},[40,142693,140975],{},[29,142695,142696],{"className":127516,"code":131673,"language":127518,"meta":35,"style":35},[37,142697,142698,142704,142720],{"__ignoreMap":35},[51,142699,142700,142702],{"class":53,"line":54},[51,142701,52575],{"class":52264},[51,142703,16534],{"class":72},[51,142705,142706,142708,142710,142712,142714,142716,142718],{"class":53,"line":61},[51,142707,71860],{"class":175},[51,142709,52401],{"class":72},[51,142711,791],{"class":175},[51,142713,52456],{"class":64},[51,142715,52485],{"class":175},[51,142717,130908],{"class":175},[51,142719,179],{"class":72},[51,142721,142722],{"class":53,"line":93},[51,142723,132],{"class":72},[40,142725,142726],{},"1号盒子 是一个 h3 标签，放标题",[1000,142728,142729],{},[22,142730,142731],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[40,142733,140886],{},[29,142735,142736],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},[37,142737,142738,142744,142754],{"__ignoreMap":35},[51,142739,142740,142742],{"class":53,"line":54},[51,142741,131364],{"class":68},[51,142743,16534],{"class":72},[51,142745,142746,142748,142750,142752],{"class":53,"line":61},[51,142747,131996],{"class":175},[51,142749,52401],{"class":72},[51,142751,24699],{"class":175},[51,142753,179],{"class":72},[51,142755,142756],{"class":53,"line":93},[51,142757,132],{"class":72},[40,142759,140975],{},[29,142761,142762],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},[37,142763,142764,142770,142780],{"__ignoreMap":35},[51,142765,142766,142768],{"class":53,"line":54},[51,142767,131364],{"class":68},[51,142769,16534],{"class":72},[51,142771,142772,142774,142776,142778],{"class":53,"line":61},[51,142773,131996],{"class":175},[51,142775,52401],{"class":72},[51,142777,24699],{"class":175},[51,142779,179],{"class":72},[51,142781,142782],{"class":53,"line":93},[51,142783,132],{"class":72},[40,142785,142786],{},"2号盒子 里面放注册的内容",[1000,142788,142789,142792,142801,142815,142828,142831,142834,142852,142866],{},[22,142790,142791],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[22,142793,142794,142795,142797,142798,142800],{},"里面的内容利用 ",[37,142796,1000],{}," 包含 ",[37,142799,22],{}," 来实现的（不需要用表格）",[22,142802,140030,142803,142805,142806,142808,142809,142811,142812,142814],{},[37,142804,22],{}," 里面，左侧放 ",[37,142807,34572],{}," 标签， 中间放",[37,142810,54785],{}," 标签， 右侧放 ",[37,142813,51],{}," 提示信息",[22,142816,142817,142818,142820,142821,142823,142824,142827],{},"左侧 ",[37,142819,34572],{},"里面的文字都是右对齐，我们可以给",[37,142822,34572],{},"设置一个宽度（88px），然后利用",[37,142825,142826],{},"text-align"," 来设置右对齐",[22,142829,142830],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[22,142832,142833],{},"右侧 span修饰一下文字颜色",[22,142835,142836,142837],{},"提示信息的样式优化",[1000,142838,142839,142842,142845],{},[22,142840,142841],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[22,142843,142844],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[22,142846,142847,142848,142851],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[37,142849,142850],{},"vertical-algin"," 来设置 图片与文字对齐方式",[22,142853,142854,142855],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1000,142856,142857,142863],{},[22,142858,142859,142860,142862],{},"设置 ",[37,142861,24516],{}," 的 左右 12px 的内边距，设置一下文字颜色",[22,142864,142865],{},"分别设置 背景颜色",[22,142867,142868,142869,142871],{},"同意协议 和 完成注册 都是用 ",[37,142870,22],{}," 进行包裹",[40,142873,140886],{},[29,142875,142876],{"className":127516,"code":141459,"language":127518,"meta":35,"style":35},[37,142877,142878,142884,142894],{"__ignoreMap":35},[51,142879,142880,142882],{"class":53,"line":54},[51,142881,52575],{"class":52264},[51,142883,16534],{"class":72},[51,142885,142886,142888,142890,142892],{"class":53,"line":61},[51,142887,71842],{"class":175},[51,142889,52401],{"class":72},[51,142891,141476],{"class":175},[51,142893,179],{"class":72},[51,142895,142896],{"class":53,"line":93},[51,142897,132],{"class":72},[40,142899,140975],{},[29,142901,142902],{"className":127516,"code":141459,"language":127518,"meta":35,"style":35},[37,142903,142904,142910,142920],{"__ignoreMap":35},[51,142905,142906,142908],{"class":53,"line":54},[51,142907,52575],{"class":52264},[51,142909,16534],{"class":72},[51,142911,142912,142914,142916,142918],{"class":53,"line":61},[51,142913,71842],{"class":175},[51,142915,52401],{"class":72},[51,142917,141476],{"class":175},[51,142919,179],{"class":72},[51,142921,142922],{"class":53,"line":93},[51,142923,132],{"class":72},[1233,142925,142927],{"id":142926},"_1634-底部实现","16.3.4 底部实现",[40,142929,140886],{},[29,142931,142932],{"className":127516,"code":141459,"language":127518,"meta":35,"style":35},[37,142933,142934,142940,142950],{"__ignoreMap":35},[51,142935,142936,142938],{"class":53,"line":54},[51,142937,52575],{"class":52264},[51,142939,16534],{"class":72},[51,142941,142942,142944,142946,142948],{"class":53,"line":61},[51,142943,71842],{"class":175},[51,142945,52401],{"class":72},[51,142947,141476],{"class":175},[51,142949,179],{"class":72},[51,142951,142952],{"class":53,"line":93},[51,142953,132],{"class":72},[40,142955,140975],{},[29,142957,142958],{"className":128263,"code":131620,"language":128265,"meta":35,"style":35},[37,142959,142960,142964,142978,142982],{"__ignoreMap":35},[51,142961,142962],{"class":53,"line":54},[51,142963,131627],{"class":57},[51,142965,142966,142968,142970,142972,142974,142976],{"class":53,"line":61},[51,142967,2154],{"class":72},[51,142969,52575],{"class":52264},[51,142971,54450],{"class":68},[51,142973,108],{"class":72},[51,142975,131640],{"class":282},[51,142977,52271],{"class":72},[51,142979,142980],{"class":53,"line":93},[51,142981,131647],{"class":72},[51,142983,142984,142986,142988],{"class":53,"line":99},[51,142985,52749],{"class":72},[51,142987,52575],{"class":52264},[51,142989,52271],{"class":72},[14,142991,142993],{"id":142992},"_164-项目总结","16.4 项目总结",[19,142995,142996,142999,143002,143005],{},[22,142997,142998],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[22,143000,143001],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[22,143003,143004],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[22,143006,143007],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[2564,143009],{"style":127372,"src":143010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[19,143012,143013],{"start":120},[22,143014,143015],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[2564,143017],{"style":127372,"src":143018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[19,143020,143021],{"start":129},[22,143022,143023],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[2564,143025],{"style":127372,"src":143026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[29,143028,143029],{"className":128263,"code":137673,"language":128265,"meta":35,"style":35},[37,143030,143031],{"__ignoreMap":35},[51,143032,143033,143035,143037,143039,143041,143043,143045,143047,143049,143051,143053,143055],{"class":53,"line":54},[51,143034,2154],{"class":72},[51,143036,54785],{"class":52264},[51,143038,54788],{"class":68},[51,143040,108],{"class":72},[51,143042,63663],{"class":282},[51,143044,15882],{"class":68},[51,143046,108],{"class":72},[51,143048,137694],{"class":282},[51,143050,61984],{"class":68},[51,143052,108],{"class":72},[51,143054,137701],{"class":282},[51,143056,52271],{"class":72},[19,143058,143059,143062],{"start":206},[22,143060,143061],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[22,143063,143064],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1179,143066,143067],{},"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":35,"searchDepth":61,"depth":61,"links":143069},[143070,143075,143082,143090],{"id":140696,"depth":61,"text":140697,"children":143071},[143072,143073,143074],{"id":140700,"depth":93,"text":140701},{"id":141431,"depth":93,"text":141432},{"id":141744,"depth":93,"text":141745},{"id":142044,"depth":61,"text":142045,"children":143076},[143077,143078,143080],{"id":142048,"depth":93,"text":142049},{"id":142066,"depth":93,"text":143079},"16.2.2 列表页 header 和 nav 修改",{"id":142350,"depth":93,"text":143081},"16.2.3 列表页主体 sk_container",{"id":142542,"depth":61,"text":142543,"children":143083},[143084,143085,143087,143089],{"id":142557,"depth":93,"text":142558},{"id":142569,"depth":93,"text":143086},"16.3.2 header 头部实现",{"id":142648,"depth":93,"text":143088},"16.3.3 registerarea 主体模块实现",{"id":142926,"depth":93,"text":142927},{"id":142992,"depth":61,"text":142993},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140688,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143097,"title":143098,"body":143099,"description":24339,"extension":1190,"meta":143207,"navigation":1192,"path":143208,"seo":143209,"stem":143210,"__hash__":143211},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143100,"toc":143202},[143101,143104,143108,143111,143114,143123,143132,143136,143141,143148,143166,143169,143172,143175,143178,143181,143184,143187,143190,143193,143196,143199],[10,143102,143098],{"id":143103},"_17-web服务器与网站发布",[14,143105,143107],{"id":143106},"_171-web服务器","17.1 Web服务器",[40,143109,143110],{},"把自己网站上传到服务器上，可以让其他人访问",[2564,143112],{"style":127372,"src":143113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[40,143115,143116,143119,143120],{},[840,143117,143118],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[840,143121,143122],{},"Web 服务器等",[40,143124,143125,143126,101982,143129,26704],{},"根据服务器在网络中所在的位置不同，又可分为 ",[840,143127,143128],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[840,143130,143131],{},"远程服务器",[1233,143133,143135],{"id":143134},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[40,143137,143138],{},[840,143139,143140],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[40,143142,143143,143144],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[981,143145,143146],{"href":143146,"rel":143147},"http:\u002F\u002Ffree.3v.do\u002F",[24828],[1000,143149,143150,143153,143156,143163],{},[22,143151,143152],{},"去免费空间网站注册账号。",[22,143154,143155],{},"记录下主机名、用户名、密码、域名。",[22,143157,143158,143159,143162],{},"利用 ",[37,143160,143161],{},"utftp"," 软件 上传网站到远程服务器",[22,143164,143165],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[40,143167,143168],{},"使用软件上传，对上传软件文件进行解压",[2564,143170],{"style":127372,"src":143171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[2564,143173],{"style":127372,"src":143174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[40,143176,143177],{},"输入刚刚申请的服务器账号信息：",[2564,143179],{"style":127372,"src":143180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[2564,143182],{"style":127372,"src":143183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[2564,143185],{"style":127372,"src":143186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[2564,143188],{"style":127372,"src":143189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[40,143191,143192],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[2564,143194],{"style":127372,"src":143195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[40,143197,143198],{},"浏览器输入域名即可访问",[40,143200,143201],{},"首页一定必须是index",{"title":35,"searchDepth":61,"depth":61,"links":143203},[143204],{"id":143106,"depth":61,"text":143107,"children":143205},[143206],{"id":143134,"depth":93,"text":143135},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143098,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143213,"title":143214,"body":143215,"description":24339,"extension":1190,"meta":144142,"navigation":1192,"path":144143,"seo":144144,"stem":144145,"__hash__":144146},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143216,"toc":144125},[143217,143220,143224,143227,143230,143241,143244,143248,143252,143257,143260,143263,143266,143269,143273,143299,143303,143307,143310,143313,143317,143350,143354,143357,143360,143424,143428,143432,143435,143438,143441,143445,143490,143494,143497,143527,143531,143535,143538,143541,143545,143548,143617,143620,143728,143730,143736,143740,143743,143746,143842,143845,143849,143873,143877,143880,143884,143887,143891,143894,143897,143900,143903,143907,143910,143913,143917,143921,143924,143927,143930,143933,143937,143940,143944,143947,143950,143995,143999,144003,144006,144009,144012,144044,144048,144051,144085,144089,144092,144122],[10,143218,143214],{"id":143219},"_18-2d动画与3d转换",[14,143221,143223],{"id":143222},"_181-css3-2d转换","18.1 CSS3 2D转换",[40,143225,143226],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[40,143228,143229],{},"转换（transform）你可以简单理解为变形",[1000,143231,143232,143235,143238],{},[22,143233,143234],{},"移动：translate",[22,143236,143237],{},"旋转：rotate",[22,143239,143240],{},"缩放：scale",[2564,143242],{"style":127372,"src":143243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[1233,143245,143247],{"id":143246},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22960,143249,143251],{"id":143250},"_18111-translate介绍","18.1.1.1 translate介绍",[40,143253,143254,143255],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[840,143256,134175],{},[2564,143258],{"style":127372,"src":143259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[40,143261,143262],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[40,143264,143265],{},"对于行内元素无效",[40,143267,143268],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22960,143270,143272],{"id":143271},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[29,143274,143275],{"className":127516,"code":139705,"language":127518,"meta":35,"style":35},[37,143276,143277,143283,143295],{"__ignoreMap":35},[51,143278,143279,143281],{"class":53,"line":54},[51,143280,52575],{"class":52264},[51,143282,16534],{"class":72},[51,143284,143285,143287,143289,143291,143293],{"class":53,"line":61},[51,143286,71434],{"class":175},[51,143288,52401],{"class":72},[51,143290,176],{"class":175},[51,143292,52520],{"class":175},[51,143294,179],{"class":72},[51,143296,143297],{"class":53,"line":93},[51,143298,132],{"class":72},[1233,143300,143302],{"id":143301},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22960,143304,143306],{"id":143305},"_18121-rotate介绍","18.1.2.1 rotate介绍",[40,143308,143309],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[2564,143311],{"style":127372,"src":143312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22960,143314,143316],{"id":143315},"_18122-旋转效果","18.1.2.2 旋转效果",[29,143318,143320],{"className":127516,"code":143319,"language":127518,"meta":35,"style":35},"div {\n  transform: rotate(45deg);\n}\n",[37,143321,143322,143328,143346],{"__ignoreMap":35},[51,143323,143324,143326],{"class":53,"line":54},[51,143325,52575],{"class":52264},[51,143327,16534],{"class":72},[51,143329,143330,143332,143334,143337,143339,143341,143344],{"class":53,"line":61},[51,143331,137500],{"class":175},[51,143333,52401],{"class":72},[51,143335,143336],{"class":175},"rotate",[51,143338,73],{"class":72},[51,143340,1775],{"class":175},[51,143342,143343],{"class":64},"deg",[51,143345,615],{"class":72},[51,143347,143348],{"class":53,"line":93},[51,143349,132],{"class":72},[22960,143351,143353],{"id":143352},"_18123-三角做法","18.1.2.3 三角做法",[40,143355,143356],{},"该下标当经过最外层大盒子时会实现向上反转",[2564,143358],{"style":127372,"src":143359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[29,143361,143362],{"className":127516,"code":136036,"language":127518,"meta":35,"style":35},[37,143363,143364,143368,143374,143384,143394,143410,143420],{"__ignoreMap":35},[51,143365,143366],{"class":53,"line":54},[51,143367,136043],{"class":57},[51,143369,143370,143372],{"class":53,"line":61},[51,143371,136048],{"class":68},[51,143373,16534],{"class":72},[51,143375,143376,143378,143380,143382],{"class":53,"line":93},[51,143377,71532],{"class":175},[51,143379,52401],{"class":72},[51,143381,176],{"class":175},[51,143383,179],{"class":72},[51,143385,143386,143388,143390,143392],{"class":53,"line":99},[51,143387,71752],{"class":175},[51,143389,52401],{"class":72},[51,143391,176],{"class":175},[51,143393,179],{"class":72},[51,143395,143396,143398,143400,143402,143404,143406,143408],{"class":53,"line":120},[51,143397,71860],{"class":175},[51,143399,52401],{"class":72},[51,143401,443],{"class":175},[51,143403,52456],{"class":64},[51,143405,52485],{"class":175},[51,143407,64955],{"class":175},[51,143409,179],{"class":72},[51,143411,143412,143414,143416,143418],{"class":53,"line":129},[51,143413,136091],{"class":175},[51,143415,52401],{"class":72},[51,143417,63333],{"class":175},[51,143419,179],{"class":72},[51,143421,143422],{"class":53,"line":206},[51,143423,132],{"class":72},[1233,143425,143427],{"id":143426},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22960,143429,143431],{"id":143430},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[40,143433,143434],{},"设置中心点",[2564,143436],{"style":127372,"src":143437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[40,143439,143440],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22960,143442,143444],{"id":143443},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[29,143446,143448],{"className":127516,"code":143447,"language":127518,"meta":35,"style":35},"\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",[37,143449,143450,143455,143461,143476,143481,143486],{"__ignoreMap":35},[51,143451,143452],{"class":53,"line":54},[51,143453,143454],{"class":57},"\u002F* 转换中心点 *\u002F\n",[51,143456,143457,143459],{"class":53,"line":61},[51,143458,52575],{"class":52264},[51,143460,16534],{"class":72},[51,143462,143463,143466,143468,143470,143472,143474],{"class":53,"line":93},[51,143464,143465],{"class":175},"  transform-origin",[51,143467,52401],{"class":72},[51,143469,52556],{"class":175},[51,143471,18106],{"class":175},[51,143473,131379],{"class":72},[51,143475,136189],{"class":57},[51,143477,143478],{"class":53,"line":99},[51,143479,143480],{"class":57},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[51,143482,143483],{"class":53,"line":120},[51,143484,143485],{"class":57},"  \u002F* transform-origin: left top; *\u002F\n",[51,143487,143488],{"class":53,"line":129},[51,143489,132],{"class":72},[22960,143491,143493],{"id":143492},"_18133-旋转案例","18.1.3.3 旋转案例",[2564,143495],{"style":127372,"src":143496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[29,143498,143499],{"className":127516,"code":143319,"language":127518,"meta":35,"style":35},[37,143500,143501,143507,143523],{"__ignoreMap":35},[51,143502,143503,143505],{"class":53,"line":54},[51,143504,52575],{"class":52264},[51,143506,16534],{"class":72},[51,143508,143509,143511,143513,143515,143517,143519,143521],{"class":53,"line":61},[51,143510,137500],{"class":175},[51,143512,52401],{"class":72},[51,143514,143336],{"class":175},[51,143516,73],{"class":72},[51,143518,1775],{"class":175},[51,143520,143343],{"class":64},[51,143522,615],{"class":72},[51,143524,143525],{"class":53,"line":93},[51,143526,132],{"class":72},[1233,143528,143530],{"id":143529},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22960,143532,143534],{"id":143533},"_18141-scale介绍","18.1.4.1 scale介绍",[40,143536,143537],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[2564,143539],{"style":127372,"src":143540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22960,143542,143544],{"id":143543},"_18142-分页按钮","18.1.4.2 分页按钮",[2564,143546],{"style":127372,"src":143547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[29,143549,143551],{"className":127516,"code":143550,"language":127518,"meta":35,"style":35},"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",[37,143552,143553,143559,143575,143579,143583,143588,143594,143608,143613],{"__ignoreMap":35},[51,143554,143555,143557],{"class":53,"line":54},[51,143556,52575],{"class":52264},[51,143558,16534],{"class":72},[51,143560,143561,143563,143565,143568,143570,143573],{"class":53,"line":61},[51,143562,137500],{"class":175},[51,143564,52401],{"class":72},[51,143566,143567],{"class":175},"scale",[51,143569,73],{"class":72},[51,143571,143572],{"class":175},"1.2",[51,143574,615],{"class":72},[51,143576,143577],{"class":53,"line":93},[51,143578,132],{"class":72},[51,143580,143581],{"class":53,"line":99},[51,143582,136977],{"class":72},[51,143584,143585],{"class":53,"line":120},[51,143586,143587],{"class":57},"\u002F* 2D 缩放 *\u002F\n",[51,143589,143590,143592],{"class":53,"line":129},[51,143591,52575],{"class":52264},[51,143593,16534],{"class":72},[51,143595,143596,143598,143600,143602,143604,143606],{"class":53,"line":206},[51,143597,137500],{"class":175},[51,143599,52401],{"class":72},[51,143601,143567],{"class":175},[51,143603,73],{"class":72},[51,143605,143572],{"class":175},[51,143607,615],{"class":72},[51,143609,143610],{"class":53,"line":212},[51,143611,143612],{"class":57},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[51,143614,143615],{"class":53,"line":227},[51,143616,132],{"class":72},[40,143618,143619],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[29,143621,143623],{"className":127516,"code":143622,"language":127518,"meta":35,"style":35},"\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",[37,143624,143625,143630,143640,143661,143682,143686,143691,143697,143724],{"__ignoreMap":35},[51,143626,143627],{"class":53,"line":54},[51,143628,143629],{"class":57},"\u002F* 定义动画 *\u002F\n",[51,143631,143632,143635,143638],{"class":53,"line":61},[51,143633,143634],{"class":64},"@keyframes",[51,143636,143637],{"class":78}," move",[51,143639,16534],{"class":72},[51,143641,143642,143645,143647,143649,143651,143654,143656,143658],{"class":53,"line":93},[51,143643,143644],{"class":68},"  0%",[51,143646,80771],{"class":72},[51,143648,49098],{"class":175},[51,143650,52401],{"class":72},[51,143652,143653],{"class":175},"translateX",[51,143655,73],{"class":72},[51,143657,176],{"class":175},[51,143659,143660],{"class":72},"); }\n",[51,143662,143663,143666,143668,143670,143672,143674,143676,143678,143680],{"class":53,"line":99},[51,143664,143665],{"class":68},"  100%",[51,143667,80771],{"class":72},[51,143669,49098],{"class":175},[51,143671,52401],{"class":72},[51,143673,143653],{"class":175},[51,143675,73],{"class":72},[51,143677,612],{"class":175},[51,143679,52456],{"class":64},[51,143681,143660],{"class":72},[51,143683,143684],{"class":53,"line":120},[51,143685,132],{"class":72},[51,143687,143688],{"class":53,"line":129},[51,143689,143690],{"class":57},"\u002F* 调用动画 *\u002F\n",[51,143692,143693,143695],{"class":53,"line":206},[51,143694,52575],{"class":52264},[51,143696,16534],{"class":72},[51,143698,143699,143702,143704,143706,143708,143710,143712,143714,143716,143719,143722],{"class":53,"line":212},[51,143700,143701],{"class":175},"  animation",[51,143703,52401],{"class":72},[51,143705,136202],{"class":175},[51,143707,26082],{"class":175},[51,143709,1941],{"class":64},[51,143711,79644],{"class":175},[51,143713,5169],{"class":175},[51,143715,1941],{"class":64},[51,143717,143718],{"class":175}," infinite",[51,143720,143721],{"class":175}," alternate",[51,143723,179],{"class":72},[51,143725,143726],{"class":53,"line":227},[51,143727,132],{"class":72},[40,143729,143619],{},[29,143731,143734],{"className":143732,"code":143733,"language":34},[32],"\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",[37,143735,143733],{"__ignoreMap":35},[22960,143737,143739],{"id":143738},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[40,143741,143742],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[2564,143744],{"style":127372,"src":143745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[29,143747,143748],{"className":127516,"code":143622,"language":127518,"meta":35,"style":35},[37,143749,143750,143754,143762,143780,143800,143804,143808,143814,143838],{"__ignoreMap":35},[51,143751,143752],{"class":53,"line":54},[51,143753,143629],{"class":57},[51,143755,143756,143758,143760],{"class":53,"line":61},[51,143757,143634],{"class":64},[51,143759,143637],{"class":78},[51,143761,16534],{"class":72},[51,143763,143764,143766,143768,143770,143772,143774,143776,143778],{"class":53,"line":93},[51,143765,143644],{"class":68},[51,143767,80771],{"class":72},[51,143769,49098],{"class":175},[51,143771,52401],{"class":72},[51,143773,143653],{"class":175},[51,143775,73],{"class":72},[51,143777,176],{"class":175},[51,143779,143660],{"class":72},[51,143781,143782,143784,143786,143788,143790,143792,143794,143796,143798],{"class":53,"line":99},[51,143783,143665],{"class":68},[51,143785,80771],{"class":72},[51,143787,49098],{"class":175},[51,143789,52401],{"class":72},[51,143791,143653],{"class":175},[51,143793,73],{"class":72},[51,143795,612],{"class":175},[51,143797,52456],{"class":64},[51,143799,143660],{"class":72},[51,143801,143802],{"class":53,"line":120},[51,143803,132],{"class":72},[51,143805,143806],{"class":53,"line":129},[51,143807,143690],{"class":57},[51,143809,143810,143812],{"class":53,"line":206},[51,143811,52575],{"class":52264},[51,143813,16534],{"class":72},[51,143815,143816,143818,143820,143822,143824,143826,143828,143830,143832,143834,143836],{"class":53,"line":212},[51,143817,143701],{"class":175},[51,143819,52401],{"class":72},[51,143821,136202],{"class":175},[51,143823,26082],{"class":175},[51,143825,1941],{"class":64},[51,143827,79644],{"class":175},[51,143829,5169],{"class":175},[51,143831,1941],{"class":64},[51,143833,143718],{"class":175},[51,143835,143721],{"class":175},[51,143837,179],{"class":72},[51,143839,143840],{"class":53,"line":227},[51,143841,132],{"class":72},[40,143843,143844],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[1233,143846,143848],{"id":143847},"_1823-知识点回顾","18.2.3 知识点回顾",[29,143850,143851],{"className":127516,"code":129685,"language":127518,"meta":35,"style":35},[37,143852,143853,143859,143869],{"__ignoreMap":35},[51,143854,143855,143857],{"class":53,"line":54},[51,143856,52575],{"class":52264},[51,143858,16534],{"class":72},[51,143860,143861,143863,143865,143867],{"class":53,"line":61},[51,143862,129698],{"class":175},[51,143864,52401],{"class":72},[51,143866,62700],{"class":175},[51,143868,179],{"class":72},[51,143870,143871],{"class":53,"line":93},[51,143872,132],{"class":72},[14,143874,143876],{"id":143875},"_183-3d-转换","18.3 3D 转换",[40,143878,143879],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[1233,143881,143883],{"id":143882},"_1831-坐标轴认识","18.3.1 坐标轴认识",[2564,143885],{"style":127372,"src":143886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[1233,143888,143890],{"id":143889},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[2564,143892],{"style":127372,"src":143893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[40,143895,143896],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[40,143898,143899],{},"translate3d的效果需要搭配透视perspective来使用",[2564,143901],{"style":127372,"src":143902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[1233,143904,143906],{"id":143905},"_1833-透视-perspective","18.3.3 透视 perspective",[2564,143908],{"style":127372,"src":143909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[40,143911,143912],{},"透视写在父盒子上，单位为像素",[1233,143914,143916],{"id":143915},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22960,143918,143920],{"id":143919},"_18341-分开解释","18.3.4.1 分开解释",[2564,143922],{"style":127372,"src":143923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[2564,143925],{"style":127372,"src":143926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[2564,143928],{"style":127372,"src":143929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[40,143931,143932],{},"总结来说就是左手原则",[22960,143934,143936],{"id":143935},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[2564,143938],{"style":127372,"src":143939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[1233,143941,143943],{"id":143942},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[2564,143945],{"style":127372,"src":143946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[2564,143948],{"style":127372,"src":143949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[29,143951,143953],{"className":127516,"code":143952,"language":127518,"meta":35,"style":35},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[37,143954,143955,143961,143974,143991],{"__ignoreMap":35},[51,143956,143957,143959],{"class":53,"line":54},[51,143958,52575],{"class":52264},[51,143960,16534],{"class":72},[51,143962,143963,143966,143968,143970,143972],{"class":53,"line":61},[51,143964,143965],{"class":175},"  perspective",[51,143967,52401],{"class":72},[51,143969,66038],{"class":175},[51,143971,52456],{"class":64},[51,143973,179],{"class":72},[51,143975,143976,143978,143980,143983,143985,143987,143989],{"class":53,"line":93},[51,143977,137500],{"class":175},[51,143979,52401],{"class":72},[51,143981,143982],{"class":175},"rotateX",[51,143984,73],{"class":72},[51,143986,1775],{"class":175},[51,143988,143343],{"class":64},[51,143990,615],{"class":72},[51,143992,143993],{"class":53,"line":99},[51,143994,132],{"class":72},[1233,143996,143998],{"id":143997},"_1836-案例","18.3.6 案例",[22960,144000,144002],{"id":144001},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[2564,144004],{"style":127372,"src":144005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[2564,144007],{"style":127372,"src":144008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[2564,144010],{"style":127372,"src":144011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[29,144013,144015],{"className":127516,"code":144014,"language":127518,"meta":35,"style":35},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[37,144016,144017,144022,144028,144040],{"__ignoreMap":35},[51,144018,144019],{"class":53,"line":54},[51,144020,144021],{"class":57},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[51,144023,144024,144026],{"class":53,"line":61},[51,144025,134513],{"class":68},[51,144027,16534],{"class":72},[51,144029,144030,144032,144034,144036,144038],{"class":53,"line":93},[51,144031,143965],{"class":175},[51,144033,52401],{"class":72},[51,144035,66038],{"class":175},[51,144037,52456],{"class":64},[51,144039,179],{"class":72},[51,144041,144042],{"class":53,"line":99},[51,144043,132],{"class":72},[22960,144045,144047],{"id":144046},"_18362-3d导航栏","18.3.6.2 3D导航栏",[2564,144049],{"style":127372,"src":144050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[29,144052,144053],{"className":128263,"code":131620,"language":128265,"meta":35,"style":35},[37,144054,144055,144059,144073,144077],{"__ignoreMap":35},[51,144056,144057],{"class":53,"line":54},[51,144058,131627],{"class":57},[51,144060,144061,144063,144065,144067,144069,144071],{"class":53,"line":61},[51,144062,2154],{"class":72},[51,144064,52575],{"class":52264},[51,144066,54450],{"class":68},[51,144068,108],{"class":72},[51,144070,131640],{"class":282},[51,144072,52271],{"class":72},[51,144074,144075],{"class":53,"line":93},[51,144076,131647],{"class":72},[51,144078,144079,144081,144083],{"class":53,"line":99},[51,144080,52749],{"class":72},[51,144082,52575],{"class":52264},[51,144084,52271],{"class":72},[22960,144086,144088],{"id":144087},"_18363-旋转木马","18.3.6.3 旋转木马",[2564,144090],{"style":127372,"src":144091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[29,144093,144094],{"className":127516,"code":143319,"language":127518,"meta":35,"style":35},[37,144095,144096,144102,144118],{"__ignoreMap":35},[51,144097,144098,144100],{"class":53,"line":54},[51,144099,52575],{"class":52264},[51,144101,16534],{"class":72},[51,144103,144104,144106,144108,144110,144112,144114,144116],{"class":53,"line":61},[51,144105,137500],{"class":175},[51,144107,52401],{"class":72},[51,144109,143336],{"class":175},[51,144111,73],{"class":72},[51,144113,1775],{"class":175},[51,144115,143343],{"class":64},[51,144117,615],{"class":72},[51,144119,144120],{"class":53,"line":93},[51,144121,132],{"class":72},[1179,144123,144124],{},"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":35,"searchDepth":61,"depth":61,"links":144126},[144127,144134],{"id":143222,"depth":61,"text":143223,"children":144128},[144129,144130,144131,144132,144133],{"id":143246,"depth":93,"text":143247},{"id":143301,"depth":93,"text":143302},{"id":143426,"depth":93,"text":143427},{"id":143529,"depth":93,"text":143530},{"id":143847,"depth":93,"text":143848},{"id":143875,"depth":61,"text":143876,"children":144135},[144136,144137,144138,144139,144140,144141],{"id":143882,"depth":93,"text":143883},{"id":143889,"depth":93,"text":143890},{"id":143905,"depth":93,"text":143906},{"id":143915,"depth":93,"text":143916},{"id":143942,"depth":93,"text":143943},{"id":143997,"depth":93,"text":143998},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143214,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144148,"title":144149,"body":144150,"description":24339,"extension":1190,"meta":144353,"navigation":1192,"path":144354,"seo":144355,"stem":144356,"__hash__":144357},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144151,"toc":144342},[144152,144155,144159,144162,144165,144169,144172,144175,144178,144182,144185,144189,144192,144196,144199,144203,144217,144221,144246,144249,144252,144269,144273,144277,144280,144283,144287,144290,144293,144311,144315,144318,144332,144336,144339],[10,144153,144149],{"id":144154},"_19-移动端基础-前缀现状与视口",[14,144156,144158],{"id":144157},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[2564,144160],{"style":127372,"src":144161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[40,144163,144164],{},"意思就是加个前缀，增加兼容性",[14,144166,144168],{"id":144167},"_192-移动端现状认识","19.2 移动端现状认识",[2564,144170],{"style":127372,"src":144171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[40,144173,144174],{},"调试方法：",[2564,144176],{"style":127372,"src":144177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144179,144181],{"id":144180},"_193-视口","19.3 视口",[40,144183,144184],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[1233,144186,144188],{"id":144187},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[2564,144190],{"style":127372,"src":144191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[1233,144193,144195],{"id":144194},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[2564,144197],{"style":127372,"src":144198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[1233,144200,144202],{"id":144201},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1000,144204,144205,144208,144211,144214],{},[22,144206,144207],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[22,144209,144210],{},"理想视口，对设备来讲，是最理想的视口尺寸",[22,144212,144213],{},"需要手动添写meta视口标签通知浏览器操作",[22,144215,144216],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[1233,144218,144220],{"id":144219},"_1934-meta视口标签","19.3.4 meta视口标签",[29,144222,144224],{"className":128263,"code":144223,"language":128265,"meta":35,"style":35},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[37,144225,144226],{"__ignoreMap":35},[51,144227,144228,144230,144232,144234,144236,144238,144240,144242,144244],{"class":53,"line":54},[51,144229,2154],{"class":72},[51,144231,52308],{"class":52264},[51,144233,15882],{"class":68},[51,144235,108],{"class":72},[51,144237,52355],{"class":282},[51,144239,52335],{"class":68},[51,144241,108],{"class":72},[51,144243,52362],{"class":282},[51,144245,52271],{"class":72},[2564,144247],{"style":127372,"src":144248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[40,144250,144251],{},"标准视口设置：",[19,144253,144254,144257,144260,144263,144266],{},[22,144255,144256],{},"视口宽度和设备保持一致",[22,144258,144259],{},"视口的默认缩放比例1.0",[22,144261,144262],{},"不允许用户自行缩放",[22,144264,144265],{},"最大允许的缩放比例1.0",[22,144267,144268],{},"最小允许的缩放比例1.0",[1233,144270,144272],{"id":144271},"_1935-二倍图","19.3.5 二倍图",[22960,144274,144276],{"id":144275},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[2564,144278],{"style":127372,"src":144279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[2564,144281],{"style":127372,"src":144282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22960,144284,144286],{"id":144285},"_19352-多倍图","19.3.5.2 多倍图",[2564,144288],{"style":127372,"src":144289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[40,144291,144292],{},"二倍图法，代码如下：",[29,144294,144296],{"className":127516,"code":144295,"language":127518,"meta":35,"style":35},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[37,144297,144298,144303],{"__ignoreMap":35},[51,144299,144300],{"class":53,"line":54},[51,144301,144302],{"class":57},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[51,144304,144305,144308],{"class":53,"line":61},[51,144306,144307],{"class":52264},"background-size",[51,144309,144310],{"class":72},": 50% 50%;\n",[22960,144312,144314],{"id":144313},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[2564,144316],{"style":127372,"src":144317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[19,144319,144320,144323,144326,144329],{},[22,144321,144322],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[22,144324,144325],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[22,144327,144328],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[22,144330,144331],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22960,144333,144335],{"id":144334},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[2564,144337],{"style":127372,"src":144338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1179,144340,144341],{},"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":35,"searchDepth":61,"depth":61,"links":144343},[144344,144345,144346],{"id":144157,"depth":61,"text":144158},{"id":144167,"depth":61,"text":144168},{"id":144180,"depth":61,"text":144181,"children":144347},[144348,144349,144350,144351,144352],{"id":144187,"depth":93,"text":144188},{"id":144194,"depth":93,"text":144195},{"id":144201,"depth":93,"text":144202},{"id":144219,"depth":93,"text":144220},{"id":144271,"depth":93,"text":144272},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144149,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144359,"title":144360,"body":144361,"description":24339,"extension":1190,"meta":145238,"navigation":1192,"path":145239,"seo":145240,"stem":145241,"__hash__":145242},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144362,"toc":145222},[144363,144366,144370,144377,144380,144387,144390,144395,144398,144402,144406,144413,144416,144419,144423,144426,144429,144432,144435,144438,144442,144445,144449,144451,144454,144457,144460,144463,144465,144468,144470,144500,144502,144532,144536,144539,144543,144546,144563,144566,144569,144645,144647,144650,144653,144656,144659,144661,144664,144667,144671,144693,144696,144699,144703,144706,144712,144715,144719,144722,144725,144729,144732,144735,144738,144742,144745,144748,144751,144754,144758,144761,144765,144772,144775,144778,144781,144784,144794,144797,144800,144807,144810,144814,144817,144820,144824,144827,144830,144833,144878,144881,144884,144887,144889,145018,145020,145058,145061,145064,145066,145184,145186,145220],[10,144364,144360],{"id":144365},"_20-移动端布局实战上篇",[14,144367,144369],{"id":144368},"_201-移动端主流方案","20.1 移动端主流方案",[19,144371,144372],{},[22,144373,144374],{},[840,144375,144376],{},"单独移动端页面（主流）",[2564,144378],{"style":127372,"src":144379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[19,144381,144382],{"start":61},[22,144383,144384],{},[840,144385,144386],{},"响应式兼容PC移动端",[2564,144388],{"style":127372,"src":144389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[19,144391,144392],{"start":93},[22,144393,144394],{},"两种页面选型布局方式",[2564,144396],{"style":127372,"src":144397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144399,144401],{"id":144400},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[1233,144403,144405],{"id":144404},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[40,144407,144408,144409],{},"官网地址： ",[981,144410,144411],{"href":144411,"rel":144412},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24828],[2564,144414],{"style":127372,"src":144415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[2564,144417],{"style":127372,"src":144418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[1233,144420,144422],{"id":144421},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[2564,144424],{"style":127372,"src":144425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[2564,144427],{"style":127372,"src":144428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[40,144430,144431],{},"去除高亮：",[40,144433,144434],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[40,144436,144437],{},"-webkit- tap-highlight-color: transparent;",[14,144439,144441],{"id":144440},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[2564,144443],{"style":127372,"src":144444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144446,144448],{"id":144447},"_204-流式布局案例","20.4 流式布局案例",[40,144450,1290],{},[40,144452,144453],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[40,144455,144456],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[40,144458,144459],{},"图片格式：",[2564,144461],{"style":127372,"src":144462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[40,144464,136559],{},[2564,144466],{"style":127372,"src":144467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[40,144469,140886],{},[29,144471,144472],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,144473,144474],{"__ignoreMap":35},[51,144475,144476,144478,144480,144482,144484,144486,144488,144490,144492,144494,144496,144498],{"class":53,"line":54},[51,144477,2154],{"class":72},[51,144479,2564],{"class":52264},[51,144481,56203],{"class":68},[51,144483,108],{"class":72},[51,144485,135033],{"class":282},[51,144487,56211],{"class":68},[51,144489,108],{"class":72},[51,144491,135040],{"class":282},[51,144493,135043],{"class":68},[51,144495,108],{"class":72},[51,144497,135048],{"class":282},[51,144499,52271],{"class":72},[40,144501,140975],{},[29,144503,144504],{"className":128263,"code":135018,"language":128265,"meta":35,"style":35},[37,144505,144506],{"__ignoreMap":35},[51,144507,144508,144510,144512,144514,144516,144518,144520,144522,144524,144526,144528,144530],{"class":53,"line":54},[51,144509,2154],{"class":72},[51,144511,2564],{"class":52264},[51,144513,56203],{"class":68},[51,144515,108],{"class":72},[51,144517,135033],{"class":282},[51,144519,56211],{"class":68},[51,144521,108],{"class":72},[51,144523,135040],{"class":282},[51,144525,135043],{"class":68},[51,144527,108],{"class":72},[51,144529,135048],{"class":282},[51,144531,52271],{"class":72},[14,144533,144535],{"id":144534},"_205-flex布局","20.5 flex布局",[2564,144537],{"style":127372,"src":144538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[1233,144540,144542],{"id":144541},"_2051-布局原理","20.5.1 布局原理",[40,144544,144545],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1000,144547,144548,144551,144554,144557,144560],{},[22,144549,144550],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[22,144552,144553],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[22,144555,144556],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[22,144558,144559],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[22,144561,144562],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[40,144564,144565],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[40,144567,144568],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[29,144570,144572],{"className":127516,"code":144571,"language":127518,"meta":35,"style":35},"\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",[37,144573,144574,144579,144586,144596,144608,144619,144630,144641],{"__ignoreMap":35},[51,144575,144576],{"class":53,"line":54},[51,144577,144578],{"class":57},"\u002F* Flex 弹性布局 *\u002F\n",[51,144580,144581,144584],{"class":53,"line":61},[51,144582,144583],{"class":68},".container",[51,144585,16534],{"class":72},[51,144587,144588,144590,144592,144594],{"class":53,"line":93},[51,144589,129132],{"class":175},[51,144591,52401],{"class":72},[51,144593,52441],{"class":175},[51,144595,179],{"class":72},[51,144597,144598,144601,144603,144606],{"class":53,"line":99},[51,144599,144600],{"class":175},"  flex-direction",[51,144602,52401],{"class":72},[51,144604,144605],{"class":175},"row",[51,144607,179],{"class":72},[51,144609,144610,144613,144615,144617],{"class":53,"line":120},[51,144611,144612],{"class":175},"  justify-content",[51,144614,52401],{"class":72},[51,144616,52632],{"class":175},[51,144618,179],{"class":72},[51,144620,144621,144624,144626,144628],{"class":53,"line":129},[51,144622,144623],{"class":175},"  align-items",[51,144625,52401],{"class":72},[51,144627,52556],{"class":175},[51,144629,179],{"class":72},[51,144631,144632,144635,144637,144639],{"class":53,"line":206},[51,144633,144634],{"class":175},"  flex-wrap",[51,144636,52401],{"class":72},[51,144638,79574],{"class":175},[51,144640,179],{"class":72},[51,144642,144643],{"class":53,"line":212},[51,144644,132],{"class":72},[40,144646,71417],{},[40,144648,144649],{},".form-item .male-label {",[40,144651,144652],{},"   margin-right: 20px;",[40,144654,144655],{},"   display: inline-flex;",[40,144657,144658],{},"   align-items: center;",[40,144660,2190],{},[2564,144662],{"style":127372,"src":144663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[2564,144665],{"style":127372,"src":144666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[1233,144668,144670],{"id":144669},"_2052-常见父项属性","20.5.2 常见父项属性",[19,144672,144673,144676,144679,144682,144685,144688,144691],{},[22,144674,144675],{},"flex-direction：设置主轴的方向",[22,144677,144678],{},"justify-content：设置主轴上的子元素排列方式",[22,144680,144681],{},"flex-wrap：设置子元素是否换行",[22,144683,144684],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[22,144686,144687],{},"align-items：设置侧轴上的子元素排列方式（单行）",[22,144689,144690],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[22,144692,144675],{},[2564,144694],{"style":127372,"src":144695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[2564,144697],{"style":127372,"src":144698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[19,144700,144701],{"start":61},[22,144702,144678],{},[2564,144704],{"style":127372,"src":144705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[40,144707,144708,144711],{},[37,144709,144710],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[40,144713,144714],{},"跟着主轴走",[19,144716,144717],{"start":93},[22,144718,144681],{},[2564,144720],{"style":127372,"src":144721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[40,144723,144724],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[19,144726,144727],{"start":99},[22,144728,144684],{},[2564,144730],{"style":127372,"src":144731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[40,144733,144734],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[40,144736,144737],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[19,144739,144740],{"start":120},[22,144741,144687],{},[2564,144743],{"style":127372,"src":144744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[40,144746,144747],{},"align-items与align-content之间的区别：",[40,144749,144750],{},"单找items，多找content",[2564,144752],{"style":127372,"src":144753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[19,144755,144756],{"start":129},[22,144757,144690],{},[2564,144759],{"style":127372,"src":144760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[1233,144762,144764],{"id":144763},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[19,144766,144767],{},[22,144768,144769],{},[840,144770,144771],{},"flex 属性",[40,144773,144774],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[2564,144776],{"style":127372,"src":144777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[40,144779,144780],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[40,144782,144783],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[19,144785,144786],{"start":61},[22,144787,144788,14757,144791],{},[840,144789,144790],{},"align-self",[840,144792,144793],{},"控制子项自己在侧轴上的排列方式",[2564,144795],{"style":127372,"src":144796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[40,144798,144799],{},"单个子盒子在父盒子侧轴上的排列方式",[19,144801,144802],{"start":93},[22,144803,144804,144806],{},[840,144805,96261],{}," 属性定义项目的排列顺序",[2564,144808],{"style":127372,"src":144809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[1233,144811,144813],{"id":144812},"_2054-背景线性渐变","20.5.4 背景线性渐变",[2564,144815],{"style":127372,"src":144816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[40,144818,144819],{},"必须要添加浏览器的私有前缀",[1233,144821,144823],{"id":144822},"_2055-携程网首页案例","20.5.5 携程网首页案例",[40,144825,144826],{},"学到最重要的知识：",[40,144828,144829],{},"flex处理这样的布局思路",[2564,144831],{"style":127372,"src":144832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[29,144834,144836],{"className":127516,"code":144835,"language":127518,"meta":35,"style":35},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[37,144837,144838,144844,144854,144864,144874],{"__ignoreMap":35},[51,144839,144840,144842],{"class":53,"line":54},[51,144841,144583],{"class":68},[51,144843,16534],{"class":72},[51,144845,144846,144848,144850,144852],{"class":53,"line":61},[51,144847,129132],{"class":175},[51,144849,52401],{"class":72},[51,144851,52441],{"class":175},[51,144853,179],{"class":72},[51,144855,144856,144858,144860,144862],{"class":53,"line":93},[51,144857,144612],{"class":175},[51,144859,52401],{"class":72},[51,144861,52556],{"class":175},[51,144863,179],{"class":72},[51,144865,144866,144868,144870,144872],{"class":53,"line":99},[51,144867,144623],{"class":175},[51,144869,52401],{"class":72},[51,144871,52556],{"class":175},[51,144873,179],{"class":72},[51,144875,144876],{"class":53,"line":120},[51,144877,132],{"class":72},[40,144879,144880],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[40,144882,144883],{},"使用属性选择器",[2564,144885],{"style":127372,"src":144886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[40,144888,69853],{},[29,144890,144892],{"className":128263,"code":144891,"language":128265,"meta":35,"style":35},"\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",[37,144893,144894,144899,144913,144918,144938,144943,144962,144967,144986,144991,145010],{"__ignoreMap":35},[51,144895,144896],{"class":53,"line":54},[51,144897,144898],{"class":57},"\u003C!-- 携程网移动端案例结构 -->\n",[51,144900,144901,144903,144905,144907,144909,144911],{"class":53,"line":61},[51,144902,2154],{"class":72},[51,144904,52575],{"class":52264},[51,144906,54450],{"class":68},[51,144908,108],{"class":72},[51,144910,93287],{"class":282},[51,144912,52271],{"class":72},[51,144914,144915],{"class":53,"line":93},[51,144916,144917],{"class":57},"  \u003C!-- 搜索栏 -->\n",[51,144919,144920,144922,144924,144926,144928,144931,144934,144936],{"class":53,"line":99},[51,144921,53108],{"class":72},[51,144923,52575],{"class":52264},[51,144925,54450],{"class":68},[51,144927,108],{"class":72},[51,144929,144930],{"class":282},"\"search-index\"",[51,144932,144933],{"class":72},">...\u003C\u002F",[51,144935,52575],{"class":52264},[51,144937,52271],{"class":72},[51,144939,144940],{"class":53,"line":120},[51,144941,144942],{"class":57},"  \u003C!-- 焦点图 -->\n",[51,144944,144945,144947,144949,144951,144953,144956,144958,144960],{"class":53,"line":129},[51,144946,53108],{"class":72},[51,144948,52575],{"class":52264},[51,144950,54450],{"class":68},[51,144952,108],{"class":72},[51,144954,144955],{"class":282},"\"focus\"",[51,144957,144933],{"class":72},[51,144959,52575],{"class":52264},[51,144961,52271],{"class":72},[51,144963,144964],{"class":53,"line":206},[51,144965,144966],{"class":57},"  \u003C!-- 主导航 -->\n",[51,144968,144969,144971,144973,144975,144977,144980,144982,144984],{"class":53,"line":212},[51,144970,53108],{"class":72},[51,144972,52575],{"class":52264},[51,144974,54450],{"class":68},[51,144976,108],{"class":72},[51,144978,144979],{"class":282},"\"local-nav\"",[51,144981,144933],{"class":72},[51,144983,52575],{"class":52264},[51,144985,52271],{"class":72},[51,144987,144988],{"class":53,"line":227},[51,144989,144990],{"class":57},"  \u003C!-- 子导航 -->\n",[51,144992,144993,144995,144997,144999,145001,145004,145006,145008],{"class":53,"line":370},[51,144994,53108],{"class":72},[51,144996,52575],{"class":52264},[51,144998,54450],{"class":68},[51,145000,108],{"class":72},[51,145002,145003],{"class":282},"\"nav-common\"",[51,145005,144933],{"class":72},[51,145007,52575],{"class":52264},[51,145009,52271],{"class":72},[51,145011,145012,145014,145016],{"class":53,"line":387},[51,145013,52749],{"class":72},[51,145015,52575],{"class":52264},[51,145017,52271],{"class":72},[40,145019,71417],{},[29,145021,145022],{"className":127516,"code":137968,"language":127518,"meta":35,"style":35},[37,145023,145024,145038,145054],{"__ignoreMap":35},[51,145025,145026,145028,145030,145032,145034,145036],{"class":53,"line":54},[51,145027,54785],{"class":52264},[51,145029,2134],{"class":72},[51,145031,104071],{"class":68},[51,145033,108],{"class":64},[51,145035,63663],{"class":282},[51,145037,137985],{"class":72},[51,145039,145040,145042,145044,145046,145048,145050,145052],{"class":53,"line":61},[51,145041,71860],{"class":175},[51,145043,52401],{"class":72},[51,145045,791],{"class":175},[51,145047,52456],{"class":64},[51,145049,52485],{"class":175},[51,145051,131096],{"class":175},[51,145053,179],{"class":72},[51,145055,145056],{"class":53,"line":93},[51,145057,132],{"class":72},[40,145059,145060],{},"总代码和效果展示：",[2564,145062],{"style":127372,"src":145063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[40,145065,69853],{},[29,145067,145068],{"className":128263,"code":144891,"language":128265,"meta":35,"style":35},[37,145069,145070,145074,145088,145092,145110,145114,145132,145136,145154,145158,145176],{"__ignoreMap":35},[51,145071,145072],{"class":53,"line":54},[51,145073,144898],{"class":57},[51,145075,145076,145078,145080,145082,145084,145086],{"class":53,"line":61},[51,145077,2154],{"class":72},[51,145079,52575],{"class":52264},[51,145081,54450],{"class":68},[51,145083,108],{"class":72},[51,145085,93287],{"class":282},[51,145087,52271],{"class":72},[51,145089,145090],{"class":53,"line":93},[51,145091,144917],{"class":57},[51,145093,145094,145096,145098,145100,145102,145104,145106,145108],{"class":53,"line":99},[51,145095,53108],{"class":72},[51,145097,52575],{"class":52264},[51,145099,54450],{"class":68},[51,145101,108],{"class":72},[51,145103,144930],{"class":282},[51,145105,144933],{"class":72},[51,145107,52575],{"class":52264},[51,145109,52271],{"class":72},[51,145111,145112],{"class":53,"line":120},[51,145113,144942],{"class":57},[51,145115,145116,145118,145120,145122,145124,145126,145128,145130],{"class":53,"line":129},[51,145117,53108],{"class":72},[51,145119,52575],{"class":52264},[51,145121,54450],{"class":68},[51,145123,108],{"class":72},[51,145125,144955],{"class":282},[51,145127,144933],{"class":72},[51,145129,52575],{"class":52264},[51,145131,52271],{"class":72},[51,145133,145134],{"class":53,"line":206},[51,145135,144966],{"class":57},[51,145137,145138,145140,145142,145144,145146,145148,145150,145152],{"class":53,"line":212},[51,145139,53108],{"class":72},[51,145141,52575],{"class":52264},[51,145143,54450],{"class":68},[51,145145,108],{"class":72},[51,145147,144979],{"class":282},[51,145149,144933],{"class":72},[51,145151,52575],{"class":52264},[51,145153,52271],{"class":72},[51,145155,145156],{"class":53,"line":227},[51,145157,144990],{"class":57},[51,145159,145160,145162,145164,145166,145168,145170,145172,145174],{"class":53,"line":370},[51,145161,53108],{"class":72},[51,145163,52575],{"class":52264},[51,145165,54450],{"class":68},[51,145167,108],{"class":72},[51,145169,145003],{"class":282},[51,145171,144933],{"class":72},[51,145173,52575],{"class":52264},[51,145175,52271],{"class":72},[51,145177,145178,145180,145182],{"class":53,"line":387},[51,145179,52749],{"class":72},[51,145181,52575],{"class":52264},[51,145183,52271],{"class":72},[40,145185,71417],{},[29,145187,145188],{"className":128263,"code":131620,"language":128265,"meta":35,"style":35},[37,145189,145190,145194,145208,145212],{"__ignoreMap":35},[51,145191,145192],{"class":53,"line":54},[51,145193,131627],{"class":57},[51,145195,145196,145198,145200,145202,145204,145206],{"class":53,"line":61},[51,145197,2154],{"class":72},[51,145199,52575],{"class":52264},[51,145201,54450],{"class":68},[51,145203,108],{"class":72},[51,145205,131640],{"class":282},[51,145207,52271],{"class":72},[51,145209,145210],{"class":53,"line":93},[51,145211,131647],{"class":72},[51,145213,145214,145216,145218],{"class":53,"line":99},[51,145215,52749],{"class":72},[51,145217,52575],{"class":52264},[51,145219,52271],{"class":72},[1179,145221,138917],{},{"title":35,"searchDepth":61,"depth":61,"links":145223},[145224,145225,145229,145230,145231],{"id":144368,"depth":61,"text":144369},{"id":144400,"depth":61,"text":144401,"children":145226},[145227,145228],{"id":144404,"depth":93,"text":144405},{"id":144421,"depth":93,"text":144422},{"id":144440,"depth":61,"text":144441},{"id":144447,"depth":61,"text":144448},{"id":144534,"depth":61,"text":144535,"children":145232},[145233,145234,145235,145236,145237],{"id":144541,"depth":93,"text":144542},{"id":144669,"depth":93,"text":144670},{"id":144763,"depth":93,"text":144764},{"id":144812,"depth":93,"text":144813},{"id":144822,"depth":93,"text":144823},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144360,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145244,"title":145245,"body":145246,"description":24339,"extension":1190,"meta":146473,"navigation":1192,"path":146474,"seo":146475,"stem":146476,"__hash__":146477},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145247,"toc":146451},[145248,145251,145255,145259,145262,145265,145269,145274,145277,145280,145283,145286,145289,145346,145349,145354,145357,145360,145364,145375,145379,145382,145385,145392,145397,145401,145404,145410,145413,145417,145420,145427,145430,145433,145440,145443,145450,145453,145456,145463,145466,145469,145471,145488,145492,145495,145498,145501,145505,145508,145511,145514,145517,145520,145523,145525,145528,145531,145593,145596,145706,145713,145719,145722,145725,145729,145732,145736,145741,145744,145751,145754,145760,145765,145768,145771,145774,145777,145780,145783,145786,145789,145845,145847,145873,145877,145880,145883,145886,145894,145897,145900,145904,145960,145963,145967,145973,145984,145987,145992,145995,145998,146004,146007,146010,146013,146016,146019,146022,146025,146028,146053,146059,146062,146065,146068,146071,146074,146077,146082,146085,146088,146091,146099,146102,146109,146112,146115,146117,146141,146143,146146,146149,146152,146155,146158,146161,146164,146198,146201,146204,146238,146245,146248,146251,146254,146257,146260,146263,146270,146273,146276,146279,146282,146289,146292,146295,146302,146305,146308,146312,146315,146318,146321,146324,146327,146330,146333,146336,146338,146362,146364,146388,146392,146403,146406,146409,146412,146415,146418,146421,146424,146427,146430,146433,146436,146439,146442,146445,146448],[10,145249,145245],{"id":145250},"_21-移动端布局实战下篇",[14,145252,145254],{"id":145253},"_211-rem适配布局","21.1 rem适配布局",[1233,145256,145258],{"id":145257},"_2111-rem单位","21.1.1 rem单位",[2564,145260],{"style":127372,"src":145261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[40,145263,145264],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[1233,145266,145268],{"id":145267},"_2112-媒体查询","21.1.2 媒体查询",[19,145270,145271],{},[22,145272,145273],{},"参数介绍",[2564,145275],{"style":127372,"src":145276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[2564,145278],{"style":127372,"src":145279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[2564,145281],{"style":127372,"src":145282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[2564,145284],{"style":127372,"src":145285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[2564,145287],{"style":127372,"src":145288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[29,145290,145292],{"className":127516,"code":145291,"language":127518,"meta":35,"style":35},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[37,145293,145294,145299,145318,145325,145338,145342],{"__ignoreMap":35},[51,145295,145296],{"class":53,"line":54},[51,145297,145298],{"class":57},"\u002F* 媒体查询 *\u002F\n",[51,145300,145301,145304,145306,145309,145311,145314,145316],{"class":53,"line":61},[51,145302,145303],{"class":64},"@media",[51,145305,2750],{"class":72},[51,145307,145308],{"class":175},"max-width",[51,145310,52401],{"class":72},[51,145312,145313],{"class":175},"768",[51,145315,52456],{"class":64},[51,145317,13404],{"class":72},[51,145319,145320,145323],{"class":53,"line":93},[51,145321,145322],{"class":68},"  .container",[51,145324,16534],{"class":72},[51,145326,145327,145330,145332,145334,145336],{"class":53,"line":99},[51,145328,145329],{"class":175},"    width",[51,145331,52401],{"class":72},[51,145333,612],{"class":175},[51,145335,1577],{"class":64},[51,145337,179],{"class":72},[51,145339,145340],{"class":53,"line":120},[51,145341,128312],{"class":72},[51,145343,145344],{"class":53,"line":129},[51,145345,132],{"class":72},[40,145347,145348],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[19,145350,145351],{"start":61},[22,145352,145353],{},"引入资源",[2564,145355],{"style":127372,"src":145356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[40,145358,145359],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[1233,145361,145363],{"id":145362},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1000,145365,145366,145369,145372],{},[22,145367,145368],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[22,145370,145371],{},"媒体查询可以根据不同设备宽度来修改样式",[22,145373,145374],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145376,145378],{"id":145377},"_212-less基础","21.2 Less基础",[40,145380,145381],{},"css冗余度较高，不利于复用，没有很好的计算能力",[40,145383,145384],{},"Less可以解决该问题，它是css的扩展语言",[40,145386,145387,145388],{},"Less中文网址： ",[981,145389,145390],{"href":145390,"rel":145391},"http:\u002F\u002Flesscss.cn\u002F",[24828],[40,145393,145394],{},[840,145395,145396],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[1233,145398,145400],{"id":145399},"_2121-less安装","21.2.1 less安装",[40,145402,145403],{},"如果使用vscode，则无需进行下方安装步骤",[40,145405,145406],{},[981,145407,145408],{"href":145408,"rel":145409},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24828],[2564,145411],{"style":127372,"src":145412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[1233,145414,145416],{"id":145415},"_2122-less使用","21.2.2 less使用",[40,145418,145419],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[19,145421,145422],{},[22,145423,145424],{},[840,145425,145426],{},"Less 变量",[2564,145428],{"style":127372,"src":145429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[2564,145431],{"style":127372,"src":145432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[19,145434,145435],{"start":61},[22,145436,145437],{},[840,145438,145439],{},"Less 编译",[2564,145441],{"style":127372,"src":145442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[19,145444,145445],{"start":93},[22,145446,145447],{},[840,145448,145449],{},"Less 嵌套",[2564,145451],{"style":127372,"src":145452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[2564,145454],{"style":127372,"src":145455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[19,145457,145458],{"start":99},[22,145459,145460],{},[840,145461,145462],{},"Less 运算",[2564,145464],{"style":127372,"src":145465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[40,145467,145468],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[40,145470,1290],{},[1000,145472,145473,145476,145479,145482,145485],{},[22,145474,145475],{},"乘号（*）和除号（\u002F）的写法",[22,145477,145478],{},"运算符中间左右有个空格隔开 1px + 5",[22,145480,145481],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[22,145483,145484],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[22,145486,145487],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145489,145491],{"id":145490},"_213-rem-适配方案","21.3 rem 适配方案",[40,145493,145494],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[40,145496,145497],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[2564,145499],{"style":127372,"src":145500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[1233,145502,145504],{"id":145503},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[40,145506,145507],{},"rem + 媒体查询 + less 技术",[2564,145509],{"style":127372,"src":145510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[40,145512,145513],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[40,145515,145516],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[2564,145518],{"style":127372,"src":145519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[40,145521,145522],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[40,145524,15595],{},[2564,145526],{"style":127372,"src":145527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[40,145529,145530],{},"index.html:",[29,145532,145534],{"className":127516,"code":145533,"language":127518,"meta":35,"style":35},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[37,145535,145536,145541,145547,145563,145567,145573,145589],{"__ignoreMap":35},[51,145537,145538],{"class":53,"line":54},[51,145539,145540],{"class":57},"\u002F* rem 适配方案 *\u002F\n",[51,145542,145543,145545],{"class":53,"line":61},[51,145544,51599],{"class":52264},[51,145546,16534],{"class":72},[51,145548,145549,145551,145553,145556,145558,145560],{"class":53,"line":93},[51,145550,71590],{"class":175},[51,145552,52401],{"class":72},[51,145554,145555],{"class":175},"62.5",[51,145557,1577],{"class":64},[51,145559,131379],{"class":72},[51,145561,145562],{"class":57},"\u002F* 1rem = 10px *\u002F\n",[51,145564,145565],{"class":53,"line":99},[51,145566,132],{"class":72},[51,145568,145569,145571],{"class":53,"line":120},[51,145570,131364],{"class":68},[51,145572,16534],{"class":72},[51,145574,145575,145577,145579,145581,145584,145586],{"class":53,"line":129},[51,145576,71532],{"class":175},[51,145578,52401],{"class":72},[51,145580,443],{"class":175},[51,145582,145583],{"class":64},"rem",[51,145585,131379],{"class":72},[51,145587,145588],{"class":57},"\u002F* 100px *\u002F\n",[51,145590,145591],{"class":53,"line":206},[51,145592,132],{"class":72},[40,145594,145595],{},"common.less",[29,145597,145599],{"className":127516,"code":145598,"language":127518,"meta":35,"style":35},"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",[37,145600,145601,145607,145622,145626,145632,145646,145650,145654,145658,145664,145678,145682,145688,145702],{"__ignoreMap":35},[51,145602,145603,145605],{"class":53,"line":54},[51,145604,51599],{"class":52264},[51,145606,16534],{"class":72},[51,145608,145609,145611,145613,145615,145617,145619],{"class":53,"line":61},[51,145610,71590],{"class":175},[51,145612,52401],{"class":72},[51,145614,145555],{"class":175},[51,145616,1577],{"class":64},[51,145618,27031],{"class":72},[51,145620,145621],{"class":57},"\u002F* 10px *\u002F\n",[51,145623,145624],{"class":53,"line":93},[51,145625,132],{"class":72},[51,145627,145628,145630],{"class":53,"line":99},[51,145629,52575],{"class":52264},[51,145631,16534],{"class":72},[51,145633,145634,145636,145638,145640,145642,145644],{"class":53,"line":120},[51,145635,71532],{"class":175},[51,145637,52401],{"class":72},[51,145639,443],{"class":175},[51,145641,145583],{"class":64},[51,145643,27031],{"class":72},[51,145645,145588],{"class":57},[51,145647,145648],{"class":53,"line":129},[51,145649,132],{"class":72},[51,145651,145652],{"class":53,"line":206},[51,145653,136977],{"class":72},[51,145655,145656],{"class":53,"line":212},[51,145657,145540],{"class":57},[51,145659,145660,145662],{"class":53,"line":227},[51,145661,51599],{"class":52264},[51,145663,16534],{"class":72},[51,145665,145666,145668,145670,145672,145674,145676],{"class":53,"line":370},[51,145667,71590],{"class":175},[51,145669,52401],{"class":72},[51,145671,145555],{"class":175},[51,145673,1577],{"class":64},[51,145675,131379],{"class":72},[51,145677,145562],{"class":57},[51,145679,145680],{"class":53,"line":387},[51,145681,132],{"class":72},[51,145683,145684,145686],{"class":53,"line":404},[51,145685,131364],{"class":68},[51,145687,16534],{"class":72},[51,145689,145690,145692,145694,145696,145698,145700],{"class":53,"line":415},[51,145691,71532],{"class":175},[51,145693,52401],{"class":72},[51,145695,443],{"class":175},[51,145697,145583],{"class":64},[51,145699,131379],{"class":72},[51,145701,145588],{"class":57},[51,145703,145704],{"class":53,"line":420},[51,145705,132],{"class":72},[40,145707,145708,145709,145712],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24516,145710,145711],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[29,145714,145717],{"className":145715,"code":145716,"language":34},[32],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[37,145718,145716],{"__ignoreMap":35},[40,145720,145721],{},"less保存时会自动变成.css文件",[40,145723,145724],{},"好好搞懂上述代码写法",[1233,145726,145728],{"id":145727},"_2132-样式导入样式","21.3.2 样式导入样式",[2564,145730],{"style":127372,"src":145731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[1233,145733,145735],{"id":145734},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[19,145737,145738],{},[22,145739,145740],{},"准备工作",[2564,145742],{"style":127372,"src":145743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[40,145745,145746,145747],{},"github地址：",[981,145748,145749],{"href":145749,"rel":145750},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24828],[40,145752,145753],{},"下载之后，将index.js文件拖到项目中就可以了",[40,145755,145756,145757],{},"js文件引入到index.html中使用的是",[37,145758,145759],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[19,145761,145762],{"start":61},[22,145763,145764],{},"vscode插件",[2564,145766],{"style":127372,"src":145767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[40,145769,145770],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[40,145772,145773],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[2564,145775],{"style":127372,"src":145776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[40,145778,145779],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[2564,145781],{"style":127372,"src":145782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[40,145784,145785],{},"修改成75就可以，alt+z为快捷键",[40,145787,145788],{},"index.css：",[29,145790,145791],{"className":127516,"code":145533,"language":127518,"meta":35,"style":35},[37,145792,145793,145797,145803,145817,145821,145827,145841],{"__ignoreMap":35},[51,145794,145795],{"class":53,"line":54},[51,145796,145540],{"class":57},[51,145798,145799,145801],{"class":53,"line":61},[51,145800,51599],{"class":52264},[51,145802,16534],{"class":72},[51,145804,145805,145807,145809,145811,145813,145815],{"class":53,"line":93},[51,145806,71590],{"class":175},[51,145808,52401],{"class":72},[51,145810,145555],{"class":175},[51,145812,1577],{"class":64},[51,145814,131379],{"class":72},[51,145816,145562],{"class":57},[51,145818,145819],{"class":53,"line":99},[51,145820,132],{"class":72},[51,145822,145823,145825],{"class":53,"line":120},[51,145824,131364],{"class":68},[51,145826,16534],{"class":72},[51,145828,145829,145831,145833,145835,145837,145839],{"class":53,"line":129},[51,145830,71532],{"class":175},[51,145832,52401],{"class":72},[51,145834,443],{"class":175},[51,145836,145583],{"class":64},[51,145838,131379],{"class":72},[51,145840,145588],{"class":57},[51,145842,145843],{"class":53,"line":206},[51,145844,132],{"class":72},[40,145846,145530],{},[29,145848,145849],{"className":127516,"code":127920,"language":127518,"meta":35,"style":35},[37,145850,145851,145857,145869],{"__ignoreMap":35},[51,145852,145853,145855],{"class":53,"line":54},[51,145854,52764],{"class":52264},[51,145856,16534],{"class":72},[51,145858,145859,145861,145863,145865,145867],{"class":53,"line":61},[51,145860,71590],{"class":175},[51,145862,52401],{"class":72},[51,145864,1847],{"class":175},[51,145866,52456],{"class":64},[51,145868,179],{"class":72},[51,145870,145871],{"class":53,"line":93},[51,145872,132],{"class":72},[14,145874,145876],{"id":145875},"_214-响应式开发","21.4 响应式开发",[40,145878,145879],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[2564,145881],{"style":127372,"src":145882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[40,145884,145885],{},"做法：",[1000,145887,145888,145891],{},[22,145889,145890],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[22,145892,145893],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[2564,145895],{"style":127372,"src":145896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[40,145898,145899],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[1233,145901,145903],{"id":145902},"_2141-简单代码示范","21.4.1 简单代码示范",[29,145905,145906],{"className":127516,"code":145533,"language":127518,"meta":35,"style":35},[37,145907,145908,145912,145918,145932,145936,145942,145956],{"__ignoreMap":35},[51,145909,145910],{"class":53,"line":54},[51,145911,145540],{"class":57},[51,145913,145914,145916],{"class":53,"line":61},[51,145915,51599],{"class":52264},[51,145917,16534],{"class":72},[51,145919,145920,145922,145924,145926,145928,145930],{"class":53,"line":93},[51,145921,71590],{"class":175},[51,145923,52401],{"class":72},[51,145925,145555],{"class":175},[51,145927,1577],{"class":64},[51,145929,131379],{"class":72},[51,145931,145562],{"class":57},[51,145933,145934],{"class":53,"line":99},[51,145935,132],{"class":72},[51,145937,145938,145940],{"class":53,"line":120},[51,145939,131364],{"class":68},[51,145941,16534],{"class":72},[51,145943,145944,145946,145948,145950,145952,145954],{"class":53,"line":129},[51,145945,71532],{"class":175},[51,145947,52401],{"class":72},[51,145949,443],{"class":175},[51,145951,145583],{"class":64},[51,145953,131379],{"class":72},[51,145955,145588],{"class":57},[51,145957,145958],{"class":53,"line":206},[51,145959,132],{"class":72},[40,145961,145962],{},"父盒子一般命名为container",[1233,145964,145966],{"id":145965},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[40,145968,145969,145970],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[840,145971,145972],{},"使得 Web 开发更加快捷",[1000,145974,145975],{},[22,145976,145977,145978],{},"官网：",[840,145979,145980],{},[981,145981,145982],{"href":145982,"rel":145983},"http:\u002F\u002Fgetbootstrap.com\u002F",[24828],[40,145985,145986],{},"可以直接去官网拿现成的东西",[19,145988,145989],{},[22,145990,145991],{},"Bootstrap的使用",[40,145993,145994],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[40,145996,145997],{},"Bootstrap 使用四步曲：",[40,145999,146000,146003],{},[840,146001,146002],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[2564,146005],{"style":127372,"src":146006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[40,146008,146009],{},"打开Bootstrap官网，然后下载",[2564,146011],{"style":127372,"src":146012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[2564,146014],{"style":127372,"src":146015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[40,146017,146018],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[40,146020,146021],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[40,146023,146024],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[2564,146026],{"style":127372,"src":146027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[29,146029,146031],{"className":127516,"code":146030,"language":127518,"meta":35,"style":35},".center {\n  color: red;\n}\n",[37,146032,146033,146039,146049],{"__ignoreMap":35},[51,146034,146035,146037],{"class":53,"line":54},[51,146036,127807],{"class":68},[51,146038,16534],{"class":72},[51,146040,146041,146043,146045,146047],{"class":53,"line":61},[51,146042,71869],{"class":175},[51,146044,52401],{"class":72},[51,146046,58385],{"class":175},[51,146048,179],{"class":72},[51,146050,146051],{"class":53,"line":93},[51,146052,132],{"class":72},[40,146054,146055,146058],{},[37,146056,146057],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[2564,146060],{"style":127372,"src":146061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[2564,146063],{"style":127372,"src":146064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[2564,146066],{"style":127372,"src":146067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[40,146069,146070],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[2564,146072],{"style":127372,"src":146073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[40,146075,146076],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[19,146078,146079],{"start":61},[22,146080,146081],{},"布局容器",[2564,146083],{"style":127372,"src":146084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[40,146086,146087],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[40,146089,146090],{},"container-fluid用于移动式布局比较方便",[19,146092,146093],{"start":93},[22,146094,146095,146096],{},"bootstrap ",[840,146097,146098],{},"栅格系统原理",[2564,146100],{"style":127372,"src":146101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[19,146103,146104],{"start":99},[22,146105,146106],{},[840,146107,146108],{},"栅格选项参数",[2564,146110],{"style":127372,"src":146111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[40,146113,146114],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[40,146116,15595],{},[29,146118,146119],{"className":127516,"code":146030,"language":127518,"meta":35,"style":35},[37,146120,146121,146127,146137],{"__ignoreMap":35},[51,146122,146123,146125],{"class":53,"line":54},[51,146124,127807],{"class":68},[51,146126,16534],{"class":72},[51,146128,146129,146131,146133,146135],{"class":53,"line":61},[51,146130,71869],{"class":175},[51,146132,52401],{"class":72},[51,146134,58385],{"class":175},[51,146136,179],{"class":72},[51,146138,146139],{"class":53,"line":93},[51,146140,132],{"class":72},[40,146142,136559],{},[2564,146144],{"style":127372,"src":146145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[40,146147,146148],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[40,146150,146151],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[40,146153,146154],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[40,146156,146157],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[40,146159,146160],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[40,146162,146163],{},"汇总展示说明：",[29,146165,146166],{"className":128263,"code":131620,"language":128265,"meta":35,"style":35},[37,146167,146168,146172,146186,146190],{"__ignoreMap":35},[51,146169,146170],{"class":53,"line":54},[51,146171,131627],{"class":57},[51,146173,146174,146176,146178,146180,146182,146184],{"class":53,"line":61},[51,146175,2154],{"class":72},[51,146177,52575],{"class":52264},[51,146179,54450],{"class":68},[51,146181,108],{"class":72},[51,146183,131640],{"class":282},[51,146185,52271],{"class":72},[51,146187,146188],{"class":53,"line":93},[51,146189,131647],{"class":72},[51,146191,146192,146194,146196],{"class":53,"line":99},[51,146193,52749],{"class":72},[51,146195,52575],{"class":52264},[51,146197,52271],{"class":72},[2564,146199],{"style":127372,"src":146200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[40,146202,146203],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[29,146205,146206],{"className":128263,"code":131620,"language":128265,"meta":35,"style":35},[37,146207,146208,146212,146226,146230],{"__ignoreMap":35},[51,146209,146210],{"class":53,"line":54},[51,146211,131627],{"class":57},[51,146213,146214,146216,146218,146220,146222,146224],{"class":53,"line":61},[51,146215,2154],{"class":72},[51,146217,52575],{"class":52264},[51,146219,54450],{"class":68},[51,146221,108],{"class":72},[51,146223,131640],{"class":282},[51,146225,52271],{"class":72},[51,146227,146228],{"class":53,"line":93},[51,146229,131647],{"class":72},[51,146231,146232,146234,146236],{"class":53,"line":99},[51,146233,52749],{"class":72},[51,146235,52575],{"class":52264},[51,146237,52271],{"class":72},[19,146239,146240],{"start":120},[22,146241,146242],{},[840,146243,146244],{},"列嵌套",[2564,146246],{"style":127372,"src":146247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[40,146249,146250],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[40,146252,146253],{},"没加row内部这样：",[2564,146255],{"style":127372,"src":146256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[40,146258,146259],{},"加上row之后内部为：",[2564,146261],{"style":127372,"src":146262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[19,146264,146265],{"start":129},[22,146266,146267],{},[840,146268,146269],{},"列偏移",[2564,146271],{"style":127372,"src":146272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[40,146274,146275],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[40,146277,146278],{},"要加偏移量，即偏移份数",[40,146280,146281],{},"偏移的份数=12-两个盒子的份数",[19,146283,146284],{"start":206},[22,146285,146286],{},[840,146287,146288],{},"列排序",[2564,146290],{"style":127372,"src":146291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[40,146293,146294],{},"pull拉左；push推右",[19,146296,146297],{"start":212},[22,146298,146299],{},[840,146300,146301],{},"响应式工具",[2564,146303],{"style":127372,"src":146304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[40,146306,146307],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[1233,146309,146311],{"id":146310},"_2143-响应式小项目","21.4.3 响应式小项目",[40,146313,146314],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[40,146316,146317],{},"ul {",[40,146319,146320],{},"list-style: none;",[40,146322,146323],{},"margin:0;",[40,146325,146326],{},"padding:0; }",[2564,146328],{"style":127372,"src":146329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[2564,146331],{"style":127372,"src":146332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[40,146334,146335],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[40,146337,69853],{},[29,146339,146340],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},[37,146341,146342,146348,146358],{"__ignoreMap":35},[51,146343,146344,146346],{"class":53,"line":54},[51,146345,131364],{"class":68},[51,146347,16534],{"class":72},[51,146349,146350,146352,146354,146356],{"class":53,"line":61},[51,146351,131996],{"class":175},[51,146353,52401],{"class":72},[51,146355,24699],{"class":175},[51,146357,179],{"class":72},[51,146359,146360],{"class":53,"line":93},[51,146361,132],{"class":72},[40,146363,71417],{},[29,146365,146366],{"className":127516,"code":140186,"language":127518,"meta":35,"style":35},[37,146367,146368,146374,146384],{"__ignoreMap":35},[51,146369,146370,146372],{"class":53,"line":54},[51,146371,131364],{"class":68},[51,146373,16534],{"class":72},[51,146375,146376,146378,146380,146382],{"class":53,"line":61},[51,146377,131996],{"class":175},[51,146379,52401],{"class":72},[51,146381,24699],{"class":175},[51,146383,179],{"class":72},[51,146385,146386],{"class":53,"line":93},[51,146387,132],{"class":72},[14,146389,146391],{"id":146390},"_215-swiper-插件使用","21.5 swiper 插件使用",[1000,146393,146394,146397,146400],{},[22,146395,146396],{},"下载需要的css和js文件html页面中 引入相关文件",[22,146398,146399],{},"官网找到类似案例，复制html结构，css样式 js 语法",[22,146401,146402],{},"根据需求定制修改模块",[2564,146404],{"style":127372,"src":146405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[40,146407,146408],{},"解压后将这两部分放到项目中",[2564,146410],{"style":127372,"src":146411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[40,146413,146414],{},"这个插件可以帮助我们实现轮播图效果",[40,146416,146417],{},"用法：",[2564,146419],{"style":127372,"src":146420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[40,146422,146423],{},"找到自己喜欢的",[2564,146425],{"style":127372,"src":146426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[40,146428,146429],{},"右键，查看网页源代码",[2564,146431],{"style":127372,"src":146432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[40,146434,146435],{},"复制人家的结构内容",[40,146437,146438],{},"然后去看API文档：",[2564,146440],{"style":127372,"src":146441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[40,146443,146444],{},"可以看看如何修改样式",[40,146446,146447],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1179,146449,146450],{},"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":35,"searchDepth":61,"depth":61,"links":146452},[146453,146458,146462,146467,146472],{"id":145253,"depth":61,"text":145254,"children":146454},[146455,146456,146457],{"id":145257,"depth":93,"text":145258},{"id":145267,"depth":93,"text":145268},{"id":145362,"depth":93,"text":145363},{"id":145377,"depth":61,"text":145378,"children":146459},[146460,146461],{"id":145399,"depth":93,"text":145400},{"id":145415,"depth":93,"text":145416},{"id":145490,"depth":61,"text":145491,"children":146463},[146464,146465,146466],{"id":145503,"depth":93,"text":145504},{"id":145727,"depth":93,"text":145728},{"id":145734,"depth":93,"text":145735},{"id":145875,"depth":61,"text":145876,"children":146468},[146469,146470,146471],{"id":145902,"depth":93,"text":145903},{"id":145965,"depth":93,"text":145966},{"id":146310,"depth":93,"text":146311},{"id":146390,"depth":61,"text":146391},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145245,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146479,"title":146480,"body":146481,"description":24339,"extension":1190,"meta":146701,"navigation":1192,"path":146702,"seo":146703,"stem":146704,"__hash__":146705},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146482,"toc":146697},[146483,146486,146490,146493,146508,146513,146516,146521,146556,146561,146573,146578,146591,146596,146613,146618,146638,146643,146661,146664,146667,146670,146673,146677,146680,146683,146686,146689,146692,146695],[10,146484,146480],{"id":146485},"_22-代码提交与新型相对单位",[14,146487,146489],{"id":146488},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[40,146491,146492],{},"法1：",[19,146494,146495,146502,146505],{},[22,146496,146497,146498],{},"登录网站注册：",[981,146499,146500],{"href":146500,"rel":146501},"https:\u002F\u002Fgitee.com\u002F",[24828],[22,146503,146504],{},"码云创建新的仓库",[22,146506,146507],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1000,146509,146510],{},[22,146511,146512],{},"在网站根目录右键-- Git Bash Here",[2564,146514],{"style":127372,"src":146515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1000,146517,146518],{},[22,146519,146520],{},"如果是第一次利用git提交，请配置好全局选项",[29,146522,146524],{"className":118260,"code":146523,"language":118262,"meta":35,"style":35},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[37,146525,146526,146542],{"__ignoreMap":35},[51,146527,146528,146531,146533,146536,146539],{"class":53,"line":54},[51,146529,146530],{"class":68},"git",[51,146532,120683],{"class":282},[51,146534,146535],{"class":175}," --global",[51,146537,146538],{"class":282}," user.name",[51,146540,146541],{"class":282}," \"你的名字\"\n",[51,146543,146544,146546,146548,146550,146553],{"class":53,"line":61},[51,146545,146530],{"class":68},[51,146547,120683],{"class":282},[51,146549,146535],{"class":175},[51,146551,146552],{"class":282}," user.email",[51,146554,146555],{"class":282}," \"你的邮箱\"\n",[1000,146557,146558],{},[22,146559,146560],{},"初始化仓库",[29,146562,146564],{"className":118260,"code":146563,"language":118262,"meta":35,"style":35},"git init\n",[37,146565,146566],{"__ignoreMap":35},[51,146567,146568,146570],{"class":53,"line":54},[51,146569,146530],{"class":68},[51,146571,146572],{"class":282}," init\n",[1000,146574,146575],{},[22,146576,146577],{},"把本地文件放到暂存区",[29,146579,146581],{"className":118260,"code":146580,"language":118262,"meta":35,"style":35},"git add .\n",[37,146582,146583],{"__ignoreMap":35},[51,146584,146585,146587,146589],{"class":53,"line":54},[51,146586,146530],{"class":68},[51,146588,69],{"class":282},[51,146590,29705],{"class":282},[1000,146592,146593],{},[22,146594,146595],{},"把本地文件放到本地仓库里面",[29,146597,146599],{"className":118260,"code":146598,"language":118262,"meta":35,"style":35},"git commit -m \"first commit\"\n",[37,146600,146601],{"__ignoreMap":35},[51,146602,146603,146605,146608,146610],{"class":53,"line":54},[51,146604,146530],{"class":68},[51,146606,146607],{"class":282}," commit",[51,146609,101846],{"class":175},[51,146611,146612],{"class":282}," \"first commit\"\n",[1000,146614,146615],{},[22,146616,146617],{},"链接远程仓库",[29,146619,146621],{"className":118260,"code":146620,"language":118262,"meta":35,"style":35},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[37,146622,146623],{"__ignoreMap":35},[51,146624,146625,146627,146630,146632,146635],{"class":53,"line":54},[51,146626,146530],{"class":68},[51,146628,146629],{"class":282}," remote",[51,146631,69],{"class":282},[51,146633,146634],{"class":282}," origin",[51,146636,146637],{"class":282}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1000,146639,146640],{},[22,146641,146642],{},"把本地仓库的文件推送到远程仓库 push",[29,146644,146646],{"className":118260,"code":146645,"language":118262,"meta":35,"style":35},"git push -u origin master\n",[37,146647,146648],{"__ignoreMap":35},[51,146649,146650,146652,146654,146656,146658],{"class":53,"line":54},[51,146651,146530],{"class":68},[51,146653,29980],{"class":282},[51,146655,29254],{"class":175},[51,146657,146634],{"class":282},[51,146659,146660],{"class":282}," master\n",[2564,146662],{"style":127372,"src":146663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[40,146665,146666],{},"上方方法暂未实现，后边学完git后在整",[40,146668,146669],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[2564,146671],{"style":127372,"src":146672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146674,146676],{"id":146675},"_222-新型相对单位","22.2 新型相对单位",[2564,146678],{"style":127372,"src":146679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[2564,146681],{"style":127372,"src":146682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[40,146684,146685],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[40,146687,146688],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[2564,146690],{"style":127372,"src":146691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[40,146693,146694],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1179,146696,24921],{},{"title":35,"searchDepth":61,"depth":61,"links":146698},[146699,146700],{"id":146488,"depth":61,"text":146489},{"id":146675,"depth":61,"text":146676},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146480,"description":24339},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146707,"title":146708,"body":146709,"description":146713,"extension":1190,"meta":146714,"navigation":1192,"path":146715,"seo":146716,"stem":146717,"__hash__":146718},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146710,"toc":146711},[],{"title":35,"searchDepth":61,"depth":61,"links":146712},[],"自己正经开始学编程的第一门语言！",{"category":93803},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146708,"description":146713},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146720,"title":146721,"body":146722,"description":24339,"extension":1190,"meta":147869,"navigation":1192,"path":147870,"seo":147871,"stem":147872,"__hash__":147873},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146723,"toc":147845},[146724,146727,146731,146734,146737,146762,146765,146771,146775,146778,146805,146808,146848,146851,146863,146866,146872,146876,146880,146907,146924,146931,146935,146938,146964,146967,146971,146974,147014,147017,147034,147040,147044,147049,147093,147096,147114,147117,147185,147189,147196,147199,147214,147217,147226,147229,147240,147243,147252,147255,147272,147275,147290,147294,147298,147301,147303,147323,147327,147330,147333,147344,147347,147353,147357,147363,147390,147393,147405,147408,147419,147422,147428,147432,147438,147488,147491,147533,147536,147569,147572,147606,147610,147613,147633,147636,147672,147675,147688,147692,147696,147702,147705,147718,147722,147725,147731,147734,147738,147741,147744,147793,147797,147813,147819,147826,147832,147842],[10,146725,146721],{"id":146726},"_1-python环境与第一个程序",[14,146728,146730],{"id":146729},"_11-什么是python","1.1 什么是Python",[40,146732,146733],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[40,146735,146736],{},"理解 Python 时抓住三个关键词：",[19,146738,146739,146742,146745],{},[22,146740,146741],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[22,146743,146744],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[22,146746,146747,146748,1466,146751,1466,146754,1466,146757,1466,146759,29349],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[37,146749,146750],{},"os",[37,146752,146753],{},"sys",[37,146755,146756],{},"json",[37,146758,58824],{},[37,146760,146761],{},"datetime",[40,146763,146764],{},"Python 程序的运行链路：",[29,146766,146769],{"className":146767,"code":146768,"language":34,"meta":35},[32],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[37,146770,146768],{"__ignoreMap":35},[14,146772,146774],{"id":146773},"_12-python解释器","1.2 Python解释器",[40,146776,146777],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[29,146779,146781],{"className":24785,"code":146780,"language":24787,"meta":35,"style":35},"python --version\npython3 --version\npython\npython3\n",[37,146782,146783,146789,146795,146800],{"__ignoreMap":35},[51,146784,146785,146787],{"class":53,"line":54},[51,146786,31344],{"class":68},[51,146788,27257],{"class":175},[51,146790,146791,146793],{"class":53,"line":61},[51,146792,101843],{"class":68},[51,146794,27257],{"class":175},[51,146796,146797],{"class":53,"line":93},[51,146798,146799],{"class":68},"python\n",[51,146801,146802],{"class":53,"line":99},[51,146803,146804],{"class":68},"python3\n",[40,146806,146807],{},"进入交互模式后，可以直接输入表达式：",[29,146809,146811],{"className":31342,"code":146810,"language":31344,"meta":35,"style":35},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[37,146812,146813,146824,146829,146843],{"__ignoreMap":35},[51,146814,146815,146818,146820,146822],{"class":53,"line":54},[51,146816,146817],{"class":64},">>>",[51,146819,26082],{"class":175},[51,146821,46530],{"class":64},[51,146823,48687],{"class":175},[51,146825,146826],{"class":53,"line":61},[51,146827,146828],{"class":175},"3\n",[51,146830,146831,146833,146836,146838,146841],{"class":53,"line":93},[51,146832,146817],{"class":64},[51,146834,146835],{"class":175}," print",[51,146837,73],{"class":72},[51,146839,146840],{"class":282},"\"hello python\"",[51,146842,90],{"class":72},[51,146844,146845],{"class":53,"line":99},[51,146846,146847],{"class":72},"hello python\n",[40,146849,146850],{},"退出交互模式：",[29,146852,146854],{"className":31342,"code":146853,"language":31344,"meta":35,"style":35},"exit()\n",[37,146855,146856],{"__ignoreMap":35},[51,146857,146858,146861],{"class":53,"line":54},[51,146859,146860],{"class":175},"exit",[51,146862,154],{"class":72},[40,146864,146865],{},"或使用快捷键：",[29,146867,146870],{"className":146868,"code":146869,"language":34,"meta":35},[32],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[37,146871,146869],{"__ignoreMap":35},[14,146873,146875],{"id":146874},"_13-安装python","1.3 安装Python",[1233,146877,146879],{"id":146878},"_131-windows安装","1.3.1 Windows安装",[19,146881,146882,146889,146892,146898,146904],{},[22,146883,146884,146885],{},"打开 Python 官网：",[981,146886,146887],{"href":146887,"rel":146888},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24828],[22,146890,146891],{},"下载 Windows Installer。",[22,146893,146894,146895,29349],{},"安装时勾选 ",[37,146896,146897],{},"Add Python to PATH",[22,146899,146900,146901,29349],{},"点击 ",[37,146902,146903],{},"Install Now",[22,146905,146906],{},"安装完成后打开命令提示符验证：",[29,146908,146910],{"className":24785,"code":146909,"language":24787,"meta":35,"style":35},"python --version\npip --version\n",[37,146911,146912,146918],{"__ignoreMap":35},[51,146913,146914,146916],{"class":53,"line":54},[51,146915,31344],{"class":68},[51,146917,27257],{"class":175},[51,146919,146920,146922],{"class":53,"line":61},[51,146921,24794],{"class":68},[51,146923,27257],{"class":175},[40,146925,146926,146927,146930],{},"如果提示 ",[37,146928,146929],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[1233,146932,146934],{"id":146933},"_132-macos安装","1.3.2 macOS安装",[40,146936,146937],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[29,146939,146941],{"className":24785,"code":146940,"language":24787,"meta":35,"style":35},"brew install python\npython3 --version\npip3 --version\n",[37,146942,146943,146952,146958],{"__ignoreMap":35},[51,146944,146945,146948,146950],{"class":53,"line":54},[51,146946,146947],{"class":68},"brew",[51,146949,24797],{"class":282},[51,146951,125282],{"class":282},[51,146953,146954,146956],{"class":53,"line":61},[51,146955,101843],{"class":68},[51,146957,27257],{"class":175},[51,146959,146960,146962],{"class":53,"line":93},[51,146961,120664],{"class":68},[51,146963,27257],{"class":175},[40,146965,146966],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[1233,146968,146970],{"id":146969},"_133-linux安装","1.3.3 Linux安装",[40,146972,146973],{},"Ubuntu\u002FDebian：",[29,146975,146977],{"className":24785,"code":146976,"language":24787,"meta":35,"style":35},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[37,146978,146979,146987,147002,147008],{"__ignoreMap":35},[51,146980,146981,146983,146985],{"class":53,"line":54},[51,146982,25540],{"class":68},[51,146984,118281],{"class":282},[51,146986,27206],{"class":282},[51,146988,146989,146991,146993,146995,146997,146999],{"class":53,"line":61},[51,146990,25540],{"class":68},[51,146992,118281],{"class":282},[51,146994,24797],{"class":282},[51,146996,105367],{"class":282},[51,146998,101762],{"class":282},[51,147000,147001],{"class":282}," python3-venv\n",[51,147003,147004,147006],{"class":53,"line":93},[51,147005,101843],{"class":68},[51,147007,27257],{"class":175},[51,147009,147010,147012],{"class":53,"line":99},[51,147011,120664],{"class":68},[51,147013,27257],{"class":175},[40,147015,147016],{},"Fedora：",[29,147018,147020],{"className":24785,"code":147019,"language":24787,"meta":35,"style":35},"sudo dnf install python3 python3-pip\n",[37,147021,147022],{"__ignoreMap":35},[51,147023,147024,147026,147028,147030,147032],{"class":53,"line":54},[51,147025,25540],{"class":68},[51,147027,27279],{"class":282},[51,147029,24797],{"class":282},[51,147031,105367],{"class":282},[51,147033,120729],{"class":282},[40,147035,147036,147037,147039],{},"Linux 上通常使用 ",[37,147038,101843],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147041,147043],{"id":147042},"_14-pip包管理器","1.4 pip包管理器",[40,147045,147046,147048],{},[37,147047,24794],{}," 用来安装第三方库。",[29,147050,147052],{"className":24785,"code":147051,"language":24787,"meta":35,"style":35},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[37,147053,147054,147063,147072,147080,147086],{"__ignoreMap":35},[51,147055,147056,147058,147060],{"class":53,"line":54},[51,147057,24794],{"class":68},[51,147059,24797],{"class":282},[51,147061,147062],{"class":282}," requests\n",[51,147064,147065,147067,147070],{"class":53,"line":61},[51,147066,24794],{"class":68},[51,147068,147069],{"class":282}," uninstall",[51,147071,147062],{"class":282},[51,147073,147074,147076,147078],{"class":53,"line":93},[51,147075,24794],{"class":68},[51,147077,118538],{"class":282},[51,147079,147062],{"class":282},[51,147081,147082,147084],{"class":53,"line":99},[51,147083,24794],{"class":68},[51,147085,119919],{"class":282},[51,147087,147088,147090],{"class":53,"line":120},[51,147089,24794],{"class":68},[51,147091,147092],{"class":282}," freeze\n",[40,147094,147095],{},"国内网络较慢时可以临时使用镜像：",[29,147097,147099],{"className":24785,"code":147098,"language":24787,"meta":35,"style":35},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[37,147100,147101],{"__ignoreMap":35},[51,147102,147103,147105,147107,147110,147112],{"class":53,"line":54},[51,147104,24794],{"class":68},[51,147106,24797],{"class":282},[51,147108,147109],{"class":282}," requests",[51,147111,27394],{"class":175},[51,147113,120692],{"class":282},[40,147115,147116],{},"常见第三方库：",[1393,147118,147119,147128],{},[1396,147120,147121],{},[1399,147122,147123,147126],{},[1402,147124,147125],{},"库",[1402,147127,103660],{},[1439,147129,147130,147138,147145,147153,147161,147169,147177],{},[1399,147131,147132,147135],{},[1444,147133,147134],{},"requests",[1444,147136,147137],{},"网络请求",[1399,147139,147140,147142],{},[1444,147141,101590],{},[1444,147143,147144],{},"数值计算",[1399,147146,147147,147150],{},[1444,147148,147149],{},"pandas",[1444,147151,147152],{},"表格数据处理",[1399,147154,147155,147158],{},[1444,147156,147157],{},"matplotlib",[1444,147159,147160],{},"绘图",[1399,147162,147163,147166],{},[1444,147164,147165],{},"pyecharts",[1444,147167,147168],{},"ECharts 图表",[1399,147170,147171,147174],{},[1444,147172,147173],{},"flask",[1444,147175,147176],{},"Web 后端",[1399,147178,147179,147182],{},[1444,147180,147181],{},"pytest",[1444,147183,147184],{},"自动化测试",[14,147186,147188],{"id":147187},"_15-虚拟环境","1.5 虚拟环境",[40,147190,147191,147192,147195],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[37,147193,147194],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[40,147197,147198],{},"创建虚拟环境：",[29,147200,147202],{"className":24785,"code":147201,"language":24787,"meta":35,"style":35},"python -m venv .venv\n",[37,147203,147204],{"__ignoreMap":35},[51,147205,147206,147208,147210,147212],{"class":53,"line":54},[51,147207,31344],{"class":68},[51,147209,101846],{"class":175},[51,147211,101849],{"class":282},[51,147213,101852],{"class":282},[40,147215,147216],{},"Windows 激活：",[29,147218,147220],{"className":24785,"code":147219,"language":24787,"meta":35,"style":35},".venv\\Scripts\\activate\n",[37,147221,147222],{"__ignoreMap":35},[51,147223,147224],{"class":53,"line":54},[51,147225,147219],{"class":68},[40,147227,147228],{},"macOS\u002FLinux 激活：",[29,147230,147232],{"className":24785,"code":147231,"language":24787,"meta":35,"style":35},"source .venv\u002Fbin\u002Factivate\n",[37,147233,147234],{"__ignoreMap":35},[51,147235,147236,147238],{"class":53,"line":54},[51,147237,101857],{"class":175},[51,147239,101860],{"class":282},[40,147241,147242],{},"退出虚拟环境：",[29,147244,147246],{"className":24785,"code":147245,"language":24787,"meta":35,"style":35},"deactivate\n",[37,147247,147248],{"__ignoreMap":35},[51,147249,147250],{"class":53,"line":54},[51,147251,147245],{"class":68},[40,147253,147254],{},"保存依赖：",[29,147256,147258],{"className":24785,"code":147257,"language":24787,"meta":35,"style":35},"pip freeze > requirements.txt\n",[37,147259,147260],{"__ignoreMap":35},[51,147261,147262,147264,147267,147269],{"class":53,"line":54},[51,147263,24794],{"class":68},[51,147265,147266],{"class":282}," freeze",[51,147268,27186],{"class":64},[51,147270,147271],{"class":282}," requirements.txt\n",[40,147273,147274],{},"安装依赖：",[29,147276,147278],{"className":24785,"code":147277,"language":24787,"meta":35,"style":35},"pip install -r requirements.txt\n",[37,147279,147280],{"__ignoreMap":35},[51,147281,147282,147284,147286,147288],{"class":53,"line":54},[51,147283,24794],{"class":68},[51,147285,24797],{"class":282},[51,147287,120603],{"class":175},[51,147289,147271],{"class":282},[14,147291,147293],{"id":147292},"_16-开发工具","1.6 开发工具",[1233,147295,147297],{"id":147296},"_161-pycharm","1.6.1 PyCharm",[40,147299,147300],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[40,147302,123026],{},[19,147304,147305,147308,147311,147317,147320],{},[22,147306,147307],{},"New Project：创建项目。",[22,147309,147310],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[22,147312,147313,147314,126947],{},"New Python File：创建 ",[37,147315,147316],{},".py",[22,147318,147319],{},"Run：运行当前文件。",[22,147321,147322],{},"Debug：断点调试。",[1233,147324,147326],{"id":147325},"_162-vs-code","1.6.2 VS Code",[40,147328,147329],{},"VS Code 轻量，适合后续多语言开发。",[40,147331,147332],{},"建议安装插件：",[19,147334,147335,147338,147341],{},[22,147336,147337],{},"Python。",[22,147339,147340],{},"Pylance。",[22,147342,147343],{},"Jupyter。",[40,147345,147346],{},"选择解释器：",[29,147348,147351],{"className":147349,"code":147350,"language":34,"meta":35},[32],"Ctrl + Shift + P -> Python: Select Interpreter\n",[37,147352,147350],{"__ignoreMap":35},[14,147354,147356],{"id":147355},"_17-第一个python程序","1.7 第一个Python程序",[40,147358,147359,147360,25582],{},"创建文件 ",[37,147361,147362],{},"hello.py",[29,147364,147366],{"className":31342,"code":147365,"language":31344,"meta":35,"style":35},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[37,147367,147368,147379],{"__ignoreMap":35},[51,147369,147370,147372,147374,147377],{"class":53,"line":54},[51,147371,31379],{"class":175},[51,147373,73],{"class":72},[51,147375,147376],{"class":282},"\"Hello World\"",[51,147378,90],{"class":72},[51,147380,147381,147383,147385,147388],{"class":53,"line":61},[51,147382,31379],{"class":175},[51,147384,73],{"class":72},[51,147386,147387],{"class":282},"\"你好，Python\"",[51,147389,90],{"class":72},[40,147391,147392],{},"在终端运行：",[29,147394,147396],{"className":24785,"code":147395,"language":24787,"meta":35,"style":35},"python hello.py\n",[37,147397,147398],{"__ignoreMap":35},[51,147399,147400,147402],{"class":53,"line":54},[51,147401,31344],{"class":68},[51,147403,147404],{"class":282}," hello.py\n",[40,147406,147407],{},"或：",[29,147409,147411],{"className":24785,"code":147410,"language":24787,"meta":35,"style":35},"python3 hello.py\n",[37,147412,147413],{"__ignoreMap":35},[51,147414,147415,147417],{"class":53,"line":54},[51,147416,101843],{"class":68},[51,147418,147404],{"class":282},[40,147420,147421],{},"输出：",[29,147423,147426],{"className":147424,"code":147425,"language":34,"meta":35},[32],"Hello World\n你好，Python\n",[37,147427,147425],{"__ignoreMap":35},[14,147429,147431],{"id":147430},"_18-print函数","1.8 print函数",[40,147433,147434,147437],{},[37,147435,147436],{},"print()"," 用来输出内容。",[29,147439,147441],{"className":31342,"code":147440,"language":31344,"meta":35,"style":35},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[37,147442,147443,147453,147463,147473],{"__ignoreMap":35},[51,147444,147445,147447,147449,147451],{"class":53,"line":54},[51,147446,31379],{"class":175},[51,147448,73],{"class":72},[51,147450,752],{"class":282},[51,147452,90],{"class":72},[51,147454,147455,147457,147459,147461],{"class":53,"line":61},[51,147456,31379],{"class":175},[51,147458,73],{"class":72},[51,147460,612],{"class":175},[51,147462,90],{"class":72},[51,147464,147465,147467,147469,147471],{"class":53,"line":93},[51,147466,31379],{"class":175},[51,147468,73],{"class":72},[51,147470,1308],{"class":175},[51,147472,90],{"class":72},[51,147474,147475,147477,147479,147482,147484,147486],{"class":53,"line":99},[51,147476,31379],{"class":175},[51,147478,73],{"class":72},[51,147480,147481],{"class":282},"\"年龄:\"",[51,147483,13397],{"class":72},[51,147485,1896],{"class":175},[51,147487,90],{"class":72},[40,147489,147490],{},"多个内容用逗号隔开，默认中间加空格：",[29,147492,147494],{"className":31342,"code":147493,"language":31344,"meta":35,"style":35},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[37,147495,147496,147506,147516],{"__ignoreMap":35},[51,147497,147498,147501,147503],{"class":53,"line":54},[51,147499,147500],{"class":72},"name ",[51,147502,108],{"class":64},[51,147504,147505],{"class":282}," \"张三\"\n",[51,147507,147508,147511,147513],{"class":53,"line":61},[51,147509,147510],{"class":72},"age ",[51,147512,108],{"class":64},[51,147514,147515],{"class":175}," 18\n",[51,147517,147518,147520,147522,147525,147528,147530],{"class":53,"line":93},[51,147519,31379],{"class":175},[51,147521,73],{"class":72},[51,147523,147524],{"class":282},"\"姓名:\"",[51,147526,147527],{"class":72},", name, ",[51,147529,147481],{"class":282},[51,147531,147532],{"class":72},", age)\n",[40,147534,147535],{},"修改分隔符：",[29,147537,147539],{"className":31342,"code":147538,"language":31344,"meta":35,"style":35},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[37,147540,147541],{"__ignoreMap":35},[51,147542,147543,147545,147547,147550,147552,147554,147556,147558,147560,147563,147565,147567],{"class":53,"line":54},[51,147544,31379],{"class":175},[51,147546,73],{"class":72},[51,147548,147549],{"class":282},"\"2024\"",[51,147551,13397],{"class":72},[51,147553,55280],{"class":282},[51,147555,13397],{"class":72},[51,147557,55280],{"class":282},[51,147559,13397],{"class":72},[51,147561,147562],{"class":78},"sep",[51,147564,108],{"class":64},[51,147566,33447],{"class":282},[51,147568,90],{"class":72},[40,147570,147571],{},"修改结尾符：",[29,147573,147575],{"className":31342,"code":147574,"language":31344,"meta":35,"style":35},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[37,147576,147577,147595],{"__ignoreMap":35},[51,147578,147579,147581,147583,147585,147587,147589,147591,147593],{"class":53,"line":54},[51,147580,31379],{"class":175},[51,147582,73],{"class":72},[51,147584,752],{"class":282},[51,147586,13397],{"class":72},[51,147588,46765],{"class":78},[51,147590,108],{"class":64},[51,147592,5433],{"class":282},[51,147594,90],{"class":72},[51,147596,147597,147599,147601,147604],{"class":53,"line":61},[51,147598,31379],{"class":175},[51,147600,73],{"class":72},[51,147602,147603],{"class":282},"\"python\"",[51,147605,90],{"class":72},[14,147607,147609],{"id":147608},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[40,147611,147612],{},"交互运行适合临时验证：",[29,147614,147616],{"className":31342,"code":147615,"language":31344,"meta":35,"style":35},">>> 10 * 3\n30\n",[37,147617,147618,147628],{"__ignoreMap":35},[51,147619,147620,147622,147624,147626],{"class":53,"line":54},[51,147621,146817],{"class":64},[51,147623,3118],{"class":175},[51,147625,7480],{"class":64},[51,147627,121000],{"class":175},[51,147629,147630],{"class":53,"line":61},[51,147631,147632],{"class":175},"30\n",[40,147634,147635],{},"脚本运行适合保存程序：",[29,147637,147639],{"className":31342,"code":147638,"language":31344,"meta":35,"style":35},"price = 8\ncount = 5\nprint(price * count)\n",[37,147640,147641,147651,147660],{"__ignoreMap":35},[51,147642,147643,147646,147648],{"class":53,"line":54},[51,147644,147645],{"class":72},"price ",[51,147647,108],{"class":64},[51,147649,147650],{"class":175}," 8\n",[51,147652,147653,147656,147658],{"class":53,"line":61},[51,147654,147655],{"class":72},"count ",[51,147657,108],{"class":64},[51,147659,55391],{"class":175},[51,147661,147662,147664,147667,147669],{"class":53,"line":93},[51,147663,31379],{"class":175},[51,147665,147666],{"class":72},"(price ",[51,147668,1702],{"class":64},[51,147670,147671],{"class":72}," count)\n",[40,147673,147674],{},"实际学习中推荐：",[19,147676,147677,147680,147685],{},[22,147678,147679],{},"临时试一个语法，用交互模式。",[22,147681,147682,147683,126947],{},"写完整练习，用 ",[37,147684,147316],{},[22,147686,147687],{},"写项目，用独立目录和虚拟环境。",[14,147689,147691],{"id":147690},"_110-常见错误","1.10 常见错误",[1233,147693,147695],{"id":147694},"_1101-命令找不到","1.10.1 命令找不到",[29,147697,147700],{"className":147698,"code":147699,"language":34,"meta":35},[32],"python: command not found\n",[37,147701,147699],{"__ignoreMap":35},[40,147703,147704],{},"原因：",[19,147706,147707,147710,147713],{},[22,147708,147709],{},"没安装 Python。",[22,147711,147712],{},"PATH 没配置。",[22,147714,147715,147716,29349],{},"Linux\u002FmacOS 应该使用 ",[37,147717,101843],{},[1233,147719,147721],{"id":147720},"_1102-文件名冲突","1.10.2 文件名冲突",[40,147723,147724],{},"不要把文件命名为：",[29,147726,147729],{"className":147727,"code":147728,"language":34,"meta":35},[32],"random.py\njson.py\ntime.py\nrequests.py\n",[37,147730,147728],{"__ignoreMap":35},[40,147732,147733],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[1233,147735,147737],{"id":147736},"_1103-中文乱码","1.10.3 中文乱码",[40,147739,147740],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[40,147742,147743],{},"如果读写文件出现乱码，要明确指定编码：",[29,147745,147747],{"className":31342,"code":147746,"language":31344,"meta":35,"style":35},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[37,147748,147749,147783],{"__ignoreMap":35},[51,147750,147751,147753,147756,147758,147761,147763,147766,147768,147771,147773,147776,147778,147780],{"class":53,"line":54},[51,147752,108797],{"class":64},[51,147754,147755],{"class":175}," open",[51,147757,73],{"class":72},[51,147759,147760],{"class":282},"\"data.txt\"",[51,147762,13397],{"class":72},[51,147764,147765],{"class":282},"\"r\"",[51,147767,13397],{"class":72},[51,147769,147770],{"class":78},"encoding",[51,147772,108],{"class":64},[51,147774,147775],{"class":282},"\"utf-8\"",[51,147777,14676],{"class":72},[51,147779,32347],{"class":64},[51,147781,147782],{"class":72}," f:\n",[51,147784,147785,147788,147790],{"class":53,"line":61},[51,147786,147787],{"class":72},"    content ",[51,147789,108],{"class":64},[51,147791,147792],{"class":72}," f.read()\n",[14,147794,147796],{"id":147795},"_111-本章练习","1.11 本章练习",[19,147798,147799,147802,147808],{},[22,147800,147801],{},"安装 Python，并在终端输出版本号。",[22,147803,147804,147805,147807],{},"新建 ",[37,147806,147362],{},"，输出自己的姓名、年龄、学习目标。",[22,147809,105330,147810,147812],{},[37,147811,147436],{}," 输出下面格式：",[29,147814,147817],{"className":147815,"code":147816,"language":34,"meta":35},[32],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[37,147818,147816],{"__ignoreMap":35},[19,147820,147821],{"start":99},[22,147822,105330,147823,147825],{},[37,147824,147562],{}," 输出日期：",[29,147827,147830],{"className":147828,"code":147829,"language":34,"meta":35},[32],"2024-10-10\n",[37,147831,147829],{"__ignoreMap":35},[19,147833,147834],{"start":120},[22,147835,105330,147836,147838,147839,147841],{},[37,147837,46765],{}," 让两次 ",[37,147840,147436],{}," 输出在同一行。",[1179,147843,147844],{},"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":35,"searchDepth":61,"depth":61,"links":147846},[147847,147848,147849,147854,147855,147856,147860,147861,147862,147863,147868],{"id":146729,"depth":61,"text":146730},{"id":146773,"depth":61,"text":146774},{"id":146874,"depth":61,"text":146875,"children":147850},[147851,147852,147853],{"id":146878,"depth":93,"text":146879},{"id":146933,"depth":93,"text":146934},{"id":146969,"depth":93,"text":146970},{"id":147042,"depth":61,"text":147043},{"id":147187,"depth":61,"text":147188},{"id":147292,"depth":61,"text":147293,"children":147857},[147858,147859],{"id":147296,"depth":93,"text":147297},{"id":147325,"depth":93,"text":147326},{"id":147355,"depth":61,"text":147356},{"id":147430,"depth":61,"text":147431},{"id":147608,"depth":61,"text":147609},{"id":147690,"depth":61,"text":147691,"children":147864},[147865,147866,147867],{"id":147694,"depth":93,"text":147695},{"id":147720,"depth":93,"text":147721},{"id":147736,"depth":93,"text":147737},{"id":147795,"depth":61,"text":147796},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146721,"description":24339},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147875,"title":147876,"body":147877,"description":24339,"extension":1190,"meta":150281,"navigation":1192,"path":150282,"seo":150283,"stem":150284,"__hash__":150285},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147878,"toc":150266},[147879,147882,147886,147889,147892,147909,147912,147954,147957,147961,147964,147967,148004,148007,148041,148044,148136,148140,148154,148157,148184,148187,148191,148294,148301,148304,148321,148325,148332,148521,148524,148597,148601,148604,148688,148691,148723,148727,148931,148934,148938,148944,149046,149049,149305,149309,149312,149315,149329,149331,149517,149521,149883,149889,149893,149896,150020,150023,150202,150205,150209,150242,150246,150263],[10,147880,147876],{"id":147881},"_10-json与pyecharts折线图",[14,147883,147885],{"id":147884},"_101-数据可视化","10.1 数据可视化",[40,147887,147888],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[40,147890,147891],{},"常见图表：",[19,147893,147894,147897,147900,147903,147906],{},[22,147895,147896],{},"折线图：看趋势。",[22,147898,147899],{},"柱状图：看分类对比。",[22,147901,147902],{},"饼图：看占比。",[22,147904,147905],{},"地图：看地域分布。",[22,147907,147908],{},"散点图：看两个变量之间的关系。",[40,147910,147911],{},"Python 可视化常用库：",[1393,147913,147914,147922],{},[1396,147915,147916],{},[1399,147917,147918,147920],{},[1402,147919,147125],{},[1402,147921,24703],{},[1439,147923,147924,147931,147939,147946],{},[1399,147925,147926,147928],{},[1444,147927,147157],{},[1444,147929,147930],{},"基础、经典、可定制",[1399,147932,147933,147936],{},[1444,147934,147935],{},"seaborn",[1444,147937,147938],{},"统计图表更美观",[1399,147940,147941,147943],{},[1444,147942,147165],{},[1444,147944,147945],{},"生成交互式网页图表",[1399,147947,147948,147951],{},[1444,147949,147950],{},"plotly",[1444,147952,147953],{},"交互图表能力强",[40,147955,147956],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147958,147960],{"id":147959},"_102-json回顾","10.2 JSON回顾",[40,147962,147963],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[40,147965,147966],{},"Python 字典：",[29,147968,147970],{"className":31342,"code":147969,"language":31344,"meta":35,"style":35},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[37,147971,147972,147980,147991,148000],{"__ignoreMap":35},[51,147973,147974,147976,147978],{"class":53,"line":54},[51,147975,102622],{"class":72},[51,147977,108],{"class":64},[51,147979,16534],{"class":72},[51,147981,147982,147985,147987,147989],{"class":53,"line":61},[51,147983,147984],{"class":282},"    \"name\"",[51,147986,52401],{"class":72},[51,147988,70233],{"class":282},[51,147990,32430],{"class":72},[51,147992,147993,147996,147998],{"class":53,"line":93},[51,147994,147995],{"class":282},"    \"value\"",[51,147997,52401],{"class":72},[51,147999,98422],{"class":175},[51,148001,148002],{"class":53,"line":99},[51,148003,132],{"class":72},[40,148005,148006],{},"JSON 字符串：",[29,148008,148011],{"className":148009,"code":148010,"language":146756,"meta":35,"style":35},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[37,148012,148013,148017,148028,148037],{"__ignoreMap":35},[51,148014,148015],{"class":53,"line":54},[51,148016,96],{"class":72},[51,148018,148019,148022,148024,148026],{"class":53,"line":61},[51,148020,148021],{"class":175},"  \"name\"",[51,148023,52401],{"class":72},[51,148025,70233],{"class":282},[51,148027,32430],{"class":72},[51,148029,148030,148033,148035],{"class":53,"line":93},[51,148031,148032],{"class":175},"  \"value\"",[51,148034,52401],{"class":72},[51,148036,98422],{"class":175},[51,148038,148039],{"class":53,"line":99},[51,148040,132],{"class":72},[40,148042,148043],{},"Python 与 JSON 的转换：",[29,148045,148047],{"className":31342,"code":148046,"language":31344,"meta":35,"style":35},"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",[37,148048,148049,148056,148060,148085,148089,148108,148115,148119,148129],{"__ignoreMap":35},[51,148050,148051,148053],{"class":53,"line":54},[51,148052,31356],{"class":64},[51,148054,148055],{"class":72}," json\n",[51,148057,148058],{"class":53,"line":61},[51,148059,3480],{"emptyLinePlaceholder":1192},[51,148061,148062,148064,148066,148068,148070,148072,148074,148076,148079,148081,148083],{"class":53,"line":93},[51,148063,102622],{"class":72},[51,148065,108],{"class":64},[51,148067,5522],{"class":72},[51,148069,63643],{"class":282},[51,148071,52401],{"class":72},[51,148073,70233],{"class":282},[51,148075,13397],{"class":72},[51,148077,148078],{"class":282},"\"value\"",[51,148080,52401],{"class":72},[51,148082,612],{"class":175},[51,148084,132],{"class":72},[51,148086,148087],{"class":53,"line":99},[51,148088,3480],{"emptyLinePlaceholder":1192},[51,148090,148091,148094,148096,148099,148102,148104,148106],{"class":53,"line":120},[51,148092,148093],{"class":72},"json_text ",[51,148095,108],{"class":64},[51,148097,148098],{"class":72}," json.dumps(data, ",[51,148100,148101],{"class":78},"ensure_ascii",[51,148103,108],{"class":64},[51,148105,34951],{"class":175},[51,148107,90],{"class":72},[51,148109,148110,148112],{"class":53,"line":129},[51,148111,31379],{"class":175},[51,148113,148114],{"class":72},"(json_text)\n",[51,148116,148117],{"class":53,"line":206},[51,148118,3480],{"emptyLinePlaceholder":1192},[51,148120,148121,148124,148126],{"class":53,"line":212},[51,148122,148123],{"class":72},"new_data ",[51,148125,108],{"class":64},[51,148127,148128],{"class":72}," json.loads(json_text)\n",[51,148130,148131,148133],{"class":53,"line":227},[51,148132,31379],{"class":175},[51,148134,148135],{"class":72},"(new_data)\n",[14,148137,148139],{"id":148138},"_103-安装pyecharts","10.3 安装pyecharts",[29,148141,148143],{"className":24785,"code":148142,"language":24787,"meta":35,"style":35},"pip install pyecharts\n",[37,148144,148145],{"__ignoreMap":35},[51,148146,148147,148149,148151],{"class":53,"line":54},[51,148148,24794],{"class":68},[51,148150,24797],{"class":282},[51,148152,148153],{"class":282}," pyecharts\n",[40,148155,148156],{},"验证：",[29,148158,148160],{"className":31342,"code":148159,"language":31344,"meta":35,"style":35},"import pyecharts\n\nprint(pyecharts.__version__)\n",[37,148161,148162,148168,148172],{"__ignoreMap":35},[51,148163,148164,148166],{"class":53,"line":54},[51,148165,31356],{"class":64},[51,148167,148153],{"class":72},[51,148169,148170],{"class":53,"line":61},[51,148171,3480],{"emptyLinePlaceholder":1192},[51,148173,148174,148176,148179,148182],{"class":53,"line":93},[51,148175,31379],{"class":175},[51,148177,148178],{"class":72},"(pyecharts.",[51,148180,148181],{"class":175},"__version__",[51,148183,90],{"class":72},[40,148185,148186],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148188,148190],{"id":148189},"_104-第一个折线图","10.4 第一个折线图",[29,148192,148194],{"className":31342,"code":148193,"language":31344,"meta":35,"style":35},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[37,148195,148196,148208,148212,148222,148252,148284],{"__ignoreMap":35},[51,148197,148198,148200,148203,148205],{"class":53,"line":54},[51,148199,31701],{"class":64},[51,148201,148202],{"class":72}," pyecharts.charts ",[51,148204,31356],{"class":64},[51,148206,148207],{"class":72}," Line\n",[51,148209,148210],{"class":53,"line":61},[51,148211,3480],{"emptyLinePlaceholder":1192},[51,148213,148214,148217,148219],{"class":53,"line":93},[51,148215,148216],{"class":72},"line ",[51,148218,108],{"class":64},[51,148220,148221],{"class":72}," Line()\n",[51,148223,148224,148227,148230,148232,148235,148237,148240,148242,148245,148247,148250],{"class":53,"line":99},[51,148225,148226],{"class":72},"line.add_xaxis([",[51,148228,148229],{"class":282},"\"周一\"",[51,148231,13397],{"class":72},[51,148233,148234],{"class":282},"\"周二\"",[51,148236,13397],{"class":72},[51,148238,148239],{"class":282},"\"周三\"",[51,148241,13397],{"class":72},[51,148243,148244],{"class":282},"\"周四\"",[51,148246,13397],{"class":72},[51,148248,148249],{"class":282},"\"周五\"",[51,148251,5731],{"class":72},[51,148253,148254,148257,148260,148262,148264,148266,148268,148270,148272,148274,148277,148279,148282],{"class":53,"line":120},[51,148255,148256],{"class":72},"line.add_yaxis(",[51,148258,148259],{"class":282},"\"销售额\"",[51,148261,78482],{"class":72},[51,148263,612],{"class":175},[51,148265,13397],{"class":72},[51,148267,2062],{"class":175},[51,148269,13397],{"class":72},[51,148271,2106],{"class":175},[51,148273,13397],{"class":72},[51,148275,148276],{"class":175},"150",[51,148278,13397],{"class":72},[51,148280,148281],{"class":175},"180",[51,148283,5731],{"class":72},[51,148285,148286,148289,148292],{"class":53,"line":129},[51,148287,148288],{"class":72},"line.render(",[51,148290,148291],{"class":282},"\"line.html\"",[51,148293,90],{"class":72},[40,148295,148296,148297,148300],{},"运行后会生成 ",[37,148298,148299],{},"line.html","，用浏览器打开即可看到图表。",[40,148302,148303],{},"核心步骤：",[19,148305,148306,148309,148312,148315,148318],{},[22,148307,148308],{},"导入图表类。",[22,148310,148311],{},"创建图表对象。",[22,148313,148314],{},"添加 x 轴数据。",[22,148316,148317],{},"添加 y 轴数据。",[22,148319,148320],{},"渲染为 HTML。",[14,148322,148324],{"id":148323},"_105-全局配置","10.5 全局配置",[40,148326,148327,148328,148331],{},"常用配置在 ",[37,148329,148330],{},"pyecharts.options"," 中。",[29,148333,148335],{"className":31342,"code":148334,"language":31344,"meta":35,"style":35},"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",[37,148336,148337,148354,148364,148368,148376,148400,148428,148433,148452,148471,148489,148509,148513],{"__ignoreMap":35},[51,148338,148339,148341,148344,148346,148349,148351],{"class":53,"line":54},[51,148340,31701],{"class":64},[51,148342,148343],{"class":72}," pyecharts ",[51,148345,31356],{"class":64},[51,148347,148348],{"class":72}," options ",[51,148350,32347],{"class":64},[51,148352,148353],{"class":72}," opts\n",[51,148355,148356,148358,148360,148362],{"class":53,"line":61},[51,148357,31701],{"class":64},[51,148359,148202],{"class":72},[51,148361,31356],{"class":64},[51,148363,148207],{"class":72},[51,148365,148366],{"class":53,"line":93},[51,148367,3480],{"emptyLinePlaceholder":1192},[51,148369,148370,148372,148374],{"class":53,"line":99},[51,148371,148216],{"class":72},[51,148373,108],{"class":64},[51,148375,148221],{"class":72},[51,148377,148378,148380,148382,148384,148386,148388,148390,148392,148394,148396,148398],{"class":53,"line":120},[51,148379,148226],{"class":72},[51,148381,148229],{"class":282},[51,148383,13397],{"class":72},[51,148385,148234],{"class":282},[51,148387,13397],{"class":72},[51,148389,148239],{"class":282},[51,148391,13397],{"class":72},[51,148393,148244],{"class":282},[51,148395,13397],{"class":72},[51,148397,148249],{"class":282},[51,148399,5731],{"class":72},[51,148401,148402,148404,148406,148408,148410,148412,148414,148416,148418,148420,148422,148424,148426],{"class":53,"line":129},[51,148403,148256],{"class":72},[51,148405,148259],{"class":282},[51,148407,78482],{"class":72},[51,148409,612],{"class":175},[51,148411,13397],{"class":72},[51,148413,2062],{"class":175},[51,148415,13397],{"class":72},[51,148417,2106],{"class":175},[51,148419,13397],{"class":72},[51,148421,148276],{"class":175},[51,148423,13397],{"class":72},[51,148425,148281],{"class":175},[51,148427,5731],{"class":72},[51,148429,148430],{"class":53,"line":206},[51,148431,148432],{"class":72},"line.set_global_opts(\n",[51,148434,148435,148438,148440,148443,148445,148447,148450],{"class":53,"line":212},[51,148436,148437],{"class":78},"    title_opts",[51,148439,108],{"class":64},[51,148441,148442],{"class":72},"opts.TitleOpts(",[51,148444,52371],{"class":78},[51,148446,108],{"class":64},[51,148448,148449],{"class":282},"\"一周销售额\"",[51,148451,39011],{"class":72},[51,148453,148454,148457,148459,148462,148464,148466,148469],{"class":53,"line":227},[51,148455,148456],{"class":78},"    xaxis_opts",[51,148458,108],{"class":64},[51,148460,148461],{"class":72},"opts.AxisOpts(",[51,148463,80774],{"class":78},[51,148465,108],{"class":64},[51,148467,148468],{"class":282},"\"日期\"",[51,148470,39011],{"class":72},[51,148472,148473,148476,148478,148480,148482,148484,148487],{"class":53,"line":370},[51,148474,148475],{"class":78},"    yaxis_opts",[51,148477,108],{"class":64},[51,148479,148461],{"class":72},[51,148481,80774],{"class":78},[51,148483,108],{"class":64},[51,148485,148486],{"class":282},"\"金额\"",[51,148488,39011],{"class":72},[51,148490,148491,148494,148496,148499,148502,148504,148507],{"class":53,"line":387},[51,148492,148493],{"class":78},"    tooltip_opts",[51,148495,108],{"class":64},[51,148497,148498],{"class":72},"opts.TooltipOpts(",[51,148500,148501],{"class":78},"trigger",[51,148503,108],{"class":64},[51,148505,148506],{"class":282},"\"axis\"",[51,148508,39011],{"class":72},[51,148510,148511],{"class":53,"line":404},[51,148512,90],{"class":72},[51,148514,148515,148517,148519],{"class":53,"line":415},[51,148516,148288],{"class":72},[51,148518,148291],{"class":282},[51,148520,90],{"class":72},[40,148522,148523],{},"常见全局配置：",[1393,148525,148526,148535],{},[1396,148527,148528],{},[1399,148529,148530,148533],{},[1402,148531,148532],{},"配置",[1402,148534,103660],{},[1439,148536,148537,148547,148557,148567,148577,148587],{},[1399,148538,148539,148544],{},[1444,148540,148541],{},[37,148542,148543],{},"TitleOpts",[1444,148545,148546],{},"标题",[1399,148548,148549,148554],{},[1444,148550,148551],{},[37,148552,148553],{},"LegendOpts",[1444,148555,148556],{},"图例",[1399,148558,148559,148564],{},[1444,148560,148561],{},[37,148562,148563],{},"TooltipOpts",[1444,148565,148566],{},"提示框",[1399,148568,148569,148574],{},[1444,148570,148571],{},[37,148572,148573],{},"AxisOpts",[1444,148575,148576],{},"坐标轴",[1399,148578,148579,148584],{},[1444,148580,148581],{},[37,148582,148583],{},"VisualMapOpts",[1444,148585,148586],{},"视觉映射",[1399,148588,148589,148594],{},[1444,148590,148591],{},[37,148592,148593],{},"DataZoomOpts",[1444,148595,148596],{},"区域缩放",[14,148598,148600],{"id":148599},"_106-系列配置","10.6 系列配置",[40,148602,148603],{},"系列配置作用于某一组数据。",[29,148605,148607],{"className":31342,"code":148606,"language":31344,"meta":35,"style":35},"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",[37,148608,148609,148614,148625,148654,148665,148684],{"__ignoreMap":35},[51,148610,148611],{"class":53,"line":54},[51,148612,148613],{"class":72},"line.add_yaxis(\n",[51,148615,148616,148619,148621,148623],{"class":53,"line":61},[51,148617,148618],{"class":78},"    series_name",[51,148620,108],{"class":64},[51,148622,148259],{"class":282},[51,148624,32430],{"class":72},[51,148626,148627,148630,148632,148634,148636,148638,148640,148642,148644,148646,148648,148650,148652],{"class":53,"line":93},[51,148628,148629],{"class":78},"    y_axis",[51,148631,108],{"class":64},[51,148633,2134],{"class":72},[51,148635,612],{"class":175},[51,148637,13397],{"class":72},[51,148639,2062],{"class":175},[51,148641,13397],{"class":72},[51,148643,2106],{"class":175},[51,148645,13397],{"class":72},[51,148647,148276],{"class":175},[51,148649,13397],{"class":72},[51,148651,148281],{"class":175},[51,148653,88800],{"class":72},[51,148655,148656,148659,148661,148663],{"class":53,"line":99},[51,148657,148658],{"class":78},"    is_smooth",[51,148660,108],{"class":64},[51,148662,32440],{"class":175},[51,148664,32430],{"class":72},[51,148666,148667,148670,148672,148675,148678,148680,148682],{"class":53,"line":120},[51,148668,148669],{"class":78},"    label_opts",[51,148671,108],{"class":64},[51,148673,148674],{"class":72},"opts.LabelOpts(",[51,148676,148677],{"class":78},"is_show",[51,148679,108],{"class":64},[51,148681,32440],{"class":175},[51,148683,39011],{"class":72},[51,148685,148686],{"class":53,"line":129},[51,148687,90],{"class":72},[40,148689,148690],{},"常用参数：",[19,148692,148693,148699,148705,148711,148717],{},[22,148694,148695,148698],{},[37,148696,148697],{},"series_name","：系列名称。",[22,148700,148701,148704],{},[37,148702,148703],{},"y_axis","：y 轴数据。",[22,148706,148707,148710],{},[37,148708,148709],{},"is_smooth","：是否平滑曲线。",[22,148712,148713,148716],{},[37,148714,148715],{},"label_opts","：标签配置。",[22,148718,148719,148722],{},[37,148720,148721],{},"symbol_size","：标记点大小。",[14,148724,148726],{"id":148725},"_107-多条折线","10.7 多条折线",[29,148728,148730],{"className":31342,"code":148729,"language":31344,"meta":35,"style":35},"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",[37,148731,148732,148746,148756,148760,148789,148793,148801,148806,148844,148881,148885,148902,148918,148922],{"__ignoreMap":35},[51,148733,148734,148736,148738,148740,148742,148744],{"class":53,"line":54},[51,148735,31701],{"class":64},[51,148737,148343],{"class":72},[51,148739,31356],{"class":64},[51,148741,148348],{"class":72},[51,148743,32347],{"class":64},[51,148745,148353],{"class":72},[51,148747,148748,148750,148752,148754],{"class":53,"line":61},[51,148749,31701],{"class":64},[51,148751,148202],{"class":72},[51,148753,31356],{"class":64},[51,148755,148207],{"class":72},[51,148757,148758],{"class":53,"line":93},[51,148759,3480],{"emptyLinePlaceholder":1192},[51,148761,148762,148765,148767,148769,148771,148773,148775,148777,148779,148781,148783,148785,148787],{"class":53,"line":99},[51,148763,148764],{"class":72},"dates ",[51,148766,108],{"class":64},[51,148768,53190],{"class":72},[51,148770,148229],{"class":282},[51,148772,13397],{"class":72},[51,148774,148234],{"class":282},[51,148776,13397],{"class":72},[51,148778,148239],{"class":282},[51,148780,13397],{"class":72},[51,148782,148244],{"class":282},[51,148784,13397],{"class":72},[51,148786,148249],{"class":282},[51,148788,34210],{"class":72},[51,148790,148791],{"class":53,"line":120},[51,148792,3480],{"emptyLinePlaceholder":1192},[51,148794,148795,148797,148799],{"class":53,"line":129},[51,148796,148216],{"class":72},[51,148798,108],{"class":64},[51,148800,148221],{"class":72},[51,148802,148803],{"class":53,"line":206},[51,148804,148805],{"class":72},"line.add_xaxis(dates)\n",[51,148807,148808,148810,148813,148815,148817,148819,148822,148824,148826,148828,148830,148832,148834,148836,148838,148840,148842],{"class":53,"line":212},[51,148809,148256],{"class":72},[51,148811,148812],{"class":282},"\"线上销售\"",[51,148814,78482],{"class":72},[51,148816,612],{"class":175},[51,148818,13397],{"class":72},[51,148820,148821],{"class":175},"130",[51,148823,13397],{"class":72},[51,148825,2062],{"class":175},[51,148827,13397],{"class":72},[51,148829,22010],{"class":175},[51,148831,13397],{"class":72},[51,148833,2812],{"class":175},[51,148835,113166],{"class":72},[51,148837,148709],{"class":78},[51,148839,108],{"class":64},[51,148841,32440],{"class":175},[51,148843,90],{"class":72},[51,148845,148846,148848,148851,148853,148855,148857,148859,148861,148863,148865,148867,148869,148871,148873,148875,148877,148879],{"class":53,"line":227},[51,148847,148256],{"class":72},[51,148849,148850],{"class":282},"\"线下销售\"",[51,148852,78482],{"class":72},[51,148854,1858],{"class":175},[51,148856,13397],{"class":72},[51,148858,2106],{"class":175},[51,148860,13397],{"class":72},[51,148862,612],{"class":175},[51,148864,13397],{"class":72},[51,148866,2062],{"class":175},[51,148868,13397],{"class":72},[51,148870,148276],{"class":175},[51,148872,113166],{"class":72},[51,148874,148709],{"class":78},[51,148876,108],{"class":64},[51,148878,32440],{"class":175},[51,148880,90],{"class":72},[51,148882,148883],{"class":53,"line":370},[51,148884,148432],{"class":72},[51,148886,148887,148889,148891,148893,148895,148897,148900],{"class":53,"line":387},[51,148888,148437],{"class":78},[51,148890,108],{"class":64},[51,148892,148442],{"class":72},[51,148894,52371],{"class":78},[51,148896,108],{"class":64},[51,148898,148899],{"class":282},"\"线上线下销售趋势\"",[51,148901,39011],{"class":72},[51,148903,148904,148906,148908,148910,148912,148914,148916],{"class":53,"line":404},[51,148905,148493],{"class":78},[51,148907,108],{"class":64},[51,148909,148498],{"class":72},[51,148911,148501],{"class":78},[51,148913,108],{"class":64},[51,148915,148506],{"class":282},[51,148917,39011],{"class":72},[51,148919,148920],{"class":53,"line":415},[51,148921,90],{"class":72},[51,148923,148924,148926,148929],{"class":53,"line":420},[51,148925,148288],{"class":72},[51,148927,148928],{"class":282},"\"sales.html\"",[51,148930,90],{"class":72},[40,148932,148933],{},"多条折线适合比较不同指标或不同地区。",[14,148935,148937],{"id":148936},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[40,148939,148940,148941,25582],{},"假设 ",[37,148942,148943],{},"sales.json",[29,148945,148947],{"className":148009,"code":148946,"language":146756,"meta":35,"style":35},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[37,148948,148949,148954,148986,149014,149042],{"__ignoreMap":35},[51,148950,148951],{"class":53,"line":54},[51,148952,148953],{"class":72},"[\n",[51,148955,148956,148959,148962,148964,148966,148968,148971,148973,148975,148977,148980,148982,148984],{"class":53,"line":61},[51,148957,148958],{"class":72},"  {",[51,148960,148961],{"class":175},"\"date\"",[51,148963,52401],{"class":72},[51,148965,148229],{"class":282},[51,148967,13397],{"class":72},[51,148969,148970],{"class":175},"\"online\"",[51,148972,52401],{"class":72},[51,148974,612],{"class":175},[51,148976,13397],{"class":72},[51,148978,148979],{"class":175},"\"offline\"",[51,148981,52401],{"class":72},[51,148983,1858],{"class":175},[51,148985,6004],{"class":72},[51,148987,148988,148990,148992,148994,148996,148998,149000,149002,149004,149006,149008,149010,149012],{"class":53,"line":93},[51,148989,148958],{"class":72},[51,148991,148961],{"class":175},[51,148993,52401],{"class":72},[51,148995,148234],{"class":282},[51,148997,13397],{"class":72},[51,148999,148970],{"class":175},[51,149001,52401],{"class":72},[51,149003,148821],{"class":175},[51,149005,13397],{"class":72},[51,149007,148979],{"class":175},[51,149009,52401],{"class":72},[51,149011,2106],{"class":175},[51,149013,6004],{"class":72},[51,149015,149016,149018,149020,149022,149024,149026,149028,149030,149032,149034,149036,149038,149040],{"class":53,"line":99},[51,149017,148958],{"class":72},[51,149019,148961],{"class":175},[51,149021,52401],{"class":72},[51,149023,148239],{"class":282},[51,149025,13397],{"class":72},[51,149027,148970],{"class":175},[51,149029,52401],{"class":72},[51,149031,2062],{"class":175},[51,149033,13397],{"class":72},[51,149035,148979],{"class":175},[51,149037,52401],{"class":72},[51,149039,612],{"class":175},[51,149041,132],{"class":72},[51,149043,149044],{"class":53,"line":120},[51,149045,34210],{"class":72},[40,149047,149048],{},"读取并绘图：",[29,149050,149052],{"className":31342,"code":149051,"language":31344,"meta":35,"style":35},"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",[37,149053,149054,149060,149074,149084,149088,149120,149133,149137,149145,149154,149163,149167,149179,149188,149197,149206,149210,149218,149222,149239,149256,149260,149277,149293,149297],{"__ignoreMap":35},[51,149055,149056,149058],{"class":53,"line":54},[51,149057,31356],{"class":64},[51,149059,148055],{"class":72},[51,149061,149062,149064,149066,149068,149070,149072],{"class":53,"line":61},[51,149063,31701],{"class":64},[51,149065,148343],{"class":72},[51,149067,31356],{"class":64},[51,149069,148348],{"class":72},[51,149071,32347],{"class":64},[51,149073,148353],{"class":72},[51,149075,149076,149078,149080,149082],{"class":53,"line":93},[51,149077,31701],{"class":64},[51,149079,148202],{"class":72},[51,149081,31356],{"class":64},[51,149083,148207],{"class":72},[51,149085,149086],{"class":53,"line":99},[51,149087,3480],{"emptyLinePlaceholder":1192},[51,149089,149090,149092,149094,149096,149099,149101,149103,149105,149107,149109,149111,149113,149115,149118],{"class":53,"line":120},[51,149091,108797],{"class":64},[51,149093,147755],{"class":175},[51,149095,73],{"class":72},[51,149097,149098],{"class":282},"\"sales.json\"",[51,149100,13397],{"class":72},[51,149102,147765],{"class":282},[51,149104,13397],{"class":72},[51,149106,147770],{"class":78},[51,149108,108],{"class":64},[51,149110,147775],{"class":282},[51,149112,14676],{"class":72},[51,149114,32347],{"class":64},[51,149116,149117],{"class":78}," file",[51,149119,4816],{"class":72},[51,149121,149122,149124,149126,149129,149131],{"class":53,"line":129},[51,149123,102385],{"class":72},[51,149125,108],{"class":64},[51,149127,149128],{"class":72}," json.load(",[51,149130,46318],{"class":78},[51,149132,90],{"class":72},[51,149134,149135],{"class":53,"line":206},[51,149136,3480],{"emptyLinePlaceholder":1192},[51,149138,149139,149141,149143],{"class":53,"line":212},[51,149140,148764],{"class":72},[51,149142,108],{"class":64},[51,149144,52802],{"class":72},[51,149146,149147,149150,149152],{"class":53,"line":227},[51,149148,149149],{"class":72},"online_sales ",[51,149151,108],{"class":64},[51,149153,52802],{"class":72},[51,149155,149156,149159,149161],{"class":53,"line":370},[51,149157,149158],{"class":72},"offline_sales ",[51,149160,108],{"class":64},[51,149162,52802],{"class":72},[51,149164,149165],{"class":53,"line":387},[51,149166,3480],{"emptyLinePlaceholder":1192},[51,149168,149169,149171,149174,149176],{"class":53,"line":404},[51,149170,4102],{"class":64},[51,149172,149173],{"class":72}," item ",[51,149175,27007],{"class":64},[51,149177,149178],{"class":72}," data:\n",[51,149180,149181,149184,149186],{"class":53,"line":415},[51,149182,149183],{"class":72},"    dates.append(item[",[51,149185,148961],{"class":282},[51,149187,5731],{"class":72},[51,149189,149190,149193,149195],{"class":53,"line":420},[51,149191,149192],{"class":72},"    online_sales.append(item[",[51,149194,148970],{"class":282},[51,149196,5731],{"class":72},[51,149198,149199,149202,149204],{"class":53,"line":429},[51,149200,149201],{"class":72},"    offline_sales.append(item[",[51,149203,148979],{"class":282},[51,149205,5731],{"class":72},[51,149207,149208],{"class":53,"line":434},[51,149209,3480],{"emptyLinePlaceholder":1192},[51,149211,149212,149214,149216],{"class":53,"line":448},[51,149213,148216],{"class":72},[51,149215,108],{"class":64},[51,149217,148221],{"class":72},[51,149219,149220],{"class":53,"line":462},[51,149221,148805],{"class":72},[51,149223,149224,149226,149228,149231,149233,149235,149237],{"class":53,"line":470},[51,149225,148256],{"class":72},[51,149227,148812],{"class":282},[51,149229,149230],{"class":72},", online_sales, ",[51,149232,148709],{"class":78},[51,149234,108],{"class":64},[51,149236,32440],{"class":175},[51,149238,90],{"class":72},[51,149240,149241,149243,149245,149248,149250,149252,149254],{"class":53,"line":2783},[51,149242,148256],{"class":72},[51,149244,148850],{"class":282},[51,149246,149247],{"class":72},", offline_sales, ",[51,149249,148709],{"class":78},[51,149251,108],{"class":64},[51,149253,32440],{"class":175},[51,149255,90],{"class":72},[51,149257,149258],{"class":53,"line":2788},[51,149259,148432],{"class":72},[51,149261,149262,149264,149266,149268,149270,149272,149275],{"class":53,"line":2817},[51,149263,148437],{"class":78},[51,149265,108],{"class":64},[51,149267,148442],{"class":72},[51,149269,52371],{"class":78},[51,149271,108],{"class":64},[51,149273,149274],{"class":282},"\"销售趋势\"",[51,149276,39011],{"class":72},[51,149278,149279,149281,149283,149285,149287,149289,149291],{"class":53,"line":2822},[51,149280,148493],{"class":78},[51,149282,108],{"class":64},[51,149284,148498],{"class":72},[51,149286,148501],{"class":78},[51,149288,108],{"class":64},[51,149290,148506],{"class":282},[51,149292,39011],{"class":72},[51,149294,149295],{"class":53,"line":2839},[51,149296,90],{"class":72},[51,149298,149299,149301,149303],{"class":53,"line":2844},[51,149300,148288],{"class":72},[51,149302,148928],{"class":282},[51,149304,90],{"class":72},[14,149306,149308],{"id":149307},"_109-数据清洗","10.9 数据清洗",[40,149310,149311],{},"真实数据经常不整齐，需要清洗。",[40,149313,149314],{},"常见问题：",[19,149316,149317,149320,149323,149326],{},[22,149318,149319],{},"数字是字符串。",[22,149321,149322],{},"字段缺失。",[22,149324,149325],{},"空值。",[22,149327,149328],{},"日期格式不统一。",[40,149330,16097],{},[29,149332,149334],{"className":31342,"code":149333,"language":31344,"meta":35,"style":35},"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",[37,149335,149336,149345,149368,149388,149409,149413,149417,149425,149434,149438,149449,149463,149472,149477,149481,149489,149499,149503,149510],{"__ignoreMap":35},[51,149337,149338,149341,149343],{"class":53,"line":54},[51,149339,149340],{"class":72},"raw_data ",[51,149342,108],{"class":64},[51,149344,56411],{"class":72},[51,149346,149347,149350,149352,149354,149356,149358,149361,149363,149366],{"class":53,"line":61},[51,149348,149349],{"class":72},"    {",[51,149351,148961],{"class":282},[51,149353,52401],{"class":72},[51,149355,148229],{"class":282},[51,149357,13397],{"class":72},[51,149359,149360],{"class":282},"\"sales\"",[51,149362,52401],{"class":72},[51,149364,149365],{"class":282},"\"100\"",[51,149367,6004],{"class":72},[51,149369,149370,149372,149374,149376,149378,149380,149382,149384,149386],{"class":53,"line":93},[51,149371,149349],{"class":72},[51,149373,148961],{"class":282},[51,149375,52401],{"class":72},[51,149377,148234],{"class":282},[51,149379,13397],{"class":72},[51,149381,149360],{"class":282},[51,149383,52401],{"class":72},[51,149385,8614],{"class":282},[51,149387,6004],{"class":72},[51,149389,149390,149392,149394,149396,149398,149400,149402,149404,149407],{"class":53,"line":99},[51,149391,149349],{"class":72},[51,149393,148961],{"class":282},[51,149395,52401],{"class":72},[51,149397,148239],{"class":282},[51,149399,13397],{"class":72},[51,149401,149360],{"class":282},[51,149403,52401],{"class":72},[51,149405,149406],{"class":282},"\"120\"",[51,149408,6004],{"class":72},[51,149410,149411],{"class":53,"line":120},[51,149412,34210],{"class":72},[51,149414,149415],{"class":53,"line":129},[51,149416,3480],{"emptyLinePlaceholder":1192},[51,149418,149419,149421,149423],{"class":53,"line":206},[51,149420,148764],{"class":72},[51,149422,108],{"class":64},[51,149424,52802],{"class":72},[51,149426,149427,149430,149432],{"class":53,"line":212},[51,149428,149429],{"class":72},"sales ",[51,149431,108],{"class":64},[51,149433,52802],{"class":72},[51,149435,149436],{"class":53,"line":227},[51,149437,3480],{"emptyLinePlaceholder":1192},[51,149439,149440,149442,149444,149446],{"class":53,"line":370},[51,149441,4102],{"class":64},[51,149443,149173],{"class":72},[51,149445,27007],{"class":64},[51,149447,149448],{"class":72}," raw_data:\n",[51,149450,149451,149454,149456,149459,149461],{"class":53,"line":387},[51,149452,149453],{"class":72},"    value ",[51,149455,108],{"class":64},[51,149457,149458],{"class":72}," item.get(",[51,149460,149360],{"class":282},[51,149462,90],{"class":72},[51,149464,149465,149467,149469],{"class":53,"line":404},[51,149466,4178],{"class":64},[51,149468,39894],{"class":64},[51,149470,149471],{"class":72}," value:\n",[51,149473,149474],{"class":53,"line":415},[51,149475,149476],{"class":64},"        continue\n",[51,149478,149479],{"class":53,"line":420},[51,149480,3480],{"emptyLinePlaceholder":1192},[51,149482,149483,149485,149487],{"class":53,"line":429},[51,149484,149183],{"class":72},[51,149486,148961],{"class":282},[51,149488,5731],{"class":72},[51,149490,149491,149494,149496],{"class":53,"line":434},[51,149492,149493],{"class":72},"    sales.append(",[51,149495,65],{"class":175},[51,149497,149498],{"class":72},"(value))\n",[51,149500,149501],{"class":53,"line":448},[51,149502,3480],{"emptyLinePlaceholder":1192},[51,149504,149505,149507],{"class":53,"line":462},[51,149506,31379],{"class":175},[51,149508,149509],{"class":72},"(dates)\n",[51,149511,149512,149514],{"class":53,"line":470},[51,149513,31379],{"class":175},[51,149515,149516],{"class":72},"(sales)\n",[14,149518,149520],{"id":149519},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[29,149522,149524],{"className":31342,"code":149523,"language":31344,"meta":35,"style":35},"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",[37,149525,149526,149540,149550,149554,149562,149583,149605,149627,149649,149671,149675,149679,149701,149722,149726,149734,149738,149742,149752,149761,149771,149787,149791,149795,149812,149828,149844,149860,149870,149874],{"__ignoreMap":35},[51,149527,149528,149530,149532,149534,149536,149538],{"class":53,"line":54},[51,149529,31701],{"class":64},[51,149531,148343],{"class":72},[51,149533,31356],{"class":64},[51,149535,148348],{"class":72},[51,149537,32347],{"class":64},[51,149539,148353],{"class":72},[51,149541,149542,149544,149546,149548],{"class":53,"line":61},[51,149543,31701],{"class":64},[51,149545,148202],{"class":72},[51,149547,31356],{"class":64},[51,149549,148207],{"class":72},[51,149551,149552],{"class":53,"line":93},[51,149553,3480],{"emptyLinePlaceholder":1192},[51,149555,149556,149558,149560],{"class":53,"line":99},[51,149557,149429],{"class":72},[51,149559,108],{"class":64},[51,149561,56411],{"class":72},[51,149563,149564,149566,149568,149570,149573,149575,149577,149579,149581],{"class":53,"line":120},[51,149565,149349],{"class":72},[51,149567,148961],{"class":282},[51,149569,52401],{"class":72},[51,149571,149572],{"class":282},"\"2024-10-01\"",[51,149574,13397],{"class":72},[51,149576,85048],{"class":282},[51,149578,52401],{"class":72},[51,149580,92987],{"class":175},[51,149582,6004],{"class":72},[51,149584,149585,149587,149589,149591,149594,149596,149598,149600,149603],{"class":53,"line":129},[51,149586,149349],{"class":72},[51,149588,148961],{"class":282},[51,149590,52401],{"class":72},[51,149592,149593],{"class":282},"\"2024-10-02\"",[51,149595,13397],{"class":72},[51,149597,85048],{"class":282},[51,149599,52401],{"class":72},[51,149601,149602],{"class":175},"1800",[51,149604,6004],{"class":72},[51,149606,149607,149609,149611,149613,149616,149618,149620,149622,149625],{"class":53,"line":206},[51,149608,149349],{"class":72},[51,149610,148961],{"class":282},[51,149612,52401],{"class":72},[51,149614,149615],{"class":282},"\"2024-10-03\"",[51,149617,13397],{"class":72},[51,149619,85048],{"class":282},[51,149621,52401],{"class":72},[51,149623,149624],{"class":175},"1500",[51,149626,6004],{"class":72},[51,149628,149629,149631,149633,149635,149638,149640,149642,149644,149647],{"class":53,"line":212},[51,149630,149349],{"class":72},[51,149632,148961],{"class":282},[51,149634,52401],{"class":72},[51,149636,149637],{"class":282},"\"2024-10-04\"",[51,149639,13397],{"class":72},[51,149641,85048],{"class":282},[51,149643,52401],{"class":72},[51,149645,149646],{"class":175},"2100",[51,149648,6004],{"class":72},[51,149650,149651,149653,149655,149657,149660,149662,149664,149666,149669],{"class":53,"line":227},[51,149652,149349],{"class":72},[51,149654,148961],{"class":282},[51,149656,52401],{"class":72},[51,149658,149659],{"class":282},"\"2024-10-05\"",[51,149661,13397],{"class":72},[51,149663,85048],{"class":282},[51,149665,52401],{"class":72},[51,149667,149668],{"class":175},"2600",[51,149670,6004],{"class":72},[51,149672,149673],{"class":53,"line":370},[51,149674,34210],{"class":72},[51,149676,149677],{"class":53,"line":387},[51,149678,3480],{"emptyLinePlaceholder":1192},[51,149680,149681,149683,149685,149688,149690,149692,149694,149696,149698],{"class":53,"line":404},[51,149682,148764],{"class":72},[51,149684,108],{"class":64},[51,149686,149687],{"class":72}," [item[",[51,149689,148961],{"class":282},[51,149691,5517],{"class":72},[51,149693,4102],{"class":64},[51,149695,149173],{"class":72},[51,149697,27007],{"class":64},[51,149699,149700],{"class":72}," sales]\n",[51,149702,149703,149706,149708,149710,149712,149714,149716,149718,149720],{"class":53,"line":415},[51,149704,149705],{"class":72},"amounts ",[51,149707,108],{"class":64},[51,149709,149687],{"class":72},[51,149711,85048],{"class":282},[51,149713,5517],{"class":72},[51,149715,4102],{"class":64},[51,149717,149173],{"class":72},[51,149719,27007],{"class":64},[51,149721,149700],{"class":72},[51,149723,149724],{"class":53,"line":420},[51,149725,3480],{"emptyLinePlaceholder":1192},[51,149727,149728,149730,149732],{"class":53,"line":429},[51,149729,148216],{"class":72},[51,149731,108],{"class":64},[51,149733,148221],{"class":72},[51,149735,149736],{"class":53,"line":434},[51,149737,148805],{"class":72},[51,149739,149740],{"class":53,"line":448},[51,149741,148613],{"class":72},[51,149743,149744,149746,149748,149750],{"class":53,"line":462},[51,149745,148618],{"class":78},[51,149747,108],{"class":64},[51,149749,148259],{"class":282},[51,149751,32430],{"class":72},[51,149753,149754,149756,149758],{"class":53,"line":470},[51,149755,148629],{"class":78},[51,149757,108],{"class":64},[51,149759,149760],{"class":72},"amounts,\n",[51,149762,149763,149765,149767,149769],{"class":53,"line":2783},[51,149764,148658],{"class":78},[51,149766,108],{"class":64},[51,149768,32440],{"class":175},[51,149770,32430],{"class":72},[51,149772,149773,149775,149777,149779,149781,149783,149785],{"class":53,"line":2788},[51,149774,148669],{"class":78},[51,149776,108],{"class":64},[51,149778,148674],{"class":72},[51,149780,148677],{"class":78},[51,149782,108],{"class":64},[51,149784,32440],{"class":175},[51,149786,39011],{"class":72},[51,149788,149789],{"class":53,"line":2817},[51,149790,90],{"class":72},[51,149792,149793],{"class":53,"line":2822},[51,149794,148432],{"class":72},[51,149796,149797,149799,149801,149803,149805,149807,149810],{"class":53,"line":2839},[51,149798,148437],{"class":78},[51,149800,108],{"class":64},[51,149802,148442],{"class":72},[51,149804,52371],{"class":78},[51,149806,108],{"class":64},[51,149808,149809],{"class":282},"\"每日销售额\"",[51,149811,39011],{"class":72},[51,149813,149814,149816,149818,149820,149822,149824,149826],{"class":53,"line":2844},[51,149815,148456],{"class":78},[51,149817,108],{"class":64},[51,149819,148461],{"class":72},[51,149821,80774],{"class":78},[51,149823,108],{"class":64},[51,149825,148468],{"class":282},[51,149827,39011],{"class":72},[51,149829,149830,149832,149834,149836,149838,149840,149842],{"class":53,"line":2849},[51,149831,148475],{"class":78},[51,149833,108],{"class":64},[51,149835,148461],{"class":72},[51,149837,80774],{"class":78},[51,149839,108],{"class":64},[51,149841,148486],{"class":282},[51,149843,39011],{"class":72},[51,149845,149846,149848,149850,149852,149854,149856,149858],{"class":53,"line":2854},[51,149847,148493],{"class":78},[51,149849,108],{"class":64},[51,149851,148498],{"class":72},[51,149853,148501],{"class":78},[51,149855,108],{"class":64},[51,149857,148506],{"class":282},[51,149859,39011],{"class":72},[51,149861,149862,149865,149867],{"class":53,"line":2868},[51,149863,149864],{"class":78},"    datazoom_opts",[51,149866,108],{"class":64},[51,149868,149869],{"class":72},"[opts.DataZoomOpts()],\n",[51,149871,149872],{"class":53,"line":2873},[51,149873,90],{"class":72},[51,149875,149876,149878,149881],{"class":53,"line":3657},[51,149877,148288],{"class":72},[51,149879,149880],{"class":282},"\"daily_sales.html\"",[51,149882,90],{"class":72},[40,149884,149885,149888],{},[37,149886,149887],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149890,149892],{"id":149891},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[40,149894,149895],{},"如果数据结构如下：",[29,149897,149899],{"className":31342,"code":149898,"language":31344,"meta":35,"style":35},"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",[37,149900,149901,149909,149917,149939,149960,149965,149972,149992,150012,150016],{"__ignoreMap":35},[51,149902,149903,149905,149907],{"class":53,"line":54},[51,149904,102622],{"class":72},[51,149906,108],{"class":64},[51,149908,16534],{"class":72},[51,149910,149911,149914],{"class":53,"line":61},[51,149912,149913],{"class":282},"    \"北京\"",[51,149915,149916],{"class":72},": [\n",[51,149918,149919,149921,149923,149925,149928,149930,149933,149935,149937],{"class":53,"line":93},[51,149920,5991],{"class":72},[51,149922,148961],{"class":282},[51,149924,52401],{"class":72},[51,149926,149927],{"class":282},"\"2024-01-01\"",[51,149929,13397],{"class":72},[51,149931,149932],{"class":282},"\"confirm\"",[51,149934,52401],{"class":72},[51,149936,443],{"class":175},[51,149938,6004],{"class":72},[51,149940,149941,149943,149945,149947,149950,149952,149954,149956,149958],{"class":53,"line":99},[51,149942,5991],{"class":72},[51,149944,148961],{"class":282},[51,149946,52401],{"class":72},[51,149948,149949],{"class":282},"\"2024-01-02\"",[51,149951,13397],{"class":72},[51,149953,149932],{"class":282},[51,149955,52401],{"class":72},[51,149957,1744],{"class":175},[51,149959,6004],{"class":72},[51,149961,149962],{"class":53,"line":120},[51,149963,149964],{"class":72},"    ],\n",[51,149966,149967,149970],{"class":53,"line":129},[51,149968,149969],{"class":282},"    \"上海\"",[51,149971,149916],{"class":72},[51,149973,149974,149976,149978,149980,149982,149984,149986,149988,149990],{"class":53,"line":206},[51,149975,5991],{"class":72},[51,149977,148961],{"class":282},[51,149979,52401],{"class":72},[51,149981,149927],{"class":282},[51,149983,13397],{"class":72},[51,149985,149932],{"class":282},[51,149987,52401],{"class":72},[51,149989,1643],{"class":175},[51,149991,6004],{"class":72},[51,149993,149994,149996,149998,150000,150002,150004,150006,150008,150010],{"class":53,"line":212},[51,149995,5991],{"class":72},[51,149997,148961],{"class":282},[51,149999,52401],{"class":72},[51,150001,149949],{"class":282},[51,150003,13397],{"class":72},[51,150005,149932],{"class":282},[51,150007,52401],{"class":72},[51,150009,1769],{"class":175},[51,150011,6004],{"class":72},[51,150013,150014],{"class":53,"line":227},[51,150015,149964],{"class":72},[51,150017,150018],{"class":53,"line":370},[51,150019,132],{"class":72},[40,150021,150022],{},"绘制多地区趋势：",[29,150024,150026],{"className":31342,"code":150025,"language":31344,"meta":35,"style":35},"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",[37,150027,150028,150042,150052,150056,150081,150085,150093,150097,150101,150113,150135,150148,150152,150156,150173,150189,150193],{"__ignoreMap":35},[51,150029,150030,150032,150034,150036,150038,150040],{"class":53,"line":54},[51,150031,31701],{"class":64},[51,150033,148343],{"class":72},[51,150035,31356],{"class":64},[51,150037,148348],{"class":72},[51,150039,32347],{"class":64},[51,150041,148353],{"class":72},[51,150043,150044,150046,150048,150050],{"class":53,"line":61},[51,150045,31701],{"class":64},[51,150047,148202],{"class":72},[51,150049,31356],{"class":64},[51,150051,148207],{"class":72},[51,150053,150054],{"class":53,"line":93},[51,150055,3480],{"emptyLinePlaceholder":1192},[51,150057,150058,150060,150062,150064,150066,150068,150070,150072,150074,150077,150079],{"class":53,"line":99},[51,150059,148764],{"class":72},[51,150061,108],{"class":64},[51,150063,149687],{"class":72},[51,150065,148961],{"class":282},[51,150067,5517],{"class":72},[51,150069,4102],{"class":64},[51,150071,149173],{"class":72},[51,150073,27007],{"class":64},[51,150075,150076],{"class":72}," data[",[51,150078,70233],{"class":282},[51,150080,78491],{"class":72},[51,150082,150083],{"class":53,"line":120},[51,150084,3480],{"emptyLinePlaceholder":1192},[51,150086,150087,150089,150091],{"class":53,"line":129},[51,150088,148216],{"class":72},[51,150090,108],{"class":64},[51,150092,148221],{"class":72},[51,150094,150095],{"class":53,"line":206},[51,150096,148805],{"class":72},[51,150098,150099],{"class":53,"line":212},[51,150100,3480],{"emptyLinePlaceholder":1192},[51,150102,150103,150105,150108,150110],{"class":53,"line":227},[51,150104,4102],{"class":64},[51,150106,150107],{"class":72}," city, records ",[51,150109,27007],{"class":64},[51,150111,150112],{"class":72}," data.items():\n",[51,150114,150115,150118,150120,150122,150124,150126,150128,150130,150132],{"class":53,"line":370},[51,150116,150117],{"class":72},"    values ",[51,150119,108],{"class":64},[51,150121,149687],{"class":72},[51,150123,149932],{"class":282},[51,150125,5517],{"class":72},[51,150127,4102],{"class":64},[51,150129,149173],{"class":72},[51,150131,27007],{"class":64},[51,150133,150134],{"class":72}," records]\n",[51,150136,150137,150140,150142,150144,150146],{"class":53,"line":387},[51,150138,150139],{"class":72},"    line.add_yaxis(city, values, ",[51,150141,148709],{"class":78},[51,150143,108],{"class":64},[51,150145,32440],{"class":175},[51,150147,90],{"class":72},[51,150149,150150],{"class":53,"line":404},[51,150151,3480],{"emptyLinePlaceholder":1192},[51,150153,150154],{"class":53,"line":415},[51,150155,148432],{"class":72},[51,150157,150158,150160,150162,150164,150166,150168,150171],{"class":53,"line":420},[51,150159,148437],{"class":78},[51,150161,108],{"class":64},[51,150163,148442],{"class":72},[51,150165,52371],{"class":78},[51,150167,108],{"class":64},[51,150169,150170],{"class":282},"\"多地区趋势图\"",[51,150172,39011],{"class":72},[51,150174,150175,150177,150179,150181,150183,150185,150187],{"class":53,"line":429},[51,150176,148493],{"class":78},[51,150178,108],{"class":64},[51,150180,148498],{"class":72},[51,150182,148501],{"class":78},[51,150184,108],{"class":64},[51,150186,148506],{"class":282},[51,150188,39011],{"class":72},[51,150190,150191],{"class":53,"line":434},[51,150192,90],{"class":72},[51,150194,150195,150197,150200],{"class":53,"line":448},[51,150196,148288],{"class":72},[51,150198,150199],{"class":282},"\"trend.html\"",[51,150201,90],{"class":72},[40,150203,150204],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150206,150208],{"id":150207},"_1012-易错点","10.12 易错点",[19,150210,150211,150217,150223,150233,150239],{},[22,150212,150213,150216],{},[37,150214,150215],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[22,150218,150219,150222],{},[37,150220,150221],{},"render()"," 生成的是 HTML，不是图片。",[22,150224,150225,150226,150229,150230,29349],{},"JSON 字符串用 ",[37,150227,150228],{},"json.loads()","，JSON 文件用 ",[37,150231,150232],{},"json.load()",[22,150234,150235,150236,29349],{},"中文 JSON 保存时加 ",[37,150237,150238],{},"ensure_ascii=False",[22,150240,150241],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150243,150245],{"id":150244},"_1013-本章练习","10.13 本章练习",[19,150247,150248,150251,150254,150257,150260],{},[22,150249,150250],{},"安装 pyecharts 并生成第一个折线图。",[22,150252,150253],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[22,150255,150256],{},"绘制两条折线，对比线上和线下销售额。",[22,150258,150259],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[22,150261,150262],{},"对含有空值的销售数据进行清洗后再绘图。",[1179,150264,150265],{},"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":35,"searchDepth":61,"depth":61,"links":150267},[150268,150269,150270,150271,150272,150273,150274,150275,150276,150277,150278,150279,150280],{"id":147884,"depth":61,"text":147885},{"id":147959,"depth":61,"text":147960},{"id":148138,"depth":61,"text":148139},{"id":148189,"depth":61,"text":148190},{"id":148323,"depth":61,"text":148324},{"id":148599,"depth":61,"text":148600},{"id":148725,"depth":61,"text":148726},{"id":148936,"depth":61,"text":148937},{"id":149307,"depth":61,"text":149308},{"id":149519,"depth":61,"text":149520},{"id":149891,"depth":61,"text":149892},{"id":150207,"depth":61,"text":150208},{"id":150244,"depth":61,"text":150245},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147876,"description":24339},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150287,"title":150288,"body":150289,"description":24339,"extension":1190,"meta":152649,"navigation":1192,"path":152650,"seo":152651,"stem":152652,"__hash__":152653},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150290,"toc":152626},[150291,150294,150298,150301,150304,150380,150383,150474,150477,150481,150484,150528,150541,150545,150548,150615,150618,150622,150625,150709,150717,150721,150726,150867,150870,150881,150887,150893,151007,151011,151014,151017,151270,151273,151277,151280,151384,151387,151391,151542,151546,151553,151666,151670,151673,151779,151782,151786,151789,151820,151823,151928,151931,151935,151939,151949,152017,152021,152028,152092,152095,152099,152105,152201,152210,152214,152538,152547,152551,152579,152583,152623],[10,150292,150288],{"id":150293},"_11-面向对象基础",[14,150295,150297],{"id":150296},"_111-什么是面向对象","11.1 什么是面向对象",[40,150299,150300],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[40,150302,150303],{},"面向过程：",[29,150305,150307],{"className":31342,"code":150306,"language":31344,"meta":35,"style":35},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[37,150308,150309,150318,150326,150330,150340,150371,150375],{"__ignoreMap":35},[51,150310,150311,150313,150315],{"class":53,"line":54},[51,150312,147500],{"class":72},[51,150314,108],{"class":64},[51,150316,150317],{"class":282}," \"小明\"\n",[51,150319,150320,150322,150324],{"class":53,"line":61},[51,150321,147510],{"class":72},[51,150323,108],{"class":64},[51,150325,147515],{"class":175},[51,150327,150328],{"class":53,"line":93},[51,150329,3480],{"emptyLinePlaceholder":1192},[51,150331,150332,150334,150337],{"class":53,"line":99},[51,150333,32911],{"class":64},[51,150335,150336],{"class":68}," introduce",[51,150338,150339],{"class":72},"(name, age):\n",[51,150341,150342,150344,150346,150348,150351,150353,150355,150357,150360,150362,150364,150366,150369],{"class":53,"line":120},[51,150343,32263],{"class":175},[51,150345,73],{"class":72},[51,150347,1311],{"class":64},[51,150349,150350],{"class":282},"\"我叫",[51,150352,2140],{"class":175},[51,150354,80774],{"class":72},[51,150356,2190],{"class":175},[51,150358,150359],{"class":282},"，今年",[51,150361,2140],{"class":175},[51,150363,71185],{"class":72},[51,150365,2190],{"class":175},[51,150367,150368],{"class":282},"岁\"",[51,150370,90],{"class":72},[51,150372,150373],{"class":53,"line":129},[51,150374,3480],{"emptyLinePlaceholder":1192},[51,150376,150377],{"class":53,"line":206},[51,150378,150379],{"class":72},"introduce(name, age)\n",[40,150381,150382],{},"面向对象：",[29,150384,150386],{"className":31342,"code":150385,"language":31344,"meta":35,"style":35},"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",[37,150387,150388,150396,150404,150433,150437,150441,150451,150460,150469],{"__ignoreMap":35},[51,150389,150390,150392,150394],{"class":53,"line":54},[51,150391,15656],{"class":64},[51,150393,8860],{"class":68},[51,150395,4816],{"class":72},[51,150397,150398,150400,150402],{"class":53,"line":61},[51,150399,31765],{"class":64},[51,150401,150336],{"class":68},[51,150403,31771],{"class":72},[51,150405,150406,150408,150410,150412,150414,150417,150419,150421,150423,150425,150427,150429,150431],{"class":53,"line":93},[51,150407,33415],{"class":175},[51,150409,73],{"class":72},[51,150411,1311],{"class":64},[51,150413,150350],{"class":282},[51,150415,150416],{"class":175},"{self",[51,150418,81265],{"class":72},[51,150420,2190],{"class":175},[51,150422,150359],{"class":282},[51,150424,150416],{"class":175},[51,150426,81277],{"class":72},[51,150428,2190],{"class":175},[51,150430,150368],{"class":282},[51,150432,90],{"class":72},[51,150434,150435],{"class":53,"line":99},[51,150436,3480],{"emptyLinePlaceholder":1192},[51,150438,150439],{"class":53,"line":120},[51,150440,3480],{"emptyLinePlaceholder":1192},[51,150442,150443,150446,150448],{"class":53,"line":129},[51,150444,150445],{"class":72},"student ",[51,150447,108],{"class":64},[51,150449,150450],{"class":72}," Student()\n",[51,150452,150453,150456,150458],{"class":53,"line":206},[51,150454,150455],{"class":72},"student.name ",[51,150457,108],{"class":64},[51,150459,150317],{"class":282},[51,150461,150462,150465,150467],{"class":53,"line":212},[51,150463,150464],{"class":72},"student.age ",[51,150466,108],{"class":64},[51,150468,147515],{"class":175},[51,150470,150471],{"class":53,"line":227},[51,150472,150473],{"class":72},"student.introduce()\n",[40,150475,150476],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150478,150480],{"id":150479},"_112-类和对象","11.2 类和对象",[40,150482,150483],{},"类是模板，对象是根据模板创建出来的具体实例。",[29,150485,150487],{"className":31342,"code":150486,"language":31344,"meta":35,"style":35},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[37,150488,150489,150497,150502,150506,150510,150519],{"__ignoreMap":35},[51,150490,150491,150493,150495],{"class":53,"line":54},[51,150492,15656],{"class":64},[51,150494,8860],{"class":68},[51,150496,4816],{"class":72},[51,150498,150499],{"class":53,"line":61},[51,150500,150501],{"class":64},"    pass\n",[51,150503,150504],{"class":53,"line":93},[51,150505,3480],{"emptyLinePlaceholder":1192},[51,150507,150508],{"class":53,"line":99},[51,150509,3480],{"emptyLinePlaceholder":1192},[51,150511,150512,150515,150517],{"class":53,"line":120},[51,150513,150514],{"class":72},"student1 ",[51,150516,108],{"class":64},[51,150518,150450],{"class":72},[51,150520,150521,150524,150526],{"class":53,"line":129},[51,150522,150523],{"class":72},"student2 ",[51,150525,108],{"class":64},[51,150527,150450],{"class":72},[40,150529,150530,150533,150534,101982,150537,150540],{},[37,150531,150532],{},"Student"," 是类，",[37,150535,150536],{},"student1",[37,150538,150539],{},"student2"," 是对象。",[14,150542,150544],{"id":150543},"_113-属性","11.3 属性",[40,150546,150547],{},"属性是对象保存的数据。",[29,150549,150551],{"className":31342,"code":150550,"language":31344,"meta":35,"style":35},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[37,150552,150553,150561,150565,150569,150573,150581,150589,150597,150601,150608],{"__ignoreMap":35},[51,150554,150555,150557,150559],{"class":53,"line":54},[51,150556,15656],{"class":64},[51,150558,8860],{"class":68},[51,150560,4816],{"class":72},[51,150562,150563],{"class":53,"line":61},[51,150564,150501],{"class":64},[51,150566,150567],{"class":53,"line":93},[51,150568,3480],{"emptyLinePlaceholder":1192},[51,150570,150571],{"class":53,"line":99},[51,150572,3480],{"emptyLinePlaceholder":1192},[51,150574,150575,150577,150579],{"class":53,"line":120},[51,150576,150445],{"class":72},[51,150578,108],{"class":64},[51,150580,150450],{"class":72},[51,150582,150583,150585,150587],{"class":53,"line":129},[51,150584,150455],{"class":72},[51,150586,108],{"class":64},[51,150588,150317],{"class":282},[51,150590,150591,150593,150595],{"class":53,"line":206},[51,150592,150464],{"class":72},[51,150594,108],{"class":64},[51,150596,147515],{"class":175},[51,150598,150599],{"class":53,"line":212},[51,150600,3480],{"emptyLinePlaceholder":1192},[51,150602,150603,150605],{"class":53,"line":227},[51,150604,31379],{"class":175},[51,150606,150607],{"class":72},"(student.name)\n",[51,150609,150610,150612],{"class":53,"line":370},[51,150611,31379],{"class":175},[51,150613,150614],{"class":72},"(student.age)\n",[40,150616,150617],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150619,150621],{"id":150620},"_114-方法","11.4 方法",[40,150623,150624],{},"类中的函数叫方法。",[29,150626,150627],{"className":31342,"code":150385,"language":31344,"meta":35,"style":35},[37,150628,150629,150637,150645,150673,150677,150681,150689,150697,150705],{"__ignoreMap":35},[51,150630,150631,150633,150635],{"class":53,"line":54},[51,150632,15656],{"class":64},[51,150634,8860],{"class":68},[51,150636,4816],{"class":72},[51,150638,150639,150641,150643],{"class":53,"line":61},[51,150640,31765],{"class":64},[51,150642,150336],{"class":68},[51,150644,31771],{"class":72},[51,150646,150647,150649,150651,150653,150655,150657,150659,150661,150663,150665,150667,150669,150671],{"class":53,"line":93},[51,150648,33415],{"class":175},[51,150650,73],{"class":72},[51,150652,1311],{"class":64},[51,150654,150350],{"class":282},[51,150656,150416],{"class":175},[51,150658,81265],{"class":72},[51,150660,2190],{"class":175},[51,150662,150359],{"class":282},[51,150664,150416],{"class":175},[51,150666,81277],{"class":72},[51,150668,2190],{"class":175},[51,150670,150368],{"class":282},[51,150672,90],{"class":72},[51,150674,150675],{"class":53,"line":99},[51,150676,3480],{"emptyLinePlaceholder":1192},[51,150678,150679],{"class":53,"line":120},[51,150680,3480],{"emptyLinePlaceholder":1192},[51,150682,150683,150685,150687],{"class":53,"line":129},[51,150684,150445],{"class":72},[51,150686,108],{"class":64},[51,150688,150450],{"class":72},[51,150690,150691,150693,150695],{"class":53,"line":206},[51,150692,150455],{"class":72},[51,150694,108],{"class":64},[51,150696,150317],{"class":282},[51,150698,150699,150701,150703],{"class":53,"line":212},[51,150700,150464],{"class":72},[51,150702,108],{"class":64},[51,150704,147515],{"class":175},[51,150706,150707],{"class":53,"line":227},[51,150708,150473],{"class":72},[40,150710,150711,150713,150714,150716],{},[37,150712,31787],{}," 表示当前对象。调用方法时不需要手动传入 ",[37,150715,31787],{},"，Python 会自动传。",[14,150718,150720],{"id":150719},"_115-构造方法__init__","11.5 构造方法__init__",[40,150722,150723,150725],{},[37,150724,31793],{}," 在对象创建时自动执行，用于初始化属性。",[29,150727,150729],{"className":31342,"code":150728,"language":31344,"meta":35,"style":35},"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",[37,150730,150731,150739,150748,150760,150772,150783,150787,150795,150833,150837,150841,150863],{"__ignoreMap":35},[51,150732,150733,150735,150737],{"class":53,"line":54},[51,150734,15656],{"class":64},[51,150736,8860],{"class":68},[51,150738,4816],{"class":72},[51,150740,150741,150743,150745],{"class":53,"line":61},[51,150742,31765],{"class":64},[51,150744,31768],{"class":175},[51,150746,150747],{"class":72},"(self, name, age, score):\n",[51,150749,150750,150752,150755,150757],{"class":53,"line":93},[51,150751,31809],{"class":175},[51,150753,150754],{"class":72},".name ",[51,150756,108],{"class":64},[51,150758,150759],{"class":72}," name\n",[51,150761,150762,150764,150767,150769],{"class":53,"line":99},[51,150763,31809],{"class":175},[51,150765,150766],{"class":72},".age ",[51,150768,108],{"class":64},[51,150770,150771],{"class":72}," age\n",[51,150773,150774,150776,150779,150781],{"class":53,"line":120},[51,150775,31809],{"class":175},[51,150777,150778],{"class":72},".score ",[51,150780,108],{"class":64},[51,150782,2678],{"class":72},[51,150784,150785],{"class":53,"line":129},[51,150786,3480],{"emptyLinePlaceholder":1192},[51,150788,150789,150791,150793],{"class":53,"line":206},[51,150790,31765],{"class":64},[51,150792,150336],{"class":68},[51,150794,31771],{"class":72},[51,150796,150797,150799,150801,150803,150805,150807,150809,150811,150813,150815,150817,150819,150822,150824,150827,150829,150831],{"class":53,"line":212},[51,150798,33415],{"class":175},[51,150800,73],{"class":72},[51,150802,1311],{"class":64},[51,150804,150350],{"class":282},[51,150806,150416],{"class":175},[51,150808,81265],{"class":72},[51,150810,2190],{"class":175},[51,150812,150359],{"class":282},[51,150814,150416],{"class":175},[51,150816,81277],{"class":72},[51,150818,2190],{"class":175},[51,150820,150821],{"class":282},"岁，成绩",[51,150823,150416],{"class":175},[51,150825,150826],{"class":72},".score",[51,150828,2190],{"class":175},[51,150830,1503],{"class":282},[51,150832,90],{"class":72},[51,150834,150835],{"class":53,"line":227},[51,150836,3480],{"emptyLinePlaceholder":1192},[51,150838,150839],{"class":53,"line":370},[51,150840,3480],{"emptyLinePlaceholder":1192},[51,150842,150843,150845,150847,150850,150853,150855,150857,150859,150861],{"class":53,"line":387},[51,150844,150445],{"class":72},[51,150846,108],{"class":64},[51,150848,150849],{"class":72}," Student(",[51,150851,150852],{"class":282},"\"小明\"",[51,150854,13397],{"class":72},[51,150856,1896],{"class":175},[51,150858,13397],{"class":72},[51,150860,2231],{"class":175},[51,150862,90],{"class":72},[51,150864,150865],{"class":53,"line":404},[51,150866,150473],{"class":72},[40,150868,150869],{},"构造方法的好处：",[19,150871,150872,150875,150878],{},[22,150873,150874],{},"创建对象时必须提供必要数据。",[22,150876,150877],{},"属性初始化集中，不容易漏。",[22,150879,150880],{},"对象状态更完整。",[14,150882,150884,150885],{"id":150883},"_116-str","11.6 ",[840,150886,2407],{},[40,150888,150889,150890,29349],{},"直接打印对象时，默认输出不直观。可以定义 ",[37,150891,150892],{},"__str__",[29,150894,150896],{"className":31342,"code":150895,"language":31344,"meta":35,"style":35},"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",[37,150897,150898,150906,150915,150925,150935,150939,150948,150976,150980,150984,151000],{"__ignoreMap":35},[51,150899,150900,150902,150904],{"class":53,"line":54},[51,150901,15656],{"class":64},[51,150903,8860],{"class":68},[51,150905,4816],{"class":72},[51,150907,150908,150910,150912],{"class":53,"line":61},[51,150909,31765],{"class":64},[51,150911,31768],{"class":175},[51,150913,150914],{"class":72},"(self, name, age):\n",[51,150916,150917,150919,150921,150923],{"class":53,"line":93},[51,150918,31809],{"class":175},[51,150920,150754],{"class":72},[51,150922,108],{"class":64},[51,150924,150759],{"class":72},[51,150926,150927,150929,150931,150933],{"class":53,"line":99},[51,150928,31809],{"class":175},[51,150930,150766],{"class":72},[51,150932,108],{"class":64},[51,150934,150771],{"class":72},[51,150936,150937],{"class":53,"line":120},[51,150938,3480],{"emptyLinePlaceholder":1192},[51,150940,150941,150943,150946],{"class":53,"line":129},[51,150942,31765],{"class":64},[51,150944,150945],{"class":175}," __str__",[51,150947,31771],{"class":72},[51,150949,150950,150952,150955,150958,150960,150962,150964,150967,150969,150971,150973],{"class":53,"line":206},[51,150951,15714],{"class":64},[51,150953,150954],{"class":64}," f",[51,150956,150957],{"class":282},"\"Student(name=",[51,150959,150416],{"class":175},[51,150961,81265],{"class":72},[51,150963,2190],{"class":175},[51,150965,150966],{"class":282},", age=",[51,150968,150416],{"class":175},[51,150970,81277],{"class":72},[51,150972,2190],{"class":175},[51,150974,150975],{"class":282},")\"\n",[51,150977,150978],{"class":53,"line":212},[51,150979,3480],{"emptyLinePlaceholder":1192},[51,150981,150982],{"class":53,"line":227},[51,150983,3480],{"emptyLinePlaceholder":1192},[51,150985,150986,150988,150990,150992,150994,150996,150998],{"class":53,"line":370},[51,150987,150445],{"class":72},[51,150989,108],{"class":64},[51,150991,150849],{"class":72},[51,150993,150852],{"class":282},[51,150995,13397],{"class":72},[51,150997,1896],{"class":175},[51,150999,90],{"class":72},[51,151001,151002,151004],{"class":53,"line":387},[51,151003,31379],{"class":175},[51,151005,151006],{"class":72},"(student)\n",[14,151008,151010],{"id":151009},"_117-封装","11.7 封装",[40,151012,151013],{},"封装就是把数据和方法放到类中，并控制访问方式。",[40,151015,151016],{},"Python 中以双下划线开头的属性通常视为私有属性。",[29,151018,151020],{"className":31342,"code":151019,"language":31344,"meta":35,"style":35},"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",[37,151021,151022,151031,151040,151052,151064,151068,151077,151086,151090,151100,151113,151124,151129,151140,151144,151153,151165,151176,151180,151193,151204,151208,151219,151223,151227,151245,151254,151263],{"__ignoreMap":35},[51,151023,151024,151026,151029],{"class":53,"line":54},[51,151025,15656],{"class":64},[51,151027,151028],{"class":68}," Account",[51,151030,4816],{"class":72},[51,151032,151033,151035,151037],{"class":53,"line":61},[51,151034,31765],{"class":64},[51,151036,31768],{"class":175},[51,151038,151039],{"class":72},"(self, owner, balance):\n",[51,151041,151042,151044,151047,151049],{"class":53,"line":93},[51,151043,31809],{"class":175},[51,151045,151046],{"class":72},".owner ",[51,151048,108],{"class":64},[51,151050,151051],{"class":72}," owner\n",[51,151053,151054,151056,151059,151061],{"class":53,"line":99},[51,151055,31809],{"class":175},[51,151057,151058],{"class":72},".__balance ",[51,151060,108],{"class":64},[51,151062,151063],{"class":72}," balance\n",[51,151065,151066],{"class":53,"line":120},[51,151067,3480],{"emptyLinePlaceholder":1192},[51,151069,151070,151072,151075],{"class":53,"line":129},[51,151071,31765],{"class":64},[51,151073,151074],{"class":68}," get_balance",[51,151076,31771],{"class":72},[51,151078,151079,151081,151083],{"class":53,"line":206},[51,151080,15714],{"class":64},[51,151082,39837],{"class":175},[51,151084,151085],{"class":72},".__balance\n",[51,151087,151088],{"class":53,"line":212},[51,151089,3480],{"emptyLinePlaceholder":1192},[51,151091,151092,151094,151097],{"class":53,"line":227},[51,151093,31765],{"class":64},[51,151095,151096],{"class":68}," deposit",[51,151098,151099],{"class":72},"(self, money):\n",[51,151101,151102,151104,151107,151109,151111],{"class":53,"line":370},[51,151103,3577],{"class":64},[51,151105,151106],{"class":72}," money ",[51,151108,2687],{"class":64},[51,151110,5169],{"class":175},[51,151112,4816],{"class":72},[51,151114,151115,151117,151119,151122],{"class":53,"line":387},[51,151116,35614],{"class":175},[51,151118,73],{"class":72},[51,151120,151121],{"class":282},"\"存款金额必须大于0\"",[51,151123,90],{"class":72},[51,151125,151126],{"class":53,"line":404},[51,151127,151128],{"class":64},"            return\n",[51,151130,151131,151133,151135,151137],{"class":53,"line":415},[51,151132,31809],{"class":175},[51,151134,151058],{"class":72},[51,151136,10439],{"class":64},[51,151138,151139],{"class":72}," money\n",[51,151141,151142],{"class":53,"line":420},[51,151143,3480],{"emptyLinePlaceholder":1192},[51,151145,151146,151148,151151],{"class":53,"line":429},[51,151147,31765],{"class":64},[51,151149,151150],{"class":68}," withdraw",[51,151152,151099],{"class":72},[51,151154,151155,151157,151159,151161,151163],{"class":53,"line":434},[51,151156,3577],{"class":64},[51,151158,151106],{"class":72},[51,151160,2687],{"class":64},[51,151162,5169],{"class":175},[51,151164,4816],{"class":72},[51,151166,151167,151169,151171,151174],{"class":53,"line":448},[51,151168,35614],{"class":175},[51,151170,73],{"class":72},[51,151172,151173],{"class":282},"\"取款金额必须大于0\"",[51,151175,90],{"class":72},[51,151177,151178],{"class":53,"line":462},[51,151179,151128],{"class":64},[51,151181,151182,151184,151186,151188,151190],{"class":53,"line":470},[51,151183,3577],{"class":64},[51,151185,151106],{"class":72},[51,151187,972],{"class":64},[51,151189,39837],{"class":175},[51,151191,151192],{"class":72},".__balance:\n",[51,151194,151195,151197,151199,151202],{"class":53,"line":2783},[51,151196,35614],{"class":175},[51,151198,73],{"class":72},[51,151200,151201],{"class":282},"\"余额不足\"",[51,151203,90],{"class":72},[51,151205,151206],{"class":53,"line":2788},[51,151207,151128],{"class":64},[51,151209,151210,151212,151214,151217],{"class":53,"line":2817},[51,151211,31809],{"class":175},[51,151213,151058],{"class":72},[51,151215,151216],{"class":64},"-=",[51,151218,151139],{"class":72},[51,151220,151221],{"class":53,"line":2822},[51,151222,3480],{"emptyLinePlaceholder":1192},[51,151224,151225],{"class":53,"line":2839},[51,151226,3480],{"emptyLinePlaceholder":1192},[51,151228,151229,151232,151234,151237,151239,151241,151243],{"class":53,"line":2844},[51,151230,151231],{"class":72},"account ",[51,151233,108],{"class":64},[51,151235,151236],{"class":72}," Account(",[51,151238,150852],{"class":282},[51,151240,13397],{"class":72},[51,151242,7372],{"class":175},[51,151244,90],{"class":72},[51,151246,151247,151250,151252],{"class":53,"line":2849},[51,151248,151249],{"class":72},"account.deposit(",[51,151251,2812],{"class":175},[51,151253,90],{"class":72},[51,151255,151256,151259,151261],{"class":53,"line":2854},[51,151257,151258],{"class":72},"account.withdraw(",[51,151260,612],{"class":175},[51,151262,90],{"class":72},[51,151264,151265,151267],{"class":53,"line":2868},[51,151266,31379],{"class":175},[51,151268,151269],{"class":72},"(account.get_balance())\n",[40,151271,151272],{},"封装的意义是避免外部随意修改内部状态。",[14,151274,151276],{"id":151275},"_118-继承","11.8 继承",[40,151278,151279],{},"继承可以让子类复用父类的属性和方法。",[29,151281,151283],{"className":31342,"code":151282,"language":31344,"meta":35,"style":35},"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",[37,151284,151285,151294,151303,151314,151318,151322,151336,151345,151356,151360,151364,151374,151379],{"__ignoreMap":35},[51,151286,151287,151289,151292],{"class":53,"line":54},[51,151288,15656],{"class":64},[51,151290,151291],{"class":68}," Animal",[51,151293,4816],{"class":72},[51,151295,151296,151298,151301],{"class":53,"line":61},[51,151297,31765],{"class":64},[51,151299,151300],{"class":68}," eat",[51,151302,31771],{"class":72},[51,151304,151305,151307,151309,151312],{"class":53,"line":93},[51,151306,33415],{"class":175},[51,151308,73],{"class":72},[51,151310,151311],{"class":282},"\"吃东西\"",[51,151313,90],{"class":72},[51,151315,151316],{"class":53,"line":99},[51,151317,3480],{"emptyLinePlaceholder":1192},[51,151319,151320],{"class":53,"line":120},[51,151321,3480],{"emptyLinePlaceholder":1192},[51,151323,151324,151326,151329,151331,151334],{"class":53,"line":129},[51,151325,15656],{"class":64},[51,151327,151328],{"class":68}," Dog",[51,151330,73],{"class":72},[51,151332,151333],{"class":68},"Animal",[51,151335,31750],{"class":72},[51,151337,151338,151340,151343],{"class":53,"line":206},[51,151339,31765],{"class":64},[51,151341,151342],{"class":68}," bark",[51,151344,31771],{"class":72},[51,151346,151347,151349,151351,151354],{"class":53,"line":212},[51,151348,33415],{"class":175},[51,151350,73],{"class":72},[51,151352,151353],{"class":282},"\"汪汪\"",[51,151355,90],{"class":72},[51,151357,151358],{"class":53,"line":227},[51,151359,3480],{"emptyLinePlaceholder":1192},[51,151361,151362],{"class":53,"line":370},[51,151363,3480],{"emptyLinePlaceholder":1192},[51,151365,151366,151369,151371],{"class":53,"line":387},[51,151367,151368],{"class":72},"dog ",[51,151370,108],{"class":64},[51,151372,151373],{"class":72}," Dog()\n",[51,151375,151376],{"class":53,"line":404},[51,151377,151378],{"class":72},"dog.eat()\n",[51,151380,151381],{"class":53,"line":415},[51,151382,151383],{"class":72},"dog.bark()\n",[40,151385,151386],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151388,151390],{"id":151389},"_119-方法重写","11.9 方法重写",[29,151392,151394],{"className":31342,"code":151393,"language":31344,"meta":35,"style":35},"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",[37,151395,151396,151404,151413,151424,151428,151432,151444,151452,151462,151466,151470,151483,151491,151502,151506,151510,151518,151528,151532,151537],{"__ignoreMap":35},[51,151397,151398,151400,151402],{"class":53,"line":54},[51,151399,15656],{"class":64},[51,151401,151291],{"class":68},[51,151403,4816],{"class":72},[51,151405,151406,151408,151411],{"class":53,"line":61},[51,151407,31765],{"class":64},[51,151409,151410],{"class":68}," speak",[51,151412,31771],{"class":72},[51,151414,151415,151417,151419,151422],{"class":53,"line":93},[51,151416,33415],{"class":175},[51,151418,73],{"class":72},[51,151420,151421],{"class":282},"\"动物叫\"",[51,151423,90],{"class":72},[51,151425,151426],{"class":53,"line":99},[51,151427,3480],{"emptyLinePlaceholder":1192},[51,151429,151430],{"class":53,"line":120},[51,151431,3480],{"emptyLinePlaceholder":1192},[51,151433,151434,151436,151438,151440,151442],{"class":53,"line":129},[51,151435,15656],{"class":64},[51,151437,151328],{"class":68},[51,151439,73],{"class":72},[51,151441,151333],{"class":68},[51,151443,31750],{"class":72},[51,151445,151446,151448,151450],{"class":53,"line":206},[51,151447,31765],{"class":64},[51,151449,151410],{"class":68},[51,151451,31771],{"class":72},[51,151453,151454,151456,151458,151460],{"class":53,"line":212},[51,151455,33415],{"class":175},[51,151457,73],{"class":72},[51,151459,151353],{"class":282},[51,151461,90],{"class":72},[51,151463,151464],{"class":53,"line":227},[51,151465,3480],{"emptyLinePlaceholder":1192},[51,151467,151468],{"class":53,"line":370},[51,151469,3480],{"emptyLinePlaceholder":1192},[51,151471,151472,151474,151477,151479,151481],{"class":53,"line":387},[51,151473,15656],{"class":64},[51,151475,151476],{"class":68}," Cat",[51,151478,73],{"class":72},[51,151480,151333],{"class":68},[51,151482,31750],{"class":72},[51,151484,151485,151487,151489],{"class":53,"line":404},[51,151486,31765],{"class":64},[51,151488,151410],{"class":68},[51,151490,31771],{"class":72},[51,151492,151493,151495,151497,151500],{"class":53,"line":415},[51,151494,33415],{"class":175},[51,151496,73],{"class":72},[51,151498,151499],{"class":282},"\"喵喵\"",[51,151501,90],{"class":72},[51,151503,151504],{"class":53,"line":420},[51,151505,3480],{"emptyLinePlaceholder":1192},[51,151507,151508],{"class":53,"line":429},[51,151509,3480],{"emptyLinePlaceholder":1192},[51,151511,151512,151514,151516],{"class":53,"line":434},[51,151513,151368],{"class":72},[51,151515,108],{"class":64},[51,151517,151373],{"class":72},[51,151519,151520,151523,151525],{"class":53,"line":448},[51,151521,151522],{"class":72},"cat ",[51,151524,108],{"class":64},[51,151526,151527],{"class":72}," Cat()\n",[51,151529,151530],{"class":53,"line":462},[51,151531,3480],{"emptyLinePlaceholder":1192},[51,151533,151534],{"class":53,"line":470},[51,151535,151536],{"class":72},"dog.speak()\n",[51,151538,151539],{"class":53,"line":2783},[51,151540,151541],{"class":72},"cat.speak()\n",[14,151543,151545],{"id":151544},"_1110-super","11.10 super",[40,151547,151548,151549,151552],{},"子类可以通过 ",[37,151550,151551],{},"super()"," 调用父类方法。",[29,151554,151556],{"className":31342,"code":151555,"language":31344,"meta":35,"style":35},"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",[37,151557,151558,151566,151575,151585,151589,151593,151605,151614,151625,151635,151639,151643,151659],{"__ignoreMap":35},[51,151559,151560,151562,151564],{"class":53,"line":54},[51,151561,15656],{"class":64},[51,151563,16531],{"class":68},[51,151565,4816],{"class":72},[51,151567,151568,151570,151572],{"class":53,"line":61},[51,151569,31765],{"class":64},[51,151571,31768],{"class":175},[51,151573,151574],{"class":72},"(self, name):\n",[51,151576,151577,151579,151581,151583],{"class":53,"line":93},[51,151578,31809],{"class":175},[51,151580,150754],{"class":72},[51,151582,108],{"class":64},[51,151584,150759],{"class":72},[51,151586,151587],{"class":53,"line":99},[51,151588,3480],{"emptyLinePlaceholder":1192},[51,151590,151591],{"class":53,"line":120},[51,151592,3480],{"emptyLinePlaceholder":1192},[51,151594,151595,151597,151599,151601,151603],{"class":53,"line":129},[51,151596,15656],{"class":64},[51,151598,8860],{"class":68},[51,151600,73],{"class":72},[51,151602,20008],{"class":68},[51,151604,31750],{"class":72},[51,151606,151607,151609,151611],{"class":53,"line":206},[51,151608,31765],{"class":64},[51,151610,31768],{"class":175},[51,151612,151613],{"class":72},"(self, name, score):\n",[51,151615,151616,151618,151620,151622],{"class":53,"line":212},[51,151617,31781],{"class":175},[51,151619,18223],{"class":72},[51,151621,31793],{"class":175},[51,151623,151624],{"class":72},"(name)\n",[51,151626,151627,151629,151631,151633],{"class":53,"line":227},[51,151628,31809],{"class":175},[51,151630,150778],{"class":72},[51,151632,108],{"class":64},[51,151634,2678],{"class":72},[51,151636,151637],{"class":53,"line":370},[51,151638,3480],{"emptyLinePlaceholder":1192},[51,151640,151641],{"class":53,"line":387},[51,151642,3480],{"emptyLinePlaceholder":1192},[51,151644,151645,151647,151649,151651,151653,151655,151657],{"class":53,"line":404},[51,151646,150445],{"class":72},[51,151648,108],{"class":64},[51,151650,150849],{"class":72},[51,151652,150852],{"class":282},[51,151654,13397],{"class":72},[51,151656,2231],{"class":175},[51,151658,90],{"class":72},[51,151660,151661,151663],{"class":53,"line":415},[51,151662,31379],{"class":175},[51,151664,151665],{"class":72},"(student.name, student.score)\n",[14,151667,151669],{"id":151668},"_1111-多态","11.11 多态",[40,151671,151672],{},"多态指不同对象响应同一个方法，表现出不同结果。",[29,151674,151676],{"className":31342,"code":151675,"language":31344,"meta":35,"style":35},"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",[37,151677,151678,151686,151694,151704,151708,151712,151720,151728,151738,151742,151746,151756,151761,151765,151769,151774],{"__ignoreMap":35},[51,151679,151680,151682,151684],{"class":53,"line":54},[51,151681,15656],{"class":64},[51,151683,151328],{"class":68},[51,151685,4816],{"class":72},[51,151687,151688,151690,151692],{"class":53,"line":61},[51,151689,31765],{"class":64},[51,151691,151410],{"class":68},[51,151693,31771],{"class":72},[51,151695,151696,151698,151700,151702],{"class":53,"line":93},[51,151697,33415],{"class":175},[51,151699,73],{"class":72},[51,151701,151353],{"class":282},[51,151703,90],{"class":72},[51,151705,151706],{"class":53,"line":99},[51,151707,3480],{"emptyLinePlaceholder":1192},[51,151709,151710],{"class":53,"line":120},[51,151711,3480],{"emptyLinePlaceholder":1192},[51,151713,151714,151716,151718],{"class":53,"line":129},[51,151715,15656],{"class":64},[51,151717,151476],{"class":68},[51,151719,4816],{"class":72},[51,151721,151722,151724,151726],{"class":53,"line":206},[51,151723,31765],{"class":64},[51,151725,151410],{"class":68},[51,151727,31771],{"class":72},[51,151729,151730,151732,151734,151736],{"class":53,"line":212},[51,151731,33415],{"class":175},[51,151733,73],{"class":72},[51,151735,151499],{"class":282},[51,151737,90],{"class":72},[51,151739,151740],{"class":53,"line":227},[51,151741,3480],{"emptyLinePlaceholder":1192},[51,151743,151744],{"class":53,"line":370},[51,151745,3480],{"emptyLinePlaceholder":1192},[51,151747,151748,151750,151753],{"class":53,"line":387},[51,151749,32911],{"class":64},[51,151751,151752],{"class":68}," make_sound",[51,151754,151755],{"class":72},"(animal):\n",[51,151757,151758],{"class":53,"line":404},[51,151759,151760],{"class":72},"    animal.speak()\n",[51,151762,151763],{"class":53,"line":415},[51,151764,3480],{"emptyLinePlaceholder":1192},[51,151766,151767],{"class":53,"line":420},[51,151768,3480],{"emptyLinePlaceholder":1192},[51,151770,151771],{"class":53,"line":429},[51,151772,151773],{"class":72},"make_sound(Dog())\n",[51,151775,151776],{"class":53,"line":434},[51,151777,151778],{"class":72},"make_sound(Cat())\n",[40,151780,151781],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151783,151785],{"id":151784},"_1112-类属性和实例属性","11.12 类属性和实例属性",[40,151787,151788],{},"实例属性属于对象：",[29,151790,151792],{"className":31342,"code":151791,"language":31344,"meta":35,"style":35},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[37,151793,151794,151802,151810],{"__ignoreMap":35},[51,151795,151796,151798,151800],{"class":53,"line":54},[51,151797,15656],{"class":64},[51,151799,8860],{"class":68},[51,151801,4816],{"class":72},[51,151803,151804,151806,151808],{"class":53,"line":61},[51,151805,31765],{"class":64},[51,151807,31768],{"class":175},[51,151809,151574],{"class":72},[51,151811,151812,151814,151816,151818],{"class":53,"line":93},[51,151813,31809],{"class":175},[51,151815,150754],{"class":72},[51,151817,108],{"class":64},[51,151819,150759],{"class":72},[40,151821,151822],{},"类属性属于类，所有对象共享：",[29,151824,151826],{"className":31342,"code":151825,"language":31344,"meta":35,"style":35},"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",[37,151827,151828,151836,151846,151850,151858,151868,151872,151876,151889,151903,151907,151914,151921],{"__ignoreMap":35},[51,151829,151830,151832,151834],{"class":53,"line":54},[51,151831,15656],{"class":64},[51,151833,8860],{"class":68},[51,151835,4816],{"class":72},[51,151837,151838,151841,151843],{"class":53,"line":61},[51,151839,151840],{"class":72},"    school ",[51,151842,108],{"class":64},[51,151844,151845],{"class":282}," \"黑马学校\"\n",[51,151847,151848],{"class":53,"line":93},[51,151849,3480],{"emptyLinePlaceholder":1192},[51,151851,151852,151854,151856],{"class":53,"line":99},[51,151853,31765],{"class":64},[51,151855,31768],{"class":175},[51,151857,151574],{"class":72},[51,151859,151860,151862,151864,151866],{"class":53,"line":120},[51,151861,31809],{"class":175},[51,151863,150754],{"class":72},[51,151865,108],{"class":64},[51,151867,150759],{"class":72},[51,151869,151870],{"class":53,"line":129},[51,151871,3480],{"emptyLinePlaceholder":1192},[51,151873,151874],{"class":53,"line":206},[51,151875,3480],{"emptyLinePlaceholder":1192},[51,151877,151878,151881,151883,151885,151887],{"class":53,"line":212},[51,151879,151880],{"class":72},"s1 ",[51,151882,108],{"class":64},[51,151884,150849],{"class":72},[51,151886,150852],{"class":282},[51,151888,90],{"class":72},[51,151890,151891,151894,151896,151898,151901],{"class":53,"line":227},[51,151892,151893],{"class":72},"s2 ",[51,151895,108],{"class":64},[51,151897,150849],{"class":72},[51,151899,151900],{"class":282},"\"小红\"",[51,151902,90],{"class":72},[51,151904,151905],{"class":53,"line":370},[51,151906,3480],{"emptyLinePlaceholder":1192},[51,151908,151909,151911],{"class":53,"line":387},[51,151910,31379],{"class":175},[51,151912,151913],{"class":72},"(s1.school)\n",[51,151915,151916,151918],{"class":53,"line":404},[51,151917,31379],{"class":175},[51,151919,151920],{"class":72},"(s2.school)\n",[51,151922,151923,151925],{"class":53,"line":415},[51,151924,31379],{"class":175},[51,151926,151927],{"class":72},"(Student.school)\n",[40,151929,151930],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151932,151934],{"id":151933},"_1113-类方法和静态方法","11.13 类方法和静态方法",[1233,151936,151938],{"id":151937},"_11131-类方法","11.13.1 类方法",[40,151940,151941,151942,151945,151946,29349],{},"类方法使用 ",[37,151943,151944],{},"@classmethod","，第一个参数通常是 ",[37,151947,151948],{},"cls",[29,151950,151952],{"className":31342,"code":151951,"language":31344,"meta":35,"style":35},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[37,151953,151954,151962,151970,151974,151982,151992,152002,152006,152010],{"__ignoreMap":35},[51,151955,151956,151958,151960],{"class":53,"line":54},[51,151957,15656],{"class":64},[51,151959,8860],{"class":68},[51,151961,4816],{"class":72},[51,151963,151964,151966,151968],{"class":53,"line":61},[51,151965,151840],{"class":72},[51,151967,108],{"class":64},[51,151969,151845],{"class":282},[51,151971,151972],{"class":53,"line":93},[51,151973,3480],{"emptyLinePlaceholder":1192},[51,151975,151976,151979],{"class":53,"line":99},[51,151977,151978],{"class":68},"    @",[51,151980,151981],{"class":175},"classmethod\n",[51,151983,151984,151986,151989],{"class":53,"line":120},[51,151985,31765],{"class":64},[51,151987,151988],{"class":68}," get_school",[51,151990,151991],{"class":72},"(cls):\n",[51,151993,151994,151996,151999],{"class":53,"line":129},[51,151995,15714],{"class":64},[51,151997,151998],{"class":175}," cls",[51,152000,152001],{"class":72},".school\n",[51,152003,152004],{"class":53,"line":206},[51,152005,3480],{"emptyLinePlaceholder":1192},[51,152007,152008],{"class":53,"line":212},[51,152009,3480],{"emptyLinePlaceholder":1192},[51,152011,152012,152014],{"class":53,"line":227},[51,152013,31379],{"class":175},[51,152015,152016],{"class":72},"(Student.get_school())\n",[1233,152018,152020],{"id":152019},"_11132-静态方法","11.13.2 静态方法",[40,152022,152023,152024,152027],{},"静态方法使用 ",[37,152025,152026],{},"@staticmethod","，不需要访问实例和类。",[29,152029,152031],{"className":31342,"code":152030,"language":31344,"meta":35,"style":35},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[37,152032,152033,152042,152049,152058,152069,152073,152077],{"__ignoreMap":35},[51,152034,152035,152037,152040],{"class":53,"line":54},[51,152036,15656],{"class":64},[51,152038,152039],{"class":68}," MathUtils",[51,152041,4816],{"class":72},[51,152043,152044,152046],{"class":53,"line":61},[51,152045,151978],{"class":68},[51,152047,152048],{"class":175},"staticmethod\n",[51,152050,152051,152053,152055],{"class":53,"line":93},[51,152052,31765],{"class":64},[51,152054,69],{"class":68},[51,152056,152057],{"class":72},"(a, b):\n",[51,152059,152060,152062,152064,152066],{"class":53,"line":99},[51,152061,15714],{"class":64},[51,152063,11831],{"class":72},[51,152065,114],{"class":64},[51,152067,152068],{"class":72}," b\n",[51,152070,152071],{"class":53,"line":120},[51,152072,3480],{"emptyLinePlaceholder":1192},[51,152074,152075],{"class":53,"line":129},[51,152076,3480],{"emptyLinePlaceholder":1192},[51,152078,152079,152081,152084,152086,152088,152090],{"class":53,"line":206},[51,152080,31379],{"class":175},[51,152082,152083],{"class":72},"(MathUtils.add(",[51,152085,791],{"class":175},[51,152087,13397],{"class":72},[51,152089,1334],{"class":175},[51,152091,31461],{"class":72},[40,152093,152094],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152096,152098],{"id":152097},"_1114-dataclass","11.14 dataclass",[40,152100,152101,152104],{},[37,152102,152103],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[29,152106,152108],{"className":31342,"code":152107,"language":31344,"meta":35,"style":35},"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",[37,152109,152110,152122,152126,152130,152135,152143,152151,152159,152167,152171,152175,152195],{"__ignoreMap":35},[51,152111,152112,152114,152117,152119],{"class":53,"line":54},[51,152113,31701],{"class":64},[51,152115,152116],{"class":72}," dataclasses ",[51,152118,31356],{"class":64},[51,152120,152121],{"class":72}," dataclass\n",[51,152123,152124],{"class":53,"line":61},[51,152125,3480],{"emptyLinePlaceholder":1192},[51,152127,152128],{"class":53,"line":93},[51,152129,3480],{"emptyLinePlaceholder":1192},[51,152131,152132],{"class":53,"line":99},[51,152133,152134],{"class":68},"@dataclass\n",[51,152136,152137,152139,152141],{"class":53,"line":120},[51,152138,15656],{"class":64},[51,152140,8860],{"class":68},[51,152142,4816],{"class":72},[51,152144,152145,152148],{"class":53,"line":129},[51,152146,152147],{"class":72},"    name: ",[51,152149,152150],{"class":175},"str\n",[51,152152,152153,152156],{"class":53,"line":206},[51,152154,152155],{"class":72},"    age: ",[51,152157,152158],{"class":175},"int\n",[51,152160,152161,152164],{"class":53,"line":212},[51,152162,152163],{"class":72},"    score: ",[51,152165,152166],{"class":175},"float\n",[51,152168,152169],{"class":53,"line":227},[51,152170,3480],{"emptyLinePlaceholder":1192},[51,152172,152173],{"class":53,"line":370},[51,152174,3480],{"emptyLinePlaceholder":1192},[51,152176,152177,152179,152181,152183,152185,152187,152189,152191,152193],{"class":53,"line":387},[51,152178,150445],{"class":72},[51,152180,108],{"class":64},[51,152182,150849],{"class":72},[51,152184,150852],{"class":282},[51,152186,13397],{"class":72},[51,152188,1896],{"class":175},[51,152190,13397],{"class":72},[51,152192,2231],{"class":175},[51,152194,90],{"class":72},[51,152196,152197,152199],{"class":53,"line":404},[51,152198,31379],{"class":175},[51,152200,151006],{"class":72},[40,152202,152203,152204,1466,152206,152209],{},"它会自动生成 ",[37,152205,31793],{},[37,152207,152208],{},"__repr__"," 等方法。适合数据模型类。",[14,152211,152213],{"id":152212},"_1115-小案例学生类","11.15 小案例：学生类",[29,152215,152217],{"className":31342,"code":152216,"language":31344,"meta":35,"style":35},"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",[37,152218,152219,152227,152236,152248,152258,152268,152278,152282,152291,152304,152308,152317,152323,152335,152347,152359,152371,152375,152379,152385,152395,152404,152414,152422,152430,152439,152443,152447,152455,152491,152495,152499,152524,152531],{"__ignoreMap":35},[51,152220,152221,152223,152225],{"class":53,"line":54},[51,152222,15656],{"class":64},[51,152224,8860],{"class":68},[51,152226,4816],{"class":72},[51,152228,152229,152231,152233],{"class":53,"line":61},[51,152230,31765],{"class":64},[51,152232,31768],{"class":175},[51,152234,152235],{"class":72},"(self, student_id, name, age, score):\n",[51,152237,152238,152240,152243,152245],{"class":53,"line":93},[51,152239,31809],{"class":175},[51,152241,152242],{"class":72},".student_id ",[51,152244,108],{"class":64},[51,152246,152247],{"class":72}," student_id\n",[51,152249,152250,152252,152254,152256],{"class":53,"line":99},[51,152251,31809],{"class":175},[51,152253,150754],{"class":72},[51,152255,108],{"class":64},[51,152257,150759],{"class":72},[51,152259,152260,152262,152264,152266],{"class":53,"line":120},[51,152261,31809],{"class":175},[51,152263,150766],{"class":72},[51,152265,108],{"class":64},[51,152267,150771],{"class":72},[51,152269,152270,152272,152274,152276],{"class":53,"line":129},[51,152271,31809],{"class":175},[51,152273,150778],{"class":72},[51,152275,108],{"class":64},[51,152277,2678],{"class":72},[51,152279,152280],{"class":53,"line":206},[51,152281,3480],{"emptyLinePlaceholder":1192},[51,152283,152284,152286,152289],{"class":53,"line":212},[51,152285,31765],{"class":64},[51,152287,152288],{"class":68}," is_passed",[51,152290,31771],{"class":72},[51,152292,152293,152295,152297,152299,152301],{"class":53,"line":227},[51,152294,15714],{"class":64},[51,152296,39837],{"class":175},[51,152298,150778],{"class":72},[51,152300,2800],{"class":64},[51,152302,152303],{"class":175}," 60\n",[51,152305,152306],{"class":53,"line":370},[51,152307,3480],{"emptyLinePlaceholder":1192},[51,152309,152310,152312,152315],{"class":53,"line":387},[51,152311,31765],{"class":64},[51,152313,152314],{"class":68}," to_dict",[51,152316,31771],{"class":72},[51,152318,152319,152321],{"class":53,"line":404},[51,152320,15714],{"class":64},[51,152322,16534],{"class":72},[51,152324,152325,152328,152330,152332],{"class":53,"line":415},[51,152326,152327],{"class":282},"            \"student_id\"",[51,152329,52401],{"class":72},[51,152331,31787],{"class":175},[51,152333,152334],{"class":72},".student_id,\n",[51,152336,152337,152340,152342,152344],{"class":53,"line":420},[51,152338,152339],{"class":282},"            \"name\"",[51,152341,52401],{"class":72},[51,152343,31787],{"class":175},[51,152345,152346],{"class":72},".name,\n",[51,152348,152349,152352,152354,152356],{"class":53,"line":429},[51,152350,152351],{"class":282},"            \"age\"",[51,152353,52401],{"class":72},[51,152355,31787],{"class":175},[51,152357,152358],{"class":72},".age,\n",[51,152360,152361,152364,152366,152368],{"class":53,"line":434},[51,152362,152363],{"class":282},"            \"score\"",[51,152365,52401],{"class":72},[51,152367,31787],{"class":175},[51,152369,152370],{"class":72},".score,\n",[51,152372,152373],{"class":53,"line":448},[51,152374,3609],{"class":72},[51,152376,152377],{"class":53,"line":462},[51,152378,3480],{"emptyLinePlaceholder":1192},[51,152380,152381,152383],{"class":53,"line":470},[51,152382,151978],{"class":68},[51,152384,151981],{"class":175},[51,152386,152387,152389,152392],{"class":53,"line":2783},[51,152388,31765],{"class":64},[51,152390,152391],{"class":68}," from_dict",[51,152393,152394],{"class":72},"(cls, data):\n",[51,152396,152397,152399,152401],{"class":53,"line":2788},[51,152398,15714],{"class":64},[51,152400,151998],{"class":175},[51,152402,152403],{"class":72},"(\n",[51,152405,152406,152409,152412],{"class":53,"line":2817},[51,152407,152408],{"class":72},"            data[",[51,152410,152411],{"class":282},"\"student_id\"",[51,152413,88800],{"class":72},[51,152415,152416,152418,152420],{"class":53,"line":2822},[51,152417,152408],{"class":72},[51,152419,63643],{"class":282},[51,152421,88800],{"class":72},[51,152423,152424,152426,152428],{"class":53,"line":2839},[51,152425,152408],{"class":72},[51,152427,70088],{"class":282},[51,152429,88800],{"class":72},[51,152431,152432,152434,152437],{"class":53,"line":2844},[51,152433,152408],{"class":72},[51,152435,152436],{"class":282},"\"score\"",[51,152438,88800],{"class":72},[51,152440,152441],{"class":53,"line":2849},[51,152442,39090],{"class":72},[51,152444,152445],{"class":53,"line":2854},[51,152446,3480],{"emptyLinePlaceholder":1192},[51,152448,152449,152451,152453],{"class":53,"line":2868},[51,152450,31765],{"class":64},[51,152452,150945],{"class":175},[51,152454,31771],{"class":72},[51,152456,152457,152459,152461,152463,152465,152468,152470,152473,152475,152477,152479,152481,152483,152485,152487,152489],{"class":53,"line":2873},[51,152458,15714],{"class":64},[51,152460,150954],{"class":64},[51,152462,1503],{"class":282},[51,152464,150416],{"class":175},[51,152466,152467],{"class":72},".student_id",[51,152469,2190],{"class":175},[51,152471,152472],{"class":175}," {self",[51,152474,81265],{"class":72},[51,152476,2190],{"class":175},[51,152478,152472],{"class":175},[51,152480,81277],{"class":72},[51,152482,2190],{"class":175},[51,152484,152472],{"class":175},[51,152486,150826],{"class":72},[51,152488,2190],{"class":175},[51,152490,26097],{"class":282},[51,152492,152493],{"class":53,"line":3657},[51,152494,3480],{"emptyLinePlaceholder":1192},[51,152496,152497],{"class":53,"line":3671},[51,152498,3480],{"emptyLinePlaceholder":1192},[51,152500,152501,152503,152505,152507,152510,152512,152514,152516,152518,152520,152522],{"class":53,"line":3679},[51,152502,150445],{"class":72},[51,152504,108],{"class":64},[51,152506,150849],{"class":72},[51,152508,152509],{"class":282},"\"001\"",[51,152511,13397],{"class":72},[51,152513,150852],{"class":282},[51,152515,13397],{"class":72},[51,152517,1896],{"class":175},[51,152519,13397],{"class":72},[51,152521,2231],{"class":175},[51,152523,90],{"class":72},[51,152525,152526,152528],{"class":53,"line":3684},[51,152527,31379],{"class":175},[51,152529,152530],{"class":72},"(student.is_passed())\n",[51,152532,152533,152535],{"class":53,"line":3690},[51,152534,31379],{"class":175},[51,152536,152537],{"class":72},"(student.to_dict())\n",[40,152539,152540,101982,152543,152546],{},[37,152541,152542],{},"to_dict()",[37,152544,152545],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152548,152550],{"id":152549},"_1116-易错点","11.16 易错点",[19,152552,152553,152559,152565,152570,152573,152576],{},[22,152554,152555,152556,29349],{},"类名推荐使用大驼峰，如 ",[37,152557,152558],{},"StudentManager",[22,152560,152561,152562,152564],{},"方法第一个参数必须写 ",[37,152563,31787],{},"，调用时不用传。",[22,152566,152567,152569],{},[37,152568,31793],{}," 不是普通方法，它在创建对象时自动执行。",[22,152571,152572],{},"私有属性不是绝对安全，只是约定和名称改写。",[22,152574,152575],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[22,152577,152578],{},"类中方法太多时，说明职责可能过重。",[14,152580,152582],{"id":152581},"_1117-本章练习","11.17 本章练习",[19,152584,152585,152591,152597,152602,152615],{},[22,152586,152587,152588,152590],{},"定义 ",[37,152589,150532],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[22,152592,152587,152593,152596],{},[37,152594,152595],{},"Account"," 类，实现存款、取款、查询余额。",[22,152598,152587,152599,152601],{},[37,152600,18188],{}," 类，计算圆的周长和面积。",[22,152603,152587,152604,1466,152607,152610,152611,152614],{},[37,152605,152606],{},"Dog",[37,152608,152609],{},"Cat"," 类，并用同一个函数调用它们的 ",[37,152612,152613],{},"speak()"," 方法。",[22,152616,105330,152617,152619,152620,29349],{},[37,152618,152103],{}," 定义一个商品类 ",[37,152621,152622],{},"Product",[1179,152624,152625],{},"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":35,"searchDepth":61,"depth":61,"links":152627},[152628,152629,152630,152631,152632,152633,152635,152636,152637,152638,152639,152640,152641,152645,152646,152647,152648],{"id":150296,"depth":61,"text":150297},{"id":150479,"depth":61,"text":150480},{"id":150543,"depth":61,"text":150544},{"id":150620,"depth":61,"text":150621},{"id":150719,"depth":61,"text":150720},{"id":150883,"depth":61,"text":152634},"11.6 str",{"id":151009,"depth":61,"text":151010},{"id":151275,"depth":61,"text":151276},{"id":151389,"depth":61,"text":151390},{"id":151544,"depth":61,"text":151545},{"id":151668,"depth":61,"text":151669},{"id":151784,"depth":61,"text":151785},{"id":151933,"depth":61,"text":151934,"children":152642},[152643,152644],{"id":151937,"depth":93,"text":151938},{"id":152019,"depth":93,"text":152020},{"id":152097,"depth":61,"text":152098},{"id":152212,"depth":61,"text":152213},{"id":152549,"depth":61,"text":152550},{"id":152581,"depth":61,"text":152582},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150288,"description":24339},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152655,"title":152656,"body":152657,"description":24339,"extension":1190,"meta":155970,"navigation":1192,"path":155971,"seo":155972,"stem":155973,"__hash__":155974},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152658,"toc":155946},[152659,152662,152666,152669,152672,152701,152704,152712,152716,152720,152723,152746,152749,152755,152759,154205,154208,154229,154233,154236,154248,154251,154435,154438,154564,154567,154571,154575,154711,154715,154801,154805,154887,154891,154928,154932,155121,155125,155128,155358,155362,155365,155546,155549,155553,155556,155562,155565,155591,155595,155598,155612,155615,155640,155643,155657,155660,155677,155680,155697,155700,155717,155721,155747,155751,155774,155778,155781,155783,155789,155791,155812,155815,155821,155827,155831,155834,155910,155913,155917,155943],[10,152660,152656],{"id":152661},"_12-综合案例与复习路线",[14,152663,152665],{"id":152664},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[40,152667,152668],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[40,152670,152671],{},"一个合格的入门综合项目最好覆盖：",[19,152673,152674,152677,152680,152683,152686,152689,152692,152695,152698],{},[22,152675,152676],{},"输入输出。",[22,152678,152679],{},"判断和循环。",[22,152681,152682],{},"函数拆分。",[22,152684,152685],{},"列表、字典等容器。",[22,152687,152688],{},"文件持久化。",[22,152690,152691],{},"异常处理。",[22,152693,152694],{},"模块拆分。",[22,152696,152697],{},"可选：面向对象。",[22,152699,152700],{},"可选：数据可视化。",[40,152702,152703],{},"本章整理两个方向：",[19,152705,152706,152709],{},[22,152707,152708],{},"学生管理系统。",[22,152710,152711],{},"销售数据统计和可视化。",[14,152713,152715],{"id":152714},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[1233,152717,152719],{"id":152718},"_1221-需求","12.2.1 需求",[40,152721,152722],{},"实现一个命令行学生管理系统：",[19,152724,152725,152728,152731,152734,152737,152740,152743],{},[22,152726,152727],{},"添加学生。",[22,152729,152730],{},"删除学生。",[22,152732,152733],{},"修改学生。",[22,152735,152736],{},"查询学生。",[22,152738,152739],{},"显示所有学生。",[22,152741,152742],{},"保存到 JSON 文件。",[22,152744,152745],{},"程序启动时自动读取 JSON 文件。",[40,152747,152748],{},"学生字段：",[29,152750,152753],{"className":152751,"code":152752,"language":34,"meta":35},[32],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[37,152754,152752],{"__ignoreMap":35},[14,152756,152758],{"id":152757},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[29,152760,152762],{"className":31342,"code":152761,"language":31344,"meta":35,"style":35},"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",[37,152763,152764,152770,152780,152784,152798,152802,152806,152815,152827,152833,152837,152843,152874,152884,152891,152902,152908,152912,152916,152926,152957,152983,152987,152991,153000,153011,153022,153033,153044,153055,153066,153077,153081,153085,153095,153107,153123,153130,153137,153141,153145,153155,153163,153170,153183,153193,153204,153208,153212,153221,153229,153235,153247,153255,153266,153270,153274,153283,153299,153303,153310,153321,153326,153330,153346,153361,153376,153380,153385,153393,153401,153409,153417,153421,153426,153437,153441,153445,153454,153469,153479,153483,153495,153506,153510,153514,153519,153523,153534,153538,153542,153551,153566,153574,153578,153590,153600,153604,153608,153623,153636,153649,153653,153666,153678,153690,153694,153698,153709,153713,153717,153726,153741,153749,153753,153765,153775,153779,153783,153788,153792,153796,153806,153812,153834,153853,153872,153891,153896,153900,153904,153913,153921,153932,153936,153940,153966,153976,153981,153985,153989,153997,154007,154011,154019,154024,154040,154044,154058,154063,154077,154082,154095,154100,154113,154118,154131,154136,154149,154160,154164,154170,154181,154185,154189,154201],{"__ignoreMap":35},[51,152765,152766,152768],{"class":53,"line":54},[51,152767,31356],{"class":64},[51,152769,148055],{"class":72},[51,152771,152772,152774,152776,152778],{"class":53,"line":61},[51,152773,31701],{"class":64},[51,152775,109275],{"class":72},[51,152777,31356],{"class":64},[51,152779,109280],{"class":72},[51,152781,152782],{"class":53,"line":93},[51,152783,3480],{"emptyLinePlaceholder":1192},[51,152785,152786,152789,152791,152793,152796],{"class":53,"line":99},[51,152787,152788],{"class":175},"DATA_FILE",[51,152790,14526],{"class":64},[51,152792,109509],{"class":72},[51,152794,152795],{"class":282},"\"students.json\"",[51,152797,90],{"class":72},[51,152799,152800],{"class":53,"line":120},[51,152801,3480],{"emptyLinePlaceholder":1192},[51,152803,152804],{"class":53,"line":129},[51,152805,3480],{"emptyLinePlaceholder":1192},[51,152807,152808,152810,152813],{"class":53,"line":206},[51,152809,32911],{"class":64},[51,152811,152812],{"class":68}," load_students",[51,152814,32917],{"class":72},[51,152816,152817,152819,152821,152824],{"class":53,"line":212},[51,152818,4178],{"class":64},[51,152820,39894],{"class":64},[51,152822,152823],{"class":175}," DATA_FILE",[51,152825,152826],{"class":72},".exists():\n",[51,152828,152829,152831],{"class":53,"line":227},[51,152830,15714],{"class":64},[51,152832,52802],{"class":72},[51,152834,152835],{"class":53,"line":370},[51,152836,3480],{"emptyLinePlaceholder":1192},[51,152838,152839,152841],{"class":53,"line":387},[51,152840,126748],{"class":64},[51,152842,4816],{"class":72},[51,152844,152845,152848,152850,152852,152854,152856,152858,152860,152862,152864,152866,152868,152870,152872],{"class":53,"line":404},[51,152846,152847],{"class":64},"        with",[51,152849,147755],{"class":175},[51,152851,73],{"class":72},[51,152853,152788],{"class":175},[51,152855,13397],{"class":72},[51,152857,147765],{"class":282},[51,152859,13397],{"class":72},[51,152861,147770],{"class":78},[51,152863,108],{"class":64},[51,152865,147775],{"class":282},[51,152867,14676],{"class":72},[51,152869,32347],{"class":64},[51,152871,149117],{"class":78},[51,152873,4816],{"class":72},[51,152875,152876,152878,152880,152882],{"class":53,"line":415},[51,152877,16694],{"class":64},[51,152879,149128],{"class":72},[51,152881,46318],{"class":78},[51,152883,90],{"class":72},[51,152885,152886,152888],{"class":53,"line":420},[51,152887,126776],{"class":64},[51,152889,152890],{"class":72}," json.JSONDecodeError:\n",[51,152892,152893,152895,152897,152900],{"class":53,"line":429},[51,152894,33415],{"class":175},[51,152896,73],{"class":72},[51,152898,152899],{"class":282},"\"数据文件格式错误，已使用空数据启动\"",[51,152901,90],{"class":72},[51,152903,152904,152906],{"class":53,"line":434},[51,152905,15714],{"class":64},[51,152907,52802],{"class":72},[51,152909,152910],{"class":53,"line":448},[51,152911,3480],{"emptyLinePlaceholder":1192},[51,152913,152914],{"class":53,"line":462},[51,152915,3480],{"emptyLinePlaceholder":1192},[51,152917,152918,152920,152923],{"class":53,"line":470},[51,152919,32911],{"class":64},[51,152921,152922],{"class":68}," save_students",[51,152924,152925],{"class":72},"(students):\n",[51,152927,152928,152930,152932,152934,152936,152938,152941,152943,152945,152947,152949,152951,152953,152955],{"class":53,"line":2783},[51,152929,35142],{"class":64},[51,152931,147755],{"class":175},[51,152933,73],{"class":72},[51,152935,152788],{"class":175},[51,152937,13397],{"class":72},[51,152939,152940],{"class":282},"\"w\"",[51,152942,13397],{"class":72},[51,152944,147770],{"class":78},[51,152946,108],{"class":64},[51,152948,147775],{"class":282},[51,152950,14676],{"class":72},[51,152952,32347],{"class":64},[51,152954,149117],{"class":78},[51,152956,4816],{"class":72},[51,152958,152959,152962,152964,152966,152968,152970,152972,152974,152977,152979,152981],{"class":53,"line":2788},[51,152960,152961],{"class":72},"        json.dump(students, ",[51,152963,46318],{"class":78},[51,152965,13397],{"class":72},[51,152967,148101],{"class":78},[51,152969,108],{"class":64},[51,152971,34951],{"class":175},[51,152973,13397],{"class":72},[51,152975,152976],{"class":78},"indent",[51,152978,108],{"class":64},[51,152980,1334],{"class":175},[51,152982,90],{"class":72},[51,152984,152985],{"class":53,"line":2817},[51,152986,3480],{"emptyLinePlaceholder":1192},[51,152988,152989],{"class":53,"line":2822},[51,152990,3480],{"emptyLinePlaceholder":1192},[51,152992,152993,152995,152998],{"class":53,"line":2839},[51,152994,32911],{"class":64},[51,152996,152997],{"class":68}," show_menu",[51,152999,32917],{"class":72},[51,153001,153002,153004,153006,153009],{"class":53,"line":2844},[51,153003,32263],{"class":175},[51,153005,73],{"class":72},[51,153007,153008],{"class":282},"\"====== 学生管理系统 ======\"",[51,153010,90],{"class":72},[51,153012,153013,153015,153017,153020],{"class":53,"line":2849},[51,153014,32263],{"class":175},[51,153016,73],{"class":72},[51,153018,153019],{"class":282},"\"1. 添加学生\"",[51,153021,90],{"class":72},[51,153023,153024,153026,153028,153031],{"class":53,"line":2854},[51,153025,32263],{"class":175},[51,153027,73],{"class":72},[51,153029,153030],{"class":282},"\"2. 删除学生\"",[51,153032,90],{"class":72},[51,153034,153035,153037,153039,153042],{"class":53,"line":2868},[51,153036,32263],{"class":175},[51,153038,73],{"class":72},[51,153040,153041],{"class":282},"\"3. 修改学生\"",[51,153043,90],{"class":72},[51,153045,153046,153048,153050,153053],{"class":53,"line":2873},[51,153047,32263],{"class":175},[51,153049,73],{"class":72},[51,153051,153052],{"class":282},"\"4. 查询学生\"",[51,153054,90],{"class":72},[51,153056,153057,153059,153061,153064],{"class":53,"line":3657},[51,153058,32263],{"class":175},[51,153060,73],{"class":72},[51,153062,153063],{"class":282},"\"5. 显示所有学生\"",[51,153065,90],{"class":72},[51,153067,153068,153070,153072,153075],{"class":53,"line":3671},[51,153069,32263],{"class":175},[51,153071,73],{"class":72},[51,153073,153074],{"class":282},"\"0. 退出系统\"",[51,153076,90],{"class":72},[51,153078,153079],{"class":53,"line":3679},[51,153080,3480],{"emptyLinePlaceholder":1192},[51,153082,153083],{"class":53,"line":3684},[51,153084,3480],{"emptyLinePlaceholder":1192},[51,153086,153087,153089,153092],{"class":53,"line":3690},[51,153088,32911],{"class":64},[51,153090,153091],{"class":68}," find_student",[51,153093,153094],{"class":72},"(students, student_id):\n",[51,153096,153097,153099,153102,153104],{"class":53,"line":3696},[51,153098,4278],{"class":64},[51,153100,153101],{"class":72}," student ",[51,153103,27007],{"class":64},[51,153105,153106],{"class":72}," students:\n",[51,153108,153109,153111,153114,153116,153118,153120],{"class":53,"line":3701},[51,153110,3577],{"class":64},[51,153112,153113],{"class":72}," student[",[51,153115,152411],{"class":282},[51,153117,5517],{"class":72},[51,153119,4026],{"class":64},[51,153121,153122],{"class":72}," student_id:\n",[51,153124,153125,153127],{"class":53,"line":8910},[51,153126,16694],{"class":64},[51,153128,153129],{"class":72}," student\n",[51,153131,153132,153134],{"class":53,"line":8934},[51,153133,123],{"class":64},[51,153135,153136],{"class":175}," None\n",[51,153138,153139],{"class":53,"line":8939},[51,153140,3480],{"emptyLinePlaceholder":1192},[51,153142,153143],{"class":53,"line":8945},[51,153144,3480],{"emptyLinePlaceholder":1192},[51,153146,153147,153149,153152],{"class":53,"line":8972},[51,153148,32911],{"class":64},[51,153150,153151],{"class":68}," input_int",[51,153153,153154],{"class":72},"(prompt):\n",[51,153156,153157,153159,153161],{"class":53,"line":8977},[51,153158,3331],{"class":64},[51,153160,96256],{"class":175},[51,153162,4816],{"class":72},[51,153164,153165,153168],{"class":53,"line":8983},[51,153166,153167],{"class":64},"        try",[51,153169,4816],{"class":72},[51,153171,153172,153174,153176,153178,153180],{"class":53,"line":8995},[51,153173,16694],{"class":64},[51,153175,3462],{"class":175},[51,153177,73],{"class":72},[51,153179,54785],{"class":175},[51,153181,153182],{"class":72},"(prompt))\n",[51,153184,153185,153188,153191],{"class":53,"line":9007},[51,153186,153187],{"class":64},"        except",[51,153189,153190],{"class":175}," ValueError",[51,153192,4816],{"class":72},[51,153194,153195,153197,153199,153202],{"class":53,"line":9019},[51,153196,35614],{"class":175},[51,153198,73],{"class":72},[51,153200,153201],{"class":282},"\"请输入整数\"",[51,153203,90],{"class":72},[51,153205,153206],{"class":53,"line":10678},[51,153207,3480],{"emptyLinePlaceholder":1192},[51,153209,153210],{"class":53,"line":10703},[51,153211,3480],{"emptyLinePlaceholder":1192},[51,153213,153214,153216,153219],{"class":53,"line":10726},[51,153215,32911],{"class":64},[51,153217,153218],{"class":68}," input_float",[51,153220,153154],{"class":72},[51,153222,153223,153225,153227],{"class":53,"line":10750},[51,153224,3331],{"class":64},[51,153226,96256],{"class":175},[51,153228,4816],{"class":72},[51,153230,153231,153233],{"class":53,"line":10755},[51,153232,153167],{"class":64},[51,153234,4816],{"class":72},[51,153236,153237,153239,153241,153243,153245],{"class":53,"line":10760},[51,153238,16694],{"class":64},[51,153240,110761],{"class":175},[51,153242,73],{"class":72},[51,153244,54785],{"class":175},[51,153246,153182],{"class":72},[51,153248,153249,153251,153253],{"class":53,"line":10765},[51,153250,153187],{"class":64},[51,153252,153190],{"class":175},[51,153254,4816],{"class":72},[51,153256,153257,153259,153261,153264],{"class":53,"line":10774},[51,153258,35614],{"class":175},[51,153260,73],{"class":72},[51,153262,153263],{"class":282},"\"请输入数字\"",[51,153265,90],{"class":72},[51,153267,153268],{"class":53,"line":10779},[51,153269,3480],{"emptyLinePlaceholder":1192},[51,153271,153272],{"class":53,"line":10785},[51,153273,3480],{"emptyLinePlaceholder":1192},[51,153275,153276,153278,153281],{"class":53,"line":10806},[51,153277,32911],{"class":64},[51,153279,153280],{"class":68}," add_student",[51,153282,152925],{"class":72},[51,153284,153285,153288,153290,153292,153294,153297],{"class":53,"line":10812},[51,153286,153287],{"class":72},"    student_id ",[51,153289,108],{"class":64},[51,153291,61569],{"class":175},[51,153293,73],{"class":72},[51,153295,153296],{"class":282},"\"请输入学号:\"",[51,153298,90],{"class":72},[51,153300,153301],{"class":53,"line":10826},[51,153302,3480],{"emptyLinePlaceholder":1192},[51,153304,153305,153307],{"class":53,"line":10832},[51,153306,4178],{"class":64},[51,153308,153309],{"class":72}," find_student(students, student_id):\n",[51,153311,153312,153314,153316,153319],{"class":53,"line":10859},[51,153313,33415],{"class":175},[51,153315,73],{"class":72},[51,153317,153318],{"class":282},"\"学号已存在\"",[51,153320,90],{"class":72},[51,153322,153323],{"class":53,"line":10868},[51,153324,153325],{"class":64},"        return\n",[51,153327,153328],{"class":53,"line":10874},[51,153329,3480],{"emptyLinePlaceholder":1192},[51,153331,153332,153335,153337,153339,153341,153344],{"class":53,"line":10882},[51,153333,153334],{"class":72},"    name ",[51,153336,108],{"class":64},[51,153338,61569],{"class":175},[51,153340,73],{"class":72},[51,153342,153343],{"class":282},"\"请输入姓名:\"",[51,153345,90],{"class":72},[51,153347,153348,153351,153353,153356,153359],{"class":53,"line":10887},[51,153349,153350],{"class":72},"    age ",[51,153352,108],{"class":64},[51,153354,153355],{"class":72}," input_int(",[51,153357,153358],{"class":282},"\"请输入年龄:\"",[51,153360,90],{"class":72},[51,153362,153363,153366,153368,153371,153374],{"class":53,"line":17566},[51,153364,153365],{"class":72},"    score ",[51,153367,108],{"class":64},[51,153369,153370],{"class":72}," input_float(",[51,153372,153373],{"class":282},"\"请输入成绩:\"",[51,153375,90],{"class":72},[51,153377,153378],{"class":53,"line":17572},[51,153379,3480],{"emptyLinePlaceholder":1192},[51,153381,153382],{"class":53,"line":17595},[51,153383,153384],{"class":72},"    students.append({\n",[51,153386,153387,153390],{"class":53,"line":17601},[51,153388,153389],{"class":282},"        \"student_id\"",[51,153391,153392],{"class":72},": student_id,\n",[51,153394,153395,153398],{"class":53,"line":17624},[51,153396,153397],{"class":282},"        \"name\"",[51,153399,153400],{"class":72},": name,\n",[51,153402,153403,153406],{"class":53,"line":17638},[51,153404,153405],{"class":282},"        \"age\"",[51,153407,153408],{"class":72},": age,\n",[51,153410,153411,153414],{"class":53,"line":17658},[51,153412,153413],{"class":282},"        \"score\"",[51,153415,153416],{"class":72},": score,\n",[51,153418,153419],{"class":53,"line":17664},[51,153420,34425],{"class":72},[51,153422,153423],{"class":53,"line":17675},[51,153424,153425],{"class":72},"    save_students(students)\n",[51,153427,153428,153430,153432,153435],{"class":53,"line":17698},[51,153429,32263],{"class":175},[51,153431,73],{"class":72},[51,153433,153434],{"class":282},"\"添加成功\"",[51,153436,90],{"class":72},[51,153438,153439],{"class":53,"line":17720},[51,153440,3480],{"emptyLinePlaceholder":1192},[51,153442,153443],{"class":53,"line":17725},[51,153444,3480],{"emptyLinePlaceholder":1192},[51,153446,153447,153449,153452],{"class":53,"line":17731},[51,153448,32911],{"class":64},[51,153450,153451],{"class":68}," delete_student",[51,153453,152925],{"class":72},[51,153455,153456,153458,153460,153462,153464,153467],{"class":53,"line":17745},[51,153457,153287],{"class":72},[51,153459,108],{"class":64},[51,153461,61569],{"class":175},[51,153463,73],{"class":72},[51,153465,153466],{"class":282},"\"请输入要删除的学号:\"",[51,153468,90],{"class":72},[51,153470,153471,153474,153476],{"class":53,"line":17758},[51,153472,153473],{"class":72},"    student ",[51,153475,108],{"class":64},[51,153477,153478],{"class":72}," find_student(students, student_id)\n",[51,153480,153481],{"class":53,"line":17763},[51,153482,3480],{"emptyLinePlaceholder":1192},[51,153484,153485,153487,153489,153491,153493],{"class":53,"line":17777},[51,153486,4178],{"class":64},[51,153488,153101],{"class":72},[51,153490,39891],{"class":64},[51,153492,39897],{"class":175},[51,153494,4816],{"class":72},[51,153496,153497,153499,153501,153504],{"class":53,"line":17782},[51,153498,33415],{"class":175},[51,153500,73],{"class":72},[51,153502,153503],{"class":282},"\"学生不存在\"",[51,153505,90],{"class":72},[51,153507,153508],{"class":53,"line":17788},[51,153509,153325],{"class":64},[51,153511,153512],{"class":53,"line":17793},[51,153513,3480],{"emptyLinePlaceholder":1192},[51,153515,153516],{"class":53,"line":17807},[51,153517,153518],{"class":72},"    students.remove(student)\n",[51,153520,153521],{"class":53,"line":17812},[51,153522,153425],{"class":72},[51,153524,153525,153527,153529,153532],{"class":53,"line":17817},[51,153526,32263],{"class":175},[51,153528,73],{"class":72},[51,153530,153531],{"class":282},"\"删除成功\"",[51,153533,90],{"class":72},[51,153535,153536],{"class":53,"line":17831},[51,153537,3480],{"emptyLinePlaceholder":1192},[51,153539,153540],{"class":53,"line":17843},[51,153541,3480],{"emptyLinePlaceholder":1192},[51,153543,153544,153546,153549],{"class":53,"line":17848},[51,153545,32911],{"class":64},[51,153547,153548],{"class":68}," update_student",[51,153550,152925],{"class":72},[51,153552,153553,153555,153557,153559,153561,153564],{"class":53,"line":17861},[51,153554,153287],{"class":72},[51,153556,108],{"class":64},[51,153558,61569],{"class":175},[51,153560,73],{"class":72},[51,153562,153563],{"class":282},"\"请输入要修改的学号:\"",[51,153565,90],{"class":72},[51,153567,153568,153570,153572],{"class":53,"line":17866},[51,153569,153473],{"class":72},[51,153571,108],{"class":64},[51,153573,153478],{"class":72},[51,153575,153576],{"class":53,"line":17871},[51,153577,3480],{"emptyLinePlaceholder":1192},[51,153579,153580,153582,153584,153586,153588],{"class":53,"line":17876},[51,153581,4178],{"class":64},[51,153583,153101],{"class":72},[51,153585,39891],{"class":64},[51,153587,39897],{"class":175},[51,153589,4816],{"class":72},[51,153591,153592,153594,153596,153598],{"class":53,"line":17889},[51,153593,33415],{"class":175},[51,153595,73],{"class":72},[51,153597,153503],{"class":282},[51,153599,90],{"class":72},[51,153601,153602],{"class":53,"line":17894},[51,153603,153325],{"class":64},[51,153605,153606],{"class":53,"line":33597},[51,153607,3480],{"emptyLinePlaceholder":1192},[51,153609,153610,153612,153614,153616,153618,153621],{"class":53,"line":33603},[51,153611,153334],{"class":72},[51,153613,108],{"class":64},[51,153615,61569],{"class":175},[51,153617,73],{"class":72},[51,153619,153620],{"class":282},"\"请输入新姓名:\"",[51,153622,90],{"class":72},[51,153624,153625,153627,153629,153631,153634],{"class":53,"line":33609},[51,153626,153350],{"class":72},[51,153628,108],{"class":64},[51,153630,153355],{"class":72},[51,153632,153633],{"class":282},"\"请输入新年龄:\"",[51,153635,90],{"class":72},[51,153637,153638,153640,153642,153644,153647],{"class":53,"line":33615},[51,153639,153365],{"class":72},[51,153641,108],{"class":64},[51,153643,153370],{"class":72},[51,153645,153646],{"class":282},"\"请输入新成绩:\"",[51,153648,90],{"class":72},[51,153650,153651],{"class":53,"line":33621},[51,153652,3480],{"emptyLinePlaceholder":1192},[51,153654,153655,153658,153660,153662,153664],{"class":53,"line":33632},[51,153656,153657],{"class":72},"    student[",[51,153659,63643],{"class":282},[51,153661,5517],{"class":72},[51,153663,108],{"class":64},[51,153665,150759],{"class":72},[51,153667,153668,153670,153672,153674,153676],{"class":53,"line":33638},[51,153669,153657],{"class":72},[51,153671,70088],{"class":282},[51,153673,5517],{"class":72},[51,153675,108],{"class":64},[51,153677,150771],{"class":72},[51,153679,153680,153682,153684,153686,153688],{"class":53,"line":33658},[51,153681,153657],{"class":72},[51,153683,152436],{"class":282},[51,153685,5517],{"class":72},[51,153687,108],{"class":64},[51,153689,2678],{"class":72},[51,153691,153692],{"class":53,"line":33664},[51,153693,3480],{"emptyLinePlaceholder":1192},[51,153695,153696],{"class":53,"line":33675},[51,153697,153425],{"class":72},[51,153699,153700,153702,153704,153707],{"class":53,"line":33681},[51,153701,32263],{"class":175},[51,153703,73],{"class":72},[51,153705,153706],{"class":282},"\"修改成功\"",[51,153708,90],{"class":72},[51,153710,153711],{"class":53,"line":33687},[51,153712,3480],{"emptyLinePlaceholder":1192},[51,153714,153715],{"class":53,"line":33693},[51,153716,3480],{"emptyLinePlaceholder":1192},[51,153718,153719,153721,153724],{"class":53,"line":33699},[51,153720,32911],{"class":64},[51,153722,153723],{"class":68}," query_student",[51,153725,152925],{"class":72},[51,153727,153728,153730,153732,153734,153736,153739],{"class":53,"line":33705},[51,153729,153287],{"class":72},[51,153731,108],{"class":64},[51,153733,61569],{"class":175},[51,153735,73],{"class":72},[51,153737,153738],{"class":282},"\"请输入要查询的学号:\"",[51,153740,90],{"class":72},[51,153742,153743,153745,153747],{"class":53,"line":33711},[51,153744,153473],{"class":72},[51,153746,108],{"class":64},[51,153748,153478],{"class":72},[51,153750,153751],{"class":53,"line":33717},[51,153752,3480],{"emptyLinePlaceholder":1192},[51,153754,153755,153757,153759,153761,153763],{"class":53,"line":33737},[51,153756,4178],{"class":64},[51,153758,153101],{"class":72},[51,153760,39891],{"class":64},[51,153762,39897],{"class":175},[51,153764,4816],{"class":72},[51,153766,153767,153769,153771,153773],{"class":53,"line":33743},[51,153768,33415],{"class":175},[51,153770,73],{"class":72},[51,153772,153503],{"class":282},[51,153774,90],{"class":72},[51,153776,153777],{"class":53,"line":33759},[51,153778,153325],{"class":64},[51,153780,153781],{"class":53,"line":33765},[51,153782,3480],{"emptyLinePlaceholder":1192},[51,153784,153785],{"class":53,"line":33779},[51,153786,153787],{"class":72},"    print_student(student)\n",[51,153789,153790],{"class":53,"line":33785},[51,153791,3480],{"emptyLinePlaceholder":1192},[51,153793,153794],{"class":53,"line":33800},[51,153795,3480],{"emptyLinePlaceholder":1192},[51,153797,153798,153800,153803],{"class":53,"line":33806},[51,153799,32911],{"class":64},[51,153801,153802],{"class":68}," print_student",[51,153804,153805],{"class":72},"(student):\n",[51,153807,153808,153810],{"class":53,"line":33815},[51,153809,32263],{"class":175},[51,153811,152403],{"class":72},[51,153813,153814,153817,153819,153821,153824,153827,153829,153832],{"class":53,"line":33821},[51,153815,153816],{"class":64},"        f",[51,153818,1503],{"class":282},[51,153820,2140],{"class":175},[51,153822,153823],{"class":72},"student[",[51,153825,153826],{"class":282},"'student_id'",[51,153828,2184],{"class":72},[51,153830,153831],{"class":175},"}\\t",[51,153833,26097],{"class":282},[51,153835,153836,153838,153840,153842,153844,153847,153849,153851],{"class":53,"line":33830},[51,153837,153816],{"class":64},[51,153839,1503],{"class":282},[51,153841,2140],{"class":175},[51,153843,153823],{"class":72},[51,153845,153846],{"class":282},"'name'",[51,153848,2184],{"class":72},[51,153850,153831],{"class":175},[51,153852,26097],{"class":282},[51,153854,153855,153857,153859,153861,153863,153866,153868,153870],{"class":53,"line":33836},[51,153856,153816],{"class":64},[51,153858,1503],{"class":282},[51,153860,2140],{"class":175},[51,153862,153823],{"class":72},[51,153864,153865],{"class":282},"'age'",[51,153867,2184],{"class":72},[51,153869,153831],{"class":175},[51,153871,26097],{"class":282},[51,153873,153874,153876,153878,153880,153882,153885,153887,153889],{"class":53,"line":33842},[51,153875,153816],{"class":64},[51,153877,1503],{"class":282},[51,153879,2140],{"class":175},[51,153881,153823],{"class":72},[51,153883,153884],{"class":282},"'score'",[51,153886,2184],{"class":72},[51,153888,2190],{"class":175},[51,153890,26097],{"class":282},[51,153892,153893],{"class":53,"line":33851},[51,153894,153895],{"class":72},"    )\n",[51,153897,153898],{"class":53,"line":33857},[51,153899,3480],{"emptyLinePlaceholder":1192},[51,153901,153902],{"class":53,"line":33868},[51,153903,3480],{"emptyLinePlaceholder":1192},[51,153905,153906,153908,153911],{"class":53,"line":33874},[51,153907,32911],{"class":64},[51,153909,153910],{"class":68}," show_all_students",[51,153912,152925],{"class":72},[51,153914,153915,153917,153919],{"class":53,"line":33893},[51,153916,4178],{"class":64},[51,153918,39894],{"class":64},[51,153920,153106],{"class":72},[51,153922,153923,153925,153927,153930],{"class":53,"line":33899},[51,153924,33415],{"class":175},[51,153926,73],{"class":72},[51,153928,153929],{"class":282},"\"暂无学生\"",[51,153931,90],{"class":72},[51,153933,153934],{"class":53,"line":33910},[51,153935,153325],{"class":64},[51,153937,153938],{"class":53,"line":33916},[51,153939,3480],{"emptyLinePlaceholder":1192},[51,153941,153942,153944,153946,153949,153951,153954,153956,153959,153961,153964],{"class":53,"line":33936},[51,153943,32263],{"class":175},[51,153945,73],{"class":72},[51,153947,153948],{"class":282},"\"学号",[51,153950,2340],{"class":175},[51,153952,153953],{"class":282},"姓名",[51,153955,2340],{"class":175},[51,153957,153958],{"class":282},"年龄",[51,153960,2340],{"class":175},[51,153962,153963],{"class":282},"成绩\"",[51,153965,90],{"class":72},[51,153967,153968,153970,153972,153974],{"class":53,"line":33952},[51,153969,4278],{"class":64},[51,153971,153101],{"class":72},[51,153973,27007],{"class":64},[51,153975,153106],{"class":72},[51,153977,153978],{"class":53,"line":33958},[51,153979,153980],{"class":72},"        print_student(student)\n",[51,153982,153983],{"class":53,"line":33972},[51,153984,3480],{"emptyLinePlaceholder":1192},[51,153986,153987],{"class":53,"line":33978},[51,153988,3480],{"emptyLinePlaceholder":1192},[51,153990,153991,153993,153995],{"class":53,"line":33984},[51,153992,32911],{"class":64},[51,153994,151],{"class":68},[51,153996,32917],{"class":72},[51,153998,153999,154002,154004],{"class":53,"line":33995},[51,154000,154001],{"class":72},"    students ",[51,154003,108],{"class":64},[51,154005,154006],{"class":72}," load_students()\n",[51,154008,154009],{"class":53,"line":34001},[51,154010,3480],{"emptyLinePlaceholder":1192},[51,154012,154013,154015,154017],{"class":53,"line":34007},[51,154014,3331],{"class":64},[51,154016,96256],{"class":175},[51,154018,4816],{"class":72},[51,154020,154021],{"class":53,"line":34017},[51,154022,154023],{"class":72},"        show_menu()\n",[51,154025,154026,154029,154031,154033,154035,154038],{"class":53,"line":34023},[51,154027,154028],{"class":72},"        choice ",[51,154030,108],{"class":64},[51,154032,61569],{"class":175},[51,154034,73],{"class":72},[51,154036,154037],{"class":282},"\"请输入操作:\"",[51,154039,90],{"class":72},[51,154041,154042],{"class":53,"line":34034},[51,154043,3480],{"emptyLinePlaceholder":1192},[51,154045,154046,154048,154051,154053,154056],{"class":53,"line":34040},[51,154047,3577],{"class":64},[51,154049,154050],{"class":72}," choice ",[51,154052,4026],{"class":64},[51,154054,154055],{"class":282}," \"1\"",[51,154057,4816],{"class":72},[51,154059,154060],{"class":53,"line":34050},[51,154061,154062],{"class":72},"            add_student(students)\n",[51,154064,154065,154068,154070,154072,154075],{"class":53,"line":34055},[51,154066,154067],{"class":64},"        elif",[51,154069,154050],{"class":72},[51,154071,4026],{"class":64},[51,154073,154074],{"class":282}," \"2\"",[51,154076,4816],{"class":72},[51,154078,154079],{"class":53,"line":34061},[51,154080,154081],{"class":72},"            delete_student(students)\n",[51,154083,154084,154086,154088,154090,154093],{"class":53,"line":34110},[51,154085,154067],{"class":64},[51,154087,154050],{"class":72},[51,154089,4026],{"class":64},[51,154091,154092],{"class":282}," \"3\"",[51,154094,4816],{"class":72},[51,154096,154097],{"class":53,"line":34157},[51,154098,154099],{"class":72},"            update_student(students)\n",[51,154101,154102,154104,154106,154108,154111],{"class":53,"line":34162},[51,154103,154067],{"class":64},[51,154105,154050],{"class":72},[51,154107,4026],{"class":64},[51,154109,154110],{"class":282}," \"4\"",[51,154112,4816],{"class":72},[51,154114,154115],{"class":53,"line":34168},[51,154116,154117],{"class":72},"            query_student(students)\n",[51,154119,154120,154122,154124,154126,154129],{"class":53,"line":34187},[51,154121,154067],{"class":64},[51,154123,154050],{"class":72},[51,154125,4026],{"class":64},[51,154127,154128],{"class":282}," \"5\"",[51,154130,4816],{"class":72},[51,154132,154133],{"class":53,"line":34193},[51,154134,154135],{"class":72},"            show_all_students(students)\n",[51,154137,154138,154140,154142,154144,154147],{"class":53,"line":34213},[51,154139,154067],{"class":64},[51,154141,154050],{"class":72},[51,154143,4026],{"class":64},[51,154145,154146],{"class":282}," \"0\"",[51,154148,4816],{"class":72},[51,154150,154151,154153,154155,154158],{"class":53,"line":34219},[51,154152,35614],{"class":175},[51,154154,73],{"class":72},[51,154156,154157],{"class":282},"\"退出系统\"",[51,154159,90],{"class":72},[51,154161,154162],{"class":53,"line":34225},[51,154163,116062],{"class":64},[51,154165,154166,154168],{"class":53,"line":34235},[51,154167,3614],{"class":64},[51,154169,4816],{"class":72},[51,154171,154172,154174,154176,154179],{"class":53,"line":34240},[51,154173,35614],{"class":175},[51,154175,73],{"class":72},[51,154177,154178],{"class":282},"\"输入错误\"",[51,154180,90],{"class":72},[51,154182,154183],{"class":53,"line":34246},[51,154184,3480],{"emptyLinePlaceholder":1192},[51,154186,154187],{"class":53,"line":34262},[51,154188,3480],{"emptyLinePlaceholder":1192},[51,154190,154191,154193,154195,154197,154199],{"class":53,"line":34307},[51,154192,2633],{"class":64},[51,154194,32184],{"class":175},[51,154196,102523],{"class":64},[51,154198,102526],{"class":282},[51,154200,4816],{"class":72},[51,154202,154203],{"class":53,"line":34313},[51,154204,102533],{"class":72},[40,154206,154207],{},"这个项目串联了：",[19,154209,154210,154213,154216,154219,154222,154224],{},[22,154211,154212],{},"菜单循环。",[22,154214,154215],{},"函数封装。",[22,154217,154218],{},"列表字典。",[22,154220,154221],{},"JSON 读写。",[22,154223,152691],{},[22,154225,154226,29349],{},[37,154227,154228],{},"if __name__ == \"__main__\"",[14,154230,154232],{"id":154231},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[40,154234,154235],{},"可以进一步拆成两个类：",[19,154237,154238,154243],{},[22,154239,154240,154242],{},[37,154241,150532],{},"：表示单个学生。",[22,154244,154245,154247],{},[37,154246,152558],{},"：负责学生增删改查和文件保存。",[40,154249,154250],{},"示意代码：",[29,154252,154254],{"className":31342,"code":154253,"language":31344,"meta":35,"style":35},"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",[37,154255,154256,154266,154270,154274,154278,154286,154293,154299,154305,154311,154315,154323,154329,154339,154349,154359,154369,154373,154377,154383,154391,154399,154407,154415,154423,154431],{"__ignoreMap":35},[51,154257,154258,154260,154262,154264],{"class":53,"line":54},[51,154259,31701],{"class":64},[51,154261,152116],{"class":72},[51,154263,31356],{"class":64},[51,154265,152121],{"class":72},[51,154267,154268],{"class":53,"line":61},[51,154269,3480],{"emptyLinePlaceholder":1192},[51,154271,154272],{"class":53,"line":93},[51,154273,3480],{"emptyLinePlaceholder":1192},[51,154275,154276],{"class":53,"line":99},[51,154277,152134],{"class":68},[51,154279,154280,154282,154284],{"class":53,"line":120},[51,154281,15656],{"class":64},[51,154283,8860],{"class":68},[51,154285,4816],{"class":72},[51,154287,154288,154291],{"class":53,"line":129},[51,154289,154290],{"class":72},"    student_id: ",[51,154292,152150],{"class":175},[51,154294,154295,154297],{"class":53,"line":206},[51,154296,152147],{"class":72},[51,154298,152150],{"class":175},[51,154300,154301,154303],{"class":53,"line":212},[51,154302,152155],{"class":72},[51,154304,152158],{"class":175},[51,154306,154307,154309],{"class":53,"line":227},[51,154308,152163],{"class":72},[51,154310,152166],{"class":175},[51,154312,154313],{"class":53,"line":370},[51,154314,3480],{"emptyLinePlaceholder":1192},[51,154316,154317,154319,154321],{"class":53,"line":387},[51,154318,31765],{"class":64},[51,154320,152314],{"class":68},[51,154322,31771],{"class":72},[51,154324,154325,154327],{"class":53,"line":404},[51,154326,15714],{"class":64},[51,154328,16534],{"class":72},[51,154330,154331,154333,154335,154337],{"class":53,"line":415},[51,154332,152327],{"class":282},[51,154334,52401],{"class":72},[51,154336,31787],{"class":175},[51,154338,152334],{"class":72},[51,154340,154341,154343,154345,154347],{"class":53,"line":420},[51,154342,152339],{"class":282},[51,154344,52401],{"class":72},[51,154346,31787],{"class":175},[51,154348,152346],{"class":72},[51,154350,154351,154353,154355,154357],{"class":53,"line":429},[51,154352,152351],{"class":282},[51,154354,52401],{"class":72},[51,154356,31787],{"class":175},[51,154358,152358],{"class":72},[51,154360,154361,154363,154365,154367],{"class":53,"line":434},[51,154362,152363],{"class":282},[51,154364,52401],{"class":72},[51,154366,31787],{"class":175},[51,154368,152370],{"class":72},[51,154370,154371],{"class":53,"line":448},[51,154372,3609],{"class":72},[51,154374,154375],{"class":53,"line":462},[51,154376,3480],{"emptyLinePlaceholder":1192},[51,154378,154379,154381],{"class":53,"line":470},[51,154380,151978],{"class":68},[51,154382,151981],{"class":175},[51,154384,154385,154387,154389],{"class":53,"line":2783},[51,154386,31765],{"class":64},[51,154388,152391],{"class":68},[51,154390,152394],{"class":72},[51,154392,154393,154395,154397],{"class":53,"line":2788},[51,154394,15714],{"class":64},[51,154396,151998],{"class":175},[51,154398,152403],{"class":72},[51,154400,154401,154403,154405],{"class":53,"line":2817},[51,154402,152408],{"class":72},[51,154404,152411],{"class":282},[51,154406,88800],{"class":72},[51,154408,154409,154411,154413],{"class":53,"line":2822},[51,154410,152408],{"class":72},[51,154412,63643],{"class":282},[51,154414,88800],{"class":72},[51,154416,154417,154419,154421],{"class":53,"line":2839},[51,154418,152408],{"class":72},[51,154420,70088],{"class":282},[51,154422,88800],{"class":72},[51,154424,154425,154427,154429],{"class":53,"line":2844},[51,154426,152408],{"class":72},[51,154428,152436],{"class":282},[51,154430,88800],{"class":72},[51,154432,154433],{"class":53,"line":2849},[51,154434,39090],{"class":72},[40,154436,154437],{},"管理器示意：",[29,154439,154441],{"className":31342,"code":154440,"language":31344,"meta":35,"style":35},"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",[37,154442,154443,154452,154460,154471,154475,154485,154498,154509,154516,154522,154526,154535,154544,154550,154557],{"__ignoreMap":35},[51,154444,154445,154447,154450],{"class":53,"line":54},[51,154446,15656],{"class":64},[51,154448,154449],{"class":68}," StudentManager",[51,154451,4816],{"class":72},[51,154453,154454,154456,154458],{"class":53,"line":61},[51,154455,31765],{"class":64},[51,154457,31768],{"class":175},[51,154459,31771],{"class":72},[51,154461,154462,154464,154467,154469],{"class":53,"line":93},[51,154463,31809],{"class":175},[51,154465,154466],{"class":72},".students ",[51,154468,108],{"class":64},[51,154470,52802],{"class":72},[51,154472,154473],{"class":53,"line":99},[51,154474,3480],{"emptyLinePlaceholder":1192},[51,154476,154477,154479,154482],{"class":53,"line":120},[51,154478,31765],{"class":64},[51,154480,154481],{"class":68}," find_by_id",[51,154483,154484],{"class":72},"(self, student_id):\n",[51,154486,154487,154489,154491,154493,154495],{"class":53,"line":129},[51,154488,4480],{"class":64},[51,154490,153101],{"class":72},[51,154492,27007],{"class":64},[51,154494,39837],{"class":175},[51,154496,154497],{"class":72},".students:\n",[51,154499,154500,154502,154505,154507],{"class":53,"line":206},[51,154501,5716],{"class":64},[51,154503,154504],{"class":72}," student.student_id ",[51,154506,4026],{"class":64},[51,154508,153122],{"class":72},[51,154510,154511,154514],{"class":53,"line":212},[51,154512,154513],{"class":64},"                return",[51,154515,153129],{"class":72},[51,154517,154518,154520],{"class":53,"line":227},[51,154519,15714],{"class":64},[51,154521,153136],{"class":175},[51,154523,154524],{"class":53,"line":370},[51,154525,3480],{"emptyLinePlaceholder":1192},[51,154527,154528,154530,154532],{"class":53,"line":387},[51,154529,31765],{"class":64},[51,154531,69],{"class":68},[51,154533,154534],{"class":72},"(self, student):\n",[51,154536,154537,154539,154541],{"class":53,"line":404},[51,154538,3577],{"class":64},[51,154540,39837],{"class":175},[51,154542,154543],{"class":72},".find_by_id(student.student_id):\n",[51,154545,154546,154548],{"class":53,"line":415},[51,154547,16694],{"class":64},[51,154549,126771],{"class":175},[51,154551,154552,154554],{"class":53,"line":420},[51,154553,31809],{"class":175},[51,154555,154556],{"class":72},".students.append(student)\n",[51,154558,154559,154561],{"class":53,"line":429},[51,154560,15714],{"class":64},[51,154562,154563],{"class":175}," True\n",[40,154565,154566],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154568,154570],{"id":154569},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[1233,154572,154574],{"id":154573},"_1251-数据结构","12.5.1 数据结构",[29,154576,154578],{"className":31342,"code":154577,"language":31344,"meta":35,"style":35},"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",[37,154579,154580,154588,154619,154649,154678,154707],{"__ignoreMap":35},[51,154581,154582,154584,154586],{"class":53,"line":54},[51,154583,149429],{"class":72},[51,154585,108],{"class":64},[51,154587,56411],{"class":72},[51,154589,154590,154592,154594,154596,154598,154600,154603,154605,154608,154610,154612,154614,154617],{"class":53,"line":61},[51,154591,149349],{"class":72},[51,154593,148961],{"class":282},[51,154595,52401],{"class":72},[51,154597,149572],{"class":282},[51,154599,13397],{"class":72},[51,154601,154602],{"class":282},"\"category\"",[51,154604,52401],{"class":72},[51,154606,154607],{"class":282},"\"手机\"",[51,154609,13397],{"class":72},[51,154611,85048],{"class":282},[51,154613,52401],{"class":72},[51,154615,154616],{"class":175},"12000",[51,154618,6004],{"class":72},[51,154620,154621,154623,154625,154627,154629,154631,154633,154635,154638,154640,154642,154644,154647],{"class":53,"line":93},[51,154622,149349],{"class":72},[51,154624,148961],{"class":282},[51,154626,52401],{"class":72},[51,154628,149572],{"class":282},[51,154630,13397],{"class":72},[51,154632,154602],{"class":282},[51,154634,52401],{"class":72},[51,154636,154637],{"class":282},"\"电脑\"",[51,154639,13397],{"class":72},[51,154641,85048],{"class":282},[51,154643,52401],{"class":72},[51,154645,154646],{"class":175},"18000",[51,154648,6004],{"class":72},[51,154650,154651,154653,154655,154657,154659,154661,154663,154665,154667,154669,154671,154673,154676],{"class":53,"line":99},[51,154652,149349],{"class":72},[51,154654,148961],{"class":282},[51,154656,52401],{"class":72},[51,154658,149593],{"class":282},[51,154660,13397],{"class":72},[51,154662,154602],{"class":282},[51,154664,52401],{"class":72},[51,154666,154607],{"class":282},[51,154668,13397],{"class":72},[51,154670,85048],{"class":282},[51,154672,52401],{"class":72},[51,154674,154675],{"class":175},"15000",[51,154677,6004],{"class":72},[51,154679,154680,154682,154684,154686,154688,154690,154692,154694,154696,154698,154700,154702,154705],{"class":53,"line":120},[51,154681,149349],{"class":72},[51,154683,148961],{"class":282},[51,154685,52401],{"class":72},[51,154687,149593],{"class":282},[51,154689,13397],{"class":72},[51,154691,154602],{"class":282},[51,154693,52401],{"class":72},[51,154695,154637],{"class":282},[51,154697,13397],{"class":72},[51,154699,85048],{"class":282},[51,154701,52401],{"class":72},[51,154703,154704],{"class":175},"16000",[51,154706,6004],{"class":72},[51,154708,154709],{"class":53,"line":129},[51,154710,34210],{"class":72},[1233,154712,154714],{"id":154713},"_1252-按日期统计","12.5.2 按日期统计",[29,154716,154718],{"className":31342,"code":154717,"language":31344,"meta":35,"style":35},"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",[37,154719,154720,154729,154733,154744,154758,154771,154790,154794],{"__ignoreMap":35},[51,154721,154722,154725,154727],{"class":53,"line":54},[51,154723,154724],{"class":72},"daily_total ",[51,154726,108],{"class":64},[51,154728,88832],{"class":72},[51,154730,154731],{"class":53,"line":61},[51,154732,3480],{"emptyLinePlaceholder":1192},[51,154734,154735,154737,154739,154741],{"class":53,"line":93},[51,154736,4102],{"class":64},[51,154738,149173],{"class":72},[51,154740,27007],{"class":64},[51,154742,154743],{"class":72}," sales:\n",[51,154745,154746,154749,154751,154754,154756],{"class":53,"line":99},[51,154747,154748],{"class":72},"    date ",[51,154750,108],{"class":64},[51,154752,154753],{"class":72}," item[",[51,154755,148961],{"class":282},[51,154757,34210],{"class":72},[51,154759,154760,154763,154765,154767,154769],{"class":53,"line":120},[51,154761,154762],{"class":72},"    amount ",[51,154764,108],{"class":64},[51,154766,154753],{"class":72},[51,154768,85048],{"class":282},[51,154770,34210],{"class":72},[51,154772,154773,154776,154778,154781,154783,154785,154787],{"class":53,"line":129},[51,154774,154775],{"class":72},"    daily_total[date] ",[51,154777,108],{"class":64},[51,154779,154780],{"class":72}," daily_total.get(date, ",[51,154782,176],{"class":175},[51,154784,14676],{"class":72},[51,154786,114],{"class":64},[51,154788,154789],{"class":72}," amount\n",[51,154791,154792],{"class":53,"line":206},[51,154793,3480],{"emptyLinePlaceholder":1192},[51,154795,154796,154798],{"class":53,"line":212},[51,154797,31379],{"class":175},[51,154799,154800],{"class":72},"(daily_total)\n",[1233,154802,154804],{"id":154803},"_1253-按类别统计","12.5.3 按类别统计",[29,154806,154808],{"className":31342,"code":154807,"language":31344,"meta":35,"style":35},"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",[37,154809,154810,154819,154823,154833,154846,154858,154876,154880],{"__ignoreMap":35},[51,154811,154812,154815,154817],{"class":53,"line":54},[51,154813,154814],{"class":72},"category_total ",[51,154816,108],{"class":64},[51,154818,88832],{"class":72},[51,154820,154821],{"class":53,"line":61},[51,154822,3480],{"emptyLinePlaceholder":1192},[51,154824,154825,154827,154829,154831],{"class":53,"line":93},[51,154826,4102],{"class":64},[51,154828,149173],{"class":72},[51,154830,27007],{"class":64},[51,154832,154743],{"class":72},[51,154834,154835,154838,154840,154842,154844],{"class":53,"line":99},[51,154836,154837],{"class":72},"    category ",[51,154839,108],{"class":64},[51,154841,154753],{"class":72},[51,154843,154602],{"class":282},[51,154845,34210],{"class":72},[51,154847,154848,154850,154852,154854,154856],{"class":53,"line":120},[51,154849,154762],{"class":72},[51,154851,108],{"class":64},[51,154853,154753],{"class":72},[51,154855,85048],{"class":282},[51,154857,34210],{"class":72},[51,154859,154860,154863,154865,154868,154870,154872,154874],{"class":53,"line":129},[51,154861,154862],{"class":72},"    category_total[category] ",[51,154864,108],{"class":64},[51,154866,154867],{"class":72}," category_total.get(category, ",[51,154869,176],{"class":175},[51,154871,14676],{"class":72},[51,154873,114],{"class":64},[51,154875,154789],{"class":72},[51,154877,154878],{"class":53,"line":206},[51,154879,3480],{"emptyLinePlaceholder":1192},[51,154881,154882,154884],{"class":53,"line":212},[51,154883,31379],{"class":175},[51,154885,154886],{"class":72},"(category_total)\n",[1233,154888,154890],{"id":154889},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[29,154892,154894],{"className":31342,"code":154893,"language":31344,"meta":35,"style":35},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[37,154895,154896,154921],{"__ignoreMap":35},[51,154897,154898,154901,154903,154905,154908,154911,154914,154917,154919],{"class":53,"line":54},[51,154899,154900],{"class":72},"top_date, top_amount ",[51,154902,108],{"class":64},[51,154904,864],{"class":175},[51,154906,154907],{"class":72},"(daily_total.items(), ",[51,154909,154910],{"class":78},"key",[51,154912,154913],{"class":64},"=lambda",[51,154915,154916],{"class":72}," item: item[",[51,154918,791],{"class":175},[51,154920,5731],{"class":72},[51,154922,154923,154925],{"class":53,"line":61},[51,154924,31379],{"class":175},[51,154926,154927],{"class":72},"(top_date, top_amount)\n",[14,154929,154931],{"id":154930},"_126-绘制柱状图","12.6 绘制柱状图",[29,154933,154935],{"className":31342,"code":154934,"language":31344,"meta":35,"style":35},"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",[37,154936,154937,154951,154962,154966,154974,154986,154998,155009,155013,155017,155027,155038,155052,155057,155074,155091,155107,155111],{"__ignoreMap":35},[51,154938,154939,154941,154943,154945,154947,154949],{"class":53,"line":54},[51,154940,31701],{"class":64},[51,154942,148343],{"class":72},[51,154944,31356],{"class":64},[51,154946,148348],{"class":72},[51,154948,32347],{"class":64},[51,154950,148353],{"class":72},[51,154952,154953,154955,154957,154959],{"class":53,"line":61},[51,154954,31701],{"class":64},[51,154956,148202],{"class":72},[51,154958,31356],{"class":64},[51,154960,154961],{"class":72}," Bar\n",[51,154963,154964],{"class":53,"line":93},[51,154965,3480],{"emptyLinePlaceholder":1192},[51,154967,154968,154970,154972],{"class":53,"line":99},[51,154969,154814],{"class":72},[51,154971,108],{"class":64},[51,154973,16534],{"class":72},[51,154975,154976,154979,154981,154984],{"class":53,"line":120},[51,154977,154978],{"class":282},"    \"手机\"",[51,154980,52401],{"class":72},[51,154982,154983],{"class":175},"27000",[51,154985,32430],{"class":72},[51,154987,154988,154991,154993,154996],{"class":53,"line":129},[51,154989,154990],{"class":282},"    \"电脑\"",[51,154992,52401],{"class":72},[51,154994,154995],{"class":175},"34000",[51,154997,32430],{"class":72},[51,154999,155000,155003,155005,155007],{"class":53,"line":206},[51,155001,155002],{"class":282},"    \"耳机\"",[51,155004,52401],{"class":72},[51,155006,125363],{"class":175},[51,155008,32430],{"class":72},[51,155010,155011],{"class":53,"line":212},[51,155012,132],{"class":72},[51,155014,155015],{"class":53,"line":227},[51,155016,3480],{"emptyLinePlaceholder":1192},[51,155018,155019,155022,155024],{"class":53,"line":370},[51,155020,155021],{"class":72},"bar ",[51,155023,108],{"class":64},[51,155025,155026],{"class":72}," Bar()\n",[51,155028,155029,155032,155035],{"class":53,"line":387},[51,155030,155031],{"class":72},"bar.add_xaxis(",[51,155033,155034],{"class":175},"list",[51,155036,155037],{"class":72},"(category_total.keys()))\n",[51,155039,155040,155043,155045,155047,155049],{"class":53,"line":404},[51,155041,155042],{"class":72},"bar.add_yaxis(",[51,155044,148259],{"class":282},[51,155046,13397],{"class":72},[51,155048,155034],{"class":175},[51,155050,155051],{"class":72},"(category_total.values()))\n",[51,155053,155054],{"class":53,"line":415},[51,155055,155056],{"class":72},"bar.set_global_opts(\n",[51,155058,155059,155061,155063,155065,155067,155069,155072],{"class":53,"line":420},[51,155060,148437],{"class":78},[51,155062,108],{"class":64},[51,155064,148442],{"class":72},[51,155066,52371],{"class":78},[51,155068,108],{"class":64},[51,155070,155071],{"class":282},"\"品类销售额\"",[51,155073,39011],{"class":72},[51,155075,155076,155078,155080,155082,155084,155086,155089],{"class":53,"line":429},[51,155077,148456],{"class":78},[51,155079,108],{"class":64},[51,155081,148461],{"class":72},[51,155083,80774],{"class":78},[51,155085,108],{"class":64},[51,155087,155088],{"class":282},"\"品类\"",[51,155090,39011],{"class":72},[51,155092,155093,155095,155097,155099,155101,155103,155105],{"class":53,"line":434},[51,155094,148475],{"class":78},[51,155096,108],{"class":64},[51,155098,148461],{"class":72},[51,155100,80774],{"class":78},[51,155102,108],{"class":64},[51,155104,148259],{"class":282},[51,155106,39011],{"class":72},[51,155108,155109],{"class":53,"line":448},[51,155110,90],{"class":72},[51,155112,155113,155116,155119],{"class":53,"line":462},[51,155114,155115],{"class":72},"bar.render(",[51,155117,155118],{"class":282},"\"category_sales.html\"",[51,155120,90],{"class":72},[14,155122,155124],{"id":155123},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[40,155126,155127],{},"时间线适合展示不同日期、月份、年份的数据变化。",[29,155129,155131],{"className":31342,"code":155130,"language":31344,"meta":35,"style":35},"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",[37,155132,155133,155147,155158,155162,155170,155194,155217,155242,155246,155250,155260,155264,155275,155284,155294,155308,155339,155344,155348],{"__ignoreMap":35},[51,155134,155135,155137,155139,155141,155143,155145],{"class":53,"line":54},[51,155136,31701],{"class":64},[51,155138,148343],{"class":72},[51,155140,31356],{"class":64},[51,155142,148348],{"class":72},[51,155144,32347],{"class":64},[51,155146,148353],{"class":72},[51,155148,155149,155151,155153,155155],{"class":53,"line":61},[51,155150,31701],{"class":64},[51,155152,148202],{"class":72},[51,155154,31356],{"class":64},[51,155156,155157],{"class":72}," Bar, Timeline\n",[51,155159,155160],{"class":53,"line":93},[51,155161,3480],{"emptyLinePlaceholder":1192},[51,155163,155164,155166,155168],{"class":53,"line":99},[51,155165,102622],{"class":72},[51,155167,108],{"class":64},[51,155169,16534],{"class":72},[51,155171,155172,155175,155178,155180,155182,155184,155186,155188,155190,155192],{"class":53,"line":120},[51,155173,155174],{"class":282},"    \"2024-10-01\"",[51,155176,155177],{"class":72},": {",[51,155179,154607],{"class":282},[51,155181,52401],{"class":72},[51,155183,154616],{"class":175},[51,155185,13397],{"class":72},[51,155187,154637],{"class":282},[51,155189,52401],{"class":72},[51,155191,154646],{"class":175},[51,155193,6004],{"class":72},[51,155195,155196,155199,155201,155203,155205,155207,155209,155211,155213,155215],{"class":53,"line":129},[51,155197,155198],{"class":282},"    \"2024-10-02\"",[51,155200,155177],{"class":72},[51,155202,154607],{"class":282},[51,155204,52401],{"class":72},[51,155206,154675],{"class":175},[51,155208,13397],{"class":72},[51,155210,154637],{"class":282},[51,155212,52401],{"class":72},[51,155214,154704],{"class":175},[51,155216,6004],{"class":72},[51,155218,155219,155222,155224,155226,155228,155231,155233,155235,155237,155240],{"class":53,"line":206},[51,155220,155221],{"class":282},"    \"2024-10-03\"",[51,155223,155177],{"class":72},[51,155225,154607],{"class":282},[51,155227,52401],{"class":72},[51,155229,155230],{"class":175},"17000",[51,155232,13397],{"class":72},[51,155234,154637],{"class":282},[51,155236,52401],{"class":72},[51,155238,155239],{"class":175},"19000",[51,155241,6004],{"class":72},[51,155243,155244],{"class":53,"line":212},[51,155245,132],{"class":72},[51,155247,155248],{"class":53,"line":227},[51,155249,3480],{"emptyLinePlaceholder":1192},[51,155251,155252,155255,155257],{"class":53,"line":370},[51,155253,155254],{"class":72},"timeline ",[51,155256,108],{"class":64},[51,155258,155259],{"class":72}," Timeline()\n",[51,155261,155262],{"class":53,"line":387},[51,155263,3480],{"emptyLinePlaceholder":1192},[51,155265,155266,155268,155271,155273],{"class":53,"line":404},[51,155267,4102],{"class":64},[51,155269,155270],{"class":72}," date, category_data ",[51,155272,27007],{"class":64},[51,155274,150112],{"class":72},[51,155276,155277,155280,155282],{"class":53,"line":415},[51,155278,155279],{"class":72},"    bar ",[51,155281,108],{"class":64},[51,155283,155026],{"class":72},[51,155285,155286,155289,155291],{"class":53,"line":420},[51,155287,155288],{"class":72},"    bar.add_xaxis(",[51,155290,155034],{"class":175},[51,155292,155293],{"class":72},"(category_data.keys()))\n",[51,155295,155296,155299,155301,155303,155305],{"class":53,"line":429},[51,155297,155298],{"class":72},"    bar.add_yaxis(",[51,155300,148259],{"class":282},[51,155302,13397],{"class":72},[51,155304,155034],{"class":175},[51,155306,155307],{"class":72},"(category_data.values()))\n",[51,155309,155310,155313,155316,155318,155320,155322,155324,155326,155328,155330,155332,155334,155337],{"class":53,"line":434},[51,155311,155312],{"class":72},"    bar.set_global_opts(",[51,155314,155315],{"class":78},"title_opts",[51,155317,108],{"class":64},[51,155319,148442],{"class":72},[51,155321,52371],{"class":78},[51,155323,108],{"class":64},[51,155325,1311],{"class":64},[51,155327,1503],{"class":282},[51,155329,2140],{"class":175},[51,155331,74890],{"class":72},[51,155333,2190],{"class":175},[51,155335,155336],{"class":282},"销售额\"",[51,155338,31461],{"class":72},[51,155340,155341],{"class":53,"line":448},[51,155342,155343],{"class":72},"    timeline.add(bar, date)\n",[51,155345,155346],{"class":53,"line":462},[51,155347,3480],{"emptyLinePlaceholder":1192},[51,155349,155350,155353,155356],{"class":53,"line":470},[51,155351,155352],{"class":72},"timeline.render(",[51,155354,155355],{"class":282},"\"timeline_sales.html\"",[51,155357,90],{"class":72},[14,155359,155361],{"id":155360},"_128-绘制地图","12.8 绘制地图",[40,155363,155364],{},"地图适合展示地区数据。",[29,155366,155368],{"className":31342,"code":155367,"language":31344,"meta":35,"style":35},"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",[37,155369,155370,155384,155395,155399,155407,155420,155432,155445,155458,155462,155466,155476,155491,155496,155513,155532,155536],{"__ignoreMap":35},[51,155371,155372,155374,155376,155378,155380,155382],{"class":53,"line":54},[51,155373,31701],{"class":64},[51,155375,148343],{"class":72},[51,155377,31356],{"class":64},[51,155379,148348],{"class":72},[51,155381,32347],{"class":64},[51,155383,148353],{"class":72},[51,155385,155386,155388,155390,155392],{"class":53,"line":61},[51,155387,31701],{"class":64},[51,155389,148202],{"class":72},[51,155391,31356],{"class":64},[51,155393,155394],{"class":72}," Map\n",[51,155396,155397],{"class":53,"line":93},[51,155398,3480],{"emptyLinePlaceholder":1192},[51,155400,155401,155403,155405],{"class":53,"line":99},[51,155402,102622],{"class":72},[51,155404,108],{"class":64},[51,155406,56411],{"class":72},[51,155408,155409,155412,155414,155416,155418],{"class":53,"line":120},[51,155410,155411],{"class":72},"    (",[51,155413,70233],{"class":282},[51,155415,13397],{"class":72},[51,155417,2062],{"class":175},[51,155419,39011],{"class":72},[51,155421,155422,155424,155426,155428,155430],{"class":53,"line":129},[51,155423,155411],{"class":72},[51,155425,70253],{"class":282},[51,155427,13397],{"class":72},[51,155429,148276],{"class":175},[51,155431,39011],{"class":72},[51,155433,155434,155436,155439,155441,155443],{"class":53,"line":206},[51,155435,155411],{"class":72},[51,155437,155438],{"class":282},"\"广东\"",[51,155440,13397],{"class":72},[51,155442,2812],{"class":175},[51,155444,39011],{"class":72},[51,155446,155447,155449,155452,155454,155456],{"class":53,"line":212},[51,155448,155411],{"class":72},[51,155450,155451],{"class":282},"\"浙江\"",[51,155453,13397],{"class":72},[51,155455,148281],{"class":175},[51,155457,39011],{"class":72},[51,155459,155460],{"class":53,"line":227},[51,155461,34210],{"class":72},[51,155463,155464],{"class":53,"line":370},[51,155465,3480],{"emptyLinePlaceholder":1192},[51,155467,155468,155471,155473],{"class":53,"line":387},[51,155469,155470],{"class":72},"map_chart ",[51,155472,108],{"class":64},[51,155474,155475],{"class":72}," Map()\n",[51,155477,155478,155481,155483,155486,155489],{"class":53,"line":404},[51,155479,155480],{"class":72},"map_chart.add(",[51,155482,148259],{"class":282},[51,155484,155485],{"class":72},", data, ",[51,155487,155488],{"class":282},"\"china\"",[51,155490,90],{"class":72},[51,155492,155493],{"class":53,"line":415},[51,155494,155495],{"class":72},"map_chart.set_global_opts(\n",[51,155497,155498,155500,155502,155504,155506,155508,155511],{"class":53,"line":420},[51,155499,148437],{"class":78},[51,155501,108],{"class":64},[51,155503,148442],{"class":72},[51,155505,52371],{"class":78},[51,155507,108],{"class":64},[51,155509,155510],{"class":282},"\"地区销售额\"",[51,155512,39011],{"class":72},[51,155514,155515,155518,155520,155523,155526,155528,155530],{"class":53,"line":429},[51,155516,155517],{"class":78},"    visualmap_opts",[51,155519,108],{"class":64},[51,155521,155522],{"class":72},"opts.VisualMapOpts(",[51,155524,155525],{"class":78},"max_",[51,155527,108],{"class":64},[51,155529,2812],{"class":175},[51,155531,39011],{"class":72},[51,155533,155534],{"class":53,"line":434},[51,155535,90],{"class":72},[51,155537,155538,155541,155544],{"class":53,"line":448},[51,155539,155540],{"class":72},"map_chart.render(",[51,155542,155543],{"class":282},"\"map_sales.html\"",[51,155545,90],{"class":72},[40,155547,155548],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155550,155552],{"id":155551},"_129-项目拆分建议","12.9 项目拆分建议",[40,155554,155555],{},"当代码超过一个文件时，可以这样组织：",[29,155557,155560],{"className":155558,"code":155559,"language":34,"meta":35},[32],"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",[37,155561,155559],{"__ignoreMap":35},[40,155563,155564],{},"职责：",[19,155566,155567,155573,155579,155585],{},[22,155568,155569,155572],{},[37,155570,155571],{},"main.py","：程序入口。",[22,155574,155575,155578],{},[37,155576,155577],{},"file_utils.py","：读写 JSON。",[22,155580,155581,155584],{},[37,155582,155583],{},"sales_service.py","：统计销售数据。",[22,155586,155587,155590],{},[37,155588,155589],{},"chart_builder.py","：生成图表。",[14,155592,155594],{"id":155593},"_1210-python基础复习清单","12.10 Python基础复习清单",[40,155596,155597],{},"语法基础：",[19,155599,155600,155603,155606,155609],{},[22,155601,155602],{},"会写变量、注释、输入输出。",[22,155604,155605],{},"会使用 int、float、str、bool。",[22,155607,155608],{},"会做类型转换。",[22,155610,155611],{},"会使用 f-string 格式化输出。",[40,155613,155614],{},"流程控制：",[19,155616,155617,155623,155629,155637],{},[22,155618,155619,155620,29349],{},"会写 ",[37,155621,155622],{},"if elif else",[22,155624,155619,155625,101982,155627,29349],{},[37,155626,109627],{},[37,155628,4102],{},[22,155630,155631,155632,101982,155634,29349],{},"理解 ",[37,155633,3133],{},[37,155635,155636],{},"continue",[22,155638,155639],{},"能写嵌套循环。",[40,155641,155642],{},"函数：",[19,155644,155645,155648,155651,155654],{},[22,155646,155647],{},"会定义和调用函数。",[22,155649,155650],{},"理解参数和返回值。",[22,155652,155653],{},"知道局部变量和全局变量。",[22,155655,155656],{},"会使用默认参数、关键字参数、不定长参数。",[40,155658,155659],{},"容器：",[19,155661,155662,155665,155668,155671,155674],{},[22,155663,155664],{},"会使用列表增删改查。",[22,155666,155667],{},"会遍历列表、字典。",[22,155669,155670],{},"会使用切片。",[22,155672,155673],{},"会用集合去重。",[22,155675,155676],{},"会处理列表嵌套字典。",[40,155678,155679],{},"文件和模块：",[19,155681,155682,155685,155688,155691,155694],{},[22,155683,155684],{},"会读写文本文件。",[22,155686,155687],{},"会读写 JSON。",[22,155689,155690],{},"会捕获常见异常。",[22,155692,155693],{},"会导入模块和第三方包。",[22,155695,155696],{},"会创建简单包结构。",[40,155698,155699],{},"项目能力：",[19,155701,155702,155705,155708,155711,155714],{},[22,155703,155704],{},"能把代码拆成函数。",[22,155706,155707],{},"能把数据保存到文件。",[22,155709,155710],{},"能处理用户输入错误。",[22,155712,155713],{},"能写一个完整菜单程序。",[22,155715,155716],{},"能用 pyecharts 生成图表。",[14,155718,155720],{"id":155719},"_1211-推荐练习顺序","12.11 推荐练习顺序",[19,155722,155723,155726,155729,155732,155735,155738,155741,155744],{},[22,155724,155725],{},"猜数字游戏。",[22,155727,155728],{},"ATM 菜单程序。",[22,155730,155731],{},"学生成绩统计。",[22,155733,155734],{},"学生管理系统函数版。",[22,155736,155737],{},"学生管理系统文件持久化版。",[22,155739,155740],{},"学生管理系统面向对象版。",[22,155742,155743],{},"销售数据统计。",[22,155745,155746],{},"销售数据可视化。",[14,155748,155750],{"id":155749},"_1212-常见学习误区","12.12 常见学习误区",[19,155752,155753,155756,155759,155762,155765,155768,155771],{},[22,155754,155755],{},"只看视频不敲代码。",[22,155757,155758],{},"一报错就复制错误去搜，不先读报错位置。",[22,155760,155761],{},"变量名随便写，后续自己看不懂。",[22,155763,155764],{},"所有代码都写在一个文件一个函数里。",[22,155766,155767],{},"不保存练习代码，复习时没有材料。",[22,155769,155770],{},"还没掌握列表字典就急着学框架。",[22,155772,155773],{},"不会读官方文档，只依赖教程。",[14,155775,155777],{"id":155776},"_1213-如何读报错","12.13 如何读报错",[40,155779,155780],{},"报错通常从下往上看最后几行。",[40,155782,16097],{},[29,155784,155787],{"className":155785,"code":155786,"language":34,"meta":35},[32],"ValueError: invalid literal for int() with base 10: 'abc'\n",[37,155788,155786],{"__ignoreMap":35},[40,155790,25563],{},[19,155792,155793,155799,155809],{},[22,155794,155795,155796,29349],{},"异常类型是 ",[37,155797,155798],{},"ValueError",[22,155800,108309,155801,155804,155805,155808],{},[37,155802,155803],{},"int()"," 无法把 ",[37,155806,155807],{},"'abc'"," 转成整数。",[22,155810,155811],{},"应该检查输入内容或增加异常处理。",[40,155813,155814],{},"再看文件名和行号：",[29,155816,155819],{"className":155817,"code":155818,"language":34,"meta":35},[32],"File \"main.py\", line 10, in \u003Cmodule>\n",[37,155820,155818],{"__ignoreMap":35},[40,155822,155823,155824,155826],{},"表示错误发生在 ",[37,155825,155571],{}," 第 10 行。",[14,155828,155830],{"id":155829},"_1214-后续学习方向","12.14 后续学习方向",[40,155832,155833],{},"Python 基础完成后，可以按兴趣选择方向：",[19,155835,155836,155848,155857,155869,155880,155889,155899],{},[22,155837,155838,155839,1466,155842,1466,155845,29349],{},"自动化办公：",[37,155840,155841],{},"openpyxl",[37,155843,155844],{},"python-docx",[37,155846,155847],{},"pdfplumber",[22,155849,155850,155851,1466,155853,1466,155855,29349],{},"数据分析：",[37,155852,101590],{},[37,155854,147149],{},[37,155856,147157],{},[22,155858,155859,155860,1466,155863,1466,155866,29349],{},"Web 后端：",[37,155861,155862],{},"Flask",[37,155864,155865],{},"FastAPI",[37,155867,155868],{},"Django",[22,155870,155871,155872,1466,155874,1466,155877,29349],{},"爬虫：",[37,155873,147134],{},[37,155875,155876],{},"BeautifulSoup",[37,155878,155879],{},"Scrapy",[22,155881,155882,155883,1466,155885,155888],{},"测试开发：",[37,155884,147181],{},[37,155886,155887],{},"selenium","、接口测试。",[22,155890,155891,155892,1466,155894,1466,155896,29349],{},"人工智能：",[37,155893,101590],{},[37,155895,147149],{},[37,155897,155898],{},"pytorch",[22,155900,155901,155902,1466,155904,1466,155907,29349],{},"运维脚本：",[37,155903,146750],{},[37,155905,155906],{},"subprocess",[37,155908,155909],{},"paramiko",[40,155911,155912],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155914,155916],{"id":155915},"_1215-结课练习","12.15 结课练习",[19,155918,155919,155922,155925,155928,155931,155934,155937,155940],{},[22,155920,155921],{},"完成函数版学生管理系统。",[22,155923,155924],{},"给学生管理系统增加 JSON 持久化。",[22,155926,155927],{},"给学生管理系统增加异常处理。",[22,155929,155930],{},"把学生管理系统改成面向对象版。",[22,155932,155933],{},"使用 pyecharts 绘制学生成绩柱状图。",[22,155935,155936],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[22,155938,155939],{},"按品类统计销售额并绘制柱状图。",[22,155941,155942],{},"写一份自己的 Python 学习路线图。",[1179,155944,155945],{},"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":35,"searchDepth":61,"depth":61,"links":155947},[155948,155949,155952,155953,155954,155960,155961,155962,155963,155964,155965,155966,155967,155968,155969],{"id":152664,"depth":61,"text":152665},{"id":152714,"depth":61,"text":152715,"children":155950},[155951],{"id":152718,"depth":93,"text":152719},{"id":152757,"depth":61,"text":152758},{"id":154231,"depth":61,"text":154232},{"id":154569,"depth":61,"text":154570,"children":155955},[155956,155957,155958,155959],{"id":154573,"depth":93,"text":154574},{"id":154713,"depth":93,"text":154714},{"id":154803,"depth":93,"text":154804},{"id":154889,"depth":93,"text":154890},{"id":154930,"depth":61,"text":154931},{"id":155123,"depth":61,"text":155124},{"id":155360,"depth":61,"text":155361},{"id":155551,"depth":61,"text":155552},{"id":155593,"depth":61,"text":155594},{"id":155719,"depth":61,"text":155720},{"id":155749,"depth":61,"text":155750},{"id":155776,"depth":61,"text":155777},{"id":155829,"depth":61,"text":155830},{"id":155915,"depth":61,"text":155916},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152656,"description":24339},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155976,"title":155977,"body":155978,"description":24339,"extension":1190,"meta":158447,"navigation":1192,"path":158448,"seo":158449,"stem":158450,"__hash__":158451},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155979,"toc":158422},[155980,155983,155987,155990,155993,156013,156016,156039,156042,156045,156067,156070,156092,156096,156099,156139,156142,156263,156267,156270,156310,156313,156337,156340,156344,156347,156361,156394,156397,156432,156435,156458,156461,156494,156497,156499,156505,156580,156583,156589,156606,156646,156650,156653,156699,156701,156739,156742,156777,156780,156815,156818,156850,156853,156872,156876,156880,156993,156995,157070,157074,157120,157123,157149,157158,157162,157165,157228,157236,157264,157268,157308,157373,157377,157380,157419,157422,157467,157470,157531,157535,157562,157565,157593,157596,157600,157604,157669,157672,157710,157713,157745,157749,157848,157852,157855,157928,157931,157979,157983,157989,158029,158032,158079,158082,158131,158135,158137,158151,158153,158334,158338,158365,158385,158392,158396,158413,158419],[10,155981,155977],{"id":155982},"_2-基础语法变量与字符串",[14,155984,155986],{"id":155985},"_21-注释","2.1 注释",[40,155988,155989],{},"注释是给人看的说明文字，不会被 Python 执行。",[40,155991,155992],{},"单行注释：",[29,155994,155996],{"className":31342,"code":155995,"language":31344,"meta":35,"style":35},"# 这是单行注释\nprint(\"hello\")\n",[37,155997,155998,156003],{"__ignoreMap":35},[51,155999,156000],{"class":53,"line":54},[51,156001,156002],{"class":57},"# 这是单行注释\n",[51,156004,156005,156007,156009,156011],{"class":53,"line":61},[51,156006,31379],{"class":175},[51,156008,73],{"class":72},[51,156010,752],{"class":282},[51,156012,90],{"class":72},[40,156014,156015],{},"多行说明常用三引号：",[29,156017,156019],{"className":31342,"code":156018,"language":31344,"meta":35,"style":35},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[37,156020,156021,156025,156030,156035],{"__ignoreMap":35},[51,156022,156023],{"class":53,"line":54},[51,156024,96662],{"class":282},[51,156026,156027],{"class":53,"line":61},[51,156028,156029],{"class":282},"这是多行说明。\n",[51,156031,156032],{"class":53,"line":93},[51,156033,156034],{"class":282},"常用于文件顶部说明、函数说明等。\n",[51,156036,156037],{"class":53,"line":99},[51,156038,96662],{"class":282},[40,156040,156041],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[40,156043,156044],{},"不好：",[29,156046,156048],{"className":31342,"code":156047,"language":31344,"meta":35,"style":35},"# age 加 1\nage = age + 1\n",[37,156049,156050,156055],{"__ignoreMap":35},[51,156051,156052],{"class":53,"line":54},[51,156053,156054],{"class":57},"# age 加 1\n",[51,156056,156057,156059,156061,156063,156065],{"class":53,"line":61},[51,156058,147510],{"class":72},[51,156060,108],{"class":64},[51,156062,16669],{"class":72},[51,156064,114],{"class":64},[51,156066,56663],{"class":175},[40,156068,156069],{},"较好：",[29,156071,156073],{"className":31342,"code":156072,"language":31344,"meta":35,"style":35},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[37,156074,156075,156080],{"__ignoreMap":35},[51,156076,156077],{"class":53,"line":54},[51,156078,156079],{"class":57},"# 用户过完生日后，年龄增加一岁\n",[51,156081,156082,156084,156086,156088,156090],{"class":53,"line":61},[51,156083,147510],{"class":72},[51,156085,108],{"class":64},[51,156087,16669],{"class":72},[51,156089,114],{"class":64},[51,156091,56663],{"class":175},[14,156093,156095],{"id":156094},"_22-字面量","2.2 字面量",[40,156097,156098],{},"字面量就是代码中直接写出来的数据。",[29,156100,156102],{"className":31342,"code":156101,"language":31344,"meta":35,"style":35},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[37,156103,156104,156111,156118,156125,156132],{"__ignoreMap":35},[51,156105,156106,156108],{"class":53,"line":54},[51,156107,612],{"class":175},[51,156109,156110],{"class":57},"          # 整数\n",[51,156112,156113,156115],{"class":53,"line":61},[51,156114,1308],{"class":175},[51,156116,156117],{"class":57},"         # 小数\n",[51,156119,156120,156122],{"class":53,"line":93},[51,156121,752],{"class":282},[51,156123,156124],{"class":57},"      # 字符串\n",[51,156126,156127,156129],{"class":53,"line":99},[51,156128,32440],{"class":175},[51,156130,156131],{"class":57},"         # 布尔值\n",[51,156133,156134,156136],{"class":53,"line":120},[51,156135,96650],{"class":175},[51,156137,156138],{"class":57},"         # 空值\n",[40,156140,156141],{},"常见字面量类型：",[1393,156143,156144,156154],{},[1396,156145,156146],{},[1399,156147,156148,156150,156152],{},[1402,156149,24700],{},[1402,156151,28456],{},[1402,156153,26833],{},[1439,156155,156156,156167,156178,156189,156201,156213,156225,156238,156250],{},[1399,156157,156158,156160,156164],{},[1444,156159,65],{},[1444,156161,156162],{},[37,156163,612],{},[1444,156165,156166],{},"整数",[1399,156168,156169,156171,156175],{},[1444,156170,1300],{},[1444,156172,156173],{},[37,156174,1308],{},[1444,156176,156177],{},"浮点数",[1399,156179,156180,156182,156186],{},[1444,156181,2407],{},[1444,156183,156184],{},[37,156185,752],{},[1444,156187,156188],{},"字符串",[1399,156190,156191,156193,156199],{},[1444,156192,2459],{},[1444,156194,156195,1466,156197],{},[37,156196,32440],{},[37,156198,34951],{},[1444,156200,66979],{},[1399,156202,156203,156206,156210],{},[1444,156204,156205],{},"NoneType",[1444,156207,156208],{},[37,156209,96650],{},[1444,156211,156212],{},"空值",[1399,156214,156215,156217,156222],{},[1444,156216,155034],{},[1444,156218,156219],{},[37,156220,156221],{},"[1, 2, 3]",[1444,156223,156224],{},"列表",[1399,156226,156227,156230,156235],{},[1444,156228,156229],{},"tuple",[1444,156231,156232],{},[37,156233,156234],{},"(1, 2, 3)",[1444,156236,156237],{},"元组",[1399,156239,156240,156242,156247],{},[1444,156241,115510],{},[1444,156243,156244],{},[37,156245,156246],{},"{\"name\": \"张三\"}",[1444,156248,156249],{},"字典",[1399,156251,156252,156255,156260],{},[1444,156253,156254],{},"set",[1444,156256,156257],{},[37,156258,156259],{},"{1, 2, 3}",[1444,156261,156262],{},"集合",[14,156264,156266],{"id":156265},"_23-变量","2.3 变量",[40,156268,156269],{},"变量是保存数据的名字。",[29,156271,156273],{"className":31342,"code":156272,"language":31344,"meta":35,"style":35},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[37,156274,156275,156283,156291,156301],{"__ignoreMap":35},[51,156276,156277,156279,156281],{"class":53,"line":54},[51,156278,147500],{"class":72},[51,156280,108],{"class":64},[51,156282,150317],{"class":282},[51,156284,156285,156287,156289],{"class":53,"line":61},[51,156286,147510],{"class":72},[51,156288,108],{"class":64},[51,156290,147515],{"class":175},[51,156292,156293,156296,156298],{"class":53,"line":93},[51,156294,156295],{"class":72},"height ",[51,156297,108],{"class":64},[51,156299,156300],{"class":175}," 1.75\n",[51,156302,156303,156306,156308],{"class":53,"line":99},[51,156304,156305],{"class":72},"is_student ",[51,156307,108],{"class":64},[51,156309,154563],{"class":175},[40,156311,156312],{},"Python 的变量不需要提前声明类型：",[29,156314,156316],{"className":31342,"code":156315,"language":31344,"meta":35,"style":35},"score = 100\nscore = \"满分\"\n",[37,156317,156318,156328],{"__ignoreMap":35},[51,156319,156320,156323,156325],{"class":53,"line":54},[51,156321,156322],{"class":72},"score ",[51,156324,108],{"class":64},[51,156326,156327],{"class":175}," 100\n",[51,156329,156330,156332,156334],{"class":53,"line":61},[51,156331,156322],{"class":72},[51,156333,108],{"class":64},[51,156335,156336],{"class":282}," \"满分\"\n",[40,156338,156339],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156341,156343],{"id":156342},"_24-变量命名规则","2.4 变量命名规则",[40,156345,156346],{},"硬性规则：",[19,156348,156349,156352,156355,156358],{},[22,156350,156351],{},"只能由字母、数字、下划线组成。",[22,156353,156354],{},"不能以数字开头。",[22,156356,156357],{},"不能使用 Python 关键字。",[22,156359,156360],{},"区分大小写。",[29,156362,156364],{"className":31342,"code":156363,"language":31344,"meta":35,"style":35},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[37,156365,156366,156375,156384],{"__ignoreMap":35},[51,156367,156368,156371,156373],{"class":53,"line":54},[51,156369,156370],{"class":72},"user_name ",[51,156372,108],{"class":64},[51,156374,147505],{"class":282},[51,156376,156377,156380,156382],{"class":53,"line":61},[51,156378,156379],{"class":72},"age2 ",[51,156381,108],{"class":64},[51,156383,147515],{"class":175},[51,156385,156386,156389,156391],{"class":53,"line":93},[51,156387,156388],{"class":72},"_token ",[51,156390,108],{"class":64},[51,156392,156393],{"class":282}," \"abc\"\n",[40,156395,156396],{},"错误写法：",[29,156398,156400],{"className":31342,"code":156399,"language":31344,"meta":35,"style":35},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[37,156401,156402,156411,156423],{"__ignoreMap":35},[51,156403,156404,156407,156409],{"class":53,"line":54},[51,156405,156406],{"class":78367},"2age",[51,156408,14526],{"class":64},[51,156410,147515],{"class":175},[51,156412,156413,156415,156417,156419,156421],{"class":53,"line":61},[51,156414,132548],{"class":72},[51,156416,1778],{"class":64},[51,156418,147500],{"class":72},[51,156420,108],{"class":64},[51,156422,147505],{"class":282},[51,156424,156425,156427,156429],{"class":53,"line":93},[51,156426,15656],{"class":64},[51,156428,14526],{"class":64},[51,156430,156431],{"class":282}," \"一班\"\n",[40,156433,156434],{},"查看关键字：",[29,156436,156438],{"className":31342,"code":156437,"language":31344,"meta":35,"style":35},"import keyword\n\nprint(keyword.kwlist)\n",[37,156439,156440,156447,156451],{"__ignoreMap":35},[51,156441,156442,156444],{"class":53,"line":54},[51,156443,31356],{"class":64},[51,156445,156446],{"class":72}," keyword\n",[51,156448,156449],{"class":53,"line":61},[51,156450,3480],{"emptyLinePlaceholder":1192},[51,156452,156453,156455],{"class":53,"line":93},[51,156454,31379],{"class":175},[51,156456,156457],{"class":72},"(keyword.kwlist)\n",[40,156459,156460],{},"推荐命名风格：",[29,156462,156464],{"className":31342,"code":156463,"language":31344,"meta":35,"style":35},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[37,156465,156466,156475,156485],{"__ignoreMap":35},[51,156467,156468,156471,156473],{"class":53,"line":54},[51,156469,156470],{"class":72},"student_name ",[51,156472,108],{"class":64},[51,156474,150317],{"class":282},[51,156476,156477,156480,156482],{"class":53,"line":61},[51,156478,156479],{"class":72},"total_price ",[51,156481,108],{"class":64},[51,156483,156484],{"class":175}," 99.8\n",[51,156486,156487,156490,156492],{"class":53,"line":93},[51,156488,156489],{"class":72},"is_finished ",[51,156491,108],{"class":64},[51,156493,126771],{"class":175},[40,156495,156496],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156498,51696],{"id":51695},[40,156500,105330,156501,156504],{},[37,156502,156503],{},"type()"," 查看数据类型：",[29,156506,156508],{"className":31342,"code":156507,"language":31344,"meta":35,"style":35},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[37,156509,156510,156524,156538,156552,156566],{"__ignoreMap":35},[51,156511,156512,156514,156516,156518,156520,156522],{"class":53,"line":54},[51,156513,31379],{"class":175},[51,156515,73],{"class":72},[51,156517,104071],{"class":175},[51,156519,73],{"class":72},[51,156521,612],{"class":175},[51,156523,31461],{"class":72},[51,156525,156526,156528,156530,156532,156534,156536],{"class":53,"line":61},[51,156527,31379],{"class":175},[51,156529,73],{"class":72},[51,156531,104071],{"class":175},[51,156533,73],{"class":72},[51,156535,1308],{"class":175},[51,156537,31461],{"class":72},[51,156539,156540,156542,156544,156546,156548,156550],{"class":53,"line":93},[51,156541,31379],{"class":175},[51,156543,73],{"class":72},[51,156545,104071],{"class":175},[51,156547,73],{"class":72},[51,156549,752],{"class":282},[51,156551,31461],{"class":72},[51,156553,156554,156556,156558,156560,156562,156564],{"class":53,"line":99},[51,156555,31379],{"class":175},[51,156557,73],{"class":72},[51,156559,104071],{"class":175},[51,156561,73],{"class":72},[51,156563,32440],{"class":175},[51,156565,31461],{"class":72},[51,156567,156568,156570,156572,156574,156576,156578],{"class":53,"line":120},[51,156569,31379],{"class":175},[51,156571,73],{"class":72},[51,156573,104071],{"class":175},[51,156575,73],{"class":72},[51,156577,96650],{"class":175},[51,156579,31461],{"class":72},[40,156581,156582],{},"输出类似：",[29,156584,156587],{"className":156585,"code":156586,"language":34,"meta":35},[32],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[37,156588,156586],{"__ignoreMap":35},[40,156590,9987,156591,108247,156593,156595,156596,156598,156599,22462,156601,156598,156603,156605],{},[37,156592,2459],{},[37,156594,65],{}," 的子类，",[37,156597,32440],{}," 可以当作 ",[37,156600,791],{},[37,156602,34951],{},[37,156604,176],{},"，但业务代码中不要滥用。",[29,156607,156609],{"className":31342,"code":156608,"language":31344,"meta":35,"style":35},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[37,156610,156611,156629],{"__ignoreMap":35},[51,156612,156613,156615,156617,156619,156621,156623,156626],{"class":53,"line":54},[51,156614,31379],{"class":175},[51,156616,73],{"class":72},[51,156618,32440],{"class":175},[51,156620,46530],{"class":64},[51,156622,26082],{"class":175},[51,156624,156625],{"class":72},")   ",[51,156627,156628],{"class":57},"# 2\n",[51,156630,156631,156633,156635,156637,156639,156641,156643],{"class":53,"line":61},[51,156632,31379],{"class":175},[51,156634,73],{"class":72},[51,156636,34951],{"class":175},[51,156638,46530],{"class":64},[51,156640,26082],{"class":175},[51,156642,46772],{"class":72},[51,156644,156645],{"class":57},"# 1\n",[14,156647,156649],{"id":156648},"_26-类型转换","2.6 类型转换",[40,156651,156652],{},"常用转换函数：",[29,156654,156656],{"className":31342,"code":156655,"language":31344,"meta":35,"style":35},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[37,156657,156658,156668,156679,156689],{"__ignoreMap":35},[51,156659,156660,156662,156664,156666],{"class":53,"line":54},[51,156661,65],{"class":175},[51,156663,73],{"class":72},[51,156665,55280],{"class":282},[51,156667,90],{"class":72},[51,156669,156670,156672,156674,156677],{"class":53,"line":61},[51,156671,1300],{"class":175},[51,156673,73],{"class":72},[51,156675,156676],{"class":282},"\"3.14\"",[51,156678,90],{"class":72},[51,156680,156681,156683,156685,156687],{"class":53,"line":93},[51,156682,2407],{"class":175},[51,156684,73],{"class":72},[51,156686,612],{"class":175},[51,156688,90],{"class":72},[51,156690,156691,156693,156695,156697],{"class":53,"line":99},[51,156692,2459],{"class":175},[51,156694,73],{"class":72},[51,156696,791],{"class":175},[51,156698,90],{"class":72},[40,156700,16097],{},[29,156702,156704],{"className":31342,"code":156703,"language":31344,"meta":35,"style":35},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[37,156705,156706,156715,156726],{"__ignoreMap":35},[51,156707,156708,156710,156712],{"class":53,"line":54},[51,156709,147510],{"class":72},[51,156711,108],{"class":64},[51,156713,156714],{"class":282}," \"18\"\n",[51,156716,156717,156719,156721,156723],{"class":53,"line":61},[51,156718,147510],{"class":72},[51,156720,108],{"class":64},[51,156722,3462],{"class":175},[51,156724,156725],{"class":72},"(age)\n",[51,156727,156728,156730,156733,156735,156737],{"class":53,"line":93},[51,156729,31379],{"class":175},[51,156731,156732],{"class":72},"(age ",[51,156734,114],{"class":64},[51,156736,26082],{"class":175},[51,156738,90],{"class":72},[40,156740,156741],{},"输入得到的内容永远是字符串：",[29,156743,156745],{"className":31342,"code":156744,"language":31344,"meta":35,"style":35},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[37,156746,156747,156763],{"__ignoreMap":35},[51,156748,156749,156752,156754,156756,156758,156761],{"class":53,"line":54},[51,156750,156751],{"class":72},"num ",[51,156753,108],{"class":64},[51,156755,61569],{"class":175},[51,156757,73],{"class":72},[51,156759,156760],{"class":282},"\"请输入数字:\"",[51,156762,90],{"class":72},[51,156764,156765,156767,156769,156771,156774],{"class":53,"line":61},[51,156766,31379],{"class":175},[51,156768,73],{"class":72},[51,156770,104071],{"class":175},[51,156772,156773],{"class":72},"(num))  ",[51,156775,156776],{"class":57},"# str\n",[40,156778,156779],{},"如果要做数学运算，必须转换：",[29,156781,156783],{"className":31342,"code":156782,"language":31344,"meta":35,"style":35},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[37,156784,156785,156803],{"__ignoreMap":35},[51,156786,156787,156789,156791,156793,156795,156797,156799,156801],{"class":53,"line":54},[51,156788,156751],{"class":72},[51,156790,108],{"class":64},[51,156792,3462],{"class":175},[51,156794,73],{"class":72},[51,156796,54785],{"class":175},[51,156798,73],{"class":72},[51,156800,156760],{"class":282},[51,156802,31461],{"class":72},[51,156804,156805,156807,156809,156811,156813],{"class":53,"line":61},[51,156806,31379],{"class":175},[51,156808,46583],{"class":72},[51,156810,114],{"class":64},[51,156812,3118],{"class":175},[51,156814,90],{"class":72},[40,156816,156817],{},"常见错误：",[29,156819,156821],{"className":31342,"code":156820,"language":31344,"meta":35,"style":35},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[37,156822,156823,156836],{"__ignoreMap":35},[51,156824,156825,156827,156829,156831,156833],{"class":53,"line":54},[51,156826,65],{"class":175},[51,156828,73],{"class":72},[51,156830,156676],{"class":282},[51,156832,156625],{"class":72},[51,156834,156835],{"class":57},"# 错误\n",[51,156837,156838,156840,156842,156845,156848],{"class":53,"line":61},[51,156839,65],{"class":175},[51,156841,73],{"class":72},[51,156843,156844],{"class":282},"\"abc\"",[51,156846,156847],{"class":72},")    ",[51,156849,156835],{"class":57},[40,156851,156852],{},"正确写法：",[29,156854,156856],{"className":31342,"code":156855,"language":31344,"meta":35,"style":35},"num = float(\"3.14\")\n",[37,156857,156858],{"__ignoreMap":35},[51,156859,156860,156862,156864,156866,156868,156870],{"class":53,"line":54},[51,156861,156751],{"class":72},[51,156863,108],{"class":64},[51,156865,110761],{"class":175},[51,156867,73],{"class":72},[51,156869,156676],{"class":282},[51,156871,90],{"class":72},[14,156873,156875],{"id":156874},"_27-运算符","2.7 运算符",[1233,156877,156879],{"id":156878},"_271-算术运算符","2.7.1 算术运算符",[1393,156881,156882,156893],{},[1396,156883,156884],{},[1399,156885,156886,156889,156891],{},[1402,156887,156888],{},"运算符",[1402,156890,26833],{},[1402,156892,28456],{},[1439,156894,156895,156909,156923,156937,156951,156965,156979],{},[1399,156896,156897,156901,156904],{},[1444,156898,156899],{},[37,156900,114],{},[1444,156902,156903],{},"加法",[1444,156905,156906],{},[37,156907,156908],{},"1 + 2",[1399,156910,156911,156915,156918],{},[1444,156912,156913],{},[37,156914,1778],{},[1444,156916,156917],{},"减法",[1444,156919,156920],{},[37,156921,156922],{},"5 - 3",[1399,156924,156925,156929,156932],{},[1444,156926,156927],{},[37,156928,1702],{},[1444,156930,156931],{},"乘法",[1444,156933,156934],{},[37,156935,156936],{},"2 * 3",[1399,156938,156939,156943,156946],{},[1444,156940,156941],{},[37,156942,1830],{},[1444,156944,156945],{},"除法，结果是浮点数",[1444,156947,156948],{},[37,156949,156950],{},"5 \u002F 2",[1399,156952,156953,156957,156960],{},[1444,156954,156955],{},[37,156956,34293],{},[1444,156958,156959],{},"整除",[1444,156961,156962],{},[37,156963,156964],{},"5 \u002F\u002F 2",[1399,156966,156967,156971,156974],{},[1444,156968,156969],{},[37,156970,1577],{},[1444,156972,156973],{},"取余",[1444,156975,156976],{},[37,156977,156978],{},"5 % 2",[1399,156980,156981,156985,156988],{},[1444,156982,156983],{},[37,156984,11623],{},[1444,156986,156987],{},"幂运算",[1444,156989,156990],{},[37,156991,156992],{},"2 ** 3",[40,156994,16097],{},[29,156996,156998],{"className":31342,"code":156997,"language":31344,"meta":35,"style":35},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[37,156999,157000,157018,157035,157052],{"__ignoreMap":35},[51,157001,157002,157004,157006,157008,157011,157013,157015],{"class":53,"line":54},[51,157003,31379],{"class":175},[51,157005,73],{"class":72},[51,157007,1568],{"class":175},[51,157009,157010],{"class":64}," \u002F",[51,157012,15717],{"class":175},[51,157014,156625],{"class":72},[51,157016,157017],{"class":57},"# 2.5\n",[51,157019,157020,157022,157024,157026,157029,157031,157033],{"class":53,"line":61},[51,157021,31379],{"class":175},[51,157023,73],{"class":72},[51,157025,1568],{"class":175},[51,157027,157028],{"class":64}," \u002F\u002F",[51,157030,15717],{"class":175},[51,157032,46772],{"class":72},[51,157034,156628],{"class":57},[51,157036,157037,157039,157041,157043,157046,157048,157050],{"class":53,"line":93},[51,157038,31379],{"class":175},[51,157040,73],{"class":72},[51,157042,1568],{"class":175},[51,157044,157045],{"class":64}," %",[51,157047,15717],{"class":175},[51,157049,156625],{"class":72},[51,157051,156645],{"class":57},[51,157053,157054,157056,157058,157060,157063,157065,157067],{"class":53,"line":99},[51,157055,31379],{"class":175},[51,157057,73],{"class":72},[51,157059,1334],{"class":175},[51,157061,157062],{"class":64}," **",[51,157064,79034],{"class":175},[51,157066,46772],{"class":72},[51,157068,157069],{"class":57},"# 8\n",[1233,157071,157073],{"id":157072},"_272-赋值运算符","2.7.2 赋值运算符",[29,157075,157077],{"className":31342,"code":157076,"language":31344,"meta":35,"style":35},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[37,157078,157079,157087,157095,157103,157111],{"__ignoreMap":35},[51,157080,157081,157083,157085],{"class":53,"line":54},[51,157082,156751],{"class":72},[51,157084,108],{"class":64},[51,157086,59392],{"class":175},[51,157088,157089,157091,157093],{"class":53,"line":61},[51,157090,156751],{"class":72},[51,157092,10439],{"class":64},[51,157094,55391],{"class":175},[51,157096,157097,157099,157101],{"class":53,"line":93},[51,157098,156751],{"class":72},[51,157100,151216],{"class":64},[51,157102,48687],{"class":175},[51,157104,157105,157107,157109],{"class":53,"line":99},[51,157106,156751],{"class":72},[51,157108,138112],{"class":64},[51,157110,121000],{"class":175},[51,157112,157113,157115,157118],{"class":53,"line":120},[51,157114,156751],{"class":72},[51,157116,157117],{"class":64},"\u002F=",[51,157119,48687],{"class":175},[40,157121,157122],{},"等价关系：",[29,157124,157126],{"className":31342,"code":157125,"language":31344,"meta":35,"style":35},"num += 1\nnum = num + 1\n",[37,157127,157128,157136],{"__ignoreMap":35},[51,157129,157130,157132,157134],{"class":53,"line":54},[51,157131,156751],{"class":72},[51,157133,10439],{"class":64},[51,157135,56663],{"class":175},[51,157137,157138,157140,157142,157145,157147],{"class":53,"line":61},[51,157139,156751],{"class":72},[51,157141,108],{"class":64},[51,157143,157144],{"class":72}," num ",[51,157146,114],{"class":64},[51,157148,56663],{"class":175},[40,157150,157151,157152,101982,157155,29349],{},"Python 没有 ",[37,157153,157154],{},"num++",[37,157156,157157],{},"num--",[1233,157159,157161],{"id":157160},"_273-比较运算符","2.7.3 比较运算符",[40,157163,157164],{},"比较运算结果是布尔值。",[29,157166,157168],{"className":31342,"code":157167,"language":31344,"meta":35,"style":35},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[37,157169,157170,157184,157199,157213],{"__ignoreMap":35},[51,157171,157172,157174,157176,157178,157180,157182],{"class":53,"line":54},[51,157173,31379],{"class":175},[51,157175,73],{"class":72},[51,157177,443],{"class":175},[51,157179,27186],{"class":64},[51,157181,3228],{"class":175},[51,157183,90],{"class":72},[51,157185,157186,157188,157190,157192,157195,157197],{"class":53,"line":61},[51,157187,31379],{"class":175},[51,157189,73],{"class":72},[51,157191,443],{"class":175},[51,157193,157194],{"class":64}," >=",[51,157196,3118],{"class":175},[51,157198,90],{"class":72},[51,157200,157201,157203,157205,157207,157209,157211],{"class":53,"line":93},[51,157202,31379],{"class":175},[51,157204,73],{"class":72},[51,157206,443],{"class":175},[51,157208,102523],{"class":64},[51,157210,3163],{"class":175},[51,157212,90],{"class":72},[51,157214,157215,157217,157219,157221,157224,157226],{"class":53,"line":99},[51,157216,31379],{"class":175},[51,157218,73],{"class":72},[51,157220,443],{"class":175},[51,157222,157223],{"class":64}," !=",[51,157225,3163],{"class":175},[51,157227,90],{"class":72},[40,157229,157230,157231,157233,157234,29349],{},"注意：判断相等用 ",[37,157232,4026],{},"，赋值用 ",[37,157235,108],{},[29,157237,157239],{"className":31342,"code":157238,"language":31344,"meta":35,"style":35},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[37,157240,157241,157253],{"__ignoreMap":35},[51,157242,157243,157245,157247,157250],{"class":53,"line":54},[51,157244,147510],{"class":72},[51,157246,108],{"class":64},[51,157248,157249],{"class":175}," 18",[51,157251,157252],{"class":57},"       # 赋值\n",[51,157254,157255,157257,157259,157261],{"class":53,"line":61},[51,157256,147510],{"class":72},[51,157258,4026],{"class":64},[51,157260,157249],{"class":175},[51,157262,157263],{"class":57},"      # 判断是否相等\n",[1233,157265,157267],{"id":157266},"_274-逻辑运算符","2.7.4 逻辑运算符",[1393,157269,157270,157278],{},[1396,157271,157272],{},[1399,157273,157274,157276],{},[1402,157275,156888],{},[1402,157277,26833],{},[1439,157279,157280,157289,157298],{},[1399,157281,157282,157286],{},[1444,157283,157284],{},[37,157285,31426],{},[1444,157287,157288],{},"并且",[1399,157290,157291,157295],{},[1444,157292,157293],{},[37,157294,116054],{},[1444,157296,157297],{},"或者",[1399,157299,157300,157305],{},[1444,157301,157302],{},[37,157303,157304],{},"not",[1444,157306,157307],{},"取反",[29,157309,157311],{"className":31342,"code":157310,"language":31344,"meta":35,"style":35},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[37,157312,157313,157321,157330,157334,157349,157363],{"__ignoreMap":35},[51,157314,157315,157317,157319],{"class":53,"line":54},[51,157316,147510],{"class":72},[51,157318,108],{"class":64},[51,157320,89029],{"class":175},[51,157322,157323,157326,157328],{"class":53,"line":61},[51,157324,157325],{"class":72},"has_ticket ",[51,157327,108],{"class":64},[51,157329,154563],{"class":175},[51,157331,157332],{"class":53,"line":93},[51,157333,3480],{"emptyLinePlaceholder":1192},[51,157335,157336,157338,157340,157342,157344,157346],{"class":53,"line":99},[51,157337,31379],{"class":175},[51,157339,156732],{"class":72},[51,157341,2800],{"class":64},[51,157343,157249],{"class":175},[51,157345,121393],{"class":64},[51,157347,157348],{"class":72}," has_ticket)\n",[51,157350,157351,157353,157355,157357,157359,157361],{"class":53,"line":120},[51,157352,31379],{"class":175},[51,157354,156732],{"class":72},[51,157356,2154],{"class":64},[51,157358,157249],{"class":175},[51,157360,115165],{"class":64},[51,157362,157348],{"class":72},[51,157364,157365,157367,157369,157371],{"class":53,"line":129},[51,157366,31379],{"class":175},[51,157368,73],{"class":72},[51,157370,157304],{"class":64},[51,157372,157348],{"class":72},[14,157374,157376],{"id":157375},"_28-字符串定义","2.8 字符串定义",[40,157378,157379],{},"三种常见写法：",[29,157381,157383],{"className":31342,"code":157382,"language":31344,"meta":35,"style":35},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[37,157384,157385,157395,157404,157414],{"__ignoreMap":35},[51,157386,157387,157390,157392],{"class":53,"line":54},[51,157388,157389],{"class":72},"name1 ",[51,157391,108],{"class":64},[51,157393,157394],{"class":282}," '小明'\n",[51,157396,157397,157400,157402],{"class":53,"line":61},[51,157398,157399],{"class":72},"name2 ",[51,157401,108],{"class":64},[51,157403,150317],{"class":282},[51,157405,157406,157409,157411],{"class":53,"line":93},[51,157407,157408],{"class":72},"text ",[51,157410,108],{"class":64},[51,157412,157413],{"class":282}," \"\"\"这是多行字符串\n",[51,157415,157416],{"class":53,"line":99},[51,157417,157418],{"class":282},"可以换行\"\"\"\n",[40,157420,157421],{},"字符串中包含引号：",[29,157423,157425],{"className":31342,"code":157424,"language":31344,"meta":35,"style":35},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[37,157426,157427,157437,157447],{"__ignoreMap":35},[51,157428,157429,157432,157434],{"class":53,"line":54},[51,157430,157431],{"class":72},"msg ",[51,157433,108],{"class":64},[51,157435,157436],{"class":282}," \"他说:'你好'\"\n",[51,157438,157439,157442,157444],{"class":53,"line":61},[51,157440,157441],{"class":72},"msg2 ",[51,157443,108],{"class":64},[51,157445,157446],{"class":282}," '他说:\"你好\"'\n",[51,157448,157449,157452,157454,157457,157460,157463,157465],{"class":53,"line":93},[51,157450,157451],{"class":72},"msg3 ",[51,157453,108],{"class":64},[51,157455,157456],{"class":282}," \"他说:",[51,157458,157459],{"class":175},"\\\"",[51,157461,157462],{"class":282},"你好",[51,157464,157459],{"class":175},[51,157466,26097],{"class":282},[40,157468,157469],{},"常见转义字符：",[1393,157471,157472,157481],{},[1396,157473,157474],{},[1399,157475,157476,157479],{},[1402,157477,157478],{},"写法",[1402,157480,101664],{},[1439,157482,157483,157493,157502,157512,157521],{},[1399,157484,157485,157490],{},[1444,157486,157487],{},[37,157488,157489],{},"\\n",[1444,157491,157492],{},"换行",[1399,157494,157495,157499],{},[1444,157496,157497],{},[37,157498,2340],{},[1444,157500,157501],{},"制表符",[1399,157503,157504,157509],{},[1444,157505,157506],{},[37,157507,157508],{},"\\\\",[1444,157510,157511],{},"反斜杠",[1399,157513,157514,157518],{},[1444,157515,157516],{},[37,157517,157459],{},[1444,157519,157520],{},"双引号",[1399,157522,157523,157528],{},[1444,157524,157525],{},[37,157526,157527],{},"\\'",[1444,157529,157530],{},"单引号",[14,157532,157534],{"id":157533},"_29-字符串拼接","2.9 字符串拼接",[29,157536,157538],{"className":31342,"code":157537,"language":31344,"meta":35,"style":35},"name = \"小明\"\nprint(\"你好，\" + name)\n",[37,157539,157540,157548],{"__ignoreMap":35},[51,157541,157542,157544,157546],{"class":53,"line":54},[51,157543,147500],{"class":72},[51,157545,108],{"class":64},[51,157547,150317],{"class":282},[51,157549,157550,157552,157554,157557,157559],{"class":53,"line":61},[51,157551,31379],{"class":175},[51,157553,73],{"class":72},[51,157555,157556],{"class":282},"\"你好，\"",[51,157558,46530],{"class":64},[51,157560,157561],{"class":72}," name)\n",[40,157563,157564],{},"字符串只能和字符串拼接：",[29,157566,157568],{"className":31342,"code":157567,"language":31344,"meta":35,"style":35},"age = 18\nprint(\"年龄:\" + str(age))\n",[37,157569,157570,157578],{"__ignoreMap":35},[51,157571,157572,157574,157576],{"class":53,"line":54},[51,157573,147510],{"class":72},[51,157575,108],{"class":64},[51,157577,147515],{"class":175},[51,157579,157580,157582,157584,157586,157588,157590],{"class":53,"line":61},[51,157581,31379],{"class":175},[51,157583,73],{"class":72},[51,157585,147481],{"class":282},[51,157587,46530],{"class":64},[51,157589,74883],{"class":175},[51,157591,157592],{"class":72},"(age))\n",[40,157594,157595],{},"更推荐使用格式化字符串。",[14,157597,157599],{"id":157598},"_210-字符串格式化","2.10 字符串格式化",[1233,157601,157603],{"id":157602},"_2101-百分号格式化","2.10.1 百分号格式化",[29,157605,157607],{"className":31342,"code":157606,"language":31344,"meta":35,"style":35},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[37,157608,157609,157617,157625,157634,157638],{"__ignoreMap":35},[51,157610,157611,157613,157615],{"class":53,"line":54},[51,157612,147500],{"class":72},[51,157614,108],{"class":64},[51,157616,150317],{"class":282},[51,157618,157619,157621,157623],{"class":53,"line":61},[51,157620,147510],{"class":72},[51,157622,108],{"class":64},[51,157624,147515],{"class":175},[51,157626,157627,157629,157631],{"class":53,"line":93},[51,157628,156322],{"class":72},[51,157630,108],{"class":64},[51,157632,157633],{"class":175}," 95.5\n",[51,157635,157636],{"class":53,"line":99},[51,157637,3480],{"emptyLinePlaceholder":1192},[51,157639,157640,157642,157644,157647,157650,157653,157656,157659,157662,157664,157666],{"class":53,"line":120},[51,157641,31379],{"class":175},[51,157643,73],{"class":72},[51,157645,157646],{"class":282},"\"姓名:",[51,157648,157649],{"class":175},"%s",[51,157651,157652],{"class":282}," 年龄:",[51,157654,157655],{"class":175},"%d",[51,157657,157658],{"class":282}," 分数:",[51,157660,157661],{"class":175},"%.1f",[51,157663,1503],{"class":282},[51,157665,157045],{"class":64},[51,157667,157668],{"class":72}," (name, age, score))\n",[40,157670,157671],{},"常用占位符：",[1393,157673,157674,157683],{},[1396,157675,157676],{},[1399,157677,157678,157681],{},[1402,157679,157680],{},"占位符",[1402,157682,26833],{},[1439,157684,157685,157693,157701],{},[1399,157686,157687,157691],{},[1444,157688,157689],{},[37,157690,157649],{},[1444,157692,156188],{},[1399,157694,157695,157699],{},[1444,157696,157697],{},[37,157698,157655],{},[1444,157700,156166],{},[1399,157702,157703,157708],{},[1444,157704,157705],{},[37,157706,157707],{},"%f",[1444,157709,156177],{},[40,157711,157712],{},"精度控制：",[29,157714,157716],{"className":31342,"code":157715,"language":31344,"meta":35,"style":35},"price = 12.3456\nprint(\"%.2f\" % price)\n",[37,157717,157718,157727],{"__ignoreMap":35},[51,157719,157720,157722,157724],{"class":53,"line":54},[51,157721,147645],{"class":72},[51,157723,108],{"class":64},[51,157725,157726],{"class":175}," 12.3456\n",[51,157728,157729,157731,157733,157735,157738,157740,157742],{"class":53,"line":61},[51,157730,31379],{"class":175},[51,157732,73],{"class":72},[51,157734,1503],{"class":282},[51,157736,157737],{"class":175},"%.2f",[51,157739,1503],{"class":282},[51,157741,157045],{"class":64},[51,157743,157744],{"class":72}," price)\n",[1233,157746,157748],{"id":157747},"_2102-format方法","2.10.2 format方法",[29,157750,157752],{"className":31342,"code":157751,"language":31344,"meta":35,"style":35},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[37,157753,157754,157762,157770,157774,157793,157813],{"__ignoreMap":35},[51,157755,157756,157758,157760],{"class":53,"line":54},[51,157757,147500],{"class":72},[51,157759,108],{"class":64},[51,157761,150317],{"class":282},[51,157763,157764,157766,157768],{"class":53,"line":61},[51,157765,147510],{"class":72},[51,157767,108],{"class":64},[51,157769,147515],{"class":175},[51,157771,157772],{"class":53,"line":93},[51,157773,3480],{"emptyLinePlaceholder":1192},[51,157775,157776,157778,157780,157782,157784,157786,157788,157790],{"class":53,"line":99},[51,157777,31379],{"class":175},[51,157779,73],{"class":72},[51,157781,157646],{"class":282},[51,157783,33423],{"class":175},[51,157785,157652],{"class":282},[51,157787,33423],{"class":175},[51,157789,1503],{"class":282},[51,157791,157792],{"class":72},".format(name, age))\n",[51,157794,157795,157797,157799,157801,157804,157806,157809,157811],{"class":53,"line":120},[51,157796,31379],{"class":175},[51,157798,73],{"class":72},[51,157800,157646],{"class":282},[51,157802,157803],{"class":175},"{0}",[51,157805,157652],{"class":282},[51,157807,157808],{"class":175},"{1}",[51,157810,1503],{"class":282},[51,157812,157792],{"class":72},[51,157814,157815,157817,157819,157821,157824,157826,157829,157831,157834,157836,157838,157841,157843,157845],{"class":53,"line":129},[51,157816,31379],{"class":175},[51,157818,73],{"class":72},[51,157820,157646],{"class":282},[51,157822,157823],{"class":175},"{name}",[51,157825,157652],{"class":282},[51,157827,157828],{"class":175},"{age}",[51,157830,1503],{"class":282},[51,157832,157833],{"class":72},".format(",[51,157835,80774],{"class":78},[51,157837,108],{"class":64},[51,157839,157840],{"class":72},"name, ",[51,157842,71185],{"class":78},[51,157844,108],{"class":64},[51,157846,157847],{"class":72},"age))\n",[1233,157849,157851],{"id":157850},"_2103-f-string","2.10.3 f-string",[40,157853,157854],{},"推荐写法：",[29,157856,157858],{"className":31342,"code":157857,"language":31344,"meta":35,"style":35},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[37,157859,157860,157868,157876,157884,157888],{"__ignoreMap":35},[51,157861,157862,157864,157866],{"class":53,"line":54},[51,157863,147500],{"class":72},[51,157865,108],{"class":64},[51,157867,150317],{"class":282},[51,157869,157870,157872,157874],{"class":53,"line":61},[51,157871,147510],{"class":72},[51,157873,108],{"class":64},[51,157875,147515],{"class":175},[51,157877,157878,157880,157882],{"class":53,"line":93},[51,157879,156322],{"class":72},[51,157881,108],{"class":64},[51,157883,157633],{"class":175},[51,157885,157886],{"class":53,"line":99},[51,157887,3480],{"emptyLinePlaceholder":1192},[51,157889,157890,157892,157894,157896,157898,157900,157902,157904,157906,157908,157910,157912,157914,157916,157919,157922,157924,157926],{"class":53,"line":120},[51,157891,31379],{"class":175},[51,157893,73],{"class":72},[51,157895,1311],{"class":64},[51,157897,157646],{"class":282},[51,157899,2140],{"class":175},[51,157901,80774],{"class":72},[51,157903,2190],{"class":175},[51,157905,157652],{"class":282},[51,157907,2140],{"class":175},[51,157909,71185],{"class":72},[51,157911,2190],{"class":175},[51,157913,157658],{"class":282},[51,157915,2140],{"class":175},[51,157917,157918],{"class":72},"score",[51,157920,157921],{"class":64},":.1f",[51,157923,2190],{"class":175},[51,157925,1503],{"class":282},[51,157927,90],{"class":72},[40,157929,157930],{},"表达式也可以放进去：",[29,157932,157934],{"className":31342,"code":157933,"language":31344,"meta":35,"style":35},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[37,157935,157936,157944,157952],{"__ignoreMap":35},[51,157937,157938,157940,157942],{"class":53,"line":54},[51,157939,147645],{"class":72},[51,157941,108],{"class":64},[51,157943,147650],{"class":175},[51,157945,157946,157948,157950],{"class":53,"line":61},[51,157947,147655],{"class":72},[51,157949,108],{"class":64},[51,157951,55391],{"class":175},[51,157953,157954,157956,157958,157960,157963,157965,157967,157969,157972,157974,157977],{"class":53,"line":93},[51,157955,31379],{"class":175},[51,157957,73],{"class":72},[51,157959,1311],{"class":64},[51,157961,157962],{"class":282},"\"总价:",[51,157964,2140],{"class":175},[51,157966,147645],{"class":72},[51,157968,1702],{"class":64},[51,157970,157971],{"class":72}," count",[51,157973,2190],{"class":175},[51,157975,157976],{"class":282},"元\"",[51,157978,90],{"class":72},[14,157980,157982],{"id":157981},"_211-input输入","2.11 input输入",[40,157984,157985,157988],{},[37,157986,157987],{},"input()"," 会暂停程序，等待用户输入。",[29,157990,157992],{"className":31342,"code":157991,"language":31344,"meta":35,"style":35},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[37,157993,157994,158008],{"__ignoreMap":35},[51,157995,157996,157998,158000,158002,158004,158006],{"class":53,"line":54},[51,157997,147500],{"class":72},[51,157999,108],{"class":64},[51,158001,61569],{"class":175},[51,158003,73],{"class":72},[51,158005,153343],{"class":282},[51,158007,90],{"class":72},[51,158009,158010,158012,158014,158016,158019,158021,158023,158025,158027],{"class":53,"line":61},[51,158011,31379],{"class":175},[51,158013,73],{"class":72},[51,158015,1311],{"class":64},[51,158017,158018],{"class":282},"\"你好，",[51,158020,2140],{"class":175},[51,158022,80774],{"class":72},[51,158024,2190],{"class":175},[51,158026,1503],{"class":282},[51,158028,90],{"class":72},[40,158030,158031],{},"输入整数：",[29,158033,158035],{"className":31342,"code":158034,"language":31344,"meta":35,"style":35},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[37,158036,158037,158055],{"__ignoreMap":35},[51,158038,158039,158041,158043,158045,158047,158049,158051,158053],{"class":53,"line":54},[51,158040,147510],{"class":72},[51,158042,108],{"class":64},[51,158044,3462],{"class":175},[51,158046,73],{"class":72},[51,158048,54785],{"class":175},[51,158050,73],{"class":72},[51,158052,153358],{"class":282},[51,158054,31461],{"class":72},[51,158056,158057,158059,158061,158063,158066,158068,158070,158072,158075,158077],{"class":53,"line":61},[51,158058,31379],{"class":175},[51,158060,73],{"class":72},[51,158062,1311],{"class":64},[51,158064,158065],{"class":282},"\"明年你",[51,158067,2140],{"class":175},[51,158069,147510],{"class":72},[51,158071,114],{"class":64},[51,158073,158074],{"class":175}," 1}",[51,158076,150368],{"class":282},[51,158078,90],{"class":72},[40,158080,158081],{},"输入小数：",[29,158083,158085],{"className":31342,"code":158084,"language":31344,"meta":35,"style":35},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[37,158086,158087,158106],{"__ignoreMap":35},[51,158088,158089,158091,158093,158095,158097,158099,158101,158104],{"class":53,"line":54},[51,158090,156295],{"class":72},[51,158092,108],{"class":64},[51,158094,110761],{"class":175},[51,158096,73],{"class":72},[51,158098,54785],{"class":175},[51,158100,73],{"class":72},[51,158102,158103],{"class":282},"\"请输入身高:\"",[51,158105,31461],{"class":72},[51,158107,158108,158110,158112,158114,158117,158119,158121,158124,158126,158129],{"class":53,"line":61},[51,158109,31379],{"class":175},[51,158111,73],{"class":72},[51,158113,1311],{"class":64},[51,158115,158116],{"class":282},"\"身高:",[51,158118,2140],{"class":175},[51,158120,25945],{"class":72},[51,158122,158123],{"class":64},":.2f",[51,158125,2190],{"class":175},[51,158127,158128],{"class":282},"米\"",[51,158130,90],{"class":72},[14,158132,158134],{"id":158133},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[40,158136,124256],{},[19,158138,158139,158142,158145,158148],{},[22,158140,158141],{},"输入商品单价。",[22,158143,158144],{},"输入购买数量。",[22,158146,158147],{},"输入折扣，例如 0.8 表示八折。",[22,158149,158150],{},"输出最终金额，保留两位小数。",[40,158152,10997],{},[29,158154,158156],{"className":31342,"code":158155,"language":31344,"meta":35,"style":35},"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",[37,158157,158158,158177,158196,158216,158220,158240,158244,158267,158288,158310],{"__ignoreMap":35},[51,158159,158160,158162,158164,158166,158168,158170,158172,158175],{"class":53,"line":54},[51,158161,147645],{"class":72},[51,158163,108],{"class":64},[51,158165,110761],{"class":175},[51,158167,73],{"class":72},[51,158169,54785],{"class":175},[51,158171,73],{"class":72},[51,158173,158174],{"class":282},"\"请输入商品单价:\"",[51,158176,31461],{"class":72},[51,158178,158179,158181,158183,158185,158187,158189,158191,158194],{"class":53,"line":61},[51,158180,147655],{"class":72},[51,158182,108],{"class":64},[51,158184,3462],{"class":175},[51,158186,73],{"class":72},[51,158188,54785],{"class":175},[51,158190,73],{"class":72},[51,158192,158193],{"class":282},"\"请输入购买数量:\"",[51,158195,31461],{"class":72},[51,158197,158198,158201,158203,158205,158207,158209,158211,158214],{"class":53,"line":93},[51,158199,158200],{"class":72},"discount ",[51,158202,108],{"class":64},[51,158204,110761],{"class":175},[51,158206,73],{"class":72},[51,158208,54785],{"class":175},[51,158210,73],{"class":72},[51,158212,158213],{"class":282},"\"请输入折扣:\"",[51,158215,31461],{"class":72},[51,158217,158218],{"class":53,"line":99},[51,158219,3480],{"emptyLinePlaceholder":1192},[51,158221,158222,158225,158227,158230,158232,158235,158237],{"class":53,"line":120},[51,158223,158224],{"class":72},"total ",[51,158226,108],{"class":64},[51,158228,158229],{"class":72}," price ",[51,158231,1702],{"class":64},[51,158233,158234],{"class":72}," count ",[51,158236,1702],{"class":64},[51,158238,158239],{"class":72}," discount\n",[51,158241,158242],{"class":53,"line":129},[51,158243,3480],{"emptyLinePlaceholder":1192},[51,158245,158246,158248,158250,158252,158255,158257,158259,158261,158263,158265],{"class":53,"line":206},[51,158247,31379],{"class":175},[51,158249,73],{"class":72},[51,158251,1311],{"class":64},[51,158253,158254],{"class":282},"\"商品单价:",[51,158256,2140],{"class":175},[51,158258,80779],{"class":72},[51,158260,158123],{"class":64},[51,158262,2190],{"class":175},[51,158264,1503],{"class":282},[51,158266,90],{"class":72},[51,158268,158269,158271,158273,158275,158278,158280,158282,158284,158286],{"class":53,"line":212},[51,158270,31379],{"class":175},[51,158272,73],{"class":72},[51,158274,1311],{"class":64},[51,158276,158277],{"class":282},"\"购买数量:",[51,158279,2140],{"class":175},[51,158281,85398],{"class":72},[51,158283,2190],{"class":175},[51,158285,1503],{"class":282},[51,158287,90],{"class":72},[51,158289,158290,158292,158294,158296,158299,158301,158304,158306,158308],{"class":53,"line":227},[51,158291,31379],{"class":175},[51,158293,73],{"class":72},[51,158295,1311],{"class":64},[51,158297,158298],{"class":282},"\"折扣:",[51,158300,2140],{"class":175},[51,158302,158303],{"class":72},"discount",[51,158305,2190],{"class":175},[51,158307,1503],{"class":282},[51,158309,90],{"class":72},[51,158311,158312,158314,158316,158318,158321,158323,158326,158328,158330,158332],{"class":53,"line":370},[51,158313,31379],{"class":175},[51,158315,73],{"class":72},[51,158317,1311],{"class":64},[51,158319,158320],{"class":282},"\"应付金额:",[51,158322,2140],{"class":175},[51,158324,158325],{"class":72},"total",[51,158327,158123],{"class":64},[51,158329,2190],{"class":175},[51,158331,157976],{"class":282},[51,158333,90],{"class":72},[14,158335,158337],{"id":158336},"_213-易错点","2.13 易错点",[19,158339,158340,158345,158351,158359,158362],{},[22,158341,158342,158344],{},[37,158343,157987],{}," 的结果是字符串，做运算前要转换。",[22,158346,158347,158348,29349],{},"字符串拼接时，数字要先 ",[37,158349,158350],{},"str()",[22,158352,158353,158355,158356,158358],{},[37,158354,108],{}," 是赋值，",[37,158357,4026],{}," 是比较。",[22,158360,158361],{},"Python 没有自增自减运算符。",[22,158363,158364],{},"浮点数计算可能有精度误差：",[29,158366,158368],{"className":31342,"code":158367,"language":31344,"meta":35,"style":35},"print(0.1 + 0.2)\n",[37,158369,158370],{"__ignoreMap":35},[51,158371,158372,158374,158376,158378,158380,158383],{"class":53,"line":54},[51,158373,31379],{"class":175},[51,158375,73],{"class":72},[51,158377,87174],{"class":175},[51,158379,46530],{"class":64},[51,158381,158382],{"class":175}," 0.2",[51,158384,90],{"class":72},[40,158386,158387,158388,158391],{},"金额计算如果要求严格，可以后续学习 ",[37,158389,158390],{},"decimal"," 模块。",[14,158393,158395],{"id":158394},"_214-本章练习","2.14 本章练习",[19,158397,158398,158401,158404,158407,158410],{},[22,158399,158400],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[22,158402,158403],{},"输入圆的半径，计算面积，保留两位小数。",[22,158405,158406],{},"输入工资和奖金，计算总收入。",[22,158408,158409],{},"输入摄氏温度，转换为华氏温度。",[22,158411,158412],{},"写一个 BMI 计算程序：",[29,158414,158417],{"className":158415,"code":158416,"language":34,"meta":35},[32],"BMI = 体重kg \u002F 身高m ** 2\n",[37,158418,158416],{"__ignoreMap":35},[1179,158420,158421],{},"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":35,"searchDepth":61,"depth":61,"links":158423},[158424,158425,158426,158427,158428,158429,158430,158436,158437,158438,158443,158444,158445,158446],{"id":155985,"depth":61,"text":155986},{"id":156094,"depth":61,"text":156095},{"id":156265,"depth":61,"text":156266},{"id":156342,"depth":61,"text":156343},{"id":51695,"depth":61,"text":51696},{"id":156648,"depth":61,"text":156649},{"id":156874,"depth":61,"text":156875,"children":158431},[158432,158433,158434,158435],{"id":156878,"depth":93,"text":156879},{"id":157072,"depth":93,"text":157073},{"id":157160,"depth":93,"text":157161},{"id":157266,"depth":93,"text":157267},{"id":157375,"depth":61,"text":157376},{"id":157533,"depth":61,"text":157534},{"id":157598,"depth":61,"text":157599,"children":158439},[158440,158441,158442],{"id":157602,"depth":93,"text":157603},{"id":157747,"depth":93,"text":157748},{"id":157850,"depth":93,"text":157851},{"id":157981,"depth":61,"text":157982},{"id":158133,"depth":61,"text":158134},{"id":158336,"depth":61,"text":158337},{"id":158394,"depth":61,"text":158395},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155977,"description":24339},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158453,"title":158454,"body":158455,"description":24339,"extension":1190,"meta":160091,"navigation":1192,"path":160092,"seo":160093,"stem":160094,"__hash__":160095},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158456,"toc":160072},[158457,158460,158464,158467,158482,158485,158513,158517,158567,158569,158585,158588,158614,158617,158621,158688,158691,158707,158711,158714,158832,158835,158842,158891,158897,158901,158904,159017,159020,159024,159028,159031,159081,159085,159088,159138,159142,159145,159183,159187,159190,159236,159239,159274,159278,159283,159286,159332,159334,159401,159405,159411,159522,159531,159535,159537,159548,159550,159716,159720,159722,159736,159738,159952,159956,159975,159992,159995,160041,160045,160069],[10,158458,158454],{"id":158459},"_3-判断语句",[14,158461,158463],{"id":158462},"_31-布尔值","3.1 布尔值",[40,158465,158466],{},"判断语句依赖布尔值：",[29,158468,158470],{"className":31342,"code":158469,"language":31344,"meta":35,"style":35},"True\nFalse\n",[37,158471,158472,158477],{"__ignoreMap":35},[51,158473,158474],{"class":53,"line":54},[51,158475,158476],{"class":175},"True\n",[51,158478,158479],{"class":53,"line":61},[51,158480,158481],{"class":175},"False\n",[40,158483,158484],{},"比较表达式会产生布尔值：",[29,158486,158488],{"className":31342,"code":158487,"language":31344,"meta":35,"style":35},"age = 18\nprint(age >= 18)  # True\n",[37,158489,158490,158498],{"__ignoreMap":35},[51,158491,158492,158494,158496],{"class":53,"line":54},[51,158493,147510],{"class":72},[51,158495,108],{"class":64},[51,158497,147515],{"class":175},[51,158499,158500,158502,158504,158506,158508,158510],{"class":53,"line":61},[51,158501,31379],{"class":175},[51,158503,156732],{"class":72},[51,158505,2800],{"class":64},[51,158507,157249],{"class":175},[51,158509,46772],{"class":72},[51,158511,158512],{"class":57},"# True\n",[14,158514,158516],{"id":158515},"_32-if基础语法","3.2 if基础语法",[29,158518,158520],{"className":31342,"code":158519,"language":31344,"meta":35,"style":35},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[37,158521,158522,158540,158544,158556],{"__ignoreMap":35},[51,158523,158524,158526,158528,158530,158532,158534,158536,158538],{"class":53,"line":54},[51,158525,147510],{"class":72},[51,158527,108],{"class":64},[51,158529,3462],{"class":175},[51,158531,73],{"class":72},[51,158533,54785],{"class":175},[51,158535,73],{"class":72},[51,158537,153358],{"class":282},[51,158539,31461],{"class":72},[51,158541,158542],{"class":53,"line":61},[51,158543,3480],{"emptyLinePlaceholder":1192},[51,158545,158546,158548,158550,158552,158554],{"class":53,"line":93},[51,158547,2633],{"class":64},[51,158549,16669],{"class":72},[51,158551,2800],{"class":64},[51,158553,157249],{"class":175},[51,158555,4816],{"class":72},[51,158557,158558,158560,158562,158565],{"class":53,"line":99},[51,158559,32263],{"class":175},[51,158561,73],{"class":72},[51,158563,158564],{"class":282},"\"可以进入网吧\"",[51,158566,90],{"class":72},[40,158568,9987],{},[19,158570,158571,158576,158579,158582],{},[22,158572,158573,158575],{},[37,158574,2633],{}," 后面是条件表达式。",[22,158577,158578],{},"条件后面必须写冒号。",[22,158580,158581],{},"条件成立时执行缩进代码块。",[22,158583,158584],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[40,158586,158587],{},"错误示例：",[29,158589,158591],{"className":31342,"code":158590,"language":31344,"meta":35,"style":35},"if age >= 18\n    print(\"可以进入\")\n",[37,158592,158593,158603],{"__ignoreMap":35},[51,158594,158595,158597,158599,158601],{"class":53,"line":54},[51,158596,2633],{"class":64},[51,158598,16669],{"class":72},[51,158600,2800],{"class":64},[51,158602,147515],{"class":175},[51,158604,158605,158607,158609,158612],{"class":53,"line":61},[51,158606,32263],{"class":175},[51,158608,73],{"class":72},[51,158610,158611],{"class":282},"\"可以进入\"",[51,158613,90],{"class":72},[40,158615,158616],{},"缺少冒号。",[14,158618,158620],{"id":158619},"_33-if-else","3.3 if else",[29,158622,158624],{"className":31342,"code":158623,"language":31344,"meta":35,"style":35},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[37,158625,158626,158644,158648,158660,158671,158677],{"__ignoreMap":35},[51,158627,158628,158630,158632,158634,158636,158638,158640,158642],{"class":53,"line":54},[51,158629,147510],{"class":72},[51,158631,108],{"class":64},[51,158633,3462],{"class":175},[51,158635,73],{"class":72},[51,158637,54785],{"class":175},[51,158639,73],{"class":72},[51,158641,153358],{"class":282},[51,158643,31461],{"class":72},[51,158645,158646],{"class":53,"line":61},[51,158647,3480],{"emptyLinePlaceholder":1192},[51,158649,158650,158652,158654,158656,158658],{"class":53,"line":93},[51,158651,2633],{"class":64},[51,158653,16669],{"class":72},[51,158655,2800],{"class":64},[51,158657,157249],{"class":175},[51,158659,4816],{"class":72},[51,158661,158662,158664,158666,158669],{"class":53,"line":99},[51,158663,32263],{"class":175},[51,158665,73],{"class":72},[51,158667,158668],{"class":282},"\"成年人\"",[51,158670,90],{"class":72},[51,158672,158673,158675],{"class":53,"line":120},[51,158674,2791],{"class":64},[51,158676,4816],{"class":72},[51,158678,158679,158681,158683,158686],{"class":53,"line":129},[51,158680,32263],{"class":175},[51,158682,73],{"class":72},[51,158684,158685],{"class":282},"\"未成年人\"",[51,158687,90],{"class":72},[40,158689,158690],{},"执行逻辑：",[19,158692,158693,158699,158704],{},[22,158694,158695,158696,158698],{},"条件成立，执行 ",[37,158697,2633],{}," 代码块。",[22,158700,158701,158702,158698],{},"条件不成立，执行 ",[37,158703,2791],{},[22,158705,158706],{},"两个代码块只会执行其中一个。",[14,158708,158710],{"id":158709},"_34-if-elif-else","3.4 if elif else",[40,158712,158713],{},"多条件判断：",[29,158715,158717],{"className":31342,"code":158716,"language":31344,"meta":35,"style":35},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[37,158718,158719,158737,158741,158755,158766,158780,158791,158804,158815,158821],{"__ignoreMap":35},[51,158720,158721,158723,158725,158727,158729,158731,158733,158735],{"class":53,"line":54},[51,158722,156322],{"class":72},[51,158724,108],{"class":64},[51,158726,3462],{"class":175},[51,158728,73],{"class":72},[51,158730,54785],{"class":175},[51,158732,73],{"class":72},[51,158734,153373],{"class":282},[51,158736,31461],{"class":72},[51,158738,158739],{"class":53,"line":61},[51,158740,3480],{"emptyLinePlaceholder":1192},[51,158742,158743,158745,158748,158750,158753],{"class":53,"line":93},[51,158744,2633],{"class":64},[51,158746,158747],{"class":72}," score ",[51,158749,2800],{"class":64},[51,158751,158752],{"class":175}," 90",[51,158754,4816],{"class":72},[51,158756,158757,158759,158761,158764],{"class":53,"line":99},[51,158758,32263],{"class":175},[51,158760,73],{"class":72},[51,158762,158763],{"class":282},"\"优秀\"",[51,158765,90],{"class":72},[51,158767,158768,158771,158773,158775,158778],{"class":53,"line":120},[51,158769,158770],{"class":64},"elif",[51,158772,158747],{"class":72},[51,158774,2800],{"class":64},[51,158776,158777],{"class":175}," 80",[51,158779,4816],{"class":72},[51,158781,158782,158784,158786,158789],{"class":53,"line":129},[51,158783,32263],{"class":175},[51,158785,73],{"class":72},[51,158787,158788],{"class":282},"\"良好\"",[51,158790,90],{"class":72},[51,158792,158793,158795,158797,158799,158802],{"class":53,"line":206},[51,158794,158770],{"class":64},[51,158796,158747],{"class":72},[51,158798,2800],{"class":64},[51,158800,158801],{"class":175}," 60",[51,158803,4816],{"class":72},[51,158805,158806,158808,158810,158813],{"class":53,"line":212},[51,158807,32263],{"class":175},[51,158809,73],{"class":72},[51,158811,158812],{"class":282},"\"及格\"",[51,158814,90],{"class":72},[51,158816,158817,158819],{"class":53,"line":227},[51,158818,2791],{"class":64},[51,158820,4816],{"class":72},[51,158822,158823,158825,158827,158830],{"class":53,"line":370},[51,158824,32263],{"class":175},[51,158826,73],{"class":72},[51,158828,158829],{"class":282},"\"不及格\"",[51,158831,90],{"class":72},[40,158833,158834],{},"注意判断顺序很重要。",[40,158836,158837,158838,158841],{},"如果把 ",[37,158839,158840],{},"score >= 60"," 放在最前面：",[29,158843,158845],{"className":31342,"code":158844,"language":31344,"meta":35,"style":35},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[37,158846,158847,158859,158869,158881],{"__ignoreMap":35},[51,158848,158849,158851,158853,158855,158857],{"class":53,"line":54},[51,158850,2633],{"class":64},[51,158852,158747],{"class":72},[51,158854,2800],{"class":64},[51,158856,158801],{"class":175},[51,158858,4816],{"class":72},[51,158860,158861,158863,158865,158867],{"class":53,"line":61},[51,158862,32263],{"class":175},[51,158864,73],{"class":72},[51,158866,158812],{"class":282},[51,158868,90],{"class":72},[51,158870,158871,158873,158875,158877,158879],{"class":53,"line":93},[51,158872,158770],{"class":64},[51,158874,158747],{"class":72},[51,158876,2800],{"class":64},[51,158878,158752],{"class":175},[51,158880,4816],{"class":72},[51,158882,158883,158885,158887,158889],{"class":53,"line":99},[51,158884,32263],{"class":175},[51,158886,73],{"class":72},[51,158888,158763],{"class":282},[51,158890,90],{"class":72},[40,158892,158893,158894,158896],{},"成绩 95 会先满足 ",[37,158895,158840],{},"，后面的优秀分支就不会执行。",[14,158898,158900],{"id":158899},"_35-判断语句嵌套","3.5 判断语句嵌套",[40,158902,158903],{},"嵌套判断就是在一个判断内部再写判断。",[29,158905,158907],{"className":31342,"code":158906,"language":31344,"meta":35,"style":35},"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",[37,158908,158909,158927,158942,158946,158958,158972,158982,158989,159000,159006],{"__ignoreMap":35},[51,158910,158911,158913,158915,158917,158919,158921,158923,158925],{"class":53,"line":54},[51,158912,147510],{"class":72},[51,158914,108],{"class":64},[51,158916,3462],{"class":175},[51,158918,73],{"class":72},[51,158920,54785],{"class":175},[51,158922,73],{"class":72},[51,158924,153358],{"class":282},[51,158926,31461],{"class":72},[51,158928,158929,158931,158933,158935,158937,158940],{"class":53,"line":61},[51,158930,157325],{"class":72},[51,158932,108],{"class":64},[51,158934,61569],{"class":175},[51,158936,73],{"class":72},[51,158938,158939],{"class":282},"\"是否有票(y\u002Fn):\"",[51,158941,90],{"class":72},[51,158943,158944],{"class":53,"line":93},[51,158945,3480],{"emptyLinePlaceholder":1192},[51,158947,158948,158950,158952,158954,158956],{"class":53,"line":99},[51,158949,2633],{"class":64},[51,158951,16669],{"class":72},[51,158953,2800],{"class":64},[51,158955,157249],{"class":175},[51,158957,4816],{"class":72},[51,158959,158960,158962,158965,158967,158970],{"class":53,"line":120},[51,158961,4178],{"class":64},[51,158963,158964],{"class":72}," has_ticket ",[51,158966,4026],{"class":64},[51,158968,158969],{"class":282}," \"y\"",[51,158971,4816],{"class":72},[51,158973,158974,158976,158978,158980],{"class":53,"line":129},[51,158975,33415],{"class":175},[51,158977,73],{"class":72},[51,158979,158611],{"class":282},[51,158981,90],{"class":72},[51,158983,158984,158987],{"class":53,"line":206},[51,158985,158986],{"class":64},"    else",[51,158988,4816],{"class":72},[51,158990,158991,158993,158995,158998],{"class":53,"line":212},[51,158992,33415],{"class":175},[51,158994,73],{"class":72},[51,158996,158997],{"class":282},"\"请先买票\"",[51,158999,90],{"class":72},[51,159001,159002,159004],{"class":53,"line":227},[51,159003,2791],{"class":64},[51,159005,4816],{"class":72},[51,159007,159008,159010,159012,159015],{"class":53,"line":370},[51,159009,32263],{"class":175},[51,159011,73],{"class":72},[51,159013,159014],{"class":282},"\"未成年人禁止进入\"",[51,159016,90],{"class":72},[40,159018,159019],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159021,159023],{"id":159022},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[1233,159025,159027],{"id":159026},"_361-and","3.6.1 and",[40,159029,159030],{},"两个条件都成立才成立。",[29,159032,159034],{"className":31342,"code":159033,"language":31344,"meta":35,"style":35},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[37,159035,159036,159044,159052,159056,159071],{"__ignoreMap":35},[51,159037,159038,159040,159042],{"class":53,"line":54},[51,159039,147510],{"class":72},[51,159041,108],{"class":64},[51,159043,89029],{"class":175},[51,159045,159046,159048,159050],{"class":53,"line":61},[51,159047,157325],{"class":72},[51,159049,108],{"class":64},[51,159051,154563],{"class":175},[51,159053,159054],{"class":53,"line":93},[51,159055,3480],{"emptyLinePlaceholder":1192},[51,159057,159058,159060,159062,159064,159066,159068],{"class":53,"line":99},[51,159059,2633],{"class":64},[51,159061,16669],{"class":72},[51,159063,2800],{"class":64},[51,159065,157249],{"class":175},[51,159067,121393],{"class":64},[51,159069,159070],{"class":72}," has_ticket:\n",[51,159072,159073,159075,159077,159079],{"class":53,"line":120},[51,159074,32263],{"class":175},[51,159076,73],{"class":72},[51,159078,158611],{"class":282},[51,159080,90],{"class":72},[1233,159082,159084],{"id":159083},"_362-or","3.6.2 or",[40,159086,159087],{},"只要一个条件成立就成立。",[29,159089,159091],{"className":31342,"code":159090,"language":31344,"meta":35,"style":35},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[37,159092,159093,159102,159111,159115,159127],{"__ignoreMap":35},[51,159094,159095,159098,159100],{"class":53,"line":54},[51,159096,159097],{"class":72},"is_vip ",[51,159099,108],{"class":64},[51,159101,126771],{"class":175},[51,159103,159104,159107,159109],{"class":53,"line":61},[51,159105,159106],{"class":72},"coupon ",[51,159108,108],{"class":64},[51,159110,154563],{"class":175},[51,159112,159113],{"class":53,"line":93},[51,159114,3480],{"emptyLinePlaceholder":1192},[51,159116,159117,159119,159122,159124],{"class":53,"line":99},[51,159118,2633],{"class":64},[51,159120,159121],{"class":72}," is_vip ",[51,159123,116054],{"class":64},[51,159125,159126],{"class":72}," coupon:\n",[51,159128,159129,159131,159133,159136],{"class":53,"line":120},[51,159130,32263],{"class":175},[51,159132,73],{"class":72},[51,159134,159135],{"class":282},"\"可以享受优惠\"",[51,159137,90],{"class":72},[1233,159139,159141],{"id":159140},"_363-not","3.6.3 not",[40,159143,159144],{},"取反。",[29,159146,159148],{"className":31342,"code":159147,"language":31344,"meta":35,"style":35},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[37,159149,159150,159159,159163,159172],{"__ignoreMap":35},[51,159151,159152,159155,159157],{"class":53,"line":54},[51,159153,159154],{"class":72},"is_closed ",[51,159156,108],{"class":64},[51,159158,126771],{"class":175},[51,159160,159161],{"class":53,"line":61},[51,159162,3480],{"emptyLinePlaceholder":1192},[51,159164,159165,159167,159169],{"class":53,"line":93},[51,159166,2633],{"class":64},[51,159168,39894],{"class":64},[51,159170,159171],{"class":72}," is_closed:\n",[51,159173,159174,159176,159178,159181],{"class":53,"line":99},[51,159175,32263],{"class":175},[51,159177,73],{"class":72},[51,159179,159180],{"class":282},"\"店铺营业中\"",[51,159182,90],{"class":72},[14,159184,159186],{"id":159185},"_37-链式比较","3.7 链式比较",[40,159188,159189],{},"Python 支持链式比较：",[29,159191,159193],{"className":31342,"code":159192,"language":31344,"meta":35,"style":35},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[37,159194,159195,159204,159208,159225],{"__ignoreMap":35},[51,159196,159197,159199,159201],{"class":53,"line":54},[51,159198,156322],{"class":72},[51,159200,108],{"class":64},[51,159202,159203],{"class":175}," 85\n",[51,159205,159206],{"class":53,"line":61},[51,159207,3480],{"emptyLinePlaceholder":1192},[51,159209,159210,159212,159214,159217,159219,159221,159223],{"class":53,"line":93},[51,159211,2633],{"class":64},[51,159213,5169],{"class":175},[51,159215,159216],{"class":64}," \u003C=",[51,159218,158747],{"class":72},[51,159220,2687],{"class":64},[51,159222,661],{"class":175},[51,159224,4816],{"class":72},[51,159226,159227,159229,159231,159234],{"class":53,"line":99},[51,159228,32263],{"class":175},[51,159230,73],{"class":72},[51,159232,159233],{"class":282},"\"成绩合法\"",[51,159235,90],{"class":72},[40,159237,159238],{},"等价于：",[29,159240,159242],{"className":31342,"code":159241,"language":31344,"meta":35,"style":35},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[37,159243,159244,159264],{"__ignoreMap":35},[51,159245,159246,159248,159250,159252,159254,159256,159258,159260,159262],{"class":53,"line":54},[51,159247,2633],{"class":64},[51,159249,158747],{"class":72},[51,159251,2800],{"class":64},[51,159253,5169],{"class":175},[51,159255,121393],{"class":64},[51,159257,158747],{"class":72},[51,159259,2687],{"class":64},[51,159261,661],{"class":175},[51,159263,4816],{"class":72},[51,159265,159266,159268,159270,159272],{"class":53,"line":61},[51,159267,32263],{"class":175},[51,159269,73],{"class":72},[51,159271,159233],{"class":282},[51,159273,90],{"class":72},[14,159275,159277],{"id":159276},"_38-真值和假值","3.8 真值和假值",[40,159279,117431,159280,159282],{},[37,159281,2633],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[40,159284,159285],{},"假值：",[29,159287,159289],{"className":31342,"code":159288,"language":31344,"meta":35,"style":35},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[37,159290,159291,159295,159300,159304,159308,159313,159317,159321,159326],{"__ignoreMap":35},[51,159292,159293],{"class":53,"line":54},[51,159294,158481],{"class":175},[51,159296,159297],{"class":53,"line":61},[51,159298,159299],{"class":175},"None\n",[51,159301,159302],{"class":53,"line":93},[51,159303,4162],{"class":175},[51,159305,159306],{"class":53,"line":99},[51,159307,33306],{"class":175},[51,159309,159310],{"class":53,"line":120},[51,159311,159312],{"class":282},"\"\"\n",[51,159314,159315],{"class":53,"line":129},[51,159316,33321],{"class":72},[51,159318,159319],{"class":53,"line":206},[51,159320,154],{"class":72},[51,159322,159323],{"class":53,"line":212},[51,159324,159325],{"class":72},"{}\n",[51,159327,159328,159330],{"class":53,"line":227},[51,159329,156254],{"class":175},[51,159331,154],{"class":72},[40,159333,16097],{},[29,159335,159337],{"className":31342,"code":159336,"language":31344,"meta":35,"style":35},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[37,159338,159339,159353,159357,159364,159384,159390],{"__ignoreMap":35},[51,159340,159341,159343,159345,159347,159349,159351],{"class":53,"line":54},[51,159342,147500],{"class":72},[51,159344,108],{"class":64},[51,159346,61569],{"class":175},[51,159348,73],{"class":72},[51,159350,153343],{"class":282},[51,159352,90],{"class":72},[51,159354,159355],{"class":53,"line":61},[51,159356,3480],{"emptyLinePlaceholder":1192},[51,159358,159359,159361],{"class":53,"line":93},[51,159360,2633],{"class":64},[51,159362,159363],{"class":72}," name:\n",[51,159365,159366,159368,159370,159372,159374,159376,159378,159380,159382],{"class":53,"line":99},[51,159367,32263],{"class":175},[51,159369,73],{"class":72},[51,159371,1311],{"class":64},[51,159373,158018],{"class":282},[51,159375,2140],{"class":175},[51,159377,80774],{"class":72},[51,159379,2190],{"class":175},[51,159381,1503],{"class":282},[51,159383,90],{"class":72},[51,159385,159386,159388],{"class":53,"line":120},[51,159387,2791],{"class":64},[51,159389,4816],{"class":72},[51,159391,159392,159394,159396,159399],{"class":53,"line":129},[51,159393,32263],{"class":175},[51,159395,73],{"class":72},[51,159397,159398],{"class":282},"\"姓名不能为空\"",[51,159400,90],{"class":72},[14,159402,159404],{"id":159403},"_39-match语句","3.9 match语句",[40,159406,159407,159408,159410],{},"Python 3.10 开始支持 ",[37,159409,72229],{},"。它适合处理固定选项。",[29,159412,159414],{"className":31342,"code":159413,"language":31344,"meta":35,"style":35},"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",[37,159415,159416,159432,159436,159443,159453,159464,159473,159484,159493,159504,159511],{"__ignoreMap":35},[51,159417,159418,159421,159423,159425,159427,159430],{"class":53,"line":54},[51,159419,159420],{"class":72},"command ",[51,159422,108],{"class":64},[51,159424,61569],{"class":175},[51,159426,73],{"class":72},[51,159428,159429],{"class":282},"\"请输入命令:\"",[51,159431,90],{"class":72},[51,159433,159434],{"class":53,"line":61},[51,159435,3480],{"emptyLinePlaceholder":1192},[51,159437,159438,159440],{"class":53,"line":93},[51,159439,72229],{"class":64},[51,159441,159442],{"class":72}," command:\n",[51,159444,159445,159448,159451],{"class":53,"line":99},[51,159446,159447],{"class":64},"    case",[51,159449,159450],{"class":282}," \"start\"",[51,159452,4816],{"class":72},[51,159454,159455,159457,159459,159462],{"class":53,"line":120},[51,159456,33415],{"class":175},[51,159458,73],{"class":72},[51,159460,159461],{"class":282},"\"启动\"",[51,159463,90],{"class":72},[51,159465,159466,159468,159471],{"class":53,"line":129},[51,159467,159447],{"class":64},[51,159469,159470],{"class":282}," \"stop\"",[51,159472,4816],{"class":72},[51,159474,159475,159477,159479,159482],{"class":53,"line":206},[51,159476,33415],{"class":175},[51,159478,73],{"class":72},[51,159480,159481],{"class":282},"\"停止\"",[51,159483,90],{"class":72},[51,159485,159486,159488,159491],{"class":53,"line":212},[51,159487,159447],{"class":64},[51,159489,159490],{"class":282}," \"restart\"",[51,159492,4816],{"class":72},[51,159494,159495,159497,159499,159502],{"class":53,"line":227},[51,159496,33415],{"class":175},[51,159498,73],{"class":72},[51,159500,159501],{"class":282},"\"重启\"",[51,159503,90],{"class":72},[51,159505,159506,159508],{"class":53,"line":370},[51,159507,159447],{"class":64},[51,159509,159510],{"class":72}," _:\n",[51,159512,159513,159515,159517,159520],{"class":53,"line":387},[51,159514,33415],{"class":175},[51,159516,73],{"class":72},[51,159518,159519],{"class":282},"\"未知命令\"",[51,159521,90],{"class":72},[40,159523,159524,159525,159527,159528,159530],{},"入门阶段掌握 ",[37,159526,155622],{}," 更重要，",[37,159529,72229],{}," 可以作为补充。",[14,159532,159534],{"id":159533},"_310-小案例成绩等级","3.10 小案例：成绩等级",[40,159536,124256],{},[19,159538,159539,159542,159545],{},[22,159540,159541],{},"输入成绩。",[22,159543,159544],{},"判断成绩是否合法。",[22,159546,159547],{},"输出等级。",[40,159549,10997],{},[29,159551,159553],{"className":31342,"code":159552,"language":31344,"meta":35,"style":35},"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",[37,159554,159555,159573,159577,159595,159606,159618,159629,159641,159652,159665,159676,159688,159699,159705],{"__ignoreMap":35},[51,159556,159557,159559,159561,159563,159565,159567,159569,159571],{"class":53,"line":54},[51,159558,156322],{"class":72},[51,159560,108],{"class":64},[51,159562,110761],{"class":175},[51,159564,73],{"class":72},[51,159566,54785],{"class":175},[51,159568,73],{"class":72},[51,159570,153373],{"class":282},[51,159572,31461],{"class":72},[51,159574,159575],{"class":53,"line":61},[51,159576,3480],{"emptyLinePlaceholder":1192},[51,159578,159579,159581,159583,159585,159587,159589,159591,159593],{"class":53,"line":93},[51,159580,2633],{"class":64},[51,159582,39894],{"class":64},[51,159584,5169],{"class":175},[51,159586,159216],{"class":64},[51,159588,158747],{"class":72},[51,159590,2687],{"class":64},[51,159592,661],{"class":175},[51,159594,4816],{"class":72},[51,159596,159597,159599,159601,159604],{"class":53,"line":99},[51,159598,32263],{"class":175},[51,159600,73],{"class":72},[51,159602,159603],{"class":282},"\"成绩不合法\"",[51,159605,90],{"class":72},[51,159607,159608,159610,159612,159614,159616],{"class":53,"line":120},[51,159609,158770],{"class":64},[51,159611,158747],{"class":72},[51,159613,2800],{"class":64},[51,159615,158752],{"class":175},[51,159617,4816],{"class":72},[51,159619,159620,159622,159624,159627],{"class":53,"line":129},[51,159621,32263],{"class":175},[51,159623,73],{"class":72},[51,159625,159626],{"class":282},"\"等级:A\"",[51,159628,90],{"class":72},[51,159630,159631,159633,159635,159637,159639],{"class":53,"line":206},[51,159632,158770],{"class":64},[51,159634,158747],{"class":72},[51,159636,2800],{"class":64},[51,159638,158777],{"class":175},[51,159640,4816],{"class":72},[51,159642,159643,159645,159647,159650],{"class":53,"line":212},[51,159644,32263],{"class":175},[51,159646,73],{"class":72},[51,159648,159649],{"class":282},"\"等级:B\"",[51,159651,90],{"class":72},[51,159653,159654,159656,159658,159660,159663],{"class":53,"line":227},[51,159655,158770],{"class":64},[51,159657,158747],{"class":72},[51,159659,2800],{"class":64},[51,159661,159662],{"class":175}," 70",[51,159664,4816],{"class":72},[51,159666,159667,159669,159671,159674],{"class":53,"line":370},[51,159668,32263],{"class":175},[51,159670,73],{"class":72},[51,159672,159673],{"class":282},"\"等级:C\"",[51,159675,90],{"class":72},[51,159677,159678,159680,159682,159684,159686],{"class":53,"line":387},[51,159679,158770],{"class":64},[51,159681,158747],{"class":72},[51,159683,2800],{"class":64},[51,159685,158801],{"class":175},[51,159687,4816],{"class":72},[51,159689,159690,159692,159694,159697],{"class":53,"line":404},[51,159691,32263],{"class":175},[51,159693,73],{"class":72},[51,159695,159696],{"class":282},"\"等级:D\"",[51,159698,90],{"class":72},[51,159700,159701,159703],{"class":53,"line":415},[51,159702,2791],{"class":64},[51,159704,4816],{"class":72},[51,159706,159707,159709,159711,159714],{"class":53,"line":420},[51,159708,32263],{"class":175},[51,159710,73],{"class":72},[51,159712,159713],{"class":282},"\"等级:E\"",[51,159715,90],{"class":72},[14,159717,159719],{"id":159718},"_311-小案例会员折扣","3.11 小案例：会员折扣",[40,159721,124256],{},[19,159723,159724,159727,159730,159733],{},[22,159725,159726],{},"输入消费金额。",[22,159728,159729],{},"输入会员等级，普通、银卡、金卡。",[22,159731,159732],{},"普通不打折，银卡 9 折，金卡 8 折。",[22,159734,159735],{},"满 500 再减 50。",[40,159737,10997],{},[29,159739,159741],{"className":31342,"code":159740,"language":31344,"meta":35,"style":35},"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",[37,159742,159743,159763,159779,159783,159791,159795,159809,159819,159832,159841,159854,159862,159868,159879,159883,159897,159901,159915,159925,159929],{"__ignoreMap":35},[51,159744,159745,159748,159750,159752,159754,159756,159758,159761],{"class":53,"line":54},[51,159746,159747],{"class":72},"amount ",[51,159749,108],{"class":64},[51,159751,110761],{"class":175},[51,159753,73],{"class":72},[51,159755,54785],{"class":175},[51,159757,73],{"class":72},[51,159759,159760],{"class":282},"\"请输入消费金额:\"",[51,159762,31461],{"class":72},[51,159764,159765,159768,159770,159772,159774,159777],{"class":53,"line":61},[51,159766,159767],{"class":72},"level ",[51,159769,108],{"class":64},[51,159771,61569],{"class":175},[51,159773,73],{"class":72},[51,159775,159776],{"class":282},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[51,159778,90],{"class":72},[51,159780,159781],{"class":53,"line":93},[51,159782,3480],{"emptyLinePlaceholder":1192},[51,159784,159785,159787,159789],{"class":53,"line":99},[51,159786,158200],{"class":72},[51,159788,108],{"class":64},[51,159790,56663],{"class":175},[51,159792,159793],{"class":53,"line":120},[51,159794,3480],{"emptyLinePlaceholder":1192},[51,159796,159797,159799,159802,159804,159807],{"class":53,"line":129},[51,159798,2633],{"class":64},[51,159800,159801],{"class":72}," level ",[51,159803,4026],{"class":64},[51,159805,159806],{"class":282}," \"银卡\"",[51,159808,4816],{"class":72},[51,159810,159811,159814,159816],{"class":53,"line":206},[51,159812,159813],{"class":72},"    discount ",[51,159815,108],{"class":64},[51,159817,159818],{"class":175}," 0.9\n",[51,159820,159821,159823,159825,159827,159830],{"class":53,"line":212},[51,159822,158770],{"class":64},[51,159824,159801],{"class":72},[51,159826,4026],{"class":64},[51,159828,159829],{"class":282}," \"金卡\"",[51,159831,4816],{"class":72},[51,159833,159834,159836,159838],{"class":53,"line":227},[51,159835,159813],{"class":72},[51,159837,108],{"class":64},[51,159839,159840],{"class":175}," 0.8\n",[51,159842,159843,159845,159847,159849,159852],{"class":53,"line":370},[51,159844,158770],{"class":64},[51,159846,159801],{"class":72},[51,159848,4026],{"class":64},[51,159850,159851],{"class":282}," \"普通\"",[51,159853,4816],{"class":72},[51,159855,159856,159858,159860],{"class":53,"line":387},[51,159857,159813],{"class":72},[51,159859,108],{"class":64},[51,159861,56663],{"class":175},[51,159863,159864,159866],{"class":53,"line":404},[51,159865,2791],{"class":64},[51,159867,4816],{"class":72},[51,159869,159870,159872,159874,159877],{"class":53,"line":415},[51,159871,32263],{"class":175},[51,159873,73],{"class":72},[51,159875,159876],{"class":282},"\"会员等级输入错误，按普通会员计算\"",[51,159878,90],{"class":72},[51,159880,159881],{"class":53,"line":420},[51,159882,3480],{"emptyLinePlaceholder":1192},[51,159884,159885,159888,159890,159893,159895],{"class":53,"line":429},[51,159886,159887],{"class":72},"pay ",[51,159889,108],{"class":64},[51,159891,159892],{"class":72}," amount ",[51,159894,1702],{"class":64},[51,159896,158239],{"class":72},[51,159898,159899],{"class":53,"line":434},[51,159900,3480],{"emptyLinePlaceholder":1192},[51,159902,159903,159905,159908,159910,159913],{"class":53,"line":448},[51,159904,2633],{"class":64},[51,159906,159907],{"class":72}," pay ",[51,159909,2800],{"class":64},[51,159911,159912],{"class":175}," 500",[51,159914,4816],{"class":72},[51,159916,159917,159920,159922],{"class":53,"line":462},[51,159918,159919],{"class":72},"    pay ",[51,159921,151216],{"class":64},[51,159923,159924],{"class":175}," 50\n",[51,159926,159927],{"class":53,"line":470},[51,159928,3480],{"emptyLinePlaceholder":1192},[51,159930,159931,159933,159935,159937,159939,159941,159944,159946,159948,159950],{"class":53,"line":2783},[51,159932,31379],{"class":175},[51,159934,73],{"class":72},[51,159936,1311],{"class":64},[51,159938,158320],{"class":282},[51,159940,2140],{"class":175},[51,159942,159943],{"class":72},"pay",[51,159945,158123],{"class":64},[51,159947,2190],{"class":175},[51,159949,157976],{"class":282},[51,159951,90],{"class":72},[14,159953,159955],{"id":159954},"_312-易错点","3.12 易错点",[19,159957,159958,159961,159964,159967,159972],{},[22,159959,159960],{},"冒号不能漏。",[22,159962,159963],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[22,159965,159966],{},"多分支判断要注意顺序。",[22,159968,159969,159970,29349],{},"判断相等用 ",[37,159971,4026],{},[22,159973,159974],{},"字符串比较区分大小写：",[29,159976,159978],{"className":31342,"code":159977,"language":31344,"meta":35,"style":35},"\"Y\" == \"y\"  # False\n",[37,159979,159980],{"__ignoreMap":35},[51,159981,159982,159985,159987,159989],{"class":53,"line":54},[51,159983,159984],{"class":282},"\"Y\"",[51,159986,102523],{"class":64},[51,159988,158969],{"class":282},[51,159990,159991],{"class":57},"  # False\n",[40,159993,159994],{},"可转换后再判断：",[29,159996,159998],{"className":31342,"code":159997,"language":31344,"meta":35,"style":35},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[37,159999,160000,160017,160030],{"__ignoreMap":35},[51,160001,160002,160005,160007,160009,160011,160014],{"class":53,"line":54},[51,160003,160004],{"class":72},"answer ",[51,160006,108],{"class":64},[51,160008,61569],{"class":175},[51,160010,73],{"class":72},[51,160012,160013],{"class":282},"\"是否继续(y\u002Fn):\"",[51,160015,160016],{"class":72},").lower()\n",[51,160018,160019,160021,160024,160026,160028],{"class":53,"line":61},[51,160020,2633],{"class":64},[51,160022,160023],{"class":72}," answer ",[51,160025,4026],{"class":64},[51,160027,158969],{"class":282},[51,160029,4816],{"class":72},[51,160031,160032,160034,160036,160039],{"class":53,"line":93},[51,160033,32263],{"class":175},[51,160035,73],{"class":72},[51,160037,160038],{"class":282},"\"继续\"",[51,160040,90],{"class":72},[14,160042,160044],{"id":160043},"_313-本章练习","3.13 本章练习",[19,160046,160047,160050,160053,160056,160066],{},[22,160048,160049],{},"输入年龄，判断是否成年。",[22,160051,160052],{},"输入年份，判断是否为闰年。",[22,160054,160055],{},"输入三个数字，输出最大值。",[22,160057,160058,160059,160062,160063,160065],{},"写登录判断：用户名是 ",[37,160060,160061],{},"admin"," 且密码是 ",[37,160064,16046],{}," 才登录成功。",[22,160067,160068],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1179,160070,160071],{},"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":35,"searchDepth":61,"depth":61,"links":160073},[160074,160075,160076,160077,160078,160079,160084,160085,160086,160087,160088,160089,160090],{"id":158462,"depth":61,"text":158463},{"id":158515,"depth":61,"text":158516},{"id":158619,"depth":61,"text":158620},{"id":158709,"depth":61,"text":158710},{"id":158899,"depth":61,"text":158900},{"id":159022,"depth":61,"text":159023,"children":160080},[160081,160082,160083],{"id":159026,"depth":93,"text":159027},{"id":159083,"depth":93,"text":159084},{"id":159140,"depth":93,"text":159141},{"id":159185,"depth":61,"text":159186},{"id":159276,"depth":61,"text":159277},{"id":159403,"depth":61,"text":159404},{"id":159533,"depth":61,"text":159534},{"id":159718,"depth":61,"text":159719},{"id":159954,"depth":61,"text":159955},{"id":160043,"depth":61,"text":160044},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158454,"description":24339},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160097,"title":160098,"body":160099,"description":24339,"extension":1190,"meta":161868,"navigation":1192,"path":161869,"seo":161870,"stem":161871,"__hash__":161872},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160100,"toc":161848},[160101,160104,160108,160114,160117,160134,160138,160140,160157,160159,160204,160206,160223,160227,160230,160296,160299,160317,160321,160482,160491,160495,160499,160504,160551,160553,160559,160563,160568,160615,160617,160623,160627,160632,160668,160671,160718,160722,160728,160786,160791,160822,160827,160831,160886,160889,160961,160964,161023,161027,161030,161105,161108,161112,161218,161221,161247,161251,161263,161332,161335,161427,161431,161433,161444,161446,161576,161580,161782,161790,161794,161824,161828,161845],[10,160102,160098],{"id":160103},"_4-循环语句",[14,160105,160107],{"id":160106},"_41-为什么需要循环","4.1 为什么需要循环",[40,160109,160110,160111,160113],{},"如果要输出 1 到 100，不应该写 100 行 ",[37,160112,147436],{},"，而应该用循环。",[40,160115,160116],{},"循环适合处理重复任务：",[19,160118,160119,160122,160125,160128,160131],{},[22,160120,160121],{},"重复输出。",[22,160123,160124],{},"重复输入。",[22,160126,160127],{},"遍历数据。",[22,160129,160130],{},"持续执行菜单。",[22,160132,160133],{},"批量处理文件或数据。",[14,160135,160137],{"id":160136},"_42-while循环","4.2 while循环",[40,160139,27],{},[29,160141,160143],{"className":31342,"code":160142,"language":31344,"meta":35,"style":35},"while 条件:\n    循环体\n",[37,160144,160145,160152],{"__ignoreMap":35},[51,160146,160147,160149],{"class":53,"line":54},[51,160148,109627],{"class":64},[51,160150,160151],{"class":72}," 条件:\n",[51,160153,160154],{"class":53,"line":61},[51,160155,160156],{"class":72},"    循环体\n",[40,160158,16097],{},[29,160160,160162],{"className":31342,"code":160161,"language":31344,"meta":35,"style":35},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[37,160163,160164,160172,160176,160188,160195],{"__ignoreMap":35},[51,160165,160166,160168,160170],{"class":53,"line":54},[51,160167,101112],{"class":72},[51,160169,108],{"class":64},[51,160171,56663],{"class":175},[51,160173,160174],{"class":53,"line":61},[51,160175,3480],{"emptyLinePlaceholder":1192},[51,160177,160178,160180,160182,160184,160186],{"class":53,"line":93},[51,160179,109627],{"class":64},[51,160181,10400],{"class":72},[51,160183,2687],{"class":64},[51,160185,3228],{"class":175},[51,160187,4816],{"class":72},[51,160189,160190,160192],{"class":53,"line":99},[51,160191,32263],{"class":175},[51,160193,160194],{"class":72},"(i)\n",[51,160196,160197,160200,160202],{"class":53,"line":120},[51,160198,160199],{"class":72},"    i ",[51,160201,10439],{"class":64},[51,160203,56663],{"class":175},[40,160205,81893],{},[19,160207,160208,160214,160217,160220],{},[22,160209,160210,160211,29349],{},"判断条件 ",[37,160212,160213],{},"i \u003C= 5",[22,160215,160216],{},"条件成立，执行循环体。",[22,160218,160219],{},"执行完后回到条件判断。",[22,160221,160222],{},"条件不成立，退出循环。",[14,160224,160226],{"id":160225},"_43-while累加","4.3 while累加",[40,160228,160229],{},"计算 1 到 100 的和：",[29,160231,160233],{"className":31342,"code":160232,"language":31344,"meta":35,"style":35},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[37,160234,160235,160243,160251,160255,160267,160277,160285,160289],{"__ignoreMap":35},[51,160236,160237,160239,160241],{"class":53,"line":54},[51,160238,101112],{"class":72},[51,160240,108],{"class":64},[51,160242,56663],{"class":175},[51,160244,160245,160247,160249],{"class":53,"line":61},[51,160246,158224],{"class":72},[51,160248,108],{"class":64},[51,160250,48297],{"class":175},[51,160252,160253],{"class":53,"line":93},[51,160254,3480],{"emptyLinePlaceholder":1192},[51,160256,160257,160259,160261,160263,160265],{"class":53,"line":99},[51,160258,109627],{"class":64},[51,160260,10400],{"class":72},[51,160262,2687],{"class":64},[51,160264,661],{"class":175},[51,160266,4816],{"class":72},[51,160268,160269,160272,160274],{"class":53,"line":120},[51,160270,160271],{"class":72},"    total ",[51,160273,10439],{"class":64},[51,160275,160276],{"class":72}," i\n",[51,160278,160279,160281,160283],{"class":53,"line":129},[51,160280,160199],{"class":72},[51,160282,10439],{"class":64},[51,160284,56663],{"class":175},[51,160286,160287],{"class":53,"line":206},[51,160288,3480],{"emptyLinePlaceholder":1192},[51,160290,160291,160293],{"class":53,"line":212},[51,160292,31379],{"class":175},[51,160294,160295],{"class":72},"(total)\n",[40,160297,160298],{},"核心思想：",[19,160300,160301,160306,160311],{},[22,160302,160303,160305],{},[37,160304,1689],{}," 控制循环次数。",[22,160307,160308,160310],{},[37,160309,158325],{}," 保存累加结果。",[22,160312,160313,160314,160316],{},"每轮循环都要更新 ",[37,160315,1689],{},"，否则可能死循环。",[14,160318,160320],{"id":160319},"_44-while猜数字","4.4 while猜数字",[29,160322,160324],{"className":31342,"code":160323,"language":31344,"meta":35,"style":35},"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",[37,160325,160326,160332,160336,160353,160361,160365,160373,160393,160402,160406,160418,160429,160439,160450,160456,160478],{"__ignoreMap":35},[51,160327,160328,160330],{"class":53,"line":54},[51,160329,31356],{"class":64},[51,160331,46292],{"class":72},[51,160333,160334],{"class":53,"line":61},[51,160335,3480],{"emptyLinePlaceholder":1192},[51,160337,160338,160340,160342,160345,160347,160349,160351],{"class":53,"line":93},[51,160339,160004],{"class":72},[51,160341,108],{"class":64},[51,160343,160344],{"class":72}," random.randint(",[51,160346,791],{"class":175},[51,160348,13397],{"class":72},[51,160350,612],{"class":175},[51,160352,90],{"class":72},[51,160354,160355,160357,160359],{"class":53,"line":99},[51,160356,147655],{"class":72},[51,160358,108],{"class":64},[51,160360,48297],{"class":175},[51,160362,160363],{"class":53,"line":120},[51,160364,3480],{"emptyLinePlaceholder":1192},[51,160366,160367,160369,160371],{"class":53,"line":129},[51,160368,109627],{"class":64},[51,160370,96256],{"class":175},[51,160372,4816],{"class":72},[51,160374,160375,160378,160380,160382,160384,160386,160388,160391],{"class":53,"line":206},[51,160376,160377],{"class":72},"    guess ",[51,160379,108],{"class":64},[51,160381,3462],{"class":175},[51,160383,73],{"class":72},[51,160385,54785],{"class":175},[51,160387,73],{"class":72},[51,160389,160390],{"class":282},"\"请输入1到100之间的数字:\"",[51,160392,31461],{"class":72},[51,160394,160395,160398,160400],{"class":53,"line":212},[51,160396,160397],{"class":72},"    count ",[51,160399,10439],{"class":64},[51,160401,56663],{"class":175},[51,160403,160404],{"class":53,"line":227},[51,160405,3480],{"emptyLinePlaceholder":1192},[51,160407,160408,160410,160413,160415],{"class":53,"line":370},[51,160409,4178],{"class":64},[51,160411,160412],{"class":72}," guess ",[51,160414,972],{"class":64},[51,160416,160417],{"class":72}," answer:\n",[51,160419,160420,160422,160424,160427],{"class":53,"line":387},[51,160421,33415],{"class":175},[51,160423,73],{"class":72},[51,160425,160426],{"class":282},"\"猜大了\"",[51,160428,90],{"class":72},[51,160430,160431,160433,160435,160437],{"class":53,"line":404},[51,160432,40257],{"class":64},[51,160434,160412],{"class":72},[51,160436,2154],{"class":64},[51,160438,160417],{"class":72},[51,160440,160441,160443,160445,160448],{"class":53,"line":415},[51,160442,33415],{"class":175},[51,160444,73],{"class":72},[51,160446,160447],{"class":282},"\"猜小了\"",[51,160449,90],{"class":72},[51,160451,160452,160454],{"class":53,"line":420},[51,160453,158986],{"class":64},[51,160455,4816],{"class":72},[51,160457,160458,160460,160462,160464,160467,160469,160471,160473,160476],{"class":53,"line":429},[51,160459,33415],{"class":175},[51,160461,73],{"class":72},[51,160463,1311],{"class":64},[51,160465,160466],{"class":282},"\"猜对了，一共猜了",[51,160468,2140],{"class":175},[51,160470,85398],{"class":72},[51,160472,2190],{"class":175},[51,160474,160475],{"class":282},"次\"",[51,160477,90],{"class":72},[51,160479,160480],{"class":53,"line":434},[51,160481,32591],{"class":64},[40,160483,160484,160487,160488,160490],{},[37,160485,160486],{},"while True"," 表示无限循环，通常配合 ",[37,160489,3133],{}," 使用。",[14,160492,160494],{"id":160493},"_45-break和continue","4.5 break和continue",[1233,160496,160498],{"id":160497},"_451-break","4.5.1 break",[40,160500,160501,160503],{},[37,160502,3133],{}," 直接结束整个循环。",[29,160505,160507],{"className":31342,"code":160506,"language":31344,"meta":35,"style":35},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[37,160508,160509,160529,160541,160545],{"__ignoreMap":35},[51,160510,160511,160513,160515,160517,160519,160521,160523,160525,160527],{"class":53,"line":54},[51,160512,4102],{"class":64},[51,160514,10400],{"class":72},[51,160516,27007],{"class":64},[51,160518,33407],{"class":175},[51,160520,73],{"class":72},[51,160522,791],{"class":175},[51,160524,13397],{"class":72},[51,160526,1593],{"class":175},[51,160528,31750],{"class":72},[51,160530,160531,160533,160535,160537,160539],{"class":53,"line":61},[51,160532,4178],{"class":64},[51,160534,10400],{"class":72},[51,160536,4026],{"class":64},[51,160538,79034],{"class":175},[51,160540,4816],{"class":72},[51,160542,160543],{"class":53,"line":93},[51,160544,32591],{"class":64},[51,160546,160547,160549],{"class":53,"line":99},[51,160548,32263],{"class":175},[51,160550,160194],{"class":72},[40,160552,147421],{},[29,160554,160557],{"className":160555,"code":160556,"language":34,"meta":35},[32],"1\n2\n",[37,160558,160556],{"__ignoreMap":35},[1233,160560,160562],{"id":160561},"_452-continue","4.5.2 continue",[40,160564,160565,160567],{},[37,160566,155636],{}," 跳过本轮剩余代码，进入下一轮循环。",[29,160569,160571],{"className":31342,"code":160570,"language":31344,"meta":35,"style":35},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[37,160572,160573,160593,160605,160609],{"__ignoreMap":35},[51,160574,160575,160577,160579,160581,160583,160585,160587,160589,160591],{"class":53,"line":54},[51,160576,4102],{"class":64},[51,160578,10400],{"class":72},[51,160580,27007],{"class":64},[51,160582,33407],{"class":175},[51,160584,73],{"class":72},[51,160586,791],{"class":175},[51,160588,13397],{"class":72},[51,160590,1593],{"class":175},[51,160592,31750],{"class":72},[51,160594,160595,160597,160599,160601,160603],{"class":53,"line":61},[51,160596,4178],{"class":64},[51,160598,10400],{"class":72},[51,160600,4026],{"class":64},[51,160602,79034],{"class":175},[51,160604,4816],{"class":72},[51,160606,160607],{"class":53,"line":93},[51,160608,149476],{"class":64},[51,160610,160611,160613],{"class":53,"line":99},[51,160612,32263],{"class":175},[51,160614,160194],{"class":72},[40,160616,147421],{},[29,160618,160621],{"className":160619,"code":160620,"language":34,"meta":35},[32],"1\n2\n4\n5\n",[37,160622,160620],{"__ignoreMap":35},[14,160624,160626],{"id":160625},"_46-for循环","4.6 for循环",[40,160628,160629,160631],{},[37,160630,4102],{}," 常用于遍历序列。",[29,160633,160635],{"className":31342,"code":160634,"language":31344,"meta":35,"style":35},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[37,160636,160637,160646,160650,160661],{"__ignoreMap":35},[51,160638,160639,160641,160643],{"class":53,"line":54},[51,160640,147500],{"class":72},[51,160642,108],{"class":64},[51,160644,160645],{"class":282}," \"python\"\n",[51,160647,160648],{"class":53,"line":61},[51,160649,3480],{"emptyLinePlaceholder":1192},[51,160651,160652,160654,160657,160659],{"class":53,"line":93},[51,160653,4102],{"class":64},[51,160655,160656],{"class":72}," ch ",[51,160658,27007],{"class":64},[51,160660,159363],{"class":72},[51,160662,160663,160665],{"class":53,"line":99},[51,160664,32263],{"class":175},[51,160666,160667],{"class":72},"(ch)\n",[40,160669,160670],{},"遍历列表：",[29,160672,160674],{"className":31342,"code":160673,"language":31344,"meta":35,"style":35},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[37,160675,160676,160698,160702,160712],{"__ignoreMap":35},[51,160677,160678,160681,160683,160685,160687,160689,160691,160693,160696],{"class":53,"line":54},[51,160679,160680],{"class":72},"students ",[51,160682,108],{"class":64},[51,160684,53190],{"class":72},[51,160686,150852],{"class":282},[51,160688,13397],{"class":72},[51,160690,151900],{"class":282},[51,160692,13397],{"class":72},[51,160694,160695],{"class":282},"\"小刚\"",[51,160697,34210],{"class":72},[51,160699,160700],{"class":53,"line":61},[51,160701,3480],{"emptyLinePlaceholder":1192},[51,160703,160704,160706,160708,160710],{"class":53,"line":93},[51,160705,4102],{"class":64},[51,160707,153101],{"class":72},[51,160709,27007],{"class":64},[51,160711,153106],{"class":72},[51,160713,160714,160716],{"class":53,"line":99},[51,160715,32263],{"class":175},[51,160717,151006],{"class":72},[14,160719,160721],{"id":160720},"_47-range函数","4.7 range函数",[40,160723,160724,160727],{},[37,160725,160726],{},"range()"," 用于生成整数序列。",[29,160729,160731],{"className":31342,"code":160730,"language":31344,"meta":35,"style":35},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[37,160732,160733,160747,160765],{"__ignoreMap":35},[51,160734,160735,160737,160739,160741,160744],{"class":53,"line":54},[51,160736,34380],{"class":175},[51,160738,73],{"class":72},[51,160740,1568],{"class":175},[51,160742,160743],{"class":72},")          ",[51,160745,160746],{"class":57},"# 0,1,2,3,4\n",[51,160748,160749,160751,160753,160755,160757,160759,160762],{"class":53,"line":61},[51,160750,34380],{"class":175},[51,160752,73],{"class":72},[51,160754,791],{"class":175},[51,160756,13397],{"class":72},[51,160758,1568],{"class":175},[51,160760,160761],{"class":72},")       ",[51,160763,160764],{"class":57},"# 1,2,3,4\n",[51,160766,160767,160769,160771,160773,160775,160777,160779,160781,160783],{"class":53,"line":93},[51,160768,34380],{"class":175},[51,160770,73],{"class":72},[51,160772,791],{"class":175},[51,160774,13397],{"class":72},[51,160776,443],{"class":175},[51,160778,13397],{"class":72},[51,160780,1334],{"class":175},[51,160782,156625],{"class":72},[51,160784,160785],{"class":57},"# 1,3,5,7,9\n",[40,160787,160788,160789,25582],{},"配合 ",[37,160790,4102],{},[29,160792,160794],{"className":31342,"code":160793,"language":31344,"meta":35,"style":35},"for i in range(1, 6):\n    print(i)\n",[37,160795,160796,160816],{"__ignoreMap":35},[51,160797,160798,160800,160802,160804,160806,160808,160810,160812,160814],{"class":53,"line":54},[51,160799,4102],{"class":64},[51,160801,10400],{"class":72},[51,160803,27007],{"class":64},[51,160805,33407],{"class":175},[51,160807,73],{"class":72},[51,160809,791],{"class":175},[51,160811,13397],{"class":72},[51,160813,1593],{"class":175},[51,160815,31750],{"class":72},[51,160817,160818,160820],{"class":53,"line":61},[51,160819,32263],{"class":175},[51,160821,160194],{"class":72},[40,160823,9987,160824,160826],{},[37,160825,34380],{}," 的结束值不包含在内。",[14,160828,160830],{"id":160829},"_48-for循环求和","4.8 for循环求和",[29,160832,160834],{"className":31342,"code":160833,"language":31344,"meta":35,"style":35},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[37,160835,160836,160844,160848,160868,160876,160880],{"__ignoreMap":35},[51,160837,160838,160840,160842],{"class":53,"line":54},[51,160839,158224],{"class":72},[51,160841,108],{"class":64},[51,160843,48297],{"class":175},[51,160845,160846],{"class":53,"line":61},[51,160847,3480],{"emptyLinePlaceholder":1192},[51,160849,160850,160852,160854,160856,160858,160860,160862,160864,160866],{"class":53,"line":93},[51,160851,4102],{"class":64},[51,160853,10400],{"class":72},[51,160855,27007],{"class":64},[51,160857,33407],{"class":175},[51,160859,73],{"class":72},[51,160861,791],{"class":175},[51,160863,13397],{"class":72},[51,160865,1586],{"class":175},[51,160867,31750],{"class":72},[51,160869,160870,160872,160874],{"class":53,"line":99},[51,160871,160271],{"class":72},[51,160873,10439],{"class":64},[51,160875,160276],{"class":72},[51,160877,160878],{"class":53,"line":120},[51,160879,3480],{"emptyLinePlaceholder":1192},[51,160881,160882,160884],{"class":53,"line":129},[51,160883,31379],{"class":175},[51,160885,160295],{"class":72},[40,160887,160888],{},"求偶数和：",[29,160890,160892],{"className":31342,"code":160891,"language":31344,"meta":35,"style":35},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[37,160893,160894,160902,160906,160926,160942,160951,160955],{"__ignoreMap":35},[51,160895,160896,160898,160900],{"class":53,"line":54},[51,160897,158224],{"class":72},[51,160899,108],{"class":64},[51,160901,48297],{"class":175},[51,160903,160904],{"class":53,"line":61},[51,160905,3480],{"emptyLinePlaceholder":1192},[51,160907,160908,160910,160912,160914,160916,160918,160920,160922,160924],{"class":53,"line":93},[51,160909,4102],{"class":64},[51,160911,10400],{"class":72},[51,160913,27007],{"class":64},[51,160915,33407],{"class":175},[51,160917,73],{"class":72},[51,160919,791],{"class":175},[51,160921,13397],{"class":72},[51,160923,1586],{"class":175},[51,160925,31750],{"class":72},[51,160927,160928,160930,160932,160934,160936,160938,160940],{"class":53,"line":99},[51,160929,4178],{"class":64},[51,160931,10400],{"class":72},[51,160933,1577],{"class":64},[51,160935,15717],{"class":175},[51,160937,102523],{"class":64},[51,160939,5169],{"class":175},[51,160941,4816],{"class":72},[51,160943,160944,160947,160949],{"class":53,"line":120},[51,160945,160946],{"class":72},"        total ",[51,160948,10439],{"class":64},[51,160950,160276],{"class":72},[51,160952,160953],{"class":53,"line":129},[51,160954,3480],{"emptyLinePlaceholder":1192},[51,160956,160957,160959],{"class":53,"line":206},[51,160958,31379],{"class":175},[51,160960,160295],{"class":72},[40,160962,160963],{},"也可以：",[29,160965,160967],{"className":31342,"code":160966,"language":31344,"meta":35,"style":35},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[37,160968,160969,160977,160981,161005,161013,161017],{"__ignoreMap":35},[51,160970,160971,160973,160975],{"class":53,"line":54},[51,160972,158224],{"class":72},[51,160974,108],{"class":64},[51,160976,48297],{"class":175},[51,160978,160979],{"class":53,"line":61},[51,160980,3480],{"emptyLinePlaceholder":1192},[51,160982,160983,160985,160987,160989,160991,160993,160995,160997,160999,161001,161003],{"class":53,"line":93},[51,160984,4102],{"class":64},[51,160986,10400],{"class":72},[51,160988,27007],{"class":64},[51,160990,33407],{"class":175},[51,160992,73],{"class":72},[51,160994,1334],{"class":175},[51,160996,13397],{"class":72},[51,160998,1586],{"class":175},[51,161000,13397],{"class":72},[51,161002,1334],{"class":175},[51,161004,31750],{"class":72},[51,161006,161007,161009,161011],{"class":53,"line":99},[51,161008,160271],{"class":72},[51,161010,10439],{"class":64},[51,161012,160276],{"class":72},[51,161014,161015],{"class":53,"line":120},[51,161016,3480],{"emptyLinePlaceholder":1192},[51,161018,161019,161021],{"class":53,"line":129},[51,161020,31379],{"class":175},[51,161022,160295],{"class":72},[14,161024,161026],{"id":161025},"_49-循环嵌套","4.9 循环嵌套",[40,161028,161029],{},"嵌套循环就是循环里面再写循环。",[29,161031,161033],{"className":31342,"code":161032,"language":31344,"meta":35,"style":35},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[37,161034,161035,161055,161075],{"__ignoreMap":35},[51,161036,161037,161039,161041,161043,161045,161047,161049,161051,161053],{"class":53,"line":54},[51,161038,4102],{"class":64},[51,161040,10400],{"class":72},[51,161042,27007],{"class":64},[51,161044,33407],{"class":175},[51,161046,73],{"class":72},[51,161048,791],{"class":175},[51,161050,13397],{"class":72},[51,161052,1543],{"class":175},[51,161054,31750],{"class":72},[51,161056,161057,161059,161061,161063,161065,161067,161069,161071,161073],{"class":53,"line":61},[51,161058,4278],{"class":64},[51,161060,10462],{"class":72},[51,161062,27007],{"class":64},[51,161064,33407],{"class":175},[51,161066,73],{"class":72},[51,161068,791],{"class":175},[51,161070,13397],{"class":72},[51,161072,1543],{"class":175},[51,161074,31750],{"class":72},[51,161076,161077,161079,161081,161083,161086,161088,161090,161092,161095,161097,161099,161101,161103],{"class":53,"line":93},[51,161078,33415],{"class":175},[51,161080,73],{"class":72},[51,161082,1311],{"class":64},[51,161084,161085],{"class":282},"\"i=",[51,161087,2140],{"class":175},[51,161089,1689],{"class":72},[51,161091,2190],{"class":175},[51,161093,161094],{"class":282},", j=",[51,161096,2140],{"class":175},[51,161098,1714],{"class":72},[51,161100,2190],{"class":175},[51,161102,1503],{"class":282},[51,161104,90],{"class":72},[40,161106,161107],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161109,161111],{"id":161110},"_410-九九乘法表","4.10 九九乘法表",[29,161113,161115],{"className":31342,"code":161114,"language":31344,"meta":35,"style":35},"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",[37,161116,161117,161137,161160,161212],{"__ignoreMap":35},[51,161118,161119,161121,161123,161125,161127,161129,161131,161133,161135],{"class":53,"line":54},[51,161120,4102],{"class":64},[51,161122,10400],{"class":72},[51,161124,27007],{"class":64},[51,161126,33407],{"class":175},[51,161128,73],{"class":72},[51,161130,791],{"class":175},[51,161132,13397],{"class":72},[51,161134,443],{"class":175},[51,161136,31750],{"class":72},[51,161138,161139,161141,161143,161145,161147,161149,161151,161154,161156,161158],{"class":53,"line":61},[51,161140,4278],{"class":64},[51,161142,10462],{"class":72},[51,161144,27007],{"class":64},[51,161146,33407],{"class":175},[51,161148,73],{"class":72},[51,161150,791],{"class":175},[51,161152,161153],{"class":72},", i ",[51,161155,114],{"class":64},[51,161157,26082],{"class":175},[51,161159,31750],{"class":72},[51,161161,161162,161164,161166,161168,161170,161172,161174,161176,161178,161180,161182,161184,161186,161188,161190,161192,161194,161196,161198,161200,161202,161204,161206,161208,161210],{"class":53,"line":93},[51,161163,33415],{"class":175},[51,161165,73],{"class":72},[51,161167,1311],{"class":64},[51,161169,1503],{"class":282},[51,161171,2140],{"class":175},[51,161173,1714],{"class":72},[51,161175,2190],{"class":175},[51,161177,1702],{"class":282},[51,161179,2140],{"class":175},[51,161181,1689],{"class":72},[51,161183,2190],{"class":175},[51,161185,108],{"class":282},[51,161187,2140],{"class":175},[51,161189,101112],{"class":72},[51,161191,1702],{"class":64},[51,161193,4487],{"class":72},[51,161195,2190],{"class":175},[51,161197,1503],{"class":282},[51,161199,13397],{"class":72},[51,161201,46765],{"class":78},[51,161203,108],{"class":64},[51,161205,1503],{"class":282},[51,161207,2340],{"class":175},[51,161209,1503],{"class":282},[51,161211,90],{"class":72},[51,161213,161214,161216],{"class":53,"line":99},[51,161215,32263],{"class":175},[51,161217,154],{"class":72},[40,161219,161220],{},"关键点：",[19,161222,161223,161229,161235,161241],{},[22,161224,161225,161226,161228],{},"外层 ",[37,161227,1689],{}," 控制行。",[22,161230,161231,161232,161234],{},"内层 ",[37,161233,1714],{}," 控制列。",[22,161236,161237,161238,161240],{},"每行结束后用 ",[37,161239,147436],{}," 换行。",[22,161242,161243,161246],{},[37,161244,161245],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161248,161250],{"id":161249},"_411-循环else","4.11 循环else",[40,161252,161253,161254,161256,161257,161259,161260,161262],{},"Python 的循环可以带 ",[37,161255,2791],{},"。当循环正常结束时执行 ",[37,161258,2791],{},"，如果被 ",[37,161261,3133],{}," 打断，则不执行。",[29,161264,161266],{"className":31342,"code":161265,"language":31344,"meta":35,"style":35},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[37,161267,161268,161288,161300,161311,161315,161321],{"__ignoreMap":35},[51,161269,161270,161272,161274,161276,161278,161280,161282,161284,161286],{"class":53,"line":54},[51,161271,4102],{"class":64},[51,161273,10400],{"class":72},[51,161275,27007],{"class":64},[51,161277,33407],{"class":175},[51,161279,73],{"class":72},[51,161281,791],{"class":175},[51,161283,13397],{"class":72},[51,161285,1593],{"class":175},[51,161287,31750],{"class":72},[51,161289,161290,161292,161294,161296,161298],{"class":53,"line":61},[51,161291,4178],{"class":64},[51,161293,10400],{"class":72},[51,161295,4026],{"class":64},[51,161297,3118],{"class":175},[51,161299,4816],{"class":72},[51,161301,161302,161304,161306,161309],{"class":53,"line":93},[51,161303,33415],{"class":175},[51,161305,73],{"class":72},[51,161307,161308],{"class":282},"\"找到了\"",[51,161310,90],{"class":72},[51,161312,161313],{"class":53,"line":99},[51,161314,32591],{"class":64},[51,161316,161317,161319],{"class":53,"line":120},[51,161318,2791],{"class":64},[51,161320,4816],{"class":72},[51,161322,161323,161325,161327,161330],{"class":53,"line":129},[51,161324,32263],{"class":175},[51,161326,73],{"class":72},[51,161328,161329],{"class":282},"\"没找到\"",[51,161331,90],{"class":72},[40,161333,161334],{},"常用于搜索。",[29,161336,161338],{"className":31342,"code":161337,"language":31344,"meta":35,"style":35},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[37,161339,161340,161361,161370,161374,161386,161397,161407,161411,161417],{"__ignoreMap":35},[51,161341,161342,161345,161347,161349,161351,161353,161355,161357,161359],{"class":53,"line":54},[51,161343,161344],{"class":72},"names ",[51,161346,108],{"class":64},[51,161348,53190],{"class":72},[51,161350,150852],{"class":282},[51,161352,13397],{"class":72},[51,161354,151900],{"class":282},[51,161356,13397],{"class":72},[51,161358,160695],{"class":282},[51,161360,34210],{"class":72},[51,161362,161363,161365,161367],{"class":53,"line":61},[51,161364,112542],{"class":72},[51,161366,108],{"class":64},[51,161368,161369],{"class":282}," \"小李\"\n",[51,161371,161372],{"class":53,"line":93},[51,161373,3480],{"emptyLinePlaceholder":1192},[51,161375,161376,161378,161381,161383],{"class":53,"line":99},[51,161377,4102],{"class":64},[51,161379,161380],{"class":72}," name ",[51,161382,27007],{"class":64},[51,161384,161385],{"class":72}," names:\n",[51,161387,161388,161390,161392,161394],{"class":53,"line":120},[51,161389,4178],{"class":64},[51,161391,161380],{"class":72},[51,161393,4026],{"class":64},[51,161395,161396],{"class":72}," target:\n",[51,161398,161399,161401,161403,161405],{"class":53,"line":129},[51,161400,33415],{"class":175},[51,161402,73],{"class":72},[51,161404,161308],{"class":282},[51,161406,90],{"class":72},[51,161408,161409],{"class":53,"line":206},[51,161410,32591],{"class":64},[51,161412,161413,161415],{"class":53,"line":212},[51,161414,2791],{"class":64},[51,161416,4816],{"class":72},[51,161418,161419,161421,161423,161425],{"class":53,"line":227},[51,161420,32263],{"class":175},[51,161422,73],{"class":72},[51,161424,161329],{"class":282},[51,161426,90],{"class":72},[14,161428,161430],{"id":161429},"_412-小案例登录重试","4.12 小案例：登录重试",[40,161432,124256],{},[19,161434,161435,161438,161441],{},[22,161436,161437],{},"用户最多输入 3 次密码。",[22,161439,161440],{},"密码正确则登录成功。",[22,161442,161443],{},"3 次都错误则锁定账号。",[40,161445,10997],{},[29,161447,161449],{"className":31342,"code":161448,"language":31344,"meta":35,"style":35},"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",[37,161450,161451,161461,161465,161481,161497,161501,161513,161524,161528,161534,161559,161565],{"__ignoreMap":35},[51,161452,161453,161456,161458],{"class":53,"line":54},[51,161454,161455],{"class":72},"password ",[51,161457,108],{"class":64},[51,161459,161460],{"class":282}," \"123456\"\n",[51,161462,161463],{"class":53,"line":61},[51,161464,3480],{"emptyLinePlaceholder":1192},[51,161466,161467,161469,161471,161473,161475,161477,161479],{"class":53,"line":93},[51,161468,4102],{"class":64},[51,161470,10400],{"class":72},[51,161472,27007],{"class":64},[51,161474,33407],{"class":175},[51,161476,73],{"class":72},[51,161478,1328],{"class":175},[51,161480,31750],{"class":72},[51,161482,161483,161486,161488,161490,161492,161495],{"class":53,"line":99},[51,161484,161485],{"class":72},"    user_password ",[51,161487,108],{"class":64},[51,161489,61569],{"class":175},[51,161491,73],{"class":72},[51,161493,161494],{"class":282},"\"请输入密码:\"",[51,161496,90],{"class":72},[51,161498,161499],{"class":53,"line":120},[51,161500,3480],{"emptyLinePlaceholder":1192},[51,161502,161503,161505,161508,161510],{"class":53,"line":129},[51,161504,4178],{"class":64},[51,161506,161507],{"class":72}," user_password ",[51,161509,4026],{"class":64},[51,161511,161512],{"class":72}," password:\n",[51,161514,161515,161517,161519,161522],{"class":53,"line":206},[51,161516,33415],{"class":175},[51,161518,73],{"class":72},[51,161520,161521],{"class":282},"\"登录成功\"",[51,161523,90],{"class":72},[51,161525,161526],{"class":53,"line":212},[51,161527,32591],{"class":64},[51,161529,161530,161532],{"class":53,"line":227},[51,161531,158986],{"class":64},[51,161533,4816],{"class":72},[51,161535,161536,161538,161540,161542,161545,161548,161550,161552,161554,161557],{"class":53,"line":370},[51,161537,33415],{"class":175},[51,161539,73],{"class":72},[51,161541,1311],{"class":64},[51,161543,161544],{"class":282},"\"密码错误，还剩",[51,161546,161547],{"class":175},"{2",[51,161549,53235],{"class":64},[51,161551,4109],{"class":72},[51,161553,2190],{"class":175},[51,161555,161556],{"class":282},"次机会\"",[51,161558,90],{"class":72},[51,161560,161561,161563],{"class":53,"line":387},[51,161562,2791],{"class":64},[51,161564,4816],{"class":72},[51,161566,161567,161569,161571,161574],{"class":53,"line":404},[51,161568,32263],{"class":175},[51,161570,73],{"class":72},[51,161572,161573],{"class":282},"\"账号已锁定\"",[51,161575,90],{"class":72},[14,161577,161579],{"id":161578},"_413-小案例菜单程序","4.13 小案例：菜单程序",[29,161581,161583],{"className":31342,"code":161582,"language":31344,"meta":35,"style":35},"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",[37,161584,161585,161593,161604,161615,161626,161637,161648,161652,161667,161671,161683,161694,161706,161717,161729,161740,161752,161762,161766,161772],{"__ignoreMap":35},[51,161586,161587,161589,161591],{"class":53,"line":54},[51,161588,109627],{"class":64},[51,161590,96256],{"class":175},[51,161592,4816],{"class":72},[51,161594,161595,161597,161599,161602],{"class":53,"line":61},[51,161596,32263],{"class":175},[51,161598,73],{"class":72},[51,161600,161601],{"class":282},"\"====== 菜单 ======\"",[51,161603,90],{"class":72},[51,161605,161606,161608,161610,161613],{"class":53,"line":93},[51,161607,32263],{"class":175},[51,161609,73],{"class":72},[51,161611,161612],{"class":282},"\"1. 查询余额\"",[51,161614,90],{"class":72},[51,161616,161617,161619,161621,161624],{"class":53,"line":99},[51,161618,32263],{"class":175},[51,161620,73],{"class":72},[51,161622,161623],{"class":282},"\"2. 存款\"",[51,161625,90],{"class":72},[51,161627,161628,161630,161632,161635],{"class":53,"line":120},[51,161629,32263],{"class":175},[51,161631,73],{"class":72},[51,161633,161634],{"class":282},"\"3. 取款\"",[51,161636,90],{"class":72},[51,161638,161639,161641,161643,161646],{"class":53,"line":129},[51,161640,32263],{"class":175},[51,161642,73],{"class":72},[51,161644,161645],{"class":282},"\"0. 退出\"",[51,161647,90],{"class":72},[51,161649,161650],{"class":53,"line":206},[51,161651,3480],{"emptyLinePlaceholder":1192},[51,161653,161654,161657,161659,161661,161663,161665],{"class":53,"line":212},[51,161655,161656],{"class":72},"    choice ",[51,161658,108],{"class":64},[51,161660,61569],{"class":175},[51,161662,73],{"class":72},[51,161664,154037],{"class":282},[51,161666,90],{"class":72},[51,161668,161669],{"class":53,"line":227},[51,161670,3480],{"emptyLinePlaceholder":1192},[51,161672,161673,161675,161677,161679,161681],{"class":53,"line":370},[51,161674,4178],{"class":64},[51,161676,154050],{"class":72},[51,161678,4026],{"class":64},[51,161680,154055],{"class":282},[51,161682,4816],{"class":72},[51,161684,161685,161687,161689,161692],{"class":53,"line":387},[51,161686,33415],{"class":175},[51,161688,73],{"class":72},[51,161690,161691],{"class":282},"\"余额为1000元\"",[51,161693,90],{"class":72},[51,161695,161696,161698,161700,161702,161704],{"class":53,"line":404},[51,161697,40257],{"class":64},[51,161699,154050],{"class":72},[51,161701,4026],{"class":64},[51,161703,154074],{"class":282},[51,161705,4816],{"class":72},[51,161707,161708,161710,161712,161715],{"class":53,"line":415},[51,161709,33415],{"class":175},[51,161711,73],{"class":72},[51,161713,161714],{"class":282},"\"存款功能\"",[51,161716,90],{"class":72},[51,161718,161719,161721,161723,161725,161727],{"class":53,"line":420},[51,161720,40257],{"class":64},[51,161722,154050],{"class":72},[51,161724,4026],{"class":64},[51,161726,154092],{"class":282},[51,161728,4816],{"class":72},[51,161730,161731,161733,161735,161738],{"class":53,"line":429},[51,161732,33415],{"class":175},[51,161734,73],{"class":72},[51,161736,161737],{"class":282},"\"取款功能\"",[51,161739,90],{"class":72},[51,161741,161742,161744,161746,161748,161750],{"class":53,"line":434},[51,161743,40257],{"class":64},[51,161745,154050],{"class":72},[51,161747,4026],{"class":64},[51,161749,154146],{"class":282},[51,161751,4816],{"class":72},[51,161753,161754,161756,161758,161760],{"class":53,"line":448},[51,161755,33415],{"class":175},[51,161757,73],{"class":72},[51,161759,154157],{"class":282},[51,161761,90],{"class":72},[51,161763,161764],{"class":53,"line":462},[51,161765,32591],{"class":64},[51,161767,161768,161770],{"class":53,"line":470},[51,161769,158986],{"class":64},[51,161771,4816],{"class":72},[51,161773,161774,161776,161778,161780],{"class":53,"line":2783},[51,161775,33415],{"class":175},[51,161777,73],{"class":72},[51,161779,154178],{"class":282},[51,161781,90],{"class":72},[40,161783,161784,161785,161787,161788,29349],{},"菜单类程序通常使用 ",[37,161786,160486],{},"，用户选择退出时 ",[37,161789,3133],{},[14,161791,161793],{"id":161792},"_414-易错点","4.14 易错点",[19,161795,161796,161801,161807,161815,161821],{},[22,161797,161798,161800],{},[37,161799,109627],{}," 循环必须更新控制变量。",[22,161802,161803,161806],{},[37,161804,161805],{},"range(1, 10)"," 不包含 10。",[22,161808,161809,161811,161812,161814],{},[37,161810,3133],{}," 结束整个循环，",[37,161813,155636],{}," 只跳过本轮。",[22,161816,161817,161818,161820],{},"嵌套循环中，",[37,161819,3133],{}," 只跳出当前所在的一层循环。",[22,161822,161823],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161825,161827],{"id":161826},"_415-本章练习","4.15 本章练习",[19,161829,161830,161833,161836,161839,161842],{},[22,161831,161832],{},"输出 1 到 100。",[22,161834,161835],{},"计算 1 到 100 的偶数和。",[22,161837,161838],{},"输出 100 以内能被 3 和 5 同时整除的数。",[22,161840,161841],{},"编写猜数字游戏，限制最多猜 7 次。",[22,161843,161844],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1179,161846,161847],{},"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":35,"searchDepth":61,"depth":61,"links":161849},[161850,161851,161852,161853,161854,161858,161859,161860,161861,161862,161863,161864,161865,161866,161867],{"id":160106,"depth":61,"text":160107},{"id":160136,"depth":61,"text":160137},{"id":160225,"depth":61,"text":160226},{"id":160319,"depth":61,"text":160320},{"id":160493,"depth":61,"text":160494,"children":161855},[161856,161857],{"id":160497,"depth":93,"text":160498},{"id":160561,"depth":93,"text":160562},{"id":160625,"depth":61,"text":160626},{"id":160720,"depth":61,"text":160721},{"id":160829,"depth":61,"text":160830},{"id":161025,"depth":61,"text":161026},{"id":161110,"depth":61,"text":161111},{"id":161249,"depth":61,"text":161250},{"id":161429,"depth":61,"text":161430},{"id":161578,"depth":61,"text":161579},{"id":161792,"depth":61,"text":161793},{"id":161826,"depth":61,"text":161827},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160098,"description":24339},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161874,"title":161875,"body":161876,"description":24339,"extension":1190,"meta":163881,"navigation":1192,"path":163882,"seo":163883,"stem":163884,"__hash__":163885},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161877,"toc":163861},[161878,161881,161885,161888,161891,161905,161908,161922,161926,161928,161947,161949,161996,161998,162012,162016,162090,162093,162097,162100,162159,162167,162170,162223,162226,162230,162235,162290,162298,162348,162352,162357,162365,162464,162470,162474,162479,162482,162493,162534,162547,162551,162554,162590,162593,162606,162609,162669,162673,162677,162680,162731,162735,162738,162785,162791,162857,162860,162864,162867,162983,162986,162990,162993,163099,163103,163106,163144,163147,163189,163192,163252,163255,163259,163723,163726,163730,163757,163763,163824,163828,163858],[10,161879,161875],{"id":161880},"_5-函数基础",[14,161882,161884],{"id":161883},"_51-为什么需要函数","5.1 为什么需要函数",[40,161886,161887],{},"函数用于封装一段可以重复使用的代码。",[40,161889,161890],{},"不使用函数的问题：",[19,161892,161893,161896,161899,161902],{},[22,161894,161895],{},"重复代码多。",[22,161897,161898],{},"修改逻辑时容易漏改。",[22,161900,161901],{},"主流程不清晰。",[22,161903,161904],{},"程序越写越长，难以维护。",[40,161906,161907],{},"使用函数后的好处：",[19,161909,161910,161913,161916,161919],{},[22,161911,161912],{},"提高复用性。",[22,161914,161915],{},"提高可读性。",[22,161917,161918],{},"便于调试。",[22,161920,161921],{},"便于分工。",[14,161923,161925],{"id":161924},"_52-函数定义","5.2 函数定义",[40,161927,27],{},[29,161929,161931],{"className":31342,"code":161930,"language":31344,"meta":35,"style":35},"def 函数名():\n    函数体\n",[37,161932,161933,161942],{"__ignoreMap":35},[51,161934,161935,161937,161940],{"class":53,"line":54},[51,161936,32911],{"class":64},[51,161938,161939],{"class":68}," 函数名",[51,161941,32917],{"class":72},[51,161943,161944],{"class":53,"line":61},[51,161945,161946],{"class":72},"    函数体\n",[40,161948,16097],{},[29,161950,161952],{"className":31342,"code":161951,"language":31344,"meta":35,"style":35},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[37,161953,161954,161963,161973,161983,161987,161991],{"__ignoreMap":35},[51,161955,161956,161958,161961],{"class":53,"line":54},[51,161957,32911],{"class":64},[51,161959,161960],{"class":68}," say_hello",[51,161962,32917],{"class":72},[51,161964,161965,161967,161969,161971],{"class":53,"line":61},[51,161966,32263],{"class":175},[51,161968,73],{"class":72},[51,161970,752],{"class":282},[51,161972,90],{"class":72},[51,161974,161975,161977,161979,161981],{"class":53,"line":93},[51,161976,32263],{"class":175},[51,161978,73],{"class":72},[51,161980,147603],{"class":282},[51,161982,90],{"class":72},[51,161984,161985],{"class":53,"line":99},[51,161986,3480],{"emptyLinePlaceholder":1192},[51,161988,161989],{"class":53,"line":120},[51,161990,3480],{"emptyLinePlaceholder":1192},[51,161992,161993],{"class":53,"line":129},[51,161994,161995],{"class":72},"say_hello()\n",[40,161997,9987],{},[19,161999,162000,162003,162006,162009],{},[22,162001,162002],{},"函数必须先定义，再调用。",[22,162004,162005],{},"函数名遵循变量命名规则。",[22,162007,162008],{},"函数体需要缩进。",[22,162010,162011],{},"函数不调用就不会执行。",[14,162013,162015],{"id":162014},"_53-函数调用","5.3 函数调用",[29,162017,162019],{"className":31342,"code":162018,"language":31344,"meta":35,"style":35},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[37,162020,162021,162030,162041,162052,162063,162073,162077,162081,162086],{"__ignoreMap":35},[51,162022,162023,162025,162028],{"class":53,"line":54},[51,162024,32911],{"class":64},[51,162026,162027],{"class":68}," print_menu",[51,162029,32917],{"class":72},[51,162031,162032,162034,162036,162039],{"class":53,"line":61},[51,162033,32263],{"class":175},[51,162035,73],{"class":72},[51,162037,162038],{"class":282},"\"1. 查询\"",[51,162040,90],{"class":72},[51,162042,162043,162045,162047,162050],{"class":53,"line":93},[51,162044,32263],{"class":175},[51,162046,73],{"class":72},[51,162048,162049],{"class":282},"\"2. 添加\"",[51,162051,90],{"class":72},[51,162053,162054,162056,162058,162061],{"class":53,"line":99},[51,162055,32263],{"class":175},[51,162057,73],{"class":72},[51,162059,162060],{"class":282},"\"3. 删除\"",[51,162062,90],{"class":72},[51,162064,162065,162067,162069,162071],{"class":53,"line":120},[51,162066,32263],{"class":175},[51,162068,73],{"class":72},[51,162070,161645],{"class":282},[51,162072,90],{"class":72},[51,162074,162075],{"class":53,"line":129},[51,162076,3480],{"emptyLinePlaceholder":1192},[51,162078,162079],{"class":53,"line":206},[51,162080,3480],{"emptyLinePlaceholder":1192},[51,162082,162083],{"class":53,"line":212},[51,162084,162085],{"class":72},"print_menu()\n",[51,162087,162088],{"class":53,"line":227},[51,162089,162085],{"class":72},[40,162091,162092],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162094,162096],{"id":162095},"_54-参数","5.4 参数",[40,162098,162099],{},"参数用于向函数传递数据。",[29,162101,162103],{"className":31342,"code":162102,"language":31344,"meta":35,"style":35},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[37,162104,162105,162114,162134,162138,162142,162151],{"__ignoreMap":35},[51,162106,162107,162109,162111],{"class":53,"line":54},[51,162108,32911],{"class":64},[51,162110,161960],{"class":68},[51,162112,162113],{"class":72},"(name):\n",[51,162115,162116,162118,162120,162122,162124,162126,162128,162130,162132],{"class":53,"line":61},[51,162117,32263],{"class":175},[51,162119,73],{"class":72},[51,162121,1311],{"class":64},[51,162123,158018],{"class":282},[51,162125,2140],{"class":175},[51,162127,80774],{"class":72},[51,162129,2190],{"class":175},[51,162131,1503],{"class":282},[51,162133,90],{"class":72},[51,162135,162136],{"class":53,"line":93},[51,162137,3480],{"emptyLinePlaceholder":1192},[51,162139,162140],{"class":53,"line":99},[51,162141,3480],{"emptyLinePlaceholder":1192},[51,162143,162144,162147,162149],{"class":53,"line":120},[51,162145,162146],{"class":72},"say_hello(",[51,162148,150852],{"class":282},[51,162150,90],{"class":72},[51,162152,162153,162155,162157],{"class":53,"line":129},[51,162154,162146],{"class":72},[51,162156,151900],{"class":282},[51,162158,90],{"class":72},[40,162160,162161,162163,162164,162166],{},[37,162162,80774],{}," 是形参，",[37,162165,150852],{}," 是实参。",[40,162168,162169],{},"多个参数：",[29,162171,162173],{"className":31342,"code":162172,"language":31344,"meta":35,"style":35},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[37,162174,162175,162183,162196,162202,162206,162210],{"__ignoreMap":35},[51,162176,162177,162179,162181],{"class":53,"line":54},[51,162178,32911],{"class":64},[51,162180,69],{"class":68},[51,162182,152057],{"class":72},[51,162184,162185,162188,162190,162192,162194],{"class":53,"line":61},[51,162186,162187],{"class":72},"    result ",[51,162189,108],{"class":64},[51,162191,11831],{"class":72},[51,162193,114],{"class":64},[51,162195,152068],{"class":72},[51,162197,162198,162200],{"class":53,"line":93},[51,162199,32263],{"class":175},[51,162201,77549],{"class":72},[51,162203,162204],{"class":53,"line":99},[51,162205,3480],{"emptyLinePlaceholder":1192},[51,162207,162208],{"class":53,"line":120},[51,162209,3480],{"emptyLinePlaceholder":1192},[51,162211,162212,162215,162217,162219,162221],{"class":53,"line":129},[51,162213,162214],{"class":72},"add(",[51,162216,443],{"class":175},[51,162218,13397],{"class":72},[51,162220,457],{"class":175},[51,162222,90],{"class":72},[40,162224,162225],{},"调用时参数数量必须匹配。",[14,162227,162229],{"id":162228},"_55-返回值","5.5 返回值",[40,162231,162232,162234],{},[37,162233,18008],{}," 用于把函数内部的结果返回给调用者。",[29,162236,162238],{"className":31342,"code":162237,"language":31344,"meta":35,"style":35},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[37,162239,162240,162248,162258,162262,162266,162284],{"__ignoreMap":35},[51,162241,162242,162244,162246],{"class":53,"line":54},[51,162243,32911],{"class":64},[51,162245,69],{"class":68},[51,162247,152057],{"class":72},[51,162249,162250,162252,162254,162256],{"class":53,"line":61},[51,162251,123],{"class":64},[51,162253,11831],{"class":72},[51,162255,114],{"class":64},[51,162257,152068],{"class":72},[51,162259,162260],{"class":53,"line":93},[51,162261,3480],{"emptyLinePlaceholder":1192},[51,162263,162264],{"class":53,"line":99},[51,162265,3480],{"emptyLinePlaceholder":1192},[51,162267,162268,162271,162273,162276,162278,162280,162282],{"class":53,"line":120},[51,162269,162270],{"class":72},"result ",[51,162272,108],{"class":64},[51,162274,162275],{"class":72}," add(",[51,162277,443],{"class":175},[51,162279,13397],{"class":72},[51,162281,457],{"class":175},[51,162283,90],{"class":72},[51,162285,162286,162288],{"class":53,"line":129},[51,162287,31379],{"class":175},[51,162289,77549],{"class":72},[40,162291,162292,162293,162295,162296,29349],{},"如果函数没有写 ",[37,162294,18008],{},"，默认返回 ",[37,162297,96650],{},[29,162299,162301],{"className":31342,"code":162300,"language":31344,"meta":35,"style":35},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[37,162302,162303,162311,162321,162325,162329,162338],{"__ignoreMap":35},[51,162304,162305,162307,162309],{"class":53,"line":54},[51,162306,32911],{"class":64},[51,162308,161960],{"class":68},[51,162310,32917],{"class":72},[51,162312,162313,162315,162317,162319],{"class":53,"line":61},[51,162314,32263],{"class":175},[51,162316,73],{"class":72},[51,162318,752],{"class":282},[51,162320,90],{"class":72},[51,162322,162323],{"class":53,"line":93},[51,162324,3480],{"emptyLinePlaceholder":1192},[51,162326,162327],{"class":53,"line":99},[51,162328,3480],{"emptyLinePlaceholder":1192},[51,162330,162331,162333,162335],{"class":53,"line":120},[51,162332,162270],{"class":72},[51,162334,108],{"class":64},[51,162336,162337],{"class":72}," say_hello()\n",[51,162339,162340,162342,162345],{"class":53,"line":129},[51,162341,31379],{"class":175},[51,162343,162344],{"class":72},"(result)  ",[51,162346,162347],{"class":57},"# None\n",[14,162349,162351],{"id":162350},"_56-return的作用","5.6 return的作用",[40,162353,162354,162356],{},[37,162355,18008],{}," 有两个作用：",[19,162358,162359,162362],{},[22,162360,162361],{},"返回结果。",[22,162363,162364],{},"结束函数。",[29,162366,162368],{"className":31342,"code":162367,"language":31344,"meta":35,"style":35},"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",[37,162369,162370,162380,162392,162399,162403,162415,162422,162426,162433,162437,162441,162452],{"__ignoreMap":35},[51,162371,162372,162374,162377],{"class":53,"line":54},[51,162373,32911],{"class":64},[51,162375,162376],{"class":68}," check_age",[51,162378,162379],{"class":72},"(age):\n",[51,162381,162382,162384,162386,162388,162390],{"class":53,"line":61},[51,162383,4178],{"class":64},[51,162385,16669],{"class":72},[51,162387,2154],{"class":64},[51,162389,5169],{"class":175},[51,162391,4816],{"class":72},[51,162393,162394,162396],{"class":53,"line":93},[51,162395,15714],{"class":64},[51,162397,162398],{"class":282}," \"年龄不合法\"\n",[51,162400,162401],{"class":53,"line":99},[51,162402,3480],{"emptyLinePlaceholder":1192},[51,162404,162405,162407,162409,162411,162413],{"class":53,"line":120},[51,162406,4178],{"class":64},[51,162408,16669],{"class":72},[51,162410,2800],{"class":64},[51,162412,157249],{"class":175},[51,162414,4816],{"class":72},[51,162416,162417,162419],{"class":53,"line":129},[51,162418,15714],{"class":64},[51,162420,162421],{"class":282}," \"成年人\"\n",[51,162423,162424],{"class":53,"line":206},[51,162425,3480],{"emptyLinePlaceholder":1192},[51,162427,162428,162430],{"class":53,"line":212},[51,162429,123],{"class":64},[51,162431,162432],{"class":282}," \"未成年人\"\n",[51,162434,162435],{"class":53,"line":227},[51,162436,3480],{"emptyLinePlaceholder":1192},[51,162438,162439],{"class":53,"line":370},[51,162440,3480],{"emptyLinePlaceholder":1192},[51,162442,162443,162445,162448,162450],{"class":53,"line":387},[51,162444,31379],{"class":175},[51,162446,162447],{"class":72},"(check_age(",[51,162449,457],{"class":175},[51,162451,31461],{"class":72},[51,162453,162454,162456,162458,162460,162462],{"class":53,"line":404},[51,162455,31379],{"class":175},[51,162457,162447],{"class":72},[51,162459,1778],{"class":64},[51,162461,791],{"class":175},[51,162463,31461],{"class":72},[40,162465,162466,162467,162469],{},"函数执行到 ",[37,162468,18008],{}," 后，后面的代码不会继续执行。",[14,162471,162473],{"id":162472},"_57-none","5.7 None",[40,162475,162476,162478],{},[37,162477,96650],{}," 表示空值或没有结果。",[40,162480,162481],{},"常见使用场景：",[19,162483,162484,162487,162490],{},[22,162485,162486],{},"函数没有返回值。",[22,162488,162489],{},"变量暂时没有具体值。",[22,162491,162492],{},"表示查询不到结果。",[29,162494,162496],{"className":31342,"code":162495,"language":31344,"meta":35,"style":35},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[37,162497,162498,162506,162510,162523],{"__ignoreMap":35},[51,162499,162500,162502,162504],{"class":53,"line":54},[51,162501,162270],{"class":72},[51,162503,108],{"class":64},[51,162505,153136],{"class":175},[51,162507,162508],{"class":53,"line":61},[51,162509,3480],{"emptyLinePlaceholder":1192},[51,162511,162512,162514,162517,162519,162521],{"class":53,"line":93},[51,162513,2633],{"class":64},[51,162515,162516],{"class":72}," result ",[51,162518,39891],{"class":64},[51,162520,39897],{"class":175},[51,162522,4816],{"class":72},[51,162524,162525,162527,162529,162532],{"class":53,"line":99},[51,162526,32263],{"class":175},[51,162528,73],{"class":72},[51,162530,162531],{"class":282},"\"没有数据\"",[51,162533,90],{"class":72},[40,162535,162536,162537,162539,162540,162543,162544,29349],{},"判断 ",[37,162538,96650],{}," 推荐使用 ",[37,162541,162542],{},"is None","，不要写成 ",[37,162545,162546],{},"== None",[14,162548,162550],{"id":162549},"_58-函数文档字符串","5.8 函数文档字符串",[40,162552,162553],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[29,162555,162557],{"className":31342,"code":162556,"language":31344,"meta":35,"style":35},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[37,162558,162559,162569,162574],{"__ignoreMap":35},[51,162560,162561,162563,162566],{"class":53,"line":54},[51,162562,32911],{"class":64},[51,162564,162565],{"class":68}," calculate_bmi",[51,162567,162568],{"class":72},"(weight, height):\n",[51,162570,162571],{"class":53,"line":61},[51,162572,162573],{"class":282},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[51,162575,162576,162578,162581,162583,162586,162588],{"class":53,"line":93},[51,162577,123],{"class":64},[51,162579,162580],{"class":72}," weight ",[51,162582,1830],{"class":64},[51,162584,162585],{"class":72}," height ",[51,162587,11623],{"class":64},[51,162589,48687],{"class":175},[40,162591,162592],{},"查看说明：",[29,162594,162596],{"className":31342,"code":162595,"language":31344,"meta":35,"style":35},"help(calculate_bmi)\n",[37,162597,162598],{"__ignoreMap":35},[51,162599,162600,162603],{"class":53,"line":54},[51,162601,162602],{"class":175},"help",[51,162604,162605],{"class":72},"(calculate_bmi)\n",[40,162607,162608],{},"较完整的写法：",[29,162610,162612],{"className":31342,"code":162611,"language":31344,"meta":35,"style":35},"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",[37,162613,162614,162622,162627,162632,162636,162641,162646,162651,162655],{"__ignoreMap":35},[51,162615,162616,162618,162620],{"class":53,"line":54},[51,162617,32911],{"class":64},[51,162619,162565],{"class":68},[51,162621,162568],{"class":72},[51,162623,162624],{"class":53,"line":61},[51,162625,162626],{"class":282},"    \"\"\"\n",[51,162628,162629],{"class":53,"line":93},[51,162630,162631],{"class":282},"    计算BMI。\n",[51,162633,162634],{"class":53,"line":99},[51,162635,3480],{"emptyLinePlaceholder":1192},[51,162637,162638],{"class":53,"line":120},[51,162639,162640],{"class":282},"    :param weight: 体重，单位kg\n",[51,162642,162643],{"class":53,"line":129},[51,162644,162645],{"class":282},"    :param height: 身高，单位m\n",[51,162647,162648],{"class":53,"line":206},[51,162649,162650],{"class":282},"    :return: BMI数值\n",[51,162652,162653],{"class":53,"line":212},[51,162654,162626],{"class":282},[51,162656,162657,162659,162661,162663,162665,162667],{"class":53,"line":227},[51,162658,123],{"class":64},[51,162660,162580],{"class":72},[51,162662,1830],{"class":64},[51,162664,162585],{"class":72},[51,162666,11623],{"class":64},[51,162668,48687],{"class":175},[14,162670,162672],{"id":162671},"_59-变量作用域","5.9 变量作用域",[1233,162674,162676],{"id":162675},"_591-局部变量","5.9.1 局部变量",[40,162678,162679],{},"在函数内部定义的变量，只能在函数内部使用。",[29,162681,162683],{"className":31342,"code":162682,"language":31344,"meta":35,"style":35},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[37,162684,162685,162694,162702,162708,162712,162716,162721],{"__ignoreMap":35},[51,162686,162687,162689,162692],{"class":53,"line":54},[51,162688,32911],{"class":64},[51,162690,162691],{"class":68}," test",[51,162693,32917],{"class":72},[51,162695,162696,162698,162700],{"class":53,"line":61},[51,162697,46557],{"class":72},[51,162699,108],{"class":64},[51,162701,59392],{"class":175},[51,162703,162704,162706],{"class":53,"line":93},[51,162705,32263],{"class":175},[51,162707,1274],{"class":72},[51,162709,162710],{"class":53,"line":99},[51,162711,3480],{"emptyLinePlaceholder":1192},[51,162713,162714],{"class":53,"line":120},[51,162715,3480],{"emptyLinePlaceholder":1192},[51,162717,162718],{"class":53,"line":129},[51,162719,162720],{"class":72},"test()\n",[51,162722,162723,162725,162728],{"class":53,"line":206},[51,162724,31379],{"class":175},[51,162726,162727],{"class":72},"(num)  ",[51,162729,162730],{"class":57},"# 报错\n",[1233,162732,162734],{"id":162733},"_592-全局变量","5.9.2 全局变量",[40,162736,162737],{},"在函数外部定义的变量，可以在函数内部读取。",[29,162739,162741],{"className":31342,"code":162740,"language":31344,"meta":35,"style":35},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[37,162742,162743,162751,162755,162759,162767,162773,162777,162781],{"__ignoreMap":35},[51,162744,162745,162747,162749],{"class":53,"line":54},[51,162746,147500],{"class":72},[51,162748,108],{"class":64},[51,162750,150317],{"class":282},[51,162752,162753],{"class":53,"line":61},[51,162754,3480],{"emptyLinePlaceholder":1192},[51,162756,162757],{"class":53,"line":93},[51,162758,3480],{"emptyLinePlaceholder":1192},[51,162760,162761,162763,162765],{"class":53,"line":99},[51,162762,32911],{"class":64},[51,162764,161960],{"class":68},[51,162766,32917],{"class":72},[51,162768,162769,162771],{"class":53,"line":120},[51,162770,32263],{"class":175},[51,162772,151624],{"class":72},[51,162774,162775],{"class":53,"line":129},[51,162776,3480],{"emptyLinePlaceholder":1192},[51,162778,162779],{"class":53,"line":206},[51,162780,3480],{"emptyLinePlaceholder":1192},[51,162782,162783],{"class":53,"line":212},[51,162784,161995],{"class":72},[40,162786,162787,162788,29349],{},"如果要在函数内部修改全局变量，需要 ",[37,162789,162790],{},"global",[29,162792,162794],{"className":31342,"code":162793,"language":31344,"meta":35,"style":35},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[37,162795,162796,162804,162808,162812,162821,162829,162837,162841,162845,162850],{"__ignoreMap":35},[51,162797,162798,162800,162802],{"class":53,"line":54},[51,162799,147655],{"class":72},[51,162801,108],{"class":64},[51,162803,48297],{"class":175},[51,162805,162806],{"class":53,"line":61},[51,162807,3480],{"emptyLinePlaceholder":1192},[51,162809,162810],{"class":53,"line":93},[51,162811,3480],{"emptyLinePlaceholder":1192},[51,162813,162814,162816,162819],{"class":53,"line":99},[51,162815,32911],{"class":64},[51,162817,162818],{"class":68}," add_count",[51,162820,32917],{"class":72},[51,162822,162823,162826],{"class":53,"line":120},[51,162824,162825],{"class":64},"    global",[51,162827,162828],{"class":72}," count\n",[51,162830,162831,162833,162835],{"class":53,"line":129},[51,162832,160397],{"class":72},[51,162834,10439],{"class":64},[51,162836,56663],{"class":175},[51,162838,162839],{"class":53,"line":206},[51,162840,3480],{"emptyLinePlaceholder":1192},[51,162842,162843],{"class":53,"line":212},[51,162844,3480],{"emptyLinePlaceholder":1192},[51,162846,162847],{"class":53,"line":227},[51,162848,162849],{"class":72},"add_count()\n",[51,162851,162852,162854],{"class":53,"line":370},[51,162853,31379],{"class":175},[51,162855,162856],{"class":72},"(count)\n",[40,162858,162859],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162861,162863],{"id":162862},"_510-函数嵌套调用","5.10 函数嵌套调用",[40,162865,162866],{},"一个函数中可以调用另一个函数。",[29,162868,162870],{"className":31342,"code":162869,"language":31344,"meta":35,"style":35},"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",[37,162871,162872,162881,162895,162899,162903,162912,162917,162937,162958,162962,162966,162970],{"__ignoreMap":35},[51,162873,162874,162876,162879],{"class":53,"line":54},[51,162875,32911],{"class":64},[51,162877,162878],{"class":68}," print_line",[51,162880,32917],{"class":72},[51,162882,162883,162885,162887,162889,162891,162893],{"class":53,"line":61},[51,162884,32263],{"class":175},[51,162886,73],{"class":72},[51,162888,33447],{"class":282},[51,162890,7480],{"class":64},[51,162892,79629],{"class":175},[51,162894,90],{"class":72},[51,162896,162897],{"class":53,"line":93},[51,162898,3480],{"emptyLinePlaceholder":1192},[51,162900,162901],{"class":53,"line":99},[51,162902,3480],{"emptyLinePlaceholder":1192},[51,162904,162905,162907,162910],{"class":53,"line":120},[51,162906,32911],{"class":64},[51,162908,162909],{"class":68}," print_info",[51,162911,150339],{"class":72},[51,162913,162914],{"class":53,"line":129},[51,162915,162916],{"class":72},"    print_line()\n",[51,162918,162919,162921,162923,162925,162927,162929,162931,162933,162935],{"class":53,"line":206},[51,162920,32263],{"class":175},[51,162922,73],{"class":72},[51,162924,1311],{"class":64},[51,162926,157646],{"class":282},[51,162928,2140],{"class":175},[51,162930,80774],{"class":72},[51,162932,2190],{"class":175},[51,162934,1503],{"class":282},[51,162936,90],{"class":72},[51,162938,162939,162941,162943,162945,162948,162950,162952,162954,162956],{"class":53,"line":212},[51,162940,32263],{"class":175},[51,162942,73],{"class":72},[51,162944,1311],{"class":64},[51,162946,162947],{"class":282},"\"年龄:",[51,162949,2140],{"class":175},[51,162951,71185],{"class":72},[51,162953,2190],{"class":175},[51,162955,1503],{"class":282},[51,162957,90],{"class":72},[51,162959,162960],{"class":53,"line":227},[51,162961,162916],{"class":72},[51,162963,162964],{"class":53,"line":370},[51,162965,3480],{"emptyLinePlaceholder":1192},[51,162967,162968],{"class":53,"line":387},[51,162969,3480],{"emptyLinePlaceholder":1192},[51,162971,162972,162975,162977,162979,162981],{"class":53,"line":404},[51,162973,162974],{"class":72},"print_info(",[51,162976,150852],{"class":282},[51,162978,13397],{"class":72},[51,162980,1896],{"class":175},[51,162982,90],{"class":72},[40,162984,162985],{},"这种方式可以把小功能组合成大功能。",[14,162987,162989],{"id":162988},"_511-参数检查","5.11 参数检查",[40,162991,162992],{},"函数内部可以检查参数是否合法。",[29,162994,162996],{"className":31342,"code":162995,"language":31344,"meta":35,"style":35},"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",[37,162997,162998,163007,163019,163025,163035,163039,163043,163060,163064,163076,163087,163093],{"__ignoreMap":35},[51,162999,163000,163002,163005],{"class":53,"line":54},[51,163001,32911],{"class":64},[51,163003,163004],{"class":68}," divide",[51,163006,152057],{"class":72},[51,163008,163009,163011,163013,163015,163017],{"class":53,"line":61},[51,163010,4178],{"class":64},[51,163012,11844],{"class":72},[51,163014,4026],{"class":64},[51,163016,5169],{"class":175},[51,163018,4816],{"class":72},[51,163020,163021,163023],{"class":53,"line":93},[51,163022,15714],{"class":64},[51,163024,153136],{"class":175},[51,163026,163027,163029,163031,163033],{"class":53,"line":99},[51,163028,123],{"class":64},[51,163030,11831],{"class":72},[51,163032,1830],{"class":64},[51,163034,152068],{"class":72},[51,163036,163037],{"class":53,"line":120},[51,163038,3480],{"emptyLinePlaceholder":1192},[51,163040,163041],{"class":53,"line":129},[51,163042,3480],{"emptyLinePlaceholder":1192},[51,163044,163045,163047,163049,163052,163054,163056,163058],{"class":53,"line":206},[51,163046,162270],{"class":72},[51,163048,108],{"class":64},[51,163050,163051],{"class":72}," divide(",[51,163053,443],{"class":175},[51,163055,13397],{"class":72},[51,163057,176],{"class":175},[51,163059,90],{"class":72},[51,163061,163062],{"class":53,"line":212},[51,163063,3480],{"emptyLinePlaceholder":1192},[51,163065,163066,163068,163070,163072,163074],{"class":53,"line":227},[51,163067,2633],{"class":64},[51,163069,162516],{"class":72},[51,163071,39891],{"class":64},[51,163073,39897],{"class":175},[51,163075,4816],{"class":72},[51,163077,163078,163080,163082,163085],{"class":53,"line":370},[51,163079,32263],{"class":175},[51,163081,73],{"class":72},[51,163083,163084],{"class":282},"\"除数不能为0\"",[51,163086,90],{"class":72},[51,163088,163089,163091],{"class":53,"line":387},[51,163090,2791],{"class":64},[51,163092,4816],{"class":72},[51,163094,163095,163097],{"class":53,"line":404},[51,163096,32263],{"class":175},[51,163098,77549],{"class":72},[14,163100,163102],{"id":163101},"_512-类型提示","5.12 类型提示",[40,163104,163105],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[29,163107,163109],{"className":31342,"code":163108,"language":31344,"meta":35,"style":35},"def add(a: int, b: int) -> int:\n    return a + b\n",[37,163110,163111,163134],{"__ignoreMap":35},[51,163112,163113,163115,163117,163120,163122,163125,163127,163130,163132],{"class":53,"line":54},[51,163114,32911],{"class":64},[51,163116,69],{"class":68},[51,163118,163119],{"class":72},"(a: ",[51,163121,65],{"class":175},[51,163123,163124],{"class":72},", b: ",[51,163126,65],{"class":175},[51,163128,163129],{"class":72},") -> ",[51,163131,65],{"class":175},[51,163133,4816],{"class":72},[51,163135,163136,163138,163140,163142],{"class":53,"line":61},[51,163137,123],{"class":64},[51,163139,11831],{"class":72},[51,163141,114],{"class":64},[51,163143,152068],{"class":72},[40,163145,163146],{},"字符串参数：",[29,163148,163150],{"className":31342,"code":163149,"language":31344,"meta":35,"style":35},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[37,163151,163152,163169],{"__ignoreMap":35},[51,163153,163154,163156,163158,163161,163163,163165,163167],{"class":53,"line":54},[51,163155,32911],{"class":64},[51,163157,161960],{"class":68},[51,163159,163160],{"class":72},"(name: ",[51,163162,2407],{"class":175},[51,163164,163129],{"class":72},[51,163166,96650],{"class":175},[51,163168,4816],{"class":72},[51,163170,163171,163173,163175,163177,163179,163181,163183,163185,163187],{"class":53,"line":61},[51,163172,32263],{"class":175},[51,163174,73],{"class":72},[51,163176,1311],{"class":64},[51,163178,158018],{"class":282},[51,163180,2140],{"class":175},[51,163182,80774],{"class":72},[51,163184,2190],{"class":175},[51,163186,1503],{"class":282},[51,163188,90],{"class":72},[40,163190,163191],{},"列表参数：",[29,163193,163195],{"className":31342,"code":163194,"language":31344,"meta":35,"style":35},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[37,163196,163197,163216,163224,163236,163245],{"__ignoreMap":35},[51,163198,163199,163201,163204,163207,163209,163212,163214],{"class":53,"line":54},[51,163200,32911],{"class":64},[51,163202,163203],{"class":68}," get_total",[51,163205,163206],{"class":72},"(numbers: list[",[51,163208,65],{"class":175},[51,163210,163211],{"class":72},"]) -> ",[51,163213,65],{"class":175},[51,163215,4816],{"class":72},[51,163217,163218,163220,163222],{"class":53,"line":61},[51,163219,160271],{"class":72},[51,163221,108],{"class":64},[51,163223,48297],{"class":175},[51,163225,163226,163228,163231,163233],{"class":53,"line":93},[51,163227,4278],{"class":64},[51,163229,163230],{"class":72}," number ",[51,163232,27007],{"class":64},[51,163234,163235],{"class":72}," numbers:\n",[51,163237,163238,163240,163242],{"class":53,"line":99},[51,163239,160946],{"class":72},[51,163241,10439],{"class":64},[51,163243,163244],{"class":72}," number\n",[51,163246,163247,163249],{"class":53,"line":120},[51,163248,123],{"class":64},[51,163250,163251],{"class":72}," total\n",[40,163253,163254],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163256,163258],{"id":163257},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[29,163260,163262],{"className":31342,"code":163261,"language":31344,"meta":35,"style":35},"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",[37,163263,163264,163274,163278,163282,163290,163301,163311,163321,163331,163341,163345,163349,163358,163380,163384,163388,163397,163403,163423,163435,163446,163450,163459,163470,163475,163479,163483,163492,163498,163517,163529,163539,163543,163554,163564,163568,163576,163587,163591,163595,163599,163607,163612,163626,163630,163642,163647,163659,163664,163676,163681,163693,163703,163707,163713],{"__ignoreMap":35},[51,163265,163266,163269,163271],{"class":53,"line":54},[51,163267,163268],{"class":72},"balance ",[51,163270,108],{"class":64},[51,163272,163273],{"class":175}," 1000\n",[51,163275,163276],{"class":53,"line":61},[51,163277,3480],{"emptyLinePlaceholder":1192},[51,163279,163280],{"class":53,"line":93},[51,163281,3480],{"emptyLinePlaceholder":1192},[51,163283,163284,163286,163288],{"class":53,"line":99},[51,163285,32911],{"class":64},[51,163287,152997],{"class":68},[51,163289,32917],{"class":72},[51,163291,163292,163294,163296,163299],{"class":53,"line":120},[51,163293,32263],{"class":175},[51,163295,73],{"class":72},[51,163297,163298],{"class":282},"\"====== ATM ======\"",[51,163300,90],{"class":72},[51,163302,163303,163305,163307,163309],{"class":53,"line":129},[51,163304,32263],{"class":175},[51,163306,73],{"class":72},[51,163308,161612],{"class":282},[51,163310,90],{"class":72},[51,163312,163313,163315,163317,163319],{"class":53,"line":206},[51,163314,32263],{"class":175},[51,163316,73],{"class":72},[51,163318,161623],{"class":282},[51,163320,90],{"class":72},[51,163322,163323,163325,163327,163329],{"class":53,"line":212},[51,163324,32263],{"class":175},[51,163326,73],{"class":72},[51,163328,161634],{"class":282},[51,163330,90],{"class":72},[51,163332,163333,163335,163337,163339],{"class":53,"line":227},[51,163334,32263],{"class":175},[51,163336,73],{"class":72},[51,163338,161645],{"class":282},[51,163340,90],{"class":72},[51,163342,163343],{"class":53,"line":370},[51,163344,3480],{"emptyLinePlaceholder":1192},[51,163346,163347],{"class":53,"line":387},[51,163348,3480],{"emptyLinePlaceholder":1192},[51,163350,163351,163353,163356],{"class":53,"line":404},[51,163352,32911],{"class":64},[51,163354,163355],{"class":68}," show_balance",[51,163357,32917],{"class":72},[51,163359,163360,163362,163364,163366,163369,163371,163374,163376,163378],{"class":53,"line":415},[51,163361,32263],{"class":175},[51,163363,73],{"class":72},[51,163365,1311],{"class":64},[51,163367,163368],{"class":282},"\"当前余额:",[51,163370,2140],{"class":175},[51,163372,163373],{"class":72},"balance",[51,163375,2190],{"class":175},[51,163377,157976],{"class":282},[51,163379,90],{"class":72},[51,163381,163382],{"class":53,"line":420},[51,163383,3480],{"emptyLinePlaceholder":1192},[51,163385,163386],{"class":53,"line":429},[51,163387,3480],{"emptyLinePlaceholder":1192},[51,163389,163390,163392,163395],{"class":53,"line":434},[51,163391,32911],{"class":64},[51,163393,163394],{"class":68}," save_money",[51,163396,32917],{"class":72},[51,163398,163399,163401],{"class":53,"line":448},[51,163400,162825],{"class":64},[51,163402,151063],{"class":72},[51,163404,163405,163408,163410,163412,163414,163416,163418,163421],{"class":53,"line":462},[51,163406,163407],{"class":72},"    money ",[51,163409,108],{"class":64},[51,163411,110761],{"class":175},[51,163413,73],{"class":72},[51,163415,54785],{"class":175},[51,163417,73],{"class":72},[51,163419,163420],{"class":282},"\"请输入存款金额:\"",[51,163422,31461],{"class":72},[51,163424,163425,163427,163429,163431,163433],{"class":53,"line":470},[51,163426,4178],{"class":64},[51,163428,151106],{"class":72},[51,163430,2687],{"class":64},[51,163432,5169],{"class":175},[51,163434,4816],{"class":72},[51,163436,163437,163439,163441,163444],{"class":53,"line":2783},[51,163438,33415],{"class":175},[51,163440,73],{"class":72},[51,163442,163443],{"class":282},"\"金额必须大于0\"",[51,163445,90],{"class":72},[51,163447,163448],{"class":53,"line":2788},[51,163449,153325],{"class":64},[51,163451,163452,163455,163457],{"class":53,"line":2817},[51,163453,163454],{"class":72},"    balance ",[51,163456,10439],{"class":64},[51,163458,151139],{"class":72},[51,163460,163461,163463,163465,163468],{"class":53,"line":2822},[51,163462,32263],{"class":175},[51,163464,73],{"class":72},[51,163466,163467],{"class":282},"\"存款成功\"",[51,163469,90],{"class":72},[51,163471,163472],{"class":53,"line":2839},[51,163473,163474],{"class":72},"    show_balance()\n",[51,163476,163477],{"class":53,"line":2844},[51,163478,3480],{"emptyLinePlaceholder":1192},[51,163480,163481],{"class":53,"line":2849},[51,163482,3480],{"emptyLinePlaceholder":1192},[51,163484,163485,163487,163490],{"class":53,"line":2854},[51,163486,32911],{"class":64},[51,163488,163489],{"class":68}," withdraw_money",[51,163491,32917],{"class":72},[51,163493,163494,163496],{"class":53,"line":2868},[51,163495,162825],{"class":64},[51,163497,151063],{"class":72},[51,163499,163500,163502,163504,163506,163508,163510,163512,163515],{"class":53,"line":2873},[51,163501,163407],{"class":72},[51,163503,108],{"class":64},[51,163505,110761],{"class":175},[51,163507,73],{"class":72},[51,163509,54785],{"class":175},[51,163511,73],{"class":72},[51,163513,163514],{"class":282},"\"请输入取款金额:\"",[51,163516,31461],{"class":72},[51,163518,163519,163521,163523,163525,163527],{"class":53,"line":3657},[51,163520,4178],{"class":64},[51,163522,151106],{"class":72},[51,163524,2687],{"class":64},[51,163526,5169],{"class":175},[51,163528,4816],{"class":72},[51,163530,163531,163533,163535,163537],{"class":53,"line":3671},[51,163532,33415],{"class":175},[51,163534,73],{"class":72},[51,163536,163443],{"class":282},[51,163538,90],{"class":72},[51,163540,163541],{"class":53,"line":3679},[51,163542,153325],{"class":64},[51,163544,163545,163547,163549,163551],{"class":53,"line":3684},[51,163546,4178],{"class":64},[51,163548,151106],{"class":72},[51,163550,972],{"class":64},[51,163552,163553],{"class":72}," balance:\n",[51,163555,163556,163558,163560,163562],{"class":53,"line":3690},[51,163557,33415],{"class":175},[51,163559,73],{"class":72},[51,163561,151201],{"class":282},[51,163563,90],{"class":72},[51,163565,163566],{"class":53,"line":3696},[51,163567,153325],{"class":64},[51,163569,163570,163572,163574],{"class":53,"line":3701},[51,163571,163454],{"class":72},[51,163573,151216],{"class":64},[51,163575,151139],{"class":72},[51,163577,163578,163580,163582,163585],{"class":53,"line":8910},[51,163579,32263],{"class":175},[51,163581,73],{"class":72},[51,163583,163584],{"class":282},"\"取款成功\"",[51,163586,90],{"class":72},[51,163588,163589],{"class":53,"line":8934},[51,163590,163474],{"class":72},[51,163592,163593],{"class":53,"line":8939},[51,163594,3480],{"emptyLinePlaceholder":1192},[51,163596,163597],{"class":53,"line":8945},[51,163598,3480],{"emptyLinePlaceholder":1192},[51,163600,163601,163603,163605],{"class":53,"line":8972},[51,163602,109627],{"class":64},[51,163604,96256],{"class":175},[51,163606,4816],{"class":72},[51,163608,163609],{"class":53,"line":8977},[51,163610,163611],{"class":72},"    show_menu()\n",[51,163613,163614,163616,163618,163620,163622,163624],{"class":53,"line":8983},[51,163615,161656],{"class":72},[51,163617,108],{"class":64},[51,163619,61569],{"class":175},[51,163621,73],{"class":72},[51,163623,154037],{"class":282},[51,163625,90],{"class":72},[51,163627,163628],{"class":53,"line":8995},[51,163629,3480],{"emptyLinePlaceholder":1192},[51,163631,163632,163634,163636,163638,163640],{"class":53,"line":9007},[51,163633,4178],{"class":64},[51,163635,154050],{"class":72},[51,163637,4026],{"class":64},[51,163639,154055],{"class":282},[51,163641,4816],{"class":72},[51,163643,163644],{"class":53,"line":9019},[51,163645,163646],{"class":72},"        show_balance()\n",[51,163648,163649,163651,163653,163655,163657],{"class":53,"line":10678},[51,163650,40257],{"class":64},[51,163652,154050],{"class":72},[51,163654,4026],{"class":64},[51,163656,154074],{"class":282},[51,163658,4816],{"class":72},[51,163660,163661],{"class":53,"line":10703},[51,163662,163663],{"class":72},"        save_money()\n",[51,163665,163666,163668,163670,163672,163674],{"class":53,"line":10726},[51,163667,40257],{"class":64},[51,163669,154050],{"class":72},[51,163671,4026],{"class":64},[51,163673,154092],{"class":282},[51,163675,4816],{"class":72},[51,163677,163678],{"class":53,"line":10750},[51,163679,163680],{"class":72},"        withdraw_money()\n",[51,163682,163683,163685,163687,163689,163691],{"class":53,"line":10755},[51,163684,40257],{"class":64},[51,163686,154050],{"class":72},[51,163688,4026],{"class":64},[51,163690,154146],{"class":282},[51,163692,4816],{"class":72},[51,163694,163695,163697,163699,163701],{"class":53,"line":10760},[51,163696,33415],{"class":175},[51,163698,73],{"class":72},[51,163700,154157],{"class":282},[51,163702,90],{"class":72},[51,163704,163705],{"class":53,"line":10765},[51,163706,32591],{"class":64},[51,163708,163709,163711],{"class":53,"line":10774},[51,163710,158986],{"class":64},[51,163712,4816],{"class":72},[51,163714,163715,163717,163719,163721],{"class":53,"line":10779},[51,163716,33415],{"class":175},[51,163718,73],{"class":72},[51,163720,154178],{"class":282},[51,163722,90],{"class":72},[40,163724,163725],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163727,163729],{"id":163728},"_514-易错点","5.14 易错点",[19,163731,163732,163735,163738,163743,163748,163751],{},[22,163733,163734],{},"函数定义后必须调用才会执行。",[22,163736,163737],{},"函数名后面有括号才是调用。",[22,163739,163740,163742],{},[37,163741,18008],{}," 后面的代码不会执行。",[22,163744,163745,163746,29349],{},"没有返回值的函数默认返回 ",[37,163747,96650],{},[22,163749,163750],{},"局部变量不能在函数外部访问。",[22,163752,163753,163754,163756],{},"不要滥用 ",[37,163755,162790],{},"，更好的方式是让函数返回新值。",[40,163758,163759,163760,163762],{},"例如不用 ",[37,163761,162790],{}," 改写存款：",[29,163764,163766],{"className":31342,"code":163765,"language":31344,"meta":35,"style":35},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[37,163767,163768,163777,163788,163792,163796,163804,163817],{"__ignoreMap":35},[51,163769,163770,163772,163774],{"class":53,"line":54},[51,163771,32911],{"class":64},[51,163773,163394],{"class":68},[51,163775,163776],{"class":72},"(balance, money):\n",[51,163778,163779,163781,163784,163786],{"class":53,"line":61},[51,163780,123],{"class":64},[51,163782,163783],{"class":72}," balance ",[51,163785,114],{"class":64},[51,163787,151139],{"class":72},[51,163789,163790],{"class":53,"line":93},[51,163791,3480],{"emptyLinePlaceholder":1192},[51,163793,163794],{"class":53,"line":99},[51,163795,3480],{"emptyLinePlaceholder":1192},[51,163797,163798,163800,163802],{"class":53,"line":120},[51,163799,163268],{"class":72},[51,163801,108],{"class":64},[51,163803,163273],{"class":175},[51,163805,163806,163808,163810,163813,163815],{"class":53,"line":129},[51,163807,163268],{"class":72},[51,163809,108],{"class":64},[51,163811,163812],{"class":72}," save_money(balance, ",[51,163814,2812],{"class":175},[51,163816,90],{"class":72},[51,163818,163819,163821],{"class":53,"line":206},[51,163820,31379],{"class":175},[51,163822,163823],{"class":72},"(balance)\n",[14,163825,163827],{"id":163826},"_515-本章练习","5.15 本章练习",[19,163829,163830,163837,163843,163849,163855],{},[22,163831,163832,163833,163836],{},"定义函数 ",[37,163834,163835],{},"print_student(name, age)","，输出学生信息。",[22,163838,163832,163839,163842],{},[37,163840,163841],{},"get_max(a, b, c)","，返回三个数中的最大值。",[22,163844,163832,163845,163848],{},[37,163846,163847],{},"is_even(num)","，判断一个数是否为偶数。",[22,163850,163832,163851,163854],{},[37,163852,163853],{},"calculate_bmi(weight, height)","，返回 BMI。",[22,163856,163857],{},"把第 4 章的菜单程序拆分成多个函数。",[1179,163859,163860],{},"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":35,"searchDepth":61,"depth":61,"links":163862},[163863,163864,163865,163866,163867,163868,163869,163870,163871,163875,163876,163877,163878,163879,163880],{"id":161883,"depth":61,"text":161884},{"id":161924,"depth":61,"text":161925},{"id":162014,"depth":61,"text":162015},{"id":162095,"depth":61,"text":162096},{"id":162228,"depth":61,"text":162229},{"id":162350,"depth":61,"text":162351},{"id":162472,"depth":61,"text":162473},{"id":162549,"depth":61,"text":162550},{"id":162671,"depth":61,"text":162672,"children":163872},[163873,163874],{"id":162675,"depth":93,"text":162676},{"id":162733,"depth":93,"text":162734},{"id":162862,"depth":61,"text":162863},{"id":162988,"depth":61,"text":162989},{"id":163101,"depth":61,"text":163102},{"id":163257,"depth":61,"text":163258},{"id":163728,"depth":61,"text":163729},{"id":163826,"depth":61,"text":163827},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161875,"description":24339},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163887,"title":163888,"body":163889,"description":24339,"extension":1190,"meta":166933,"navigation":1192,"path":166934,"seo":166935,"stem":166936,"__hash__":166937},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163890,"toc":166914},[163891,163894,163898,163901,163904,164008,164011,164015,164018,164098,164101,164105,164108,164168,164171,164207,164210,164225,164229,164302,164305,164360,164363,164433,164436,164520,164530,164588,164592,164637,164640,164666,164669,164775,164779,164782,164824,164827,164891,164894,164898,164901,164962,164965,164995,164998,165036,165040,165043,165052,165055,165179,165182,165223,165227,165230,165241,165281,165284,165299,165304,165307,165374,165377,165467,165471,165474,165522,165525,165552,165554,165584,165587,165607,165610,165641,165644,165677,165681,165684,165708,165711,165735,165738,165762,165766,165769,165899,165902,165982,165985,166060,166064,166067,166117,166120,166162,166165,166189,166191,166215,166218,166273,166276,166342,166346,166349,166352,166390,166393,166446,166449,166495,166498,166531,166534,166538,166857,166861,166890,166894,166911],[10,163892,163888],{"id":163893},"_6-数据容器",[14,163895,163897],{"id":163896},"_61-什么是数据容器","6.1 什么是数据容器",[40,163899,163900],{},"数据容器用于一次保存多个数据。",[40,163902,163903],{},"常见容器：",[1393,163905,163906,163923],{},[1396,163907,163908],{},[1399,163909,163910,163912,163915,163918,163921],{},[1402,163911,26735],{},[1402,163913,163914],{},"是否有序",[1402,163916,163917],{},"是否可变",[1402,163919,163920],{},"是否允许重复",[1402,163922,28456],{},[1439,163924,163925,163943,163959,163974,163991],{},[1399,163926,163927,163930,163933,163936,163939],{},[1444,163928,163929],{},"list列表",[1444,163931,163932],{},"有序",[1444,163934,163935],{},"可变",[1444,163937,163938],{},"允许",[1444,163940,163941],{},[37,163942,156221],{},[1399,163944,163945,163948,163950,163953,163955],{},[1444,163946,163947],{},"tuple元组",[1444,163949,163932],{},[1444,163951,163952],{},"不可变",[1444,163954,163938],{},[1444,163956,163957],{},[37,163958,156234],{},[1399,163960,163961,163964,163966,163968,163970],{},[1444,163962,163963],{},"str字符串",[1444,163965,163932],{},[1444,163967,163952],{},[1444,163969,163938],{},[1444,163971,163972],{},[37,163973,156844],{},[1399,163975,163976,163979,163982,163984,163987],{},[1444,163977,163978],{},"set集合",[1444,163980,163981],{},"无序",[1444,163983,163935],{},[1444,163985,163986],{},"不允许",[1444,163988,163989],{},[37,163990,156259],{},[1399,163992,163993,163996,163998,164000,164003],{},[1444,163994,163995],{},"dict字典",[1444,163997,163932],{},[1444,163999,163935],{},[1444,164001,164002],{},"key不允许重复",[1444,164004,164005],{},[37,164006,164007],{},"{\"name\": \"小明\"}",[40,164009,164010],{},"Python 3.7 之后，字典保持插入顺序。",[14,164012,164014],{"id":164013},"_62-列表list","6.2 列表list",[40,164016,164017],{},"列表用于保存一组有顺序的数据。",[29,164019,164021],{"className":31342,"code":164020,"language":31344,"meta":35,"style":35},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[37,164022,164023,164043,164068,164089],{"__ignoreMap":35},[51,164024,164025,164027,164029,164031,164033,164035,164037,164039,164041],{"class":53,"line":54},[51,164026,161344],{"class":72},[51,164028,108],{"class":64},[51,164030,53190],{"class":72},[51,164032,150852],{"class":282},[51,164034,13397],{"class":72},[51,164036,151900],{"class":282},[51,164038,13397],{"class":72},[51,164040,160695],{"class":282},[51,164042,34210],{"class":72},[51,164044,164045,164048,164050,164052,164054,164056,164058,164060,164062,164064,164066],{"class":53,"line":61},[51,164046,164047],{"class":72},"numbers ",[51,164049,108],{"class":64},[51,164051,53190],{"class":72},[51,164053,791],{"class":175},[51,164055,13397],{"class":72},[51,164057,1334],{"class":175},[51,164059,13397],{"class":72},[51,164061,1328],{"class":175},[51,164063,13397],{"class":72},[51,164065,1543],{"class":175},[51,164067,34210],{"class":72},[51,164069,164070,164073,164075,164077,164079,164081,164083,164085,164087],{"class":53,"line":93},[51,164071,164072],{"class":72},"mixed ",[51,164074,108],{"class":64},[51,164076,53190],{"class":72},[51,164078,150852],{"class":282},[51,164080,13397],{"class":72},[51,164082,1896],{"class":175},[51,164084,13397],{"class":72},[51,164086,32440],{"class":175},[51,164088,34210],{"class":72},[51,164090,164091,164094,164096],{"class":53,"line":99},[51,164092,164093],{"class":72},"empty ",[51,164095,108],{"class":64},[51,164097,52802],{"class":72},[40,164099,164100],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164102,164104],{"id":164103},"_63-列表索引","6.3 列表索引",[40,164106,164107],{},"正向索引从 0 开始：",[29,164109,164111],{"className":31342,"code":164110,"language":31344,"meta":35,"style":35},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[37,164112,164113,164133,164137,164148,164158],{"__ignoreMap":35},[51,164114,164115,164117,164119,164121,164123,164125,164127,164129,164131],{"class":53,"line":54},[51,164116,161344],{"class":72},[51,164118,108],{"class":64},[51,164120,53190],{"class":72},[51,164122,150852],{"class":282},[51,164124,13397],{"class":72},[51,164126,151900],{"class":282},[51,164128,13397],{"class":72},[51,164130,160695],{"class":282},[51,164132,34210],{"class":72},[51,164134,164135],{"class":53,"line":61},[51,164136,3480],{"emptyLinePlaceholder":1192},[51,164138,164139,164141,164144,164146],{"class":53,"line":93},[51,164140,31379],{"class":175},[51,164142,164143],{"class":72},"(names[",[51,164145,176],{"class":175},[51,164147,5731],{"class":72},[51,164149,164150,164152,164154,164156],{"class":53,"line":99},[51,164151,31379],{"class":175},[51,164153,164143],{"class":72},[51,164155,791],{"class":175},[51,164157,5731],{"class":72},[51,164159,164160,164162,164164,164166],{"class":53,"line":120},[51,164161,31379],{"class":175},[51,164163,164143],{"class":72},[51,164165,1334],{"class":175},[51,164167,5731],{"class":72},[40,164169,164170],{},"反向索引从 -1 开始：",[29,164172,164174],{"className":31342,"code":164173,"language":31344,"meta":35,"style":35},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[37,164175,164176,164192],{"__ignoreMap":35},[51,164177,164178,164180,164182,164184,164186,164189],{"class":53,"line":54},[51,164179,31379],{"class":175},[51,164181,164143],{"class":72},[51,164183,1778],{"class":64},[51,164185,791],{"class":175},[51,164187,164188],{"class":72},"])  ",[51,164190,164191],{"class":57},"# 小刚\n",[51,164193,164194,164196,164198,164200,164202,164204],{"class":53,"line":61},[51,164195,31379],{"class":175},[51,164197,164143],{"class":72},[51,164199,1778],{"class":64},[51,164201,1334],{"class":175},[51,164203,164188],{"class":72},[51,164205,164206],{"class":57},"# 小红\n",[40,164208,164209],{},"索引越界会报错：",[29,164211,164213],{"className":31342,"code":164212,"language":31344,"meta":35,"style":35},"print(names[3])\n",[37,164214,164215],{"__ignoreMap":35},[51,164216,164217,164219,164221,164223],{"class":53,"line":54},[51,164218,31379],{"class":175},[51,164220,164143],{"class":72},[51,164222,1328],{"class":175},[51,164224,5731],{"class":72},[14,164226,164228],{"id":164227},"_64-列表常用方法","6.4 列表常用方法",[29,164230,164232],{"className":31342,"code":164231,"language":31344,"meta":35,"style":35},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[37,164233,164234,164250,164254,164263,164277,164291,164295],{"__ignoreMap":35},[51,164235,164236,164238,164240,164242,164244,164246,164248],{"class":53,"line":54},[51,164237,161344],{"class":72},[51,164239,108],{"class":64},[51,164241,53190],{"class":72},[51,164243,150852],{"class":282},[51,164245,13397],{"class":72},[51,164247,151900],{"class":282},[51,164249,34210],{"class":72},[51,164251,164252],{"class":53,"line":61},[51,164253,3480],{"emptyLinePlaceholder":1192},[51,164255,164256,164259,164261],{"class":53,"line":93},[51,164257,164258],{"class":72},"names.append(",[51,164260,160695],{"class":282},[51,164262,90],{"class":72},[51,164264,164265,164268,164270,164272,164275],{"class":53,"line":99},[51,164266,164267],{"class":72},"names.insert(",[51,164269,791],{"class":175},[51,164271,13397],{"class":72},[51,164273,164274],{"class":282},"\"小李\"",[51,164276,90],{"class":72},[51,164278,164279,164282,164284,164286,164289],{"class":53,"line":120},[51,164280,164281],{"class":72},"names.extend([",[51,164283,9645],{"class":282},[51,164285,13397],{"class":72},[51,164287,164288],{"class":282},"\"小赵\"",[51,164290,5731],{"class":72},[51,164292,164293],{"class":53,"line":129},[51,164294,3480],{"emptyLinePlaceholder":1192},[51,164296,164297,164299],{"class":53,"line":206},[51,164298,31379],{"class":175},[51,164300,164301],{"class":72},"(names)\n",[40,164303,164304],{},"删除元素：",[29,164306,164308],{"className":31342,"code":164307,"language":31344,"meta":35,"style":35},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[37,164309,164310,164319,164329,164343,164355],{"__ignoreMap":35},[51,164311,164312,164315,164317],{"class":53,"line":54},[51,164313,164314],{"class":72},"names.remove(",[51,164316,151900],{"class":282},[51,164318,90],{"class":72},[51,164320,164321,164324,164326],{"class":53,"line":61},[51,164322,164323],{"class":72},"last ",[51,164325,108],{"class":64},[51,164327,164328],{"class":72}," names.pop()\n",[51,164330,164331,164334,164336,164339,164341],{"class":53,"line":93},[51,164332,164333],{"class":72},"first ",[51,164335,108],{"class":64},[51,164337,164338],{"class":72}," names.pop(",[51,164340,176],{"class":175},[51,164342,90],{"class":72},[51,164344,164345,164348,164351,164353],{"class":53,"line":99},[51,164346,164347],{"class":64},"del",[51,164349,164350],{"class":72}," names[",[51,164352,176],{"class":175},[51,164354,34210],{"class":72},[51,164356,164357],{"class":53,"line":120},[51,164358,164359],{"class":72},"names.clear()\n",[40,164361,164362],{},"查询和统计：",[29,164364,164366],{"className":31342,"code":164365,"language":31344,"meta":35,"style":35},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[37,164367,164368,164396,164400,164411,164422],{"__ignoreMap":35},[51,164369,164370,164372,164374,164376,164378,164380,164382,164384,164386,164388,164390,164392,164394],{"class":53,"line":54},[51,164371,164047],{"class":72},[51,164373,108],{"class":64},[51,164375,53190],{"class":72},[51,164377,791],{"class":175},[51,164379,13397],{"class":72},[51,164381,1334],{"class":175},[51,164383,13397],{"class":72},[51,164385,1328],{"class":175},[51,164387,13397],{"class":72},[51,164389,1334],{"class":175},[51,164391,13397],{"class":72},[51,164393,1543],{"class":175},[51,164395,34210],{"class":72},[51,164397,164398],{"class":53,"line":61},[51,164399,3480],{"emptyLinePlaceholder":1192},[51,164401,164402,164404,164407,164409],{"class":53,"line":93},[51,164403,31379],{"class":175},[51,164405,164406],{"class":72},"(numbers.index(",[51,164408,1328],{"class":175},[51,164410,31461],{"class":72},[51,164412,164413,164415,164418,164420],{"class":53,"line":99},[51,164414,31379],{"class":175},[51,164416,164417],{"class":72},"(numbers.count(",[51,164419,1334],{"class":175},[51,164421,31461],{"class":72},[51,164423,164424,164426,164428,164430],{"class":53,"line":120},[51,164425,31379],{"class":175},[51,164427,73],{"class":72},[51,164429,8320],{"class":175},[51,164431,164432],{"class":72},"(numbers))\n",[40,164434,164435],{},"排序：",[29,164437,164439],{"className":31342,"code":164438,"language":31344,"meta":35,"style":35},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[37,164440,164441,164465,164469,164474,164481,164485,164499,164505,164509,164514],{"__ignoreMap":35},[51,164442,164443,164445,164447,164449,164451,164453,164455,164457,164459,164461,164463],{"class":53,"line":54},[51,164444,164047],{"class":72},[51,164446,108],{"class":64},[51,164448,53190],{"class":72},[51,164450,1328],{"class":175},[51,164452,13397],{"class":72},[51,164454,791],{"class":175},[51,164456,13397],{"class":72},[51,164458,1568],{"class":175},[51,164460,13397],{"class":72},[51,164462,1334],{"class":175},[51,164464,34210],{"class":72},[51,164466,164467],{"class":53,"line":61},[51,164468,3480],{"emptyLinePlaceholder":1192},[51,164470,164471],{"class":53,"line":93},[51,164472,164473],{"class":72},"numbers.sort()\n",[51,164475,164476,164478],{"class":53,"line":99},[51,164477,31379],{"class":175},[51,164479,164480],{"class":72},"(numbers)\n",[51,164482,164483],{"class":53,"line":120},[51,164484,3480],{"emptyLinePlaceholder":1192},[51,164486,164487,164490,164493,164495,164497],{"class":53,"line":129},[51,164488,164489],{"class":72},"numbers.sort(",[51,164491,164492],{"class":78},"reverse",[51,164494,108],{"class":64},[51,164496,32440],{"class":175},[51,164498,90],{"class":72},[51,164500,164501,164503],{"class":53,"line":206},[51,164502,31379],{"class":175},[51,164504,164480],{"class":72},[51,164506,164507],{"class":53,"line":212},[51,164508,3480],{"emptyLinePlaceholder":1192},[51,164510,164511],{"class":53,"line":227},[51,164512,164513],{"class":72},"numbers.reverse()\n",[51,164515,164516,164518],{"class":53,"line":370},[51,164517,31379],{"class":175},[51,164519,164480],{"class":72},[40,164521,164522,164525,164526,164529],{},[37,164523,164524],{},"sort()"," 会修改原列表，",[37,164527,164528],{},"sorted()"," 返回新列表。",[29,164531,164533],{"className":31342,"code":164532,"language":31344,"meta":35,"style":35},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[37,164534,164535,164559,164571,164575,164581],{"__ignoreMap":35},[51,164536,164537,164539,164541,164543,164545,164547,164549,164551,164553,164555,164557],{"class":53,"line":54},[51,164538,164047],{"class":72},[51,164540,108],{"class":64},[51,164542,53190],{"class":72},[51,164544,1328],{"class":175},[51,164546,13397],{"class":72},[51,164548,791],{"class":175},[51,164550,13397],{"class":72},[51,164552,1568],{"class":175},[51,164554,13397],{"class":72},[51,164556,1334],{"class":175},[51,164558,34210],{"class":72},[51,164560,164561,164564,164566,164569],{"class":53,"line":61},[51,164562,164563],{"class":72},"new_numbers ",[51,164565,108],{"class":64},[51,164567,164568],{"class":175}," sorted",[51,164570,164480],{"class":72},[51,164572,164573],{"class":53,"line":93},[51,164574,3480],{"emptyLinePlaceholder":1192},[51,164576,164577,164579],{"class":53,"line":99},[51,164578,31379],{"class":175},[51,164580,164480],{"class":72},[51,164582,164583,164585],{"class":53,"line":120},[51,164584,31379],{"class":175},[51,164586,164587],{"class":72},"(new_numbers)\n",[14,164589,164591],{"id":164590},"_65-列表遍历","6.5 列表遍历",[29,164593,164595],{"className":31342,"code":164594,"language":31344,"meta":35,"style":35},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[37,164596,164597,164617,164621,164631],{"__ignoreMap":35},[51,164598,164599,164601,164603,164605,164607,164609,164611,164613,164615],{"class":53,"line":54},[51,164600,161344],{"class":72},[51,164602,108],{"class":64},[51,164604,53190],{"class":72},[51,164606,150852],{"class":282},[51,164608,13397],{"class":72},[51,164610,151900],{"class":282},[51,164612,13397],{"class":72},[51,164614,160695],{"class":282},[51,164616,34210],{"class":72},[51,164618,164619],{"class":53,"line":61},[51,164620,3480],{"emptyLinePlaceholder":1192},[51,164622,164623,164625,164627,164629],{"class":53,"line":93},[51,164624,4102],{"class":64},[51,164626,161380],{"class":72},[51,164628,27007],{"class":64},[51,164630,161385],{"class":72},[51,164632,164633,164635],{"class":53,"line":99},[51,164634,32263],{"class":175},[51,164636,151624],{"class":72},[40,164638,164639],{},"需要索引时：",[29,164641,164643],{"className":31342,"code":164642,"language":31344,"meta":35,"style":35},"for index, name in enumerate(names):\n    print(index, name)\n",[37,164644,164645,164659],{"__ignoreMap":35},[51,164646,164647,164649,164652,164654,164656],{"class":53,"line":54},[51,164648,4102],{"class":64},[51,164650,164651],{"class":72}," index, name ",[51,164653,27007],{"class":64},[51,164655,32570],{"class":175},[51,164657,164658],{"class":72},"(names):\n",[51,164660,164661,164663],{"class":53,"line":61},[51,164662,32263],{"class":175},[51,164664,164665],{"class":72},"(index, name)\n",[40,164667,164668],{},"统计总分：",[29,164670,164672],{"className":31342,"code":164671,"language":31344,"meta":35,"style":35},"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",[37,164673,164674,164699,164707,164711,164722,164730,164734,164751],{"__ignoreMap":35},[51,164675,164676,164679,164681,164683,164685,164687,164689,164691,164693,164695,164697],{"class":53,"line":54},[51,164677,164678],{"class":72},"scores ",[51,164680,108],{"class":64},[51,164682,53190],{"class":72},[51,164684,2106],{"class":175},[51,164686,13397],{"class":72},[51,164688,1981],{"class":175},[51,164690,13397],{"class":72},[51,164692,1506],{"class":175},[51,164694,13397],{"class":72},[51,164696,1807],{"class":175},[51,164698,34210],{"class":72},[51,164700,164701,164703,164705],{"class":53,"line":61},[51,164702,158224],{"class":72},[51,164704,108],{"class":64},[51,164706,48297],{"class":175},[51,164708,164709],{"class":53,"line":93},[51,164710,3480],{"emptyLinePlaceholder":1192},[51,164712,164713,164715,164717,164719],{"class":53,"line":99},[51,164714,4102],{"class":64},[51,164716,158747],{"class":72},[51,164718,27007],{"class":64},[51,164720,164721],{"class":72}," scores:\n",[51,164723,164724,164726,164728],{"class":53,"line":120},[51,164725,160271],{"class":72},[51,164727,10439],{"class":64},[51,164729,2678],{"class":72},[51,164731,164732],{"class":53,"line":129},[51,164733,3480],{"emptyLinePlaceholder":1192},[51,164735,164736,164739,164741,164744,164746,164748],{"class":53,"line":206},[51,164737,164738],{"class":72},"avg ",[51,164740,108],{"class":64},[51,164742,164743],{"class":72}," total ",[51,164745,1830],{"class":64},[51,164747,8293],{"class":175},[51,164749,164750],{"class":72},"(scores)\n",[51,164752,164753,164755,164757,164759,164762,164764,164767,164769,164771,164773],{"class":53,"line":212},[51,164754,31379],{"class":175},[51,164756,73],{"class":72},[51,164758,1311],{"class":64},[51,164760,164761],{"class":282},"\"平均分:",[51,164763,2140],{"class":175},[51,164765,164766],{"class":72},"avg",[51,164768,158123],{"class":64},[51,164770,2190],{"class":175},[51,164772,1503],{"class":282},[51,164774,90],{"class":72},[14,164776,164778],{"id":164777},"_66-元组tuple","6.6 元组tuple",[40,164780,164781],{},"元组和列表类似，但不可修改。",[29,164783,164785],{"className":31342,"code":164784,"language":31344,"meta":35,"style":35},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[37,164786,164787,164804],{"__ignoreMap":35},[51,164788,164789,164792,164794,164796,164798,164800,164802],{"class":53,"line":54},[51,164790,164791],{"class":72},"point ",[51,164793,108],{"class":64},[51,164795,2750],{"class":72},[51,164797,443],{"class":175},[51,164799,13397],{"class":72},[51,164801,457],{"class":175},[51,164803,90],{"class":72},[51,164805,164806,164808,164810,164812,164814,164816,164818,164820,164822],{"class":53,"line":61},[51,164807,117278],{"class":72},[51,164809,108],{"class":64},[51,164811,2750],{"class":72},[51,164813,150852],{"class":282},[51,164815,13397],{"class":72},[51,164817,1896],{"class":175},[51,164819,13397],{"class":72},[51,164821,70233],{"class":282},[51,164823,90],{"class":72},[40,164825,164826],{},"单元素元组必须加逗号：",[29,164828,164830],{"className":31342,"code":164829,"language":31344,"meta":35,"style":35},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[37,164831,164832,164846,164859,164863,164877],{"__ignoreMap":35},[51,164833,164834,164837,164839,164841,164843],{"class":53,"line":54},[51,164835,164836],{"class":72},"t1 ",[51,164838,108],{"class":64},[51,164840,2750],{"class":72},[51,164842,443],{"class":175},[51,164844,164845],{"class":72},",)\n",[51,164847,164848,164851,164853,164855,164857],{"class":53,"line":61},[51,164849,164850],{"class":72},"t2 ",[51,164852,108],{"class":64},[51,164854,2750],{"class":72},[51,164856,443],{"class":175},[51,164858,90],{"class":72},[51,164860,164861],{"class":53,"line":93},[51,164862,3480],{"emptyLinePlaceholder":1192},[51,164864,164865,164867,164869,164871,164874],{"class":53,"line":99},[51,164866,31379],{"class":175},[51,164868,73],{"class":72},[51,164870,104071],{"class":175},[51,164872,164873],{"class":72},"(t1))  ",[51,164875,164876],{"class":57},"# tuple\n",[51,164878,164879,164881,164883,164885,164888],{"class":53,"line":120},[51,164880,31379],{"class":175},[51,164882,73],{"class":72},[51,164884,104071],{"class":175},[51,164886,164887],{"class":72},"(t2))  ",[51,164889,164890],{"class":57},"# int\n",[40,164892,164893],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164895,164897],{"id":164896},"_67-字符串str","6.7 字符串str",[40,164899,164900],{},"字符串也是序列，可以索引、切片和遍历。",[29,164902,164904],{"className":31342,"code":164903,"language":31344,"meta":35,"style":35},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[37,164905,164906,164914,164918,164929,164941,164945,164956],{"__ignoreMap":35},[51,164907,164908,164910,164912],{"class":53,"line":54},[51,164909,157408],{"class":72},[51,164911,108],{"class":64},[51,164913,160645],{"class":282},[51,164915,164916],{"class":53,"line":61},[51,164917,3480],{"emptyLinePlaceholder":1192},[51,164919,164920,164922,164925,164927],{"class":53,"line":93},[51,164921,31379],{"class":175},[51,164923,164924],{"class":72},"(text[",[51,164926,176],{"class":175},[51,164928,5731],{"class":72},[51,164930,164931,164933,164935,164937,164939],{"class":53,"line":99},[51,164932,31379],{"class":175},[51,164934,164924],{"class":72},[51,164936,1778],{"class":64},[51,164938,791],{"class":175},[51,164940,5731],{"class":72},[51,164942,164943],{"class":53,"line":120},[51,164944,3480],{"emptyLinePlaceholder":1192},[51,164946,164947,164949,164951,164953],{"class":53,"line":129},[51,164948,4102],{"class":64},[51,164950,160656],{"class":72},[51,164952,27007],{"class":64},[51,164954,164955],{"class":72}," text:\n",[51,164957,164958,164960],{"class":53,"line":206},[51,164959,32263],{"class":175},[51,164961,160667],{"class":72},[40,164963,164964],{},"字符串不可变：",[29,164966,164968],{"className":31342,"code":164967,"language":31344,"meta":35,"style":35},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[37,164969,164970,164978],{"__ignoreMap":35},[51,164971,164972,164974,164976],{"class":53,"line":54},[51,164973,157408],{"class":72},[51,164975,108],{"class":64},[51,164977,160645],{"class":282},[51,164979,164980,164983,164985,164987,164989,164992],{"class":53,"line":61},[51,164981,164982],{"class":72},"text[",[51,164984,176],{"class":175},[51,164986,5517],{"class":72},[51,164988,108],{"class":64},[51,164990,164991],{"class":282}," \"P\"",[51,164993,164994],{"class":57},"  # 报错\n",[40,164996,164997],{},"如果要得到新字符串：",[29,164999,165001],{"className":31342,"code":165000,"language":31344,"meta":35,"style":35},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[37,165002,165003,165011,165029],{"__ignoreMap":35},[51,165004,165005,165007,165009],{"class":53,"line":54},[51,165006,157408],{"class":72},[51,165008,108],{"class":64},[51,165010,160645],{"class":282},[51,165012,165013,165015,165017,165019,165021,165024,165026],{"class":53,"line":61},[51,165014,157408],{"class":72},[51,165016,108],{"class":64},[51,165018,164991],{"class":282},[51,165020,46530],{"class":64},[51,165022,165023],{"class":72}," text[",[51,165025,791],{"class":175},[51,165027,165028],{"class":72},":]\n",[51,165030,165031,165033],{"class":53,"line":93},[51,165032,31379],{"class":175},[51,165034,165035],{"class":72},"(text)\n",[14,165037,165039],{"id":165038},"_68-切片","6.8 切片",[40,165041,165042],{},"切片用于从序列中取一部分。",[29,165044,165046],{"className":31342,"code":165045,"language":31344,"meta":35,"style":35},"序列[开始:结束:步长]\n",[37,165047,165048],{"__ignoreMap":35},[51,165049,165050],{"class":53,"line":54},[51,165051,165045],{"class":72},[40,165053,165054],{},"结束位置不包含。",[29,165056,165058],{"className":31342,"code":165057,"language":31344,"meta":35,"style":35},"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",[37,165059,165060,165097,165101,165120,165135,165149,165163],{"__ignoreMap":35},[51,165061,165062,165065,165067,165069,165071,165073,165075,165077,165079,165081,165083,165085,165087,165089,165091,165093,165095],{"class":53,"line":54},[51,165063,165064],{"class":72},"nums ",[51,165066,108],{"class":64},[51,165068,53190],{"class":72},[51,165070,176],{"class":175},[51,165072,13397],{"class":72},[51,165074,791],{"class":175},[51,165076,13397],{"class":72},[51,165078,1334],{"class":175},[51,165080,13397],{"class":72},[51,165082,1328],{"class":175},[51,165084,13397],{"class":72},[51,165086,1543],{"class":175},[51,165088,13397],{"class":72},[51,165090,1568],{"class":175},[51,165092,13397],{"class":72},[51,165094,1593],{"class":175},[51,165096,34210],{"class":72},[51,165098,165099],{"class":53,"line":61},[51,165100,3480],{"emptyLinePlaceholder":1192},[51,165102,165103,165105,165108,165110,165112,165114,165117],{"class":53,"line":93},[51,165104,31379],{"class":175},[51,165106,165107],{"class":72},"(nums[",[51,165109,791],{"class":175},[51,165111,984],{"class":72},[51,165113,1543],{"class":175},[51,165115,165116],{"class":72},"])    ",[51,165118,165119],{"class":57},"# [1, 2, 3]\n",[51,165121,165122,165124,165127,165129,165132],{"class":53,"line":99},[51,165123,31379],{"class":175},[51,165125,165126],{"class":72},"(nums[:",[51,165128,1328],{"class":175},[51,165130,165131],{"class":72},"])     ",[51,165133,165134],{"class":57},"# [0, 1, 2]\n",[51,165136,165137,165139,165141,165143,165146],{"class":53,"line":120},[51,165138,31379],{"class":175},[51,165140,165107],{"class":72},[51,165142,1328],{"class":175},[51,165144,165145],{"class":72},":])     ",[51,165147,165148],{"class":57},"# [3, 4, 5, 6]\n",[51,165150,165151,165153,165156,165158,165160],{"class":53,"line":129},[51,165152,31379],{"class":175},[51,165154,165155],{"class":72},"(nums[::",[51,165157,1334],{"class":175},[51,165159,165116],{"class":72},[51,165161,165162],{"class":57},"# [0, 2, 4, 6]\n",[51,165164,165165,165167,165169,165171,165173,165176],{"class":53,"line":206},[51,165166,31379],{"class":175},[51,165168,165155],{"class":72},[51,165170,1778],{"class":64},[51,165172,791],{"class":175},[51,165174,165175],{"class":72},"])   ",[51,165177,165178],{"class":57},"# 反转\n",[40,165180,165181],{},"字符串切片：",[29,165183,165185],{"className":31342,"code":165184,"language":31344,"meta":35,"style":35},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[37,165186,165187,165196,165210],{"__ignoreMap":35},[51,165188,165189,165191,165193],{"class":53,"line":54},[51,165190,157408],{"class":72},[51,165192,108],{"class":64},[51,165194,165195],{"class":282}," \"abcdef\"\n",[51,165197,165198,165200,165202,165204,165206,165208],{"class":53,"line":61},[51,165199,31379],{"class":175},[51,165201,164924],{"class":72},[51,165203,791],{"class":175},[51,165205,984],{"class":72},[51,165207,1543],{"class":175},[51,165209,5731],{"class":72},[51,165211,165212,165214,165217,165219,165221],{"class":53,"line":93},[51,165213,31379],{"class":175},[51,165215,165216],{"class":72},"(text[::",[51,165218,1778],{"class":64},[51,165220,791],{"class":175},[51,165222,5731],{"class":72},[14,165224,165226],{"id":165225},"_69-集合set","6.9 集合set",[40,165228,165229],{},"集合特点：",[19,165231,165232,165235,165238],{},[22,165233,165234],{},"无序。",[22,165236,165237],{},"元素不重复。",[22,165239,165240],{},"可以做交集、并集、差集。",[29,165242,165244],{"className":31342,"code":165243,"language":31344,"meta":35,"style":35},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[37,165245,165246,165274],{"__ignoreMap":35},[51,165247,165248,165250,165252,165254,165256,165258,165260,165262,165264,165266,165268,165270,165272],{"class":53,"line":54},[51,165249,165064],{"class":72},[51,165251,108],{"class":64},[51,165253,5522],{"class":72},[51,165255,791],{"class":175},[51,165257,13397],{"class":72},[51,165259,1334],{"class":175},[51,165261,13397],{"class":72},[51,165263,1328],{"class":175},[51,165265,13397],{"class":72},[51,165267,1328],{"class":175},[51,165269,13397],{"class":72},[51,165271,1543],{"class":175},[51,165273,132],{"class":72},[51,165275,165276,165278],{"class":53,"line":61},[51,165277,31379],{"class":175},[51,165279,165280],{"class":72},"(nums)\n",[40,165282,165283],{},"创建空集合：",[29,165285,165287],{"className":31342,"code":165286,"language":31344,"meta":35,"style":35},"s = set()\n",[37,165288,165289],{"__ignoreMap":35},[51,165290,165291,165293,165295,165297],{"class":53,"line":54},[51,165292,11541],{"class":72},[51,165294,108],{"class":64},[51,165296,120686],{"class":175},[51,165298,154],{"class":72},[40,165300,9987,165301,165303],{},[37,165302,33423],{}," 是空字典，不是空集合。",[40,165305,165306],{},"集合常用操作：",[29,165308,165310],{"className":31342,"code":165309,"language":31344,"meta":35,"style":35},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[37,165311,165312,165332,165336,165345,165354,165363],{"__ignoreMap":35},[51,165313,165314,165316,165318,165320,165322,165324,165326,165328,165330],{"class":53,"line":54},[51,165315,11541],{"class":72},[51,165317,108],{"class":64},[51,165319,5522],{"class":72},[51,165321,791],{"class":175},[51,165323,13397],{"class":72},[51,165325,1334],{"class":175},[51,165327,13397],{"class":72},[51,165329,1328],{"class":175},[51,165331,132],{"class":72},[51,165333,165334],{"class":53,"line":61},[51,165335,3480],{"emptyLinePlaceholder":1192},[51,165337,165338,165341,165343],{"class":53,"line":93},[51,165339,165340],{"class":72},"s.add(",[51,165342,1543],{"class":175},[51,165344,90],{"class":72},[51,165346,165347,165350,165352],{"class":53,"line":99},[51,165348,165349],{"class":72},"s.remove(",[51,165351,1334],{"class":175},[51,165353,90],{"class":72},[51,165355,165356,165359,165361],{"class":53,"line":120},[51,165357,165358],{"class":72},"s.discard(",[51,165360,443],{"class":175},[51,165362,90],{"class":72},[51,165364,165365,165367,165369,165371],{"class":53,"line":129},[51,165366,31379],{"class":175},[51,165368,73],{"class":72},[51,165370,8320],{"class":175},[51,165372,165373],{"class":72},"(s))\n",[40,165375,165376],{},"交并差：",[29,165378,165380],{"className":31342,"code":165379,"language":31344,"meta":35,"style":35},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[37,165381,165382,165402,165422,165426,165441,165454],{"__ignoreMap":35},[51,165383,165384,165386,165388,165390,165392,165394,165396,165398,165400],{"class":53,"line":54},[51,165385,11881],{"class":72},[51,165387,108],{"class":64},[51,165389,5522],{"class":72},[51,165391,791],{"class":175},[51,165393,13397],{"class":72},[51,165395,1334],{"class":175},[51,165397,13397],{"class":72},[51,165399,1328],{"class":175},[51,165401,132],{"class":72},[51,165403,165404,165406,165408,165410,165412,165414,165416,165418,165420],{"class":53,"line":61},[51,165405,11907],{"class":72},[51,165407,108],{"class":64},[51,165409,5522],{"class":72},[51,165411,1328],{"class":175},[51,165413,13397],{"class":72},[51,165415,1543],{"class":175},[51,165417,13397],{"class":72},[51,165419,1568],{"class":175},[51,165421,132],{"class":72},[51,165423,165424],{"class":53,"line":93},[51,165425,3480],{"emptyLinePlaceholder":1192},[51,165427,165428,165430,165433,165435,165438],{"class":53,"line":99},[51,165429,31379],{"class":175},[51,165431,165432],{"class":72},"(a ",[51,165434,1602],{"class":64},[51,165436,165437],{"class":72}," b)  ",[51,165439,165440],{"class":57},"# 交集\n",[51,165442,165443,165445,165447,165449,165451],{"class":53,"line":120},[51,165444,31379],{"class":175},[51,165446,165432],{"class":72},[51,165448,2165],{"class":64},[51,165450,165437],{"class":72},[51,165452,165453],{"class":57},"# 并集\n",[51,165455,165456,165458,165460,165462,165464],{"class":53,"line":129},[51,165457,31379],{"class":175},[51,165459,165432],{"class":72},[51,165461,1778],{"class":64},[51,165463,165437],{"class":72},[51,165465,165466],{"class":57},"# 差集\n",[14,165468,165470],{"id":165469},"_610-字典dict","6.10 字典dict",[40,165472,165473],{},"字典通过 key-value 保存数据。",[29,165475,165477],{"className":31342,"code":165476,"language":31344,"meta":35,"style":35},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[37,165478,165479,165487,165497,165508,165518],{"__ignoreMap":35},[51,165480,165481,165483,165485],{"class":53,"line":54},[51,165482,150445],{"class":72},[51,165484,108],{"class":64},[51,165486,16534],{"class":72},[51,165488,165489,165491,165493,165495],{"class":53,"line":61},[51,165490,147984],{"class":282},[51,165492,52401],{"class":72},[51,165494,150852],{"class":282},[51,165496,32430],{"class":72},[51,165498,165499,165502,165504,165506],{"class":53,"line":93},[51,165500,165501],{"class":282},"    \"age\"",[51,165503,52401],{"class":72},[51,165505,1896],{"class":175},[51,165507,32430],{"class":72},[51,165509,165510,165513,165515],{"class":53,"line":99},[51,165511,165512],{"class":282},"    \"score\"",[51,165514,52401],{"class":72},[51,165516,165517],{"class":175},"95\n",[51,165519,165520],{"class":53,"line":120},[51,165521,132],{"class":72},[40,165523,165524],{},"获取值：",[29,165526,165528],{"className":31342,"code":165527,"language":31344,"meta":35,"style":35},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[37,165529,165530,165541],{"__ignoreMap":35},[51,165531,165532,165534,165537,165539],{"class":53,"line":54},[51,165533,31379],{"class":175},[51,165535,165536],{"class":72},"(student[",[51,165538,63643],{"class":282},[51,165540,5731],{"class":72},[51,165542,165543,165545,165548,165550],{"class":53,"line":61},[51,165544,31379],{"class":175},[51,165546,165547],{"class":72},"(student.get(",[51,165549,63643],{"class":282},[51,165551,31461],{"class":72},[40,165553,16350],{},[29,165555,165557],{"className":31342,"code":165556,"language":31344,"meta":35,"style":35},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[37,165558,165559,165572],{"__ignoreMap":35},[51,165560,165561,165563,165566,165569],{"class":53,"line":54},[51,165562,153823],{"class":72},[51,165564,165565],{"class":282},"\"address\"",[51,165567,165568],{"class":72},"]     ",[51,165570,165571],{"class":57},"# key不存在会报错\n",[51,165573,165574,165577,165579,165581],{"class":53,"line":61},[51,165575,165576],{"class":72},"student.get(",[51,165578,165565],{"class":282},[51,165580,14676],{"class":72},[51,165582,165583],{"class":57},"# key不存在返回None\n",[40,165585,165586],{},"设置默认值：",[29,165588,165590],{"className":31342,"code":165589,"language":31344,"meta":35,"style":35},"print(student.get(\"address\", \"未知\"))\n",[37,165591,165592],{"__ignoreMap":35},[51,165593,165594,165596,165598,165600,165602,165605],{"class":53,"line":54},[51,165595,31379],{"class":175},[51,165597,165547],{"class":72},[51,165599,165565],{"class":282},[51,165601,13397],{"class":72},[51,165603,165604],{"class":282},"\"未知\"",[51,165606,31461],{"class":72},[40,165608,165609],{},"新增和修改：",[29,165611,165613],{"className":31342,"code":165612,"language":31344,"meta":35,"style":35},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[37,165614,165615,165628],{"__ignoreMap":35},[51,165616,165617,165619,165621,165623,165625],{"class":53,"line":54},[51,165618,153823],{"class":72},[51,165620,70088],{"class":282},[51,165622,5517],{"class":72},[51,165624,108],{"class":64},[51,165626,165627],{"class":175}," 19\n",[51,165629,165630,165632,165634,165636,165638],{"class":53,"line":61},[51,165631,153823],{"class":72},[51,165633,165565],{"class":282},[51,165635,5517],{"class":72},[51,165637,108],{"class":64},[51,165639,165640],{"class":282}," \"北京\"\n",[40,165642,165643],{},"删除：",[29,165645,165647],{"className":31342,"code":165646,"language":31344,"meta":35,"style":35},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[37,165648,165649,165662,165672],{"__ignoreMap":35},[51,165650,165651,165653,165655,165658,165660],{"class":53,"line":54},[51,165652,156322],{"class":72},[51,165654,108],{"class":64},[51,165656,165657],{"class":72}," student.pop(",[51,165659,152436],{"class":282},[51,165661,90],{"class":72},[51,165663,165664,165666,165668,165670],{"class":53,"line":61},[51,165665,164347],{"class":64},[51,165667,153113],{"class":72},[51,165669,70088],{"class":282},[51,165671,34210],{"class":72},[51,165673,165674],{"class":53,"line":93},[51,165675,165676],{"class":72},"student.clear()\n",[14,165678,165680],{"id":165679},"_611-字典遍历","6.11 字典遍历",[40,165682,165683],{},"遍历 key：",[29,165685,165687],{"className":31342,"code":165686,"language":31344,"meta":35,"style":35},"for key in student:\n    print(key, student[key])\n",[37,165688,165689,165701],{"__ignoreMap":35},[51,165690,165691,165693,165696,165698],{"class":53,"line":54},[51,165692,4102],{"class":64},[51,165694,165695],{"class":72}," key ",[51,165697,27007],{"class":64},[51,165699,165700],{"class":72}," student:\n",[51,165702,165703,165705],{"class":53,"line":61},[51,165704,32263],{"class":175},[51,165706,165707],{"class":72},"(key, student[key])\n",[40,165709,165710],{},"遍历 value：",[29,165712,165714],{"className":31342,"code":165713,"language":31344,"meta":35,"style":35},"for value in student.values():\n    print(value)\n",[37,165715,165716,165728],{"__ignoreMap":35},[51,165717,165718,165720,165723,165725],{"class":53,"line":54},[51,165719,4102],{"class":64},[51,165721,165722],{"class":72}," value ",[51,165724,27007],{"class":64},[51,165726,165727],{"class":72}," student.values():\n",[51,165729,165730,165732],{"class":53,"line":61},[51,165731,32263],{"class":175},[51,165733,165734],{"class":72},"(value)\n",[40,165736,165737],{},"遍历 key 和 value：",[29,165739,165741],{"className":31342,"code":165740,"language":31344,"meta":35,"style":35},"for key, value in student.items():\n    print(key, value)\n",[37,165742,165743,165755],{"__ignoreMap":35},[51,165744,165745,165747,165750,165752],{"class":53,"line":54},[51,165746,4102],{"class":64},[51,165748,165749],{"class":72}," key, value ",[51,165751,27007],{"class":64},[51,165753,165754],{"class":72}," student.items():\n",[51,165756,165757,165759],{"class":53,"line":61},[51,165758,32263],{"class":175},[51,165760,165761],{"class":72},"(key, value)\n",[14,165763,165765],{"id":165764},"_612-嵌套容器","6.12 嵌套容器",[40,165767,165768],{},"列表中保存字典，是项目中最常见的结构之一。",[29,165770,165772],{"className":31342,"code":165771,"language":31344,"meta":35,"style":35},"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",[37,165773,165774,165782,165810,165838,165866,165870,165874,165884],{"__ignoreMap":35},[51,165775,165776,165778,165780],{"class":53,"line":54},[51,165777,160680],{"class":72},[51,165779,108],{"class":64},[51,165781,56411],{"class":72},[51,165783,165784,165786,165788,165790,165792,165794,165796,165798,165800,165802,165804,165806,165808],{"class":53,"line":61},[51,165785,149349],{"class":72},[51,165787,63643],{"class":282},[51,165789,52401],{"class":72},[51,165791,150852],{"class":282},[51,165793,13397],{"class":72},[51,165795,70088],{"class":282},[51,165797,52401],{"class":72},[51,165799,1896],{"class":175},[51,165801,13397],{"class":72},[51,165803,152436],{"class":282},[51,165805,52401],{"class":72},[51,165807,2231],{"class":175},[51,165809,6004],{"class":72},[51,165811,165812,165814,165816,165818,165820,165822,165824,165826,165828,165830,165832,165834,165836],{"class":53,"line":93},[51,165813,149349],{"class":72},[51,165815,63643],{"class":282},[51,165817,52401],{"class":72},[51,165819,151900],{"class":282},[51,165821,13397],{"class":72},[51,165823,70088],{"class":282},[51,165825,52401],{"class":72},[51,165827,1871],{"class":175},[51,165829,13397],{"class":72},[51,165831,152436],{"class":282},[51,165833,52401],{"class":72},[51,165835,2056],{"class":175},[51,165837,6004],{"class":72},[51,165839,165840,165842,165844,165846,165848,165850,165852,165854,165856,165858,165860,165862,165864],{"class":53,"line":99},[51,165841,149349],{"class":72},[51,165843,63643],{"class":282},[51,165845,52401],{"class":72},[51,165847,160695],{"class":282},[51,165849,13397],{"class":72},[51,165851,70088],{"class":282},[51,165853,52401],{"class":72},[51,165855,1921],{"class":175},[51,165857,13397],{"class":72},[51,165859,152436],{"class":282},[51,165861,52401],{"class":72},[51,165863,1654],{"class":175},[51,165865,6004],{"class":72},[51,165867,165868],{"class":53,"line":120},[51,165869,34210],{"class":72},[51,165871,165872],{"class":53,"line":129},[51,165873,3480],{"emptyLinePlaceholder":1192},[51,165875,165876,165878,165880,165882],{"class":53,"line":206},[51,165877,4102],{"class":64},[51,165879,153101],{"class":72},[51,165881,27007],{"class":64},[51,165883,153106],{"class":72},[51,165885,165886,165888,165890,165892,165895,165897],{"class":53,"line":212},[51,165887,32263],{"class":175},[51,165889,165536],{"class":72},[51,165891,63643],{"class":282},[51,165893,165894],{"class":72},"], student[",[51,165896,152436],{"class":282},[51,165898,5731],{"class":72},[40,165900,165901],{},"统计平均分：",[29,165903,165905],{"className":31342,"code":165904,"language":31344,"meta":35,"style":35},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[37,165906,165907,165915,165919,165929,165941,165945,165960],{"__ignoreMap":35},[51,165908,165909,165911,165913],{"class":53,"line":54},[51,165910,158224],{"class":72},[51,165912,108],{"class":64},[51,165914,48297],{"class":175},[51,165916,165917],{"class":53,"line":61},[51,165918,3480],{"emptyLinePlaceholder":1192},[51,165920,165921,165923,165925,165927],{"class":53,"line":93},[51,165922,4102],{"class":64},[51,165924,153101],{"class":72},[51,165926,27007],{"class":64},[51,165928,153106],{"class":72},[51,165930,165931,165933,165935,165937,165939],{"class":53,"line":99},[51,165932,160271],{"class":72},[51,165934,10439],{"class":64},[51,165936,153113],{"class":72},[51,165938,152436],{"class":282},[51,165940,34210],{"class":72},[51,165942,165943],{"class":53,"line":120},[51,165944,3480],{"emptyLinePlaceholder":1192},[51,165946,165947,165949,165951,165953,165955,165957],{"class":53,"line":129},[51,165948,164738],{"class":72},[51,165950,108],{"class":64},[51,165952,164743],{"class":72},[51,165954,1830],{"class":64},[51,165956,8293],{"class":175},[51,165958,165959],{"class":72},"(students)\n",[51,165961,165962,165964,165966,165968,165970,165972,165974,165976,165978,165980],{"class":53,"line":206},[51,165963,31379],{"class":175},[51,165965,73],{"class":72},[51,165967,1311],{"class":64},[51,165969,164761],{"class":282},[51,165971,2140],{"class":175},[51,165973,164766],{"class":72},[51,165975,158123],{"class":64},[51,165977,2190],{"class":175},[51,165979,1503],{"class":282},[51,165981,90],{"class":72},[40,165983,165984],{},"查找学生：",[29,165986,165988],{"className":31342,"code":165987,"language":31344,"meta":35,"style":35},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[37,165989,165990,166005,166009,166019,166033,166039,166043,166049],{"__ignoreMap":35},[51,165991,165992,165994,165996,165998,166000,166003],{"class":53,"line":54},[51,165993,112542],{"class":72},[51,165995,108],{"class":64},[51,165997,61569],{"class":175},[51,165999,73],{"class":72},[51,166001,166002],{"class":282},"\"请输入学生姓名:\"",[51,166004,90],{"class":72},[51,166006,166007],{"class":53,"line":61},[51,166008,3480],{"emptyLinePlaceholder":1192},[51,166010,166011,166013,166015,166017],{"class":53,"line":93},[51,166012,4102],{"class":64},[51,166014,153101],{"class":72},[51,166016,27007],{"class":64},[51,166018,153106],{"class":72},[51,166020,166021,166023,166025,166027,166029,166031],{"class":53,"line":99},[51,166022,4178],{"class":64},[51,166024,153113],{"class":72},[51,166026,63643],{"class":282},[51,166028,5517],{"class":72},[51,166030,4026],{"class":64},[51,166032,161396],{"class":72},[51,166034,166035,166037],{"class":53,"line":120},[51,166036,33415],{"class":175},[51,166038,151006],{"class":72},[51,166040,166041],{"class":53,"line":129},[51,166042,32591],{"class":64},[51,166044,166045,166047],{"class":53,"line":206},[51,166046,2791],{"class":64},[51,166048,4816],{"class":72},[51,166050,166051,166053,166055,166058],{"class":53,"line":212},[51,166052,32263],{"class":175},[51,166054,73],{"class":72},[51,166056,166057],{"class":282},"\"没有找到\"",[51,166059,90],{"class":72},[14,166061,166063],{"id":166062},"_613-容器通用操作","6.13 容器通用操作",[40,166065,166066],{},"长度：",[29,166068,166070],{"className":31342,"code":166069,"language":31344,"meta":35,"style":35},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[37,166071,166072,166091,166101],{"__ignoreMap":35},[51,166073,166074,166076,166079,166081,166083,166085,166087,166089],{"class":53,"line":54},[51,166075,8320],{"class":175},[51,166077,166078],{"class":72},"([",[51,166080,791],{"class":175},[51,166082,13397],{"class":72},[51,166084,1334],{"class":175},[51,166086,13397],{"class":72},[51,166088,1328],{"class":175},[51,166090,5731],{"class":72},[51,166092,166093,166095,166097,166099],{"class":53,"line":61},[51,166094,8320],{"class":175},[51,166096,73],{"class":72},[51,166098,156844],{"class":282},[51,166100,90],{"class":72},[51,166102,166103,166105,166108,166110,166112,166114],{"class":53,"line":93},[51,166104,8320],{"class":175},[51,166106,166107],{"class":72},"({",[51,166109,63643],{"class":282},[51,166111,52401],{"class":72},[51,166113,150852],{"class":282},[51,166115,166116],{"class":72},"})\n",[40,166118,166119],{},"最大最小：",[29,166121,166123],{"className":31342,"code":166122,"language":31344,"meta":35,"style":35},"max([1, 2, 3])\nmin([1, 2, 3])\n",[37,166124,166125,166143],{"__ignoreMap":35},[51,166126,166127,166129,166131,166133,166135,166137,166139,166141],{"class":53,"line":54},[51,166128,928],{"class":175},[51,166130,166078],{"class":72},[51,166132,791],{"class":175},[51,166134,13397],{"class":72},[51,166136,1334],{"class":175},[51,166138,13397],{"class":72},[51,166140,1328],{"class":175},[51,166142,5731],{"class":72},[51,166144,166145,166148,166150,166152,166154,166156,166158,166160],{"class":53,"line":61},[51,166146,166147],{"class":175},"min",[51,166149,166078],{"class":72},[51,166151,791],{"class":175},[51,166153,13397],{"class":72},[51,166155,1334],{"class":175},[51,166157,13397],{"class":72},[51,166159,1328],{"class":175},[51,166161,5731],{"class":72},[40,166163,166164],{},"求和：",[29,166166,166168],{"className":31342,"code":166167,"language":31344,"meta":35,"style":35},"sum([1, 2, 3])\n",[37,166169,166170],{"__ignoreMap":35},[51,166171,166172,166175,166177,166179,166181,166183,166185,166187],{"class":53,"line":54},[51,166173,166174],{"class":175},"sum",[51,166176,166078],{"class":72},[51,166178,791],{"class":175},[51,166180,13397],{"class":72},[51,166182,1334],{"class":175},[51,166184,13397],{"class":72},[51,166186,1328],{"class":175},[51,166188,5731],{"class":72},[40,166190,164435],{},[29,166192,166194],{"className":31342,"code":166193,"language":31344,"meta":35,"style":35},"sorted([3, 1, 2])\n",[37,166195,166196],{"__ignoreMap":35},[51,166197,166198,166201,166203,166205,166207,166209,166211,166213],{"class":53,"line":54},[51,166199,166200],{"class":175},"sorted",[51,166202,166078],{"class":72},[51,166204,1328],{"class":175},[51,166206,13397],{"class":72},[51,166208,791],{"class":175},[51,166210,13397],{"class":72},[51,166212,1334],{"class":175},[51,166214,5731],{"class":72},[40,166216,166217],{},"类型转换：",[29,166219,166221],{"className":31342,"code":166220,"language":31344,"meta":35,"style":35},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[37,166222,166223,166233,166251],{"__ignoreMap":35},[51,166224,166225,166227,166229,166231],{"class":53,"line":54},[51,166226,155034],{"class":175},[51,166228,73],{"class":72},[51,166230,156844],{"class":282},[51,166232,90],{"class":72},[51,166234,166235,166237,166239,166241,166243,166245,166247,166249],{"class":53,"line":61},[51,166236,156229],{"class":175},[51,166238,166078],{"class":72},[51,166240,791],{"class":175},[51,166242,13397],{"class":72},[51,166244,1334],{"class":175},[51,166246,13397],{"class":72},[51,166248,1328],{"class":175},[51,166250,5731],{"class":72},[51,166252,166253,166255,166257,166259,166261,166263,166265,166267,166269,166271],{"class":53,"line":93},[51,166254,156254],{"class":175},[51,166256,166078],{"class":72},[51,166258,791],{"class":175},[51,166260,13397],{"class":72},[51,166262,791],{"class":175},[51,166264,13397],{"class":72},[51,166266,1334],{"class":175},[51,166268,13397],{"class":72},[51,166270,1328],{"class":175},[51,166272,5731],{"class":72},[40,166274,166275],{},"成员判断：",[29,166277,166279],{"className":31342,"code":166278,"language":31344,"meta":35,"style":35},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[37,166280,166281,166298,166322],{"__ignoreMap":35},[51,166282,166283,166285,166287,166290,166293,166296],{"class":53,"line":54},[51,166284,31379],{"class":175},[51,166286,73],{"class":72},[51,166288,166289],{"class":282},"\"a\"",[51,166291,166292],{"class":64}," in",[51,166294,166295],{"class":282}," \"abc\"",[51,166297,90],{"class":72},[51,166299,166300,166302,166304,166306,166308,166310,166312,166314,166316,166318,166320],{"class":53,"line":61},[51,166301,31379],{"class":175},[51,166303,73],{"class":72},[51,166305,791],{"class":175},[51,166307,166292],{"class":64},[51,166309,53190],{"class":72},[51,166311,791],{"class":175},[51,166313,13397],{"class":72},[51,166315,1334],{"class":175},[51,166317,13397],{"class":72},[51,166319,1328],{"class":175},[51,166321,5731],{"class":72},[51,166323,166324,166326,166328,166330,166332,166334,166336,166338,166340],{"class":53,"line":93},[51,166325,31379],{"class":175},[51,166327,73],{"class":72},[51,166329,63643],{"class":282},[51,166331,166292],{"class":64},[51,166333,5522],{"class":72},[51,166335,63643],{"class":282},[51,166337,52401],{"class":72},[51,166339,150852],{"class":282},[51,166341,166116],{"class":72},[14,166343,166345],{"id":166344},"_614-推导式","6.14 推导式",[40,166347,166348],{},"推导式用于快速生成容器。",[40,166350,166351],{},"列表推导式：",[29,166353,166355],{"className":31342,"code":166354,"language":31344,"meta":35,"style":35},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[37,166356,166357,166384],{"__ignoreMap":35},[51,166358,166359,166361,166363,166366,166368,166370,166372,166374,166376,166378,166380,166382],{"class":53,"line":54},[51,166360,165064],{"class":72},[51,166362,108],{"class":64},[51,166364,166365],{"class":72}," [i ",[51,166367,4102],{"class":64},[51,166369,10400],{"class":72},[51,166371,27007],{"class":64},[51,166373,33407],{"class":175},[51,166375,73],{"class":72},[51,166377,791],{"class":175},[51,166379,13397],{"class":72},[51,166381,1593],{"class":175},[51,166383,98264],{"class":72},[51,166385,166386,166388],{"class":53,"line":61},[51,166387,31379],{"class":175},[51,166389,165280],{"class":72},[40,166391,166392],{},"带条件：",[29,166394,166396],{"className":31342,"code":166395,"language":31344,"meta":35,"style":35},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[37,166397,166398,166439],{"__ignoreMap":35},[51,166399,166400,166403,166405,166407,166409,166411,166413,166415,166417,166419,166421,166423,166425,166427,166429,166431,166433,166435,166437],{"class":53,"line":54},[51,166401,166402],{"class":72},"even_nums ",[51,166404,108],{"class":64},[51,166406,166365],{"class":72},[51,166408,4102],{"class":64},[51,166410,10400],{"class":72},[51,166412,27007],{"class":64},[51,166414,33407],{"class":175},[51,166416,73],{"class":72},[51,166418,791],{"class":175},[51,166420,13397],{"class":72},[51,166422,1586],{"class":175},[51,166424,14676],{"class":72},[51,166426,2633],{"class":64},[51,166428,10400],{"class":72},[51,166430,1577],{"class":64},[51,166432,15717],{"class":175},[51,166434,102523],{"class":64},[51,166436,5169],{"class":175},[51,166438,34210],{"class":72},[51,166440,166441,166443],{"class":53,"line":61},[51,166442,31379],{"class":175},[51,166444,166445],{"class":72},"(even_nums)\n",[40,166447,166448],{},"字典推导式：",[29,166450,166452],{"className":31342,"code":166451,"language":31344,"meta":35,"style":35},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[37,166453,166454,166488],{"__ignoreMap":35},[51,166455,166456,166459,166461,166464,166466,166468,166471,166473,166475,166477,166479,166481,166483,166485],{"class":53,"line":54},[51,166457,166458],{"class":72},"squares ",[51,166460,108],{"class":64},[51,166462,166463],{"class":72}," {i: i ",[51,166465,11623],{"class":64},[51,166467,15717],{"class":175},[51,166469,166470],{"class":64}," for",[51,166472,10400],{"class":72},[51,166474,27007],{"class":64},[51,166476,33407],{"class":175},[51,166478,73],{"class":72},[51,166480,791],{"class":175},[51,166482,13397],{"class":72},[51,166484,1593],{"class":175},[51,166486,166487],{"class":72},")}\n",[51,166489,166490,166492],{"class":53,"line":61},[51,166491,31379],{"class":175},[51,166493,166494],{"class":72},"(squares)\n",[40,166496,166497],{},"集合推导式：",[29,166499,166501],{"className":31342,"code":166500,"language":31344,"meta":35,"style":35},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[37,166502,166503,166524],{"__ignoreMap":35},[51,166504,166505,166508,166510,166513,166515,166517,166519,166522],{"class":53,"line":54},[51,166506,166507],{"class":72},"chars ",[51,166509,108],{"class":64},[51,166511,166512],{"class":72}," {ch ",[51,166514,4102],{"class":64},[51,166516,160656],{"class":72},[51,166518,27007],{"class":64},[51,166520,166521],{"class":282}," \"hello\"",[51,166523,132],{"class":72},[51,166525,166526,166528],{"class":53,"line":61},[51,166527,31379],{"class":175},[51,166529,166530],{"class":72},"(chars)\n",[40,166532,166533],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166535,166537],{"id":166536},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[29,166539,166541],{"className":31342,"code":166540,"language":31344,"meta":35,"style":35},"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",[37,166542,166543,166551,166571,166591,166611,166631,166635,166639,166647,166661,166670,166674,166684,166696,166700,166720,166729,166733,166749,166754,166758,166772,166776,166798,166834],{"__ignoreMap":35},[51,166544,166545,166547,166549],{"class":53,"line":54},[51,166546,160680],{"class":72},[51,166548,108],{"class":64},[51,166550,56411],{"class":72},[51,166552,166553,166555,166557,166559,166561,166563,166565,166567,166569],{"class":53,"line":61},[51,166554,149349],{"class":72},[51,166556,63643],{"class":282},[51,166558,52401],{"class":72},[51,166560,150852],{"class":282},[51,166562,13397],{"class":72},[51,166564,152436],{"class":282},[51,166566,52401],{"class":72},[51,166568,2231],{"class":175},[51,166570,6004],{"class":72},[51,166572,166573,166575,166577,166579,166581,166583,166585,166587,166589],{"class":53,"line":93},[51,166574,149349],{"class":72},[51,166576,63643],{"class":282},[51,166578,52401],{"class":72},[51,166580,151900],{"class":282},[51,166582,13397],{"class":72},[51,166584,152436],{"class":282},[51,166586,52401],{"class":72},[51,166588,2056],{"class":175},[51,166590,6004],{"class":72},[51,166592,166593,166595,166597,166599,166601,166603,166605,166607,166609],{"class":53,"line":99},[51,166594,149349],{"class":72},[51,166596,63643],{"class":282},[51,166598,52401],{"class":72},[51,166600,160695],{"class":282},[51,166602,13397],{"class":72},[51,166604,152436],{"class":282},[51,166606,52401],{"class":72},[51,166608,1654],{"class":175},[51,166610,6004],{"class":72},[51,166612,166613,166615,166617,166619,166621,166623,166625,166627,166629],{"class":53,"line":120},[51,166614,149349],{"class":72},[51,166616,63643],{"class":282},[51,166618,52401],{"class":72},[51,166620,164274],{"class":282},[51,166622,13397],{"class":72},[51,166624,152436],{"class":282},[51,166626,52401],{"class":72},[51,166628,2126],{"class":175},[51,166630,6004],{"class":72},[51,166632,166633],{"class":53,"line":129},[51,166634,34210],{"class":72},[51,166636,166637],{"class":53,"line":206},[51,166638,3480],{"emptyLinePlaceholder":1192},[51,166640,166641,166643,166645],{"class":53,"line":212},[51,166642,158224],{"class":72},[51,166644,108],{"class":64},[51,166646,48297],{"class":175},[51,166648,166649,166652,166654,166657,166659],{"class":53,"line":227},[51,166650,166651],{"class":72},"max_student ",[51,166653,108],{"class":64},[51,166655,166656],{"class":72}," students[",[51,166658,176],{"class":175},[51,166660,34210],{"class":72},[51,166662,166663,166666,166668],{"class":53,"line":370},[51,166664,166665],{"class":72},"passed ",[51,166667,108],{"class":64},[51,166669,52802],{"class":72},[51,166671,166672],{"class":53,"line":387},[51,166673,3480],{"emptyLinePlaceholder":1192},[51,166675,166676,166678,166680,166682],{"class":53,"line":404},[51,166677,4102],{"class":64},[51,166679,153101],{"class":72},[51,166681,27007],{"class":64},[51,166683,153106],{"class":72},[51,166685,166686,166688,166690,166692,166694],{"class":53,"line":415},[51,166687,160271],{"class":72},[51,166689,10439],{"class":64},[51,166691,153113],{"class":72},[51,166693,152436],{"class":282},[51,166695,34210],{"class":72},[51,166697,166698],{"class":53,"line":420},[51,166699,3480],{"emptyLinePlaceholder":1192},[51,166701,166702,166704,166706,166708,166710,166712,166715,166717],{"class":53,"line":429},[51,166703,4178],{"class":64},[51,166705,153113],{"class":72},[51,166707,152436],{"class":282},[51,166709,5517],{"class":72},[51,166711,972],{"class":64},[51,166713,166714],{"class":72}," max_student[",[51,166716,152436],{"class":282},[51,166718,166719],{"class":72},"]:\n",[51,166721,166722,166725,166727],{"class":53,"line":434},[51,166723,166724],{"class":72},"        max_student ",[51,166726,108],{"class":64},[51,166728,153129],{"class":72},[51,166730,166731],{"class":53,"line":448},[51,166732,3480],{"emptyLinePlaceholder":1192},[51,166734,166735,166737,166739,166741,166743,166745,166747],{"class":53,"line":462},[51,166736,4178],{"class":64},[51,166738,153113],{"class":72},[51,166740,152436],{"class":282},[51,166742,5517],{"class":72},[51,166744,2800],{"class":64},[51,166746,158801],{"class":175},[51,166748,4816],{"class":72},[51,166750,166751],{"class":53,"line":470},[51,166752,166753],{"class":72},"        passed.append(student)\n",[51,166755,166756],{"class":53,"line":2783},[51,166757,3480],{"emptyLinePlaceholder":1192},[51,166759,166760,166762,166764,166766,166768,166770],{"class":53,"line":2788},[51,166761,164738],{"class":72},[51,166763,108],{"class":64},[51,166765,164743],{"class":72},[51,166767,1830],{"class":64},[51,166769,8293],{"class":175},[51,166771,165959],{"class":72},[51,166773,166774],{"class":53,"line":2817},[51,166775,3480],{"emptyLinePlaceholder":1192},[51,166777,166778,166780,166782,166784,166786,166788,166790,166792,166794,166796],{"class":53,"line":2822},[51,166779,31379],{"class":175},[51,166781,73],{"class":72},[51,166783,1311],{"class":64},[51,166785,164761],{"class":282},[51,166787,2140],{"class":175},[51,166789,164766],{"class":72},[51,166791,158123],{"class":64},[51,166793,2190],{"class":175},[51,166795,1503],{"class":282},[51,166797,90],{"class":72},[51,166799,166800,166802,166804,166806,166809,166811,166814,166816,166818,166820,166822,166824,166826,166828,166830,166832],{"class":53,"line":2839},[51,166801,31379],{"class":175},[51,166803,73],{"class":72},[51,166805,1311],{"class":64},[51,166807,166808],{"class":282},"\"最高分学生:",[51,166810,2140],{"class":175},[51,166812,166813],{"class":72},"max_student[",[51,166815,153846],{"class":282},[51,166817,2184],{"class":72},[51,166819,2190],{"class":175},[51,166821,5522],{"class":175},[51,166823,166813],{"class":72},[51,166825,153884],{"class":282},[51,166827,2184],{"class":72},[51,166829,2190],{"class":175},[51,166831,1503],{"class":282},[51,166833,90],{"class":72},[51,166835,166836,166838,166840,166842,166845,166848,166851,166853,166855],{"class":53,"line":2844},[51,166837,31379],{"class":175},[51,166839,73],{"class":72},[51,166841,1311],{"class":64},[51,166843,166844],{"class":282},"\"及格人数:",[51,166846,166847],{"class":175},"{len",[51,166849,166850],{"class":72},"(passed)",[51,166852,2190],{"class":175},[51,166854,1503],{"class":282},[51,166856,90],{"class":72},[14,166858,166860],{"id":166859},"_616-易错点","6.16 易错点",[19,166862,166863,166866,166869,166872,166878,166887],{},[22,166864,166865],{},"列表可变，元组和字符串不可变。",[22,166867,166868],{},"切片结束位置不包含。",[22,166870,166871],{},"字典通过 key 取值，不是通过索引。",[22,166873,166874,166875,29349],{},"空集合要用 ",[37,166876,166877],{},"set()",[22,166879,105330,166880,166883,166884,29349],{},[37,166881,166882],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[37,166885,166886],{},"get()",[22,166888,166889],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166891,166893],{"id":166892},"_617-本章练习","6.17 本章练习",[19,166895,166896,166899,166902,166905,166908],{},[22,166897,166898],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[22,166900,166901],{},"输入一句话，统计每个字符出现次数。",[22,166903,166904],{},"使用集合去除列表中的重复元素。",[22,166906,166907],{},"使用字典保存一个学生的信息，并实现修改成绩。",[22,166909,166910],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1179,166912,166913],{},"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":35,"searchDepth":61,"depth":61,"links":166915},[166916,166917,166918,166919,166920,166921,166922,166923,166924,166925,166926,166927,166928,166929,166930,166931,166932],{"id":163896,"depth":61,"text":163897},{"id":164013,"depth":61,"text":164014},{"id":164103,"depth":61,"text":164104},{"id":164227,"depth":61,"text":164228},{"id":164590,"depth":61,"text":164591},{"id":164777,"depth":61,"text":164778},{"id":164896,"depth":61,"text":164897},{"id":165038,"depth":61,"text":165039},{"id":165225,"depth":61,"text":165226},{"id":165469,"depth":61,"text":165470},{"id":165679,"depth":61,"text":165680},{"id":165764,"depth":61,"text":165765},{"id":166062,"depth":61,"text":166063},{"id":166344,"depth":61,"text":166345},{"id":166536,"depth":61,"text":166537},{"id":166859,"depth":61,"text":166860},{"id":166892,"depth":61,"text":166893},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163888,"description":24339},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166939,"title":166940,"body":166941,"description":24339,"extension":1190,"meta":169113,"navigation":1192,"path":169114,"seo":169115,"stem":169116,"__hash__":169117},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166942,"toc":169088},[166943,166946,166950,166953,167033,167036,167057,167060,167064,167067,167129,167132,167149,167153,167156,167201,167203,167211,167215,167218,167300,167303,167306,167331,167334,167357,167361,167364,167366,167428,167431,167433,167484,167488,167492,167498,167603,167607,167613,167684,167688,167691,167759,167762,167842,167846,167852,167888,167891,167894,168004,168010,168014,168017,168089,168092,168096,168100,168105,168167,168171,168176,168244,168248,168253,168369,168373,168376,168456,168459,168463,168466,168570,168572,168587,168590,168594,168732,168740,168744,168746,168757,168759,169017,169021,169053,169057,169085],[10,166944,166940],{"id":166945},"_7-函数进阶",[14,166947,166949],{"id":166948},"_71-多返回值","7.1 多返回值",[40,166951,166952],{},"Python 函数可以返回多个值，本质上返回的是元组。",[29,166954,166956],{"className":31342,"code":166955,"language":31344,"meta":35,"style":35},"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",[37,166957,166958,166967,166975,166983,166992,166999,167003,167007,167016,167022],{"__ignoreMap":35},[51,166959,166960,166962,166965],{"class":53,"line":54},[51,166961,32911],{"class":64},[51,166963,166964],{"class":68}," get_info",[51,166966,32917],{"class":72},[51,166968,166969,166971,166973],{"class":53,"line":61},[51,166970,153334],{"class":72},[51,166972,108],{"class":64},[51,166974,150317],{"class":282},[51,166976,166977,166979,166981],{"class":53,"line":93},[51,166978,153350],{"class":72},[51,166980,108],{"class":64},[51,166982,147515],{"class":175},[51,166984,166985,166987,166989],{"class":53,"line":99},[51,166986,153365],{"class":72},[51,166988,108],{"class":64},[51,166990,166991],{"class":175}," 95\n",[51,166993,166994,166996],{"class":53,"line":120},[51,166995,123],{"class":64},[51,166997,166998],{"class":72}," name, age, score\n",[51,167000,167001],{"class":53,"line":129},[51,167002,3480],{"emptyLinePlaceholder":1192},[51,167004,167005],{"class":53,"line":206},[51,167006,3480],{"emptyLinePlaceholder":1192},[51,167008,167009,167011,167013],{"class":53,"line":212},[51,167010,162270],{"class":72},[51,167012,108],{"class":64},[51,167014,167015],{"class":72}," get_info()\n",[51,167017,167018,167020],{"class":53,"line":227},[51,167019,31379],{"class":175},[51,167021,77549],{"class":72},[51,167023,167024,167026,167028,167030],{"class":53,"line":370},[51,167025,31379],{"class":175},[51,167027,73],{"class":72},[51,167029,104071],{"class":175},[51,167031,167032],{"class":72},"(result))\n",[40,167034,167035],{},"可以直接解包：",[29,167037,167039],{"className":31342,"code":167038,"language":31344,"meta":35,"style":35},"name, age, score = get_info()\nprint(name, age, score)\n",[37,167040,167041,167050],{"__ignoreMap":35},[51,167042,167043,167046,167048],{"class":53,"line":54},[51,167044,167045],{"class":72},"name, age, score ",[51,167047,108],{"class":64},[51,167049,167015],{"class":72},[51,167051,167052,167054],{"class":53,"line":61},[51,167053,31379],{"class":175},[51,167055,167056],{"class":72},"(name, age, score)\n",[40,167058,167059],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167061,167063],{"id":167062},"_72-位置参数","7.2 位置参数",[40,167065,167066],{},"位置参数按顺序传递。",[29,167068,167070],{"className":31342,"code":167069,"language":31344,"meta":35,"style":35},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[37,167071,167072,167080,167108,167112,167116],{"__ignoreMap":35},[51,167073,167074,167076,167078],{"class":53,"line":54},[51,167075,32911],{"class":64},[51,167077,150336],{"class":68},[51,167079,150339],{"class":72},[51,167081,167082,167084,167086,167088,167090,167092,167094,167096,167098,167100,167102,167104,167106],{"class":53,"line":61},[51,167083,32263],{"class":175},[51,167085,73],{"class":72},[51,167087,1311],{"class":64},[51,167089,150350],{"class":282},[51,167091,2140],{"class":175},[51,167093,80774],{"class":72},[51,167095,2190],{"class":175},[51,167097,150359],{"class":282},[51,167099,2140],{"class":175},[51,167101,71185],{"class":72},[51,167103,2190],{"class":175},[51,167105,150368],{"class":282},[51,167107,90],{"class":72},[51,167109,167110],{"class":53,"line":93},[51,167111,3480],{"emptyLinePlaceholder":1192},[51,167113,167114],{"class":53,"line":99},[51,167115,3480],{"emptyLinePlaceholder":1192},[51,167117,167118,167121,167123,167125,167127],{"class":53,"line":120},[51,167119,167120],{"class":72},"introduce(",[51,167122,150852],{"class":282},[51,167124,13397],{"class":72},[51,167126,1896],{"class":175},[51,167128,90],{"class":72},[40,167130,167131],{},"顺序错了就会得到错误含义：",[29,167133,167135],{"className":31342,"code":167134,"language":31344,"meta":35,"style":35},"introduce(18, \"小明\")\n",[37,167136,167137],{"__ignoreMap":35},[51,167138,167139,167141,167143,167145,167147],{"class":53,"line":54},[51,167140,167120],{"class":72},[51,167142,1896],{"class":175},[51,167144,13397],{"class":72},[51,167146,150852],{"class":282},[51,167148,90],{"class":72},[14,167150,167152],{"id":167151},"_73-关键字参数","7.3 关键字参数",[40,167154,167155],{},"关键字参数按参数名传递。",[29,167157,167159],{"className":31342,"code":167158,"language":31344,"meta":35,"style":35},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[37,167160,167161,167181],{"__ignoreMap":35},[51,167162,167163,167165,167167,167169,167171,167173,167175,167177,167179],{"class":53,"line":54},[51,167164,167120],{"class":72},[51,167166,80774],{"class":78},[51,167168,108],{"class":64},[51,167170,150852],{"class":282},[51,167172,13397],{"class":72},[51,167174,71185],{"class":78},[51,167176,108],{"class":64},[51,167178,1896],{"class":175},[51,167180,90],{"class":72},[51,167182,167183,167185,167187,167189,167191,167193,167195,167197,167199],{"class":53,"line":61},[51,167184,167120],{"class":72},[51,167186,71185],{"class":78},[51,167188,108],{"class":64},[51,167190,1896],{"class":175},[51,167192,13397],{"class":72},[51,167194,80774],{"class":78},[51,167196,108],{"class":64},[51,167198,150852],{"class":282},[51,167200,90],{"class":72},[40,167202,118898],{},[19,167204,167205,167208],{},[22,167206,167207],{},"顺序不容易错。",[22,167209,167210],{},"调用时可读性更强。",[14,167212,167214],{"id":167213},"_74-默认参数","7.4 默认参数",[40,167216,167217],{},"默认参数给参数设置默认值。",[29,167219,167221],{"className":31342,"code":167220,"language":31344,"meta":35,"style":35},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[37,167222,167223,167239,167269,167273,167277,167287],{"__ignoreMap":35},[51,167224,167225,167227,167229,167232,167234,167237],{"class":53,"line":54},[51,167226,32911],{"class":64},[51,167228,123057],{"class":68},[51,167230,167231],{"class":72},"(host, port",[51,167233,108],{"class":64},[51,167235,167236],{"class":175},"3306",[51,167238,31750],{"class":72},[51,167240,167241,167243,167245,167247,167250,167252,167254,167256,167258,167260,167263,167265,167267],{"class":53,"line":61},[51,167242,32263],{"class":175},[51,167244,73],{"class":72},[51,167246,1311],{"class":64},[51,167248,167249],{"class":282},"\"连接",[51,167251,2140],{"class":175},[51,167253,28359],{"class":72},[51,167255,2190],{"class":175},[51,167257,984],{"class":282},[51,167259,2140],{"class":175},[51,167261,167262],{"class":72},"port",[51,167264,2190],{"class":175},[51,167266,1503],{"class":282},[51,167268,90],{"class":72},[51,167270,167271],{"class":53,"line":93},[51,167272,3480],{"emptyLinePlaceholder":1192},[51,167274,167275],{"class":53,"line":99},[51,167276,3480],{"emptyLinePlaceholder":1192},[51,167278,167279,167282,167285],{"class":53,"line":120},[51,167280,167281],{"class":72},"connect(",[51,167283,167284],{"class":282},"\"localhost\"",[51,167286,90],{"class":72},[51,167288,167289,167291,167293,167295,167298],{"class":53,"line":129},[51,167290,167281],{"class":72},[51,167292,167284],{"class":282},[51,167294,13397],{"class":72},[51,167296,167297],{"class":175},"6379",[51,167299,90],{"class":72},[40,167301,167302],{},"注意：默认参数必须放在非默认参数后面。",[40,167304,167305],{},"错误：",[29,167307,167309],{"className":31342,"code":167308,"language":31344,"meta":35,"style":35},"def connect(port=3306, host):\n    pass\n",[37,167310,167311,167327],{"__ignoreMap":35},[51,167312,167313,167315,167317,167320,167322,167324],{"class":53,"line":54},[51,167314,32911],{"class":64},[51,167316,123057],{"class":68},[51,167318,167319],{"class":72},"(port",[51,167321,108],{"class":64},[51,167323,167236],{"class":175},[51,167325,167326],{"class":72},", host):\n",[51,167328,167329],{"class":53,"line":61},[51,167330,150501],{"class":64},[40,167332,167333],{},"正确：",[29,167335,167337],{"className":31342,"code":167336,"language":31344,"meta":35,"style":35},"def connect(host, port=3306):\n    pass\n",[37,167338,167339,167353],{"__ignoreMap":35},[51,167340,167341,167343,167345,167347,167349,167351],{"class":53,"line":54},[51,167342,32911],{"class":64},[51,167344,123057],{"class":68},[51,167346,167231],{"class":72},[51,167348,108],{"class":64},[51,167350,167236],{"class":175},[51,167352,31750],{"class":72},[51,167354,167355],{"class":53,"line":61},[51,167356,150501],{"class":64},[14,167358,167360],{"id":167359},"_75-默认参数的坑","7.5 默认参数的坑",[40,167362,167363],{},"不要使用可变对象作为默认参数。",[40,167365,158587],{},[29,167367,167369],{"className":31342,"code":167368,"language":31344,"meta":35,"style":35},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[37,167370,167371,167386,167391,167398,167402,167406,167417],{"__ignoreMap":35},[51,167372,167373,167375,167378,167381,167383],{"class":53,"line":54},[51,167374,32911],{"class":64},[51,167376,167377],{"class":68}," add_item",[51,167379,167380],{"class":72},"(item, items",[51,167382,108],{"class":64},[51,167384,167385],{"class":72},"[]):\n",[51,167387,167388],{"class":53,"line":61},[51,167389,167390],{"class":72},"    items.append(item)\n",[51,167392,167393,167395],{"class":53,"line":93},[51,167394,123],{"class":64},[51,167396,167397],{"class":72}," items\n",[51,167399,167400],{"class":53,"line":99},[51,167401,3480],{"emptyLinePlaceholder":1192},[51,167403,167404],{"class":53,"line":120},[51,167405,3480],{"emptyLinePlaceholder":1192},[51,167407,167408,167410,167413,167415],{"class":53,"line":129},[51,167409,31379],{"class":175},[51,167411,167412],{"class":72},"(add_item(",[51,167414,166289],{"class":282},[51,167416,31461],{"class":72},[51,167418,167419,167421,167423,167426],{"class":53,"line":206},[51,167420,31379],{"class":175},[51,167422,167412],{"class":72},[51,167424,167425],{"class":282},"\"b\"",[51,167427,31461],{"class":72},[40,167429,167430],{},"第二次调用会复用第一次的列表。",[40,167432,156852],{},[29,167434,167436],{"className":31342,"code":167435,"language":31344,"meta":35,"style":35},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[37,167437,167438,167452,167465,167474,167478],{"__ignoreMap":35},[51,167439,167440,167442,167444,167446,167448,167450],{"class":53,"line":54},[51,167441,32911],{"class":64},[51,167443,167377],{"class":68},[51,167445,167380],{"class":72},[51,167447,108],{"class":64},[51,167449,96650],{"class":175},[51,167451,31750],{"class":72},[51,167453,167454,167456,167459,167461,167463],{"class":53,"line":61},[51,167455,4178],{"class":64},[51,167457,167458],{"class":72}," items ",[51,167460,39891],{"class":64},[51,167462,39897],{"class":175},[51,167464,4816],{"class":72},[51,167466,167467,167470,167472],{"class":53,"line":93},[51,167468,167469],{"class":72},"        items ",[51,167471,108],{"class":64},[51,167473,52802],{"class":72},[51,167475,167476],{"class":53,"line":99},[51,167477,167390],{"class":72},[51,167479,167480,167482],{"class":53,"line":120},[51,167481,123],{"class":64},[51,167483,167397],{"class":72},[14,167485,167487],{"id":167486},"_76-不定长参数","7.6 不定长参数",[1233,167489,167491],{"id":167490},"_761-args","7.6.1 *args",[40,167493,167494,167497],{},[37,167495,167496],{},"*args"," 接收任意数量的位置参数，得到元组。",[29,167499,167501],{"className":31342,"code":167500,"language":31344,"meta":35,"style":35},"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",[37,167502,167503,167516,167524,167535,167544,167550,167554,167558,167577],{"__ignoreMap":35},[51,167504,167505,167507,167509,167511,167513],{"class":53,"line":54},[51,167506,32911],{"class":64},[51,167508,69],{"class":68},[51,167510,73],{"class":72},[51,167512,1702],{"class":64},[51,167514,167515],{"class":72},"args):\n",[51,167517,167518,167520,167522],{"class":53,"line":61},[51,167519,160271],{"class":72},[51,167521,108],{"class":64},[51,167523,48297],{"class":175},[51,167525,167526,167528,167530,167532],{"class":53,"line":93},[51,167527,4278],{"class":64},[51,167529,157144],{"class":72},[51,167531,27007],{"class":64},[51,167533,167534],{"class":72}," args:\n",[51,167536,167537,167539,167541],{"class":53,"line":99},[51,167538,160946],{"class":72},[51,167540,10439],{"class":64},[51,167542,167543],{"class":72}," num\n",[51,167545,167546,167548],{"class":53,"line":120},[51,167547,123],{"class":64},[51,167549,163251],{"class":72},[51,167551,167552],{"class":53,"line":129},[51,167553,3480],{"emptyLinePlaceholder":1192},[51,167555,167556],{"class":53,"line":206},[51,167557,3480],{"emptyLinePlaceholder":1192},[51,167559,167560,167562,167565,167567,167569,167571,167573,167575],{"class":53,"line":212},[51,167561,31379],{"class":175},[51,167563,167564],{"class":72},"(add(",[51,167566,791],{"class":175},[51,167568,13397],{"class":72},[51,167570,1334],{"class":175},[51,167572,13397],{"class":72},[51,167574,1328],{"class":175},[51,167576,31461],{"class":72},[51,167578,167579,167581,167583,167585,167587,167589,167591,167593,167595,167597,167599,167601],{"class":53,"line":227},[51,167580,31379],{"class":175},[51,167582,167564],{"class":72},[51,167584,791],{"class":175},[51,167586,13397],{"class":72},[51,167588,1334],{"class":175},[51,167590,13397],{"class":72},[51,167592,1328],{"class":175},[51,167594,13397],{"class":72},[51,167596,1543],{"class":175},[51,167598,13397],{"class":72},[51,167600,1568],{"class":175},[51,167602,31461],{"class":72},[1233,167604,167606],{"id":167605},"_762-kwargs","7.6.2 **kwargs",[40,167608,167609,167612],{},[37,167610,167611],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[29,167614,167616],{"className":31342,"code":167615,"language":31344,"meta":35,"style":35},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[37,167617,167618,167631,167642,167648,167652,167656],{"__ignoreMap":35},[51,167619,167620,167622,167624,167626,167628],{"class":53,"line":54},[51,167621,32911],{"class":64},[51,167623,162909],{"class":68},[51,167625,73],{"class":72},[51,167627,11623],{"class":64},[51,167629,167630],{"class":72},"kwargs):\n",[51,167632,167633,167635,167637,167639],{"class":53,"line":61},[51,167634,4278],{"class":64},[51,167636,165749],{"class":72},[51,167638,27007],{"class":64},[51,167640,167641],{"class":72}," kwargs.items():\n",[51,167643,167644,167646],{"class":53,"line":93},[51,167645,33415],{"class":175},[51,167647,165761],{"class":72},[51,167649,167650],{"class":53,"line":99},[51,167651,3480],{"emptyLinePlaceholder":1192},[51,167653,167654],{"class":53,"line":120},[51,167655,3480],{"emptyLinePlaceholder":1192},[51,167657,167658,167660,167662,167664,167666,167668,167670,167672,167674,167676,167678,167680,167682],{"class":53,"line":129},[51,167659,162974],{"class":72},[51,167661,80774],{"class":78},[51,167663,108],{"class":64},[51,167665,150852],{"class":282},[51,167667,13397],{"class":72},[51,167669,71185],{"class":78},[51,167671,108],{"class":64},[51,167673,1896],{"class":175},[51,167675,13397],{"class":72},[51,167677,71236],{"class":78},[51,167679,108],{"class":64},[51,167681,70233],{"class":282},[51,167683,90],{"class":72},[14,167685,167687],{"id":167686},"_77-参数解包","7.7 参数解包",[40,167689,167690],{},"列表或元组解包为位置参数：",[29,167692,167694],{"className":31342,"code":167693,"language":31344,"meta":35,"style":35},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[37,167695,167696,167705,167720,167724,167728,167748],{"__ignoreMap":35},[51,167697,167698,167700,167702],{"class":53,"line":54},[51,167699,32911],{"class":64},[51,167701,69],{"class":68},[51,167703,167704],{"class":72},"(a, b, c):\n",[51,167706,167707,167709,167711,167713,167715,167717],{"class":53,"line":61},[51,167708,123],{"class":64},[51,167710,11831],{"class":72},[51,167712,114],{"class":64},[51,167714,11844],{"class":72},[51,167716,114],{"class":64},[51,167718,167719],{"class":72}," c\n",[51,167721,167722],{"class":53,"line":93},[51,167723,3480],{"emptyLinePlaceholder":1192},[51,167725,167726],{"class":53,"line":99},[51,167727,3480],{"emptyLinePlaceholder":1192},[51,167729,167730,167732,167734,167736,167738,167740,167742,167744,167746],{"class":53,"line":120},[51,167731,165064],{"class":72},[51,167733,108],{"class":64},[51,167735,53190],{"class":72},[51,167737,791],{"class":175},[51,167739,13397],{"class":72},[51,167741,1334],{"class":175},[51,167743,13397],{"class":72},[51,167745,1328],{"class":175},[51,167747,34210],{"class":72},[51,167749,167750,167752,167754,167756],{"class":53,"line":129},[51,167751,31379],{"class":175},[51,167753,167564],{"class":72},[51,167755,1702],{"class":64},[51,167757,167758],{"class":72},"nums))\n",[40,167760,167761],{},"字典解包为关键字参数：",[29,167763,167765],{"className":31342,"code":167764,"language":31344,"meta":35,"style":35},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[37,167766,167767,167775,167801,167805,167809,167833],{"__ignoreMap":35},[51,167768,167769,167771,167773],{"class":53,"line":54},[51,167770,32911],{"class":64},[51,167772,150336],{"class":68},[51,167774,150339],{"class":72},[51,167776,167777,167779,167781,167783,167785,167787,167789,167791,167793,167795,167797,167799],{"class":53,"line":61},[51,167778,32263],{"class":175},[51,167780,73],{"class":72},[51,167782,1311],{"class":64},[51,167784,1503],{"class":282},[51,167786,2140],{"class":175},[51,167788,80774],{"class":72},[51,167790,2190],{"class":175},[51,167792,5522],{"class":175},[51,167794,71185],{"class":72},[51,167796,2190],{"class":175},[51,167798,1503],{"class":282},[51,167800,90],{"class":72},[51,167802,167803],{"class":53,"line":93},[51,167804,3480],{"emptyLinePlaceholder":1192},[51,167806,167807],{"class":53,"line":99},[51,167808,3480],{"emptyLinePlaceholder":1192},[51,167810,167811,167813,167815,167817,167819,167821,167823,167825,167827,167829,167831],{"class":53,"line":120},[51,167812,117278],{"class":72},[51,167814,108],{"class":64},[51,167816,5522],{"class":72},[51,167818,63643],{"class":282},[51,167820,52401],{"class":72},[51,167822,150852],{"class":282},[51,167824,13397],{"class":72},[51,167826,70088],{"class":282},[51,167828,52401],{"class":72},[51,167830,1896],{"class":175},[51,167832,132],{"class":72},[51,167834,167835,167837,167839],{"class":53,"line":129},[51,167836,167120],{"class":72},[51,167838,11623],{"class":64},[51,167840,167841],{"class":72},"info)\n",[14,167843,167845],{"id":167844},"_78-匿名函数lambda","7.8 匿名函数lambda",[40,167847,167848,167851],{},[37,167849,167850],{},"lambda"," 用于定义简单匿名函数。",[29,167853,167855],{"className":31342,"code":167854,"language":31344,"meta":35,"style":35},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[37,167856,167857,167874],{"__ignoreMap":35},[51,167858,167859,167862,167864,167867,167870,167872],{"class":53,"line":54},[51,167860,167861],{"class":72},"add ",[51,167863,108],{"class":64},[51,167865,167866],{"class":64}," lambda",[51,167868,167869],{"class":72}," a, b: a ",[51,167871,114],{"class":64},[51,167873,152068],{"class":72},[51,167875,167876,167878,167880,167882,167884,167886],{"class":53,"line":61},[51,167877,31379],{"class":175},[51,167879,167564],{"class":72},[51,167881,791],{"class":175},[51,167883,13397],{"class":72},[51,167885,1334],{"class":175},[51,167887,31461],{"class":72},[40,167889,167890],{},"常和排序、过滤等函数一起使用。",[40,167892,167893],{},"按分数排序：",[29,167895,167897],{"className":31342,"code":167896,"language":31344,"meta":35,"style":35},"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",[37,167898,167899,167907,167927,167947,167967,167971,167975,167998],{"__ignoreMap":35},[51,167900,167901,167903,167905],{"class":53,"line":54},[51,167902,160680],{"class":72},[51,167904,108],{"class":64},[51,167906,56411],{"class":72},[51,167908,167909,167911,167913,167915,167917,167919,167921,167923,167925],{"class":53,"line":61},[51,167910,149349],{"class":72},[51,167912,63643],{"class":282},[51,167914,52401],{"class":72},[51,167916,150852],{"class":282},[51,167918,13397],{"class":72},[51,167920,152436],{"class":282},[51,167922,52401],{"class":72},[51,167924,2231],{"class":175},[51,167926,6004],{"class":72},[51,167928,167929,167931,167933,167935,167937,167939,167941,167943,167945],{"class":53,"line":93},[51,167930,149349],{"class":72},[51,167932,63643],{"class":282},[51,167934,52401],{"class":72},[51,167936,151900],{"class":282},[51,167938,13397],{"class":72},[51,167940,152436],{"class":282},[51,167942,52401],{"class":72},[51,167944,2056],{"class":175},[51,167946,6004],{"class":72},[51,167948,167949,167951,167953,167955,167957,167959,167961,167963,167965],{"class":53,"line":99},[51,167950,149349],{"class":72},[51,167952,63643],{"class":282},[51,167954,52401],{"class":72},[51,167956,160695],{"class":282},[51,167958,13397],{"class":72},[51,167960,152436],{"class":282},[51,167962,52401],{"class":72},[51,167964,1654],{"class":175},[51,167966,6004],{"class":72},[51,167968,167969],{"class":53,"line":120},[51,167970,34210],{"class":72},[51,167972,167973],{"class":53,"line":129},[51,167974,3480],{"emptyLinePlaceholder":1192},[51,167976,167977,167980,167982,167984,167986,167988,167990,167992,167994,167996],{"class":53,"line":206},[51,167978,167979],{"class":72},"students.sort(",[51,167981,154910],{"class":78},[51,167983,154913],{"class":64},[51,167985,154916],{"class":72},[51,167987,152436],{"class":282},[51,167989,113166],{"class":72},[51,167991,164492],{"class":78},[51,167993,108],{"class":64},[51,167995,32440],{"class":175},[51,167997,90],{"class":72},[51,167999,168000,168002],{"class":53,"line":212},[51,168001,31379],{"class":175},[51,168003,165959],{"class":72},[40,168005,168006,168007,168009],{},"如果逻辑复杂，不要硬写 ",[37,168008,167850],{},"，定义普通函数更清晰。",[14,168011,168013],{"id":168012},"_79-函数作为参数","7.9 函数作为参数",[40,168015,168016],{},"函数可以作为参数传给另一个函数。",[29,168018,168020],{"className":31342,"code":168019,"language":31344,"meta":35,"style":35},"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",[37,168021,168022,168030,168040,168044,168048,168058,168065,168069,168073],{"__ignoreMap":35},[51,168023,168024,168026,168028],{"class":53,"line":54},[51,168025,32911],{"class":64},[51,168027,69],{"class":68},[51,168029,152057],{"class":72},[51,168031,168032,168034,168036,168038],{"class":53,"line":61},[51,168033,123],{"class":64},[51,168035,11831],{"class":72},[51,168037,114],{"class":64},[51,168039,152068],{"class":72},[51,168041,168042],{"class":53,"line":93},[51,168043,3480],{"emptyLinePlaceholder":1192},[51,168045,168046],{"class":53,"line":99},[51,168047,3480],{"emptyLinePlaceholder":1192},[51,168049,168050,168052,168055],{"class":53,"line":120},[51,168051,32911],{"class":64},[51,168053,168054],{"class":68}," calculate",[51,168056,168057],{"class":72},"(a, b, func):\n",[51,168059,168060,168062],{"class":53,"line":129},[51,168061,123],{"class":64},[51,168063,168064],{"class":72}," func(a, b)\n",[51,168066,168067],{"class":53,"line":206},[51,168068,3480],{"emptyLinePlaceholder":1192},[51,168070,168071],{"class":53,"line":212},[51,168072,3480],{"emptyLinePlaceholder":1192},[51,168074,168075,168077,168080,168082,168084,168086],{"class":53,"line":227},[51,168076,31379],{"class":175},[51,168078,168079],{"class":72},"(calculate(",[51,168081,443],{"class":175},[51,168083,13397],{"class":72},[51,168085,457],{"class":175},[51,168087,168088],{"class":72},", add))\n",[40,168090,168091],{},"这种思想在排序、回调、框架中经常出现。",[14,168093,168095],{"id":168094},"_710-mapfiltersorted","7.10 map、filter、sorted",[1233,168097,168099],{"id":168098},"_7101-map","7.10.1 map",[40,168101,168102,168104],{},[37,168103,75008],{}," 对每个元素执行函数。",[29,168106,168108],{"className":31342,"code":168107,"language":31344,"meta":35,"style":35},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[37,168109,168110,168134,168157],{"__ignoreMap":35},[51,168111,168112,168114,168116,168118,168120,168122,168124,168126,168128,168130,168132],{"class":53,"line":54},[51,168113,165064],{"class":72},[51,168115,108],{"class":64},[51,168117,53190],{"class":72},[51,168119,791],{"class":175},[51,168121,13397],{"class":72},[51,168123,1334],{"class":175},[51,168125,13397],{"class":72},[51,168127,1328],{"class":175},[51,168129,13397],{"class":72},[51,168131,1543],{"class":175},[51,168133,34210],{"class":72},[51,168135,168136,168138,168140,168143,168145,168147,168150,168152,168154],{"class":53,"line":61},[51,168137,162270],{"class":72},[51,168139,108],{"class":64},[51,168141,168142],{"class":175}," map",[51,168144,73],{"class":72},[51,168146,167850],{"class":64},[51,168148,168149],{"class":72}," x: x ",[51,168151,1702],{"class":64},[51,168153,15717],{"class":175},[51,168155,168156],{"class":72},", nums)\n",[51,168158,168159,168161,168163,168165],{"class":53,"line":93},[51,168160,31379],{"class":175},[51,168162,73],{"class":72},[51,168164,155034],{"class":175},[51,168166,167032],{"class":72},[1233,168168,168170],{"id":168169},"_7102-filter","7.10.2 filter",[40,168172,168173,168175],{},[37,168174,81015],{}," 保留满足条件的元素。",[29,168177,168179],{"className":31342,"code":168178,"language":31344,"meta":35,"style":35},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[37,168180,168181,168209,168234],{"__ignoreMap":35},[51,168182,168183,168185,168187,168189,168191,168193,168195,168197,168199,168201,168203,168205,168207],{"class":53,"line":54},[51,168184,165064],{"class":72},[51,168186,108],{"class":64},[51,168188,53190],{"class":72},[51,168190,791],{"class":175},[51,168192,13397],{"class":72},[51,168194,1334],{"class":175},[51,168196,13397],{"class":72},[51,168198,1328],{"class":175},[51,168200,13397],{"class":72},[51,168202,1543],{"class":175},[51,168204,13397],{"class":72},[51,168206,1568],{"class":175},[51,168208,34210],{"class":72},[51,168210,168211,168213,168215,168218,168220,168222,168224,168226,168228,168230,168232],{"class":53,"line":61},[51,168212,162270],{"class":72},[51,168214,108],{"class":64},[51,168216,168217],{"class":175}," filter",[51,168219,73],{"class":72},[51,168221,167850],{"class":64},[51,168223,168149],{"class":72},[51,168225,1577],{"class":64},[51,168227,15717],{"class":175},[51,168229,102523],{"class":64},[51,168231,5169],{"class":175},[51,168233,168156],{"class":72},[51,168235,168236,168238,168240,168242],{"class":53,"line":93},[51,168237,31379],{"class":175},[51,168239,73],{"class":72},[51,168241,155034],{"class":175},[51,168243,167032],{"class":72},[1233,168245,168247],{"id":168246},"_7103-sorted","7.10.3 sorted",[40,168249,168250,168252],{},[37,168251,166200],{}," 返回排序后的新列表。",[29,168254,168256],{"className":31342,"code":168255,"language":31344,"meta":35,"style":35},"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",[37,168257,168258,168266,168286,168306,168326,168330,168334,168363],{"__ignoreMap":35},[51,168259,168260,168262,168264],{"class":53,"line":54},[51,168261,160680],{"class":72},[51,168263,108],{"class":64},[51,168265,56411],{"class":72},[51,168267,168268,168270,168272,168274,168276,168278,168280,168282,168284],{"class":53,"line":61},[51,168269,149349],{"class":72},[51,168271,63643],{"class":282},[51,168273,52401],{"class":72},[51,168275,150852],{"class":282},[51,168277,13397],{"class":72},[51,168279,152436],{"class":282},[51,168281,52401],{"class":72},[51,168283,2231],{"class":175},[51,168285,6004],{"class":72},[51,168287,168288,168290,168292,168294,168296,168298,168300,168302,168304],{"class":53,"line":93},[51,168289,149349],{"class":72},[51,168291,63643],{"class":282},[51,168293,52401],{"class":72},[51,168295,151900],{"class":282},[51,168297,13397],{"class":72},[51,168299,152436],{"class":282},[51,168301,52401],{"class":72},[51,168303,2056],{"class":175},[51,168305,6004],{"class":72},[51,168307,168308,168310,168312,168314,168316,168318,168320,168322,168324],{"class":53,"line":99},[51,168309,149349],{"class":72},[51,168311,63643],{"class":282},[51,168313,52401],{"class":72},[51,168315,160695],{"class":282},[51,168317,13397],{"class":72},[51,168319,152436],{"class":282},[51,168321,52401],{"class":72},[51,168323,1654],{"class":175},[51,168325,6004],{"class":72},[51,168327,168328],{"class":53,"line":120},[51,168329,34210],{"class":72},[51,168331,168332],{"class":53,"line":129},[51,168333,3480],{"emptyLinePlaceholder":1192},[51,168335,168336,168338,168340,168342,168345,168347,168349,168351,168353,168355,168357,168359,168361],{"class":53,"line":206},[51,168337,162270],{"class":72},[51,168339,108],{"class":64},[51,168341,164568],{"class":175},[51,168343,168344],{"class":72},"(students, ",[51,168346,154910],{"class":78},[51,168348,154913],{"class":64},[51,168350,154916],{"class":72},[51,168352,152436],{"class":282},[51,168354,113166],{"class":72},[51,168356,164492],{"class":78},[51,168358,108],{"class":64},[51,168360,32440],{"class":175},[51,168362,90],{"class":72},[51,168364,168365,168367],{"class":53,"line":212},[51,168366,31379],{"class":175},[51,168368,77549],{"class":72},[14,168370,168372],{"id":168371},"_711-闭包入门","7.11 闭包入门",[40,168374,168375],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[29,168377,168379],{"className":31342,"code":168378,"language":31344,"meta":35,"style":35},"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",[37,168380,168381,168391,168401,168412,168416,168423,168427,168431,168445],{"__ignoreMap":35},[51,168382,168383,168385,168388],{"class":53,"line":54},[51,168384,32911],{"class":64},[51,168386,168387],{"class":68}," outer",[51,168389,168390],{"class":72},"(base):\n",[51,168392,168393,168395,168398],{"class":53,"line":61},[51,168394,31765],{"class":64},[51,168396,168397],{"class":68}," inner",[51,168399,168400],{"class":72},"(num):\n",[51,168402,168403,168405,168408,168410],{"class":53,"line":93},[51,168404,15714],{"class":64},[51,168406,168407],{"class":72}," base ",[51,168409,114],{"class":64},[51,168411,167543],{"class":72},[51,168413,168414],{"class":53,"line":99},[51,168415,3480],{"emptyLinePlaceholder":1192},[51,168417,168418,168420],{"class":53,"line":120},[51,168419,123],{"class":64},[51,168421,168422],{"class":72}," inner\n",[51,168424,168425],{"class":53,"line":129},[51,168426,3480],{"emptyLinePlaceholder":1192},[51,168428,168429],{"class":53,"line":206},[51,168430,3480],{"emptyLinePlaceholder":1192},[51,168432,168433,168436,168438,168441,168443],{"class":53,"line":212},[51,168434,168435],{"class":72},"add_10 ",[51,168437,108],{"class":64},[51,168439,168440],{"class":72}," outer(",[51,168442,443],{"class":175},[51,168444,90],{"class":72},[51,168446,168447,168449,168452,168454],{"class":53,"line":227},[51,168448,31379],{"class":175},[51,168450,168451],{"class":72},"(add_10(",[51,168453,1568],{"class":175},[51,168455,31461],{"class":72},[40,168457,168458],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168460,168462],{"id":168461},"_712-装饰器入门","7.12 装饰器入门",[40,168464,168465],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[29,168467,168469],{"className":31342,"code":168468,"language":31344,"meta":35,"style":35},"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",[37,168470,168471,168480,168489,168500,168505,168516,168520,168527,168531,168535,168540,168548,168558,168562,168566],{"__ignoreMap":35},[51,168472,168473,168475,168477],{"class":53,"line":54},[51,168474,32911],{"class":64},[51,168476,88155],{"class":68},[51,168478,168479],{"class":72},"(func):\n",[51,168481,168482,168484,168487],{"class":53,"line":61},[51,168483,31765],{"class":64},[51,168485,168486],{"class":68}," wrapper",[51,168488,32917],{"class":72},[51,168490,168491,168493,168495,168498],{"class":53,"line":93},[51,168492,33415],{"class":175},[51,168494,73],{"class":72},[51,168496,168497],{"class":282},"\"函数开始执行\"",[51,168499,90],{"class":72},[51,168501,168502],{"class":53,"line":99},[51,168503,168504],{"class":72},"        func()\n",[51,168506,168507,168509,168511,168514],{"class":53,"line":120},[51,168508,33415],{"class":175},[51,168510,73],{"class":72},[51,168512,168513],{"class":282},"\"函数执行结束\"",[51,168515,90],{"class":72},[51,168517,168518],{"class":53,"line":129},[51,168519,3480],{"emptyLinePlaceholder":1192},[51,168521,168522,168524],{"class":53,"line":206},[51,168523,123],{"class":64},[51,168525,168526],{"class":72}," wrapper\n",[51,168528,168529],{"class":53,"line":212},[51,168530,3480],{"emptyLinePlaceholder":1192},[51,168532,168533],{"class":53,"line":227},[51,168534,3480],{"emptyLinePlaceholder":1192},[51,168536,168537],{"class":53,"line":370},[51,168538,168539],{"class":68},"@log\n",[51,168541,168542,168544,168546],{"class":53,"line":387},[51,168543,32911],{"class":64},[51,168545,161960],{"class":68},[51,168547,32917],{"class":72},[51,168549,168550,168552,168554,168556],{"class":53,"line":404},[51,168551,32263],{"class":175},[51,168553,73],{"class":72},[51,168555,752],{"class":282},[51,168557,90],{"class":72},[51,168559,168560],{"class":53,"line":415},[51,168561,3480],{"emptyLinePlaceholder":1192},[51,168563,168564],{"class":53,"line":420},[51,168565,3480],{"emptyLinePlaceholder":1192},[51,168567,168568],{"class":53,"line":429},[51,168569,161995],{"class":72},[40,168571,159238],{},[29,168573,168575],{"className":31342,"code":168574,"language":31344,"meta":35,"style":35},"say_hello = log(say_hello)\n",[37,168576,168577],{"__ignoreMap":35},[51,168578,168579,168582,168584],{"class":53,"line":54},[51,168580,168581],{"class":72},"say_hello ",[51,168583,108],{"class":64},[51,168585,168586],{"class":72}," log(say_hello)\n",[40,168588,168589],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168591,168593],{"id":168592},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[29,168595,168597],{"className":31342,"code":168596,"language":31344,"meta":35,"style":35},"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",[37,168598,168599,168607,168624,168634,168653,168663,168670,168674,168680,168684,168688,168692,168700,168710,168714,168718],{"__ignoreMap":35},[51,168600,168601,168603,168605],{"class":53,"line":54},[51,168602,32911],{"class":64},[51,168604,88155],{"class":68},[51,168606,168479],{"class":72},[51,168608,168609,168611,168613,168615,168617,168620,168622],{"class":53,"line":61},[51,168610,31765],{"class":64},[51,168612,168486],{"class":68},[51,168614,73],{"class":72},[51,168616,1702],{"class":64},[51,168618,168619],{"class":72},"args, ",[51,168621,11623],{"class":64},[51,168623,167630],{"class":72},[51,168625,168626,168628,168630,168632],{"class":53,"line":93},[51,168627,33415],{"class":175},[51,168629,73],{"class":72},[51,168631,168497],{"class":282},[51,168633,90],{"class":72},[51,168635,168636,168639,168641,168644,168646,168648,168650],{"class":53,"line":99},[51,168637,168638],{"class":72},"        result ",[51,168640,108],{"class":64},[51,168642,168643],{"class":72}," func(",[51,168645,1702],{"class":64},[51,168647,168619],{"class":72},[51,168649,11623],{"class":64},[51,168651,168652],{"class":72},"kwargs)\n",[51,168654,168655,168657,168659,168661],{"class":53,"line":120},[51,168656,33415],{"class":175},[51,168658,73],{"class":72},[51,168660,168513],{"class":282},[51,168662,90],{"class":72},[51,168664,168665,168667],{"class":53,"line":129},[51,168666,15714],{"class":64},[51,168668,168669],{"class":72}," result\n",[51,168671,168672],{"class":53,"line":206},[51,168673,3480],{"emptyLinePlaceholder":1192},[51,168675,168676,168678],{"class":53,"line":212},[51,168677,123],{"class":64},[51,168679,168526],{"class":72},[51,168681,168682],{"class":53,"line":227},[51,168683,3480],{"emptyLinePlaceholder":1192},[51,168685,168686],{"class":53,"line":370},[51,168687,3480],{"emptyLinePlaceholder":1192},[51,168689,168690],{"class":53,"line":387},[51,168691,168539],{"class":68},[51,168693,168694,168696,168698],{"class":53,"line":404},[51,168695,32911],{"class":64},[51,168697,69],{"class":68},[51,168699,152057],{"class":72},[51,168701,168702,168704,168706,168708],{"class":53,"line":415},[51,168703,123],{"class":64},[51,168705,11831],{"class":72},[51,168707,114],{"class":64},[51,168709,152068],{"class":72},[51,168711,168712],{"class":53,"line":420},[51,168713,3480],{"emptyLinePlaceholder":1192},[51,168715,168716],{"class":53,"line":429},[51,168717,3480],{"emptyLinePlaceholder":1192},[51,168719,168720,168722,168724,168726,168728,168730],{"class":53,"line":434},[51,168721,31379],{"class":175},[51,168723,167564],{"class":72},[51,168725,443],{"class":175},[51,168727,13397],{"class":72},[51,168729,457],{"class":175},[51,168731,31461],{"class":72},[40,168733,168734,168735,101982,168737,168739],{},"这个写法使用 ",[37,168736,167496],{},[37,168738,167611],{}," 接收原函数的所有参数。",[14,168741,168743],{"id":168742},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[40,168745,124256],{},[19,168747,168748,168751,168754],{},[22,168749,168750],{},"给定一组学生数据。",[22,168752,168753],{},"封装函数，根据传入规则筛选学生。",[22,168755,168756],{},"筛选及格、优秀、未成年学生。",[40,168758,10997],{},[29,168760,168762],{"className":31342,"code":168761,"language":31344,"meta":35,"style":35},"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",[37,168763,168764,168772,168800,168828,168856,168860,168864,168868,168878,168886,168896,168903,168908,168914,168918,168922,168946,168969,168992,168996,169003,169010],{"__ignoreMap":35},[51,168765,168766,168768,168770],{"class":53,"line":54},[51,168767,160680],{"class":72},[51,168769,108],{"class":64},[51,168771,56411],{"class":72},[51,168773,168774,168776,168778,168780,168782,168784,168786,168788,168790,168792,168794,168796,168798],{"class":53,"line":61},[51,168775,149349],{"class":72},[51,168777,63643],{"class":282},[51,168779,52401],{"class":72},[51,168781,150852],{"class":282},[51,168783,13397],{"class":72},[51,168785,70088],{"class":282},[51,168787,52401],{"class":72},[51,168789,1896],{"class":175},[51,168791,13397],{"class":72},[51,168793,152436],{"class":282},[51,168795,52401],{"class":72},[51,168797,2231],{"class":175},[51,168799,6004],{"class":72},[51,168801,168802,168804,168806,168808,168810,168812,168814,168816,168818,168820,168822,168824,168826],{"class":53,"line":93},[51,168803,149349],{"class":72},[51,168805,63643],{"class":282},[51,168807,52401],{"class":72},[51,168809,151900],{"class":282},[51,168811,13397],{"class":72},[51,168813,70088],{"class":282},[51,168815,52401],{"class":72},[51,168817,1871],{"class":175},[51,168819,13397],{"class":72},[51,168821,152436],{"class":282},[51,168823,52401],{"class":72},[51,168825,2056],{"class":175},[51,168827,6004],{"class":72},[51,168829,168830,168832,168834,168836,168838,168840,168842,168844,168846,168848,168850,168852,168854],{"class":53,"line":99},[51,168831,149349],{"class":72},[51,168833,63643],{"class":282},[51,168835,52401],{"class":72},[51,168837,160695],{"class":282},[51,168839,13397],{"class":72},[51,168841,70088],{"class":282},[51,168843,52401],{"class":72},[51,168845,1921],{"class":175},[51,168847,13397],{"class":72},[51,168849,152436],{"class":282},[51,168851,52401],{"class":72},[51,168853,2126],{"class":175},[51,168855,6004],{"class":72},[51,168857,168858],{"class":53,"line":120},[51,168859,34210],{"class":72},[51,168861,168862],{"class":53,"line":129},[51,168863,3480],{"emptyLinePlaceholder":1192},[51,168865,168866],{"class":53,"line":206},[51,168867,3480],{"emptyLinePlaceholder":1192},[51,168869,168870,168872,168875],{"class":53,"line":212},[51,168871,32911],{"class":64},[51,168873,168874],{"class":68}," filter_students",[51,168876,168877],{"class":72},"(students, condition):\n",[51,168879,168880,168882,168884],{"class":53,"line":227},[51,168881,162187],{"class":72},[51,168883,108],{"class":64},[51,168885,52802],{"class":72},[51,168887,168888,168890,168892,168894],{"class":53,"line":370},[51,168889,4278],{"class":64},[51,168891,153101],{"class":72},[51,168893,27007],{"class":64},[51,168895,153106],{"class":72},[51,168897,168898,168900],{"class":53,"line":387},[51,168899,3577],{"class":64},[51,168901,168902],{"class":72}," condition(student):\n",[51,168904,168905],{"class":53,"line":404},[51,168906,168907],{"class":72},"            result.append(student)\n",[51,168909,168910,168912],{"class":53,"line":415},[51,168911,123],{"class":64},[51,168913,168669],{"class":72},[51,168915,168916],{"class":53,"line":420},[51,168917,3480],{"emptyLinePlaceholder":1192},[51,168919,168920],{"class":53,"line":429},[51,168921,3480],{"emptyLinePlaceholder":1192},[51,168923,168924,168926,168928,168931,168933,168936,168938,168940,168942,168944],{"class":53,"line":434},[51,168925,166665],{"class":72},[51,168927,108],{"class":64},[51,168929,168930],{"class":72}," filter_students(students, ",[51,168932,167850],{"class":64},[51,168934,168935],{"class":72}," s: s[",[51,168937,152436],{"class":282},[51,168939,5517],{"class":72},[51,168941,2800],{"class":64},[51,168943,158801],{"class":175},[51,168945,90],{"class":72},[51,168947,168948,168951,168953,168955,168957,168959,168961,168963,168965,168967],{"class":53,"line":448},[51,168949,168950],{"class":72},"excellent ",[51,168952,108],{"class":64},[51,168954,168930],{"class":72},[51,168956,167850],{"class":64},[51,168958,168935],{"class":72},[51,168960,152436],{"class":282},[51,168962,5517],{"class":72},[51,168964,2800],{"class":64},[51,168966,158752],{"class":175},[51,168968,90],{"class":72},[51,168970,168971,168974,168976,168978,168980,168982,168984,168986,168988,168990],{"class":53,"line":462},[51,168972,168973],{"class":72},"under_age ",[51,168975,108],{"class":64},[51,168977,168930],{"class":72},[51,168979,167850],{"class":64},[51,168981,168935],{"class":72},[51,168983,70088],{"class":282},[51,168985,5517],{"class":72},[51,168987,2154],{"class":64},[51,168989,157249],{"class":175},[51,168991,90],{"class":72},[51,168993,168994],{"class":53,"line":470},[51,168995,3480],{"emptyLinePlaceholder":1192},[51,168997,168998,169000],{"class":53,"line":2783},[51,168999,31379],{"class":175},[51,169001,169002],{"class":72},"(passed)\n",[51,169004,169005,169007],{"class":53,"line":2788},[51,169006,31379],{"class":175},[51,169008,169009],{"class":72},"(excellent)\n",[51,169011,169012,169014],{"class":53,"line":2817},[51,169013,31379],{"class":175},[51,169015,169016],{"class":72},"(under_age)\n",[14,169018,169020],{"id":169019},"_715-易错点","7.15 易错点",[19,169022,169023,169026,169034,169039,169050],{},[22,169024,169025],{},"默认参数不要写可变对象。",[22,169027,169028,169030,169031,169033],{},[37,169029,167496],{}," 是元组，",[37,169032,167611],{}," 是字典。",[22,169035,169036,169038],{},[37,169037,167850],{}," 只适合简单表达式。",[22,169040,169041,101982,169043,169045,169046,169049],{},[37,169042,75008],{},[37,169044,81015],{}," 的结果是迭代器，常用 ",[37,169047,169048],{},"list()"," 转换查看。",[22,169051,169052],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169054,169056],{"id":169055},"_716-本章练习","7.16 本章练习",[19,169058,169059,169066,169072,169077,169082],{},[22,169060,169061,169062,169065],{},"写函数 ",[37,169063,169064],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[22,169067,169061,169068,169071],{},[37,169069,169070],{},"print_user(**kwargs)","，输出用户所有字段。",[22,169073,105330,169074,169076],{},[37,169075,167850],{}," 对学生列表按年龄排序。",[22,169078,105330,169079,169081],{},[37,169080,81015],{}," 找出成绩不及格的学生。",[22,169083,169084],{},"写一个装饰器，统计函数执行前后的提示信息。",[1179,169086,169087],{},"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":35,"searchDepth":61,"depth":61,"links":169089},[169090,169091,169092,169093,169094,169095,169099,169100,169101,169102,169107,169108,169109,169110,169111,169112],{"id":166948,"depth":61,"text":166949},{"id":167062,"depth":61,"text":167063},{"id":167151,"depth":61,"text":167152},{"id":167213,"depth":61,"text":167214},{"id":167359,"depth":61,"text":167360},{"id":167486,"depth":61,"text":167487,"children":169096},[169097,169098],{"id":167490,"depth":93,"text":167491},{"id":167605,"depth":93,"text":167606},{"id":167686,"depth":61,"text":167687},{"id":167844,"depth":61,"text":167845},{"id":168012,"depth":61,"text":168013},{"id":168094,"depth":61,"text":168095,"children":169103},[169104,169105,169106],{"id":168098,"depth":93,"text":168099},{"id":168169,"depth":93,"text":168170},{"id":168246,"depth":93,"text":168247},{"id":168371,"depth":61,"text":168372},{"id":168461,"depth":61,"text":168462},{"id":168592,"depth":61,"text":168593},{"id":168742,"depth":61,"text":168743},{"id":169019,"depth":61,"text":169020},{"id":169055,"depth":61,"text":169056},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166940,"description":24339},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169119,"title":169120,"body":169121,"description":24339,"extension":1190,"meta":171640,"navigation":1192,"path":171641,"seo":171642,"stem":171643,"__hash__":171644},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169122,"toc":171615},[169123,169126,169130,169133,169136,169167,169171,169175,169178,169205,169209,169212,169263,169266,169281,169284,169319,169323,169325,169349,169352,169412,169416,169420,169423,169480,169483,169503,169507,169510,169573,169577,169580,169636,169643,169667,169671,169674,169737,169741,169746,169797,169800,169804,169809,169876,169879,169961,169965,169970,170021,170024,170028,170031,170034,170042,170045,170091,170094,170140,170144,170150,170194,170197,170243,170246,170286,170289,170350,170354,170357,170447,170450,170592,170595,170662,170666,170669,170672,170813,170816,170894,170897,171073,171077,171079,171090,171092,171291,171295,171539,171543,171577,171581,171612],[10,169124,169120],{"id":169125},"_8-文件操作",[14,169127,169129],{"id":169128},"_81-文件操作的意义","8.1 文件操作的意义",[40,169131,169132],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[40,169134,169135],{},"常见文件类型：",[19,169137,169138,169144,169150,169156,169162],{},[22,169139,169140,169143],{},[37,169141,169142],{},".txt","：普通文本。",[22,169145,169146,169149],{},[37,169147,169148],{},".csv","：表格文本。",[22,169151,169152,169155],{},[37,169153,169154],{},".json","：结构化数据。",[22,169157,169158,169161],{},[37,169159,169160],{},".log","：日志文件。",[22,169163,169164,169166],{},[37,169165,147316],{},"：Python 源代码。",[14,169168,169170],{"id":169169},"_82-路径","8.2 路径",[1233,169172,169174],{"id":169173},"_821-相对路径","8.2.1 相对路径",[40,169176,169177],{},"相对当前运行目录：",[29,169179,169181],{"className":31342,"code":169180,"language":31344,"meta":35,"style":35},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[37,169182,169183],{"__ignoreMap":35},[51,169184,169185,169187,169189,169191,169193,169195,169197,169199,169201,169203],{"class":53,"line":54},[51,169186,87879],{"class":175},[51,169188,73],{"class":72},[51,169190,147760],{"class":282},[51,169192,13397],{"class":72},[51,169194,147765],{"class":282},[51,169196,13397],{"class":72},[51,169198,147770],{"class":78},[51,169200,108],{"class":64},[51,169202,147775],{"class":282},[51,169204,90],{"class":72},[1233,169206,169208],{"id":169207},"_822-绝对路径","8.2.2 绝对路径",[40,169210,169211],{},"从根目录或盘符开始：",[29,169213,169215],{"className":31342,"code":169214,"language":31344,"meta":35,"style":35},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[37,169216,169217,169240],{"__ignoreMap":35},[51,169218,169219,169221,169223,169226,169228,169230,169232,169234,169236,169238],{"class":53,"line":54},[51,169220,87879],{"class":175},[51,169222,73],{"class":72},[51,169224,169225],{"class":282},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[51,169227,13397],{"class":72},[51,169229,147765],{"class":282},[51,169231,13397],{"class":72},[51,169233,147770],{"class":78},[51,169235,108],{"class":64},[51,169237,147775],{"class":282},[51,169239,90],{"class":72},[51,169241,169242,169244,169246,169249,169251,169253,169255,169257,169259,169261],{"class":53,"line":61},[51,169243,87879],{"class":175},[51,169245,73],{"class":72},[51,169247,169248],{"class":282},"\"D:\u002Fdata\u002Fdata.txt\"",[51,169250,13397],{"class":72},[51,169252,147765],{"class":282},[51,169254,13397],{"class":72},[51,169256,147770],{"class":78},[51,169258,108],{"class":64},[51,169260,147775],{"class":282},[51,169262,90],{"class":72},[40,169264,169265],{},"Windows 路径建议写成：",[29,169267,169269],{"className":31342,"code":169268,"language":31344,"meta":35,"style":35},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[37,169270,169271],{"__ignoreMap":35},[51,169272,169273,169276,169278],{"class":53,"line":54},[51,169274,169275],{"class":72},"path ",[51,169277,108],{"class":64},[51,169279,169280],{"class":282}," \"D:\u002Fdata\u002Fdata.txt\"\n",[40,169282,169283],{},"或原始字符串：",[29,169285,169287],{"className":31342,"code":169286,"language":31344,"meta":35,"style":35},"path = r\"D:\\data\\data.txt\"\n",[37,169288,169289],{"__ignoreMap":35},[51,169290,169291,169293,169295,169297,169299,169302,169305,169308,169310,169312,169314,169317],{"class":53,"line":54},[51,169292,169275],{"class":72},[51,169294,108],{"class":64},[51,169296,18083],{"class":64},[51,169298,1503],{"class":282},[51,169300,169301],{"class":48941},"D:",[51,169303,169304],{"class":175},"\\d",[51,169306,169307],{"class":48941},"ata",[51,169309,169304],{"class":175},[51,169311,169307],{"class":48941},[51,169313,1804],{"class":175},[51,169315,169316],{"class":48941},"txt",[51,169318,26097],{"class":282},[14,169320,169322],{"id":169321},"_83-open函数","8.3 open函数",[40,169324,27],{},[29,169326,169328],{"className":31342,"code":169327,"language":31344,"meta":35,"style":35},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[37,169329,169330],{"__ignoreMap":35},[51,169331,169332,169334,169336,169338,169341,169343,169345,169347],{"class":53,"line":54},[51,169333,46318],{"class":78},[51,169335,14526],{"class":64},[51,169337,147755],{"class":175},[51,169339,169340],{"class":72},"(文件路径, 打开模式, ",[51,169342,147770],{"class":78},[51,169344,108],{"class":64},[51,169346,147775],{"class":282},[51,169348,90],{"class":72},[40,169350,169351],{},"常见模式：",[1393,169353,169354,169363],{},[1396,169355,169356],{},[1399,169357,169358,169361],{},[1402,169359,169360],{},"模式",[1402,169362,26833],{},[1439,169364,169365,169374,169383,169392,169402],{},[1399,169366,169367,169371],{},[1444,169368,169369],{},[37,169370,1916],{},[1444,169372,169373],{},"只读，文件不存在会报错",[1399,169375,169376,169380],{},[1444,169377,169378],{},[37,169379,2040],{},[1444,169381,169382],{},"只写，文件不存在会创建，存在会清空",[1399,169384,169385,169389],{},[1444,169386,169387],{},[37,169388,981],{},[1444,169390,169391],{},"追加，文件不存在会创建",[1399,169393,169394,169399],{},[1444,169395,169396],{},[37,169397,169398],{},"rb",[1444,169400,169401],{},"二进制只读",[1399,169403,169404,169409],{},[1444,169405,169406],{},[37,169407,169408],{},"wb",[1444,169410,169411],{},"二进制只写",[14,169413,169415],{"id":169414},"_84-读取文件","8.4 读取文件",[1233,169417,169419],{"id":169418},"_841-read","8.4.1 read",[40,169421,169422],{},"一次读取全部内容：",[29,169424,169426],{"className":31342,"code":169425,"language":31344,"meta":35,"style":35},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[37,169427,169428,169454,169466,169473],{"__ignoreMap":35},[51,169429,169430,169432,169434,169436,169438,169440,169442,169444,169446,169448,169450,169452],{"class":53,"line":54},[51,169431,46318],{"class":78},[51,169433,14526],{"class":64},[51,169435,147755],{"class":175},[51,169437,73],{"class":72},[51,169439,147760],{"class":282},[51,169441,13397],{"class":72},[51,169443,147765],{"class":282},[51,169445,13397],{"class":72},[51,169447,147770],{"class":78},[51,169449,108],{"class":64},[51,169451,147775],{"class":282},[51,169453,90],{"class":72},[51,169455,169456,169459,169461,169463],{"class":53,"line":61},[51,169457,169458],{"class":72},"content ",[51,169460,108],{"class":64},[51,169462,149117],{"class":78},[51,169464,169465],{"class":72},".read()\n",[51,169467,169468,169470],{"class":53,"line":93},[51,169469,31379],{"class":175},[51,169471,169472],{"class":72},"(content)\n",[51,169474,169475,169477],{"class":53,"line":99},[51,169476,46318],{"class":78},[51,169478,169479],{"class":72},".close()\n",[40,169481,169482],{},"可以指定读取字符数：",[29,169484,169486],{"className":31342,"code":169485,"language":31344,"meta":35,"style":35},"content = file.read(10)\n",[37,169487,169488],{"__ignoreMap":35},[51,169489,169490,169492,169494,169496,169499,169501],{"class":53,"line":54},[51,169491,169458],{"class":72},[51,169493,108],{"class":64},[51,169495,149117],{"class":78},[51,169497,169498],{"class":72},".read(",[51,169500,443],{"class":175},[51,169502,90],{"class":72},[1233,169504,169506],{"id":169505},"_842-readline","8.4.2 readline",[40,169508,169509],{},"一次读取一行：",[29,169511,169513],{"className":31342,"code":169512,"language":31344,"meta":35,"style":35},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[37,169514,169515,169541,169545,169556,169563,169567],{"__ignoreMap":35},[51,169516,169517,169519,169521,169523,169525,169527,169529,169531,169533,169535,169537,169539],{"class":53,"line":54},[51,169518,46318],{"class":78},[51,169520,14526],{"class":64},[51,169522,147755],{"class":175},[51,169524,73],{"class":72},[51,169526,147760],{"class":282},[51,169528,13397],{"class":72},[51,169530,147765],{"class":282},[51,169532,13397],{"class":72},[51,169534,147770],{"class":78},[51,169536,108],{"class":64},[51,169538,147775],{"class":282},[51,169540,90],{"class":72},[51,169542,169543],{"class":53,"line":61},[51,169544,3480],{"emptyLinePlaceholder":1192},[51,169546,169547,169549,169551,169553],{"class":53,"line":93},[51,169548,148216],{"class":72},[51,169550,108],{"class":64},[51,169552,149117],{"class":78},[51,169554,169555],{"class":72},".readline()\n",[51,169557,169558,169560],{"class":53,"line":99},[51,169559,31379],{"class":175},[51,169561,169562],{"class":72},"(line)\n",[51,169564,169565],{"class":53,"line":120},[51,169566,3480],{"emptyLinePlaceholder":1192},[51,169568,169569,169571],{"class":53,"line":129},[51,169570,46318],{"class":78},[51,169572,169479],{"class":72},[1233,169574,169576],{"id":169575},"_843-readlines","8.4.3 readlines",[40,169578,169579],{},"读取所有行，返回列表：",[29,169581,169583],{"className":31342,"code":169582,"language":31344,"meta":35,"style":35},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[37,169584,169585,169611,169623,169630],{"__ignoreMap":35},[51,169586,169587,169589,169591,169593,169595,169597,169599,169601,169603,169605,169607,169609],{"class":53,"line":54},[51,169588,46318],{"class":78},[51,169590,14526],{"class":64},[51,169592,147755],{"class":175},[51,169594,73],{"class":72},[51,169596,147760],{"class":282},[51,169598,13397],{"class":72},[51,169600,147765],{"class":282},[51,169602,13397],{"class":72},[51,169604,147770],{"class":78},[51,169606,108],{"class":64},[51,169608,147775],{"class":282},[51,169610,90],{"class":72},[51,169612,169613,169616,169618,169620],{"class":53,"line":61},[51,169614,169615],{"class":72},"lines ",[51,169617,108],{"class":64},[51,169619,149117],{"class":78},[51,169621,169622],{"class":72},".readlines()\n",[51,169624,169625,169627],{"class":53,"line":93},[51,169626,31379],{"class":175},[51,169628,169629],{"class":72},"(lines)\n",[51,169631,169632,169634],{"class":53,"line":99},[51,169633,46318],{"class":78},[51,169635,169479],{"class":72},[40,169637,169638,169639,169642],{},"每一行通常带有换行符，可以用 ",[37,169640,169641],{},"strip()"," 去掉：",[29,169644,169646],{"className":31342,"code":169645,"language":31344,"meta":35,"style":35},"for line in lines:\n    print(line.strip())\n",[37,169647,169648,169660],{"__ignoreMap":35},[51,169649,169650,169652,169655,169657],{"class":53,"line":54},[51,169651,4102],{"class":64},[51,169653,169654],{"class":72}," line ",[51,169656,27007],{"class":64},[51,169658,169659],{"class":72}," lines:\n",[51,169661,169662,169664],{"class":53,"line":61},[51,169663,32263],{"class":175},[51,169665,169666],{"class":72},"(line.strip())\n",[1233,169668,169670],{"id":169669},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[40,169672,169673],{},"推荐读取大文件时使用：",[29,169675,169677],{"className":31342,"code":169676,"language":31344,"meta":35,"style":35},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[37,169678,169679,169705,169709,169721,169727,169731],{"__ignoreMap":35},[51,169680,169681,169683,169685,169687,169689,169691,169693,169695,169697,169699,169701,169703],{"class":53,"line":54},[51,169682,46318],{"class":78},[51,169684,14526],{"class":64},[51,169686,147755],{"class":175},[51,169688,73],{"class":72},[51,169690,147760],{"class":282},[51,169692,13397],{"class":72},[51,169694,147765],{"class":282},[51,169696,13397],{"class":72},[51,169698,147770],{"class":78},[51,169700,108],{"class":64},[51,169702,147775],{"class":282},[51,169704,90],{"class":72},[51,169706,169707],{"class":53,"line":61},[51,169708,3480],{"emptyLinePlaceholder":1192},[51,169710,169711,169713,169715,169717,169719],{"class":53,"line":93},[51,169712,4102],{"class":64},[51,169714,169654],{"class":72},[51,169716,27007],{"class":64},[51,169718,149117],{"class":78},[51,169720,4816],{"class":72},[51,169722,169723,169725],{"class":53,"line":99},[51,169724,32263],{"class":175},[51,169726,169666],{"class":72},[51,169728,169729],{"class":53,"line":120},[51,169730,3480],{"emptyLinePlaceholder":1192},[51,169732,169733,169735],{"class":53,"line":129},[51,169734,46318],{"class":78},[51,169736,169479],{"class":72},[14,169738,169740],{"id":169739},"_85-with语句","8.5 with语句",[40,169742,169743,169745],{},[37,169744,108797],{}," 会自动关闭文件，推荐使用。",[29,169747,169749],{"className":31342,"code":169748,"language":31344,"meta":35,"style":35},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[37,169750,169751,169781,169791],{"__ignoreMap":35},[51,169752,169753,169755,169757,169759,169761,169763,169765,169767,169769,169771,169773,169775,169777,169779],{"class":53,"line":54},[51,169754,108797],{"class":64},[51,169756,147755],{"class":175},[51,169758,73],{"class":72},[51,169760,147760],{"class":282},[51,169762,13397],{"class":72},[51,169764,147765],{"class":282},[51,169766,13397],{"class":72},[51,169768,147770],{"class":78},[51,169770,108],{"class":64},[51,169772,147775],{"class":282},[51,169774,14676],{"class":72},[51,169776,32347],{"class":64},[51,169778,149117],{"class":78},[51,169780,4816],{"class":72},[51,169782,169783,169785,169787,169789],{"class":53,"line":61},[51,169784,147787],{"class":72},[51,169786,108],{"class":64},[51,169788,149117],{"class":78},[51,169790,169465],{"class":72},[51,169792,169793,169795],{"class":53,"line":93},[51,169794,32263],{"class":175},[51,169796,169472],{"class":72},[40,169798,169799],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169801,169803],{"id":169802},"_86-写入文件","8.6 写入文件",[40,169805,169806,169808],{},[37,169807,2040],{}," 模式会清空原文件。",[29,169810,169812],{"className":31342,"code":169811,"language":31344,"meta":35,"style":35},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[37,169813,169814,169844,169861],{"__ignoreMap":35},[51,169815,169816,169818,169820,169822,169824,169826,169828,169830,169832,169834,169836,169838,169840,169842],{"class":53,"line":54},[51,169817,108797],{"class":64},[51,169819,147755],{"class":175},[51,169821,73],{"class":72},[51,169823,147760],{"class":282},[51,169825,13397],{"class":72},[51,169827,152940],{"class":282},[51,169829,13397],{"class":72},[51,169831,147770],{"class":78},[51,169833,108],{"class":64},[51,169835,147775],{"class":282},[51,169837,14676],{"class":72},[51,169839,32347],{"class":64},[51,169841,149117],{"class":78},[51,169843,4816],{"class":72},[51,169845,169846,169849,169852,169855,169857,169859],{"class":53,"line":61},[51,169847,169848],{"class":78},"    file",[51,169850,169851],{"class":72},".write(",[51,169853,169854],{"class":282},"\"hello",[51,169856,157489],{"class":175},[51,169858,1503],{"class":282},[51,169860,90],{"class":72},[51,169862,169863,169865,169867,169870,169872,169874],{"class":53,"line":93},[51,169864,169848],{"class":78},[51,169866,169851],{"class":72},[51,169868,169869],{"class":282},"\"python",[51,169871,157489],{"class":175},[51,169873,1503],{"class":282},[51,169875,90],{"class":72},[40,169877,169878],{},"写入多行：",[29,169880,169882],{"className":31342,"code":169881,"language":31344,"meta":35,"style":35},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[37,169883,169884,169919,169923,169954],{"__ignoreMap":35},[51,169885,169886,169888,169890,169892,169895,169897,169899,169901,169904,169906,169908,169910,169913,169915,169917],{"class":53,"line":54},[51,169887,169615],{"class":72},[51,169889,108],{"class":64},[51,169891,53190],{"class":72},[51,169893,169894],{"class":282},"\"小明,18",[51,169896,157489],{"class":175},[51,169898,1503],{"class":282},[51,169900,13397],{"class":72},[51,169902,169903],{"class":282},"\"小红,17",[51,169905,157489],{"class":175},[51,169907,1503],{"class":282},[51,169909,13397],{"class":72},[51,169911,169912],{"class":282},"\"小刚,19",[51,169914,157489],{"class":175},[51,169916,1503],{"class":282},[51,169918,34210],{"class":72},[51,169920,169921],{"class":53,"line":61},[51,169922,3480],{"emptyLinePlaceholder":1192},[51,169924,169925,169927,169929,169931,169934,169936,169938,169940,169942,169944,169946,169948,169950,169952],{"class":53,"line":93},[51,169926,108797],{"class":64},[51,169928,147755],{"class":175},[51,169930,73],{"class":72},[51,169932,169933],{"class":282},"\"students.txt\"",[51,169935,13397],{"class":72},[51,169937,152940],{"class":282},[51,169939,13397],{"class":72},[51,169941,147770],{"class":78},[51,169943,108],{"class":64},[51,169945,147775],{"class":282},[51,169947,14676],{"class":72},[51,169949,32347],{"class":64},[51,169951,149117],{"class":78},[51,169953,4816],{"class":72},[51,169955,169956,169958],{"class":53,"line":99},[51,169957,169848],{"class":78},[51,169959,169960],{"class":72},".writelines(lines)\n",[14,169962,169964],{"id":169963},"_87-追加文件","8.7 追加文件",[40,169966,169967,169969],{},[37,169968,981],{}," 模式不会清空原内容，而是在末尾追加。",[29,169971,169973],{"className":31342,"code":169972,"language":31344,"meta":35,"style":35},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[37,169974,169975,170006],{"__ignoreMap":35},[51,169976,169977,169979,169981,169983,169986,169988,169990,169992,169994,169996,169998,170000,170002,170004],{"class":53,"line":54},[51,169978,108797],{"class":64},[51,169980,147755],{"class":175},[51,169982,73],{"class":72},[51,169984,169985],{"class":282},"\"log.txt\"",[51,169987,13397],{"class":72},[51,169989,166289],{"class":282},[51,169991,13397],{"class":72},[51,169993,147770],{"class":78},[51,169995,108],{"class":64},[51,169997,147775],{"class":282},[51,169999,14676],{"class":72},[51,170001,32347],{"class":64},[51,170003,149117],{"class":78},[51,170005,4816],{"class":72},[51,170007,170008,170010,170012,170015,170017,170019],{"class":53,"line":61},[51,170009,169848],{"class":78},[51,170011,169851],{"class":72},[51,170013,170014],{"class":282},"\"程序启动",[51,170016,157489],{"class":175},[51,170018,1503],{"class":282},[51,170020,90],{"class":72},[40,170022,170023],{},"日志类文件常用追加模式。",[14,170025,170027],{"id":170026},"_88-文件编码","8.8 文件编码",[40,170029,170030],{},"编码决定文字如何保存为字节。",[40,170032,170033],{},"常见编码：",[19,170035,170036,170039],{},[22,170037,170038],{},"UTF-8：推荐。",[22,170040,170041],{},"GBK：部分 Windows 中文文件常见。",[40,170043,170044],{},"读取文件乱码时，可以尝试：",[29,170046,170048],{"className":31342,"code":170047,"language":31344,"meta":35,"style":35},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[37,170049,170050,170081],{"__ignoreMap":35},[51,170051,170052,170054,170056,170058,170060,170062,170064,170066,170068,170070,170073,170075,170077,170079],{"class":53,"line":54},[51,170053,108797],{"class":64},[51,170055,147755],{"class":175},[51,170057,73],{"class":72},[51,170059,147760],{"class":282},[51,170061,13397],{"class":72},[51,170063,147765],{"class":282},[51,170065,13397],{"class":72},[51,170067,147770],{"class":78},[51,170069,108],{"class":64},[51,170071,170072],{"class":282},"\"gbk\"",[51,170074,14676],{"class":72},[51,170076,32347],{"class":64},[51,170078,149117],{"class":78},[51,170080,4816],{"class":72},[51,170082,170083,170085,170087,170089],{"class":53,"line":61},[51,170084,147787],{"class":72},[51,170086,108],{"class":64},[51,170088,149117],{"class":78},[51,170090,169465],{"class":72},[40,170092,170093],{},"写文件时建议统一 UTF-8：",[29,170095,170097],{"className":31342,"code":170096,"language":31344,"meta":35,"style":35},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[37,170098,170099,170129],{"__ignoreMap":35},[51,170100,170101,170103,170105,170107,170109,170111,170113,170115,170117,170119,170121,170123,170125,170127],{"class":53,"line":54},[51,170102,108797],{"class":64},[51,170104,147755],{"class":175},[51,170106,73],{"class":72},[51,170108,147760],{"class":282},[51,170110,13397],{"class":72},[51,170112,152940],{"class":282},[51,170114,13397],{"class":72},[51,170116,147770],{"class":78},[51,170118,108],{"class":64},[51,170120,147775],{"class":282},[51,170122,14676],{"class":72},[51,170124,32347],{"class":64},[51,170126,149117],{"class":78},[51,170128,4816],{"class":72},[51,170130,170131,170133,170135,170138],{"class":53,"line":61},[51,170132,169848],{"class":78},[51,170134,169851],{"class":72},[51,170136,170137],{"class":282},"\"中文内容\"",[51,170139,90],{"class":72},[14,170141,170143],{"id":170142},"_89-pathlib","8.9 pathlib",[40,170145,170146,170149],{},[37,170147,170148],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[29,170151,170153],{"className":31342,"code":170152,"language":31344,"meta":35,"style":35},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[37,170154,170155,170165,170169,170187],{"__ignoreMap":35},[51,170156,170157,170159,170161,170163],{"class":53,"line":54},[51,170158,31701],{"class":64},[51,170160,109275],{"class":72},[51,170162,31356],{"class":64},[51,170164,109280],{"class":72},[51,170166,170167],{"class":53,"line":61},[51,170168,3480],{"emptyLinePlaceholder":1192},[51,170170,170171,170173,170175,170177,170180,170182,170184],{"class":53,"line":93},[51,170172,169275],{"class":72},[51,170174,108],{"class":64},[51,170176,109509],{"class":72},[51,170178,170179],{"class":282},"\"data\"",[51,170181,14676],{"class":72},[51,170183,1830],{"class":64},[51,170185,170186],{"class":282}," \"students.txt\"\n",[51,170188,170189,170191],{"class":53,"line":99},[51,170190,31379],{"class":175},[51,170192,170193],{"class":72},"(path)\n",[40,170195,170196],{},"创建目录：",[29,170198,170200],{"className":31342,"code":170199,"language":31344,"meta":35,"style":35},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[37,170201,170202,170212,170216,170229],{"__ignoreMap":35},[51,170203,170204,170206,170208,170210],{"class":53,"line":54},[51,170205,31701],{"class":64},[51,170207,109275],{"class":72},[51,170209,31356],{"class":64},[51,170211,109280],{"class":72},[51,170213,170214],{"class":53,"line":61},[51,170215,3480],{"emptyLinePlaceholder":1192},[51,170217,170218,170221,170223,170225,170227],{"class":53,"line":93},[51,170219,170220],{"class":72},"data_dir ",[51,170222,108],{"class":64},[51,170224,109509],{"class":72},[51,170226,170179],{"class":282},[51,170228,90],{"class":72},[51,170230,170231,170234,170237,170239,170241],{"class":53,"line":99},[51,170232,170233],{"class":72},"data_dir.mkdir(",[51,170235,170236],{"class":78},"exist_ok",[51,170238,108],{"class":64},[51,170240,32440],{"class":175},[51,170242,90],{"class":72},[40,170244,170245],{},"判断文件是否存在：",[29,170247,170249],{"className":31342,"code":170248,"language":31344,"meta":35,"style":35},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[37,170250,170251,170264,170268,170275],{"__ignoreMap":35},[51,170252,170253,170255,170257,170259,170262],{"class":53,"line":54},[51,170254,169275],{"class":72},[51,170256,108],{"class":64},[51,170258,109509],{"class":72},[51,170260,170261],{"class":282},"\"data\u002Fstudents.txt\"",[51,170263,90],{"class":72},[51,170265,170266],{"class":53,"line":61},[51,170267,3480],{"emptyLinePlaceholder":1192},[51,170269,170270,170272],{"class":53,"line":93},[51,170271,2633],{"class":64},[51,170273,170274],{"class":72}," path.exists():\n",[51,170276,170277,170279,170281,170284],{"class":53,"line":99},[51,170278,32263],{"class":175},[51,170280,73],{"class":72},[51,170282,170283],{"class":282},"\"文件存在\"",[51,170285,90],{"class":72},[40,170287,170288],{},"读写文本：",[29,170290,170292],{"className":31342,"code":170291,"language":31344,"meta":35,"style":35},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[37,170293,170294,170306,170310,170327,170344],{"__ignoreMap":35},[51,170295,170296,170298,170300,170302,170304],{"class":53,"line":54},[51,170297,169275],{"class":72},[51,170299,108],{"class":64},[51,170301,109509],{"class":72},[51,170303,147760],{"class":282},[51,170305,90],{"class":72},[51,170307,170308],{"class":53,"line":61},[51,170309,3480],{"emptyLinePlaceholder":1192},[51,170311,170312,170315,170317,170319,170321,170323,170325],{"class":53,"line":93},[51,170313,170314],{"class":72},"path.write_text(",[51,170316,146840],{"class":282},[51,170318,13397],{"class":72},[51,170320,147770],{"class":78},[51,170322,108],{"class":64},[51,170324,147775],{"class":282},[51,170326,90],{"class":72},[51,170328,170329,170331,170333,170336,170338,170340,170342],{"class":53,"line":99},[51,170330,169458],{"class":72},[51,170332,108],{"class":64},[51,170334,170335],{"class":72}," path.read_text(",[51,170337,147770],{"class":78},[51,170339,108],{"class":64},[51,170341,147775],{"class":282},[51,170343,90],{"class":72},[51,170345,170346,170348],{"class":53,"line":120},[51,170347,31379],{"class":175},[51,170349,169472],{"class":72},[14,170351,170353],{"id":170352},"_810-json文件","8.10 JSON文件",[40,170355,170356],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[29,170358,170360],{"className":31342,"code":170359,"language":31344,"meta":35,"style":35},"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",[37,170361,170362,170368,170372,170380,170390,170400,170408,170412,170416,170441],{"__ignoreMap":35},[51,170363,170364,170366],{"class":53,"line":54},[51,170365,31356],{"class":64},[51,170367,148055],{"class":72},[51,170369,170370],{"class":53,"line":61},[51,170371,3480],{"emptyLinePlaceholder":1192},[51,170373,170374,170376,170378],{"class":53,"line":93},[51,170375,150445],{"class":72},[51,170377,108],{"class":64},[51,170379,16534],{"class":72},[51,170381,170382,170384,170386,170388],{"class":53,"line":99},[51,170383,147984],{"class":282},[51,170385,52401],{"class":72},[51,170387,150852],{"class":282},[51,170389,32430],{"class":72},[51,170391,170392,170394,170396,170398],{"class":53,"line":120},[51,170393,165501],{"class":282},[51,170395,52401],{"class":72},[51,170397,1896],{"class":175},[51,170399,32430],{"class":72},[51,170401,170402,170404,170406],{"class":53,"line":129},[51,170403,165512],{"class":282},[51,170405,52401],{"class":72},[51,170407,165517],{"class":175},[51,170409,170410],{"class":53,"line":206},[51,170411,132],{"class":72},[51,170413,170414],{"class":53,"line":212},[51,170415,3480],{"emptyLinePlaceholder":1192},[51,170417,170418,170420,170422,170425,170427,170429,170431,170433,170435,170437,170439],{"class":53,"line":227},[51,170419,157408],{"class":72},[51,170421,108],{"class":64},[51,170423,170424],{"class":72}," json.dumps(student, ",[51,170426,148101],{"class":78},[51,170428,108],{"class":64},[51,170430,34951],{"class":175},[51,170432,13397],{"class":72},[51,170434,152976],{"class":78},[51,170436,108],{"class":64},[51,170438,1334],{"class":175},[51,170440,90],{"class":72},[51,170442,170443,170445],{"class":53,"line":370},[51,170444,31379],{"class":175},[51,170446,165035],{"class":72},[40,170448,170449],{},"写入 JSON 文件：",[29,170451,170453],{"className":31342,"code":170452,"language":31344,"meta":35,"style":35},"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",[37,170454,170455,170461,170465,170473,170501,170529,170533,170537,170567],{"__ignoreMap":35},[51,170456,170457,170459],{"class":53,"line":54},[51,170458,31356],{"class":64},[51,170460,148055],{"class":72},[51,170462,170463],{"class":53,"line":61},[51,170464,3480],{"emptyLinePlaceholder":1192},[51,170466,170467,170469,170471],{"class":53,"line":93},[51,170468,160680],{"class":72},[51,170470,108],{"class":64},[51,170472,56411],{"class":72},[51,170474,170475,170477,170479,170481,170483,170485,170487,170489,170491,170493,170495,170497,170499],{"class":53,"line":99},[51,170476,149349],{"class":72},[51,170478,63643],{"class":282},[51,170480,52401],{"class":72},[51,170482,150852],{"class":282},[51,170484,13397],{"class":72},[51,170486,70088],{"class":282},[51,170488,52401],{"class":72},[51,170490,1896],{"class":175},[51,170492,13397],{"class":72},[51,170494,152436],{"class":282},[51,170496,52401],{"class":72},[51,170498,2231],{"class":175},[51,170500,6004],{"class":72},[51,170502,170503,170505,170507,170509,170511,170513,170515,170517,170519,170521,170523,170525,170527],{"class":53,"line":120},[51,170504,149349],{"class":72},[51,170506,63643],{"class":282},[51,170508,52401],{"class":72},[51,170510,151900],{"class":282},[51,170512,13397],{"class":72},[51,170514,70088],{"class":282},[51,170516,52401],{"class":72},[51,170518,1871],{"class":175},[51,170520,13397],{"class":72},[51,170522,152436],{"class":282},[51,170524,52401],{"class":72},[51,170526,2056],{"class":175},[51,170528,6004],{"class":72},[51,170530,170531],{"class":53,"line":129},[51,170532,34210],{"class":72},[51,170534,170535],{"class":53,"line":206},[51,170536,3480],{"emptyLinePlaceholder":1192},[51,170538,170539,170541,170543,170545,170547,170549,170551,170553,170555,170557,170559,170561,170563,170565],{"class":53,"line":212},[51,170540,108797],{"class":64},[51,170542,147755],{"class":175},[51,170544,73],{"class":72},[51,170546,152795],{"class":282},[51,170548,13397],{"class":72},[51,170550,152940],{"class":282},[51,170552,13397],{"class":72},[51,170554,147770],{"class":78},[51,170556,108],{"class":64},[51,170558,147775],{"class":282},[51,170560,14676],{"class":72},[51,170562,32347],{"class":64},[51,170564,149117],{"class":78},[51,170566,4816],{"class":72},[51,170568,170569,170572,170574,170576,170578,170580,170582,170584,170586,170588,170590],{"class":53,"line":227},[51,170570,170571],{"class":72},"    json.dump(students, ",[51,170573,46318],{"class":78},[51,170575,13397],{"class":72},[51,170577,148101],{"class":78},[51,170579,108],{"class":64},[51,170581,34951],{"class":175},[51,170583,13397],{"class":72},[51,170585,152976],{"class":78},[51,170587,108],{"class":64},[51,170589,1334],{"class":175},[51,170591,90],{"class":72},[40,170593,170594],{},"读取 JSON 文件：",[29,170596,170598],{"className":31342,"code":170597,"language":31344,"meta":35,"style":35},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[37,170599,170600,170606,170610,170640,170652,170656],{"__ignoreMap":35},[51,170601,170602,170604],{"class":53,"line":54},[51,170603,31356],{"class":64},[51,170605,148055],{"class":72},[51,170607,170608],{"class":53,"line":61},[51,170609,3480],{"emptyLinePlaceholder":1192},[51,170611,170612,170614,170616,170618,170620,170622,170624,170626,170628,170630,170632,170634,170636,170638],{"class":53,"line":93},[51,170613,108797],{"class":64},[51,170615,147755],{"class":175},[51,170617,73],{"class":72},[51,170619,152795],{"class":282},[51,170621,13397],{"class":72},[51,170623,147765],{"class":282},[51,170625,13397],{"class":72},[51,170627,147770],{"class":78},[51,170629,108],{"class":64},[51,170631,147775],{"class":282},[51,170633,14676],{"class":72},[51,170635,32347],{"class":64},[51,170637,149117],{"class":78},[51,170639,4816],{"class":72},[51,170641,170642,170644,170646,170648,170650],{"class":53,"line":99},[51,170643,154001],{"class":72},[51,170645,108],{"class":64},[51,170647,149128],{"class":72},[51,170649,46318],{"class":78},[51,170651,90],{"class":72},[51,170653,170654],{"class":53,"line":120},[51,170655,3480],{"emptyLinePlaceholder":1192},[51,170657,170658,170660],{"class":53,"line":129},[51,170659,31379],{"class":175},[51,170661,165959],{"class":72},[14,170663,170665],{"id":170664},"_811-csv文件","8.11 CSV文件",[40,170667,170668],{},"CSV 是逗号分隔值，常用于表格数据。",[40,170670,170671],{},"写入 CSV：",[29,170673,170675],{"className":31342,"code":170674,"language":31344,"meta":35,"style":35},"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",[37,170676,170677,170684,170688,170696,170714,170730,170746,170750,170754,170794,170808],{"__ignoreMap":35},[51,170678,170679,170681],{"class":53,"line":54},[51,170680,31356],{"class":64},[51,170682,170683],{"class":72}," csv\n",[51,170685,170686],{"class":53,"line":61},[51,170687,3480],{"emptyLinePlaceholder":1192},[51,170689,170690,170692,170694],{"class":53,"line":93},[51,170691,160680],{"class":72},[51,170693,108],{"class":64},[51,170695,56411],{"class":72},[51,170697,170698,170701,170703,170705,170707,170709,170712],{"class":53,"line":99},[51,170699,170700],{"class":72},"    [",[51,170702,74063],{"class":282},[51,170704,13397],{"class":72},[51,170706,74096],{"class":282},[51,170708,13397],{"class":72},[51,170710,170711],{"class":282},"\"成绩\"",[51,170713,88800],{"class":72},[51,170715,170716,170718,170720,170722,170724,170726,170728],{"class":53,"line":120},[51,170717,170700],{"class":72},[51,170719,150852],{"class":282},[51,170721,13397],{"class":72},[51,170723,1896],{"class":175},[51,170725,13397],{"class":72},[51,170727,2231],{"class":175},[51,170729,88800],{"class":72},[51,170731,170732,170734,170736,170738,170740,170742,170744],{"class":53,"line":129},[51,170733,170700],{"class":72},[51,170735,151900],{"class":282},[51,170737,13397],{"class":72},[51,170739,1871],{"class":175},[51,170741,13397],{"class":72},[51,170743,2056],{"class":175},[51,170745,88800],{"class":72},[51,170747,170748],{"class":53,"line":206},[51,170749,34210],{"class":72},[51,170751,170752],{"class":53,"line":212},[51,170753,3480],{"emptyLinePlaceholder":1192},[51,170755,170756,170758,170760,170762,170765,170767,170769,170771,170773,170775,170777,170779,170782,170784,170786,170788,170790,170792],{"class":53,"line":227},[51,170757,108797],{"class":64},[51,170759,147755],{"class":175},[51,170761,73],{"class":72},[51,170763,170764],{"class":282},"\"students.csv\"",[51,170766,13397],{"class":72},[51,170768,152940],{"class":282},[51,170770,13397],{"class":72},[51,170772,147770],{"class":78},[51,170774,108],{"class":64},[51,170776,147775],{"class":282},[51,170778,13397],{"class":72},[51,170780,170781],{"class":78},"newline",[51,170783,108],{"class":64},[51,170785,8614],{"class":282},[51,170787,14676],{"class":72},[51,170789,32347],{"class":64},[51,170791,149117],{"class":78},[51,170793,4816],{"class":72},[51,170795,170796,170799,170801,170804,170806],{"class":53,"line":370},[51,170797,170798],{"class":72},"    writer ",[51,170800,108],{"class":64},[51,170802,170803],{"class":72}," csv.writer(",[51,170805,46318],{"class":78},[51,170807,90],{"class":72},[51,170809,170810],{"class":53,"line":387},[51,170811,170812],{"class":72},"    writer.writerows(students)\n",[40,170814,170815],{},"读取 CSV：",[29,170817,170819],{"className":31342,"code":170818,"language":31344,"meta":35,"style":35},"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",[37,170820,170821,170827,170831,170861,170875,170887],{"__ignoreMap":35},[51,170822,170823,170825],{"class":53,"line":54},[51,170824,31356],{"class":64},[51,170826,170683],{"class":72},[51,170828,170829],{"class":53,"line":61},[51,170830,3480],{"emptyLinePlaceholder":1192},[51,170832,170833,170835,170837,170839,170841,170843,170845,170847,170849,170851,170853,170855,170857,170859],{"class":53,"line":93},[51,170834,108797],{"class":64},[51,170836,147755],{"class":175},[51,170838,73],{"class":72},[51,170840,170764],{"class":282},[51,170842,13397],{"class":72},[51,170844,147765],{"class":282},[51,170846,13397],{"class":72},[51,170848,147770],{"class":78},[51,170850,108],{"class":64},[51,170852,147775],{"class":282},[51,170854,14676],{"class":72},[51,170856,32347],{"class":64},[51,170858,149117],{"class":78},[51,170860,4816],{"class":72},[51,170862,170863,170866,170868,170871,170873],{"class":53,"line":99},[51,170864,170865],{"class":72},"    reader ",[51,170867,108],{"class":64},[51,170869,170870],{"class":72}," csv.reader(",[51,170872,46318],{"class":78},[51,170874,90],{"class":72},[51,170876,170877,170879,170882,170884],{"class":53,"line":120},[51,170878,4278],{"class":64},[51,170880,170881],{"class":72}," row ",[51,170883,27007],{"class":64},[51,170885,170886],{"class":72}," reader:\n",[51,170888,170889,170891],{"class":53,"line":129},[51,170890,33415],{"class":175},[51,170892,170893],{"class":72},"(row)\n",[40,170895,170896],{},"使用字典写入：",[29,170898,170900],{"className":31342,"code":170899,"language":31344,"meta":35,"style":35},"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",[37,170901,170902,170908,170912,170920,170948,170976,170980,170984,171022,171043,171064,171069],{"__ignoreMap":35},[51,170903,170904,170906],{"class":53,"line":54},[51,170905,31356],{"class":64},[51,170907,170683],{"class":72},[51,170909,170910],{"class":53,"line":61},[51,170911,3480],{"emptyLinePlaceholder":1192},[51,170913,170914,170916,170918],{"class":53,"line":93},[51,170915,160680],{"class":72},[51,170917,108],{"class":64},[51,170919,56411],{"class":72},[51,170921,170922,170924,170926,170928,170930,170932,170934,170936,170938,170940,170942,170944,170946],{"class":53,"line":99},[51,170923,149349],{"class":72},[51,170925,63643],{"class":282},[51,170927,52401],{"class":72},[51,170929,150852],{"class":282},[51,170931,13397],{"class":72},[51,170933,70088],{"class":282},[51,170935,52401],{"class":72},[51,170937,1896],{"class":175},[51,170939,13397],{"class":72},[51,170941,152436],{"class":282},[51,170943,52401],{"class":72},[51,170945,2231],{"class":175},[51,170947,6004],{"class":72},[51,170949,170950,170952,170954,170956,170958,170960,170962,170964,170966,170968,170970,170972,170974],{"class":53,"line":120},[51,170951,149349],{"class":72},[51,170953,63643],{"class":282},[51,170955,52401],{"class":72},[51,170957,151900],{"class":282},[51,170959,13397],{"class":72},[51,170961,70088],{"class":282},[51,170963,52401],{"class":72},[51,170965,1871],{"class":175},[51,170967,13397],{"class":72},[51,170969,152436],{"class":282},[51,170971,52401],{"class":72},[51,170973,2056],{"class":175},[51,170975,6004],{"class":72},[51,170977,170978],{"class":53,"line":129},[51,170979,34210],{"class":72},[51,170981,170982],{"class":53,"line":206},[51,170983,3480],{"emptyLinePlaceholder":1192},[51,170985,170986,170988,170990,170992,170994,170996,170998,171000,171002,171004,171006,171008,171010,171012,171014,171016,171018,171020],{"class":53,"line":212},[51,170987,108797],{"class":64},[51,170989,147755],{"class":175},[51,170991,73],{"class":72},[51,170993,170764],{"class":282},[51,170995,13397],{"class":72},[51,170997,152940],{"class":282},[51,170999,13397],{"class":72},[51,171001,147770],{"class":78},[51,171003,108],{"class":64},[51,171005,147775],{"class":282},[51,171007,13397],{"class":72},[51,171009,170781],{"class":78},[51,171011,108],{"class":64},[51,171013,8614],{"class":282},[51,171015,14676],{"class":72},[51,171017,32347],{"class":64},[51,171019,149117],{"class":78},[51,171021,4816],{"class":72},[51,171023,171024,171027,171029,171031,171033,171035,171037,171039,171041],{"class":53,"line":227},[51,171025,171026],{"class":72},"    fieldnames ",[51,171028,108],{"class":64},[51,171030,53190],{"class":72},[51,171032,63643],{"class":282},[51,171034,13397],{"class":72},[51,171036,70088],{"class":282},[51,171038,13397],{"class":72},[51,171040,152436],{"class":282},[51,171042,34210],{"class":72},[51,171044,171045,171047,171049,171052,171054,171056,171059,171061],{"class":53,"line":370},[51,171046,170798],{"class":72},[51,171048,108],{"class":64},[51,171050,171051],{"class":72}," csv.DictWriter(",[51,171053,46318],{"class":78},[51,171055,13397],{"class":72},[51,171057,171058],{"class":78},"fieldnames",[51,171060,108],{"class":64},[51,171062,171063],{"class":72},"fieldnames)\n",[51,171065,171066],{"class":53,"line":387},[51,171067,171068],{"class":72},"    writer.writeheader()\n",[51,171070,171071],{"class":53,"line":404},[51,171072,170812],{"class":72},[14,171074,171076],{"id":171075},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[40,171078,124256],{},[19,171080,171081,171084,171087],{},[22,171082,171083],{},"读取文本文件。",[22,171085,171086],{},"统计每个单词出现次数。",[22,171088,171089],{},"输出出现次数最多的前 10 个单词。",[40,171091,10997],{},[29,171093,171095],{"className":31342,"code":171094,"language":31344,"meta":35,"style":35},"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",[37,171096,171097,171107,171111,171124,171140,171144,171154,171163,171167,171179,171199,171208,171212,171230,171234,171264,171268,171284],{"__ignoreMap":35},[51,171098,171099,171101,171103,171105],{"class":53,"line":54},[51,171100,31701],{"class":64},[51,171102,109275],{"class":72},[51,171104,31356],{"class":64},[51,171106,109280],{"class":72},[51,171108,171109],{"class":53,"line":61},[51,171110,3480],{"emptyLinePlaceholder":1192},[51,171112,171113,171115,171117,171119,171122],{"class":53,"line":93},[51,171114,169275],{"class":72},[51,171116,108],{"class":64},[51,171118,109509],{"class":72},[51,171120,171121],{"class":282},"\"article.txt\"",[51,171123,90],{"class":72},[51,171125,171126,171128,171130,171132,171134,171136,171138],{"class":53,"line":99},[51,171127,169458],{"class":72},[51,171129,108],{"class":64},[51,171131,170335],{"class":72},[51,171133,147770],{"class":78},[51,171135,108],{"class":64},[51,171137,147775],{"class":282},[51,171139,90],{"class":72},[51,171141,171142],{"class":53,"line":120},[51,171143,3480],{"emptyLinePlaceholder":1192},[51,171145,171146,171149,171151],{"class":53,"line":129},[51,171147,171148],{"class":72},"words ",[51,171150,108],{"class":64},[51,171152,171153],{"class":72}," content.lower().split()\n",[51,171155,171156,171159,171161],{"class":53,"line":206},[51,171157,171158],{"class":72},"counter ",[51,171160,108],{"class":64},[51,171162,88832],{"class":72},[51,171164,171165],{"class":53,"line":212},[51,171166,3480],{"emptyLinePlaceholder":1192},[51,171168,171169,171171,171174,171176],{"class":53,"line":227},[51,171170,4102],{"class":64},[51,171172,171173],{"class":72}," word ",[51,171175,27007],{"class":64},[51,171177,171178],{"class":72}," words:\n",[51,171180,171181,171184,171186,171189,171192,171194,171197],{"class":53,"line":370},[51,171182,171183],{"class":72},"    word ",[51,171185,108],{"class":64},[51,171187,171188],{"class":72}," word.strip(",[51,171190,171191],{"class":282},"\".,!?;:",[51,171193,157459],{"class":175},[51,171195,171196],{"class":282},"'()[]\"",[51,171198,90],{"class":72},[51,171200,171201,171203,171205],{"class":53,"line":387},[51,171202,4178],{"class":64},[51,171204,39894],{"class":64},[51,171206,171207],{"class":72}," word:\n",[51,171209,171210],{"class":53,"line":404},[51,171211,149476],{"class":64},[51,171213,171214,171217,171219,171222,171224,171226,171228],{"class":53,"line":415},[51,171215,171216],{"class":72},"    counter[word] ",[51,171218,108],{"class":64},[51,171220,171221],{"class":72}," counter.get(word, ",[51,171223,176],{"class":175},[51,171225,14676],{"class":72},[51,171227,114],{"class":64},[51,171229,56663],{"class":175},[51,171231,171232],{"class":53,"line":420},[51,171233,3480],{"emptyLinePlaceholder":1192},[51,171235,171236,171239,171241,171243,171246,171248,171250,171252,171254,171256,171258,171260,171262],{"class":53,"line":429},[51,171237,171238],{"class":72},"items ",[51,171240,108],{"class":64},[51,171242,164568],{"class":175},[51,171244,171245],{"class":72},"(counter.items(), ",[51,171247,154910],{"class":78},[51,171249,154913],{"class":64},[51,171251,154916],{"class":72},[51,171253,791],{"class":175},[51,171255,113166],{"class":72},[51,171257,164492],{"class":78},[51,171259,108],{"class":64},[51,171261,32440],{"class":175},[51,171263,90],{"class":72},[51,171265,171266],{"class":53,"line":434},[51,171267,3480],{"emptyLinePlaceholder":1192},[51,171269,171270,171272,171275,171277,171280,171282],{"class":53,"line":448},[51,171271,4102],{"class":64},[51,171273,171274],{"class":72}," word, count ",[51,171276,27007],{"class":64},[51,171278,171279],{"class":72}," items[:",[51,171281,443],{"class":175},[51,171283,166719],{"class":72},[51,171285,171286,171288],{"class":53,"line":462},[51,171287,32263],{"class":175},[51,171289,171290],{"class":72},"(word, count)\n",[14,171292,171294],{"id":171293},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[29,171296,171298],{"className":31342,"code":171297,"language":31344,"meta":35,"style":35},"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",[37,171299,171300,171306,171316,171320,171332,171336,171340,171348,171358,171364,171368,171398,171408,171412,171416,171424,171454,171478,171482,171486,171494,171523,171528],{"__ignoreMap":35},[51,171301,171302,171304],{"class":53,"line":54},[51,171303,31356],{"class":64},[51,171305,148055],{"class":72},[51,171307,171308,171310,171312,171314],{"class":53,"line":61},[51,171309,31701],{"class":64},[51,171311,109275],{"class":72},[51,171313,31356],{"class":64},[51,171315,109280],{"class":72},[51,171317,171318],{"class":53,"line":93},[51,171319,3480],{"emptyLinePlaceholder":1192},[51,171321,171322,171324,171326,171328,171330],{"class":53,"line":99},[51,171323,152788],{"class":175},[51,171325,14526],{"class":64},[51,171327,109509],{"class":72},[51,171329,152795],{"class":282},[51,171331,90],{"class":72},[51,171333,171334],{"class":53,"line":120},[51,171335,3480],{"emptyLinePlaceholder":1192},[51,171337,171338],{"class":53,"line":129},[51,171339,3480],{"emptyLinePlaceholder":1192},[51,171341,171342,171344,171346],{"class":53,"line":206},[51,171343,32911],{"class":64},[51,171345,152812],{"class":68},[51,171347,32917],{"class":72},[51,171349,171350,171352,171354,171356],{"class":53,"line":212},[51,171351,4178],{"class":64},[51,171353,39894],{"class":64},[51,171355,152823],{"class":175},[51,171357,152826],{"class":72},[51,171359,171360,171362],{"class":53,"line":227},[51,171361,15714],{"class":64},[51,171363,52802],{"class":72},[51,171365,171366],{"class":53,"line":370},[51,171367,3480],{"emptyLinePlaceholder":1192},[51,171369,171370,171372,171374,171376,171378,171380,171382,171384,171386,171388,171390,171392,171394,171396],{"class":53,"line":387},[51,171371,35142],{"class":64},[51,171373,147755],{"class":175},[51,171375,73],{"class":72},[51,171377,152788],{"class":175},[51,171379,13397],{"class":72},[51,171381,147765],{"class":282},[51,171383,13397],{"class":72},[51,171385,147770],{"class":78},[51,171387,108],{"class":64},[51,171389,147775],{"class":282},[51,171391,14676],{"class":72},[51,171393,32347],{"class":64},[51,171395,149117],{"class":78},[51,171397,4816],{"class":72},[51,171399,171400,171402,171404,171406],{"class":53,"line":404},[51,171401,15714],{"class":64},[51,171403,149128],{"class":72},[51,171405,46318],{"class":78},[51,171407,90],{"class":72},[51,171409,171410],{"class":53,"line":415},[51,171411,3480],{"emptyLinePlaceholder":1192},[51,171413,171414],{"class":53,"line":420},[51,171415,3480],{"emptyLinePlaceholder":1192},[51,171417,171418,171420,171422],{"class":53,"line":429},[51,171419,32911],{"class":64},[51,171421,152922],{"class":68},[51,171423,152925],{"class":72},[51,171425,171426,171428,171430,171432,171434,171436,171438,171440,171442,171444,171446,171448,171450,171452],{"class":53,"line":434},[51,171427,35142],{"class":64},[51,171429,147755],{"class":175},[51,171431,73],{"class":72},[51,171433,152788],{"class":175},[51,171435,13397],{"class":72},[51,171437,152940],{"class":282},[51,171439,13397],{"class":72},[51,171441,147770],{"class":78},[51,171443,108],{"class":64},[51,171445,147775],{"class":282},[51,171447,14676],{"class":72},[51,171449,32347],{"class":64},[51,171451,149117],{"class":78},[51,171453,4816],{"class":72},[51,171455,171456,171458,171460,171462,171464,171466,171468,171470,171472,171474,171476],{"class":53,"line":448},[51,171457,152961],{"class":72},[51,171459,46318],{"class":78},[51,171461,13397],{"class":72},[51,171463,148101],{"class":78},[51,171465,108],{"class":64},[51,171467,34951],{"class":175},[51,171469,13397],{"class":72},[51,171471,152976],{"class":78},[51,171473,108],{"class":64},[51,171475,1334],{"class":175},[51,171477,90],{"class":72},[51,171479,171480],{"class":53,"line":462},[51,171481,3480],{"emptyLinePlaceholder":1192},[51,171483,171484],{"class":53,"line":470},[51,171485,3480],{"emptyLinePlaceholder":1192},[51,171487,171488,171490,171492],{"class":53,"line":2783},[51,171489,160680],{"class":72},[51,171491,108],{"class":64},[51,171493,154006],{"class":72},[51,171495,171496,171499,171501,171503,171505,171507,171509,171511,171513,171515,171517,171519,171521],{"class":53,"line":2788},[51,171497,171498],{"class":72},"students.append({",[51,171500,63643],{"class":282},[51,171502,52401],{"class":72},[51,171504,150852],{"class":282},[51,171506,13397],{"class":72},[51,171508,70088],{"class":282},[51,171510,52401],{"class":72},[51,171512,1896],{"class":175},[51,171514,13397],{"class":72},[51,171516,152436],{"class":282},[51,171518,52401],{"class":72},[51,171520,2231],{"class":175},[51,171522,166116],{"class":72},[51,171524,171525],{"class":53,"line":2817},[51,171526,171527],{"class":72},"save_students(students)\n",[51,171529,171530,171532,171534,171537],{"class":53,"line":2822},[51,171531,31379],{"class":175},[51,171533,73],{"class":72},[51,171535,171536],{"class":282},"\"保存成功\"",[51,171538,90],{"class":72},[14,171540,171542],{"id":171541},"_814-易错点","8.14 易错点",[19,171544,171545,171549,171555,171560,171567,171574],{},[22,171546,171547,169808],{},[37,171548,2040],{},[22,171550,171551,171552,29349],{},"读写中文要指定 ",[37,171553,171554],{},"encoding=\"utf-8\"",[22,171556,171557,171558,29349],{},"打开文件后要关闭，推荐使用 ",[37,171559,108797],{},[22,171561,171562,171563,171566],{},"读取大文件不要直接 ",[37,171564,171565],{},"read()"," 全部内容。",[22,171568,171569,171570,171573],{},"Windows 写 CSV 时建议加 ",[37,171571,171572],{},"newline=\"\"","，避免空行。",[22,171575,171576],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171578,171580],{"id":171579},"_815-本章练习","8.15 本章练习",[19,171582,171583,171590,171595,171598,171601],{},[22,171584,171585,171586,171589],{},"写入一个 ",[37,171587,171588],{},"students.txt","，每行保存一个学生姓名。",[22,171591,105319,171592,171594],{},[37,171593,171588],{}," 并输出所有学生。",[22,171596,171597],{},"把学生列表保存为 JSON 文件。",[22,171599,171600],{},"从 JSON 文件读取学生数据，计算平均分。",[22,171602,171603,171604,171607,171608,171611],{},"写一个日志函数 ",[37,171605,171606],{},"write_log(message)","，每次调用向 ",[37,171609,171610],{},"app.log"," 追加一行。",[1179,171613,171614],{},"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":35,"searchDepth":61,"depth":61,"links":171616},[171617,171618,171622,171623,171629,171630,171631,171632,171633,171634,171635,171636,171637,171638,171639],{"id":169128,"depth":61,"text":169129},{"id":169169,"depth":61,"text":169170,"children":171619},[171620,171621],{"id":169173,"depth":93,"text":169174},{"id":169207,"depth":93,"text":169208},{"id":169321,"depth":61,"text":169322},{"id":169414,"depth":61,"text":169415,"children":171624},[171625,171626,171627,171628],{"id":169418,"depth":93,"text":169419},{"id":169505,"depth":93,"text":169506},{"id":169575,"depth":93,"text":169576},{"id":169669,"depth":93,"text":169670},{"id":169739,"depth":61,"text":169740},{"id":169802,"depth":61,"text":169803},{"id":169963,"depth":61,"text":169964},{"id":170026,"depth":61,"text":170027},{"id":170142,"depth":61,"text":170143},{"id":170352,"depth":61,"text":170353},{"id":170664,"depth":61,"text":170665},{"id":171075,"depth":61,"text":171076},{"id":171293,"depth":61,"text":171294},{"id":171541,"depth":61,"text":171542},{"id":171579,"depth":61,"text":171580},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169120,"description":24339},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171646,"title":171647,"body":171648,"description":24339,"extension":1190,"meta":173834,"navigation":1192,"path":173835,"seo":173836,"stem":173837,"__hash__":173838},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171649,"toc":173801},[171650,171653,171657,171660,171663,171755,171757,171776,171781,171785,171788,171791,171820,171827,171830,171834,171837,171866,171868,171920,171926,171979,171983,172081,172084,172151,172155,172212,172214,172220,172224,172229,172235,172326,172331,172335,172338,172416,172419,172457,172461,172579,172582,172586,172589,172634,172637,172641,172646,172652,172702,172705,172736,172740,172744,172774,172778,172813,172817,172852,172892,172896,172912,172915,172919,172923,173002,173006,173047,173051,173106,173110,173144,173148,173178,173187,173194,173200,173257,173260,173268,173271,173275,173282,173285,173291,173294,173311,173316,173320,173326,173339,173342,173379,173382,173393,173396,173410,173413,173427,173431,173438,173471,173474,173476,173482,173485,173489,173491,173497,173502,173675,173679,173742,173746,173770,173774,173798],[10,171651,171647],{"id":171652},"_9-异常模块与包",[14,171654,171656],{"id":171655},"_91-什么是异常","9.1 什么是异常",[40,171658,171659],{},"异常是程序运行过程中出现的错误。",[40,171661,171662],{},"常见异常：",[1393,171664,171665,171674],{},[1396,171666,171667],{},[1399,171668,171669,171672],{},[1402,171670,171671],{},"异常",[1402,171673,26833],{},[1439,171675,171676,171686,171696,171705,171715,171725,171735,171745],{},[1399,171677,171678,171683],{},[1444,171679,171680],{},[37,171681,171682],{},"NameError",[1444,171684,171685],{},"使用了未定义变量",[1399,171687,171688,171693],{},[1444,171689,171690],{},[37,171691,171692],{},"TypeError",[1444,171694,171695],{},"类型不匹配",[1399,171697,171698,171702],{},[1444,171699,171700],{},[37,171701,155798],{},[1444,171703,171704],{},"值不合法",[1399,171706,171707,171712],{},[1444,171708,171709],{},[37,171710,171711],{},"IndexError",[1444,171713,171714],{},"列表索引越界",[1399,171716,171717,171722],{},[1444,171718,171719],{},[37,171720,171721],{},"KeyError",[1444,171723,171724],{},"字典 key 不存在",[1399,171726,171727,171732],{},[1444,171728,171729],{},[37,171730,171731],{},"FileNotFoundError",[1444,171733,171734],{},"文件不存在",[1399,171736,171737,171742],{},[1444,171738,171739],{},[37,171740,171741],{},"ZeroDivisionError",[1444,171743,171744],{},"除数为 0",[1399,171746,171747,171752],{},[1444,171748,171749],{},[37,171750,171751],{},"ImportError",[1444,171753,171754],{},"导入失败",[40,171756,16097],{},[29,171758,171760],{"className":31342,"code":171759,"language":31344,"meta":35,"style":35},"num = int(\"abc\")\n",[37,171761,171762],{"__ignoreMap":35},[51,171763,171764,171766,171768,171770,171772,171774],{"class":53,"line":54},[51,171765,156751],{"class":72},[51,171767,108],{"class":64},[51,171769,3462],{"class":175},[51,171771,73],{"class":72},[51,171773,156844],{"class":282},[51,171775,90],{"class":72},[40,171777,171778,171779,29349],{},"会触发 ",[37,171780,155798],{},[14,171782,171784],{"id":171783},"_92-为什么要处理异常","9.2 为什么要处理异常",[40,171786,171787],{},"如果不处理异常，程序会直接终止。",[40,171789,171790],{},"例如用户输入年龄：",[29,171792,171794],{"className":31342,"code":171793,"language":31344,"meta":35,"style":35},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[37,171795,171796,171814],{"__ignoreMap":35},[51,171797,171798,171800,171802,171804,171806,171808,171810,171812],{"class":53,"line":54},[51,171799,147510],{"class":72},[51,171801,108],{"class":64},[51,171803,3462],{"class":175},[51,171805,73],{"class":72},[51,171807,54785],{"class":175},[51,171809,73],{"class":72},[51,171811,153358],{"class":282},[51,171813,31461],{"class":72},[51,171815,171816,171818],{"class":53,"line":61},[51,171817,31379],{"class":175},[51,171819,156725],{"class":72},[40,171821,171822,171823,171826],{},"用户输入 ",[37,171824,171825],{},"abc","，程序就会报错退出。",[40,171828,171829],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171831,171833],{"id":171832},"_93-try-except","9.3 try except",[40,171835,171836],{},"基础语法：",[29,171838,171840],{"className":31342,"code":171839,"language":31344,"meta":35,"style":35},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[37,171841,171842,171849,171854,171861],{"__ignoreMap":35},[51,171843,171844,171847],{"class":53,"line":54},[51,171845,171846],{"class":64},"try",[51,171848,4816],{"class":72},[51,171850,171851],{"class":53,"line":61},[51,171852,171853],{"class":72},"    可能出错的代码\n",[51,171855,171856,171859],{"class":53,"line":93},[51,171857,171858],{"class":64},"except",[51,171860,4816],{"class":72},[51,171862,171863],{"class":53,"line":99},[51,171864,171865],{"class":72},"    出错后的处理代码\n",[40,171867,16097],{},[29,171869,171871],{"className":31342,"code":171870,"language":31344,"meta":35,"style":35},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[37,171872,171873,171879,171897,171903,171909],{"__ignoreMap":35},[51,171874,171875,171877],{"class":53,"line":54},[51,171876,171846],{"class":64},[51,171878,4816],{"class":72},[51,171880,171881,171883,171885,171887,171889,171891,171893,171895],{"class":53,"line":61},[51,171882,153350],{"class":72},[51,171884,108],{"class":64},[51,171886,3462],{"class":175},[51,171888,73],{"class":72},[51,171890,54785],{"class":175},[51,171892,73],{"class":72},[51,171894,153358],{"class":282},[51,171896,31461],{"class":72},[51,171898,171899,171901],{"class":53,"line":93},[51,171900,32263],{"class":175},[51,171902,156725],{"class":72},[51,171904,171905,171907],{"class":53,"line":99},[51,171906,171858],{"class":64},[51,171908,4816],{"class":72},[51,171910,171911,171913,171915,171918],{"class":53,"line":120},[51,171912,32263],{"class":175},[51,171914,73],{"class":72},[51,171916,171917],{"class":282},"\"年龄必须是数字\"",[51,171919,90],{"class":72},[40,171921,171922,171923,171925],{},"不建议裸写 ",[37,171924,171858],{},"，最好指定异常类型。",[29,171927,171929],{"className":31342,"code":171928,"language":31344,"meta":35,"style":35},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[37,171930,171931,171937,171955,171961,171969],{"__ignoreMap":35},[51,171932,171933,171935],{"class":53,"line":54},[51,171934,171846],{"class":64},[51,171936,4816],{"class":72},[51,171938,171939,171941,171943,171945,171947,171949,171951,171953],{"class":53,"line":61},[51,171940,153350],{"class":72},[51,171942,108],{"class":64},[51,171944,3462],{"class":175},[51,171946,73],{"class":72},[51,171948,54785],{"class":175},[51,171950,73],{"class":72},[51,171952,153358],{"class":282},[51,171954,31461],{"class":72},[51,171956,171957,171959],{"class":53,"line":93},[51,171958,32263],{"class":175},[51,171960,156725],{"class":72},[51,171962,171963,171965,171967],{"class":53,"line":99},[51,171964,171858],{"class":64},[51,171966,153190],{"class":175},[51,171968,4816],{"class":72},[51,171970,171971,171973,171975,171977],{"class":53,"line":120},[51,171972,32263],{"class":175},[51,171974,73],{"class":72},[51,171976,171917],{"class":282},[51,171978,90],{"class":72},[14,171980,171982],{"id":171981},"_94-捕获多个异常","9.4 捕获多个异常",[29,171984,171986],{"className":31342,"code":171985,"language":31344,"meta":35,"style":35},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[37,171987,171988,171994,172015,172035,172042,172050,172061,172070],{"__ignoreMap":35},[51,171989,171990,171992],{"class":53,"line":54},[51,171991,171846],{"class":64},[51,171993,4816],{"class":72},[51,171995,171996,171999,172001,172003,172005,172007,172009,172011,172013],{"class":53,"line":61},[51,171997,171998],{"class":72},"    nums ",[51,172000,108],{"class":64},[51,172002,53190],{"class":72},[51,172004,791],{"class":175},[51,172006,13397],{"class":72},[51,172008,1334],{"class":175},[51,172010,13397],{"class":72},[51,172012,1328],{"class":175},[51,172014,34210],{"class":72},[51,172016,172017,172020,172022,172024,172026,172028,172030,172033],{"class":53,"line":93},[51,172018,172019],{"class":72},"    index ",[51,172021,108],{"class":64},[51,172023,3462],{"class":175},[51,172025,73],{"class":72},[51,172027,54785],{"class":175},[51,172029,73],{"class":72},[51,172031,172032],{"class":282},"\"请输入索引:\"",[51,172034,31461],{"class":72},[51,172036,172037,172039],{"class":53,"line":99},[51,172038,32263],{"class":175},[51,172040,172041],{"class":72},"(nums[index])\n",[51,172043,172044,172046,172048],{"class":53,"line":120},[51,172045,171858],{"class":64},[51,172047,153190],{"class":175},[51,172049,4816],{"class":72},[51,172051,172052,172054,172056,172059],{"class":53,"line":129},[51,172053,32263],{"class":175},[51,172055,73],{"class":72},[51,172057,172058],{"class":282},"\"索引必须是整数\"",[51,172060,90],{"class":72},[51,172062,172063,172065,172068],{"class":53,"line":206},[51,172064,171858],{"class":64},[51,172066,172067],{"class":175}," IndexError",[51,172069,4816],{"class":72},[51,172071,172072,172074,172076,172079],{"class":53,"line":212},[51,172073,32263],{"class":175},[51,172075,73],{"class":72},[51,172077,172078],{"class":282},"\"索引越界\"",[51,172080,90],{"class":72},[40,172082,172083],{},"多个异常使用相同处理逻辑：",[29,172085,172087],{"className":31342,"code":172086,"language":31344,"meta":35,"style":35},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[37,172088,172089,172095,172113,172126,172140],{"__ignoreMap":35},[51,172090,172091,172093],{"class":53,"line":54},[51,172092,171846],{"class":64},[51,172094,4816],{"class":72},[51,172096,172097,172099,172101,172103,172105,172107,172109,172111],{"class":53,"line":61},[51,172098,46557],{"class":72},[51,172100,108],{"class":64},[51,172102,3462],{"class":175},[51,172104,73],{"class":72},[51,172106,54785],{"class":175},[51,172108,73],{"class":72},[51,172110,156760],{"class":282},[51,172112,31461],{"class":72},[51,172114,172115,172117,172119,172121,172123],{"class":53,"line":93},[51,172116,32263],{"class":175},[51,172118,73],{"class":72},[51,172120,443],{"class":175},[51,172122,157010],{"class":64},[51,172124,172125],{"class":72}," num)\n",[51,172127,172128,172130,172132,172134,172136,172138],{"class":53,"line":99},[51,172129,171858],{"class":64},[51,172131,2750],{"class":72},[51,172133,155798],{"class":175},[51,172135,13397],{"class":72},[51,172137,171741],{"class":175},[51,172139,31750],{"class":72},[51,172141,172142,172144,172146,172149],{"class":53,"line":120},[51,172143,32263],{"class":175},[51,172145,73],{"class":72},[51,172147,172148],{"class":282},"\"输入不合法\"",[51,172150,90],{"class":72},[14,172152,172154],{"id":172153},"_95-获取异常信息","9.5 获取异常信息",[29,172156,172158],{"className":31342,"code":172157,"language":31344,"meta":35,"style":35},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[37,172159,172160,172166,172180,172191],{"__ignoreMap":35},[51,172161,172162,172164],{"class":53,"line":54},[51,172163,171846],{"class":64},[51,172165,4816],{"class":72},[51,172167,172168,172170,172172,172174,172176,172178],{"class":53,"line":61},[51,172169,46557],{"class":72},[51,172171,108],{"class":64},[51,172173,3462],{"class":175},[51,172175,73],{"class":72},[51,172177,156844],{"class":282},[51,172179,90],{"class":72},[51,172181,172182,172184,172186,172188],{"class":53,"line":93},[51,172183,171858],{"class":64},[51,172185,153190],{"class":175},[51,172187,65568],{"class":64},[51,172189,172190],{"class":72}," e:\n",[51,172192,172193,172195,172197,172199,172202,172204,172206,172208,172210],{"class":53,"line":99},[51,172194,32263],{"class":175},[51,172196,73],{"class":72},[51,172198,1311],{"class":64},[51,172200,172201],{"class":282},"\"出错了:",[51,172203,2140],{"class":175},[51,172205,1331],{"class":72},[51,172207,2190],{"class":175},[51,172209,1503],{"class":282},[51,172211,90],{"class":72},[40,172213,147421],{},[29,172215,172218],{"className":172216,"code":172217,"language":34,"meta":35},[32],"出错了:invalid literal for int() with base 10: 'abc'\n",[37,172219,172217],{"__ignoreMap":35},[14,172221,172223],{"id":172222},"_96-else和finally","9.6 else和finally",[40,172225,172226,172228],{},[37,172227,2791],{},"：没有异常时执行。",[40,172230,172231,172234],{},[37,172232,172233],{},"finally","：无论是否异常都会执行。",[29,172236,172238],{"className":31342,"code":172237,"language":31344,"meta":35,"style":35},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[37,172239,172240,172246,172264,172272,172282,172288,172309,172315],{"__ignoreMap":35},[51,172241,172242,172244],{"class":53,"line":54},[51,172243,171846],{"class":64},[51,172245,4816],{"class":72},[51,172247,172248,172250,172252,172254,172256,172258,172260,172262],{"class":53,"line":61},[51,172249,46557],{"class":72},[51,172251,108],{"class":64},[51,172253,3462],{"class":175},[51,172255,73],{"class":72},[51,172257,54785],{"class":175},[51,172259,73],{"class":72},[51,172261,156760],{"class":282},[51,172263,31461],{"class":72},[51,172265,172266,172268,172270],{"class":53,"line":93},[51,172267,171858],{"class":64},[51,172269,153190],{"class":175},[51,172271,4816],{"class":72},[51,172273,172274,172276,172278,172280],{"class":53,"line":99},[51,172275,32263],{"class":175},[51,172277,73],{"class":72},[51,172279,154178],{"class":282},[51,172281,90],{"class":72},[51,172283,172284,172286],{"class":53,"line":120},[51,172285,2791],{"class":64},[51,172287,4816],{"class":72},[51,172289,172290,172292,172294,172296,172299,172301,172303,172305,172307],{"class":53,"line":129},[51,172291,32263],{"class":175},[51,172293,73],{"class":72},[51,172295,1311],{"class":64},[51,172297,172298],{"class":282},"\"输入正确:",[51,172300,2140],{"class":175},[51,172302,2757],{"class":72},[51,172304,2190],{"class":175},[51,172306,1503],{"class":282},[51,172308,90],{"class":72},[51,172310,172311,172313],{"class":53,"line":206},[51,172312,172233],{"class":64},[51,172314,4816],{"class":72},[51,172316,172317,172319,172321,172324],{"class":53,"line":212},[51,172318,32263],{"class":175},[51,172320,73],{"class":72},[51,172322,172323],{"class":282},"\"程序结束\"",[51,172325,90],{"class":72},[40,172327,172328,172330],{},[37,172329,172233],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172332,172334],{"id":172333},"_97-抛出异常","9.7 抛出异常",[40,172336,172337],{},"程序可以主动抛出异常。",[29,172339,172341],{"className":31342,"code":172340,"language":31344,"meta":35,"style":35},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[37,172342,172343,172352,172364,172377,172397,172401,172405],{"__ignoreMap":35},[51,172344,172345,172347,172350],{"class":53,"line":54},[51,172346,32911],{"class":64},[51,172348,172349],{"class":68}," set_age",[51,172351,162379],{"class":72},[51,172353,172354,172356,172358,172360,172362],{"class":53,"line":61},[51,172355,4178],{"class":64},[51,172357,16669],{"class":72},[51,172359,2154],{"class":64},[51,172361,5169],{"class":175},[51,172363,4816],{"class":72},[51,172365,172366,172368,172370,172372,172375],{"class":53,"line":93},[51,172367,104396],{"class":64},[51,172369,153190],{"class":175},[51,172371,73],{"class":72},[51,172373,172374],{"class":282},"\"年龄不能为负数\"",[51,172376,90],{"class":72},[51,172378,172379,172381,172383,172385,172387,172389,172391,172393,172395],{"class":53,"line":99},[51,172380,32263],{"class":175},[51,172382,73],{"class":72},[51,172384,1311],{"class":64},[51,172386,162947],{"class":282},[51,172388,2140],{"class":175},[51,172390,71185],{"class":72},[51,172392,2190],{"class":175},[51,172394,1503],{"class":282},[51,172396,90],{"class":72},[51,172398,172399],{"class":53,"line":120},[51,172400,3480],{"emptyLinePlaceholder":1192},[51,172402,172403],{"class":53,"line":129},[51,172404,3480],{"emptyLinePlaceholder":1192},[51,172406,172407,172410,172412,172414],{"class":53,"line":206},[51,172408,172409],{"class":72},"set_age(",[51,172411,1778],{"class":64},[51,172413,791],{"class":175},[51,172415,90],{"class":72},[40,172417,172418],{},"调用者可以捕获：",[29,172420,172422],{"className":31342,"code":172421,"language":31344,"meta":35,"style":35},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[37,172423,172424,172430,172441,172451],{"__ignoreMap":35},[51,172425,172426,172428],{"class":53,"line":54},[51,172427,171846],{"class":64},[51,172429,4816],{"class":72},[51,172431,172432,172435,172437,172439],{"class":53,"line":61},[51,172433,172434],{"class":72},"    set_age(",[51,172436,1778],{"class":64},[51,172438,791],{"class":175},[51,172440,90],{"class":72},[51,172442,172443,172445,172447,172449],{"class":53,"line":93},[51,172444,171858],{"class":64},[51,172446,153190],{"class":175},[51,172448,65568],{"class":64},[51,172450,172190],{"class":72},[51,172452,172453,172455],{"class":53,"line":99},[51,172454,32263],{"class":175},[51,172456,67963],{"class":72},[14,172458,172460],{"id":172459},"_98-自定义异常","9.8 自定义异常",[29,172462,172464],{"className":31342,"code":172463,"language":31344,"meta":35,"style":35},"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",[37,172465,172466,172480,172484,172488,172492,172500,172510,172521,172531,172535,172539,172545,172562,172573],{"__ignoreMap":35},[51,172467,172468,172470,172473,172475,172478],{"class":53,"line":54},[51,172469,15656],{"class":64},[51,172471,172472],{"class":68}," BalanceNotEnoughError",[51,172474,73],{"class":72},[51,172476,172477],{"class":175},"Exception",[51,172479,31750],{"class":72},[51,172481,172482],{"class":53,"line":61},[51,172483,150501],{"class":64},[51,172485,172486],{"class":53,"line":93},[51,172487,3480],{"emptyLinePlaceholder":1192},[51,172489,172490],{"class":53,"line":99},[51,172491,3480],{"emptyLinePlaceholder":1192},[51,172493,172494,172496,172498],{"class":53,"line":120},[51,172495,32911],{"class":64},[51,172497,151150],{"class":68},[51,172499,163776],{"class":72},[51,172501,172502,172504,172506,172508],{"class":53,"line":129},[51,172503,4178],{"class":64},[51,172505,151106],{"class":72},[51,172507,972],{"class":64},[51,172509,163553],{"class":72},[51,172511,172512,172514,172517,172519],{"class":53,"line":206},[51,172513,104396],{"class":64},[51,172515,172516],{"class":72}," BalanceNotEnoughError(",[51,172518,151201],{"class":282},[51,172520,90],{"class":72},[51,172522,172523,172525,172527,172529],{"class":53,"line":212},[51,172524,123],{"class":64},[51,172526,163783],{"class":72},[51,172528,1778],{"class":64},[51,172530,151139],{"class":72},[51,172532,172533],{"class":53,"line":227},[51,172534,3480],{"emptyLinePlaceholder":1192},[51,172536,172537],{"class":53,"line":370},[51,172538,3480],{"emptyLinePlaceholder":1192},[51,172540,172541,172543],{"class":53,"line":387},[51,172542,171846],{"class":64},[51,172544,4816],{"class":72},[51,172546,172547,172549,172551,172554,172556,172558,172560],{"class":53,"line":404},[51,172548,163454],{"class":72},[51,172550,108],{"class":64},[51,172552,172553],{"class":72}," withdraw(",[51,172555,612],{"class":175},[51,172557,13397],{"class":72},[51,172559,2812],{"class":175},[51,172561,90],{"class":72},[51,172563,172564,172566,172569,172571],{"class":53,"line":415},[51,172565,171858],{"class":64},[51,172567,172568],{"class":72}," BalanceNotEnoughError ",[51,172570,32347],{"class":64},[51,172572,172190],{"class":72},[51,172574,172575,172577],{"class":53,"line":420},[51,172576,32263],{"class":175},[51,172578,67963],{"class":72},[40,172580,172581],{},"入门阶段大多数情况使用内置异常即可。",[14,172583,172585],{"id":172584},"_99-traceback","9.9 traceback",[40,172587,172588],{},"调试时可以输出完整异常堆栈。",[29,172590,172592],{"className":31342,"code":172591,"language":31344,"meta":35,"style":35},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[37,172593,172594,172601,172605,172611,172621,172629],{"__ignoreMap":35},[51,172595,172596,172598],{"class":53,"line":54},[51,172597,31356],{"class":64},[51,172599,172600],{"class":72}," traceback\n",[51,172602,172603],{"class":53,"line":61},[51,172604,3480],{"emptyLinePlaceholder":1192},[51,172606,172607,172609],{"class":53,"line":93},[51,172608,171846],{"class":64},[51,172610,4816],{"class":72},[51,172612,172613,172615,172617,172619],{"class":53,"line":99},[51,172614,102],{"class":175},[51,172616,73],{"class":72},[51,172618,156844],{"class":282},[51,172620,90],{"class":72},[51,172622,172623,172625,172627],{"class":53,"line":120},[51,172624,171858],{"class":64},[51,172626,153190],{"class":175},[51,172628,4816],{"class":72},[51,172630,172631],{"class":53,"line":129},[51,172632,172633],{"class":72},"    traceback.print_exc()\n",[40,172635,172636],{},"日志系统中常把异常堆栈记录到文件。",[14,172638,172640],{"id":172639},"_910-什么是模块","9.10 什么是模块",[40,172642,172643,172644,126947],{},"模块就是一个 ",[37,172645,147316],{},[40,172647,172648,172649,25582],{},"例如创建 ",[37,172650,172651],{},"my_math.py",[29,172653,172655],{"className":31342,"code":172654,"language":31344,"meta":35,"style":35},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[37,172656,172657,172665,172675,172679,172683,172692],{"__ignoreMap":35},[51,172658,172659,172661,172663],{"class":53,"line":54},[51,172660,32911],{"class":64},[51,172662,69],{"class":68},[51,172664,152057],{"class":72},[51,172666,172667,172669,172671,172673],{"class":53,"line":61},[51,172668,123],{"class":64},[51,172670,11831],{"class":72},[51,172672,114],{"class":64},[51,172674,152068],{"class":72},[51,172676,172677],{"class":53,"line":93},[51,172678,3480],{"emptyLinePlaceholder":1192},[51,172680,172681],{"class":53,"line":99},[51,172682,3480],{"emptyLinePlaceholder":1192},[51,172684,172685,172687,172690],{"class":53,"line":120},[51,172686,32911],{"class":64},[51,172688,172689],{"class":68}," sub",[51,172691,152057],{"class":72},[51,172693,172694,172696,172698,172700],{"class":53,"line":129},[51,172695,123],{"class":64},[51,172697,11831],{"class":72},[51,172699,1778],{"class":64},[51,172701,152068],{"class":72},[40,172703,172704],{},"在另一个文件中导入：",[29,172706,172708],{"className":31342,"code":172707,"language":31344,"meta":35,"style":35},"import my_math\n\nprint(my_math.add(1, 2))\n",[37,172709,172710,172717,172721],{"__ignoreMap":35},[51,172711,172712,172714],{"class":53,"line":54},[51,172713,31356],{"class":64},[51,172715,172716],{"class":72}," my_math\n",[51,172718,172719],{"class":53,"line":61},[51,172720,3480],{"emptyLinePlaceholder":1192},[51,172722,172723,172725,172728,172730,172732,172734],{"class":53,"line":93},[51,172724,31379],{"class":175},[51,172726,172727],{"class":72},"(my_math.add(",[51,172729,791],{"class":175},[51,172731,13397],{"class":72},[51,172733,1334],{"class":175},[51,172735,31461],{"class":72},[14,172737,172739],{"id":172738},"_911-import导入","9.11 import导入",[1233,172741,172743],{"id":172742},"_9111-导入模块","9.11.1 导入模块",[29,172745,172747],{"className":31342,"code":172746,"language":31344,"meta":35,"style":35},"import random\n\nprint(random.randint(1, 10))\n",[37,172748,172749,172755,172759],{"__ignoreMap":35},[51,172750,172751,172753],{"class":53,"line":54},[51,172752,31356],{"class":64},[51,172754,46292],{"class":72},[51,172756,172757],{"class":53,"line":61},[51,172758,3480],{"emptyLinePlaceholder":1192},[51,172760,172761,172763,172766,172768,172770,172772],{"class":53,"line":93},[51,172762,31379],{"class":175},[51,172764,172765],{"class":72},"(random.randint(",[51,172767,791],{"class":175},[51,172769,13397],{"class":72},[51,172771,443],{"class":175},[51,172773,31461],{"class":72},[1233,172775,172777],{"id":172776},"_9112-导入指定内容","9.11.2 导入指定内容",[29,172779,172781],{"className":31342,"code":172780,"language":31344,"meta":35,"style":35},"from random import randint\n\nprint(randint(1, 10))\n",[37,172782,172783,172794,172798],{"__ignoreMap":35},[51,172784,172785,172787,172789,172791],{"class":53,"line":54},[51,172786,31701],{"class":64},[51,172788,58760],{"class":72},[51,172790,31356],{"class":64},[51,172792,172793],{"class":72}," randint\n",[51,172795,172796],{"class":53,"line":61},[51,172797,3480],{"emptyLinePlaceholder":1192},[51,172799,172800,172802,172805,172807,172809,172811],{"class":53,"line":93},[51,172801,31379],{"class":175},[51,172803,172804],{"class":72},"(randint(",[51,172806,791],{"class":175},[51,172808,13397],{"class":72},[51,172810,443],{"class":175},[51,172812,31461],{"class":72},[1233,172814,172816],{"id":172815},"_9113-起别名","9.11.3 起别名",[29,172818,172820],{"className":31342,"code":172819,"language":31344,"meta":35,"style":35},"import random as rd\n\nprint(rd.randint(1, 10))\n",[37,172821,172822,172833,172837],{"__ignoreMap":35},[51,172823,172824,172826,172828,172830],{"class":53,"line":54},[51,172825,31356],{"class":64},[51,172827,58760],{"class":72},[51,172829,32347],{"class":64},[51,172831,172832],{"class":72}," rd\n",[51,172834,172835],{"class":53,"line":61},[51,172836,3480],{"emptyLinePlaceholder":1192},[51,172838,172839,172841,172844,172846,172848,172850],{"class":53,"line":93},[51,172840,31379],{"class":175},[51,172842,172843],{"class":72},"(rd.randint(",[51,172845,791],{"class":175},[51,172847,13397],{"class":72},[51,172849,443],{"class":175},[51,172851,31461],{"class":72},[29,172853,172855],{"className":31342,"code":172854,"language":31344,"meta":35,"style":35},"from random import randint as rint\n\nprint(rint(1, 10))\n",[37,172856,172857,172873,172877],{"__ignoreMap":35},[51,172858,172859,172861,172863,172865,172868,172870],{"class":53,"line":54},[51,172860,31701],{"class":64},[51,172862,58760],{"class":72},[51,172864,31356],{"class":64},[51,172866,172867],{"class":72}," randint ",[51,172869,32347],{"class":64},[51,172871,172872],{"class":72}," rint\n",[51,172874,172875],{"class":53,"line":61},[51,172876,3480],{"emptyLinePlaceholder":1192},[51,172878,172879,172881,172884,172886,172888,172890],{"class":53,"line":93},[51,172880,31379],{"class":175},[51,172882,172883],{"class":72},"(rint(",[51,172885,791],{"class":175},[51,172887,13397],{"class":72},[51,172889,443],{"class":175},[51,172891,31461],{"class":72},[1233,172893,172895],{"id":172894},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[29,172897,172899],{"className":31342,"code":172898,"language":31344,"meta":35,"style":35},"from random import *\n",[37,172900,172901],{"__ignoreMap":35},[51,172902,172903,172905,172907,172909],{"class":53,"line":54},[51,172904,31701],{"class":64},[51,172906,58760],{"class":72},[51,172908,31356],{"class":64},[51,172910,172911],{"class":64}," *\n",[40,172913,172914],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172916,172918],{"id":172917},"_912-常用内置模块","9.12 常用内置模块",[1233,172920,172922],{"id":172921},"_9121-random","9.12.1 random",[29,172924,172926],{"className":31342,"code":172925,"language":31344,"meta":35,"style":35},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[37,172927,172928,172934,172938,172952,172971],{"__ignoreMap":35},[51,172929,172930,172932],{"class":53,"line":54},[51,172931,31356],{"class":64},[51,172933,46292],{"class":72},[51,172935,172936],{"class":53,"line":61},[51,172937,3480],{"emptyLinePlaceholder":1192},[51,172939,172940,172942,172944,172946,172948,172950],{"class":53,"line":93},[51,172941,31379],{"class":175},[51,172943,172765],{"class":72},[51,172945,791],{"class":175},[51,172947,13397],{"class":72},[51,172949,443],{"class":175},[51,172951,31461],{"class":72},[51,172953,172954,172956,172959,172961,172963,172965,172967,172969],{"class":53,"line":99},[51,172955,31379],{"class":175},[51,172957,172958],{"class":72},"(random.choice([",[51,172960,150852],{"class":282},[51,172962,13397],{"class":72},[51,172964,151900],{"class":282},[51,172966,13397],{"class":72},[51,172968,160695],{"class":282},[51,172970,34107],{"class":72},[51,172972,172973,172975,172978,172980,172982,172984,172986,172988,172990,172992,172994,172996,172998,173000],{"class":53,"line":120},[51,172974,31379],{"class":175},[51,172976,172977],{"class":72},"(random.sample([",[51,172979,791],{"class":175},[51,172981,13397],{"class":72},[51,172983,1334],{"class":175},[51,172985,13397],{"class":72},[51,172987,1328],{"class":175},[51,172989,13397],{"class":72},[51,172991,1543],{"class":175},[51,172993,13397],{"class":72},[51,172995,1568],{"class":175},[51,172997,113166],{"class":72},[51,172999,1334],{"class":175},[51,173001,31461],{"class":72},[1233,173003,173005],{"id":173004},"_9122-time","9.12.2 time",[29,173007,173009],{"className":31342,"code":173008,"language":31344,"meta":35,"style":35},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[37,173010,173011,173017,173021,173028,173036],{"__ignoreMap":35},[51,173012,173013,173015],{"class":53,"line":54},[51,173014,31356],{"class":64},[51,173016,32793],{"class":72},[51,173018,173019],{"class":53,"line":61},[51,173020,3480],{"emptyLinePlaceholder":1192},[51,173022,173023,173025],{"class":53,"line":93},[51,173024,31379],{"class":175},[51,173026,173027],{"class":72},"(time.time())\n",[51,173029,173030,173032,173034],{"class":53,"line":99},[51,173031,96035],{"class":72},[51,173033,791],{"class":175},[51,173035,90],{"class":72},[51,173037,173038,173040,173042,173045],{"class":53,"line":120},[51,173039,31379],{"class":175},[51,173041,73],{"class":72},[51,173043,173044],{"class":282},"\"1秒后执行\"",[51,173046,90],{"class":72},[1233,173048,173050],{"id":173049},"_9123-datetime","9.12.3 datetime",[29,173052,173054],{"className":31342,"code":173053,"language":31344,"meta":35,"style":35},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[37,173055,173056,173068,173072,173082,173089],{"__ignoreMap":35},[51,173057,173058,173060,173063,173065],{"class":53,"line":54},[51,173059,31701],{"class":64},[51,173061,173062],{"class":72}," datetime ",[51,173064,31356],{"class":64},[51,173066,173067],{"class":72}," datetime\n",[51,173069,173070],{"class":53,"line":61},[51,173071,3480],{"emptyLinePlaceholder":1192},[51,173073,173074,173077,173079],{"class":53,"line":93},[51,173075,173076],{"class":72},"now ",[51,173078,108],{"class":64},[51,173080,173081],{"class":72}," datetime.now()\n",[51,173083,173084,173086],{"class":53,"line":99},[51,173085,31379],{"class":175},[51,173087,173088],{"class":72},"(now)\n",[51,173090,173091,173093,173096,173099,173101,173104],{"class":53,"line":120},[51,173092,31379],{"class":175},[51,173094,173095],{"class":72},"(now.strftime(",[51,173097,173098],{"class":282},"\"%Y-%m-",[51,173100,157655],{"class":175},[51,173102,173103],{"class":282}," %H:%M:%S\"",[51,173105,31461],{"class":72},[1233,173107,173109],{"id":173108},"_9124-os","9.12.4 os",[29,173111,173113],{"className":31342,"code":173112,"language":31344,"meta":35,"style":35},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[37,173114,173115,173121,173125,173132],{"__ignoreMap":35},[51,173116,173117,173119],{"class":53,"line":54},[51,173118,31356],{"class":64},[51,173120,46269],{"class":72},[51,173122,173123],{"class":53,"line":61},[51,173124,3480],{"emptyLinePlaceholder":1192},[51,173126,173127,173129],{"class":53,"line":93},[51,173128,31379],{"class":175},[51,173130,173131],{"class":72},"(os.getcwd())\n",[51,173133,173134,173136,173139,173142],{"class":53,"line":99},[51,173135,31379],{"class":175},[51,173137,173138],{"class":72},"(os.listdir(",[51,173140,173141],{"class":282},"\".\"",[51,173143,31461],{"class":72},[1233,173145,173147],{"id":173146},"_9125-sys","9.12.5 sys",[29,173149,173151],{"className":31342,"code":173150,"language":31344,"meta":35,"style":35},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[37,173152,173153,173160,173164,173171],{"__ignoreMap":35},[51,173154,173155,173157],{"class":53,"line":54},[51,173156,31356],{"class":64},[51,173158,173159],{"class":72}," sys\n",[51,173161,173162],{"class":53,"line":61},[51,173163,3480],{"emptyLinePlaceholder":1192},[51,173165,173166,173168],{"class":53,"line":93},[51,173167,31379],{"class":175},[51,173169,173170],{"class":72},"(sys.version)\n",[51,173172,173173,173175],{"class":53,"line":99},[51,173174,31379],{"class":175},[51,173176,173177],{"class":72},"(sys.path)\n",[14,173179,173181,173182,173184,173185,1503],{"id":173180},"_913-if-name-main","9.13 if ",[840,173183,80774],{}," == \"",[840,173186,103022],{},[40,173188,173189,173190,173193],{},"模块被直接运行和被导入时，",[37,173191,173192],{},"__name__"," 的值不同。",[40,173195,173196,173197,25582],{},"创建 ",[37,173198,173199],{},"my_module.py",[29,173201,173203],{"className":31342,"code":173202,"language":31344,"meta":35,"style":35},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[37,173204,173205,173213,173223,173227,173231,173243],{"__ignoreMap":35},[51,173206,173207,173209,173211],{"class":53,"line":54},[51,173208,32911],{"class":64},[51,173210,69],{"class":68},[51,173212,152057],{"class":72},[51,173214,173215,173217,173219,173221],{"class":53,"line":61},[51,173216,123],{"class":64},[51,173218,11831],{"class":72},[51,173220,114],{"class":64},[51,173222,152068],{"class":72},[51,173224,173225],{"class":53,"line":93},[51,173226,3480],{"emptyLinePlaceholder":1192},[51,173228,173229],{"class":53,"line":99},[51,173230,3480],{"emptyLinePlaceholder":1192},[51,173232,173233,173235,173237,173239,173241],{"class":53,"line":120},[51,173234,2633],{"class":64},[51,173236,32184],{"class":175},[51,173238,102523],{"class":64},[51,173240,102526],{"class":282},[51,173242,4816],{"class":72},[51,173244,173245,173247,173249,173251,173253,173255],{"class":53,"line":129},[51,173246,32263],{"class":175},[51,173248,167564],{"class":72},[51,173250,791],{"class":175},[51,173252,13397],{"class":72},[51,173254,1334],{"class":175},[51,173256,31461],{"class":72},[40,173258,173259],{},"作用：",[19,173261,173262,173265],{},[22,173263,173264],{},"直接运行该文件时，执行测试代码。",[22,173266,173267],{},"被其他文件导入时，不执行测试代码。",[40,173269,173270],{},"这是写模块时很常用的习惯。",[14,173272,173274],{"id":173273},"_914-包","9.14 包",[40,173276,173277,173278,173281],{},"包是包含 ",[37,173279,173280],{},"__init__.py"," 的目录，用于组织多个模块。",[40,173283,173284],{},"目录结构：",[29,173286,173289],{"className":173287,"code":173288,"language":34,"meta":35},[32],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[37,173290,173288],{"__ignoreMap":35},[40,173292,173293],{},"导入：",[29,173295,173297],{"className":31342,"code":173296,"language":31344,"meta":35,"style":35},"from utils.file_utils import read_file\n",[37,173298,173299],{"__ignoreMap":35},[51,173300,173301,173303,173306,173308],{"class":53,"line":54},[51,173302,31701],{"class":64},[51,173304,173305],{"class":72}," utils.file_utils ",[51,173307,31356],{"class":64},[51,173309,173310],{"class":72}," read_file\n",[40,173312,173313,173315],{},[37,173314,173280],{}," 可以为空，也可以写包初始化逻辑。",[14,173317,173319],{"id":173318},"_915-第三方包","9.15 第三方包",[40,173321,173322,173323,173325],{},"第三方包通过 ",[37,173324,24794],{}," 安装。",[29,173327,173329],{"className":24785,"code":173328,"language":24787,"meta":35,"style":35},"pip install requests\n",[37,173330,173331],{"__ignoreMap":35},[51,173332,173333,173335,173337],{"class":53,"line":54},[51,173334,24794],{"class":68},[51,173336,24797],{"class":282},[51,173338,147062],{"class":282},[40,173340,173341],{},"使用：",[29,173343,173345],{"className":31342,"code":173344,"language":31344,"meta":35,"style":35},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[37,173346,173347,173353,173357,173372],{"__ignoreMap":35},[51,173348,173349,173351],{"class":53,"line":54},[51,173350,31356],{"class":64},[51,173352,147062],{"class":72},[51,173354,173355],{"class":53,"line":61},[51,173356,3480],{"emptyLinePlaceholder":1192},[51,173358,173359,173362,173364,173367,173370],{"class":53,"line":93},[51,173360,173361],{"class":72},"response ",[51,173363,108],{"class":64},[51,173365,173366],{"class":72}," requests.get(",[51,173368,173369],{"class":282},"\"https:\u002F\u002Fwww.example.com\"",[51,173371,90],{"class":72},[51,173373,173374,173376],{"class":53,"line":99},[51,173375,31379],{"class":175},[51,173377,173378],{"class":72},"(response.status_code)\n",[40,173380,173381],{},"查看已安装包：",[29,173383,173385],{"className":24785,"code":173384,"language":24787,"meta":35,"style":35},"pip list\n",[37,173386,173387],{"__ignoreMap":35},[51,173388,173389,173391],{"class":53,"line":54},[51,173390,24794],{"class":68},[51,173392,119919],{"class":282},[40,173394,173395],{},"导出项目依赖：",[29,173397,173398],{"className":24785,"code":147257,"language":24787,"meta":35,"style":35},[37,173399,173400],{"__ignoreMap":35},[51,173401,173402,173404,173406,173408],{"class":53,"line":54},[51,173403,24794],{"class":68},[51,173405,147266],{"class":282},[51,173407,27186],{"class":64},[51,173409,147271],{"class":282},[40,173411,173412],{},"安装项目依赖：",[29,173414,173415],{"className":24785,"code":147277,"language":24787,"meta":35,"style":35},[37,173416,173417],{"__ignoreMap":35},[51,173418,173419,173421,173423,173425],{"class":53,"line":54},[51,173420,24794],{"class":68},[51,173422,24797],{"class":282},[51,173424,120603],{"class":175},[51,173426,147271],{"class":282},[14,173428,173430],{"id":173429},"_916-模块搜索路径","9.16 模块搜索路径",[40,173432,173433,173434,173437],{},"Python 导入模块时会在 ",[37,173435,173436],{},"sys.path"," 中查找。",[29,173439,173441],{"className":31342,"code":173440,"language":31344,"meta":35,"style":35},"import sys\n\nfor path in sys.path:\n    print(path)\n",[37,173442,173443,173449,173453,173465],{"__ignoreMap":35},[51,173444,173445,173447],{"class":53,"line":54},[51,173446,31356],{"class":64},[51,173448,173159],{"class":72},[51,173450,173451],{"class":53,"line":61},[51,173452,3480],{"emptyLinePlaceholder":1192},[51,173454,173455,173457,173460,173462],{"class":53,"line":93},[51,173456,4102],{"class":64},[51,173458,173459],{"class":72}," path ",[51,173461,27007],{"class":64},[51,173463,173464],{"class":72}," sys.path:\n",[51,173466,173467,173469],{"class":53,"line":99},[51,173468,32263],{"class":175},[51,173470,170193],{"class":72},[40,173472,173473],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[40,173475,158587],{},[29,173477,173480],{"className":173478,"code":173479,"language":34,"meta":35},[32],"random.py\njson.py\ntime.py\n",[37,173481,173479],{"__ignoreMap":35},[40,173483,173484],{},"这些文件名可能导致导入异常。",[14,173486,173488],{"id":173487},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[40,173490,173284],{},[29,173492,173495],{"className":173493,"code":173494,"language":34,"meta":35},[32],"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",[37,173496,173494],{"__ignoreMap":35},[40,173498,173499,25582],{},[37,173500,173501],{},"utils\u002Ffile_utils.py",[29,173503,173505],{"className":31342,"code":173504,"language":31344,"meta":35,"style":35},"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",[37,173506,173507,173513,173523,173527,173531,173541,173551,173559,173565,173569,173596,173606,173610,173614,173624,173650],{"__ignoreMap":35},[51,173508,173509,173511],{"class":53,"line":54},[51,173510,31356],{"class":64},[51,173512,148055],{"class":72},[51,173514,173515,173517,173519,173521],{"class":53,"line":61},[51,173516,31701],{"class":64},[51,173518,109275],{"class":72},[51,173520,31356],{"class":64},[51,173522,109280],{"class":72},[51,173524,173525],{"class":53,"line":93},[51,173526,3480],{"emptyLinePlaceholder":1192},[51,173528,173529],{"class":53,"line":99},[51,173530,3480],{"emptyLinePlaceholder":1192},[51,173532,173533,173535,173538],{"class":53,"line":120},[51,173534,32911],{"class":64},[51,173536,173537],{"class":68}," read_json",[51,173539,173540],{"class":72},"(path):\n",[51,173542,173543,173546,173548],{"class":53,"line":129},[51,173544,173545],{"class":72},"    path ",[51,173547,108],{"class":64},[51,173549,173550],{"class":72}," Path(path)\n",[51,173552,173553,173555,173557],{"class":53,"line":206},[51,173554,4178],{"class":64},[51,173556,39894],{"class":64},[51,173558,170274],{"class":72},[51,173560,173561,173563],{"class":53,"line":212},[51,173562,15714],{"class":64},[51,173564,52802],{"class":72},[51,173566,173567],{"class":53,"line":227},[51,173568,3480],{"emptyLinePlaceholder":1192},[51,173570,173571,173573,173575,173578,173580,173582,173584,173586,173588,173590,173592,173594],{"class":53,"line":370},[51,173572,35142],{"class":64},[51,173574,147755],{"class":175},[51,173576,173577],{"class":72},"(path, ",[51,173579,147765],{"class":282},[51,173581,13397],{"class":72},[51,173583,147770],{"class":78},[51,173585,108],{"class":64},[51,173587,147775],{"class":282},[51,173589,14676],{"class":72},[51,173591,32347],{"class":64},[51,173593,149117],{"class":78},[51,173595,4816],{"class":72},[51,173597,173598,173600,173602,173604],{"class":53,"line":387},[51,173599,15714],{"class":64},[51,173601,149128],{"class":72},[51,173603,46318],{"class":78},[51,173605,90],{"class":72},[51,173607,173608],{"class":53,"line":404},[51,173609,3480],{"emptyLinePlaceholder":1192},[51,173611,173612],{"class":53,"line":415},[51,173613,3480],{"emptyLinePlaceholder":1192},[51,173615,173616,173618,173621],{"class":53,"line":420},[51,173617,32911],{"class":64},[51,173619,173620],{"class":68}," write_json",[51,173622,173623],{"class":72},"(path, data):\n",[51,173625,173626,173628,173630,173632,173634,173636,173638,173640,173642,173644,173646,173648],{"class":53,"line":429},[51,173627,35142],{"class":64},[51,173629,147755],{"class":175},[51,173631,173577],{"class":72},[51,173633,152940],{"class":282},[51,173635,13397],{"class":72},[51,173637,147770],{"class":78},[51,173639,108],{"class":64},[51,173641,147775],{"class":282},[51,173643,14676],{"class":72},[51,173645,32347],{"class":64},[51,173647,149117],{"class":78},[51,173649,4816],{"class":72},[51,173651,173652,173655,173657,173659,173661,173663,173665,173667,173669,173671,173673],{"class":53,"line":434},[51,173653,173654],{"class":72},"        json.dump(data, ",[51,173656,46318],{"class":78},[51,173658,13397],{"class":72},[51,173660,148101],{"class":78},[51,173662,108],{"class":64},[51,173664,34951],{"class":175},[51,173666,13397],{"class":72},[51,173668,152976],{"class":78},[51,173670,108],{"class":64},[51,173672,1334],{"class":175},[51,173674,90],{"class":72},[40,173676,173677,25582],{},[37,173678,155571],{},[29,173680,173682],{"className":31342,"code":173681,"language":31344,"meta":35,"style":35},"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",[37,173683,173684,173695,173699,173712,173732],{"__ignoreMap":35},[51,173685,173686,173688,173690,173692],{"class":53,"line":54},[51,173687,31701],{"class":64},[51,173689,173305],{"class":72},[51,173691,31356],{"class":64},[51,173693,173694],{"class":72}," read_json, write_json\n",[51,173696,173697],{"class":53,"line":61},[51,173698,3480],{"emptyLinePlaceholder":1192},[51,173700,173701,173703,173705,173708,173710],{"class":53,"line":93},[51,173702,160680],{"class":72},[51,173704,108],{"class":64},[51,173706,173707],{"class":72}," read_json(",[51,173709,152795],{"class":282},[51,173711,90],{"class":72},[51,173713,173714,173716,173718,173720,173722,173724,173726,173728,173730],{"class":53,"line":99},[51,173715,171498],{"class":72},[51,173717,63643],{"class":282},[51,173719,52401],{"class":72},[51,173721,150852],{"class":282},[51,173723,13397],{"class":72},[51,173725,152436],{"class":282},[51,173727,52401],{"class":72},[51,173729,2231],{"class":175},[51,173731,166116],{"class":72},[51,173733,173734,173737,173739],{"class":53,"line":120},[51,173735,173736],{"class":72},"write_json(",[51,173738,152795],{"class":282},[51,173740,173741],{"class":72},", students)\n",[14,173743,173745],{"id":173744},"_918-易错点","9.18 易错点",[19,173747,173748,173751,173756,173761,173764,173767],{},[22,173749,173750],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[22,173752,173753,173754,29349],{},"能指定异常类型就不要裸写 ",[37,173755,171858],{},[22,173757,173758,173760],{},[37,173759,172233],{}," 无论是否出错都会执行。",[22,173762,173763],{},"模块文件名不要和标准库重名。",[22,173765,173766],{},"导入自己写的模块时，要注意运行目录。",[22,173768,173769],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173771,173773],{"id":173772},"_919-本章练习","9.19 本章练习",[19,173775,173776,173779,173782,173788,173795],{},[22,173777,173778],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[22,173780,173781],{},"写函数读取文件，如果文件不存在则返回空字符串。",[22,173783,173196,173784,173787],{},[37,173785,173786],{},"math_utils.py","，实现加减乘除函数并导入使用。",[22,173789,173790,173791,173794],{},"创建一个 ",[37,173792,173793],{},"utils"," 包，把 JSON 读写函数放进去。",[22,173796,173797],{},"写一个程序，捕获除零异常和输入格式异常。",[1179,173799,173800],{},"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":35,"searchDepth":61,"depth":61,"links":173802},[173803,173804,173805,173806,173807,173808,173809,173810,173811,173812,173813,173819,173826,173828,173829,173830,173831,173832,173833],{"id":171655,"depth":61,"text":171656},{"id":171783,"depth":61,"text":171784},{"id":171832,"depth":61,"text":171833},{"id":171981,"depth":61,"text":171982},{"id":172153,"depth":61,"text":172154},{"id":172222,"depth":61,"text":172223},{"id":172333,"depth":61,"text":172334},{"id":172459,"depth":61,"text":172460},{"id":172584,"depth":61,"text":172585},{"id":172639,"depth":61,"text":172640},{"id":172738,"depth":61,"text":172739,"children":173814},[173815,173816,173817,173818],{"id":172742,"depth":93,"text":172743},{"id":172776,"depth":93,"text":172777},{"id":172815,"depth":93,"text":172816},{"id":172894,"depth":93,"text":172895},{"id":172917,"depth":61,"text":172918,"children":173820},[173821,173822,173823,173824,173825],{"id":172921,"depth":93,"text":172922},{"id":173004,"depth":93,"text":173005},{"id":173049,"depth":93,"text":173050},{"id":173108,"depth":93,"text":173109},{"id":173146,"depth":93,"text":173147},{"id":173180,"depth":61,"text":173827},"9.13 if name == \"main\"",{"id":173273,"depth":61,"text":173274},{"id":173318,"depth":61,"text":173319},{"id":173429,"depth":61,"text":173430},{"id":173487,"depth":61,"text":173488},{"id":173744,"depth":61,"text":173745},{"id":173772,"depth":61,"text":173773},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171647,"description":24339},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173840,"title":173841,"body":173842,"description":174005,"extension":1190,"meta":174006,"navigation":1192,"path":174007,"seo":174008,"stem":174009,"__hash__":174010},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173843,"toc":174000},[173844,173847,173850,173853,173864,173866,173940,173943,173946,173949,173952,173955,173958,173961,173964,173967,173970],[10,173845,173841],{"id":173846},"python教程",[40,173848,173849],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[40,173851,173852],{},"建议学习环境：",[19,173854,173855,173858,173861],{},[22,173856,173857],{},"Python 版本：Python 3.10 及以上。",[22,173859,173860],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[22,173862,173863],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173865,118042],{"id":118042},[19,173867,173868,173874,173880,173886,173892,173898,173904,173910,173916,173922,173928,173934],{},[22,173869,173870],{},[981,173871,173873],{"href":173872},".\u002Fch1-Python","Python环境与第一个程序",[22,173875,173876],{},[981,173877,173879],{"href":173878},".\u002Fch2","基础语法、变量与字符串",[22,173881,173882],{},[981,173883,173885],{"href":173884},".\u002Fch3","判断语句",[22,173887,173888],{},[981,173889,173891],{"href":173890},".\u002Fch4","循环语句",[22,173893,173894],{},[981,173895,173897],{"href":173896},".\u002Fch5","函数基础",[22,173899,173900],{},[981,173901,173903],{"href":173902},".\u002Fch6","数据容器",[22,173905,173906],{},[981,173907,173909],{"href":173908},".\u002Fch7","函数进阶",[22,173911,173912],{},[981,173913,173915],{"href":173914},".\u002Fch8","文件操作",[22,173917,173918],{},[981,173919,173921],{"href":173920},".\u002Fch9","异常、模块与包",[22,173923,173924],{},[981,173925,173927],{"href":173926},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[22,173929,173930],{},[981,173931,173933],{"href":173932},".\u002Fch11","面向对象基础",[22,173935,173936],{},[981,173937,173939],{"href":173938},".\u002Fch12","综合案例与复习路线",[14,173941,173942],{"id":173942},"学习路线",[40,173944,173945],{},"第一阶段：能运行程序。",[40,173947,173948],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[40,173950,173951],{},"第二阶段：能组织数据。",[40,173953,173954],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[40,173956,173957],{},"第三阶段：能封装逻辑。",[40,173959,173960],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[40,173962,173963],{},"第四阶段：能做小项目。",[40,173965,173966],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173968,173969],{"id":173969},"参考资料",[19,173971,173972,173979,173986,173993],{},[22,173973,173974,173975],{},"黑马程序员 Python 入门教程推荐：",[981,173976,173977],{"href":173977,"rel":173978},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24828],[22,173980,173981,173982],{},"Python 官方中文教程：",[981,173983,173984],{"href":173984,"rel":173985},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24828],[22,173987,173988,173989],{},"Python 标准库文档：",[981,173990,173991],{"href":173991,"rel":173992},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24828],[22,173994,173995,173996],{},"pyecharts 文档：",[981,173997,173998],{"href":173998,"rel":173999},"https:\u002F\u002Fpyecharts.org\u002F",[24828],{"title":35,"searchDepth":61,"depth":61,"links":174001},[174002,174003,174004],{"id":118042,"depth":61,"text":118042},{"id":173942,"depth":61,"text":173942},{"id":173969,"depth":61,"text":173969},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24341},"\u002Fwiki\u002F2024-10-10-python",{"title":173841,"description":174005},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379516]