[{"data":1,"prerenderedAt":174022},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2026-05-24-c-xue-xi\u002Fch7-han-shu-gao-ji":3,"wiki-doc-nav":1209},{"id":4,"title":5,"body":6,"description":35,"extension":1203,"meta":1204,"navigation":121,"path":1205,"seo":1206,"stem":1207,"__hash__":1208},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":8,"toc":1195},"minimark",[9,13,18,22,29,324,327,340,344,347,356,465,468,472,475,480,483,488,511,517,873,876,880,888,1191],[10,11,5],"h1",{"id":12},"_7函数高级部分",[14,15,17],"h2",{"id":16},"_71函数默认参数","7.1函数默认参数",[19,20,21],"p",{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,23,24,25],{},"语法：",[26,27,28],"code",{}," 返回值类型  函数名 （参数= 默认值）{}",[30,31,36],"pre",{"className":32,"code":33,"language":34,"meta":35,"style":35},"language-c++ shiki shiki-themes github-light github-dark","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","c++","",[26,37,38,90,110,116,123,130,136,167,188,200,205,210,221,226,261,285,290,303,308,319],{"__ignoreMap":35},[39,40,43,47,51,55,57,61,64,66,69,72,76,78,80,83,85,87],"span",{"class":41,"line":42},"line",1,[39,44,46],{"class":45},"szBVR","int",[39,48,50],{"class":49},"sScJk"," func",[39,52,54],{"class":53},"sVt8B","(",[39,56,46],{"class":45},[39,58,60],{"class":59},"s4XuR"," a",[39,62,63],{"class":53},", ",[39,65,46],{"class":45},[39,67,68],{"class":59}," b",[39,70,71],{"class":45}," =",[39,73,75],{"class":74},"sj4cs"," 10",[39,77,63],{"class":53},[39,79,46],{"class":45},[39,81,82],{"class":59}," c",[39,84,71],{"class":45},[39,86,75],{"class":74},[39,88,89],{"class":53},") {\n",[39,91,93,96,99,102,105,107],{"class":41,"line":92},2,[39,94,95],{"class":45},"    return",[39,97,98],{"class":53}," a ",[39,100,101],{"class":45},"+",[39,103,104],{"class":53}," b ",[39,106,101],{"class":45},[39,108,109],{"class":53}," c;\n",[39,111,113],{"class":41,"line":112},3,[39,114,115],{"class":53},"}\n",[39,117,119],{"class":41,"line":118},4,[39,120,122],{"emptyLinePlaceholder":121},true,"\n",[39,124,126],{"class":41,"line":125},5,[39,127,129],{"class":128},"sJ8bj","\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[39,131,133],{"class":41,"line":132},6,[39,134,135],{"class":128},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[39,137,139,141,144,146,148,150,152,154,156,158,160,162,164],{"class":41,"line":138},7,[39,140,46],{"class":45},[39,142,143],{"class":49}," func2",[39,145,54],{"class":53},[39,147,46],{"class":45},[39,149,60],{"class":59},[39,151,71],{"class":45},[39,153,75],{"class":74},[39,155,63],{"class":53},[39,157,46],{"class":45},[39,159,68],{"class":59},[39,161,71],{"class":45},[39,163,75],{"class":74},[39,165,166],{"class":53},");\n",[39,168,170,172,174,176,178,180,182,184,186],{"class":41,"line":169},8,[39,171,46],{"class":45},[39,173,143],{"class":49},[39,175,54],{"class":53},[39,177,46],{"class":45},[39,179,60],{"class":59},[39,181,63],{"class":53},[39,183,46],{"class":45},[39,185,68],{"class":59},[39,187,89],{"class":53},[39,189,191,193,195,197],{"class":41,"line":190},9,[39,192,95],{"class":45},[39,194,98],{"class":53},[39,196,101],{"class":45},[39,198,199],{"class":53}," b;\n",[39,201,203],{"class":41,"line":202},10,[39,204,115],{"class":53},[39,206,208],{"class":41,"line":207},11,[39,209,122],{"emptyLinePlaceholder":121},[39,211,213,215,218],{"class":41,"line":212},12,[39,214,46],{"class":45},[39,216,217],{"class":49}," main",[39,219,220],{"class":53},"() {\n",[39,222,224],{"class":41,"line":223},13,[39,225,122],{"emptyLinePlaceholder":121},[39,227,229,232,235,239,242,244,246,249,251,253,256,258],{"class":41,"line":228},14,[39,230,231],{"class":53},"    cout ",[39,233,234],{"class":45},"\u003C\u003C",[39,236,238],{"class":237},"sZZnC"," \"ret = \"",[39,240,241],{"class":45}," \u003C\u003C",[39,243,50],{"class":49},[39,245,54],{"class":53},[39,247,248],{"class":74},"20",[39,250,63],{"class":53},[39,252,248],{"class":74},[39,254,255],{"class":53},") ",[39,257,234],{"class":45},[39,259,260],{"class":53}," endl;\n",[39,262,264,266,268,270,272,274,276,279,281,283],{"class":41,"line":263},15,[39,265,231],{"class":53},[39,267,234],{"class":45},[39,269,238],{"class":237},[39,271,241],{"class":45},[39,273,50],{"class":49},[39,275,54],{"class":53},[39,277,278],{"class":74},"100",[39,280,255],{"class":53},[39,282,234],{"class":45},[39,284,260],{"class":53},[39,286,288],{"class":41,"line":287},16,[39,289,122],{"emptyLinePlaceholder":121},[39,291,293,296,298,301],{"class":41,"line":292},17,[39,294,295],{"class":49},"    system",[39,297,54],{"class":53},[39,299,300],{"class":237},"\"pause\"",[39,302,166],{"class":53},[39,304,306],{"class":41,"line":305},18,[39,307,122],{"emptyLinePlaceholder":121},[39,309,311,313,316],{"class":41,"line":310},19,[39,312,95],{"class":45},[39,314,315],{"class":74}," 0",[39,317,318],{"class":53},";\n",[39,320,322],{"class":41,"line":321},20,[39,323,115],{"class":53},[19,325,326],{},"总结：",[328,329,330,334,337],"ol",{},[331,332,333],"li",{},"我传就用我；没传就用你",[331,335,336],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[331,338,339],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,341,343],{"id":342},"_72函数的占位参数","7.2函数的占位参数",[19,345,346],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,348,349,352,353],{},[350,351,24],"strong",{}," ",[26,354,355],{},"返回值类型 函数名 (数据类型){}",[30,357,359],{"className":32,"code":358,"language":34,"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",[26,360,361,366,385,398,402,410,414,435,439,449,453,461],{"__ignoreMap":35},[39,362,363],{"class":41,"line":42},[39,364,365],{"class":128},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[39,367,368,371,373,375,377,379,381,383],{"class":41,"line":92},[39,369,370],{"class":45},"void",[39,372,50],{"class":49},[39,374,54],{"class":53},[39,376,46],{"class":45},[39,378,60],{"class":59},[39,380,63],{"class":53},[39,382,46],{"class":45},[39,384,89],{"class":53},[39,386,387,389,391,394,396],{"class":41,"line":112},[39,388,231],{"class":53},[39,390,234],{"class":45},[39,392,393],{"class":237}," \"this is func\"",[39,395,241],{"class":45},[39,397,260],{"class":53},[39,399,400],{"class":41,"line":118},[39,401,115],{"class":53},[39,403,404,406,408],{"class":41,"line":125},[39,405,46],{"class":45},[39,407,217],{"class":49},[39,409,220],{"class":53},[39,411,412],{"class":41,"line":132},[39,413,122],{"emptyLinePlaceholder":121},[39,415,416,419,421,424,427,429,432],{"class":41,"line":138},[39,417,418],{"class":49},"    func",[39,420,54],{"class":53},[39,422,423],{"class":74},"10",[39,425,426],{"class":53},",",[39,428,423],{"class":74},[39,430,431],{"class":53},");",[39,433,434],{"class":128}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[39,436,437],{"class":41,"line":169},[39,438,122],{"emptyLinePlaceholder":121},[39,440,441,443,445,447],{"class":41,"line":190},[39,442,295],{"class":49},[39,444,54],{"class":53},[39,446,300],{"class":237},[39,448,166],{"class":53},[39,450,451],{"class":41,"line":202},[39,452,122],{"emptyLinePlaceholder":121},[39,454,455,457,459],{"class":41,"line":207},[39,456,95],{"class":45},[39,458,315],{"class":74},[39,460,318],{"class":53},[39,462,463],{"class":41,"line":212},[39,464,115],{"class":53},[19,466,467],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,469,471],{"id":470},"_73函数重载","7.3函数重载",[19,473,474],{},"意思是函数名是可以相同的",[476,477,479],"h3",{"id":478},"_731基本语法","7.3.1基本语法",[19,481,482],{},"作用：函数名可以相同，提高复用性",[19,484,485],{},[350,486,487],{},"函数重载满足条件：",[489,490,491,494,497],"ul",{},[331,492,493],{},"同一个作用域下",[331,495,496],{},"函数名称相同",[331,498,499,500,503,504,507,508],{},"函数参数",[350,501,502],{},"类型不同","  或者 ",[350,505,506],{},"个数不同"," 或者 ",[350,509,510],{},"顺序不同",[19,512,513,516],{},[350,514,515],{},"注意:","  函数的返回值不可以作为函数重载的条件",[30,518,522],{"className":519,"code":520,"language":521,"meta":35,"style":35},"language-C++ shiki shiki-themes github-light github-dark","\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","C++",[26,523,524,529,538,543,556,560,575,579,592,596,611,615,628,632,653,657,670,674,694,698,711,716,721,727,733,739,745,751,756,761,770,775,783,794,806,821,837,843,854,859,868],{"__ignoreMap":35},[39,525,526],{"class":41,"line":42},[39,527,528],{"class":128},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[39,530,531,533,535],{"class":41,"line":92},[39,532,370],{"class":45},[39,534,50],{"class":49},[39,536,537],{"class":53},"()\n",[39,539,540],{"class":41,"line":112},[39,541,542],{"class":53},"{\n",[39,544,545,547,549,552,554],{"class":41,"line":118},[39,546,231],{"class":53},[39,548,234],{"class":45},[39,550,551],{"class":237}," \"func 的调用！\"",[39,553,241],{"class":45},[39,555,260],{"class":53},[39,557,558],{"class":41,"line":125},[39,559,115],{"class":53},[39,561,562,564,566,568,570,572],{"class":41,"line":132},[39,563,370],{"class":45},[39,565,50],{"class":49},[39,567,54],{"class":53},[39,569,46],{"class":45},[39,571,60],{"class":59},[39,573,574],{"class":53},")\n",[39,576,577],{"class":41,"line":138},[39,578,542],{"class":53},[39,580,581,583,585,588,590],{"class":41,"line":169},[39,582,231],{"class":53},[39,584,234],{"class":45},[39,586,587],{"class":237}," \"func (int a) 的调用！\"",[39,589,241],{"class":45},[39,591,260],{"class":53},[39,593,594],{"class":41,"line":190},[39,595,115],{"class":53},[39,597,598,600,602,604,607,609],{"class":41,"line":202},[39,599,370],{"class":45},[39,601,50],{"class":49},[39,603,54],{"class":53},[39,605,606],{"class":45},"double",[39,608,60],{"class":59},[39,610,574],{"class":53},[39,612,613],{"class":41,"line":207},[39,614,542],{"class":53},[39,616,617,619,621,624,626],{"class":41,"line":212},[39,618,231],{"class":53},[39,620,234],{"class":45},[39,622,623],{"class":237}," \"func (double a)的调用！\"",[39,625,241],{"class":45},[39,627,260],{"class":53},[39,629,630],{"class":41,"line":223},[39,631,115],{"class":53},[39,633,634,636,638,640,642,644,647,649,651],{"class":41,"line":228},[39,635,370],{"class":45},[39,637,50],{"class":49},[39,639,54],{"class":53},[39,641,46],{"class":45},[39,643,60],{"class":59},[39,645,646],{"class":53}," ,",[39,648,606],{"class":45},[39,650,68],{"class":59},[39,652,574],{"class":53},[39,654,655],{"class":41,"line":263},[39,656,542],{"class":53},[39,658,659,661,663,666,668],{"class":41,"line":287},[39,660,231],{"class":53},[39,662,234],{"class":45},[39,664,665],{"class":237}," \"func (int a ,double b) 的调用！\"",[39,667,241],{"class":45},[39,669,260],{"class":53},[39,671,672],{"class":41,"line":292},[39,673,115],{"class":53},[39,675,676,678,680,682,684,686,688,690,692],{"class":41,"line":305},[39,677,370],{"class":45},[39,679,50],{"class":49},[39,681,54],{"class":53},[39,683,606],{"class":45},[39,685,60],{"class":59},[39,687,646],{"class":53},[39,689,46],{"class":45},[39,691,68],{"class":59},[39,693,574],{"class":53},[39,695,696],{"class":41,"line":310},[39,697,542],{"class":53},[39,699,700,702,704,707,709],{"class":41,"line":321},[39,701,231],{"class":53},[39,703,234],{"class":45},[39,705,706],{"class":237}," \"func (double a ,int b)的调用！\"",[39,708,241],{"class":45},[39,710,260],{"class":53},[39,712,714],{"class":41,"line":713},21,[39,715,115],{"class":53},[39,717,719],{"class":41,"line":718},22,[39,720,122],{"emptyLinePlaceholder":121},[39,722,724],{"class":41,"line":723},23,[39,725,726],{"class":128},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[39,728,730],{"class":41,"line":729},24,[39,731,732],{"class":128},"\u002F\u002Fint func(double a, int b)\n",[39,734,736],{"class":41,"line":735},25,[39,737,738],{"class":128},"\u002F\u002F{\n",[39,740,742],{"class":41,"line":741},26,[39,743,744],{"class":128},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[39,746,748],{"class":41,"line":747},27,[39,749,750],{"class":128},"\u002F\u002F}\n",[39,752,754],{"class":41,"line":753},28,[39,755,122],{"emptyLinePlaceholder":121},[39,757,759],{"class":41,"line":758},29,[39,760,122],{"emptyLinePlaceholder":121},[39,762,764,766,768],{"class":41,"line":763},30,[39,765,46],{"class":45},[39,767,217],{"class":49},[39,769,220],{"class":53},[39,771,773],{"class":41,"line":772},31,[39,774,122],{"emptyLinePlaceholder":121},[39,776,778,780],{"class":41,"line":777},32,[39,779,418],{"class":49},[39,781,782],{"class":53},"();\n",[39,784,786,788,790,792],{"class":41,"line":785},33,[39,787,418],{"class":49},[39,789,54],{"class":53},[39,791,423],{"class":74},[39,793,166],{"class":53},[39,795,797,799,801,804],{"class":41,"line":796},34,[39,798,418],{"class":49},[39,800,54],{"class":53},[39,802,803],{"class":74},"3.14",[39,805,166],{"class":53},[39,807,809,811,813,815,817,819],{"class":41,"line":808},35,[39,810,418],{"class":49},[39,812,54],{"class":53},[39,814,423],{"class":74},[39,816,426],{"class":53},[39,818,803],{"class":74},[39,820,166],{"class":53},[39,822,824,826,828,830,833,835],{"class":41,"line":823},36,[39,825,418],{"class":49},[39,827,54],{"class":53},[39,829,803],{"class":74},[39,831,832],{"class":53}," , ",[39,834,423],{"class":74},[39,836,166],{"class":53},[39,838,840],{"class":41,"line":839},37,[39,841,842],{"class":53},"    \n",[39,844,846,848,850,852],{"class":41,"line":845},38,[39,847,295],{"class":49},[39,849,54],{"class":53},[39,851,300],{"class":237},[39,853,166],{"class":53},[39,855,857],{"class":41,"line":856},39,[39,858,122],{"emptyLinePlaceholder":121},[39,860,862,864,866],{"class":41,"line":861},40,[39,863,95],{"class":45},[39,865,315],{"class":74},[39,867,318],{"class":53},[39,869,871],{"class":41,"line":870},41,[39,872,115],{"class":53},[19,874,875],{},"重点：函数返回值不可以作为函数重载条件！",[476,877,879],{"id":878},"_732注意事项","7.3.2注意事项",[489,881,882,885],{},[331,883,884],{},"引用作为重载条件!!!",[331,886,887],{},"函数重载碰到函数默认参数",[30,889,891],{"className":32,"code":890,"language":34,"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",[26,892,893,898,903,907,925,929,942,946,950,970,974,987,991,995,999,1004,1008,1032,1036,1049,1053,1057,1071,1075,1088,1092,1096,1104,1108,1122,1132,1145,1149,1153,1161,1165,1175,1179,1187],{"__ignoreMap":35},[39,894,895],{"class":41,"line":42},[39,896,897],{"class":128},"\u002F\u002F函数重载注意事项\n",[39,899,900],{"class":41,"line":92},[39,901,902],{"class":128},"\u002F\u002F1、引用作为重载条件\n",[39,904,905],{"class":41,"line":112},[39,906,122],{"emptyLinePlaceholder":121},[39,908,909,911,913,915,917,920,923],{"class":41,"line":118},[39,910,370],{"class":45},[39,912,50],{"class":49},[39,914,54],{"class":53},[39,916,46],{"class":45},[39,918,919],{"class":45}," &",[39,921,922],{"class":59},"a",[39,924,574],{"class":53},[39,926,927],{"class":41,"line":125},[39,928,542],{"class":53},[39,930,931,933,935,938,940],{"class":41,"line":132},[39,932,231],{"class":53},[39,934,234],{"class":45},[39,936,937],{"class":237}," \"func (int &a) 调用 \"",[39,939,241],{"class":45},[39,941,260],{"class":53},[39,943,944],{"class":41,"line":138},[39,945,115],{"class":53},[39,947,948],{"class":41,"line":169},[39,949,122],{"emptyLinePlaceholder":121},[39,951,952,954,956,958,961,964,966,968],{"class":41,"line":190},[39,953,370],{"class":45},[39,955,50],{"class":49},[39,957,54],{"class":53},[39,959,960],{"class":45},"const",[39,962,963],{"class":45}," int",[39,965,919],{"class":45},[39,967,922],{"class":59},[39,969,574],{"class":53},[39,971,972],{"class":41,"line":202},[39,973,542],{"class":53},[39,975,976,978,980,983,985],{"class":41,"line":207},[39,977,231],{"class":53},[39,979,234],{"class":45},[39,981,982],{"class":237}," \"func (const int &a) 调用 \"",[39,984,241],{"class":45},[39,986,260],{"class":53},[39,988,989],{"class":41,"line":212},[39,990,115],{"class":53},[39,992,993],{"class":41,"line":223},[39,994,122],{"emptyLinePlaceholder":121},[39,996,997],{"class":41,"line":228},[39,998,122],{"emptyLinePlaceholder":121},[39,1000,1001],{"class":41,"line":263},[39,1002,1003],{"class":128},"\u002F\u002F2、函数重载碰到函数默认参数\n",[39,1005,1006],{"class":41,"line":287},[39,1007,122],{"emptyLinePlaceholder":121},[39,1009,1010,1012,1014,1016,1018,1020,1022,1024,1026,1028,1030],{"class":41,"line":292},[39,1011,370],{"class":45},[39,1013,143],{"class":49},[39,1015,54],{"class":53},[39,1017,46],{"class":45},[39,1019,60],{"class":59},[39,1021,63],{"class":53},[39,1023,46],{"class":45},[39,1025,68],{"class":59},[39,1027,71],{"class":45},[39,1029,75],{"class":74},[39,1031,574],{"class":53},[39,1033,1034],{"class":41,"line":305},[39,1035,542],{"class":53},[39,1037,1038,1040,1042,1045,1047],{"class":41,"line":310},[39,1039,231],{"class":53},[39,1041,234],{"class":45},[39,1043,1044],{"class":237}," \"func2(int a, int b = 10) 调用\"",[39,1046,241],{"class":45},[39,1048,260],{"class":53},[39,1050,1051],{"class":41,"line":321},[39,1052,115],{"class":53},[39,1054,1055],{"class":41,"line":713},[39,1056,122],{"emptyLinePlaceholder":121},[39,1058,1059,1061,1063,1065,1067,1069],{"class":41,"line":718},[39,1060,370],{"class":45},[39,1062,143],{"class":49},[39,1064,54],{"class":53},[39,1066,46],{"class":45},[39,1068,60],{"class":59},[39,1070,574],{"class":53},[39,1072,1073],{"class":41,"line":723},[39,1074,542],{"class":53},[39,1076,1077,1079,1081,1084,1086],{"class":41,"line":729},[39,1078,231],{"class":53},[39,1080,234],{"class":45},[39,1082,1083],{"class":237}," \"func2(int a) 调用\"",[39,1085,241],{"class":45},[39,1087,260],{"class":53},[39,1089,1090],{"class":41,"line":735},[39,1091,115],{"class":53},[39,1093,1094],{"class":41,"line":741},[39,1095,122],{"emptyLinePlaceholder":121},[39,1097,1098,1100,1102],{"class":41,"line":747},[39,1099,46],{"class":45},[39,1101,217],{"class":49},[39,1103,220],{"class":53},[39,1105,1106],{"class":41,"line":753},[39,1107,842],{"class":53},[39,1109,1110,1113,1115,1118,1120],{"class":41,"line":758},[39,1111,1112],{"class":45},"    int",[39,1114,98],{"class":53},[39,1116,1117],{"class":45},"=",[39,1119,75],{"class":74},[39,1121,318],{"class":53},[39,1123,1124,1126,1129],{"class":41,"line":763},[39,1125,418],{"class":49},[39,1127,1128],{"class":53},"(a);",[39,1130,1131],{"class":128}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[39,1133,1134,1136,1138,1140,1142],{"class":41,"line":772},[39,1135,418],{"class":49},[39,1137,54],{"class":53},[39,1139,423],{"class":74},[39,1141,431],{"class":53},[39,1143,1144],{"class":128},"\u002F\u002F调用有const   10是个常量\n",[39,1146,1147],{"class":41,"line":777},[39,1148,122],{"emptyLinePlaceholder":121},[39,1150,1151],{"class":41,"line":785},[39,1152,122],{"emptyLinePlaceholder":121},[39,1154,1155,1158],{"class":41,"line":796},[39,1156,1157],{"class":128},"    \u002F\u002Ffunc2(10);",[39,1159,1160],{"class":128}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[39,1162,1163],{"class":41,"line":808},[39,1164,122],{"emptyLinePlaceholder":121},[39,1166,1167,1169,1171,1173],{"class":41,"line":823},[39,1168,295],{"class":49},[39,1170,54],{"class":53},[39,1172,300],{"class":237},[39,1174,166],{"class":53},[39,1176,1177],{"class":41,"line":839},[39,1178,122],{"emptyLinePlaceholder":121},[39,1180,1181,1183,1185],{"class":41,"line":845},[39,1182,95],{"class":45},[39,1184,315],{"class":74},[39,1186,318],{"class":53},[39,1188,1189],{"class":41,"line":856},[39,1190,115],{"class":53},[1192,1193,1194],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .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":92,"depth":92,"links":1196},[1197,1198,1199],{"id":16,"depth":92,"text":17},{"id":342,"depth":92,"text":343},{"id":470,"depth":92,"text":471,"children":1200},[1201,1202],{"id":478,"depth":112,"text":479},{"id":878,"depth":112,"text":879},"md",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":5,"description":35},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",[1210,6243,7346,8764,11744,13090,14574,15581,24344,24357,24956,24982,25106,25347,25412,25430,25443,25490,25614,25783,25982,26162,26367,26503,26598,26635,26648,26958,27699,28407,28428,29448,31079,31230,31243,31255,31556,51368,51383,51400,51433,54305,77653,93798,93819,93932,94053,94823,95486,95847,95885,95991,96091,96134,96160,96221,97875,97976,98001,98492,98992,100072,100355,101097,101599,101611,103627,105291,106794,108492,110409,112328,114350,117820,118252,118715,119464,122408,122756,122778,123134,126441,126453,126856,126879,127026,127193,127398,127699,128256,128913,130844,132442,133091,134585,136016,137251,138945,140697,143107,143223,144158,144369,145254,146489,146717,146730,147885,150297,152665,155986,158463,160107,161884,163897,166949,169129,171656,173850],{"id":1211,"title":1212,"body":1213,"description":35,"extension":1203,"meta":6238,"navigation":121,"path":6239,"seo":6240,"stem":6241,"__hash__":6242},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1214,"toc":6210},[1215,1218,1222,1225,1229,1240,1244,1248,1251,1254,1257,1260,1263,1286,1290,1293,1296,1299,1302,1351,1355,1373,1375,1389,1392,1400,1403,2259,2266,2282,2286,2371,2375,2381,2466,2470,2508,2512,2574,2578,2582,2589,2600,2604,2609,2613,2618,2622,2627,2631,2635,2640,2889,2894,3032,3037,3289,3292,3300,3304,3309,3410,3413,3710,3719,3819,3822,3825,3828,3831,4089,4094,4234,4237,4416,4419,4547,4550,4702,4706,4711,4714,4725,4733,4736,4843,4847,4851,4856,4906,4911,4916,4940,4945,4998,5001,5006,5181,5186,5471,5476,5873,5877,5882,5939,5944,5952,5955,6095,6098,6207],[10,1216,1212],{"id":1217},"_1基础入门",[14,1219,1221],{"id":1220},"_11注释","1.1注释",[19,1223,1224],{},"\u002F\u002F或者\u002F* *\u002F",[14,1226,1228],{"id":1227},"_12命名","1.2命名",[328,1230,1231,1234,1237],{},[331,1232,1233],{},"字母数字下划线",[331,1235,1236],{},"开头必须是字母或_",[331,1238,1239],{},"不能使用关键词",[14,1241,1243],{"id":1242},"_13数据类型","1.3数据类型",[476,1245,1247],{"id":1246},"_131整形","1.3.1整形",[19,1249,1250],{},"short 短整形 2",[19,1252,1253],{},"int 整形 4",[19,1255,1256],{},"long 长整形 win4 linux32位4 linux64位8",[19,1258,1259],{},"long long 长长整形 8",[19,1261,1262],{},"利用sizeof可以求数据类型占用的内存空间大小",[30,1264,1266],{"className":32,"code":1265,"language":34,"meta":35,"style":35},"sizeof(int)\nsizeof(num)\n",[26,1267,1268,1279],{"__ignoreMap":35},[39,1269,1270,1273,1275,1277],{"class":41,"line":42},[39,1271,1272],{"class":45},"sizeof",[39,1274,54],{"class":53},[39,1276,46],{"class":45},[39,1278,574],{"class":53},[39,1280,1281,1283],{"class":41,"line":92},[39,1282,1272],{"class":45},[39,1284,1285],{"class":53},"(num)\n",[476,1287,1289],{"id":1288},"_132浮点型","1.3.2浮点型",[19,1291,1292],{},"float 单精度 4节 7位有效数字",[19,1294,1295],{},"double 双精度 8节 15-16有效数字",[19,1297,1298],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,1300,1301],{},"注意点：",[30,1303,1305],{"className":32,"code":1304,"language":34,"meta":35,"style":35},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[26,1306,1307,1328],{"__ignoreMap":35},[39,1308,1309,1312,1315,1317,1319,1322,1325],{"class":41,"line":42},[39,1310,1311],{"class":45},"float",[39,1313,1314],{"class":53}," f1",[39,1316,1117],{"class":45},[39,1318,803],{"class":74},[39,1320,1321],{"class":45},"f",[39,1323,1324],{"class":53},";",[39,1326,1327],{"class":128}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[39,1329,1330,1332,1335,1337,1340,1343,1346,1348],{"class":41,"line":92},[39,1331,1311],{"class":45},[39,1333,1334],{"class":53}," f2",[39,1336,1117],{"class":45},[39,1338,1339],{"class":74},"3",[39,1341,1342],{"class":45},"e",[39,1344,1345],{"class":74},"2",[39,1347,1324],{"class":53},[39,1349,1350],{"class":128}," \u002F\u002F科学记数法\n",[476,1352,1354],{"id":1353},"_133字符型","1.3.3字符型",[30,1356,1358],{"className":32,"code":1357,"language":34,"meta":35,"style":35},"char ch='a'\n",[26,1359,1360],{"__ignoreMap":35},[39,1361,1362,1365,1368,1370],{"class":41,"line":42},[39,1363,1364],{"class":45},"char",[39,1366,1367],{"class":53}," ch",[39,1369,1117],{"class":45},[39,1371,1372],{"class":237},"'a'\n",[19,1374,1301],{},[328,1376,1377,1380,1383,1386],{},[331,1378,1379],{},"在显示字符型变量时，只能单引号，双引号x",[331,1381,1382],{},"单引号内只能一个字符，不能字符串",[331,1384,1385],{},"c和c++字符型变量只占用一个字符",[331,1387,1388],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,1390,1391],{},"ASCII码大致由以下两部分组成：",[328,1393,1394,1397],{},[331,1395,1396],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[331,1398,1399],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,1401,1402],{},"ASCII码表格：",[1404,1405,1406,1449],"table",{},[1407,1408,1409],"thead",{},[1410,1411,1412,1419,1424,1428,1433,1437,1441,1445],"tr",{},[1413,1414,1415,1418],"th",{},[350,1416,1417],{},"ASCII","值",[1413,1420,1421],{},[350,1422,1423],{},"控制字符",[1413,1425,1426,1418],{},[350,1427,1417],{},[1413,1429,1430],{},[350,1431,1432],{},"字符",[1413,1434,1435,1418],{},[350,1436,1417],{},[1413,1438,1439],{},[350,1440,1432],{},[1413,1442,1443,1418],{},[350,1444,1417],{},[1413,1446,1447],{},[350,1448,1432],{},[1450,1451,1452,1479,1504,1529,1554,1579,1604,1629,1654,1679,1705,1730,1755,1780,1806,1832,1858,1882,1907,1932,1957,1981,2006,2031,2056,2081,2106,2132,2157,2182,2207,2233],"tbody",{},[1410,1453,1454,1458,1461,1464,1467,1470,1473,1476],{},[1455,1456,1457],"td",{},"0",[1455,1459,1460],{},"NUT",[1455,1462,1463],{},"32",[1455,1465,1466],{},"(space)",[1455,1468,1469],{},"64",[1455,1471,1472],{},"@",[1455,1474,1475],{},"96",[1455,1477,1478],{},"、",[1410,1480,1481,1484,1487,1490,1493,1496,1499,1502],{},[1455,1482,1483],{},"1",[1455,1485,1486],{},"SOH",[1455,1488,1489],{},"33",[1455,1491,1492],{},"!",[1455,1494,1495],{},"65",[1455,1497,1498],{},"A",[1455,1500,1501],{},"97",[1455,1503,922],{},[1410,1505,1506,1508,1511,1514,1517,1520,1523,1526],{},[1455,1507,1345],{},[1455,1509,1510],{},"STX",[1455,1512,1513],{},"34",[1455,1515,1516],{},"\"",[1455,1518,1519],{},"66",[1455,1521,1522],{},"B",[1455,1524,1525],{},"98",[1455,1527,1528],{},"b",[1410,1530,1531,1533,1536,1539,1542,1545,1548,1551],{},[1455,1532,1339],{},[1455,1534,1535],{},"ETX",[1455,1537,1538],{},"35",[1455,1540,1541],{},"#",[1455,1543,1544],{},"67",[1455,1546,1547],{},"C",[1455,1549,1550],{},"99",[1455,1552,1553],{},"c",[1410,1555,1556,1559,1562,1565,1568,1571,1574,1576],{},[1455,1557,1558],{},"4",[1455,1560,1561],{},"EOT",[1455,1563,1564],{},"36",[1455,1566,1567],{},"$",[1455,1569,1570],{},"68",[1455,1572,1573],{},"D",[1455,1575,278],{},[1455,1577,1578],{},"d",[1410,1580,1581,1584,1587,1590,1593,1596,1599,1602],{},[1455,1582,1583],{},"5",[1455,1585,1586],{},"ENQ",[1455,1588,1589],{},"37",[1455,1591,1592],{},"%",[1455,1594,1595],{},"69",[1455,1597,1598],{},"E",[1455,1600,1601],{},"101",[1455,1603,1342],{},[1410,1605,1606,1609,1612,1615,1618,1621,1624,1627],{},[1455,1607,1608],{},"6",[1455,1610,1611],{},"ACK",[1455,1613,1614],{},"38",[1455,1616,1617],{},"&",[1455,1619,1620],{},"70",[1455,1622,1623],{},"F",[1455,1625,1626],{},"102",[1455,1628,1321],{},[1410,1630,1631,1634,1637,1640,1642,1645,1648,1651],{},[1455,1632,1633],{},"7",[1455,1635,1636],{},"BEL",[1455,1638,1639],{},"39",[1455,1641,426],{},[1455,1643,1644],{},"71",[1455,1646,1647],{},"G",[1455,1649,1650],{},"103",[1455,1652,1653],{},"g",[1410,1655,1656,1659,1662,1665,1667,1670,1673,1676],{},[1455,1657,1658],{},"8",[1455,1660,1661],{},"BS",[1455,1663,1664],{},"40",[1455,1666,54],{},[1455,1668,1669],{},"72",[1455,1671,1672],{},"H",[1455,1674,1675],{},"104",[1455,1677,1678],{},"h",[1410,1680,1681,1684,1687,1690,1693,1696,1699,1702],{},[1455,1682,1683],{},"9",[1455,1685,1686],{},"HT",[1455,1688,1689],{},"41",[1455,1691,1692],{},")",[1455,1694,1695],{},"73",[1455,1697,1698],{},"I",[1455,1700,1701],{},"105",[1455,1703,1704],{},"i",[1410,1706,1707,1709,1712,1715,1718,1721,1724,1727],{},[1455,1708,423],{},[1455,1710,1711],{},"LF",[1455,1713,1714],{},"42",[1455,1716,1717],{},"*",[1455,1719,1720],{},"74",[1455,1722,1723],{},"J",[1455,1725,1726],{},"106",[1455,1728,1729],{},"j",[1410,1731,1732,1735,1738,1741,1743,1746,1749,1752],{},[1455,1733,1734],{},"11",[1455,1736,1737],{},"VT",[1455,1739,1740],{},"43",[1455,1742,101],{},[1455,1744,1745],{},"75",[1455,1747,1748],{},"K",[1455,1750,1751],{},"107",[1455,1753,1754],{},"k",[1410,1756,1757,1760,1763,1766,1768,1771,1774,1777],{},[1455,1758,1759],{},"12",[1455,1761,1762],{},"FF",[1455,1764,1765],{},"44",[1455,1767,426],{},[1455,1769,1770],{},"76",[1455,1772,1773],{},"L",[1455,1775,1776],{},"108",[1455,1778,1779],{},"l",[1410,1781,1782,1785,1788,1791,1794,1797,1800,1803],{},[1455,1783,1784],{},"13",[1455,1786,1787],{},"CR",[1455,1789,1790],{},"45",[1455,1792,1793],{},"-",[1455,1795,1796],{},"77",[1455,1798,1799],{},"M",[1455,1801,1802],{},"109",[1455,1804,1805],{},"m",[1410,1807,1808,1811,1814,1817,1820,1823,1826,1829],{},[1455,1809,1810],{},"14",[1455,1812,1813],{},"SO",[1455,1815,1816],{},"46",[1455,1818,1819],{},".",[1455,1821,1822],{},"78",[1455,1824,1825],{},"N",[1455,1827,1828],{},"110",[1455,1830,1831],{},"n",[1410,1833,1834,1837,1840,1843,1846,1849,1852,1855],{},[1455,1835,1836],{},"15",[1455,1838,1839],{},"SI",[1455,1841,1842],{},"47",[1455,1844,1845],{},"\u002F",[1455,1847,1848],{},"79",[1455,1850,1851],{},"O",[1455,1853,1854],{},"111",[1455,1856,1857],{},"o",[1410,1859,1860,1863,1866,1869,1871,1874,1877,1880],{},[1455,1861,1862],{},"16",[1455,1864,1865],{},"DLE",[1455,1867,1868],{},"48",[1455,1870,1457],{},[1455,1872,1873],{},"80",[1455,1875,1876],{},"P",[1455,1878,1879],{},"112",[1455,1881,19],{},[1410,1883,1884,1887,1890,1893,1895,1898,1901,1904],{},[1455,1885,1886],{},"17",[1455,1888,1889],{},"DCI",[1455,1891,1892],{},"49",[1455,1894,1483],{},[1455,1896,1897],{},"81",[1455,1899,1900],{},"Q",[1455,1902,1903],{},"113",[1455,1905,1906],{},"q",[1410,1908,1909,1912,1915,1918,1920,1923,1926,1929],{},[1455,1910,1911],{},"18",[1455,1913,1914],{},"DC2",[1455,1916,1917],{},"50",[1455,1919,1345],{},[1455,1921,1922],{},"82",[1455,1924,1925],{},"R",[1455,1927,1928],{},"114",[1455,1930,1931],{},"r",[1410,1933,1934,1937,1940,1943,1945,1948,1951,1954],{},[1455,1935,1936],{},"19",[1455,1938,1939],{},"DC3",[1455,1941,1942],{},"51",[1455,1944,1339],{},[1455,1946,1947],{},"83",[1455,1949,1950],{},"S",[1455,1952,1953],{},"115",[1455,1955,1956],{},"s",[1410,1958,1959,1961,1964,1967,1969,1972,1975,1978],{},[1455,1960,248],{},[1455,1962,1963],{},"DC4",[1455,1965,1966],{},"52",[1455,1968,1558],{},[1455,1970,1971],{},"84",[1455,1973,1974],{},"T",[1455,1976,1977],{},"116",[1455,1979,1980],{},"t",[1410,1982,1983,1986,1989,1992,1994,1997,2000,2003],{},[1455,1984,1985],{},"21",[1455,1987,1988],{},"NAK",[1455,1990,1991],{},"53",[1455,1993,1583],{},[1455,1995,1996],{},"85",[1455,1998,1999],{},"U",[1455,2001,2002],{},"117",[1455,2004,2005],{},"u",[1410,2007,2008,2011,2014,2017,2019,2022,2025,2028],{},[1455,2009,2010],{},"22",[1455,2012,2013],{},"SYN",[1455,2015,2016],{},"54",[1455,2018,1608],{},[1455,2020,2021],{},"86",[1455,2023,2024],{},"V",[1455,2026,2027],{},"118",[1455,2029,2030],{},"v",[1410,2032,2033,2036,2039,2042,2044,2047,2050,2053],{},[1455,2034,2035],{},"23",[1455,2037,2038],{},"TB",[1455,2040,2041],{},"55",[1455,2043,1633],{},[1455,2045,2046],{},"87",[1455,2048,2049],{},"W",[1455,2051,2052],{},"119",[1455,2054,2055],{},"w",[1410,2057,2058,2061,2064,2067,2069,2072,2075,2078],{},[1455,2059,2060],{},"24",[1455,2062,2063],{},"CAN",[1455,2065,2066],{},"56",[1455,2068,1658],{},[1455,2070,2071],{},"88",[1455,2073,2074],{},"X",[1455,2076,2077],{},"120",[1455,2079,2080],{},"x",[1410,2082,2083,2086,2089,2092,2094,2097,2100,2103],{},[1455,2084,2085],{},"25",[1455,2087,2088],{},"EM",[1455,2090,2091],{},"57",[1455,2093,1683],{},[1455,2095,2096],{},"89",[1455,2098,2099],{},"Y",[1455,2101,2102],{},"121",[1455,2104,2105],{},"y",[1410,2107,2108,2111,2114,2117,2120,2123,2126,2129],{},[1455,2109,2110],{},"26",[1455,2112,2113],{},"SUB",[1455,2115,2116],{},"58",[1455,2118,2119],{},":",[1455,2121,2122],{},"90",[1455,2124,2125],{},"Z",[1455,2127,2128],{},"122",[1455,2130,2131],{},"z",[1410,2133,2134,2137,2140,2143,2145,2148,2151,2154],{},[1455,2135,2136],{},"27",[1455,2138,2139],{},"ESC",[1455,2141,2142],{},"59",[1455,2144,1324],{},[1455,2146,2147],{},"91",[1455,2149,2150],{},"[",[1455,2152,2153],{},"123",[1455,2155,2156],{},"{",[1410,2158,2159,2162,2165,2168,2171,2174,2176,2179],{},[1455,2160,2161],{},"28",[1455,2163,2164],{},"FS",[1455,2166,2167],{},"60",[1455,2169,2170],{},"\u003C",[1455,2172,2173],{},"92",[1455,2175,1845],{},[1455,2177,2178],{},"124",[1455,2180,2181],{},"|",[1410,2183,2184,2187,2190,2193,2195,2198,2201,2204],{},[1455,2185,2186],{},"29",[1455,2188,2189],{},"GS",[1455,2191,2192],{},"61",[1455,2194,1117],{},[1455,2196,2197],{},"93",[1455,2199,2200],{},"]",[1455,2202,2203],{},"125",[1455,2205,2206],{},"}",[1410,2208,2209,2212,2215,2218,2221,2224,2227,2230],{},[1455,2210,2211],{},"30",[1455,2213,2214],{},"RS",[1455,2216,2217],{},"62",[1455,2219,2220],{},">",[1455,2222,2223],{},"94",[1455,2225,2226],{},"^",[1455,2228,2229],{},"126",[1455,2231,2232],{},"`",[1410,2234,2235,2238,2241,2244,2247,2250,2253,2256],{},[1455,2236,2237],{},"31",[1455,2239,2240],{},"US",[1455,2242,2243],{},"63",[1455,2245,2246],{},"?",[1455,2248,2249],{},"95",[1455,2251,2252],{},"_",[1455,2254,2255],{},"127",[1455,2257,2258],{},"DEL",[19,2260,2261,2262,2265],{},"ASCII 码大致由以下",[350,2263,2264],{},"两部分组","成：",[489,2267,2268,2275],{},[331,2269,2270,2271,2274],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[350,2272,2273],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[331,2276,2277,2278,2281],{},"ASCII 打印字符：数字 ",[350,2279,2280],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[476,2283,2285],{"id":2284},"_134转义字符","1.3.4转义字符",[30,2287,2289],{"className":32,"code":2288,"language":34,"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",[26,2290,2291,2296,2311,2325,2330,2343,2348],{"__ignoreMap":35},[39,2292,2293],{"class":41,"line":42},[39,2294,2295],{"class":128},"\u002F\u002F换行符\n",[39,2297,2298,2301,2303,2306,2308],{"class":41,"line":92},[39,2299,2300],{"class":53},"cout ",[39,2302,234],{"class":45},[39,2304,2305],{"class":237},"\"hello world\u002Fn\"",[39,2307,1324],{"class":53},[39,2309,2310],{"class":128}," \u002F\u002F就等同于如下：\n",[39,2312,2313,2315,2317,2320,2322],{"class":41,"line":112},[39,2314,2300],{"class":53},[39,2316,234],{"class":45},[39,2318,2319],{"class":237},"\"hello world\"",[39,2321,234],{"class":45},[39,2323,2324],{"class":53},"endl;\n",[39,2326,2327],{"class":41,"line":118},[39,2328,2329],{"class":128},"\u002F\u002F反斜杠\n",[39,2331,2332,2334,2336,2339,2341],{"class":41,"line":125},[39,2333,2300],{"class":53},[39,2335,234],{"class":45},[39,2337,2338],{"class":237},"\"\u002F\u002F\"",[39,2340,234],{"class":45},[39,2342,2324],{"class":53},[39,2344,2345],{"class":41,"line":132},[39,2346,2347],{"class":128},"\u002F\u002F水平制表符\n",[39,2349,2350,2352,2354,2357,2360,2363,2365,2368],{"class":41,"line":138},[39,2351,2300],{"class":53},[39,2353,234],{"class":45},[39,2355,2356],{"class":237},"\"aaaa",[39,2358,2359],{"class":74},"\\t",[39,2361,2362],{"class":237},"helloworld\"",[39,2364,234],{"class":45},[39,2366,2367],{"class":53},"endl;",[39,2369,2370],{"class":128}," \u002F\u002F输出窗口时有对齐效果\n",[476,2372,2374],{"id":2373},"_135字符串型","1.3.5字符串型",[19,2376,2377,2378,2380],{},"char 变量名",[39,2379],{},"=\"字符串值\"",[30,2382,2384],{"className":32,"code":2383,"language":34,"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",[26,2385,2386,2391,2396,2401,2406,2419,2432,2437,2442,2453],{"__ignoreMap":35},[39,2387,2388],{"class":41,"line":42},[39,2389,2390],{"class":128},"\u002F\u002Fc风格字符串\n",[39,2392,2393],{"class":41,"line":92},[39,2394,2395],{"class":128},"\u002F\u002F注意事项：\n",[39,2397,2398],{"class":41,"line":112},[39,2399,2400],{"class":128},"\u002F\u002F1.char字符串名[]\n",[39,2402,2403],{"class":41,"line":118},[39,2404,2405],{"class":128},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[39,2407,2408,2410,2413,2415,2417],{"class":41,"line":125},[39,2409,1364],{"class":45},[39,2411,2412],{"class":53}," str[]",[39,2414,1117],{"class":45},[39,2416,2319],{"class":237},[39,2418,318],{"class":53},[39,2420,2421,2423,2425,2428,2430],{"class":41,"line":132},[39,2422,2300],{"class":53},[39,2424,234],{"class":45},[39,2426,2427],{"class":53},"str",[39,2429,234],{"class":45},[39,2431,2324],{"class":53},[39,2433,2434],{"class":41,"line":138},[39,2435,2436],{"class":128},"\u002F\u002Fc++风格字符串\n",[39,2438,2439],{"class":41,"line":169},[39,2440,2441],{"class":128},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[39,2443,2444,2447,2449,2451],{"class":41,"line":190},[39,2445,2446],{"class":53},"string str2",[39,2448,1117],{"class":45},[39,2450,2319],{"class":237},[39,2452,318],{"class":53},[39,2454,2455,2457,2459,2462,2464],{"class":41,"line":202},[39,2456,2300],{"class":53},[39,2458,234],{"class":45},[39,2460,2461],{"class":53},"str2",[39,2463,234],{"class":45},[39,2465,2324],{"class":53},[476,2467,2469],{"id":2468},"_136布尔类型bool","1.3.6布尔类型bool",[30,2471,2473],{"className":32,"code":2472,"language":34,"meta":35,"style":35},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[26,2474,2475,2490],{"__ignoreMap":35},[39,2476,2477,2480,2483,2485,2488],{"class":41,"line":42},[39,2478,2479],{"class":45},"bool",[39,2481,2482],{"class":53}," flag",[39,2484,1117],{"class":45},[39,2486,2487],{"class":74},"true",[39,2489,318],{"class":53},[39,2491,2492,2495,2498,2501,2503,2505],{"class":41,"line":92},[39,2493,2494],{"class":53},"cout",[39,2496,2497],{"class":45},"\u003C\u003Csizeof",[39,2499,2500],{"class":53},"(flag)",[39,2502,234],{"class":45},[39,2504,2367],{"class":53},[39,2506,2507],{"class":128}," \u002F\u002F查看布尔占内存空间\n",[14,2509,2511],{"id":2510},"_14键盘输入cin","1.4键盘输入cin",[30,2513,2515],{"className":32,"code":2514,"language":34,"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",[26,2516,2517,2529,2546,2557],{"__ignoreMap":35},[39,2518,2519,2521,2523,2525,2527],{"class":41,"line":42},[39,2520,46],{"class":45},[39,2522,60],{"class":53},[39,2524,1117],{"class":45},[39,2526,1457],{"class":74},[39,2528,318],{"class":53},[39,2530,2531,2533,2535,2538,2540,2542,2544],{"class":41,"line":92},[39,2532,2494],{"class":53},[39,2534,234],{"class":45},[39,2536,2537],{"class":237},"\"请给整型变量a赋值\"",[39,2539,234],{"class":45},[39,2541,922],{"class":53},[39,2543,234],{"class":45},[39,2545,2324],{"class":53},[39,2547,2548,2551,2554],{"class":41,"line":112},[39,2549,2550],{"class":53},"cin ",[39,2552,2553],{"class":45},">>",[39,2555,2556],{"class":53}," a;\n",[39,2558,2559,2561,2563,2566,2568,2570,2572],{"class":41,"line":118},[39,2560,2300],{"class":53},[39,2562,234],{"class":45},[39,2564,2565],{"class":237}," \"整型变量a=\"",[39,2567,241],{"class":45},[39,2569,922],{"class":53},[39,2571,234],{"class":45},[39,2573,2324],{"class":53},[14,2575,2577],{"id":2576},"_15运算符","1.5运算符",[476,2579,2581],{"id":2580},"_151算术运算符","1.5.1算术运算符",[19,2583,2584,2588],{},[2585,2586],"img",{"alt":35,"src":2587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[328,2590,2591,2594,2597],{},[331,2592,2593],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[331,2595,2596],{},"两个小数不可以做取模运算",[331,2598,2599],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[476,2601,2603],{"id":2602},"_152赋值运算符","1.5.2赋值运算符",[19,2605,2606],{},[2585,2607],{"alt":35,"src":2608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[476,2610,2612],{"id":2611},"_153比较运算符","1.5.3比较运算符",[19,2614,2615],{},[2585,2616],{"alt":35,"src":2617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[476,2619,2621],{"id":2620},"_154逻辑运算符","1.5.4逻辑运算符",[19,2623,2624],{},[2585,2625],{"alt":35,"src":2626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2628,2630],{"id":2629},"_16程序流程结构","1.6程序流程结构",[476,2632,2634],{"id":2633},"_161选择结构","1.6.1选择结构",[328,2636,2637],{},[331,2638,2639],{},"if语句\n单行、多行、多条件if语句",[30,2641,2643],{"className":32,"code":2642,"language":34,"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",[26,2644,2645,2650,2665,2669,2683,2687,2692,2701,2714,2718,2731,2735,2740,2744,2757,2761,2766,2786,2790,2803,2807,2835,2839,2855,2859,2863,2867,2880,2884],{"__ignoreMap":35},[39,2646,2647],{"class":41,"line":42},[39,2648,2649],{"class":128},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[39,2651,2652,2655,2658,2660,2663],{"class":41,"line":92},[39,2653,2654],{"class":45},"if",[39,2656,2657],{"class":53},"(score",[39,2659,2220],{"class":45},[39,2661,2662],{"class":74},"600",[39,2664,574],{"class":53},[39,2666,2667],{"class":41,"line":112},[39,2668,542],{"class":53},[39,2670,2671,2674,2676,2679,2681],{"class":41,"line":118},[39,2672,2673],{"class":53},"    cout",[39,2675,234],{"class":45},[39,2677,2678],{"class":237},"'这是单行if语句'",[39,2680,234],{"class":45},[39,2682,2324],{"class":53},[39,2684,2685],{"class":41,"line":125},[39,2686,115],{"class":53},[39,2688,2689],{"class":41,"line":132},[39,2690,2691],{"class":128},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[39,2693,2694,2696,2698],{"class":41,"line":138},[39,2695,2550],{"class":53},[39,2697,2553],{"class":45},[39,2699,2700],{"class":53}," score\n",[39,2702,2703,2705,2707,2710,2712],{"class":41,"line":169},[39,2704,2654],{"class":45},[39,2706,2657],{"class":53},[39,2708,2709],{"class":45},"\u003C=",[39,2711,2662],{"class":74},[39,2713,574],{"class":53},[39,2715,2716],{"class":41,"line":190},[39,2717,542],{"class":53},[39,2719,2720,2722,2724,2727,2729],{"class":41,"line":202},[39,2721,2673],{"class":53},[39,2723,2553],{"class":45},[39,2725,2726],{"class":237},"\"小于等于600\"",[39,2728,234],{"class":45},[39,2730,2324],{"class":53},[39,2732,2733],{"class":41,"line":207},[39,2734,115],{"class":53},[39,2736,2737],{"class":41,"line":212},[39,2738,2739],{"class":45},"else\n",[39,2741,2742],{"class":41,"line":223},[39,2743,542],{"class":53},[39,2745,2746,2748,2750,2753,2755],{"class":41,"line":228},[39,2747,2673],{"class":53},[39,2749,2553],{"class":45},[39,2751,2752],{"class":237},"\"大于600\"",[39,2754,2553],{"class":45},[39,2756,2324],{"class":53},[39,2758,2759],{"class":41,"line":263},[39,2760,115],{"class":53},[39,2762,2763],{"class":41,"line":287},[39,2764,2765],{"class":128},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[39,2767,2768,2770,2773,2775,2777,2780,2782,2784],{"class":41,"line":292},[39,2769,2654],{"class":45},[39,2771,2772],{"class":53}," (",[39,2774,1457],{"class":74},[39,2776,2170],{"class":45},[39,2778,2779],{"class":53},"num",[39,2781,2170],{"class":45},[39,2783,278],{"class":74},[39,2785,574],{"class":53},[39,2787,2788],{"class":41,"line":305},[39,2789,542],{"class":53},[39,2791,2792,2794,2796,2799,2801],{"class":41,"line":310},[39,2793,2673],{"class":53},[39,2795,234],{"class":45},[39,2797,2798],{"class":237},"\"小于100\"",[39,2800,234],{"class":45},[39,2802,2324],{"class":53},[39,2804,2805],{"class":41,"line":321},[39,2806,115],{"class":53},[39,2808,2809,2812,2815,2818,2821,2823,2826,2828,2830,2833],{"class":41,"line":713},[39,2810,2811],{"class":45},"else",[39,2813,2814],{"class":45}," if",[39,2816,2817],{"class":53}," (nmu",[39,2819,2820],{"class":45},">=",[39,2822,278],{"class":74},[39,2824,2825],{"class":45},"&&",[39,2827,2779],{"class":53},[39,2829,2170],{"class":45},[39,2831,2832],{"class":74},"200",[39,2834,574],{"class":53},[39,2836,2837],{"class":41,"line":718},[39,2838,542],{"class":53},[39,2840,2841,2843,2845,2848,2850,2852],{"class":41,"line":723},[39,2842,2673],{"class":53},[39,2844,234],{"class":45},[39,2846,2847],{"class":237},"\"不小于100且小于200\"",[39,2849,234],{"class":45},[39,2851,2367],{"class":53},[39,2853,2854],{"class":128}," \u002F\u002F可以无限else if,python中是elif：\n",[39,2856,2857],{"class":41,"line":729},[39,2858,115],{"class":53},[39,2860,2861],{"class":41,"line":735},[39,2862,2739],{"class":45},[39,2864,2865],{"class":41,"line":741},[39,2866,542],{"class":53},[39,2868,2869,2871,2873,2876,2878],{"class":41,"line":747},[39,2870,2673],{"class":53},[39,2872,234],{"class":45},[39,2874,2875],{"class":237},"\"不小于200\"",[39,2877,234],{"class":45},[39,2879,2324],{"class":53},[39,2881,2882],{"class":41,"line":753},[39,2883,115],{"class":53},[39,2885,2886],{"class":41,"line":758},[39,2887,2888],{"class":128},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[328,2890,2891],{"start":92},[331,2892,2893],{},"三目运算符",[30,2895,2897],{"className":32,"code":2896,"language":34,"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",[26,2898,2899,2904,2909,2935,2957,2974,2979,3002,3017],{"__ignoreMap":35},[39,2900,2901],{"class":41,"line":42},[39,2902,2903],{"class":128},"\u002F\u002F创建三个变量a,b,c\n",[39,2905,2906],{"class":41,"line":92},[39,2907,2908],{"class":128},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[39,2910,2911,2913,2915,2917,2919,2922,2924,2926,2929,2931,2933],{"class":41,"line":112},[39,2912,46],{"class":45},[39,2914,60],{"class":53},[39,2916,1117],{"class":45},[39,2918,248],{"class":74},[39,2920,2921],{"class":53},",b",[39,2923,1117],{"class":45},[39,2925,423],{"class":74},[39,2927,2928],{"class":53},",c",[39,2930,1117],{"class":45},[39,2932,1457],{"class":74},[39,2934,318],{"class":53},[39,2936,2937,2939,2941,2944,2946,2948,2950,2952,2954],{"class":41,"line":118},[39,2938,1553],{"class":53},[39,2940,1117],{"class":45},[39,2942,2943],{"class":53},"(a",[39,2945,2220],{"class":45},[39,2947,1528],{"class":53},[39,2949,2246],{"class":45},[39,2951,922],{"class":53},[39,2953,2119],{"class":45},[39,2955,2956],{"class":53},"b)\n",[39,2958,2959,2961,2963,2966,2968,2970,2972],{"class":41,"line":125},[39,2960,2494],{"class":53},[39,2962,234],{"class":45},[39,2964,2965],{"class":237},"\"c=\"",[39,2967,234],{"class":45},[39,2969,1553],{"class":53},[39,2971,234],{"class":45},[39,2973,2324],{"class":53},[39,2975,2976],{"class":41,"line":132},[39,2977,2978],{"class":128},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[39,2980,2981,2983,2985,2987,2989,2991,2993,2996,2998,3000],{"class":41,"line":138},[39,2982,2943],{"class":53},[39,2984,2220],{"class":45},[39,2986,1528],{"class":53},[39,2988,2246],{"class":45},[39,2990,922],{"class":53},[39,2992,2119],{"class":45},[39,2994,2995],{"class":53},"b)",[39,2997,1117],{"class":45},[39,2999,278],{"class":74},[39,3001,318],{"class":53},[39,3003,3004,3006,3008,3010,3012,3014],{"class":41,"line":169},[39,3005,2494],{"class":53},[39,3007,234],{"class":45},[39,3009,922],{"class":53},[39,3011,234],{"class":45},[39,3013,2367],{"class":53},[39,3015,3016],{"class":128}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[39,3018,3019,3021,3023,3025,3027,3029],{"class":41,"line":190},[39,3020,2494],{"class":53},[39,3022,234],{"class":45},[39,3024,1528],{"class":53},[39,3026,234],{"class":45},[39,3028,2367],{"class":53},[39,3030,3031],{"class":128}," \u002F\u002F10   a>b,b还是原值\n",[328,3033,3034],{"start":112},[331,3035,3036],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[30,3038,3040],{"className":32,"code":3039,"language":34,"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",[26,3041,3042,3047,3055,3068,3076,3080,3093,3106,3116,3124,3129,3153,3174,3196,3217,3239,3260,3280,3285],{"__ignoreMap":35},[39,3043,3044],{"class":41,"line":42},[39,3045,3046],{"class":128},"\u002F\u002F案例-电影打分\n",[39,3048,3049,3052],{"class":41,"line":92},[39,3050,3051],{"class":45},"#include",[39,3053,3054],{"class":237},"\u003Ciostream>\n",[39,3056,3057,3060,3063,3066],{"class":41,"line":112},[39,3058,3059],{"class":45},"using",[39,3061,3062],{"class":45}," namespace",[39,3064,3065],{"class":49}," std",[39,3067,318],{"class":53},[39,3069,3070,3072,3074],{"class":41,"line":118},[39,3071,46],{"class":45},[39,3073,217],{"class":49},[39,3075,537],{"class":53},[39,3077,3078],{"class":41,"line":125},[39,3079,542],{"class":53},[39,3081,3082,3084,3087,3089,3091],{"class":41,"line":132},[39,3083,1112],{"class":45},[39,3085,3086],{"class":53}," score",[39,3088,1117],{"class":45},[39,3090,1457],{"class":74},[39,3092,318],{"class":53},[39,3094,3095,3097,3099,3102,3104],{"class":41,"line":138},[39,3096,2673],{"class":53},[39,3098,234],{"class":45},[39,3100,3101],{"class":237},"\"电影打分：\"",[39,3103,234],{"class":45},[39,3105,2324],{"class":53},[39,3107,3108,3111,3113],{"class":41,"line":169},[39,3109,3110],{"class":53},"    cin",[39,3112,2553],{"class":45},[39,3114,3115],{"class":53},"score;\n",[39,3117,3118,3121],{"class":41,"line":190},[39,3119,3120],{"class":45},"    switch",[39,3122,3123],{"class":53},"(score)\n",[39,3125,3126],{"class":41,"line":202},[39,3127,3128],{"class":53},"    {\n",[39,3130,3131,3134,3136,3139,3141,3144,3146,3148,3151],{"class":41,"line":207},[39,3132,3133],{"class":45},"        case",[39,3135,75],{"class":74},[39,3137,3138],{"class":53},":cout",[39,3140,234],{"class":45},[39,3142,3143],{"class":237},"\"经典\"",[39,3145,234],{"class":45},[39,3147,2367],{"class":53},[39,3149,3150],{"class":45},"break",[39,3152,318],{"class":53},[39,3154,3155,3157,3160,3162,3164,3166,3168,3170,3172],{"class":41,"line":212},[39,3156,3133],{"class":45},[39,3158,3159],{"class":74}," 9",[39,3161,3138],{"class":53},[39,3163,234],{"class":45},[39,3165,3143],{"class":237},[39,3167,234],{"class":45},[39,3169,2367],{"class":53},[39,3171,3150],{"class":45},[39,3173,318],{"class":53},[39,3175,3176,3178,3181,3183,3185,3188,3190,3192,3194],{"class":41,"line":223},[39,3177,3133],{"class":45},[39,3179,3180],{"class":74}," 8",[39,3182,3138],{"class":53},[39,3184,234],{"class":45},[39,3186,3187],{"class":237},"\"非常好\"",[39,3189,234],{"class":45},[39,3191,2367],{"class":53},[39,3193,3150],{"class":45},[39,3195,318],{"class":53},[39,3197,3198,3200,3203,3205,3207,3209,3211,3213,3215],{"class":41,"line":228},[39,3199,3133],{"class":45},[39,3201,3202],{"class":74}," 7",[39,3204,3138],{"class":53},[39,3206,234],{"class":45},[39,3208,3187],{"class":237},[39,3210,234],{"class":45},[39,3212,2367],{"class":53},[39,3214,3150],{"class":45},[39,3216,318],{"class":53},[39,3218,3219,3221,3224,3226,3228,3231,3233,3235,3237],{"class":41,"line":263},[39,3220,3133],{"class":45},[39,3222,3223],{"class":74}," 6",[39,3225,3138],{"class":53},[39,3227,234],{"class":45},[39,3229,3230],{"class":237},"\"一般\"",[39,3232,234],{"class":45},[39,3234,2367],{"class":53},[39,3236,3150],{"class":45},[39,3238,318],{"class":53},[39,3240,3241,3243,3246,3248,3250,3252,3254,3256,3258],{"class":41,"line":287},[39,3242,3133],{"class":45},[39,3244,3245],{"class":74}," 5",[39,3247,3138],{"class":53},[39,3249,234],{"class":45},[39,3251,3230],{"class":237},[39,3253,234],{"class":45},[39,3255,2367],{"class":53},[39,3257,3150],{"class":45},[39,3259,318],{"class":53},[39,3261,3262,3265,3267,3269,3272,3274,3276,3278],{"class":41,"line":292},[39,3263,3264],{"class":45},"        default",[39,3266,3138],{"class":53},[39,3268,234],{"class":45},[39,3270,3271],{"class":237},"\"烂片\"",[39,3273,234],{"class":45},[39,3275,2367],{"class":53},[39,3277,3150],{"class":45},[39,3279,318],{"class":53},[39,3281,3282],{"class":41,"line":305},[39,3283,3284],{"class":53},"    }\n",[39,3286,3287],{"class":41,"line":310},[39,3288,115],{"class":53},[19,3290,3291],{},"if和switch区别：",[489,3293,3294,3297],{},[331,3295,3296],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[331,3298,3299],{},"switch优点：结构清晰，执行效率高",[476,3301,3303],{"id":3302},"_162循环结构","1.6.2循环结构",[328,3305,3306],{},[331,3307,3308],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[30,3310,3312],{"className":32,"code":3311,"language":34,"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",[26,3313,3314,3319,3327,3331,3344,3358,3362,3382,3392,3396,3406],{"__ignoreMap":35},[39,3315,3316],{"class":41,"line":42},[39,3317,3318],{"class":128},"\u002F\u002F打印0-9数字\n",[39,3320,3321,3323,3325],{"class":41,"line":92},[39,3322,46],{"class":45},[39,3324,217],{"class":49},[39,3326,537],{"class":53},[39,3328,3329],{"class":41,"line":112},[39,3330,542],{"class":53},[39,3332,3333,3335,3338,3340,3342],{"class":41,"line":118},[39,3334,1112],{"class":45},[39,3336,3337],{"class":53}," num",[39,3339,1117],{"class":45},[39,3341,1457],{"class":74},[39,3343,318],{"class":53},[39,3345,3346,3349,3352,3354,3356],{"class":41,"line":125},[39,3347,3348],{"class":45},"    while",[39,3350,3351],{"class":53},"(num",[39,3353,2170],{"class":45},[39,3355,423],{"class":74},[39,3357,574],{"class":53},[39,3359,3360],{"class":41,"line":132},[39,3361,3128],{"class":53},[39,3363,3364,3367,3370,3372,3374,3376,3379],{"class":41,"line":138},[39,3365,3366],{"class":49},"       std",[39,3368,3369],{"class":53},"::cout",[39,3371,234],{"class":45},[39,3373,2779],{"class":53},[39,3375,234],{"class":45},[39,3377,3378],{"class":49},"std",[39,3380,3381],{"class":53},"::endl;\n",[39,3383,3384,3387,3390],{"class":41,"line":169},[39,3385,3386],{"class":53},"        num",[39,3388,3389],{"class":45},"++",[39,3391,318],{"class":53},[39,3393,3394],{"class":41,"line":190},[39,3395,3284],{"class":53},[39,3397,3398,3400,3402,3404],{"class":41,"line":202},[39,3399,295],{"class":49},[39,3401,54],{"class":53},[39,3403,300],{"class":237},[39,3405,574],{"class":53},[39,3407,3408],{"class":41,"line":207},[39,3409,115],{"class":53},[19,3411,3412],{},"注意：写好循环条件，避免死循环情况",[30,3414,3416],{"className":32,"code":3415,"language":34,"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",[26,3417,3418,3423,3430,3437,3447,3455,3459,3464,3490,3494,3499,3507,3534,3539,3544,3557,3567,3571,3581,3586,3599,3604,3618,3623,3638,3642,3655,3659,3664,3668,3681,3688,3692,3697,3702,3706],{"__ignoreMap":35},[39,3419,3420],{"class":41,"line":42},[39,3421,3422],{"class":128},"\u002F\u002F循环结构-猜数字\n",[39,3424,3425,3427],{"class":41,"line":92},[39,3426,3051],{"class":45},[39,3428,3429],{"class":237}," \u003Ciostream>\n",[39,3431,3432,3434],{"class":41,"line":112},[39,3433,3051],{"class":45},[39,3435,3436],{"class":237}," \u003Cctime>\n",[39,3438,3439,3441,3443,3445],{"class":41,"line":118},[39,3440,3059],{"class":45},[39,3442,3062],{"class":45},[39,3444,3065],{"class":49},[39,3446,318],{"class":53},[39,3448,3449,3451,3453],{"class":41,"line":125},[39,3450,46],{"class":45},[39,3452,217],{"class":49},[39,3454,537],{"class":53},[39,3456,3457],{"class":41,"line":132},[39,3458,542],{"class":53},[39,3460,3461],{"class":41,"line":138},[39,3462,3463],{"class":128},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[39,3465,3466,3469,3472,3475,3477,3479,3482,3484,3487],{"class":41,"line":169},[39,3467,3468],{"class":49},"    srand",[39,3470,3471],{"class":53},"((",[39,3473,3474],{"class":45},"unsigned",[39,3476,963],{"class":45},[39,3478,1692],{"class":53},[39,3480,3481],{"class":49},"time",[39,3483,54],{"class":53},[39,3485,3486],{"class":74},"NULL",[39,3488,3489],{"class":53},"));\n",[39,3491,3492],{"class":41,"line":190},[39,3493,122],{"emptyLinePlaceholder":121},[39,3495,3496],{"class":41,"line":202},[39,3497,3498],{"class":128},"    \u002F\u002F1.系统生成随机数\n",[39,3500,3501,3504],{"class":41,"line":207},[39,3502,3503],{"class":128},"    \u002F\u002Frand()%100",[39,3505,3506],{"class":128}," \u002F\u002F生成0-99的随机数\n",[39,3508,3509,3511,3513,3515,3518,3521,3523,3525,3527,3529,3531],{"class":41,"line":212},[39,3510,1112],{"class":45},[39,3512,3337],{"class":53},[39,3514,1117],{"class":45},[39,3516,3517],{"class":49},"rand",[39,3519,3520],{"class":53},"()",[39,3522,1592],{"class":45},[39,3524,278],{"class":74},[39,3526,101],{"class":45},[39,3528,1483],{"class":74},[39,3530,1324],{"class":53},[39,3532,3533],{"class":128}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[39,3535,3536],{"class":41,"line":223},[39,3537,3538],{"class":128},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[39,3540,3541],{"class":41,"line":228},[39,3542,3543],{"class":128},"    \u002F\u002F2.玩家猜测\n",[39,3545,3546,3548,3551,3553,3555],{"class":41,"line":263},[39,3547,1112],{"class":45},[39,3549,3550],{"class":53}," val",[39,3552,1117],{"class":45},[39,3554,1457],{"class":74},[39,3556,318],{"class":53},[39,3558,3559,3561,3563,3565],{"class":41,"line":287},[39,3560,3348],{"class":45},[39,3562,2772],{"class":53},[39,3564,1483],{"class":74},[39,3566,574],{"class":53},[39,3568,3569],{"class":41,"line":292},[39,3570,3128],{"class":53},[39,3572,3573,3576,3578],{"class":41,"line":305},[39,3574,3575],{"class":53},"        cin",[39,3577,2553],{"class":45},[39,3579,3580],{"class":53},"val;\n",[39,3582,3583],{"class":41,"line":310},[39,3584,3585],{"class":128},"        \u002F\u002F3.判断玩家猜测\n",[39,3587,3588,3591,3594,3596],{"class":41,"line":321},[39,3589,3590],{"class":45},"        if",[39,3592,3593],{"class":53},"(val",[39,3595,2170],{"class":45},[39,3597,3598],{"class":53},"num) \n",[39,3600,3601],{"class":41,"line":713},[39,3602,3603],{"class":53},"        {\n",[39,3605,3606,3609,3611,3614,3616],{"class":41,"line":718},[39,3607,3608],{"class":53},"            cout",[39,3610,234],{"class":45},[39,3612,3613],{"class":237},"\"猜小了！\"",[39,3615,234],{"class":45},[39,3617,2324],{"class":53},[39,3619,3620],{"class":41,"line":723},[39,3621,3622],{"class":53},"        }\n",[39,3624,3625,3628,3630,3633,3635],{"class":41,"line":729},[39,3626,3627],{"class":45},"        else",[39,3629,2814],{"class":45},[39,3631,3632],{"class":53}," (val",[39,3634,2220],{"class":45},[39,3636,3637],{"class":53},"num)\n",[39,3639,3640],{"class":41,"line":735},[39,3641,3603],{"class":53},[39,3643,3644,3646,3648,3651,3653],{"class":41,"line":741},[39,3645,3608],{"class":53},[39,3647,234],{"class":45},[39,3649,3650],{"class":237},"\"猜大了！\"",[39,3652,234],{"class":45},[39,3654,2324],{"class":53},[39,3656,3657],{"class":41,"line":747},[39,3658,3622],{"class":53},[39,3660,3661],{"class":41,"line":753},[39,3662,3663],{"class":45},"        else\n",[39,3665,3666],{"class":41,"line":758},[39,3667,3603],{"class":53},[39,3669,3670,3672,3674,3677,3679],{"class":41,"line":763},[39,3671,3608],{"class":53},[39,3673,234],{"class":45},[39,3675,3676],{"class":237},"\"猜对了！\"",[39,3678,234],{"class":45},[39,3680,2324],{"class":53},[39,3682,3683,3686],{"class":41,"line":772},[39,3684,3685],{"class":45},"            break",[39,3687,318],{"class":53},[39,3689,3690],{"class":41,"line":777},[39,3691,3622],{"class":53},[39,3693,3694],{"class":41,"line":785},[39,3695,3696],{"class":128},"        \u002F\u002F猜对 退出游戏\n",[39,3698,3699],{"class":41,"line":796},[39,3700,3701],{"class":128},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[39,3703,3704],{"class":41,"line":808},[39,3705,3284],{"class":53},[39,3707,3708],{"class":41,"line":823},[39,3709,115],{"class":53},[328,3711,3712],{"start":92},[331,3713,3714,3715,3718],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[350,3716,3717],{},"do...while会先执行一次循环语句","，在判断循环语句",[30,3720,3722],{"className":32,"code":3721,"language":34,"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",[26,3723,3724,3729,3737,3741,3753,3761,3765,3782,3789,3793,3805,3815],{"__ignoreMap":35},[39,3725,3726],{"class":41,"line":42},[39,3727,3728],{"class":128},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[39,3730,3731,3733,3735],{"class":41,"line":92},[39,3732,46],{"class":45},[39,3734,217],{"class":49},[39,3736,537],{"class":53},[39,3738,3739],{"class":41,"line":112},[39,3740,542],{"class":53},[39,3742,3743,3745,3747,3749,3751],{"class":41,"line":118},[39,3744,1112],{"class":45},[39,3746,3337],{"class":53},[39,3748,1117],{"class":45},[39,3750,1457],{"class":74},[39,3752,318],{"class":53},[39,3754,3755,3758],{"class":41,"line":125},[39,3756,3757],{"class":45},"    do",[39,3759,3760],{"class":53}," \n",[39,3762,3763],{"class":41,"line":132},[39,3764,3128],{"class":53},[39,3766,3767,3770,3772,3774,3776,3778,3780],{"class":41,"line":138},[39,3768,3769],{"class":49},"        std",[39,3771,3369],{"class":53},[39,3773,234],{"class":45},[39,3775,2779],{"class":53},[39,3777,234],{"class":45},[39,3779,3378],{"class":49},[39,3781,3381],{"class":53},[39,3783,3784,3786],{"class":41,"line":169},[39,3785,3386],{"class":53},[39,3787,3788],{"class":45},"++\n",[39,3790,3791],{"class":41,"line":190},[39,3792,3284],{"class":53},[39,3794,3795,3797,3799,3801,3803],{"class":41,"line":202},[39,3796,3348],{"class":45},[39,3798,3351],{"class":53},[39,3800,2170],{"class":45},[39,3802,423],{"class":74},[39,3804,166],{"class":53},[39,3806,3807,3809,3811,3813],{"class":41,"line":207},[39,3808,295],{"class":49},[39,3810,54],{"class":53},[39,3812,300],{"class":237},[39,3814,166],{"class":53},[39,3816,3817],{"class":41,"line":212},[39,3818,115],{"class":53},[19,3820,3821],{},"案例-水仙花数",[19,3823,3824],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3826,3827],{},"例如：1^3+5^3+3^3=153",[19,3829,3830],{},"请用do...while语句，求出所有3位数的水仙花数",[30,3832,3834],{"className":32,"code":3833,"language":34,"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",[26,3835,3836,3842,3852,3860,3864,3869,3881,3887,3891,3896,3912,3927,3942,3957,3976,3991,4039,4043,4055,4059,4067,4071,4085],{"__ignoreMap":35},[39,3837,3838,3840],{"class":41,"line":42},[39,3839,3051],{"class":45},[39,3841,3429],{"class":237},[39,3843,3844,3846,3848,3850],{"class":41,"line":92},[39,3845,3059],{"class":45},[39,3847,3062],{"class":45},[39,3849,3065],{"class":49},[39,3851,318],{"class":53},[39,3853,3854,3856,3858],{"class":41,"line":112},[39,3855,46],{"class":45},[39,3857,217],{"class":49},[39,3859,537],{"class":53},[39,3861,3862],{"class":41,"line":118},[39,3863,542],{"class":53},[39,3865,3866],{"class":41,"line":125},[39,3867,3868],{"class":128},"    \u002F\u002F1.先打印所有三位数字\n",[39,3870,3871,3873,3875,3877,3879],{"class":41,"line":132},[39,3872,1112],{"class":45},[39,3874,3337],{"class":53},[39,3876,1117],{"class":45},[39,3878,278],{"class":74},[39,3880,318],{"class":53},[39,3882,3883,3885],{"class":41,"line":138},[39,3884,3757],{"class":45},[39,3886,3760],{"class":53},[39,3888,3889],{"class":41,"line":169},[39,3890,3128],{"class":53},[39,3892,3893],{"class":41,"line":190},[39,3894,3895],{"class":128},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[39,3897,3898,3901,3903,3905,3907,3909],{"class":41,"line":202},[39,3899,3900],{"class":45},"        int",[39,3902,60],{"class":53},[39,3904,1117],{"class":45},[39,3906,1457],{"class":74},[39,3908,1324],{"class":53},[39,3910,3911],{"class":128}," \u002F\u002F个位\n",[39,3913,3914,3916,3918,3920,3922,3924],{"class":41,"line":207},[39,3915,3900],{"class":45},[39,3917,68],{"class":53},[39,3919,1117],{"class":45},[39,3921,1457],{"class":74},[39,3923,1324],{"class":53},[39,3925,3926],{"class":128}," \u002F\u002F十位\n",[39,3928,3929,3931,3933,3935,3937,3939],{"class":41,"line":212},[39,3930,3900],{"class":45},[39,3932,82],{"class":53},[39,3934,1117],{"class":45},[39,3936,1457],{"class":74},[39,3938,1324],{"class":53},[39,3940,3941],{"class":128}," \u002F\u002F百位\n",[39,3943,3944,3947,3949,3951,3953,3955],{"class":41,"line":223},[39,3945,3946],{"class":53},"        a",[39,3948,1117],{"class":45},[39,3950,2779],{"class":53},[39,3952,1592],{"class":45},[39,3954,423],{"class":74},[39,3956,318],{"class":53},[39,3958,3959,3962,3964,3966,3968,3970,3972,3974],{"class":41,"line":228},[39,3960,3961],{"class":53},"        b",[39,3963,1117],{"class":45},[39,3965,2779],{"class":53},[39,3967,1845],{"class":45},[39,3969,423],{"class":74},[39,3971,1592],{"class":45},[39,3973,423],{"class":74},[39,3975,318],{"class":53},[39,3977,3978,3981,3983,3985,3987,3989],{"class":41,"line":263},[39,3979,3980],{"class":53},"        c",[39,3982,1117],{"class":45},[39,3984,2779],{"class":53},[39,3986,1845],{"class":45},[39,3988,278],{"class":74},[39,3990,318],{"class":53},[39,3992,3993,3995,3997,3999,4001,4003,4005,4007,4009,4011,4013,4015,4017,4019,4021,4023,4025,4027,4030,4033,4036],{"class":41,"line":287},[39,3994,3590],{"class":45},[39,3996,2943],{"class":53},[39,3998,1717],{"class":45},[39,4000,922],{"class":53},[39,4002,1717],{"class":45},[39,4004,922],{"class":53},[39,4006,101],{"class":45},[39,4008,1528],{"class":53},[39,4010,1717],{"class":45},[39,4012,1528],{"class":53},[39,4014,1717],{"class":45},[39,4016,1528],{"class":53},[39,4018,101],{"class":45},[39,4020,1553],{"class":53},[39,4022,1717],{"class":45},[39,4024,1553],{"class":53},[39,4026,1717],{"class":45},[39,4028,4029],{"class":53},"c ",[39,4031,4032],{"class":45},"==",[39,4034,4035],{"class":53}," num)",[39,4037,4038],{"class":128}," \u002F\u002F如果是水仙花数，才打印\n",[39,4040,4041],{"class":41,"line":292},[39,4042,3603],{"class":53},[39,4044,4045,4047,4049,4051,4053],{"class":41,"line":305},[39,4046,3608],{"class":53},[39,4048,234],{"class":45},[39,4050,2779],{"class":53},[39,4052,234],{"class":45},[39,4054,2324],{"class":53},[39,4056,4057],{"class":41,"line":310},[39,4058,3622],{"class":53},[39,4060,4061,4063,4065],{"class":41,"line":321},[39,4062,3386],{"class":53},[39,4064,3389],{"class":45},[39,4066,318],{"class":53},[39,4068,4069],{"class":41,"line":713},[39,4070,3284],{"class":53},[39,4072,4073,4075,4078,4080,4083],{"class":41,"line":718},[39,4074,3348],{"class":45},[39,4076,4077],{"class":53}," (num ",[39,4079,2170],{"class":45},[39,4081,4082],{"class":74}," 1000",[39,4084,166],{"class":53},[39,4086,4087],{"class":41,"line":723},[39,4088,115],{"class":53},[328,4090,4091],{"start":112},[331,4092,4093],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[30,4095,4097],{"className":32,"code":4096,"language":34,"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",[26,4098,4099,4104,4133,4137,4149,4153,4158,4169,4176,4180,4194,4198,4205,4209,4221,4230],{"__ignoreMap":35},[39,4100,4101],{"class":41,"line":42},[39,4102,4103],{"class":128},"\u002F\u002F从数字0-9打印\n",[39,4105,4106,4109,4111,4113,4116,4118,4120,4123,4125,4127,4129,4131],{"class":41,"line":92},[39,4107,4108],{"class":45},"for",[39,4110,54],{"class":53},[39,4112,46],{"class":45},[39,4114,4115],{"class":53}," i",[39,4117,1117],{"class":45},[39,4119,1457],{"class":74},[39,4121,4122],{"class":53},";i",[39,4124,2170],{"class":45},[39,4126,423],{"class":74},[39,4128,4122],{"class":53},[39,4130,3389],{"class":45},[39,4132,574],{"class":53},[39,4134,4135],{"class":41,"line":112},[39,4136,542],{"class":53},[39,4138,4139,4141,4143,4145,4147],{"class":41,"line":118},[39,4140,2673],{"class":53},[39,4142,234],{"class":45},[39,4144,1704],{"class":53},[39,4146,234],{"class":45},[39,4148,2324],{"class":53},[39,4150,4151],{"class":41,"line":125},[39,4152,115],{"class":53},[39,4154,4155],{"class":41,"line":132},[39,4156,4157],{"class":128},"\u002F\u002F上式可以进行拆分\n",[39,4159,4160,4162,4164,4166],{"class":41,"line":138},[39,4161,46],{"class":45},[39,4163,4115],{"class":53},[39,4165,1117],{"class":45},[39,4167,4168],{"class":74},"0\n",[39,4170,4171,4173],{"class":41,"line":169},[39,4172,4108],{"class":45},[39,4174,4175],{"class":53},"(;;;)\n",[39,4177,4178],{"class":41,"line":190},[39,4179,542],{"class":53},[39,4181,4182,4185,4188,4190,4192],{"class":41,"line":202},[39,4183,4184],{"class":45},"    if",[39,4186,4187],{"class":53},"(i",[39,4189,2820],{"class":45},[39,4191,423],{"class":74},[39,4193,574],{"class":53},[39,4195,4196],{"class":41,"line":207},[39,4197,3128],{"class":53},[39,4199,4200,4203],{"class":41,"line":212},[39,4201,4202],{"class":45},"        break",[39,4204,318],{"class":53},[39,4206,4207],{"class":41,"line":223},[39,4208,3284],{"class":53},[39,4210,4211,4213,4215,4217,4219],{"class":41,"line":228},[39,4212,2673],{"class":53},[39,4214,234],{"class":45},[39,4216,1704],{"class":53},[39,4218,234],{"class":45},[39,4220,2324],{"class":53},[39,4222,4223,4226,4228],{"class":41,"line":263},[39,4224,4225],{"class":53},"    i",[39,4227,3389],{"class":45},[39,4229,318],{"class":53},[39,4231,4232],{"class":41,"line":287},[39,4233,115],{"class":53},[19,4235,4236],{},"小练习",[30,4238,4240],{"className":32,"code":4239,"language":34,"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",[26,4241,4242,4248,4258,4266,4270,4275,4280,4308,4312,4317,4322,4363,4367,4380,4384,4388,4392,4404,4408,4412],{"__ignoreMap":35},[39,4243,4244,4246],{"class":41,"line":42},[39,4245,3051],{"class":45},[39,4247,3054],{"class":237},[39,4249,4250,4252,4254,4256],{"class":41,"line":92},[39,4251,3059],{"class":45},[39,4253,3062],{"class":45},[39,4255,3065],{"class":49},[39,4257,318],{"class":53},[39,4259,4260,4262,4264],{"class":41,"line":112},[39,4261,46],{"class":45},[39,4263,217],{"class":49},[39,4265,537],{"class":53},[39,4267,4268],{"class":41,"line":118},[39,4269,542],{"class":53},[39,4271,4272],{"class":41,"line":125},[39,4273,4274],{"class":128},"    \u002F\u002F敲桌子案例\n",[39,4276,4277],{"class":41,"line":132},[39,4278,4279],{"class":128},"    \u002F\u002F1.先输出1-100的数字\n",[39,4281,4282,4285,4287,4289,4291,4293,4295,4298,4300,4302,4304,4306],{"class":41,"line":138},[39,4283,4284],{"class":45},"    for",[39,4286,54],{"class":53},[39,4288,46],{"class":45},[39,4290,4115],{"class":53},[39,4292,1117],{"class":45},[39,4294,1483],{"class":74},[39,4296,4297],{"class":53},"; i",[39,4299,2709],{"class":45},[39,4301,278],{"class":74},[39,4303,4297],{"class":53},[39,4305,3389],{"class":45},[39,4307,574],{"class":53},[39,4309,4310],{"class":41,"line":169},[39,4311,3128],{"class":53},[39,4313,4314],{"class":41,"line":190},[39,4315,4316],{"class":128},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[39,4318,4319],{"class":41,"line":202},[39,4320,4321],{"class":128},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[39,4323,4324,4326,4328,4330,4332,4334,4336,4339,4341,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361],{"class":41,"line":207},[39,4325,3590],{"class":45},[39,4327,4187],{"class":53},[39,4329,1592],{"class":45},[39,4331,1633],{"class":74},[39,4333,4032],{"class":45},[39,4335,1457],{"class":74},[39,4337,4338],{"class":45}," ||",[39,4340,4115],{"class":53},[39,4342,1592],{"class":45},[39,4344,423],{"class":74},[39,4346,4032],{"class":45},[39,4348,1633],{"class":74},[39,4350,4338],{"class":45},[39,4352,4115],{"class":53},[39,4354,1845],{"class":45},[39,4356,423],{"class":74},[39,4358,4032],{"class":45},[39,4360,1633],{"class":74},[39,4362,574],{"class":53},[39,4364,4365],{"class":41,"line":212},[39,4366,3603],{"class":53},[39,4368,4369,4371,4373,4376,4378],{"class":41,"line":223},[39,4370,3608],{"class":53},[39,4372,234],{"class":45},[39,4374,4375],{"class":237},"\"敲桌子\"",[39,4377,234],{"class":45},[39,4379,2324],{"class":53},[39,4381,4382],{"class":41,"line":228},[39,4383,3622],{"class":53},[39,4385,4386],{"class":41,"line":263},[39,4387,3663],{"class":45},[39,4389,4390],{"class":41,"line":287},[39,4391,3603],{"class":53},[39,4393,4394,4396,4398,4400,4402],{"class":41,"line":292},[39,4395,3608],{"class":53},[39,4397,234],{"class":45},[39,4399,1704],{"class":53},[39,4401,234],{"class":45},[39,4403,2324],{"class":53},[39,4405,4406],{"class":41,"line":305},[39,4407,3622],{"class":53},[39,4409,4410],{"class":41,"line":310},[39,4411,3284],{"class":53},[39,4413,4414],{"class":41,"line":321},[39,4415,115],{"class":53},[19,4417,4418],{},"嵌套实现星图",[30,4420,4422],{"className":32,"code":4421,"language":34,"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",[26,4423,4424,4430,4440,4448,4452,4478,4482,4511,4515,4526,4530,4539,4543],{"__ignoreMap":35},[39,4425,4426,4428],{"class":41,"line":42},[39,4427,3051],{"class":45},[39,4429,3054],{"class":237},[39,4431,4432,4434,4436,4438],{"class":41,"line":92},[39,4433,3059],{"class":45},[39,4435,3062],{"class":45},[39,4437,3065],{"class":49},[39,4439,318],{"class":53},[39,4441,4442,4444,4446],{"class":41,"line":112},[39,4443,46],{"class":45},[39,4445,217],{"class":49},[39,4447,537],{"class":53},[39,4449,4450],{"class":41,"line":118},[39,4451,542],{"class":53},[39,4453,4454,4456,4458,4460,4462,4464,4466,4468,4470,4472,4474,4476],{"class":41,"line":125},[39,4455,4284],{"class":45},[39,4457,2772],{"class":53},[39,4459,46],{"class":45},[39,4461,4115],{"class":53},[39,4463,1117],{"class":45},[39,4465,1457],{"class":74},[39,4467,4122],{"class":53},[39,4469,2170],{"class":45},[39,4471,423],{"class":74},[39,4473,4122],{"class":53},[39,4475,3389],{"class":45},[39,4477,574],{"class":53},[39,4479,4480],{"class":41,"line":132},[39,4481,3128],{"class":53},[39,4483,4484,4487,4489,4491,4494,4496,4498,4501,4503,4505,4507,4509],{"class":41,"line":138},[39,4485,4486],{"class":45},"        for",[39,4488,2772],{"class":53},[39,4490,46],{"class":45},[39,4492,4493],{"class":53}," j",[39,4495,1117],{"class":45},[39,4497,1457],{"class":74},[39,4499,4500],{"class":53},";j",[39,4502,2170],{"class":45},[39,4504,423],{"class":74},[39,4506,4500],{"class":53},[39,4508,3389],{"class":45},[39,4510,574],{"class":53},[39,4512,4513],{"class":41,"line":169},[39,4514,3603],{"class":53},[39,4516,4517,4519,4521,4524],{"class":41,"line":190},[39,4518,3608],{"class":53},[39,4520,234],{"class":45},[39,4522,4523],{"class":237},"\"*\"",[39,4525,318],{"class":53},[39,4527,4528],{"class":41,"line":202},[39,4529,3622],{"class":53},[39,4531,4532,4535,4537],{"class":41,"line":207},[39,4533,4534],{"class":53},"        cout",[39,4536,234],{"class":45},[39,4538,2324],{"class":53},[39,4540,4541],{"class":41,"line":212},[39,4542,3284],{"class":53},[39,4544,4545],{"class":41,"line":223},[39,4546,115],{"class":53},[19,4548,4549],{},"乘法口诀表",[30,4551,4553],{"className":32,"code":4552,"language":34,"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",[26,4554,4555,4561,4571,4579,4583,4609,4613,4638,4642,4682,4686,4694,4698],{"__ignoreMap":35},[39,4556,4557,4559],{"class":41,"line":42},[39,4558,3051],{"class":45},[39,4560,3429],{"class":237},[39,4562,4563,4565,4567,4569],{"class":41,"line":92},[39,4564,3059],{"class":45},[39,4566,3062],{"class":45},[39,4568,3065],{"class":49},[39,4570,318],{"class":53},[39,4572,4573,4575,4577],{"class":41,"line":112},[39,4574,46],{"class":45},[39,4576,217],{"class":49},[39,4578,537],{"class":53},[39,4580,4581],{"class":41,"line":118},[39,4582,542],{"class":53},[39,4584,4585,4587,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607],{"class":41,"line":125},[39,4586,4284],{"class":45},[39,4588,54],{"class":53},[39,4590,46],{"class":45},[39,4592,4115],{"class":53},[39,4594,1117],{"class":45},[39,4596,1483],{"class":74},[39,4598,4122],{"class":53},[39,4600,2170],{"class":45},[39,4602,423],{"class":74},[39,4604,4122],{"class":53},[39,4606,3389],{"class":45},[39,4608,574],{"class":53},[39,4610,4611],{"class":41,"line":132},[39,4612,3128],{"class":53},[39,4614,4615,4617,4619,4621,4623,4625,4627,4629,4631,4634,4636],{"class":41,"line":138},[39,4616,4486],{"class":45},[39,4618,54],{"class":53},[39,4620,46],{"class":45},[39,4622,4493],{"class":53},[39,4624,1117],{"class":45},[39,4626,1483],{"class":74},[39,4628,4500],{"class":53},[39,4630,2709],{"class":45},[39,4632,4633],{"class":53},"i;j",[39,4635,3389],{"class":45},[39,4637,574],{"class":53},[39,4639,4640],{"class":41,"line":169},[39,4641,3603],{"class":53},[39,4643,4644,4646,4648,4650,4652,4654,4656,4658,4660,4663,4665,4667,4669,4671,4673,4676,4678,4680],{"class":41,"line":190},[39,4645,3608],{"class":53},[39,4647,234],{"class":45},[39,4649,1729],{"class":53},[39,4651,234],{"class":45},[39,4653,4523],{"class":237},[39,4655,234],{"class":45},[39,4657,1704],{"class":53},[39,4659,234],{"class":45},[39,4661,4662],{"class":237},"\"=\"",[39,4664,234],{"class":45},[39,4666,1704],{"class":53},[39,4668,1717],{"class":45},[39,4670,1729],{"class":53},[39,4672,234],{"class":45},[39,4674,4675],{"class":237},"'",[39,4677,2359],{"class":74},[39,4679,4675],{"class":237},[39,4681,318],{"class":53},[39,4683,4684],{"class":41,"line":202},[39,4685,3622],{"class":53},[39,4687,4688,4690,4692],{"class":41,"line":207},[39,4689,4534],{"class":53},[39,4691,234],{"class":45},[39,4693,2324],{"class":53},[39,4695,4696],{"class":41,"line":212},[39,4697,3284],{"class":53},[39,4699,4700],{"class":41,"line":223},[39,4701,115],{"class":53},[476,4703,4705],{"id":4704},"_163跳出语句","1.6.3跳出语句",[328,4707,4708],{},[331,4709,4710],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,4712,4713],{},"break使用时机：",[489,4715,4716,4719,4722],{},[331,4717,4718],{},"出现在switch条件语句中，作用是终止case并跳出switch",[331,4720,4721],{},"出现在循环结构中，作用是跳出当前的循环结构",[331,4723,4724],{},"出现在嵌套循环中，跳出最近的内层循环语句",[328,4726,4727,4730],{"start":92},[331,4728,4729],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[331,4731,4732],{},"goto语句\n语法：goto 标记;",[19,4734,4735],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[30,4737,4739],{"className":32,"code":4738,"language":34,"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",[26,4740,4741,4749,4753,4766,4776,4789,4802,4815,4823,4839],{"__ignoreMap":35},[39,4742,4743,4745,4747],{"class":41,"line":42},[39,4744,46],{"class":45},[39,4746,217],{"class":49},[39,4748,537],{"class":53},[39,4750,4751],{"class":41,"line":92},[39,4752,542],{"class":53},[39,4754,4755,4757,4759,4762,4764],{"class":41,"line":112},[39,4756,2673],{"class":53},[39,4758,234],{"class":45},[39,4760,4761],{"class":237},"\"1\"",[39,4763,234],{"class":45},[39,4765,2324],{"class":53},[39,4767,4768,4771,4774],{"class":41,"line":118},[39,4769,4770],{"class":45},"    goto",[39,4772,4773],{"class":49}," FLAG",[39,4775,318],{"class":53},[39,4777,4778,4780,4782,4785,4787],{"class":41,"line":125},[39,4779,2673],{"class":53},[39,4781,234],{"class":45},[39,4783,4784],{"class":237},"\"2\"",[39,4786,234],{"class":45},[39,4788,2324],{"class":53},[39,4790,4791,4793,4795,4798,4800],{"class":41,"line":132},[39,4792,2673],{"class":53},[39,4794,234],{"class":45},[39,4796,4797],{"class":237},"\"3\"",[39,4799,234],{"class":45},[39,4801,2324],{"class":53},[39,4803,4804,4806,4808,4811,4813],{"class":41,"line":138},[39,4805,2673],{"class":53},[39,4807,234],{"class":45},[39,4809,4810],{"class":237},"\"4\"",[39,4812,234],{"class":45},[39,4814,2324],{"class":53},[39,4816,4817,4820],{"class":41,"line":169},[39,4818,4819],{"class":49},"    FLAG",[39,4821,4822],{"class":53},":\n",[39,4824,4825,4827,4829,4832,4834,4836],{"class":41,"line":190},[39,4826,2673],{"class":53},[39,4828,234],{"class":45},[39,4830,4831],{"class":237},"\"5\"",[39,4833,234],{"class":45},[39,4835,2367],{"class":53},[39,4837,4838],{"class":128},"\u002F\u002F跳过了2,3,4,直接到5\n",[39,4840,4841],{"class":41,"line":202},[39,4842,115],{"class":53},[14,4844,4846],{"id":4845},"_17数组","1.7数组",[476,4848,4850],{"id":4849},"_171一维数组","1.7.1一维数组",[328,4852,4853],{},[331,4854,4855],{},"一维数组定义方式",[1404,4857,4858,4868],{},[1407,4859,4860],{},[1410,4861,4862,4865],{},[1413,4863,4864],{},"方式",[1413,4866,4867],{},"注意事项",[1450,4869,4870,4884,4894],{},[1410,4871,4872,4878],{},[1455,4873,4874,4875,1324],{},"数据类型 数组名",[39,4876,4877],{},"数组长度",[1455,4879,4880,4881,4883],{},"这种方式是先定义再arr",[39,4882,1704],{},"赋值",[1410,4885,4886,4891],{},[1455,4887,4874,4888,4890],{},[39,4889,4877],{},"={值1,值2....};",[1455,4892,4893],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1410,4895,4896,4900],{},[1455,4897,4874,4898,4890],{},[39,4899],{},[1455,4901,4902,4903,4905],{},"int arr",[39,4904],{},";这是不正确的，按照这样的方式定义必须有初始长度",[328,4907,4908],{"start":92},[331,4909,4910],{},"一维数组数组名\n用途：",[489,4912,4913],{},[331,4914,4915],{},"1.可以统计整个数组在内存中的长度：",[30,4917,4919],{"className":32,"code":4918,"language":34,"meta":35,"style":35},"sizeof(arr);\nsizeof(arr[0]);\n",[26,4920,4921,4928],{"__ignoreMap":35},[39,4922,4923,4925],{"class":41,"line":42},[39,4924,1272],{"class":45},[39,4926,4927],{"class":53},"(arr);\n",[39,4929,4930,4932,4935,4937],{"class":41,"line":92},[39,4931,1272],{"class":45},[39,4933,4934],{"class":53},"(arr[",[39,4936,1457],{"class":74},[39,4938,4939],{"class":53},"]);\n",[489,4941,4942],{},[331,4943,4944],{},"2.可以获取数组在内存中的首地址:",[30,4946,4948],{"className":32,"code":4947,"language":34,"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",[26,4949,4950,4955,4968,4973],{"__ignoreMap":35},[39,4951,4952],{"class":41,"line":42},[39,4953,4954],{"class":128},"\u002F\u002F查看16进制的首地址\n",[39,4956,4957,4959,4961,4964,4966],{"class":41,"line":92},[39,4958,2494],{"class":53},[39,4960,234],{"class":45},[39,4962,4963],{"class":53},"arr",[39,4965,234],{"class":45},[39,4967,2324],{"class":53},[39,4969,4970],{"class":41,"line":112},[39,4971,4972],{"class":128},"\u002F\u002F看10进制数\n",[39,4974,4975,4977,4979,4981,4983,4985,4987,4990,4992,4994,4996],{"class":41,"line":118},[39,4976,2494],{"class":53},[39,4978,234],{"class":45},[39,4980,54],{"class":53},[39,4982,46],{"class":45},[39,4984,1692],{"class":53},[39,4986,1617],{"class":45},[39,4988,4989],{"class":53},"arr[",[39,4991,1457],{"class":74},[39,4993,2200],{"class":53},[39,4995,234],{"class":45},[39,4997,2324],{"class":53},[19,4999,5000],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[489,5002,5003],{},[331,5004,5005],{},"1️⃣五只小猪称体重",[30,5007,5009],{"className":32,"code":5008,"language":34,"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",[26,5010,5011,5017,5027,5035,5039,5079,5092,5118,5122,5134,5138,5148,5152,5156,5169,5177],{"__ignoreMap":35},[39,5012,5013,5015],{"class":41,"line":42},[39,5014,3051],{"class":45},[39,5016,3054],{"class":237},[39,5018,5019,5021,5023,5025],{"class":41,"line":92},[39,5020,3059],{"class":45},[39,5022,3062],{"class":45},[39,5024,3065],{"class":49},[39,5026,318],{"class":53},[39,5028,5029,5031,5033],{"class":41,"line":112},[39,5030,46],{"class":45},[39,5032,217],{"class":49},[39,5034,537],{"class":53},[39,5036,5037],{"class":41,"line":118},[39,5038,542],{"class":53},[39,5040,5041,5043,5046,5048,5050,5052,5054,5057,5059,5062,5064,5066,5068,5071,5073,5076],{"class":41,"line":125},[39,5042,1112],{"class":45},[39,5044,5045],{"class":53}," arr[",[39,5047,1583],{"class":74},[39,5049,2200],{"class":53},[39,5051,1117],{"class":45},[39,5053,2156],{"class":53},[39,5055,5056],{"class":74},"300",[39,5058,426],{"class":53},[39,5060,5061],{"class":74},"350",[39,5063,426],{"class":53},[39,5065,2832],{"class":74},[39,5067,426],{"class":53},[39,5069,5070],{"class":74},"400",[39,5072,426],{"class":53},[39,5074,5075],{"class":74},"250",[39,5077,5078],{"class":53},"};\n",[39,5080,5081,5083,5086,5088,5090],{"class":41,"line":132},[39,5082,1112],{"class":45},[39,5084,5085],{"class":53}," tmp",[39,5087,1117],{"class":45},[39,5089,1457],{"class":74},[39,5091,318],{"class":53},[39,5093,5094,5096,5098,5100,5102,5104,5106,5108,5110,5112,5114,5116],{"class":41,"line":138},[39,5095,4284],{"class":45},[39,5097,2772],{"class":53},[39,5099,46],{"class":45},[39,5101,4115],{"class":53},[39,5103,1117],{"class":45},[39,5105,1457],{"class":74},[39,5107,4122],{"class":53},[39,5109,2170],{"class":45},[39,5111,1583],{"class":74},[39,5113,4122],{"class":53},[39,5115,3389],{"class":45},[39,5117,574],{"class":53},[39,5119,5120],{"class":41,"line":169},[39,5121,3128],{"class":53},[39,5123,5124,5126,5129,5131],{"class":41,"line":190},[39,5125,3590],{"class":45},[39,5127,5128],{"class":53},"(tmp",[39,5130,2170],{"class":45},[39,5132,5133],{"class":53},"arr[i])\n",[39,5135,5136],{"class":41,"line":202},[39,5137,3603],{"class":53},[39,5139,5140,5143,5145],{"class":41,"line":207},[39,5141,5142],{"class":53},"            tmp",[39,5144,1117],{"class":45},[39,5146,5147],{"class":53},"arr[i];\n",[39,5149,5150],{"class":41,"line":212},[39,5151,3622],{"class":53},[39,5153,5154],{"class":41,"line":223},[39,5155,3284],{"class":53},[39,5157,5158,5160,5162,5165,5167],{"class":41,"line":228},[39,5159,2673],{"class":53},[39,5161,234],{"class":45},[39,5163,5164],{"class":53},"tmp",[39,5166,234],{"class":45},[39,5168,2324],{"class":53},[39,5170,5171,5173,5175],{"class":41,"line":263},[39,5172,95],{"class":45},[39,5174,315],{"class":74},[39,5176,318],{"class":53},[39,5178,5179],{"class":41,"line":287},[39,5180,115],{"class":53},[489,5182,5183],{},[331,5184,5185],{},"2️⃣数组元素逆置",[30,5187,5189],{"className":32,"code":5188,"language":34,"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",[26,5190,5191,5196,5202,5212,5220,5224,5259,5275,5307,5320,5325,5330,5342,5352,5362,5367,5376,5386,5391,5396,5423,5427,5443,5447,5458,5467],{"__ignoreMap":35},[39,5192,5193],{"class":41,"line":42},[39,5194,5195],{"class":128},"\u002F\u002F元素逆置\n",[39,5197,5198,5200],{"class":41,"line":92},[39,5199,3051],{"class":45},[39,5201,3054],{"class":237},[39,5203,5204,5206,5208,5210],{"class":41,"line":112},[39,5205,3059],{"class":45},[39,5207,3062],{"class":45},[39,5209,3065],{"class":49},[39,5211,318],{"class":53},[39,5213,5214,5216,5218],{"class":41,"line":118},[39,5215,46],{"class":45},[39,5217,217],{"class":49},[39,5219,537],{"class":53},[39,5221,5222],{"class":41,"line":125},[39,5223,542],{"class":53},[39,5225,5226,5229,5231,5233,5235,5237,5239,5241,5243,5245,5247,5249,5251,5253,5255,5257],{"class":41,"line":132},[39,5227,5228],{"class":45},"   int",[39,5230,5045],{"class":53},[39,5232,1583],{"class":74},[39,5234,2200],{"class":53},[39,5236,1117],{"class":45},[39,5238,2156],{"class":53},[39,5240,1483],{"class":74},[39,5242,426],{"class":53},[39,5244,1345],{"class":74},[39,5246,426],{"class":53},[39,5248,1339],{"class":74},[39,5250,426],{"class":53},[39,5252,1558],{"class":74},[39,5254,426],{"class":53},[39,5256,1583],{"class":74},[39,5258,5078],{"class":53},[39,5260,5261,5263,5266,5268,5270,5272],{"class":41,"line":138},[39,5262,5228],{"class":45},[39,5264,5265],{"class":53}," start",[39,5267,1117],{"class":45},[39,5269,1457],{"class":74},[39,5271,1324],{"class":53},[39,5273,5274],{"class":128},"\u002F\u002F起始下标\n",[39,5276,5277,5279,5282,5285,5288,5291,5293,5295,5298,5300,5302,5304],{"class":41,"line":169},[39,5278,5228],{"class":45},[39,5280,5281],{"class":53}," end",[39,5283,5284],{"class":45},"=sizeof",[39,5286,5287],{"class":53},"(arr)",[39,5289,5290],{"class":45},"\u002Fsizeof",[39,5292,4934],{"class":53},[39,5294,1457],{"class":74},[39,5296,5297],{"class":53},"])",[39,5299,1793],{"class":45},[39,5301,1483],{"class":74},[39,5303,1324],{"class":53},[39,5305,5306],{"class":128},"\u002F\u002F结束下标\n",[39,5308,5309,5312,5315,5317],{"class":41,"line":190},[39,5310,5311],{"class":45},"   while",[39,5313,5314],{"class":53}," (start",[39,5316,2170],{"class":45},[39,5318,5319],{"class":53},"end)\n",[39,5321,5322],{"class":41,"line":202},[39,5323,5324],{"class":53},"   {\n",[39,5326,5327],{"class":41,"line":207},[39,5328,5329],{"class":128},"    \u002F\u002F实现元素互换代码\n",[39,5331,5332,5334,5337,5339],{"class":41,"line":212},[39,5333,1112],{"class":45},[39,5335,5336],{"class":53}," temp",[39,5338,1117],{"class":45},[39,5340,5341],{"class":53},"arr[start];\n",[39,5343,5344,5347,5349],{"class":41,"line":223},[39,5345,5346],{"class":53},"    arr[start]",[39,5348,1117],{"class":45},[39,5350,5351],{"class":53},"arr[end];\n",[39,5353,5354,5357,5359],{"class":41,"line":228},[39,5355,5356],{"class":53},"    arr[end]",[39,5358,1117],{"class":45},[39,5360,5361],{"class":53},"temp;\n",[39,5363,5364],{"class":41,"line":263},[39,5365,5366],{"class":128},"    \u002F\u002F下标更新\n",[39,5368,5369,5372,5374],{"class":41,"line":287},[39,5370,5371],{"class":53},"    start",[39,5373,3389],{"class":45},[39,5375,318],{"class":53},[39,5377,5378,5381,5384],{"class":41,"line":292},[39,5379,5380],{"class":53},"    end",[39,5382,5383],{"class":45},"--",[39,5385,318],{"class":53},[39,5387,5388],{"class":41,"line":305},[39,5389,5390],{"class":53},"   }\n",[39,5392,5393],{"class":41,"line":310},[39,5394,5395],{"class":128},"   \u002F\u002F输出逆置后的数组\n",[39,5397,5398,5401,5403,5405,5407,5409,5411,5413,5415,5417,5419,5421],{"class":41,"line":321},[39,5399,5400],{"class":45},"   for",[39,5402,2772],{"class":53},[39,5404,46],{"class":45},[39,5406,4115],{"class":53},[39,5408,1117],{"class":45},[39,5410,1457],{"class":74},[39,5412,4122],{"class":53},[39,5414,2170],{"class":45},[39,5416,1583],{"class":74},[39,5418,4122],{"class":53},[39,5420,3389],{"class":45},[39,5422,574],{"class":53},[39,5424,5425],{"class":41,"line":713},[39,5426,5324],{"class":53},[39,5428,5429,5431,5433,5436,5438,5441],{"class":41,"line":718},[39,5430,2673],{"class":53},[39,5432,234],{"class":45},[39,5434,5435],{"class":53},"arr[i]",[39,5437,234],{"class":45},[39,5439,5440],{"class":237},"\" \"",[39,5442,318],{"class":53},[39,5444,5445],{"class":41,"line":723},[39,5446,5390],{"class":53},[39,5448,5449,5452,5454,5456],{"class":41,"line":729},[39,5450,5451],{"class":49},"   system",[39,5453,54],{"class":53},[39,5455,300],{"class":237},[39,5457,166],{"class":53},[39,5459,5460,5463,5465],{"class":41,"line":735},[39,5461,5462],{"class":45},"   return",[39,5464,315],{"class":74},[39,5466,318],{"class":53},[39,5468,5469],{"class":41,"line":741},[39,5470,115],{"class":53},[489,5472,5473],{},[331,5474,5475],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[30,5477,5479],{"className":32,"code":5478,"language":34,"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",[26,5480,5481,5486,5492,5502,5510,5514,5566,5579,5605,5609,5623,5627,5632,5637,5667,5671,5676,5710,5714,5719,5739,5744,5756,5772,5787,5792,5796,5800,5813,5839,5843,5857,5861,5869],{"__ignoreMap":35},[39,5482,5483],{"class":41,"line":42},[39,5484,5485],{"class":128},"\u002F\u002F冒泡排序,升序\n",[39,5487,5488,5490],{"class":41,"line":92},[39,5489,3051],{"class":45},[39,5491,3054],{"class":237},[39,5493,5494,5496,5498,5500],{"class":41,"line":112},[39,5495,3059],{"class":45},[39,5497,3062],{"class":45},[39,5499,3065],{"class":49},[39,5501,318],{"class":53},[39,5503,5504,5506,5508],{"class":41,"line":118},[39,5505,46],{"class":45},[39,5507,217],{"class":49},[39,5509,537],{"class":53},[39,5511,5512],{"class":41,"line":125},[39,5513,542],{"class":53},[39,5515,5516,5518,5520,5522,5525,5527,5530,5532,5534,5536,5538,5540,5542,5544,5546,5548,5550,5552,5554,5556,5558,5560,5562,5564],{"class":41,"line":132},[39,5517,1112],{"class":45},[39,5519,5045],{"class":53},[39,5521,1683],{"class":74},[39,5523,5524],{"class":53},"] ",[39,5526,1117],{"class":45},[39,5528,5529],{"class":53}," {",[39,5531,1558],{"class":74},[39,5533,426],{"class":53},[39,5535,1345],{"class":74},[39,5537,426],{"class":53},[39,5539,1658],{"class":74},[39,5541,426],{"class":53},[39,5543,1457],{"class":74},[39,5545,426],{"class":53},[39,5547,1583],{"class":74},[39,5549,426],{"class":53},[39,5551,1633],{"class":74},[39,5553,426],{"class":53},[39,5555,1483],{"class":74},[39,5557,426],{"class":53},[39,5559,1339],{"class":74},[39,5561,426],{"class":53},[39,5563,1683],{"class":74},[39,5565,5078],{"class":53},[39,5567,5568,5570,5572,5575,5577],{"class":41,"line":138},[39,5569,2673],{"class":53},[39,5571,234],{"class":45},[39,5573,5574],{"class":237},"\"排序前：\"",[39,5576,234],{"class":45},[39,5578,2324],{"class":53},[39,5580,5581,5583,5585,5587,5589,5591,5593,5595,5597,5599,5601,5603],{"class":41,"line":169},[39,5582,4284],{"class":45},[39,5584,2772],{"class":53},[39,5586,46],{"class":45},[39,5588,4115],{"class":53},[39,5590,1117],{"class":45},[39,5592,1457],{"class":74},[39,5594,4122],{"class":53},[39,5596,2170],{"class":45},[39,5598,1683],{"class":74},[39,5600,4122],{"class":53},[39,5602,3389],{"class":45},[39,5604,574],{"class":53},[39,5606,5607],{"class":41,"line":190},[39,5608,3128],{"class":53},[39,5610,5611,5613,5615,5617,5619,5621],{"class":41,"line":202},[39,5612,4534],{"class":53},[39,5614,234],{"class":45},[39,5616,5435],{"class":53},[39,5618,234],{"class":45},[39,5620,5440],{"class":237},[39,5622,318],{"class":53},[39,5624,5625],{"class":41,"line":207},[39,5626,3284],{"class":53},[39,5628,5629],{"class":41,"line":212},[39,5630,5631],{"class":128},"    \u002F\u002F开始冒泡排序\n",[39,5633,5634],{"class":41,"line":223},[39,5635,5636],{"class":128},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[39,5638,5639,5641,5643,5645,5647,5649,5651,5653,5655,5657,5659,5661,5663,5665],{"class":41,"line":228},[39,5640,4284],{"class":45},[39,5642,2772],{"class":53},[39,5644,46],{"class":45},[39,5646,4115],{"class":53},[39,5648,1117],{"class":45},[39,5650,1457],{"class":74},[39,5652,4122],{"class":53},[39,5654,2170],{"class":45},[39,5656,1683],{"class":74},[39,5658,1793],{"class":45},[39,5660,1483],{"class":74},[39,5662,4122],{"class":53},[39,5664,3389],{"class":45},[39,5666,574],{"class":53},[39,5668,5669],{"class":41,"line":263},[39,5670,3128],{"class":53},[39,5672,5673],{"class":41,"line":287},[39,5674,5675],{"class":128},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[39,5677,5678,5680,5682,5684,5686,5688,5690,5692,5694,5696,5698,5700,5702,5704,5706,5708],{"class":41,"line":292},[39,5679,4486],{"class":45},[39,5681,2772],{"class":53},[39,5683,46],{"class":45},[39,5685,4493],{"class":53},[39,5687,1117],{"class":45},[39,5689,1457],{"class":74},[39,5691,4500],{"class":53},[39,5693,2170],{"class":45},[39,5695,1683],{"class":74},[39,5697,1793],{"class":45},[39,5699,1704],{"class":53},[39,5701,1793],{"class":45},[39,5703,1483],{"class":74},[39,5705,4500],{"class":53},[39,5707,3389],{"class":45},[39,5709,574],{"class":53},[39,5711,5712],{"class":41,"line":305},[39,5713,3603],{"class":53},[39,5715,5716],{"class":41,"line":310},[39,5717,5718],{"class":128},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[39,5720,5721,5724,5727,5729,5732,5734,5736],{"class":41,"line":321},[39,5722,5723],{"class":45},"            if",[39,5725,5726],{"class":53},"(arr[j]",[39,5728,2220],{"class":45},[39,5730,5731],{"class":53},"arr[j",[39,5733,101],{"class":45},[39,5735,1483],{"class":74},[39,5737,5738],{"class":53},"])\n",[39,5740,5741],{"class":41,"line":713},[39,5742,5743],{"class":53},"            {\n",[39,5745,5746,5749,5751,5753],{"class":41,"line":718},[39,5747,5748],{"class":45},"                int",[39,5750,5336],{"class":53},[39,5752,1117],{"class":45},[39,5754,5755],{"class":53},"arr[j];\n",[39,5757,5758,5761,5763,5765,5767,5769],{"class":41,"line":723},[39,5759,5760],{"class":53},"                arr[j]",[39,5762,1117],{"class":45},[39,5764,5731],{"class":53},[39,5766,101],{"class":45},[39,5768,1483],{"class":74},[39,5770,5771],{"class":53},"];\n",[39,5773,5774,5777,5779,5781,5783,5785],{"class":41,"line":729},[39,5775,5776],{"class":53},"                arr[j",[39,5778,101],{"class":45},[39,5780,1483],{"class":74},[39,5782,2200],{"class":53},[39,5784,1117],{"class":45},[39,5786,5361],{"class":53},[39,5788,5789],{"class":41,"line":735},[39,5790,5791],{"class":53},"            }\n",[39,5793,5794],{"class":41,"line":741},[39,5795,3622],{"class":53},[39,5797,5798],{"class":41,"line":747},[39,5799,3284],{"class":53},[39,5801,5802,5804,5806,5809,5811],{"class":41,"line":753},[39,5803,2673],{"class":53},[39,5805,234],{"class":45},[39,5807,5808],{"class":237},"\"排序后：\"",[39,5810,234],{"class":45},[39,5812,2324],{"class":53},[39,5814,5815,5817,5819,5821,5823,5825,5827,5829,5831,5833,5835,5837],{"class":41,"line":758},[39,5816,4284],{"class":45},[39,5818,2772],{"class":53},[39,5820,46],{"class":45},[39,5822,4115],{"class":53},[39,5824,1117],{"class":45},[39,5826,1457],{"class":74},[39,5828,4122],{"class":53},[39,5830,2170],{"class":45},[39,5832,1683],{"class":74},[39,5834,4122],{"class":53},[39,5836,3389],{"class":45},[39,5838,574],{"class":53},[39,5840,5841],{"class":41,"line":763},[39,5842,3128],{"class":53},[39,5844,5845,5847,5849,5851,5853,5855],{"class":41,"line":772},[39,5846,4534],{"class":53},[39,5848,234],{"class":45},[39,5850,5435],{"class":53},[39,5852,234],{"class":45},[39,5854,5440],{"class":237},[39,5856,318],{"class":53},[39,5858,5859],{"class":41,"line":777},[39,5860,3284],{"class":53},[39,5862,5863,5865,5867],{"class":41,"line":785},[39,5864,95],{"class":45},[39,5866,315],{"class":74},[39,5868,318],{"class":53},[39,5870,5871],{"class":41,"line":796},[39,5872,115],{"class":53},[476,5874,5876],{"id":5875},"_172二维数组","1.7.2二维数组",[328,5878,5879],{},[331,5880,5881],{},"二维数组的四种定义方式",[1404,5883,5884,5893],{},[1407,5885,5886],{},[1410,5887,5888,5891],{},[1413,5889,5890],{},"序号",[1413,5892,4864],{},[1450,5894,5895,5905,5914,5923,5932],{},[1410,5896,5897,5899],{},[1455,5898,1483],{},[1455,5900,5901,5902,1324],{},"数据类型 数组名[行数]",[39,5903,5904],{},"列数",[1410,5906,5907,5909],{},[1455,5908,1345],{},[1455,5910,5901,5911,5913],{},[39,5912,5904],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1410,5915,5916,5918],{},[1455,5917,1339],{},[1455,5919,5901,5920,5922],{},[39,5921,5904],{},"={数据1,数据2,数据3...}",[1410,5924,5925,5927],{},[1455,5926,1558],{},[1455,5928,5929,5930,5922],{},"数据类型 数组名[]",[39,5931,5904],{},[1410,5933,5934,5937],{},[1455,5935,5936],{},"注意：不能只省略列数",[1455,5938],{},[328,5940,5941],{"start":92},[331,5942,5943],{},"二维数组数组名",[489,5945,5946,5949],{},[331,5947,5948],{},"1.查看二维数组所占内存空间",[331,5950,5951],{},"2.获取二维数组首地址",[19,5953,5954],{},"已知二维数组，求二维数组的行数与列数",[30,5956,5958],{"className":32,"code":5957,"language":34,"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",[26,5959,5960,5968,5972,5990,5994,6012,6028,6033,6058,6091],{"__ignoreMap":35},[39,5961,5962,5964,5966],{"class":41,"line":42},[39,5963,46],{"class":45},[39,5965,217],{"class":49},[39,5967,537],{"class":53},[39,5969,5970],{"class":41,"line":92},[39,5971,542],{"class":53},[39,5973,5974,5976,5978,5980,5983,5985,5987],{"class":41,"line":112},[39,5975,1112],{"class":45},[39,5977,5045],{"class":53},[39,5979,1345],{"class":74},[39,5981,5982],{"class":53},"][",[39,5984,1339],{"class":74},[39,5986,2200],{"class":53},[39,5988,5989],{"class":45},"=\n",[39,5991,5992],{"class":41,"line":118},[39,5993,3128],{"class":53},[39,5995,5996,5999,6001,6003,6005,6007,6009],{"class":41,"line":125},[39,5997,5998],{"class":53},"        {",[39,6000,1483],{"class":74},[39,6002,426],{"class":53},[39,6004,1345],{"class":74},[39,6006,426],{"class":53},[39,6008,1339],{"class":74},[39,6010,6011],{"class":53},"},\n",[39,6013,6014,6016,6018,6020,6022,6024,6026],{"class":41,"line":132},[39,6015,5998],{"class":53},[39,6017,1558],{"class":74},[39,6019,426],{"class":53},[39,6021,1583],{"class":74},[39,6023,426],{"class":53},[39,6025,1608],{"class":74},[39,6027,115],{"class":53},[39,6029,6030],{"class":41,"line":138},[39,6031,6032],{"class":53},"    };\n",[39,6034,6035,6037,6039,6042,6044,6046,6048,6050,6052,6054,6056],{"class":41,"line":169},[39,6036,2673],{"class":53},[39,6038,234],{"class":45},[39,6040,6041],{"class":237},"\"二维数组的行数\"",[39,6043,2497],{"class":45},[39,6045,5287],{"class":53},[39,6047,5290],{"class":45},[39,6049,4934],{"class":53},[39,6051,1457],{"class":74},[39,6053,5297],{"class":53},[39,6055,234],{"class":45},[39,6057,2324],{"class":53},[39,6059,6060,6062,6064,6067,6069,6071,6073,6075,6077,6079,6081,6083,6085,6087,6089],{"class":41,"line":190},[39,6061,2673],{"class":53},[39,6063,234],{"class":45},[39,6065,6066],{"class":237},"\"二维数组的列数\"",[39,6068,2497],{"class":45},[39,6070,4934],{"class":53},[39,6072,1457],{"class":74},[39,6074,5297],{"class":53},[39,6076,5290],{"class":45},[39,6078,4934],{"class":53},[39,6080,1457],{"class":74},[39,6082,5982],{"class":53},[39,6084,1457],{"class":74},[39,6086,5297],{"class":53},[39,6088,234],{"class":45},[39,6090,2324],{"class":53},[39,6092,6093],{"class":41,"line":202},[39,6094,115],{"class":53},[19,6096,6097],{},"查看二维数组首地址",[30,6099,6101],{"className":32,"code":6100,"language":34,"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",[26,6102,6103,6120,6146,6171],{"__ignoreMap":35},[39,6104,6105,6107,6109,6112,6114,6116,6118],{"class":41,"line":42},[39,6106,2494],{"class":53},[39,6108,234],{"class":45},[39,6110,6111],{"class":237},"\"二维数组首地址：\"",[39,6113,234],{"class":45},[39,6115,4963],{"class":53},[39,6117,234],{"class":45},[39,6119,2324],{"class":53},[39,6121,6122,6124,6126,6129,6131,6133,6135,6138,6140,6142,6144],{"class":41,"line":92},[39,6123,2494],{"class":53},[39,6125,234],{"class":45},[39,6127,6128],{"class":237},"\"二维数组第一行的首地址：\"",[39,6130,234],{"class":45},[39,6132,54],{"class":53},[39,6134,46],{"class":45},[39,6136,6137],{"class":53},")arr[",[39,6139,1457],{"class":74},[39,6141,2200],{"class":53},[39,6143,234],{"class":45},[39,6145,2324],{"class":53},[39,6147,6148,6150,6152,6155,6157,6159,6161,6163,6165,6167,6169],{"class":41,"line":112},[39,6149,2494],{"class":53},[39,6151,234],{"class":45},[39,6153,6154],{"class":237},"\"二维数组第二行的首地址：\"",[39,6156,234],{"class":45},[39,6158,54],{"class":53},[39,6160,46],{"class":45},[39,6162,6137],{"class":53},[39,6164,1483],{"class":74},[39,6166,2200],{"class":53},[39,6168,234],{"class":45},[39,6170,2324],{"class":53},[39,6172,6173,6175,6177,6180,6182,6184,6186,6188,6190,6192,6194,6196,6198,6200,6202,6204],{"class":41,"line":118},[39,6174,2494],{"class":53},[39,6176,234],{"class":45},[39,6178,6179],{"class":237},"\"二维数组第一个元素的首地址:\"",[39,6181,234],{"class":45},[39,6183,54],{"class":53},[39,6185,46],{"class":45},[39,6187,1692],{"class":53},[39,6189,1617],{"class":45},[39,6191,4989],{"class":53},[39,6193,1457],{"class":74},[39,6195,5982],{"class":53},[39,6197,1457],{"class":74},[39,6199,2200],{"class":53},[39,6201,234],{"class":45},[39,6203,2367],{"class":53},[39,6205,6206],{"class":128},"\u002F\u002F对于数，要加取址符\n",[1192,6208,6209],{},"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":92,"depth":92,"links":6211},[6212,6213,6214,6222,6223,6229,6234],{"id":1220,"depth":92,"text":1221},{"id":1227,"depth":92,"text":1228},{"id":1242,"depth":92,"text":1243,"children":6215},[6216,6217,6218,6219,6220,6221],{"id":1246,"depth":112,"text":1247},{"id":1288,"depth":112,"text":1289},{"id":1353,"depth":112,"text":1354},{"id":2284,"depth":112,"text":2285},{"id":2373,"depth":112,"text":2374},{"id":2468,"depth":112,"text":2469},{"id":2510,"depth":92,"text":2511},{"id":2576,"depth":92,"text":2577,"children":6224},[6225,6226,6227,6228],{"id":2580,"depth":112,"text":2581},{"id":2602,"depth":112,"text":2603},{"id":2611,"depth":112,"text":2612},{"id":2620,"depth":112,"text":2621},{"id":2629,"depth":92,"text":2630,"children":6230},[6231,6232,6233],{"id":2633,"depth":112,"text":2634},{"id":3302,"depth":112,"text":3303},{"id":4704,"depth":112,"text":4705},{"id":4845,"depth":92,"text":4846,"children":6235},[6236,6237],{"id":4849,"depth":112,"text":4850},{"id":5875,"depth":112,"text":5876},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1212,"description":35},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6244,"title":6245,"body":6246,"description":35,"extension":1203,"meta":7341,"navigation":121,"path":7342,"seo":7343,"stem":7344,"__hash__":7345},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6247,"toc":7333},[6248,6251,6255,6262,6270,6273,6338,6342,6345,6421,6425,6428,6431,6434,6646,6650,6655,6718,6723,6790,6795,6886,6889,6994,6998,7001,7007,7150,7154,7157,7171,7174,7219,7222,7330],[10,6249,6245],{"id":6250},"_2函数",[14,6252,6254],{"id":6253},"_21函数概述","2.1函数概述",[328,6256,6257,6260],{},[331,6258,6259],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[331,6261,24],{},[30,6263,6268],{"className":6264,"code":6266,"language":6267,"meta":35},[6265],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[26,6269,6266],{"__ignoreMap":35},[19,6271,6272],{},"小案例",[30,6274,6276],{"className":32,"code":6275,"language":34,"meta":35,"style":35},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[26,6277,6278,6283,6306,6310,6327,6334],{"__ignoreMap":35},[39,6279,6280],{"class":41,"line":42},[39,6281,6282],{"class":128},"\u002F\u002Fnum1,num2形参\n",[39,6284,6285,6287,6290,6292,6294,6297,6299,6301,6304],{"class":41,"line":92},[39,6286,46],{"class":45},[39,6288,6289],{"class":49}," add",[39,6291,54],{"class":53},[39,6293,46],{"class":45},[39,6295,6296],{"class":59}," num1",[39,6298,426],{"class":53},[39,6300,46],{"class":45},[39,6302,6303],{"class":59}," num2",[39,6305,574],{"class":53},[39,6307,6308],{"class":41,"line":112},[39,6309,542],{"class":53},[39,6311,6312,6314,6317,6319,6322,6324],{"class":41,"line":118},[39,6313,1112],{"class":45},[39,6315,6316],{"class":53}," sum",[39,6318,1117],{"class":45},[39,6320,6321],{"class":53},"num1",[39,6323,101],{"class":45},[39,6325,6326],{"class":53},"num2;\n",[39,6328,6329,6331],{"class":41,"line":125},[39,6330,95],{"class":45},[39,6332,6333],{"class":53}," sum;\n",[39,6335,6336],{"class":41,"line":132},[39,6337,115],{"class":53},[14,6339,6341],{"id":6340},"_22函数调用","2.2函数调用",[19,6343,6344],{},"调用刚刚写的求和函数",[30,6346,6348],{"className":32,"code":6347,"language":34,"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",[26,6349,6350,6358,6362,6367,6379,6391,6400,6405,6417],{"__ignoreMap":35},[39,6351,6352,6354,6356],{"class":41,"line":42},[39,6353,46],{"class":45},[39,6355,217],{"class":49},[39,6357,537],{"class":53},[39,6359,6360],{"class":41,"line":92},[39,6361,542],{"class":53},[39,6363,6364],{"class":41,"line":112},[39,6365,6366],{"class":128},"    \u002F\u002Fa,b实参\n",[39,6368,6369,6371,6373,6375,6377],{"class":41,"line":118},[39,6370,1112],{"class":45},[39,6372,60],{"class":53},[39,6374,1117],{"class":45},[39,6376,1457],{"class":74},[39,6378,318],{"class":53},[39,6380,6381,6383,6385,6387,6389],{"class":41,"line":125},[39,6382,1112],{"class":45},[39,6384,68],{"class":53},[39,6386,1117],{"class":45},[39,6388,1457],{"class":74},[39,6390,318],{"class":53},[39,6392,6393,6395,6397],{"class":41,"line":132},[39,6394,3110],{"class":53},[39,6396,2553],{"class":45},[39,6398,6399],{"class":53},"a,b;\n",[39,6401,6402],{"class":41,"line":138},[39,6403,6404],{"class":128},"    \u002F\u002F调用函数时，实参值传给了形参\n",[39,6406,6407,6409,6411,6414],{"class":41,"line":169},[39,6408,2673],{"class":53},[39,6410,234],{"class":45},[39,6412,6413],{"class":49},"add",[39,6415,6416],{"class":53},"(a,b);\n",[39,6418,6419],{"class":41,"line":190},[39,6420,115],{"class":53},[14,6422,6424],{"id":6423},"_23值传递","2.3值传递",[19,6426,6427],{},"值传递就是函数调用时实参将数值传给形参",[19,6429,6430],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,6432,6433],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[30,6435,6437],{"className":32,"code":6436,"language":34,"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",[26,6438,6439,6460,6464,6477,6494,6512,6523,6532,6541,6554,6570,6586,6595,6599,6607,6611,6623,6635,6642],{"__ignoreMap":35},[39,6440,6441,6443,6446,6448,6450,6452,6454,6456,6458],{"class":41,"line":42},[39,6442,370],{"class":45},[39,6444,6445],{"class":49}," swap",[39,6447,54],{"class":53},[39,6449,46],{"class":45},[39,6451,6296],{"class":59},[39,6453,426],{"class":53},[39,6455,46],{"class":45},[39,6457,6303],{"class":59},[39,6459,574],{"class":53},[39,6461,6462],{"class":41,"line":92},[39,6463,542],{"class":53},[39,6465,6466,6468,6470,6473,6475],{"class":41,"line":112},[39,6467,2673],{"class":53},[39,6469,234],{"class":45},[39,6471,6472],{"class":237},"\"交换前：\"",[39,6474,234],{"class":45},[39,6476,2324],{"class":53},[39,6478,6479,6481,6483,6486,6488,6490,6492],{"class":41,"line":118},[39,6480,2673],{"class":53},[39,6482,234],{"class":45},[39,6484,6485],{"class":237},"\"num1=\"",[39,6487,234],{"class":45},[39,6489,6321],{"class":53},[39,6491,234],{"class":45},[39,6493,2324],{"class":53},[39,6495,6496,6498,6500,6503,6505,6508,6510],{"class":41,"line":125},[39,6497,2673],{"class":53},[39,6499,234],{"class":45},[39,6501,6502],{"class":237},"\"num2=\"",[39,6504,234],{"class":45},[39,6506,6507],{"class":53},"num2",[39,6509,234],{"class":45},[39,6511,2324],{"class":53},[39,6513,6514,6516,6518,6520],{"class":41,"line":132},[39,6515,1112],{"class":45},[39,6517,5336],{"class":53},[39,6519,1117],{"class":45},[39,6521,6522],{"class":53},"num1;\n",[39,6524,6525,6528,6530],{"class":41,"line":138},[39,6526,6527],{"class":53},"    num1",[39,6529,1117],{"class":45},[39,6531,6326],{"class":53},[39,6533,6534,6537,6539],{"class":41,"line":169},[39,6535,6536],{"class":53},"    num2",[39,6538,1117],{"class":45},[39,6540,5361],{"class":53},[39,6542,6543,6545,6547,6550,6552],{"class":41,"line":190},[39,6544,2673],{"class":53},[39,6546,234],{"class":45},[39,6548,6549],{"class":237},"\"交换后：\"",[39,6551,234],{"class":45},[39,6553,2324],{"class":53},[39,6555,6556,6558,6560,6562,6564,6566,6568],{"class":41,"line":202},[39,6557,2673],{"class":53},[39,6559,234],{"class":45},[39,6561,6485],{"class":237},[39,6563,234],{"class":45},[39,6565,6321],{"class":53},[39,6567,234],{"class":45},[39,6569,2324],{"class":53},[39,6571,6572,6574,6576,6578,6580,6582,6584],{"class":41,"line":207},[39,6573,2673],{"class":53},[39,6575,234],{"class":45},[39,6577,6502],{"class":237},[39,6579,234],{"class":45},[39,6581,6507],{"class":53},[39,6583,234],{"class":45},[39,6585,2324],{"class":53},[39,6587,6588,6590,6592],{"class":41,"line":212},[39,6589,95],{"class":45},[39,6591,1324],{"class":53},[39,6593,6594],{"class":128},"\u002F\u002F或者不写\n",[39,6596,6597],{"class":41,"line":223},[39,6598,115],{"class":53},[39,6600,6601,6603,6605],{"class":41,"line":228},[39,6602,46],{"class":45},[39,6604,217],{"class":49},[39,6606,537],{"class":53},[39,6608,6609],{"class":41,"line":263},[39,6610,542],{"class":53},[39,6612,6613,6615,6617,6619,6621],{"class":41,"line":287},[39,6614,1112],{"class":45},[39,6616,60],{"class":53},[39,6618,1117],{"class":45},[39,6620,423],{"class":74},[39,6622,318],{"class":53},[39,6624,6625,6627,6629,6631,6633],{"class":41,"line":292},[39,6626,1112],{"class":45},[39,6628,68],{"class":53},[39,6630,1117],{"class":45},[39,6632,248],{"class":74},[39,6634,318],{"class":53},[39,6636,6637,6640],{"class":41,"line":305},[39,6638,6639],{"class":49},"    swap",[39,6641,6416],{"class":53},[39,6643,6644],{"class":41,"line":310},[39,6645,115],{"class":53},[14,6647,6649],{"id":6648},"_24函数的常见形式","2.4函数的常见形式",[328,6651,6652],{},[331,6653,6654],{},"无参无返",[30,6656,6658],{"className":32,"code":6657,"language":34,"meta":35,"style":35},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[26,6659,6660,6669,6673,6686,6690,6698,6702,6707,6714],{"__ignoreMap":35},[39,6661,6662,6664,6667],{"class":41,"line":42},[39,6663,370],{"class":45},[39,6665,6666],{"class":49}," test01",[39,6668,537],{"class":53},[39,6670,6671],{"class":41,"line":92},[39,6672,542],{"class":53},[39,6674,6675,6677,6679,6682,6684],{"class":41,"line":112},[39,6676,2673],{"class":53},[39,6678,234],{"class":45},[39,6680,6681],{"class":237},"\"你好\"",[39,6683,234],{"class":45},[39,6685,2324],{"class":53},[39,6687,6688],{"class":41,"line":118},[39,6689,115],{"class":53},[39,6691,6692,6694,6696],{"class":41,"line":125},[39,6693,46],{"class":45},[39,6695,217],{"class":49},[39,6697,537],{"class":53},[39,6699,6700],{"class":41,"line":132},[39,6701,542],{"class":53},[39,6703,6704],{"class":41,"line":138},[39,6705,6706],{"class":128},"    \u002F\u002F函数调用\n",[39,6708,6709,6712],{"class":41,"line":169},[39,6710,6711],{"class":49},"    test01",[39,6713,782],{"class":53},[39,6715,6716],{"class":41,"line":190},[39,6717,115],{"class":53},[328,6719,6720],{"start":92},[331,6721,6722],{},"有参无返",[30,6724,6726],{"className":32,"code":6725,"language":34,"meta":35,"style":35},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[26,6727,6728,6743,6747,6759,6763,6771,6775,6786],{"__ignoreMap":35},[39,6729,6730,6732,6735,6737,6739,6741],{"class":41,"line":42},[39,6731,370],{"class":45},[39,6733,6734],{"class":49}," test02",[39,6736,54],{"class":53},[39,6738,46],{"class":45},[39,6740,60],{"class":59},[39,6742,574],{"class":53},[39,6744,6745],{"class":41,"line":92},[39,6746,542],{"class":53},[39,6748,6749,6751,6753,6755,6757],{"class":41,"line":112},[39,6750,2673],{"class":53},[39,6752,234],{"class":45},[39,6754,6681],{"class":237},[39,6756,234],{"class":45},[39,6758,2324],{"class":53},[39,6760,6761],{"class":41,"line":118},[39,6762,115],{"class":53},[39,6764,6765,6767,6769],{"class":41,"line":125},[39,6766,46],{"class":45},[39,6768,217],{"class":49},[39,6770,537],{"class":53},[39,6772,6773],{"class":41,"line":132},[39,6774,542],{"class":53},[39,6776,6777,6780,6782,6784],{"class":41,"line":138},[39,6778,6779],{"class":49},"    test02",[39,6781,54],{"class":53},[39,6783,278],{"class":74},[39,6785,166],{"class":53},[39,6787,6788],{"class":41,"line":169},[39,6789,115],{"class":53},[328,6791,6792],{"start":112},[331,6793,6794],{},"无参有返",[30,6796,6798],{"className":32,"code":6797,"language":34,"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",[26,6799,6800,6809,6813,6825,6834,6838,6846,6850,6863,6882],{"__ignoreMap":35},[39,6801,6802,6804,6807],{"class":41,"line":42},[39,6803,46],{"class":45},[39,6805,6806],{"class":49}," test03",[39,6808,537],{"class":53},[39,6810,6811],{"class":41,"line":92},[39,6812,542],{"class":53},[39,6814,6815,6817,6819,6821,6823],{"class":41,"line":112},[39,6816,2673],{"class":53},[39,6818,234],{"class":45},[39,6820,6681],{"class":237},[39,6822,234],{"class":45},[39,6824,2324],{"class":53},[39,6826,6827,6829,6832],{"class":41,"line":118},[39,6828,95],{"class":45},[39,6830,6831],{"class":74}," 100",[39,6833,318],{"class":53},[39,6835,6836],{"class":41,"line":125},[39,6837,115],{"class":53},[39,6839,6840,6842,6844],{"class":41,"line":132},[39,6841,46],{"class":45},[39,6843,217],{"class":49},[39,6845,537],{"class":53},[39,6847,6848],{"class":41,"line":138},[39,6849,542],{"class":53},[39,6851,6852,6854,6856,6858,6861],{"class":41,"line":169},[39,6853,1112],{"class":45},[39,6855,6296],{"class":53},[39,6857,1117],{"class":45},[39,6859,6860],{"class":49},"test03",[39,6862,782],{"class":53},[39,6864,6865,6867,6869,6871,6873,6875,6877,6879],{"class":41,"line":190},[39,6866,2673],{"class":53},[39,6868,234],{"class":45},[39,6870,6485],{"class":237},[39,6872,234],{"class":45},[39,6874,6321],{"class":53},[39,6876,234],{"class":45},[39,6878,2367],{"class":53},[39,6880,6881],{"class":128}," \u002F\u002F100\n",[39,6883,6884],{"class":41,"line":202},[39,6885,115],{"class":53},[19,6887,6888],{},"4.有参有返",[30,6890,6892],{"className":32,"code":6891,"language":34,"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",[26,6893,6894,6909,6913,6926,6932,6936,6945,6949,6961,6975,6990],{"__ignoreMap":35},[39,6895,6896,6898,6901,6903,6905,6907],{"class":41,"line":42},[39,6897,46],{"class":45},[39,6899,6900],{"class":49}," test04",[39,6902,54],{"class":53},[39,6904,46],{"class":45},[39,6906,60],{"class":59},[39,6908,574],{"class":53},[39,6910,6911],{"class":41,"line":92},[39,6912,542],{"class":53},[39,6914,6915,6917,6919,6922,6924],{"class":41,"line":112},[39,6916,2673],{"class":53},[39,6918,234],{"class":45},[39,6920,6921],{"class":237},"\"hello\"",[39,6923,234],{"class":45},[39,6925,2324],{"class":53},[39,6927,6928,6930],{"class":41,"line":118},[39,6929,95],{"class":45},[39,6931,2556],{"class":53},[39,6933,6934],{"class":41,"line":125},[39,6935,115],{"class":53},[39,6937,6938,6940,6943],{"class":41,"line":132},[39,6939,46],{"class":45},[39,6941,6942],{"class":49}," mian",[39,6944,537],{"class":53},[39,6946,6947],{"class":41,"line":138},[39,6948,542],{"class":53},[39,6950,6951,6953,6955,6957,6959],{"class":41,"line":169},[39,6952,1112],{"class":45},[39,6954,68],{"class":53},[39,6956,1117],{"class":45},[39,6958,1483],{"class":74},[39,6960,318],{"class":53},[39,6962,6963,6965,6967,6969,6972],{"class":41,"line":190},[39,6964,1112],{"class":45},[39,6966,82],{"class":53},[39,6968,1117],{"class":45},[39,6970,6971],{"class":49},"test04",[39,6973,6974],{"class":53},"(b);\n",[39,6976,6977,6979,6981,6983,6985,6987],{"class":41,"line":202},[39,6978,2673],{"class":53},[39,6980,234],{"class":45},[39,6982,1553],{"class":53},[39,6984,234],{"class":45},[39,6986,2367],{"class":53},[39,6988,6989],{"class":128}," \u002F\u002F1\n",[39,6991,6992],{"class":41,"line":207},[39,6993,115],{"class":53},[14,6995,6997],{"id":6996},"_25函数的声明","2.5函数的声明",[19,6999,7000],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7002,7003,7004],{},"函数的",[350,7005,7006],{},"声明可以多次，但是函数的定义只能有一次",[30,7008,7010],{"className":32,"code":7009,"language":34,"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",[26,7011,7012,7017,7022,7046,7055,7059,7071,7083,7099,7103,7123,7127,7146],{"__ignoreMap":35},[39,7013,7014],{"class":41,"line":42},[39,7015,7016],{"class":128},"\u002F\u002F函数声明\n",[39,7018,7019],{"class":41,"line":92},[39,7020,7021],{"class":128},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[39,7023,7024,7026,7029,7031,7033,7035,7037,7039,7041,7043],{"class":41,"line":112},[39,7025,46],{"class":45},[39,7027,7028],{"class":49}," max",[39,7030,54],{"class":53},[39,7032,46],{"class":45},[39,7034,60],{"class":59},[39,7036,426],{"class":53},[39,7038,46],{"class":45},[39,7040,68],{"class":59},[39,7042,431],{"class":53},[39,7044,7045],{"class":128},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[39,7047,7048,7050,7052],{"class":41,"line":118},[39,7049,46],{"class":45},[39,7051,217],{"class":49},[39,7053,7054],{"class":53},"() \n",[39,7056,7057],{"class":41,"line":125},[39,7058,542],{"class":53},[39,7060,7061,7063,7065,7067,7069],{"class":41,"line":132},[39,7062,1112],{"class":45},[39,7064,60],{"class":53},[39,7066,1117],{"class":45},[39,7068,423],{"class":74},[39,7070,318],{"class":53},[39,7072,7073,7075,7077,7079,7081],{"class":41,"line":138},[39,7074,1112],{"class":45},[39,7076,68],{"class":53},[39,7078,1117],{"class":45},[39,7080,248],{"class":74},[39,7082,318],{"class":53},[39,7084,7085,7087,7089,7092,7095,7097],{"class":41,"line":169},[39,7086,2673],{"class":53},[39,7088,234],{"class":45},[39,7090,7091],{"class":49},"max",[39,7093,7094],{"class":53},"(a,b)",[39,7096,234],{"class":45},[39,7098,2324],{"class":53},[39,7100,7101],{"class":41,"line":190},[39,7102,115],{"class":53},[39,7104,7105,7107,7109,7111,7113,7115,7117,7119,7121],{"class":41,"line":202},[39,7106,46],{"class":45},[39,7108,7028],{"class":49},[39,7110,54],{"class":53},[39,7112,46],{"class":45},[39,7114,60],{"class":59},[39,7116,426],{"class":53},[39,7118,46],{"class":45},[39,7120,68],{"class":59},[39,7122,574],{"class":53},[39,7124,7125],{"class":41,"line":207},[39,7126,542],{"class":53},[39,7128,7129,7131,7133,7135,7137,7139,7141,7143],{"class":41,"line":212},[39,7130,95],{"class":45},[39,7132,60],{"class":53},[39,7134,2220],{"class":45},[39,7136,1528],{"class":53},[39,7138,2246],{"class":45},[39,7140,922],{"class":53},[39,7142,2119],{"class":45},[39,7144,7145],{"class":53},"b;\n",[39,7147,7148],{"class":41,"line":223},[39,7149,115],{"class":53},[14,7151,7153],{"id":7152},"_26函数的分文件编写","2.6函数的分文件编写",[19,7155,7156],{},"4个步骤：",[489,7158,7159,7162,7165,7168],{},[331,7160,7161],{},"1.创建后缀名为.h的头文件",[331,7163,7164],{},"2.创建后缀名为.cpp的源文件",[331,7166,7167],{},"3.在头文件中写函数的定义",[331,7169,7170],{},"4.在源文件中写函数的定义\n示例：",[19,7172,7173],{},"头文件：swap.h",[30,7175,7177],{"className":32,"code":7176,"language":34,"meta":35,"style":35},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[26,7178,7179,7185,7195,7199],{"__ignoreMap":35},[39,7180,7181,7183],{"class":41,"line":42},[39,7182,3051],{"class":45},[39,7184,3054],{"class":237},[39,7186,7187,7189,7191,7193],{"class":41,"line":92},[39,7188,3059],{"class":45},[39,7190,3062],{"class":45},[39,7192,3065],{"class":49},[39,7194,318],{"class":53},[39,7196,7197],{"class":41,"line":112},[39,7198,7016],{"class":128},[39,7200,7201,7203,7205,7207,7209,7211,7213,7215,7217],{"class":41,"line":118},[39,7202,370],{"class":45},[39,7204,6445],{"class":49},[39,7206,54],{"class":53},[39,7208,46],{"class":45},[39,7210,60],{"class":59},[39,7212,426],{"class":53},[39,7214,46],{"class":45},[39,7216,68],{"class":59},[39,7218,166],{"class":53},[19,7220,7221],{},"源文件：swap.cpp",[30,7223,7225],{"className":32,"code":7224,"language":34,"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",[26,7226,7227,7234,7239,7259,7263,7274,7283,7292,7309,7326],{"__ignoreMap":35},[39,7228,7229,7231],{"class":41,"line":42},[39,7230,3051],{"class":45},[39,7232,7233],{"class":237}," \"swap.h\"\n",[39,7235,7236],{"class":41,"line":92},[39,7237,7238],{"class":128},"\u002F\u002F函数的定义\n",[39,7240,7241,7243,7245,7247,7249,7251,7253,7255,7257],{"class":41,"line":112},[39,7242,370],{"class":45},[39,7244,6445],{"class":49},[39,7246,54],{"class":53},[39,7248,46],{"class":45},[39,7250,60],{"class":59},[39,7252,426],{"class":53},[39,7254,46],{"class":45},[39,7256,68],{"class":59},[39,7258,574],{"class":53},[39,7260,7261],{"class":41,"line":118},[39,7262,542],{"class":53},[39,7264,7265,7267,7269,7271],{"class":41,"line":125},[39,7266,1112],{"class":45},[39,7268,5336],{"class":53},[39,7270,1117],{"class":45},[39,7272,7273],{"class":53},"a;\n",[39,7275,7276,7279,7281],{"class":41,"line":132},[39,7277,7278],{"class":53},"    a",[39,7280,1117],{"class":45},[39,7282,7145],{"class":53},[39,7284,7285,7288,7290],{"class":41,"line":138},[39,7286,7287],{"class":53},"    b",[39,7289,1117],{"class":45},[39,7291,5361],{"class":53},[39,7293,7294,7296,7298,7301,7303,7305,7307],{"class":41,"line":169},[39,7295,2673],{"class":53},[39,7297,234],{"class":45},[39,7299,7300],{"class":237},"\"a=\"",[39,7302,234],{"class":45},[39,7304,922],{"class":53},[39,7306,234],{"class":45},[39,7308,2324],{"class":53},[39,7310,7311,7313,7315,7318,7320,7322,7324],{"class":41,"line":190},[39,7312,2673],{"class":53},[39,7314,234],{"class":45},[39,7316,7317],{"class":237},"\"b=\"",[39,7319,234],{"class":45},[39,7321,1528],{"class":53},[39,7323,234],{"class":45},[39,7325,2324],{"class":53},[39,7327,7328],{"class":41,"line":202},[39,7329,115],{"class":53},[1192,7331,7332],{},"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":92,"depth":92,"links":7334},[7335,7336,7337,7338,7339,7340],{"id":6253,"depth":92,"text":6254},{"id":6340,"depth":92,"text":6341},{"id":6423,"depth":92,"text":6424},{"id":6648,"depth":92,"text":6649},{"id":6996,"depth":92,"text":6997},{"id":7152,"depth":92,"text":7153},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6245,"description":35},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7347,"title":7348,"body":7349,"description":7356,"extension":1203,"meta":8759,"navigation":121,"path":8760,"seo":8761,"stem":8762,"__hash__":8763},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7350,"toc":8749},[7351,7354,7357,7361,7523,7527,7530,7533,7536,7539,7678,7682,7685,7688,7691,7756,7760,7765,7832,7835,7839,7842,7853,7858,7877,7880,7885,7904,7907,7911,7930,7933,7937,8172,8176,8179,8182,8185,8347,8350,8354,8357,8363,8746],[10,7352,7348],{"id":7353},"_3指针",[19,7355,7356],{},"通过指针保存一个地址，指针就是个地址",[14,7358,7360],{"id":7359},"_31定义指针","3.1定义指针",[30,7362,7364],{"className":32,"code":7363,"language":34,"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",[26,7365,7366,7374,7378,7383,7395,7400,7408,7418,7436,7456,7460,7465,7470,7475,7489,7505,7519],{"__ignoreMap":35},[39,7367,7368,7370,7372],{"class":41,"line":42},[39,7369,46],{"class":45},[39,7371,217],{"class":49},[39,7373,537],{"class":53},[39,7375,7376],{"class":41,"line":92},[39,7377,542],{"class":53},[39,7379,7380],{"class":41,"line":112},[39,7381,7382],{"class":128},"    \u002F\u002F1.定义指针\n",[39,7384,7385,7387,7389,7391,7393],{"class":41,"line":118},[39,7386,1112],{"class":45},[39,7388,60],{"class":53},[39,7390,1117],{"class":45},[39,7392,423],{"class":74},[39,7394,318],{"class":53},[39,7396,7397],{"class":41,"line":125},[39,7398,7399],{"class":128},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[39,7401,7402,7405],{"class":41,"line":132},[39,7403,7404],{"class":45},"    int*",[39,7406,7407],{"class":53},"p;\n",[39,7409,7410,7413,7416],{"class":41,"line":138},[39,7411,7412],{"class":53},"    p",[39,7414,7415],{"class":45},"=&",[39,7417,7273],{"class":53},[39,7419,7420,7422,7424,7427,7430,7432,7434],{"class":41,"line":169},[39,7421,2673],{"class":53},[39,7423,234],{"class":45},[39,7425,7426],{"class":237},"\"a的地址为：\"",[39,7428,7429],{"class":45},"\u003C\u003C&",[39,7431,922],{"class":53},[39,7433,234],{"class":45},[39,7435,2324],{"class":53},[39,7437,7438,7440,7442,7445,7447,7449,7451,7453],{"class":41,"line":190},[39,7439,2673],{"class":53},[39,7441,234],{"class":45},[39,7443,7444],{"class":237},"\"指针p为：\"",[39,7446,234],{"class":45},[39,7448,19],{"class":53},[39,7450,234],{"class":45},[39,7452,2367],{"class":53},[39,7454,7455],{"class":128},"\u002F\u002F指针p表示的就是a的地址\n",[39,7457,7458],{"class":41,"line":202},[39,7459,122],{"emptyLinePlaceholder":121},[39,7461,7462],{"class":41,"line":207},[39,7463,7464],{"class":128},"    \u002F\u002F2.使用指针\n",[39,7466,7467],{"class":41,"line":212},[39,7468,7469],{"class":128},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[39,7471,7472],{"class":41,"line":223},[39,7473,7474],{"class":128},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[39,7476,7477,7480,7482,7484,7487],{"class":41,"line":228},[39,7478,7479],{"class":45},"    *",[39,7481,19],{"class":53},[39,7483,1117],{"class":45},[39,7485,7486],{"class":74},"1000",[39,7488,318],{"class":53},[39,7490,7491,7493,7496,7498,7500,7502],{"class":41,"line":263},[39,7492,2673],{"class":53},[39,7494,7495],{"class":45},"\u003C\u003C*",[39,7497,19],{"class":53},[39,7499,234],{"class":45},[39,7501,2367],{"class":53},[39,7503,7504],{"class":128},"\u002F\u002F1000\n",[39,7506,7507,7509,7511,7513,7515,7517],{"class":41,"line":287},[39,7508,2673],{"class":53},[39,7510,234],{"class":45},[39,7512,922],{"class":53},[39,7514,234],{"class":45},[39,7516,2367],{"class":53},[39,7518,7504],{"class":128},[39,7520,7521],{"class":41,"line":292},[39,7522,115],{"class":53},[14,7524,7526],{"id":7525},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,7528,7529],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,7531,7532],{},"在32位操作系统下：占用4个字节空间",[19,7534,7535],{},"在64位操作系统下：占用8个字节空间",[19,7537,7538],{},"上方是不管啥数据类型的",[30,7540,7542],{"className":32,"code":7541,"language":34,"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",[26,7543,7544,7552,7556,7561,7573,7578,7583,7588,7601,7622,7648,7674],{"__ignoreMap":35},[39,7545,7546,7548,7550],{"class":41,"line":42},[39,7547,46],{"class":45},[39,7549,217],{"class":49},[39,7551,537],{"class":53},[39,7553,7554],{"class":41,"line":92},[39,7555,542],{"class":53},[39,7557,7558],{"class":41,"line":112},[39,7559,7560],{"class":128},"    \u002F\u002F指针所占内存空间\n",[39,7562,7563,7565,7567,7569,7571],{"class":41,"line":118},[39,7564,1112],{"class":45},[39,7566,60],{"class":53},[39,7568,1117],{"class":45},[39,7570,423],{"class":74},[39,7572,318],{"class":53},[39,7574,7575],{"class":41,"line":125},[39,7576,7577],{"class":128},"    \u002F\u002Fint *p;\n",[39,7579,7580],{"class":41,"line":132},[39,7581,7582],{"class":128},"    \u002F\u002Fp=&a;\n",[39,7584,7585],{"class":41,"line":138},[39,7586,7587],{"class":128},"    \u002F\u002F上述可以写为以下：\n",[39,7589,7590,7592,7595,7597,7599],{"class":41,"line":169},[39,7591,1112],{"class":45},[39,7593,7594],{"class":45}," *",[39,7596,19],{"class":53},[39,7598,7415],{"class":45},[39,7600,7273],{"class":53},[39,7602,7603,7605,7607,7610,7612,7615,7617,7619],{"class":41,"line":190},[39,7604,231],{"class":53},[39,7606,234],{"class":45},[39,7608,7609],{"class":237},"\"sizeof(int *)\"",[39,7611,2497],{"class":45},[39,7613,7614],{"class":53},"(p)",[39,7616,234],{"class":45},[39,7618,2367],{"class":53},[39,7620,7621],{"class":128},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[39,7623,7624,7626,7628,7630,7632,7634,7636,7638,7640,7642,7645],{"class":41,"line":202},[39,7625,231],{"class":53},[39,7627,234],{"class":45},[39,7629,7609],{"class":237},[39,7631,2497],{"class":45},[39,7633,54],{"class":53},[39,7635,46],{"class":45},[39,7637,7594],{"class":45},[39,7639,1692],{"class":53},[39,7641,234],{"class":45},[39,7643,7644],{"class":53},"endl",[39,7646,7647],{"class":128},"  \u002F\u002F4字节(32位的话)\n",[39,7649,7650,7652,7654,7657,7659,7661,7663,7665,7667,7669,7671],{"class":41,"line":207},[39,7651,231],{"class":53},[39,7653,234],{"class":45},[39,7655,7656],{"class":237},"\"sizeof(char *)\"",[39,7658,2497],{"class":45},[39,7660,54],{"class":53},[39,7662,1364],{"class":45},[39,7664,7594],{"class":45},[39,7666,1692],{"class":53},[39,7668,234],{"class":45},[39,7670,2367],{"class":53},[39,7672,7673],{"class":128}," \u002F\u002F4字节(32位的话)\n",[39,7675,7676],{"class":41,"line":212},[39,7677,115],{"class":53},[14,7679,7681],{"id":7680},"_33空指针","3.3空指针",[19,7683,7684],{},"空指针：指针变量指向内存中编号为0的空间",[19,7686,7687],{},"用途：初始化指针变量",[19,7689,7690],{},"注意：空指针指向的内存是不可以访问的",[30,7692,7694],{"className":32,"code":7693,"language":34,"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",[26,7695,7696,7704,7708,7713,7727,7732,7747,7752],{"__ignoreMap":35},[39,7697,7698,7700,7702],{"class":41,"line":42},[39,7699,46],{"class":45},[39,7701,217],{"class":49},[39,7703,537],{"class":53},[39,7705,7706],{"class":41,"line":92},[39,7707,542],{"class":53},[39,7709,7710],{"class":41,"line":112},[39,7711,7712],{"class":128},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[39,7714,7715,7717,7719,7721,7723,7725],{"class":41,"line":118},[39,7716,1112],{"class":45},[39,7718,7594],{"class":45},[39,7720,19],{"class":53},[39,7722,1117],{"class":45},[39,7724,3486],{"class":74},[39,7726,318],{"class":53},[39,7728,7729],{"class":41,"line":125},[39,7730,7731],{"class":128},"    \u002F\u002F2.空指针不能进行访问\n",[39,7733,7734,7736,7738,7740,7742,7744],{"class":41,"line":132},[39,7735,7479],{"class":45},[39,7737,19],{"class":53},[39,7739,1117],{"class":45},[39,7741,278],{"class":74},[39,7743,1324],{"class":53},[39,7745,7746],{"class":128},"\u002F\u002F直接报错，压根不能访问\n",[39,7748,7749],{"class":41,"line":138},[39,7750,7751],{"class":128},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[39,7753,7754],{"class":41,"line":169},[39,7755,115],{"class":53},[14,7757,7759],{"id":7758},"_34野指针","3.4野指针",[19,7761,7762],{},[350,7763,7764],{},"指针变量指向非法的内存空间",[30,7766,7768],{"className":32,"code":7767,"language":34,"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",[26,7769,7770,7778,7782,7811,7816,7828],{"__ignoreMap":35},[39,7771,7772,7774,7776],{"class":41,"line":42},[39,7773,46],{"class":45},[39,7775,217],{"class":49},[39,7777,537],{"class":53},[39,7779,7780],{"class":41,"line":92},[39,7781,542],{"class":53},[39,7783,7784,7786,7788,7790,7792,7794,7796,7798,7800,7803,7806,7808],{"class":41,"line":112},[39,7785,1112],{"class":45},[39,7787,7594],{"class":45},[39,7789,19],{"class":53},[39,7791,1117],{"class":45},[39,7793,54],{"class":53},[39,7795,46],{"class":45},[39,7797,7594],{"class":45},[39,7799,1692],{"class":53},[39,7801,7802],{"class":45},"0x",[39,7804,7805],{"class":74},"1100",[39,7807,1324],{"class":53},[39,7809,7810],{"class":128}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[39,7812,7813],{"class":41,"line":118},[39,7814,7815],{"class":128},"    \u002F\u002F访问野指针报错\n",[39,7817,7818,7820,7822,7824,7826],{"class":41,"line":125},[39,7819,2673],{"class":53},[39,7821,7495],{"class":45},[39,7823,19],{"class":53},[39,7825,234],{"class":45},[39,7827,2324],{"class":53},[39,7829,7830],{"class":41,"line":132},[39,7831,115],{"class":53},[19,7833,7834],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7836,7838],{"id":7837},"_35const修饰指针","3.5const修饰指针",[19,7840,7841],{},"三种情况：",[489,7843,7844,7847,7850],{},[331,7845,7846],{},"const修饰指针 常量指针",[331,7848,7849],{},"const修饰常量 指针常量",[331,7851,7852],{},"const即修饰指针，又修饰常量",[328,7854,7855],{},[331,7856,7857],{},"常量指针",[30,7859,7861],{"className":32,"code":7860,"language":34,"meta":35,"style":35},"const int *p=&a;\n",[26,7862,7863],{"__ignoreMap":35},[39,7864,7865,7867,7869,7871,7873,7875],{"class":41,"line":42},[39,7866,960],{"class":45},[39,7868,963],{"class":45},[39,7870,7594],{"class":45},[39,7872,19],{"class":53},[39,7874,7415],{"class":45},[39,7876,7273],{"class":53},[19,7878,7879],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[328,7881,7882],{"start":92},[331,7883,7884],{},"指针常量",[30,7886,7888],{"className":32,"code":7887,"language":34,"meta":35,"style":35},"int *const p=&a;\n",[26,7889,7890],{"__ignoreMap":35},[39,7891,7892,7894,7897,7900,7902],{"class":41,"line":42},[39,7893,46],{"class":45},[39,7895,7896],{"class":45}," *const",[39,7898,7899],{"class":53}," p",[39,7901,7415],{"class":45},[39,7903,7273],{"class":53},[19,7905,7906],{},"指针的指向不可以改，指针指向的值可以改",[328,7908,7909],{"start":112},[331,7910,7852],{},[30,7912,7914],{"className":32,"code":7913,"language":34,"meta":35,"style":35},"const int *const p=&a;\n",[26,7915,7916],{"__ignoreMap":35},[39,7917,7918,7920,7922,7924,7926,7928],{"class":41,"line":42},[39,7919,960],{"class":45},[39,7921,963],{"class":45},[39,7923,7896],{"class":45},[39,7925,7899],{"class":53},[39,7927,7415],{"class":45},[39,7929,7273],{"class":53},[19,7931,7932],{},"指针的指向和指针指向的值都不可以改变",[14,7934,7936],{"id":7935},"_36指针和数组","3.6指针和数组",[30,7938,7940],{"className":32,"code":7939,"language":34,"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",[26,7941,7942,7950,7954,7959,8013,8034,8050,8066,8077,8094,8099,8113,8139,8143,8155,8164,8168],{"__ignoreMap":35},[39,7943,7944,7946,7948],{"class":41,"line":42},[39,7945,46],{"class":45},[39,7947,217],{"class":49},[39,7949,537],{"class":53},[39,7951,7952],{"class":41,"line":92},[39,7953,542],{"class":53},[39,7955,7956],{"class":41,"line":112},[39,7957,7958],{"class":128},"    \u002F\u002F利用指针访问数组中的元素\n",[39,7960,7961,7963,7965,7967,7969,7971,7973,7975,7977,7979,7981,7983,7985,7987,7989,7991,7993,7995,7997,7999,8001,8003,8005,8007,8009,8011],{"class":41,"line":118},[39,7962,1112],{"class":45},[39,7964,5045],{"class":53},[39,7966,423],{"class":74},[39,7968,2200],{"class":53},[39,7970,1117],{"class":45},[39,7972,2156],{"class":53},[39,7974,1483],{"class":74},[39,7976,426],{"class":53},[39,7978,1345],{"class":74},[39,7980,426],{"class":53},[39,7982,1339],{"class":74},[39,7984,426],{"class":53},[39,7986,1558],{"class":74},[39,7988,426],{"class":53},[39,7990,1583],{"class":74},[39,7992,426],{"class":53},[39,7994,1608],{"class":74},[39,7996,426],{"class":53},[39,7998,1633],{"class":74},[39,8000,426],{"class":53},[39,8002,1658],{"class":74},[39,8004,426],{"class":53},[39,8006,1683],{"class":74},[39,8008,426],{"class":53},[39,8010,423],{"class":74},[39,8012,5078],{"class":53},[39,8014,8015,8017,8019,8022,8024,8026,8028,8030,8032],{"class":41,"line":125},[39,8016,2673],{"class":53},[39,8018,234],{"class":45},[39,8020,8021],{"class":237},"\"数组的第一个元素为：\"",[39,8023,234],{"class":45},[39,8025,4989],{"class":53},[39,8027,1457],{"class":74},[39,8029,2200],{"class":53},[39,8031,234],{"class":45},[39,8033,2324],{"class":53},[39,8035,8036,8038,8040,8042,8044,8047],{"class":41,"line":132},[39,8037,1112],{"class":45},[39,8039,7594],{"class":45},[39,8041,19],{"class":53},[39,8043,1117],{"class":45},[39,8045,8046],{"class":53},"arr;",[39,8048,8049],{"class":128},"\u002F\u002F注意数才要加取地址符号&\n",[39,8051,8052,8054,8056,8058,8060,8062,8064],{"class":41,"line":138},[39,8053,2673],{"class":53},[39,8055,234],{"class":45},[39,8057,8021],{"class":237},[39,8059,7495],{"class":45},[39,8061,19],{"class":53},[39,8063,234],{"class":45},[39,8065,2324],{"class":53},[39,8067,8068,8070,8072,8074],{"class":41,"line":169},[39,8069,7412],{"class":53},[39,8071,3389],{"class":45},[39,8073,1324],{"class":53},[39,8075,8076],{"class":128}," \u002F\u002F让指针向后偏移4个字节\n",[39,8078,8079,8081,8083,8086,8088,8090,8092],{"class":41,"line":190},[39,8080,2673],{"class":53},[39,8082,234],{"class":45},[39,8084,8085],{"class":237},"\"数组的第二个元素为：\"",[39,8087,7495],{"class":45},[39,8089,19],{"class":53},[39,8091,234],{"class":45},[39,8093,2324],{"class":53},[39,8095,8096],{"class":41,"line":202},[39,8097,8098],{"class":128},"    \u002F\u002F利用指针遍历数组\n",[39,8100,8101,8103,8105,8108,8110],{"class":41,"line":207},[39,8102,1112],{"class":45},[39,8104,7594],{"class":45},[39,8106,8107],{"class":53},"p2",[39,8109,1117],{"class":45},[39,8111,8112],{"class":53},"arr;\n",[39,8114,8115,8117,8119,8121,8123,8125,8127,8129,8131,8133,8135,8137],{"class":41,"line":212},[39,8116,4284],{"class":45},[39,8118,2772],{"class":53},[39,8120,46],{"class":45},[39,8122,4115],{"class":53},[39,8124,1117],{"class":45},[39,8126,1457],{"class":74},[39,8128,4122],{"class":53},[39,8130,2170],{"class":45},[39,8132,423],{"class":74},[39,8134,4122],{"class":53},[39,8136,3389],{"class":45},[39,8138,574],{"class":53},[39,8140,8141],{"class":41,"line":223},[39,8142,3128],{"class":53},[39,8144,8145,8147,8149,8151,8153],{"class":41,"line":228},[39,8146,4534],{"class":53},[39,8148,7495],{"class":45},[39,8150,8107],{"class":53},[39,8152,234],{"class":45},[39,8154,2324],{"class":53},[39,8156,8157,8160,8162],{"class":41,"line":263},[39,8158,8159],{"class":53},"        p2",[39,8161,3389],{"class":45},[39,8163,318],{"class":53},[39,8165,8166],{"class":41,"line":287},[39,8167,3284],{"class":53},[39,8169,8170],{"class":41,"line":292},[39,8171,115],{"class":53},[14,8173,8175],{"id":8174},"_37指针和函数","3.7指针和函数",[19,8177,8178],{},"利用指针做函数参数，可以修改实参的值",[19,8180,8181],{},"值传递：只改变形参，不改变实参",[19,8183,8184],{},"地址传递：",[30,8186,8188],{"className":32,"code":8187,"language":34,"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",[26,8189,8190,8215,8219,8231,8242,8252,8256,8264,8268,8280,8292,8297,8313,8328,8343],{"__ignoreMap":35},[39,8191,8192,8194,8196,8198,8200,8202,8205,8207,8209,8211,8213],{"class":41,"line":42},[39,8193,370],{"class":45},[39,8195,6445],{"class":49},[39,8197,54],{"class":53},[39,8199,46],{"class":45},[39,8201,7594],{"class":45},[39,8203,8204],{"class":59},"p1",[39,8206,426],{"class":53},[39,8208,46],{"class":45},[39,8210,7594],{"class":45},[39,8212,8107],{"class":59},[39,8214,574],{"class":53},[39,8216,8217],{"class":41,"line":92},[39,8218,542],{"class":53},[39,8220,8221,8223,8225,8228],{"class":41,"line":112},[39,8222,1112],{"class":45},[39,8224,5336],{"class":53},[39,8226,8227],{"class":45},"=*",[39,8229,8230],{"class":53},"p1;\n",[39,8232,8233,8235,8237,8239],{"class":41,"line":118},[39,8234,7479],{"class":45},[39,8236,8204],{"class":53},[39,8238,8227],{"class":45},[39,8240,8241],{"class":53},"p2;\n",[39,8243,8244,8246,8248,8250],{"class":41,"line":125},[39,8245,7479],{"class":45},[39,8247,8107],{"class":53},[39,8249,1117],{"class":45},[39,8251,5361],{"class":53},[39,8253,8254],{"class":41,"line":132},[39,8255,115],{"class":53},[39,8257,8258,8260,8262],{"class":41,"line":138},[39,8259,46],{"class":45},[39,8261,217],{"class":49},[39,8263,537],{"class":53},[39,8265,8266],{"class":41,"line":169},[39,8267,542],{"class":53},[39,8269,8270,8272,8274,8276,8278],{"class":41,"line":190},[39,8271,1112],{"class":45},[39,8273,60],{"class":53},[39,8275,1117],{"class":45},[39,8277,423],{"class":74},[39,8279,318],{"class":53},[39,8281,8282,8284,8286,8288,8290],{"class":41,"line":202},[39,8283,1112],{"class":45},[39,8285,68],{"class":53},[39,8287,1117],{"class":45},[39,8289,248],{"class":74},[39,8291,318],{"class":53},[39,8293,8294],{"class":41,"line":207},[39,8295,8296],{"class":128},"    \u002F\u002F地址传递\n",[39,8298,8299,8301,8303,8305,8308,8310],{"class":41,"line":212},[39,8300,6639],{"class":49},[39,8302,54],{"class":53},[39,8304,1617],{"class":45},[39,8306,8307],{"class":53},"a,",[39,8309,1617],{"class":45},[39,8311,8312],{"class":53},"b);\n",[39,8314,8315,8317,8319,8321,8323,8325],{"class":41,"line":223},[39,8316,2673],{"class":53},[39,8318,234],{"class":45},[39,8320,922],{"class":53},[39,8322,234],{"class":45},[39,8324,2367],{"class":53},[39,8326,8327],{"class":128},"\u002F\u002F20\n",[39,8329,8330,8332,8334,8336,8338,8340],{"class":41,"line":228},[39,8331,2673],{"class":53},[39,8333,234],{"class":45},[39,8335,1528],{"class":53},[39,8337,234],{"class":45},[39,8339,2367],{"class":53},[39,8341,8342],{"class":128},"\u002F\u002F10\n",[39,8344,8345],{"class":41,"line":263},[39,8346,115],{"class":53},[19,8348,8349],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8351,8353],{"id":8352},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8355,8356],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8358,8359,8360,8362],{},"例如数组：int arr",[39,8361,423],{},"={4,3,6,9,1,2,10,8,7,5}",[30,8364,8366],{"className":32,"code":8365,"language":34,"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",[26,8367,8368,8374,8384,8408,8412,8443,8447,8481,8485,8503,8507,8518,8533,8548,8552,8556,8560,8564,8568,8576,8580,8585,8639,8651,8663,8668,8676,8680,8685,8710,8714,8729,8738,8742],{"__ignoreMap":35},[39,8369,8370,8372],{"class":41,"line":42},[39,8371,3051],{"class":45},[39,8373,3054],{"class":237},[39,8375,8376,8378,8380,8382],{"class":41,"line":92},[39,8377,3059],{"class":45},[39,8379,3062],{"class":45},[39,8381,3065],{"class":49},[39,8383,318],{"class":53},[39,8385,8386,8388,8391,8393,8395,8397,8399,8401,8403,8406],{"class":41,"line":112},[39,8387,370],{"class":45},[39,8389,8390],{"class":49}," bubbleSort",[39,8392,54],{"class":53},[39,8394,46],{"class":45},[39,8396,7594],{"class":45},[39,8398,19],{"class":59},[39,8400,426],{"class":53},[39,8402,46],{"class":45},[39,8404,8405],{"class":59}," len",[39,8407,574],{"class":53},[39,8409,8410],{"class":41,"line":118},[39,8411,542],{"class":53},[39,8413,8414,8416,8418,8420,8422,8424,8426,8428,8430,8433,8435,8437,8439,8441],{"class":41,"line":125},[39,8415,4284],{"class":45},[39,8417,54],{"class":53},[39,8419,46],{"class":45},[39,8421,4115],{"class":53},[39,8423,1117],{"class":45},[39,8425,1457],{"class":74},[39,8427,4122],{"class":53},[39,8429,2170],{"class":45},[39,8431,8432],{"class":53},"len",[39,8434,1793],{"class":45},[39,8436,1483],{"class":74},[39,8438,4122],{"class":53},[39,8440,3389],{"class":45},[39,8442,574],{"class":53},[39,8444,8445],{"class":41,"line":132},[39,8446,3128],{"class":53},[39,8448,8449,8451,8453,8455,8457,8459,8461,8463,8465,8467,8469,8471,8473,8475,8477,8479],{"class":41,"line":138},[39,8450,4486],{"class":45},[39,8452,54],{"class":53},[39,8454,46],{"class":45},[39,8456,4493],{"class":53},[39,8458,1117],{"class":45},[39,8460,1457],{"class":74},[39,8462,4500],{"class":53},[39,8464,2170],{"class":45},[39,8466,8432],{"class":53},[39,8468,1793],{"class":45},[39,8470,1704],{"class":53},[39,8472,1793],{"class":45},[39,8474,1483],{"class":74},[39,8476,4500],{"class":53},[39,8478,3389],{"class":45},[39,8480,574],{"class":53},[39,8482,8483],{"class":41,"line":169},[39,8484,3603],{"class":53},[39,8486,8487,8489,8492,8494,8497,8499,8501],{"class":41,"line":190},[39,8488,5723],{"class":45},[39,8490,8491],{"class":53},"(p[j]",[39,8493,2220],{"class":45},[39,8495,8496],{"class":53},"p[j",[39,8498,101],{"class":45},[39,8500,1483],{"class":74},[39,8502,5738],{"class":53},[39,8504,8505],{"class":41,"line":202},[39,8506,5743],{"class":53},[39,8508,8509,8511,8513,8515],{"class":41,"line":207},[39,8510,5748],{"class":45},[39,8512,5336],{"class":53},[39,8514,1117],{"class":45},[39,8516,8517],{"class":53},"p[j];\n",[39,8519,8520,8523,8525,8527,8529,8531],{"class":41,"line":212},[39,8521,8522],{"class":53},"                p[j]",[39,8524,1117],{"class":45},[39,8526,8496],{"class":53},[39,8528,101],{"class":45},[39,8530,1483],{"class":74},[39,8532,5771],{"class":53},[39,8534,8535,8538,8540,8542,8544,8546],{"class":41,"line":223},[39,8536,8537],{"class":53},"                p[j",[39,8539,101],{"class":45},[39,8541,1483],{"class":74},[39,8543,2200],{"class":53},[39,8545,1117],{"class":45},[39,8547,5361],{"class":53},[39,8549,8550],{"class":41,"line":228},[39,8551,5791],{"class":53},[39,8553,8554],{"class":41,"line":263},[39,8555,3622],{"class":53},[39,8557,8558],{"class":41,"line":287},[39,8559,3284],{"class":53},[39,8561,8562],{"class":41,"line":292},[39,8563,115],{"class":53},[39,8565,8566],{"class":41,"line":305},[39,8567,122],{"emptyLinePlaceholder":121},[39,8569,8570,8572,8574],{"class":41,"line":310},[39,8571,46],{"class":45},[39,8573,217],{"class":49},[39,8575,537],{"class":53},[39,8577,8578],{"class":41,"line":321},[39,8579,542],{"class":53},[39,8581,8582],{"class":41,"line":713},[39,8583,8584],{"class":128},"    \u002F\u002F 1.创建数组\n",[39,8586,8587,8589,8591,8593,8595,8597,8599,8601,8603,8605,8607,8609,8611,8613,8615,8617,8619,8621,8623,8625,8627,8629,8631,8633,8635,8637],{"class":41,"line":718},[39,8588,1112],{"class":45},[39,8590,5045],{"class":53},[39,8592,423],{"class":74},[39,8594,2200],{"class":53},[39,8596,1117],{"class":45},[39,8598,2156],{"class":53},[39,8600,1558],{"class":74},[39,8602,426],{"class":53},[39,8604,1339],{"class":74},[39,8606,426],{"class":53},[39,8608,1608],{"class":74},[39,8610,426],{"class":53},[39,8612,1683],{"class":74},[39,8614,426],{"class":53},[39,8616,1483],{"class":74},[39,8618,426],{"class":53},[39,8620,1345],{"class":74},[39,8622,426],{"class":53},[39,8624,423],{"class":74},[39,8626,426],{"class":53},[39,8628,1658],{"class":74},[39,8630,426],{"class":53},[39,8632,1633],{"class":74},[39,8634,426],{"class":53},[39,8636,1583],{"class":74},[39,8638,5078],{"class":53},[39,8640,8641,8643,8645,8647,8649],{"class":41,"line":723},[39,8642,1112],{"class":45},[39,8644,8405],{"class":53},[39,8646,1117],{"class":45},[39,8648,423],{"class":74},[39,8650,318],{"class":53},[39,8652,8653,8655,8657,8659,8661],{"class":41,"line":729},[39,8654,1112],{"class":45},[39,8656,7594],{"class":45},[39,8658,19],{"class":53},[39,8660,1117],{"class":45},[39,8662,8112],{"class":53},[39,8664,8665],{"class":41,"line":735},[39,8666,8667],{"class":128},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[39,8669,8670,8673],{"class":41,"line":741},[39,8671,8672],{"class":49},"    bubbleSort",[39,8674,8675],{"class":53},"(p,len);\n",[39,8677,8678],{"class":41,"line":747},[39,8679,122],{"emptyLinePlaceholder":121},[39,8681,8682],{"class":41,"line":753},[39,8683,8684],{"class":128},"    \u002F\u002F 3.打印排序后的数组\n",[39,8686,8687,8689,8691,8693,8695,8697,8699,8701,8703,8706,8708],{"class":41,"line":758},[39,8688,4284],{"class":45},[39,8690,2772],{"class":53},[39,8692,46],{"class":45},[39,8694,4115],{"class":53},[39,8696,1117],{"class":45},[39,8698,1457],{"class":74},[39,8700,4297],{"class":53},[39,8702,2170],{"class":45},[39,8704,8705],{"class":53},"len; i",[39,8707,3389],{"class":45},[39,8709,574],{"class":53},[39,8711,8712],{"class":41,"line":763},[39,8713,3128],{"class":53},[39,8715,8716,8718,8720,8722,8724,8727],{"class":41,"line":772},[39,8717,4534],{"class":53},[39,8719,7495],{"class":45},[39,8721,19],{"class":53},[39,8723,234],{"class":45},[39,8725,8726],{"class":237},"\"\"",[39,8728,318],{"class":53},[39,8730,8731,8734,8736],{"class":41,"line":777},[39,8732,8733],{"class":53},"        p",[39,8735,3389],{"class":45},[39,8737,318],{"class":53},[39,8739,8740],{"class":41,"line":785},[39,8741,3284],{"class":53},[39,8743,8744],{"class":41,"line":796},[39,8745,115],{"class":53},[1192,8747,8748],{},"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":92,"depth":92,"links":8750},[8751,8752,8753,8754,8755,8756,8757,8758],{"id":7359,"depth":92,"text":7360},{"id":7525,"depth":92,"text":7526},{"id":7680,"depth":92,"text":7681},{"id":7758,"depth":92,"text":7759},{"id":7837,"depth":92,"text":7838},{"id":7935,"depth":92,"text":7936},{"id":8174,"depth":92,"text":8175},{"id":8352,"depth":92,"text":8353},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7348,"description":7356},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8765,"title":8766,"body":8767,"description":8774,"extension":1203,"meta":11739,"navigation":121,"path":11740,"seo":11741,"stem":11742,"__hash__":11743},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8768,"toc":11730},[8769,8772,8775,8779,8782,8785,8796,9129,9132,9136,9139,9146,9401,9405,9408,9411,9566,9570,9573,9576,9782,9786,9789,10091,10094,10102,10106,10109,10260,10262,10273,10330,10334,10339,10996,11004,11007,11099,11102,11721,11727],[10,8770,8766],{"id":8771},"_4结构体",[19,8773,8774],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8776,8778],{"id":8777},"_41结构体定义与使用","4.1结构体定义与使用",[19,8780,8781],{},"语法：struct 结构体名 {结构体成员列表}；",[19,8783,8784],{},"通过结构体创建变量的方式：",[489,8786,8787,8790,8793],{},[331,8788,8789],{},"struct 结构体名 变量名",[331,8791,8792],{},"struct 结构体名 变量名={成员1值，成员2值...}",[331,8794,8795],{},"定义结构体时顺便创建变量",[30,8797,8799],{"className":32,"code":8798,"language":34,"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",[26,8800,8801,8807,8817,8824,8829,8837,8841,8846,8850,8855,8860,8865,8872,8877,8884,8888,8895,8899,8903,8907,8911,8915,8919,8925,8929,8935,8943,8951,8955,8960,8965,8976,8981,8993,9004,9015,9020,9043,9047,9052,9078,9082,9088,9100,9112,9124],{"__ignoreMap":35},[39,8802,8803,8805],{"class":41,"line":42},[39,8804,3051],{"class":45},[39,8806,3054],{"class":237},[39,8808,8809,8811,8813,8815],{"class":41,"line":92},[39,8810,3059],{"class":45},[39,8812,3062],{"class":45},[39,8814,3065],{"class":49},[39,8816,318],{"class":53},[39,8818,8819,8821],{"class":41,"line":112},[39,8820,3051],{"class":45},[39,8822,8823],{"class":237},"\u003Cstring>\n",[39,8825,8826],{"class":41,"line":118},[39,8827,8828],{"class":128},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[39,8830,8831,8834],{"class":41,"line":125},[39,8832,8833],{"class":45},"struct",[39,8835,8836],{"class":49}," Student\n",[39,8838,8839],{"class":41,"line":132},[39,8840,542],{"class":53},[39,8842,8843],{"class":41,"line":138},[39,8844,8845],{"class":128},"    \u002F\u002F成员列表\n",[39,8847,8848],{"class":41,"line":169},[39,8849,122],{"emptyLinePlaceholder":121},[39,8851,8852],{"class":41,"line":190},[39,8853,8854],{"class":128},"    \u002F\u002F姓名\n",[39,8856,8857],{"class":41,"line":202},[39,8858,8859],{"class":53},"    string name;\n",[39,8861,8862],{"class":41,"line":207},[39,8863,8864],{"class":128},"    \u002F\u002F年龄\n",[39,8866,8867,8869],{"class":41,"line":212},[39,8868,1112],{"class":45},[39,8870,8871],{"class":53}," age;\n",[39,8873,8874],{"class":41,"line":223},[39,8875,8876],{"class":128},"    \u002F\u002F分数\n",[39,8878,8879,8881],{"class":41,"line":228},[39,8880,1112],{"class":45},[39,8882,8883],{"class":53}," score;\n",[39,8885,8886],{"class":41,"line":263},[39,8887,5078],{"class":53},[39,8889,8890,8892],{"class":41,"line":287},[39,8891,8833],{"class":45},[39,8893,8894],{"class":49}," School\n",[39,8896,8897],{"class":41,"line":292},[39,8898,542],{"class":53},[39,8900,8901],{"class":41,"line":305},[39,8902,8845],{"class":128},[39,8904,8905],{"class":41,"line":310},[39,8906,122],{"emptyLinePlaceholder":121},[39,8908,8909],{"class":41,"line":321},[39,8910,8854],{"class":128},[39,8912,8913],{"class":41,"line":713},[39,8914,8859],{"class":53},[39,8916,8917],{"class":41,"line":718},[39,8918,8864],{"class":128},[39,8920,8921,8923],{"class":41,"line":723},[39,8922,1112],{"class":45},[39,8924,8871],{"class":53},[39,8926,8927],{"class":41,"line":729},[39,8928,8876],{"class":128},[39,8930,8931,8933],{"class":41,"line":735},[39,8932,1112],{"class":45},[39,8934,8883],{"class":53},[39,8936,8937,8940],{"class":41,"line":741},[39,8938,8939],{"class":53},"} s3;",[39,8941,8942],{"class":128}," \u002F\u002F创建结构体时就创建了变量\n",[39,8944,8945,8947,8949],{"class":41,"line":747},[39,8946,46],{"class":45},[39,8948,217],{"class":49},[39,8950,537],{"class":53},[39,8952,8953],{"class":41,"line":753},[39,8954,542],{"class":53},[39,8956,8957],{"class":41,"line":758},[39,8958,8959],{"class":128},"    \u002F\u002F2.通过学生类型创建具体学生\n",[39,8961,8962],{"class":41,"line":763},[39,8963,8964],{"class":128},"    \u002F\u002F2.1 struct Student s1;\n",[39,8966,8967,8970,8973],{"class":41,"line":772},[39,8968,8969],{"class":45},"    struct",[39,8971,8972],{"class":49}," Student",[39,8974,8975],{"class":53}," s1;\n",[39,8977,8978],{"class":41,"line":777},[39,8979,8980],{"class":128},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[39,8982,8983,8986,8988,8991],{"class":41,"line":785},[39,8984,8985],{"class":53},"    s1.name",[39,8987,1117],{"class":45},[39,8989,8990],{"class":237},"\"张三\"",[39,8992,318],{"class":53},[39,8994,8995,8998,9000,9002],{"class":41,"line":796},[39,8996,8997],{"class":53},"    s1.age",[39,8999,1117],{"class":45},[39,9001,1911],{"class":74},[39,9003,318],{"class":53},[39,9005,9006,9009,9011,9013],{"class":41,"line":808},[39,9007,9008],{"class":53},"    s1.score",[39,9010,1117],{"class":45},[39,9012,1519],{"class":74},[39,9014,318],{"class":53},[39,9016,9017],{"class":41,"line":823},[39,9018,9019],{"class":128},"    \u002F\u002F输出结果\n",[39,9021,9022,9024,9026,9029,9031,9034,9036,9039,9041],{"class":41,"line":839},[39,9023,2673],{"class":53},[39,9025,234],{"class":45},[39,9027,9028],{"class":53},"s1.name",[39,9030,234],{"class":45},[39,9032,9033],{"class":53},"s1.age",[39,9035,234],{"class":45},[39,9037,9038],{"class":53},"s1.score",[39,9040,234],{"class":45},[39,9042,2324],{"class":53},[39,9044,9045],{"class":41,"line":845},[39,9046,122],{"emptyLinePlaceholder":121},[39,9048,9049],{"class":41,"line":856},[39,9050,9051],{"class":128},"    \u002F\u002F2.2 struct Student s2={...}\n",[39,9053,9054,9056,9058,9061,9063,9065,9068,9070,9072,9074,9076],{"class":41,"line":861},[39,9055,8969],{"class":45},[39,9057,8972],{"class":49},[39,9059,9060],{"class":53}," s2",[39,9062,1117],{"class":45},[39,9064,2156],{"class":53},[39,9066,9067],{"class":237},"\"王五\"",[39,9069,426],{"class":53},[39,9071,1911],{"class":74},[39,9073,426],{"class":53},[39,9075,1519],{"class":74},[39,9077,5078],{"class":53},[39,9079,9080],{"class":41,"line":870},[39,9081,122],{"emptyLinePlaceholder":121},[39,9083,9085],{"class":41,"line":9084},42,[39,9086,9087],{"class":128},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[39,9089,9091,9094,9096,9098],{"class":41,"line":9090},43,[39,9092,9093],{"class":53},"    s3.name",[39,9095,1117],{"class":45},[39,9097,4761],{"class":237},[39,9099,318],{"class":53},[39,9101,9103,9106,9108,9110],{"class":41,"line":9102},44,[39,9104,9105],{"class":53},"    s3.age",[39,9107,1117],{"class":45},[39,9109,1911],{"class":74},[39,9111,318],{"class":53},[39,9113,9115,9118,9120,9122],{"class":41,"line":9114},45,[39,9116,9117],{"class":53},"    s3.score",[39,9119,1117],{"class":45},[39,9121,248],{"class":74},[39,9123,318],{"class":53},[39,9125,9127],{"class":41,"line":9126},46,[39,9128,115],{"class":53},[19,9130,9131],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9133,9135],{"id":9134},"_42结构体数组","4.2结构体数组",[19,9137,9138],{},"将自定义的结构体放入到数组中方便维护",[19,9140,9141,9142,9145],{},"语法：struct 结构体名 数组名",[39,9143,9144],{},"元素个数","={ {}，{},...{} };",[30,9147,9149],{"className":32,"code":9148,"language":34,"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",[26,9150,9151,9157,9167,9173,9178,9184,9188,9192,9198,9204,9208,9212,9220,9224,9229,9244,9248,9264,9280,9284,9289,9305,9320,9335,9340,9366,9370,9393,9397],{"__ignoreMap":35},[39,9152,9153,9155],{"class":41,"line":42},[39,9154,3051],{"class":45},[39,9156,3054],{"class":237},[39,9158,9159,9161,9163,9165],{"class":41,"line":92},[39,9160,3059],{"class":45},[39,9162,3062],{"class":45},[39,9164,3065],{"class":49},[39,9166,318],{"class":53},[39,9168,9169,9171],{"class":41,"line":112},[39,9170,3051],{"class":45},[39,9172,8823],{"class":237},[39,9174,9175],{"class":41,"line":118},[39,9176,9177],{"class":128},"\u002F\u002F1.定义结构体\n",[39,9179,9180,9182],{"class":41,"line":125},[39,9181,8833],{"class":45},[39,9183,8836],{"class":49},[39,9185,9186],{"class":41,"line":132},[39,9187,542],{"class":53},[39,9189,9190],{"class":41,"line":138},[39,9191,8859],{"class":53},[39,9193,9194,9196],{"class":41,"line":169},[39,9195,1112],{"class":45},[39,9197,8871],{"class":53},[39,9199,9200,9202],{"class":41,"line":190},[39,9201,1112],{"class":45},[39,9203,8883],{"class":53},[39,9205,9206],{"class":41,"line":202},[39,9207,122],{"emptyLinePlaceholder":121},[39,9209,9210],{"class":41,"line":207},[39,9211,5078],{"class":53},[39,9213,9214,9216,9218],{"class":41,"line":212},[39,9215,46],{"class":45},[39,9217,217],{"class":49},[39,9219,537],{"class":53},[39,9221,9222],{"class":41,"line":223},[39,9223,542],{"class":53},[39,9225,9226],{"class":41,"line":228},[39,9227,9228],{"class":128},"    \u002F\u002F2.创建结构体数组\n",[39,9230,9231,9233,9235,9238,9240,9242],{"class":41,"line":263},[39,9232,8969],{"class":45},[39,9234,8972],{"class":49},[39,9236,9237],{"class":53}," stuArray[",[39,9239,1345],{"class":74},[39,9241,2200],{"class":53},[39,9243,5989],{"class":45},[39,9245,9246],{"class":41,"line":287},[39,9247,3128],{"class":53},[39,9249,9250,9252,9254,9256,9258,9260,9262],{"class":41,"line":292},[39,9251,5998],{"class":53},[39,9253,8990],{"class":237},[39,9255,426],{"class":53},[39,9257,1911],{"class":74},[39,9259,426],{"class":53},[39,9261,278],{"class":74},[39,9263,6011],{"class":53},[39,9265,9266,9268,9270,9272,9274,9276,9278],{"class":41,"line":305},[39,9267,5998],{"class":53},[39,9269,4761],{"class":237},[39,9271,426],{"class":53},[39,9273,1836],{"class":74},[39,9275,426],{"class":53},[39,9277,1836],{"class":74},[39,9279,115],{"class":53},[39,9281,9282],{"class":41,"line":310},[39,9283,3284],{"class":53},[39,9285,9286],{"class":41,"line":321},[39,9287,9288],{"class":128},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[39,9290,9291,9294,9296,9299,9301,9303],{"class":41,"line":713},[39,9292,9293],{"class":53},"    stuArray[",[39,9295,1483],{"class":74},[39,9297,9298],{"class":53},"].name",[39,9300,1117],{"class":45},[39,9302,4784],{"class":237},[39,9304,318],{"class":53},[39,9306,9307,9309,9311,9314,9316,9318],{"class":41,"line":718},[39,9308,9293],{"class":53},[39,9310,1483],{"class":74},[39,9312,9313],{"class":53},"].age",[39,9315,1117],{"class":45},[39,9317,1345],{"class":74},[39,9319,318],{"class":53},[39,9321,9322,9324,9326,9329,9331,9333],{"class":41,"line":723},[39,9323,9293],{"class":53},[39,9325,1483],{"class":74},[39,9327,9328],{"class":53},"].score",[39,9330,1117],{"class":45},[39,9332,1345],{"class":74},[39,9334,318],{"class":53},[39,9336,9337],{"class":41,"line":729},[39,9338,9339],{"class":128},"    \u002F\u002F4.遍历结构体数组\n",[39,9341,9342,9344,9346,9348,9350,9352,9354,9356,9358,9360,9362,9364],{"class":41,"line":735},[39,9343,4284],{"class":45},[39,9345,2772],{"class":53},[39,9347,46],{"class":45},[39,9349,4115],{"class":53},[39,9351,1117],{"class":45},[39,9353,1457],{"class":74},[39,9355,4122],{"class":53},[39,9357,2170],{"class":45},[39,9359,1345],{"class":74},[39,9361,4122],{"class":53},[39,9363,3389],{"class":45},[39,9365,574],{"class":53},[39,9367,9368],{"class":41,"line":741},[39,9369,3128],{"class":53},[39,9371,9372,9374,9376,9379,9381,9384,9386,9389,9391],{"class":41,"line":747},[39,9373,4534],{"class":53},[39,9375,234],{"class":45},[39,9377,9378],{"class":53},"stuArray[i].name",[39,9380,234],{"class":45},[39,9382,9383],{"class":53},"stuArray[i].age",[39,9385,234],{"class":45},[39,9387,9388],{"class":53},"stuArray[i].score",[39,9390,234],{"class":45},[39,9392,2324],{"class":53},[39,9394,9395],{"class":41,"line":753},[39,9396,3284],{"class":53},[39,9398,9399],{"class":41,"line":758},[39,9400,115],{"class":53},[14,9402,9404],{"id":9403},"_43结构体指针","4.3结构体指针",[19,9406,9407],{},"作用：通过指针访问结构体中的成员",[19,9409,9410],{},"利用操作符->可以通过结构体指针访问结构体属性",[30,9412,9414],{"className":32,"code":9413,"language":34,"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",[26,9415,9416,9422,9432,9438,9442,9448,9452,9456,9462,9468,9472,9480,9484,9489,9514,9519,9534,9539,9562],{"__ignoreMap":35},[39,9417,9418,9420],{"class":41,"line":42},[39,9419,3051],{"class":45},[39,9421,3054],{"class":237},[39,9423,9424,9426,9428,9430],{"class":41,"line":92},[39,9425,3059],{"class":45},[39,9427,3062],{"class":45},[39,9429,3065],{"class":49},[39,9431,318],{"class":53},[39,9433,9434,9436],{"class":41,"line":112},[39,9435,3051],{"class":45},[39,9437,8823],{"class":237},[39,9439,9440],{"class":41,"line":118},[39,9441,9177],{"class":128},[39,9443,9444,9446],{"class":41,"line":125},[39,9445,8833],{"class":45},[39,9447,8836],{"class":49},[39,9449,9450],{"class":41,"line":132},[39,9451,542],{"class":53},[39,9453,9454],{"class":41,"line":138},[39,9455,8859],{"class":53},[39,9457,9458,9460],{"class":41,"line":169},[39,9459,1112],{"class":45},[39,9461,8871],{"class":53},[39,9463,9464,9466],{"class":41,"line":190},[39,9465,1112],{"class":45},[39,9467,8883],{"class":53},[39,9469,9470],{"class":41,"line":202},[39,9471,5078],{"class":53},[39,9473,9474,9476,9478],{"class":41,"line":207},[39,9475,46],{"class":45},[39,9477,217],{"class":49},[39,9479,537],{"class":53},[39,9481,9482],{"class":41,"line":212},[39,9483,542],{"class":53},[39,9485,9486],{"class":41,"line":223},[39,9487,9488],{"class":128},"    \u002F\u002F创建学生结构体变量\n",[39,9490,9491,9493,9495,9498,9500,9502,9504,9506,9508,9510,9512],{"class":41,"line":228},[39,9492,8969],{"class":45},[39,9494,8972],{"class":49},[39,9496,9497],{"class":53}," s",[39,9499,1117],{"class":45},[39,9501,2156],{"class":53},[39,9503,8990],{"class":237},[39,9505,426],{"class":53},[39,9507,1911],{"class":74},[39,9509,426],{"class":53},[39,9511,2832],{"class":74},[39,9513,5078],{"class":53},[39,9515,9516],{"class":41,"line":263},[39,9517,9518],{"class":128},"    \u002F\u002F通过指针指向结构体变量\n",[39,9520,9521,9523,9525,9527,9529,9531],{"class":41,"line":287},[39,9522,8969],{"class":45},[39,9524,8972],{"class":49},[39,9526,7594],{"class":45},[39,9528,19],{"class":53},[39,9530,7415],{"class":45},[39,9532,9533],{"class":53},"s\n",[39,9535,9536],{"class":41,"line":292},[39,9537,9538],{"class":128},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[39,9540,9541,9543,9545,9548,9550,9553,9555,9558,9560],{"class":41,"line":305},[39,9542,2673],{"class":53},[39,9544,234],{"class":45},[39,9546,9547],{"class":53},"p->name",[39,9549,234],{"class":45},[39,9551,9552],{"class":53},"p->age",[39,9554,234],{"class":45},[39,9556,9557],{"class":53},"p->score",[39,9559,234],{"class":45},[39,9561,2324],{"class":53},[39,9563,9564],{"class":41,"line":310},[39,9565,115],{"class":53},[14,9567,9569],{"id":9568},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,9571,9572],{},"作用：结构体中的成员可以是另一个结构体",[19,9574,9575],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[30,9577,9579],{"className":32,"code":9578,"language":34,"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",[26,9580,9581,9587,9597,9603,9608,9616,9620,9624,9630,9636,9640,9645,9652,9656,9663,9667,9673,9678,9682,9690,9694,9699,9704,9709,9720,9732,9743,9756,9767,9778],{"__ignoreMap":35},[39,9582,9583,9585],{"class":41,"line":42},[39,9584,3051],{"class":45},[39,9586,3054],{"class":237},[39,9588,9589,9591,9593,9595],{"class":41,"line":92},[39,9590,3059],{"class":45},[39,9592,3062],{"class":45},[39,9594,3065],{"class":49},[39,9596,318],{"class":53},[39,9598,9599,9601],{"class":41,"line":112},[39,9600,3051],{"class":45},[39,9602,8823],{"class":237},[39,9604,9605],{"class":41,"line":118},[39,9606,9607],{"class":128},"\u002F\u002F定义学生结构体\n",[39,9609,9610,9612,9614],{"class":41,"line":125},[39,9611,8833],{"class":45},[39,9613,8972],{"class":49},[39,9615,3760],{"class":53},[39,9617,9618],{"class":41,"line":132},[39,9619,542],{"class":53},[39,9621,9622],{"class":41,"line":138},[39,9623,8859],{"class":53},[39,9625,9626,9628],{"class":41,"line":169},[39,9627,1112],{"class":45},[39,9629,8871],{"class":53},[39,9631,9632,9634],{"class":41,"line":190},[39,9633,1112],{"class":45},[39,9635,8883],{"class":53},[39,9637,9638],{"class":41,"line":202},[39,9639,115],{"class":53},[39,9641,9642],{"class":41,"line":207},[39,9643,9644],{"class":128},"\u002F\u002F定义老师结构体\n",[39,9646,9647,9649],{"class":41,"line":212},[39,9648,8833],{"class":45},[39,9650,9651],{"class":49}," Teacher\n",[39,9653,9654],{"class":41,"line":223},[39,9655,542],{"class":53},[39,9657,9658,9660],{"class":41,"line":228},[39,9659,1112],{"class":45},[39,9661,9662],{"class":53}," id;\n",[39,9664,9665],{"class":41,"line":263},[39,9666,8859],{"class":53},[39,9668,9669,9671],{"class":41,"line":287},[39,9670,1112],{"class":45},[39,9672,8871],{"class":53},[39,9674,9675],{"class":41,"line":292},[39,9676,9677],{"class":53},"    Student stu;\n",[39,9679,9680],{"class":41,"line":305},[39,9681,115],{"class":53},[39,9683,9684,9686,9688],{"class":41,"line":310},[39,9685,46],{"class":45},[39,9687,217],{"class":49},[39,9689,7054],{"class":53},[39,9691,9692],{"class":41,"line":321},[39,9693,542],{"class":53},[39,9695,9696],{"class":41,"line":713},[39,9697,9698],{"class":128},"    \u002F\u002F结构体嵌套结构体\n",[39,9700,9701],{"class":41,"line":718},[39,9702,9703],{"class":128},"    \u002F\u002F创建老师\n",[39,9705,9706],{"class":41,"line":723},[39,9707,9708],{"class":53},"    Teacher t;\n",[39,9710,9711,9714,9716,9718],{"class":41,"line":729},[39,9712,9713],{"class":53},"    t.id",[39,9715,1117],{"class":45},[39,9717,278],{"class":74},[39,9719,318],{"class":53},[39,9721,9722,9725,9727,9730],{"class":41,"line":735},[39,9723,9724],{"class":53},"    t.name",[39,9726,1117],{"class":45},[39,9728,9729],{"class":237},"\"老王\"",[39,9731,318],{"class":53},[39,9733,9734,9737,9739,9741],{"class":41,"line":741},[39,9735,9736],{"class":53},"    t.age",[39,9738,1117],{"class":45},[39,9740,1911],{"class":74},[39,9742,318],{"class":53},[39,9744,9745,9748,9750,9753],{"class":41,"line":747},[39,9746,9747],{"class":53},"    t.stu.name",[39,9749,1117],{"class":45},[39,9751,9752],{"class":237},"\"小王\"",[39,9754,9755],{"class":53},"；\n",[39,9757,9758,9761,9763,9765],{"class":41,"line":753},[39,9759,9760],{"class":53},"    t.stu.age",[39,9762,1117],{"class":45},[39,9764,248],{"class":74},[39,9766,318],{"class":53},[39,9768,9769,9772,9774,9776],{"class":41,"line":758},[39,9770,9771],{"class":53},"    t.stu.score",[39,9773,1117],{"class":45},[39,9775,1608],{"class":74},[39,9777,318],{"class":53},[39,9779,9780],{"class":41,"line":763},[39,9781,115],{"class":53},[14,9783,9785],{"id":9784},"_45结构体做函数参数","4.5结构体做函数参数",[19,9787,9788],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[30,9790,9792],{"className":32,"code":9791,"language":34,"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",[26,9793,9794,9800,9810,9816,9822,9826,9830,9836,9842,9846,9851,9856,9873,9877,9909,9913,9918,9937,9941,9972,9976,9984,9988,9997,10009,10021,10033,10046,10054,10067,10079,10087],{"__ignoreMap":35},[39,9795,9796,9798],{"class":41,"line":42},[39,9797,3051],{"class":45},[39,9799,3054],{"class":237},[39,9801,9802,9804,9806,9808],{"class":41,"line":92},[39,9803,3059],{"class":45},[39,9805,3062],{"class":45},[39,9807,3065],{"class":49},[39,9809,318],{"class":53},[39,9811,9812,9814],{"class":41,"line":112},[39,9813,3051],{"class":45},[39,9815,8823],{"class":237},[39,9817,9818,9820],{"class":41,"line":118},[39,9819,8833],{"class":45},[39,9821,8836],{"class":49},[39,9823,9824],{"class":41,"line":125},[39,9825,542],{"class":53},[39,9827,9828],{"class":41,"line":132},[39,9829,8859],{"class":53},[39,9831,9832,9834],{"class":41,"line":138},[39,9833,1112],{"class":45},[39,9835,8871],{"class":53},[39,9837,9838,9840],{"class":41,"line":169},[39,9839,1112],{"class":45},[39,9841,8883],{"class":53},[39,9843,9844],{"class":41,"line":190},[39,9845,5078],{"class":53},[39,9847,9848],{"class":41,"line":202},[39,9849,9850],{"class":128},"\u002F\u002F打印学生信息的函数\n",[39,9852,9853],{"class":41,"line":207},[39,9854,9855],{"class":128},"\u002F\u002F值传递\n",[39,9857,9858,9860,9863,9865,9867,9869,9871],{"class":41,"line":212},[39,9859,370],{"class":45},[39,9861,9862],{"class":49}," printStudent1",[39,9864,54],{"class":53},[39,9866,8833],{"class":45},[39,9868,8972],{"class":49},[39,9870,9497],{"class":59},[39,9872,574],{"class":53},[39,9874,9875],{"class":41,"line":223},[39,9876,542],{"class":53},[39,9878,9879,9881,9883,9886,9888,9891,9893,9896,9898,9900,9902,9905,9907],{"class":41,"line":228},[39,9880,231],{"class":53},[39,9882,234],{"class":45},[39,9884,9885],{"class":53}," s.name ",[39,9887,234],{"class":45},[39,9889,9890],{"class":237}," \" \"",[39,9892,241],{"class":45},[39,9894,9895],{"class":53}," s.age ",[39,9897,234],{"class":45},[39,9899,9890],{"class":237},[39,9901,241],{"class":45},[39,9903,9904],{"class":53}," s.score ",[39,9906,234],{"class":45},[39,9908,260],{"class":53},[39,9910,9911],{"class":41,"line":263},[39,9912,115],{"class":53},[39,9914,9915],{"class":41,"line":287},[39,9916,9917],{"class":128},"\u002F\u002F地址传递\n",[39,9919,9920,9922,9925,9927,9929,9931,9933,9935],{"class":41,"line":292},[39,9921,370],{"class":45},[39,9923,9924],{"class":49}," printStudent2",[39,9926,54],{"class":53},[39,9928,8833],{"class":45},[39,9930,8972],{"class":49},[39,9932,7594],{"class":45},[39,9934,1956],{"class":59},[39,9936,574],{"class":53},[39,9938,9939],{"class":41,"line":305},[39,9940,542],{"class":53},[39,9942,9943,9945,9947,9950,9952,9954,9956,9959,9961,9963,9965,9968,9970],{"class":41,"line":310},[39,9944,231],{"class":53},[39,9946,234],{"class":45},[39,9948,9949],{"class":53}," s->name ",[39,9951,234],{"class":45},[39,9953,9890],{"class":237},[39,9955,241],{"class":45},[39,9957,9958],{"class":53}," s->age ",[39,9960,234],{"class":45},[39,9962,9890],{"class":237},[39,9964,241],{"class":45},[39,9966,9967],{"class":53}," s->score ",[39,9969,234],{"class":45},[39,9971,260],{"class":53},[39,9973,9974],{"class":41,"line":321},[39,9975,115],{"class":53},[39,9977,9978,9980,9982],{"class":41,"line":713},[39,9979,46],{"class":45},[39,9981,217],{"class":49},[39,9983,537],{"class":53},[39,9985,9986],{"class":41,"line":718},[39,9987,542],{"class":53},[39,9989,9990,9992,9994],{"class":41,"line":723},[39,9991,8969],{"class":45},[39,9993,8972],{"class":49},[39,9995,9996],{"class":53}," s;\n",[39,9998,9999,10002,10004,10007],{"class":41,"line":729},[39,10000,10001],{"class":53},"    s.name ",[39,10003,1117],{"class":45},[39,10005,10006],{"class":237}," \"张三\"",[39,10008,318],{"class":53},[39,10010,10011,10014,10016,10019],{"class":41,"line":735},[39,10012,10013],{"class":53},"    s.age ",[39,10015,1117],{"class":45},[39,10017,10018],{"class":74}," 20",[39,10020,318],{"class":53},[39,10022,10023,10026,10028,10031],{"class":41,"line":741},[39,10024,10025],{"class":53},"    s.score ",[39,10027,1117],{"class":45},[39,10029,10030],{"class":74}," 85",[39,10032,318],{"class":53},[39,10034,10035,10037,10039,10042,10044],{"class":41,"line":747},[39,10036,2673],{"class":53},[39,10038,234],{"class":45},[39,10040,10041],{"class":237},"\"值传递:\"",[39,10043,234],{"class":45},[39,10045,2324],{"class":53},[39,10047,10048,10051],{"class":41,"line":753},[39,10049,10050],{"class":49},"    printStudent1",[39,10052,10053],{"class":53},"(s);\n",[39,10055,10056,10058,10060,10063,10065],{"class":41,"line":758},[39,10057,2673],{"class":53},[39,10059,234],{"class":45},[39,10061,10062],{"class":237},"\"地址传递:\"",[39,10064,234],{"class":45},[39,10066,2324],{"class":53},[39,10068,10069,10072,10074,10076],{"class":41,"line":763},[39,10070,10071],{"class":49},"    printStudent2",[39,10073,54],{"class":53},[39,10075,1617],{"class":45},[39,10077,10078],{"class":53},"s); \n",[39,10080,10081,10083,10085],{"class":41,"line":772},[39,10082,95],{"class":45},[39,10084,315],{"class":74},[39,10086,318],{"class":53},[39,10088,10089],{"class":41,"line":777},[39,10090,115],{"class":53},[19,10092,10093],{},"注意：",[489,10095,10096,10099],{},[331,10097,10098],{},"1.先定义结构体，不要在函数中写结构体的定义",[331,10100,10101],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10103,10105],{"id":10104},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10107,10108],{},"用const防止误操作",[30,10110,10112],{"className":32,"code":10111,"language":34,"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",[26,10113,10114,10120,10130,10136,10141,10145,10149,10155,10161,10165,10181,10185,10208,10212,10220,10224,10245,10252,10256],{"__ignoreMap":35},[39,10115,10116,10118],{"class":41,"line":42},[39,10117,3051],{"class":45},[39,10119,3054],{"class":237},[39,10121,10122,10124,10126,10128],{"class":41,"line":92},[39,10123,3059],{"class":45},[39,10125,3062],{"class":45},[39,10127,3065],{"class":49},[39,10129,318],{"class":53},[39,10131,10132,10134],{"class":41,"line":112},[39,10133,3051],{"class":45},[39,10135,8823],{"class":237},[39,10137,10138],{"class":41,"line":118},[39,10139,10140],{"class":53},"sctuct Student\n",[39,10142,10143],{"class":41,"line":125},[39,10144,542],{"class":53},[39,10146,10147],{"class":41,"line":132},[39,10148,8859],{"class":53},[39,10150,10151,10153],{"class":41,"line":138},[39,10152,1112],{"class":45},[39,10154,8871],{"class":53},[39,10156,10157,10159],{"class":41,"line":169},[39,10158,1112],{"class":45},[39,10160,8883],{"class":53},[39,10162,10163],{"class":41,"line":190},[39,10164,5078],{"class":53},[39,10166,10167,10169,10172,10174,10177,10179],{"class":41,"line":202},[39,10168,370],{"class":45},[39,10170,10171],{"class":49}," printStudents",[39,10173,54],{"class":53},[39,10175,10176],{"class":49},"student",[39,10178,9497],{"class":59},[39,10180,574],{"class":53},[39,10182,10183],{"class":41,"line":207},[39,10184,542],{"class":53},[39,10186,10187,10189,10191,10194,10196,10199,10201,10204,10206],{"class":41,"line":212},[39,10188,2673],{"class":53},[39,10190,234],{"class":45},[39,10192,10193],{"class":53},"s.name",[39,10195,234],{"class":45},[39,10197,10198],{"class":53},"s.age",[39,10200,234],{"class":45},[39,10202,10203],{"class":53},"s.score",[39,10205,234],{"class":45},[39,10207,2324],{"class":53},[39,10209,10210],{"class":41,"line":223},[39,10211,115],{"class":53},[39,10213,10214,10216,10218],{"class":41,"line":228},[39,10215,46],{"class":45},[39,10217,217],{"class":49},[39,10219,7054],{"class":53},[39,10221,10222],{"class":41,"line":263},[39,10223,542],{"class":53},[39,10225,10226,10229,10231,10233,10235,10237,10239,10241,10243],{"class":41,"line":287},[39,10227,10228],{"class":53},"    Student s",[39,10230,1117],{"class":45},[39,10232,2156],{"class":53},[39,10234,8990],{"class":237},[39,10236,426],{"class":53},[39,10238,1911],{"class":74},[39,10240,426],{"class":53},[39,10242,1911],{"class":74},[39,10244,5078],{"class":53},[39,10246,10247,10250],{"class":41,"line":292},[39,10248,10249],{"class":49},"    printStudent",[39,10251,10053],{"class":53},[39,10253,10254],{"class":41,"line":305},[39,10255,122],{"emptyLinePlaceholder":121},[39,10257,10258],{"class":41,"line":310},[39,10259,115],{"class":53},[19,10261,10093],{},[489,10263,10264,10267,10270],{},[331,10265,10266],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[331,10268,10269],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[331,10271,10272],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[30,10274,10276],{"className":32,"code":10275,"language":34,"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",[26,10277,10278,10297,10301,10306,10326],{"__ignoreMap":35},[39,10279,10280,10282,10284,10286,10288,10291,10293,10295],{"class":41,"line":42},[39,10281,370],{"class":45},[39,10283,10171],{"class":49},[39,10285,54],{"class":53},[39,10287,960],{"class":45},[39,10289,10290],{"class":49}," student",[39,10292,7594],{"class":45},[39,10294,1956],{"class":59},[39,10296,574],{"class":53},[39,10298,10299],{"class":41,"line":92},[39,10300,542],{"class":53},[39,10302,10303],{"class":41,"line":112},[39,10304,10305],{"class":128},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[39,10307,10308,10310,10312,10314,10316,10318,10320,10322,10324],{"class":41,"line":118},[39,10309,2673],{"class":53},[39,10311,234],{"class":45},[39,10313,10193],{"class":53},[39,10315,234],{"class":45},[39,10317,10198],{"class":53},[39,10319,234],{"class":45},[39,10321,10203],{"class":53},[39,10323,234],{"class":45},[39,10325,2324],{"class":53},[39,10327,10328],{"class":41,"line":125},[39,10329,115],{"class":53},[14,10331,10333],{"id":10332},"_47案例","4.7案例",[328,10335,10336],{},[331,10337,10338],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[30,10340,10342],{"className":32,"code":10341,"language":34,"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",[26,10343,10344,10350,10360,10366,10373,10377,10383,10387,10392,10398,10404,10408,10412,10418,10422,10427,10432,10445,10449,10454,10480,10484,10496,10523,10527,10539,10549,10553,10558,10587,10591,10603,10612,10639,10650,10660,10664,10668,10672,10677,10701,10705,10729,10733,10752,10778,10782,10807,10830,10854,10859,10864,10869,10878,10883,10889,10910,10916,10930,10936,10963,10972,10978,10986,10991],{"__ignoreMap":35},[39,10345,10346,10348],{"class":41,"line":42},[39,10347,3051],{"class":45},[39,10349,3054],{"class":237},[39,10351,10352,10354,10356,10358],{"class":41,"line":92},[39,10353,3059],{"class":45},[39,10355,3062],{"class":45},[39,10357,3065],{"class":49},[39,10359,318],{"class":53},[39,10361,10362,10364],{"class":41,"line":112},[39,10363,3051],{"class":45},[39,10365,8823],{"class":237},[39,10367,10368,10370],{"class":41,"line":118},[39,10369,3051],{"class":45},[39,10371,10372],{"class":237},"\u003Cctime>\n",[39,10374,10375],{"class":41,"line":125},[39,10376,9607],{"class":128},[39,10378,10379,10381],{"class":41,"line":132},[39,10380,8833],{"class":45},[39,10382,8836],{"class":49},[39,10384,10385],{"class":41,"line":138},[39,10386,542],{"class":53},[39,10388,10389],{"class":41,"line":169},[39,10390,10391],{"class":53},"    string sName;\n",[39,10393,10394,10396],{"class":41,"line":190},[39,10395,1112],{"class":45},[39,10397,8871],{"class":53},[39,10399,10400,10402],{"class":41,"line":202},[39,10401,1112],{"class":45},[39,10403,8883],{"class":53},[39,10405,10406],{"class":41,"line":207},[39,10407,5078],{"class":53},[39,10409,10410],{"class":41,"line":212},[39,10411,9644],{"class":128},[39,10413,10414,10416],{"class":41,"line":223},[39,10415,8833],{"class":45},[39,10417,9651],{"class":49},[39,10419,10420],{"class":41,"line":228},[39,10421,542],{"class":53},[39,10423,10424],{"class":41,"line":263},[39,10425,10426],{"class":53},"    string tName;\n",[39,10428,10429],{"class":41,"line":287},[39,10430,10431],{"class":128},"    \u002F\u002F学生数组\n",[39,10433,10434,10436,10438,10441,10443],{"class":41,"line":292},[39,10435,8969],{"class":45},[39,10437,8972],{"class":49},[39,10439,10440],{"class":53}," sArray[",[39,10442,1583],{"class":74},[39,10444,5771],{"class":53},[39,10446,10447],{"class":41,"line":305},[39,10448,5078],{"class":53},[39,10450,10451],{"class":41,"line":310},[39,10452,10453],{"class":128},"\u002F\u002F给老师和学生赋值的函数\n",[39,10455,10456,10458,10461,10463,10465,10468,10471,10474,10476,10478],{"class":41,"line":321},[39,10457,370],{"class":45},[39,10459,10460],{"class":49}," allocateSpace",[39,10462,54],{"class":53},[39,10464,8833],{"class":45},[39,10466,10467],{"class":49}," Teacher",[39,10469,10470],{"class":59}," tArray",[39,10472,10473],{"class":53},"[],",[39,10475,46],{"class":45},[39,10477,8405],{"class":59},[39,10479,574],{"class":53},[39,10481,10482],{"class":41,"line":713},[39,10483,542],{"class":53},[39,10485,10486,10489,10491,10494],{"class":41,"line":718},[39,10487,10488],{"class":53},"    string nameSeed",[39,10490,1117],{"class":45},[39,10492,10493],{"class":237},"\"ABCDE\"",[39,10495,318],{"class":53},[39,10497,10498,10500,10502,10504,10507,10509,10511,10514,10516,10519,10521],{"class":41,"line":723},[39,10499,4284],{"class":45},[39,10501,2772],{"class":53},[39,10503,46],{"class":45},[39,10505,10506],{"class":53}," i ",[39,10508,1117],{"class":45},[39,10510,315],{"class":74},[39,10512,10513],{"class":53},"; i ",[39,10515,2170],{"class":45},[39,10517,10518],{"class":53}," len; i",[39,10520,3389],{"class":45},[39,10522,574],{"class":53},[39,10524,10525],{"class":41,"line":729},[39,10526,3128],{"class":53},[39,10528,10529,10532,10534,10537],{"class":41,"line":735},[39,10530,10531],{"class":53},"        tArray[i].tName ",[39,10533,1117],{"class":45},[39,10535,10536],{"class":237}," \"Teacher_\"",[39,10538,318],{"class":53},[39,10540,10541,10543,10546],{"class":41,"line":741},[39,10542,10531],{"class":53},[39,10544,10545],{"class":45},"+=",[39,10547,10548],{"class":53},"nameSeed[i];\n",[39,10550,10551],{"class":41,"line":747},[39,10552,122],{"emptyLinePlaceholder":121},[39,10554,10555],{"class":41,"line":753},[39,10556,10557],{"class":128},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[39,10559,10560,10562,10564,10566,10569,10571,10573,10576,10578,10580,10583,10585],{"class":41,"line":758},[39,10561,4486],{"class":45},[39,10563,2772],{"class":53},[39,10565,46],{"class":45},[39,10567,10568],{"class":53}," j ",[39,10570,1117],{"class":45},[39,10572,315],{"class":74},[39,10574,10575],{"class":53},"; j ",[39,10577,2170],{"class":45},[39,10579,3245],{"class":74},[39,10581,10582],{"class":53},"; j",[39,10584,3389],{"class":45},[39,10586,574],{"class":53},[39,10588,10589],{"class":41,"line":763},[39,10590,3603],{"class":53},[39,10592,10593,10596,10598,10601],{"class":41,"line":772},[39,10594,10595],{"class":53},"            tArray[i].sArray[j].sName ",[39,10597,1117],{"class":45},[39,10599,10600],{"class":237}," \"Student_\"",[39,10602,318],{"class":53},[39,10604,10605,10607,10609],{"class":41,"line":777},[39,10606,10595],{"class":53},[39,10608,10545],{"class":45},[39,10610,10611],{"class":53}," nameSeed[j];\n",[39,10613,10614,10617,10620,10622,10624,10626,10628,10630,10632,10634,10636],{"class":41,"line":785},[39,10615,10616],{"class":45},"            int",[39,10618,10619],{"class":53}," random",[39,10621,1117],{"class":45},[39,10623,3517],{"class":49},[39,10625,3520],{"class":53},[39,10627,1592],{"class":45},[39,10629,2167],{"class":74},[39,10631,101],{"class":45},[39,10633,1664],{"class":74},[39,10635,1324],{"class":53},[39,10637,10638],{"class":128},"\u002F\u002F40~99\n",[39,10640,10641,10644,10646,10648],{"class":41,"line":796},[39,10642,10643],{"class":53},"            tArray[i].sArray[j].age ",[39,10645,1117],{"class":45},[39,10647,10018],{"class":74},[39,10649,318],{"class":53},[39,10651,10652,10655,10657],{"class":41,"line":808},[39,10653,10654],{"class":53},"            tArray[i].sArray[j].score ",[39,10656,1117],{"class":45},[39,10658,10659],{"class":53}," random;\n",[39,10661,10662],{"class":41,"line":823},[39,10663,3622],{"class":53},[39,10665,10666],{"class":41,"line":839},[39,10667,3284],{"class":53},[39,10669,10670],{"class":41,"line":845},[39,10671,115],{"class":53},[39,10673,10674],{"class":41,"line":856},[39,10675,10676],{"class":128},"\u002F\u002F打印所有信息的函数\n",[39,10678,10679,10681,10684,10686,10688,10690,10692,10695,10697,10699],{"class":41,"line":861},[39,10680,370],{"class":45},[39,10682,10683],{"class":49}," printInfo",[39,10685,54],{"class":53},[39,10687,8833],{"class":45},[39,10689,10467],{"class":49},[39,10691,10470],{"class":59},[39,10693,10694],{"class":53},"[], ",[39,10696,46],{"class":45},[39,10698,8405],{"class":59},[39,10700,574],{"class":53},[39,10702,10703],{"class":41,"line":870},[39,10704,542],{"class":53},[39,10706,10707,10709,10711,10713,10715,10717,10719,10721,10723,10725,10727],{"class":41,"line":9084},[39,10708,4284],{"class":45},[39,10710,2772],{"class":53},[39,10712,46],{"class":45},[39,10714,10506],{"class":53},[39,10716,1117],{"class":45},[39,10718,315],{"class":74},[39,10720,10513],{"class":53},[39,10722,2170],{"class":45},[39,10724,10518],{"class":53},[39,10726,3389],{"class":45},[39,10728,574],{"class":53},[39,10730,10731],{"class":41,"line":9090},[39,10732,3128],{"class":53},[39,10734,10735,10738,10740,10743,10745,10748,10750],{"class":41,"line":9102},[39,10736,10737],{"class":53},"        cout ",[39,10739,234],{"class":45},[39,10741,10742],{"class":237}," \"Teacher: \"",[39,10744,241],{"class":45},[39,10746,10747],{"class":53}," tArray[i].tName ",[39,10749,234],{"class":45},[39,10751,260],{"class":53},[39,10753,10754,10756,10758,10760,10762,10764,10766,10768,10770,10772,10774,10776],{"class":41,"line":9114},[39,10755,4486],{"class":45},[39,10757,2772],{"class":53},[39,10759,46],{"class":45},[39,10761,10568],{"class":53},[39,10763,1117],{"class":45},[39,10765,315],{"class":74},[39,10767,10575],{"class":53},[39,10769,2170],{"class":45},[39,10771,3245],{"class":74},[39,10773,10582],{"class":53},[39,10775,3389],{"class":45},[39,10777,574],{"class":53},[39,10779,10780],{"class":41,"line":9126},[39,10781,3603],{"class":53},[39,10783,10785,10788,10790,10793,10795,10798,10800,10803,10805],{"class":41,"line":10784},47,[39,10786,10787],{"class":53},"            cout ",[39,10789,234],{"class":45},[39,10791,10792],{"class":237}," \"",[39,10794,2359],{"class":74},[39,10796,10797],{"class":237},"Student: \"",[39,10799,241],{"class":45},[39,10801,10802],{"class":53}," tArray[i].sArray[j].sName",[39,10804,234],{"class":45},[39,10806,2324],{"class":53},[39,10808,10810,10812,10814,10816,10818,10821,10823,10826,10828],{"class":41,"line":10809},48,[39,10811,10787],{"class":53},[39,10813,234],{"class":45},[39,10815,10792],{"class":237},[39,10817,2359],{"class":74},[39,10819,10820],{"class":237},"Age: \"",[39,10822,241],{"class":45},[39,10824,10825],{"class":53}," tArray[i].sArray[j].age ",[39,10827,234],{"class":45},[39,10829,260],{"class":53},[39,10831,10833,10835,10837,10839,10841,10844,10846,10849,10851],{"class":41,"line":10832},49,[39,10834,10787],{"class":53},[39,10836,234],{"class":45},[39,10838,10792],{"class":237},[39,10840,2359],{"class":74},[39,10842,10843],{"class":237},"Score: \"",[39,10845,241],{"class":45},[39,10847,10848],{"class":53}," tArray[i].sArray[j].score ",[39,10850,234],{"class":45},[39,10852,10853],{"class":53}," endl;   \n",[39,10855,10857],{"class":41,"line":10856},50,[39,10858,3622],{"class":53},[39,10860,10862],{"class":41,"line":10861},51,[39,10863,3284],{"class":53},[39,10865,10867],{"class":41,"line":10866},52,[39,10868,115],{"class":53},[39,10870,10872,10874,10876],{"class":41,"line":10871},53,[39,10873,46],{"class":45},[39,10875,217],{"class":49},[39,10877,537],{"class":53},[39,10879,10881],{"class":41,"line":10880},54,[39,10882,542],{"class":53},[39,10884,10886],{"class":41,"line":10885},55,[39,10887,10888],{"class":128},"    \u002F\u002F随机数种子\n",[39,10890,10892,10894,10896,10898,10900,10902,10904,10906,10908],{"class":41,"line":10891},56,[39,10893,3468],{"class":49},[39,10895,3471],{"class":53},[39,10897,3474],{"class":45},[39,10899,963],{"class":45},[39,10901,1692],{"class":53},[39,10903,3481],{"class":49},[39,10905,54],{"class":53},[39,10907,3486],{"class":74},[39,10909,3489],{"class":53},[39,10911,10913],{"class":41,"line":10912},57,[39,10914,10915],{"class":128},"    \u002F\u002F1.创建3名老师的数组\n",[39,10917,10919,10921,10923,10926,10928],{"class":41,"line":10918},58,[39,10920,8969],{"class":45},[39,10922,10467],{"class":49},[39,10924,10925],{"class":53}," tArray[",[39,10927,1339],{"class":74},[39,10929,5771],{"class":53},[39,10931,10933],{"class":41,"line":10932},59,[39,10934,10935],{"class":128},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[39,10937,10939,10941,10944,10946,10949,10952,10954,10956,10959,10961],{"class":41,"line":10938},60,[39,10940,1112],{"class":45},[39,10942,10943],{"class":53}," len ",[39,10945,1117],{"class":45},[39,10947,10948],{"class":45}," sizeof",[39,10950,10951],{"class":53},"(tArray) ",[39,10953,1845],{"class":45},[39,10955,10948],{"class":45},[39,10957,10958],{"class":53},"(tArray[",[39,10960,1457],{"class":74},[39,10962,4939],{"class":53},[39,10964,10966,10969],{"class":41,"line":10965},61,[39,10967,10968],{"class":49},"    allocateSpace",[39,10970,10971],{"class":53},"(tArray, len);\n",[39,10973,10975],{"class":41,"line":10974},62,[39,10976,10977],{"class":128},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[39,10979,10981,10984],{"class":41,"line":10980},63,[39,10982,10983],{"class":49},"    printInfo",[39,10985,10971],{"class":53},[39,10987,10989],{"class":41,"line":10988},64,[39,10990,122],{"emptyLinePlaceholder":121},[39,10992,10994],{"class":41,"line":10993},65,[39,10995,115],{"class":53},[328,10997,10998],{"start":92},[331,10999,11000,11003],{},[350,11001,11002],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11005,11006],{},"五名英雄信息如下：",[30,11008,11010],{"className":519,"code":11009,"language":521,"meta":35,"style":35},"        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n",[26,11011,11012,11030,11047,11064,11081],{"__ignoreMap":35},[39,11013,11014,11016,11019,11021,11023,11025,11028],{"class":41,"line":42},[39,11015,5998],{"class":53},[39,11017,11018],{"class":237},"\"刘备\"",[39,11020,426],{"class":53},[39,11022,2035],{"class":74},[39,11024,426],{"class":53},[39,11026,11027],{"class":237},"\"男\"",[39,11029,6011],{"class":53},[39,11031,11032,11034,11037,11039,11041,11043,11045],{"class":41,"line":92},[39,11033,5998],{"class":53},[39,11035,11036],{"class":237},"\"关羽\"",[39,11038,426],{"class":53},[39,11040,2010],{"class":74},[39,11042,426],{"class":53},[39,11044,11027],{"class":237},[39,11046,6011],{"class":53},[39,11048,11049,11051,11054,11056,11058,11060,11062],{"class":41,"line":112},[39,11050,5998],{"class":53},[39,11052,11053],{"class":237},"\"张飞\"",[39,11055,426],{"class":53},[39,11057,248],{"class":74},[39,11059,426],{"class":53},[39,11061,11027],{"class":237},[39,11063,6011],{"class":53},[39,11065,11066,11068,11071,11073,11075,11077,11079],{"class":41,"line":118},[39,11067,5998],{"class":53},[39,11069,11070],{"class":237},"\"赵云\"",[39,11072,426],{"class":53},[39,11074,1985],{"class":74},[39,11076,426],{"class":53},[39,11078,11027],{"class":237},[39,11080,6011],{"class":53},[39,11082,11083,11085,11088,11090,11092,11094,11097],{"class":41,"line":125},[39,11084,5998],{"class":53},[39,11086,11087],{"class":237},"\"貂蝉\"",[39,11089,426],{"class":53},[39,11091,1936],{"class":74},[39,11093,426],{"class":53},[39,11095,11096],{"class":237},"\"女\"",[39,11098,6011],{"class":53},[19,11100,11101],{},"代码：",[30,11103,11105],{"className":32,"code":11104,"language":34,"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",[26,11106,11107,11113,11123,11129,11136,11140,11144,11150,11155,11159,11164,11187,11191,11216,11220,11253,11258,11287,11292,11307,11333,11353,11358,11363,11367,11371,11376,11398,11402,11426,11430,11492,11496,11500,11508,11512,11517,11528,11532,11548,11564,11580,11596,11612,11616,11636,11657,11662,11675,11682,11687,11693,11698,11711,11717],{"__ignoreMap":35},[39,11108,11109,11111],{"class":41,"line":42},[39,11110,3051],{"class":45},[39,11112,3054],{"class":237},[39,11114,11115,11117,11119,11121],{"class":41,"line":92},[39,11116,3059],{"class":45},[39,11118,3062],{"class":45},[39,11120,3065],{"class":49},[39,11122,318],{"class":53},[39,11124,11125,11127],{"class":41,"line":112},[39,11126,3051],{"class":45},[39,11128,8823],{"class":237},[39,11130,11131,11133],{"class":41,"line":118},[39,11132,8833],{"class":45},[39,11134,11135],{"class":49}," Sanguo\n",[39,11137,11138],{"class":41,"line":125},[39,11139,542],{"class":53},[39,11141,11142],{"class":41,"line":132},[39,11143,8859],{"class":53},[39,11145,11146,11148],{"class":41,"line":138},[39,11147,1112],{"class":45},[39,11149,8871],{"class":53},[39,11151,11152],{"class":41,"line":169},[39,11153,11154],{"class":53},"    string gender;\n",[39,11156,11157],{"class":41,"line":190},[39,11158,5078],{"class":53},[39,11160,11161],{"class":41,"line":202},[39,11162,11163],{"class":128},"\u002F\u002F定义排序函数\n",[39,11165,11166,11168,11170,11172,11175,11177,11179,11181,11183,11185],{"class":41,"line":207},[39,11167,370],{"class":45},[39,11169,8390],{"class":49},[39,11171,54],{"class":53},[39,11173,11174],{"class":49},"Sanguo",[39,11176,7594],{"class":45},[39,11178,1956],{"class":59},[39,11180,426],{"class":53},[39,11182,46],{"class":45},[39,11184,8405],{"class":59},[39,11186,574],{"class":53},[39,11188,11189],{"class":41,"line":212},[39,11190,542],{"class":53},[39,11192,11193,11195,11197,11199,11201,11203,11205,11207,11209,11212,11214],{"class":41,"line":223},[39,11194,4284],{"class":45},[39,11196,54],{"class":53},[39,11198,46],{"class":45},[39,11200,4115],{"class":53},[39,11202,1117],{"class":45},[39,11204,1457],{"class":74},[39,11206,4122],{"class":53},[39,11208,2170],{"class":45},[39,11210,11211],{"class":53},"len;i",[39,11213,3389],{"class":45},[39,11215,574],{"class":53},[39,11217,11218],{"class":41,"line":228},[39,11219,3128],{"class":53},[39,11221,11222,11225,11227,11229,11231,11233,11235,11237,11239,11241,11243,11245,11247,11249,11251],{"class":41,"line":263},[39,11223,11224],{"class":45},"     for",[39,11226,2772],{"class":53},[39,11228,46],{"class":45},[39,11230,4493],{"class":53},[39,11232,1117],{"class":45},[39,11234,1457],{"class":74},[39,11236,4500],{"class":53},[39,11238,2170],{"class":45},[39,11240,8432],{"class":53},[39,11242,1793],{"class":45},[39,11244,1483],{"class":74},[39,11246,1793],{"class":45},[39,11248,4633],{"class":53},[39,11250,3389],{"class":45},[39,11252,574],{"class":53},[39,11254,11255],{"class":41,"line":287},[39,11256,11257],{"class":53},"     {\n",[39,11259,11260,11263,11266,11268,11271,11273,11276,11278,11280,11282,11284],{"class":41,"line":292},[39,11261,11262],{"class":45},"         if",[39,11264,11265],{"class":53}," ((s",[39,11267,101],{"class":45},[39,11269,11270],{"class":53},"j)->age ",[39,11272,2220],{"class":45},[39,11274,11275],{"class":53}," (s",[39,11277,101],{"class":45},[39,11279,1729],{"class":53},[39,11281,101],{"class":45},[39,11283,1483],{"class":74},[39,11285,11286],{"class":53},")->age)\n",[39,11288,11289],{"class":41,"line":305},[39,11290,11291],{"class":53},"         {\n",[39,11293,11294,11297,11299,11302,11304],{"class":41,"line":310},[39,11295,11296],{"class":53},"             Sanguo temp",[39,11298,8227],{"class":45},[39,11300,11301],{"class":53},"(s",[39,11303,101],{"class":45},[39,11305,11306],{"class":53},"j);\n",[39,11308,11309,11312,11314,11316,11319,11321,11323,11325,11327,11329,11331],{"class":41,"line":321},[39,11310,11311],{"class":45},"             *",[39,11313,11301],{"class":53},[39,11315,101],{"class":45},[39,11317,11318],{"class":53},"j)",[39,11320,8227],{"class":45},[39,11322,11301],{"class":53},[39,11324,101],{"class":45},[39,11326,1729],{"class":53},[39,11328,101],{"class":45},[39,11330,1483],{"class":74},[39,11332,166],{"class":53},[39,11334,11335,11337,11339,11341,11343,11345,11347,11349,11351],{"class":41,"line":713},[39,11336,11311],{"class":45},[39,11338,11301],{"class":53},[39,11340,101],{"class":45},[39,11342,1729],{"class":53},[39,11344,101],{"class":45},[39,11346,1483],{"class":74},[39,11348,1692],{"class":53},[39,11350,1117],{"class":45},[39,11352,5361],{"class":53},[39,11354,11355],{"class":41,"line":718},[39,11356,11357],{"class":53},"         }\n",[39,11359,11360],{"class":41,"line":723},[39,11361,11362],{"class":53},"     }\n",[39,11364,11365],{"class":41,"line":729},[39,11366,3284],{"class":53},[39,11368,11369],{"class":41,"line":735},[39,11370,115],{"class":53},[39,11372,11373],{"class":41,"line":741},[39,11374,11375],{"class":128},"\u002F\u002F定义打印函数\n",[39,11377,11378,11380,11382,11384,11386,11388,11390,11392,11394,11396],{"class":41,"line":747},[39,11379,370],{"class":45},[39,11381,10683],{"class":49},[39,11383,54],{"class":53},[39,11385,11174],{"class":49},[39,11387,7594],{"class":45},[39,11389,1956],{"class":59},[39,11391,426],{"class":53},[39,11393,46],{"class":45},[39,11395,8405],{"class":59},[39,11397,574],{"class":53},[39,11399,11400],{"class":41,"line":753},[39,11401,542],{"class":53},[39,11403,11404,11406,11408,11410,11412,11414,11416,11418,11420,11422,11424],{"class":41,"line":758},[39,11405,4284],{"class":45},[39,11407,2772],{"class":53},[39,11409,46],{"class":45},[39,11411,4115],{"class":53},[39,11413,1117],{"class":45},[39,11415,1457],{"class":74},[39,11417,4122],{"class":53},[39,11419,2170],{"class":45},[39,11421,11211],{"class":53},[39,11423,3389],{"class":45},[39,11425,574],{"class":53},[39,11427,11428],{"class":41,"line":763},[39,11429,3128],{"class":53},[39,11431,11432,11434,11436,11438,11440,11443,11445,11447,11449,11452,11454,11456,11458,11461,11463,11465,11467,11470,11472,11474,11476,11479,11481,11483,11485,11488,11490],{"class":41,"line":772},[39,11433,4534],{"class":53},[39,11435,234],{"class":45},[39,11437,1516],{"class":237},[39,11439,2359],{"class":74},[39,11441,11442],{"class":237},"姓名：\"",[39,11444,234],{"class":45},[39,11446,11301],{"class":53},[39,11448,101],{"class":45},[39,11450,11451],{"class":53},"i)->name",[39,11453,234],{"class":45},[39,11455,1516],{"class":237},[39,11457,2359],{"class":74},[39,11459,11460],{"class":237},"年龄：\"",[39,11462,234],{"class":45},[39,11464,11301],{"class":53},[39,11466,101],{"class":45},[39,11468,11469],{"class":53},"i)->age",[39,11471,234],{"class":45},[39,11473,1516],{"class":237},[39,11475,2359],{"class":74},[39,11477,11478],{"class":237},"性别：\"",[39,11480,234],{"class":45},[39,11482,11301],{"class":53},[39,11484,101],{"class":45},[39,11486,11487],{"class":53},"i)->gender",[39,11489,234],{"class":45},[39,11491,2324],{"class":53},[39,11493,11494],{"class":41,"line":777},[39,11495,3284],{"class":53},[39,11497,11498],{"class":41,"line":785},[39,11499,115],{"class":53},[39,11501,11502,11504,11506],{"class":41,"line":796},[39,11503,46],{"class":45},[39,11505,217],{"class":49},[39,11507,537],{"class":53},[39,11509,11510],{"class":41,"line":808},[39,11511,542],{"class":53},[39,11513,11514],{"class":41,"line":823},[39,11515,11516],{"class":128},"    \u002F\u002F定义结构体变量\n",[39,11518,11519,11522,11524,11526],{"class":41,"line":839},[39,11520,11521],{"class":53},"    Sanguo s1[",[39,11523,1583],{"class":74},[39,11525,2200],{"class":53},[39,11527,5989],{"class":45},[39,11529,11530],{"class":41,"line":845},[39,11531,3128],{"class":53},[39,11533,11534,11536,11538,11540,11542,11544,11546],{"class":41,"line":856},[39,11535,5998],{"class":53},[39,11537,11018],{"class":237},[39,11539,426],{"class":53},[39,11541,2035],{"class":74},[39,11543,426],{"class":53},[39,11545,11027],{"class":237},[39,11547,6011],{"class":53},[39,11549,11550,11552,11554,11556,11558,11560,11562],{"class":41,"line":861},[39,11551,5998],{"class":53},[39,11553,11036],{"class":237},[39,11555,426],{"class":53},[39,11557,2010],{"class":74},[39,11559,426],{"class":53},[39,11561,11027],{"class":237},[39,11563,6011],{"class":53},[39,11565,11566,11568,11570,11572,11574,11576,11578],{"class":41,"line":870},[39,11567,5998],{"class":53},[39,11569,11053],{"class":237},[39,11571,426],{"class":53},[39,11573,248],{"class":74},[39,11575,426],{"class":53},[39,11577,11027],{"class":237},[39,11579,6011],{"class":53},[39,11581,11582,11584,11586,11588,11590,11592,11594],{"class":41,"line":9084},[39,11583,5998],{"class":53},[39,11585,11070],{"class":237},[39,11587,426],{"class":53},[39,11589,1985],{"class":74},[39,11591,426],{"class":53},[39,11593,11027],{"class":237},[39,11595,6011],{"class":53},[39,11597,11598,11600,11602,11604,11606,11608,11610],{"class":41,"line":9090},[39,11599,5998],{"class":53},[39,11601,11087],{"class":237},[39,11603,426],{"class":53},[39,11605,1936],{"class":74},[39,11607,426],{"class":53},[39,11609,11096],{"class":237},[39,11611,6011],{"class":53},[39,11613,11614],{"class":41,"line":9102},[39,11615,6032],{"class":53},[39,11617,11618,11620,11622,11624,11627,11629,11632,11634],{"class":41,"line":9114},[39,11619,1112],{"class":45},[39,11621,8405],{"class":53},[39,11623,5284],{"class":45},[39,11625,11626],{"class":53},"(s1)",[39,11628,5290],{"class":45},[39,11630,11631],{"class":53},"(s1[",[39,11633,1457],{"class":74},[39,11635,4939],{"class":53},[39,11637,11638,11641,11643,11646,11648,11650,11653,11655],{"class":41,"line":9126},[39,11639,11640],{"class":53},"    Sanguo ",[39,11642,1717],{"class":45},[39,11644,11645],{"class":53},"s ",[39,11647,1117],{"class":45},[39,11649,919],{"class":45},[39,11651,11652],{"class":53},"s1[",[39,11654,1457],{"class":74},[39,11656,5771],{"class":53},[39,11658,11659],{"class":41,"line":10784},[39,11660,11661],{"class":128},"    \u002F\u002F排序前：\n",[39,11663,11664,11666,11668,11671,11673],{"class":41,"line":10809},[39,11665,231],{"class":53},[39,11667,234],{"class":45},[39,11669,11670],{"class":237}," \"排序前：\"",[39,11672,241],{"class":45},[39,11674,260],{"class":53},[39,11676,11677,11679],{"class":41,"line":10832},[39,11678,10983],{"class":49},[39,11680,11681],{"class":53},"(s,len);\n",[39,11683,11684],{"class":41,"line":10856},[39,11685,11686],{"class":128},"    \u002F\u002F调用排序函数\n",[39,11688,11689,11691],{"class":41,"line":10861},[39,11690,8672],{"class":49},[39,11692,11681],{"class":53},[39,11694,11695],{"class":41,"line":10866},[39,11696,11697],{"class":128},"    \u002F\u002F排序后\n",[39,11699,11700,11702,11704,11707,11709],{"class":41,"line":10871},[39,11701,231],{"class":53},[39,11703,234],{"class":45},[39,11705,11706],{"class":237}," \"排序后：\"",[39,11708,241],{"class":45},[39,11710,260],{"class":53},[39,11712,11713,11715],{"class":41,"line":10880},[39,11714,10983],{"class":49},[39,11716,11681],{"class":53},[39,11718,11719],{"class":41,"line":10885},[39,11720,115],{"class":53},[19,11722,11723,11724,11726],{},"注意：使用指针时直接用传首地址**&s",[39,11725,1457],{},"**",[1192,11728,11729],{},"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":92,"depth":92,"links":11731},[11732,11733,11734,11735,11736,11737,11738],{"id":8777,"depth":92,"text":8778},{"id":9134,"depth":92,"text":9135},{"id":9403,"depth":92,"text":9404},{"id":9568,"depth":92,"text":9569},{"id":9784,"depth":92,"text":9785},{"id":10104,"depth":92,"text":10105},{"id":10332,"depth":92,"text":10333},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8766,"description":8774},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11745,"title":11746,"body":11747,"description":35,"extension":1203,"meta":13085,"navigation":121,"path":13086,"seo":13087,"stem":13088,"__hash__":13089},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11748,"toc":13079},[11749,11752,11756,11762,11776,11781,11784,11788,11795,11801,11804,11811,11817,11822,11825,11828,11831,12392,12394,12408,12412,12417,12433,12572,12575,12581,12584,12589,12597,12705,12708,12713,12716,12721,12724,12730,12733,13076],[10,11750,11746],{"id":11751},"_5程序内存模型",[14,11753,11755],{"id":11754},"_51内存分区模型","5.1内存分区模型",[19,11757,11758,11759],{},"C++程序在执行时，将内存大方向划分为",[350,11760,11761],{},"4个区域",[489,11763,11764,11767,11770,11773],{},[331,11765,11766],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[331,11768,11769],{},"全局区：存放全局变量和静态变量以及常量",[331,11771,11772],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[331,11774,11775],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,11777,11778],{},[350,11779,11780],{},"内存四区意义：",[19,11782,11783],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[476,11785,11787],{"id":11786},"_511程序运行前","5.1.1程序运行前",[19,11789,11790,11791,11794],{},"​\t在程序编译后，生成了exe可执行程序，",[350,11792,11793],{},"未执行该程序前","分为两个区域",[19,11796,11797,11798],{},"​\t",[350,11799,11800],{},"代码区：",[19,11802,11803],{},"​\t\t存放 CPU 执行的机器指令",[19,11805,11806,11807,11810],{},"​\t\t代码区是",[350,11808,11809],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11812,11806,11813,11816],{},[350,11814,11815],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,11818,11797,11819],{},[350,11820,11821],{},"全局区：",[19,11823,11824],{},"​\t\t全局变量和静态变量存放在此.",[19,11826,11827],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,11829,11830],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[30,11832,11834],{"className":32,"code":11833,"language":34,"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",[26,11835,11836,11841,11854,11867,11871,11876,11891,11906,11910,11918,11922,11927,11939,11951,11955,11960,11986,12012,12016,12043,12069,12073,12078,12094,12109,12113,12139,12165,12169,12194,12219,12223,12249,12275,12279,12295,12310,12336,12362,12366,12376,12380,12388],{"__ignoreMap":35},[39,11837,11838],{"class":41,"line":42},[39,11839,11840],{"class":128},"\u002F\u002F全局变量\n",[39,11842,11843,11845,11848,11850,11852],{"class":41,"line":92},[39,11844,46],{"class":45},[39,11846,11847],{"class":53}," g_a ",[39,11849,1117],{"class":45},[39,11851,75],{"class":74},[39,11853,318],{"class":53},[39,11855,11856,11858,11861,11863,11865],{"class":41,"line":112},[39,11857,46],{"class":45},[39,11859,11860],{"class":53}," g_b ",[39,11862,1117],{"class":45},[39,11864,75],{"class":74},[39,11866,318],{"class":53},[39,11868,11869],{"class":41,"line":118},[39,11870,122],{"emptyLinePlaceholder":121},[39,11872,11873],{"class":41,"line":125},[39,11874,11875],{"class":128},"\u002F\u002F全局常量\n",[39,11877,11878,11880,11882,11885,11887,11889],{"class":41,"line":132},[39,11879,960],{"class":45},[39,11881,963],{"class":45},[39,11883,11884],{"class":53}," c_g_a ",[39,11886,1117],{"class":45},[39,11888,75],{"class":74},[39,11890,318],{"class":53},[39,11892,11893,11895,11897,11900,11902,11904],{"class":41,"line":138},[39,11894,960],{"class":45},[39,11896,963],{"class":45},[39,11898,11899],{"class":53}," c_g_b ",[39,11901,1117],{"class":45},[39,11903,75],{"class":74},[39,11905,318],{"class":53},[39,11907,11908],{"class":41,"line":169},[39,11909,122],{"emptyLinePlaceholder":121},[39,11911,11912,11914,11916],{"class":41,"line":190},[39,11913,46],{"class":45},[39,11915,217],{"class":49},[39,11917,220],{"class":53},[39,11919,11920],{"class":41,"line":202},[39,11921,122],{"emptyLinePlaceholder":121},[39,11923,11924],{"class":41,"line":207},[39,11925,11926],{"class":128},"    \u002F\u002F局部变量\n",[39,11928,11929,11931,11933,11935,11937],{"class":41,"line":212},[39,11930,1112],{"class":45},[39,11932,98],{"class":53},[39,11934,1117],{"class":45},[39,11936,75],{"class":74},[39,11938,318],{"class":53},[39,11940,11941,11943,11945,11947,11949],{"class":41,"line":223},[39,11942,1112],{"class":45},[39,11944,104],{"class":53},[39,11946,1117],{"class":45},[39,11948,75],{"class":74},[39,11950,318],{"class":53},[39,11952,11953],{"class":41,"line":228},[39,11954,122],{"emptyLinePlaceholder":121},[39,11956,11957],{"class":41,"line":263},[39,11958,11959],{"class":128},"    \u002F\u002F打印地址\n",[39,11961,11962,11964,11966,11969,11971,11973,11975,11977,11979,11982,11984],{"class":41,"line":287},[39,11963,231],{"class":53},[39,11965,234],{"class":45},[39,11967,11968],{"class":237}," \"局部变量a地址为： \"",[39,11970,241],{"class":45},[39,11972,2772],{"class":53},[39,11974,46],{"class":45},[39,11976,1692],{"class":53},[39,11978,1617],{"class":45},[39,11980,11981],{"class":53},"a ",[39,11983,234],{"class":45},[39,11985,260],{"class":53},[39,11987,11988,11990,11992,11995,11997,11999,12001,12003,12005,12008,12010],{"class":41,"line":292},[39,11989,231],{"class":53},[39,11991,234],{"class":45},[39,11993,11994],{"class":237}," \"局部变量b地址为： \"",[39,11996,241],{"class":45},[39,11998,2772],{"class":53},[39,12000,46],{"class":45},[39,12002,1692],{"class":53},[39,12004,1617],{"class":45},[39,12006,12007],{"class":53},"b ",[39,12009,234],{"class":45},[39,12011,260],{"class":53},[39,12013,12014],{"class":41,"line":305},[39,12015,122],{"emptyLinePlaceholder":121},[39,12017,12018,12020,12022,12025,12027,12030,12032,12034,12036,12039,12041],{"class":41,"line":310},[39,12019,231],{"class":53},[39,12021,234],{"class":45},[39,12023,12024],{"class":237}," \"全局变量g_a地址为： \"",[39,12026,241],{"class":45},[39,12028,12029],{"class":53},"  (",[39,12031,46],{"class":45},[39,12033,1692],{"class":53},[39,12035,1617],{"class":45},[39,12037,12038],{"class":53},"g_a ",[39,12040,234],{"class":45},[39,12042,260],{"class":53},[39,12044,12045,12047,12049,12052,12054,12056,12058,12060,12062,12065,12067],{"class":41,"line":321},[39,12046,231],{"class":53},[39,12048,234],{"class":45},[39,12050,12051],{"class":237}," \"全局变量g_b地址为： \"",[39,12053,241],{"class":45},[39,12055,12029],{"class":53},[39,12057,46],{"class":45},[39,12059,1692],{"class":53},[39,12061,1617],{"class":45},[39,12063,12064],{"class":53},"g_b ",[39,12066,234],{"class":45},[39,12068,260],{"class":53},[39,12070,12071],{"class":41,"line":713},[39,12072,122],{"emptyLinePlaceholder":121},[39,12074,12075],{"class":41,"line":718},[39,12076,12077],{"class":128},"    \u002F\u002F静态变量\n",[39,12079,12080,12083,12085,12088,12090,12092],{"class":41,"line":723},[39,12081,12082],{"class":45},"    static",[39,12084,963],{"class":45},[39,12086,12087],{"class":53}," s_a ",[39,12089,1117],{"class":45},[39,12091,75],{"class":74},[39,12093,318],{"class":53},[39,12095,12096,12098,12100,12103,12105,12107],{"class":41,"line":729},[39,12097,12082],{"class":45},[39,12099,963],{"class":45},[39,12101,12102],{"class":53}," s_b ",[39,12104,1117],{"class":45},[39,12106,75],{"class":74},[39,12108,318],{"class":53},[39,12110,12111],{"class":41,"line":735},[39,12112,122],{"emptyLinePlaceholder":121},[39,12114,12115,12117,12119,12122,12124,12126,12128,12130,12132,12135,12137],{"class":41,"line":741},[39,12116,231],{"class":53},[39,12118,234],{"class":45},[39,12120,12121],{"class":237}," \"静态变量s_a地址为： \"",[39,12123,241],{"class":45},[39,12125,2772],{"class":53},[39,12127,46],{"class":45},[39,12129,1692],{"class":53},[39,12131,1617],{"class":45},[39,12133,12134],{"class":53},"s_a ",[39,12136,234],{"class":45},[39,12138,260],{"class":53},[39,12140,12141,12143,12145,12148,12150,12152,12154,12156,12158,12161,12163],{"class":41,"line":747},[39,12142,231],{"class":53},[39,12144,234],{"class":45},[39,12146,12147],{"class":237}," \"静态变量s_b地址为： \"",[39,12149,241],{"class":45},[39,12151,2772],{"class":53},[39,12153,46],{"class":45},[39,12155,1692],{"class":53},[39,12157,1617],{"class":45},[39,12159,12160],{"class":53},"s_b ",[39,12162,234],{"class":45},[39,12164,260],{"class":53},[39,12166,12167],{"class":41,"line":753},[39,12168,122],{"emptyLinePlaceholder":121},[39,12170,12171,12173,12175,12178,12180,12182,12184,12186,12188,12190,12192],{"class":41,"line":758},[39,12172,231],{"class":53},[39,12174,234],{"class":45},[39,12176,12177],{"class":237}," \"字符串常量地址为： \"",[39,12179,241],{"class":45},[39,12181,2772],{"class":53},[39,12183,46],{"class":45},[39,12185,1692],{"class":53},[39,12187,1617],{"class":45},[39,12189,2319],{"class":237},[39,12191,241],{"class":45},[39,12193,260],{"class":53},[39,12195,12196,12198,12200,12202,12204,12206,12208,12210,12212,12215,12217],{"class":41,"line":763},[39,12197,231],{"class":53},[39,12199,234],{"class":45},[39,12201,12177],{"class":237},[39,12203,241],{"class":45},[39,12205,2772],{"class":53},[39,12207,46],{"class":45},[39,12209,1692],{"class":53},[39,12211,1617],{"class":45},[39,12213,12214],{"class":237},"\"hello world1\"",[39,12216,241],{"class":45},[39,12218,260],{"class":53},[39,12220,12221],{"class":41,"line":772},[39,12222,122],{"emptyLinePlaceholder":121},[39,12224,12225,12227,12229,12232,12234,12236,12238,12240,12242,12245,12247],{"class":41,"line":777},[39,12226,231],{"class":53},[39,12228,234],{"class":45},[39,12230,12231],{"class":237}," \"全局常量c_g_a地址为： \"",[39,12233,241],{"class":45},[39,12235,2772],{"class":53},[39,12237,46],{"class":45},[39,12239,1692],{"class":53},[39,12241,1617],{"class":45},[39,12243,12244],{"class":53},"c_g_a ",[39,12246,234],{"class":45},[39,12248,260],{"class":53},[39,12250,12251,12253,12255,12258,12260,12262,12264,12266,12268,12271,12273],{"class":41,"line":785},[39,12252,231],{"class":53},[39,12254,234],{"class":45},[39,12256,12257],{"class":237}," \"全局常量c_g_b地址为： \"",[39,12259,241],{"class":45},[39,12261,2772],{"class":53},[39,12263,46],{"class":45},[39,12265,1692],{"class":53},[39,12267,1617],{"class":45},[39,12269,12270],{"class":53},"c_g_b ",[39,12272,234],{"class":45},[39,12274,260],{"class":53},[39,12276,12277],{"class":41,"line":796},[39,12278,122],{"emptyLinePlaceholder":121},[39,12280,12281,12284,12286,12289,12291,12293],{"class":41,"line":808},[39,12282,12283],{"class":45},"    const",[39,12285,963],{"class":45},[39,12287,12288],{"class":53}," c_l_a ",[39,12290,1117],{"class":45},[39,12292,75],{"class":74},[39,12294,318],{"class":53},[39,12296,12297,12299,12301,12304,12306,12308],{"class":41,"line":823},[39,12298,12283],{"class":45},[39,12300,963],{"class":45},[39,12302,12303],{"class":53}," c_l_b ",[39,12305,1117],{"class":45},[39,12307,75],{"class":74},[39,12309,318],{"class":53},[39,12311,12312,12314,12316,12319,12321,12323,12325,12327,12329,12332,12334],{"class":41,"line":839},[39,12313,231],{"class":53},[39,12315,234],{"class":45},[39,12317,12318],{"class":237}," \"局部常量c_l_a地址为： \"",[39,12320,241],{"class":45},[39,12322,2772],{"class":53},[39,12324,46],{"class":45},[39,12326,1692],{"class":53},[39,12328,1617],{"class":45},[39,12330,12331],{"class":53},"c_l_a ",[39,12333,234],{"class":45},[39,12335,260],{"class":53},[39,12337,12338,12340,12342,12345,12347,12349,12351,12353,12355,12358,12360],{"class":41,"line":845},[39,12339,231],{"class":53},[39,12341,234],{"class":45},[39,12343,12344],{"class":237}," \"局部常量c_l_b地址为： \"",[39,12346,241],{"class":45},[39,12348,2772],{"class":53},[39,12350,46],{"class":45},[39,12352,1692],{"class":53},[39,12354,1617],{"class":45},[39,12356,12357],{"class":53},"c_l_b ",[39,12359,234],{"class":45},[39,12361,260],{"class":53},[39,12363,12364],{"class":41,"line":856},[39,12365,122],{"emptyLinePlaceholder":121},[39,12367,12368,12370,12372,12374],{"class":41,"line":861},[39,12369,295],{"class":49},[39,12371,54],{"class":53},[39,12373,300],{"class":237},[39,12375,166],{"class":53},[39,12377,12378],{"class":41,"line":870},[39,12379,122],{"emptyLinePlaceholder":121},[39,12381,12382,12384,12386],{"class":41,"line":9084},[39,12383,95],{"class":45},[39,12385,315],{"class":74},[39,12387,318],{"class":53},[39,12389,12390],{"class":41,"line":9090},[39,12391,115],{"class":53},[19,12393,326],{},[489,12395,12396,12399,12402,12405],{},[331,12397,12398],{},"c++中程序运行前分为全局区和代码区",[331,12400,12401],{},"代码区特点是共享和只读",[331,12403,12404],{},"全局区中存放全局变量、静态变量、常量",[331,12406,12407],{},"常量区中存放const修饰的全局常量和字符串常量",[476,12409,12411],{"id":12410},"_512程序运行后","5.1.2程序运行后",[328,12413,12414],{},[331,12415,12416],{},"栈区：",[489,12418,12419,12426],{},[331,12420,12421,12422,12425],{},"由编译器自动分配释放, 存放",[350,12423,12424],{},"函数的参数值,局部变量","等",[331,12427,12428,12429,12432],{},"注意事项：",[350,12430,12431],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[30,12434,12436],{"className":32,"code":12435,"language":34,"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",[26,12437,12438,12448,12452,12467,12479,12483,12487,12495,12500,12515,12533,12550,12560,12568],{"__ignoreMap":35},[39,12439,12440,12442,12444,12446],{"class":41,"line":42},[39,12441,46],{"class":45},[39,12443,7594],{"class":45},[39,12445,50],{"class":49},[39,12447,537],{"class":53},[39,12449,12450],{"class":41,"line":92},[39,12451,542],{"class":53},[39,12453,12454,12456,12458,12460,12462,12464],{"class":41,"line":112},[39,12455,1112],{"class":45},[39,12457,98],{"class":53},[39,12459,1117],{"class":45},[39,12461,75],{"class":74},[39,12463,1324],{"class":53},[39,12465,12466],{"class":128}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[39,12468,12469,12471,12473,12476],{"class":41,"line":118},[39,12470,95],{"class":45},[39,12472,919],{"class":45},[39,12474,12475],{"class":53},"a;",[39,12477,12478],{"class":128}," \u002F\u002F放回局部变量的地址\n",[39,12480,12481],{"class":41,"line":125},[39,12482,115],{"class":53},[39,12484,12485],{"class":41,"line":132},[39,12486,122],{"emptyLinePlaceholder":121},[39,12488,12489,12491,12493],{"class":41,"line":138},[39,12490,46],{"class":45},[39,12492,217],{"class":49},[39,12494,220],{"class":53},[39,12496,12497],{"class":41,"line":169},[39,12498,12499],{"class":128},"    \u002F\u002F接受func的返回值\n",[39,12501,12502,12504,12506,12509,12511,12513],{"class":41,"line":190},[39,12503,1112],{"class":45},[39,12505,7594],{"class":45},[39,12507,12508],{"class":53},"p ",[39,12510,1117],{"class":45},[39,12512,50],{"class":49},[39,12514,782],{"class":53},[39,12516,12517,12519,12521,12523,12525,12527,12530],{"class":41,"line":202},[39,12518,231],{"class":53},[39,12520,234],{"class":45},[39,12522,7594],{"class":45},[39,12524,12508],{"class":53},[39,12526,234],{"class":45},[39,12528,12529],{"class":53}," endl;",[39,12531,12532],{"class":128}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[39,12534,12535,12537,12539,12541,12543,12545,12547],{"class":41,"line":207},[39,12536,231],{"class":53},[39,12538,234],{"class":45},[39,12540,7594],{"class":45},[39,12542,12508],{"class":53},[39,12544,234],{"class":45},[39,12546,12529],{"class":53},[39,12548,12549],{"class":128}," \u002F\u002F第二次这个数据不再保留\n",[39,12551,12552,12554,12556,12558],{"class":41,"line":212},[39,12553,295],{"class":49},[39,12555,54],{"class":53},[39,12557,300],{"class":237},[39,12559,166],{"class":53},[39,12561,12562,12564,12566],{"class":41,"line":223},[39,12563,95],{"class":45},[39,12565,315],{"class":74},[39,12567,318],{"class":53},[39,12569,12570],{"class":41,"line":228},[39,12571,115],{"class":53},[19,12573,12574],{},"输出结果：",[19,12576,12577],{},[2585,12578],{"alt":12579,"src":12580},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,12582,12583],{},"总结：不要返回局部变量的地址",[328,12585,12586],{"start":92},[331,12587,12588],{},"堆区",[489,12590,12591,12594],{},[331,12592,12593],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[331,12595,12596],{},"在c++中主要利用new在堆区开辟内存",[30,12598,12600],{"className":32,"code":12599,"language":34,"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",[26,12601,12602,12617,12621,12626,12647,12654,12658,12666,12670,12675,12689,12701],{"__ignoreMap":35},[39,12603,12604,12606,12609,12612,12614],{"class":41,"line":42},[39,12605,46],{"class":45},[39,12607,12608],{"class":45},"  *",[39,12610,12611],{"class":49},"func",[39,12613,3520],{"class":53},[39,12615,12616],{"class":128},"  \u002F\u002F函数返回指针\n",[39,12618,12619],{"class":41,"line":92},[39,12620,542],{"class":53},[39,12622,12623],{"class":41,"line":112},[39,12624,12625],{"class":128},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[39,12627,12628,12630,12632,12634,12636,12639,12641,12643,12645],{"class":41,"line":118},[39,12629,5228],{"class":45},[39,12631,7594],{"class":45},[39,12633,19],{"class":53},[39,12635,1117],{"class":45},[39,12637,12638],{"class":45}," new",[39,12640,963],{"class":45},[39,12642,54],{"class":53},[39,12644,423],{"class":74},[39,12646,166],{"class":53},[39,12648,12649,12651],{"class":41,"line":125},[39,12650,5462],{"class":45},[39,12652,12653],{"class":53}," p;\n",[39,12655,12656],{"class":41,"line":132},[39,12657,115],{"class":53},[39,12659,12660,12662,12664],{"class":41,"line":138},[39,12661,46],{"class":45},[39,12663,217],{"class":49},[39,12665,537],{"class":53},[39,12667,12668],{"class":41,"line":169},[39,12669,542],{"class":53},[39,12671,12672],{"class":41,"line":190},[39,12673,12674],{"class":128},"    \u002F\u002F在堆区开辟数据\n",[39,12676,12677,12679,12681,12683,12685,12687],{"class":41,"line":202},[39,12678,1112],{"class":45},[39,12680,7594],{"class":45},[39,12682,19],{"class":53},[39,12684,1117],{"class":45},[39,12686,12611],{"class":49},[39,12688,782],{"class":53},[39,12690,12691,12693,12695,12697,12699],{"class":41,"line":207},[39,12692,2673],{"class":53},[39,12694,7495],{"class":45},[39,12696,19],{"class":53},[39,12698,234],{"class":45},[39,12700,2324],{"class":53},[39,12702,12703],{"class":41,"line":212},[39,12704,115],{"class":53},[19,12706,12707],{},"图片展示：",[19,12709,12710],{},[2585,12711],{"alt":12579,"src":12712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,12714,12715],{},"堆区内存由程序员管生死！！！",[328,12717,12718],{"start":112},[331,12719,12720],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,12722,12723],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,12725,12726,12727],{},"​语法：",[26,12728,12729],{}," new 数据类型",[19,12731,12732],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[30,12734,12736],{"className":32,"code":12735,"language":34,"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",[26,12737,12738,12743,12753,12757,12762,12767,12789,12793,12801,12805,12819,12831,12843,12855,12860,12865,12876,12880,12885,12893,12897,12902,12924,12950,12954,12972,12976,13002,13006,13018,13022,13027,13032,13040,13044,13048,13056,13060,13066,13072],{"__ignoreMap":35},[39,12739,12740],{"class":41,"line":42},[39,12741,12742],{"class":128},"\u002F\u002F1.new的基本语法\n",[39,12744,12745,12747,12749,12751],{"class":41,"line":92},[39,12746,46],{"class":45},[39,12748,7594],{"class":45},[39,12750,12611],{"class":49},[39,12752,537],{"class":53},[39,12754,12755],{"class":41,"line":112},[39,12756,542],{"class":53},[39,12758,12759],{"class":41,"line":118},[39,12760,12761],{"class":128},"    \u002F\u002F在堆区创建整型数据\n",[39,12763,12764],{"class":41,"line":125},[39,12765,12766],{"class":128},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[39,12768,12769,12771,12773,12775,12778,12780,12782,12784,12786],{"class":41,"line":132},[39,12770,1112],{"class":45},[39,12772,7594],{"class":45},[39,12774,19],{"class":53},[39,12776,12777],{"class":45},"=new",[39,12779,963],{"class":45},[39,12781,54],{"class":53},[39,12783,423],{"class":74},[39,12785,431],{"class":53},[39,12787,12788],{"class":128},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[39,12790,12791],{"class":41,"line":138},[39,12792,115],{"class":53},[39,12794,12795,12797,12799],{"class":41,"line":169},[39,12796,370],{"class":45},[39,12798,6666],{"class":49},[39,12800,537],{"class":53},[39,12802,12803],{"class":41,"line":190},[39,12804,542],{"class":53},[39,12806,12807,12809,12811,12813,12815,12817],{"class":41,"line":202},[39,12808,1112],{"class":45},[39,12810,7594],{"class":45},[39,12812,19],{"class":53},[39,12814,1117],{"class":45},[39,12816,12611],{"class":49},[39,12818,782],{"class":53},[39,12820,12821,12823,12825,12827,12829],{"class":41,"line":207},[39,12822,2673],{"class":53},[39,12824,7495],{"class":45},[39,12826,19],{"class":53},[39,12828,234],{"class":45},[39,12830,2324],{"class":53},[39,12832,12833,12835,12837,12839,12841],{"class":41,"line":212},[39,12834,2673],{"class":53},[39,12836,7495],{"class":45},[39,12838,19],{"class":53},[39,12840,234],{"class":45},[39,12842,2324],{"class":53},[39,12844,12845,12847,12849,12851,12853],{"class":41,"line":223},[39,12846,2673],{"class":53},[39,12848,7495],{"class":45},[39,12850,19],{"class":53},[39,12852,234],{"class":45},[39,12854,2324],{"class":53},[39,12856,12857],{"class":41,"line":228},[39,12858,12859],{"class":128},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[39,12861,12862],{"class":41,"line":263},[39,12863,12864],{"class":128},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[39,12866,12867,12870,12873],{"class":41,"line":287},[39,12868,12869],{"class":45},"    delete",[39,12871,12872],{"class":53}," p;",[39,12874,12875],{"class":128},"\u002F\u002F删除这块地址\n",[39,12877,12878],{"class":41,"line":292},[39,12879,115],{"class":53},[39,12881,12882],{"class":41,"line":305},[39,12883,12884],{"class":128},"\u002F\u002F2.在堆区利用new开辟数组\n",[39,12886,12887,12889,12891],{"class":41,"line":310},[39,12888,370],{"class":45},[39,12890,6734],{"class":49},[39,12892,537],{"class":53},[39,12894,12895],{"class":41,"line":321},[39,12896,542],{"class":53},[39,12898,12899],{"class":41,"line":713},[39,12900,12901],{"class":128},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[39,12903,12904,12906,12908,12910,12912,12914,12916,12918,12921],{"class":41,"line":718},[39,12905,1112],{"class":45},[39,12907,7594],{"class":45},[39,12909,4963],{"class":53},[39,12911,12777],{"class":45},[39,12913,963],{"class":45},[39,12915,2150],{"class":53},[39,12917,423],{"class":74},[39,12919,12920],{"class":53},"];",[39,12922,12923],{"class":128},"\u002F\u002F10代表数组有10个元素\n",[39,12925,12926,12928,12930,12932,12934,12936,12938,12940,12942,12944,12946,12948],{"class":41,"line":723},[39,12927,4284],{"class":45},[39,12929,2772],{"class":53},[39,12931,46],{"class":45},[39,12933,4115],{"class":53},[39,12935,1117],{"class":45},[39,12937,1457],{"class":74},[39,12939,4122],{"class":53},[39,12941,2170],{"class":45},[39,12943,423],{"class":74},[39,12945,4122],{"class":53},[39,12947,3389],{"class":45},[39,12949,574],{"class":53},[39,12951,12952],{"class":41,"line":729},[39,12953,3128],{"class":53},[39,12955,12956,12959,12961,12963,12965,12967,12969],{"class":41,"line":735},[39,12957,12958],{"class":53},"        arr[i]",[39,12960,1117],{"class":45},[39,12962,1704],{"class":53},[39,12964,101],{"class":45},[39,12966,278],{"class":74},[39,12968,1324],{"class":53},[39,12970,12971],{"class":128},"\u002F\u002F给10个元素赋值100～109\n",[39,12973,12974],{"class":41,"line":741},[39,12975,3284],{"class":53},[39,12977,12978,12980,12982,12984,12986,12988,12990,12992,12994,12996,12998,13000],{"class":41,"line":747},[39,12979,4284],{"class":45},[39,12981,2772],{"class":53},[39,12983,46],{"class":45},[39,12985,4115],{"class":53},[39,12987,1117],{"class":45},[39,12989,1457],{"class":74},[39,12991,4122],{"class":53},[39,12993,2170],{"class":45},[39,12995,423],{"class":74},[39,12997,4122],{"class":53},[39,12999,3389],{"class":45},[39,13001,574],{"class":53},[39,13003,13004],{"class":41,"line":753},[39,13005,3128],{"class":53},[39,13007,13008,13010,13012,13014,13016],{"class":41,"line":758},[39,13009,4534],{"class":53},[39,13011,234],{"class":45},[39,13013,5435],{"class":53},[39,13015,234],{"class":45},[39,13017,2324],{"class":53},[39,13019,13020],{"class":41,"line":763},[39,13021,3284],{"class":53},[39,13023,13024],{"class":41,"line":772},[39,13025,13026],{"class":128},"    \u002F\u002F释放堆区数组\n",[39,13028,13029],{"class":41,"line":777},[39,13030,13031],{"class":128},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[39,13033,13034,13037],{"class":41,"line":785},[39,13035,13036],{"class":45},"    delete[]",[39,13038,13039],{"class":53}," arr;\n",[39,13041,13042],{"class":41,"line":796},[39,13043,115],{"class":53},[39,13045,13046],{"class":41,"line":808},[39,13047,122],{"emptyLinePlaceholder":121},[39,13049,13050,13052,13054],{"class":41,"line":823},[39,13051,46],{"class":45},[39,13053,217],{"class":49},[39,13055,537],{"class":53},[39,13057,13058],{"class":41,"line":839},[39,13059,542],{"class":53},[39,13061,13062,13064],{"class":41,"line":845},[39,13063,6711],{"class":49},[39,13065,782],{"class":53},[39,13067,13068,13070],{"class":41,"line":856},[39,13069,6779],{"class":49},[39,13071,782],{"class":53},[39,13073,13074],{"class":41,"line":861},[39,13075,115],{"class":53},[1192,13077,13078],{},"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":92,"depth":92,"links":13080},[13081],{"id":11754,"depth":92,"text":11755,"children":13082},[13083,13084],{"id":11786,"depth":112,"text":11787},{"id":12410,"depth":112,"text":12411},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11746,"description":35},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13091,"title":13092,"body":13093,"description":35,"extension":1203,"meta":14569,"navigation":121,"path":14570,"seo":14571,"stem":14572,"__hash__":14573},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13094,"toc":14561},[13095,13098,13102,13105,13108,13277,13281,13286,13303,13308,13460,13464,13467,13470,13861,13865,13868,13873,13876,14188,14192,14198,14356,14358,14366,14370,14373,14380,14558],[10,13096,13092],{"id":13097},"_6引用",[14,13099,13101],{"id":13100},"_61引用基本用法","6.1引用基本用法",[19,13103,13104],{},"引用的本质：给变量起别名",[19,13106,13107],{},"语法：数据类型 &别名=原名",[30,13109,13111],{"className":32,"code":13110,"language":34,"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",[26,13112,13113,13121,13125,13137,13149,13153,13172,13191,13195,13206,13210,13229,13247,13251,13261,13265,13273],{"__ignoreMap":35},[39,13114,13115,13117,13119],{"class":41,"line":42},[39,13116,46],{"class":45},[39,13118,217],{"class":49},[39,13120,220],{"class":53},[39,13122,13123],{"class":41,"line":92},[39,13124,122],{"emptyLinePlaceholder":121},[39,13126,13127,13129,13131,13133,13135],{"class":41,"line":112},[39,13128,1112],{"class":45},[39,13130,98],{"class":53},[39,13132,1117],{"class":45},[39,13134,75],{"class":74},[39,13136,318],{"class":53},[39,13138,13139,13141,13143,13145,13147],{"class":41,"line":118},[39,13140,1112],{"class":45},[39,13142,919],{"class":45},[39,13144,12007],{"class":53},[39,13146,1117],{"class":45},[39,13148,2556],{"class":53},[39,13150,13151],{"class":41,"line":125},[39,13152,122],{"emptyLinePlaceholder":121},[39,13154,13155,13157,13159,13162,13164,13166,13168,13170],{"class":41,"line":132},[39,13156,231],{"class":53},[39,13158,234],{"class":45},[39,13160,13161],{"class":237}," \"a = \"",[39,13163,241],{"class":45},[39,13165,98],{"class":53},[39,13167,234],{"class":45},[39,13169,12529],{"class":53},[39,13171,8342],{"class":128},[39,13173,13174,13176,13178,13181,13183,13185,13187,13189],{"class":41,"line":138},[39,13175,231],{"class":53},[39,13177,234],{"class":45},[39,13179,13180],{"class":237}," \"b = \"",[39,13182,241],{"class":45},[39,13184,104],{"class":53},[39,13186,234],{"class":45},[39,13188,12529],{"class":53},[39,13190,8342],{"class":128},[39,13192,13193],{"class":41,"line":169},[39,13194,122],{"emptyLinePlaceholder":121},[39,13196,13197,13200,13202,13204],{"class":41,"line":190},[39,13198,13199],{"class":53},"    b ",[39,13201,1117],{"class":45},[39,13203,6831],{"class":74},[39,13205,318],{"class":53},[39,13207,13208],{"class":41,"line":202},[39,13209,122],{"emptyLinePlaceholder":121},[39,13211,13212,13214,13216,13218,13220,13222,13224,13226],{"class":41,"line":207},[39,13213,231],{"class":53},[39,13215,234],{"class":45},[39,13217,13161],{"class":237},[39,13219,241],{"class":45},[39,13221,98],{"class":53},[39,13223,234],{"class":45},[39,13225,12529],{"class":53},[39,13227,13228],{"class":128},"\u002F\u002F100\n",[39,13230,13231,13233,13235,13237,13239,13241,13243,13245],{"class":41,"line":212},[39,13232,231],{"class":53},[39,13234,234],{"class":45},[39,13236,13180],{"class":237},[39,13238,241],{"class":45},[39,13240,104],{"class":53},[39,13242,234],{"class":45},[39,13244,12529],{"class":53},[39,13246,13228],{"class":128},[39,13248,13249],{"class":41,"line":223},[39,13250,122],{"emptyLinePlaceholder":121},[39,13252,13253,13255,13257,13259],{"class":41,"line":228},[39,13254,295],{"class":49},[39,13256,54],{"class":53},[39,13258,300],{"class":237},[39,13260,166],{"class":53},[39,13262,13263],{"class":41,"line":263},[39,13264,122],{"emptyLinePlaceholder":121},[39,13266,13267,13269,13271],{"class":41,"line":287},[39,13268,95],{"class":45},[39,13270,315],{"class":74},[39,13272,318],{"class":53},[39,13274,13275],{"class":41,"line":292},[39,13276,115],{"class":53},[14,13278,13280],{"id":13279},"_62引用的注意事项","6.2引用的注意事项",[328,13282,13283],{},[331,13284,13285],{},"引用必须要初始化",[30,13287,13289],{"className":32,"code":13288,"language":34,"meta":35,"style":35},"int &b;\u002F\u002F非常错误！\n",[26,13290,13291],{"__ignoreMap":35},[39,13292,13293,13295,13297,13300],{"class":41,"line":42},[39,13294,46],{"class":45},[39,13296,919],{"class":45},[39,13298,13299],{"class":53},"b;",[39,13301,13302],{"class":128},"\u002F\u002F非常错误！\n",[328,13304,13305],{"start":92},[331,13306,13307],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[30,13309,13311],{"className":32,"code":13310,"language":34,"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",[26,13312,13313,13321,13333,13345,13353,13369,13382,13400,13418,13438,13448,13456],{"__ignoreMap":35},[39,13314,13315,13317,13319],{"class":41,"line":42},[39,13316,46],{"class":45},[39,13318,217],{"class":49},[39,13320,220],{"class":53},[39,13322,13323,13325,13327,13329,13331],{"class":41,"line":92},[39,13324,1112],{"class":45},[39,13326,98],{"class":53},[39,13328,1117],{"class":45},[39,13330,75],{"class":74},[39,13332,318],{"class":53},[39,13334,13335,13337,13339,13341,13343],{"class":41,"line":112},[39,13336,1112],{"class":45},[39,13338,104],{"class":53},[39,13340,1117],{"class":45},[39,13342,10018],{"class":74},[39,13344,318],{"class":53},[39,13346,13347,13350],{"class":41,"line":118},[39,13348,13349],{"class":128},"    \u002F\u002Fint &c;",[39,13351,13352],{"class":128}," \u002F\u002F错误，引用必须初始化\n",[39,13354,13355,13357,13359,13361,13363,13366],{"class":41,"line":125},[39,13356,1112],{"class":45},[39,13358,919],{"class":45},[39,13360,4029],{"class":53},[39,13362,1117],{"class":45},[39,13364,13365],{"class":53}," a;",[39,13367,13368],{"class":128}," \u002F\u002F一旦初始化后，就不可以更改\n",[39,13370,13371,13374,13376,13379],{"class":41,"line":132},[39,13372,13373],{"class":53},"    c ",[39,13375,1117],{"class":45},[39,13377,13378],{"class":53}," b;",[39,13380,13381],{"class":128}," \u002F\u002F这是赋值操作，不是更改引用\n",[39,13383,13384,13386,13388,13390,13392,13394,13396,13398],{"class":41,"line":138},[39,13385,231],{"class":53},[39,13387,234],{"class":45},[39,13389,13161],{"class":237},[39,13391,241],{"class":45},[39,13393,98],{"class":53},[39,13395,234],{"class":45},[39,13397,12529],{"class":53},[39,13399,8327],{"class":128},[39,13401,13402,13404,13406,13408,13410,13412,13414,13416],{"class":41,"line":169},[39,13403,231],{"class":53},[39,13405,234],{"class":45},[39,13407,13180],{"class":237},[39,13409,241],{"class":45},[39,13411,104],{"class":53},[39,13413,234],{"class":45},[39,13415,12529],{"class":53},[39,13417,8327],{"class":128},[39,13419,13420,13422,13424,13427,13429,13432,13434,13436],{"class":41,"line":190},[39,13421,231],{"class":53},[39,13423,234],{"class":45},[39,13425,13426],{"class":237}," \"c = \"",[39,13428,241],{"class":45},[39,13430,13431],{"class":53}," c ",[39,13433,234],{"class":45},[39,13435,12529],{"class":53},[39,13437,8327],{"class":128},[39,13439,13440,13442,13444,13446],{"class":41,"line":202},[39,13441,295],{"class":49},[39,13443,54],{"class":53},[39,13445,300],{"class":237},[39,13447,166],{"class":53},[39,13449,13450,13452,13454],{"class":41,"line":207},[39,13451,95],{"class":45},[39,13453,315],{"class":74},[39,13455,318],{"class":53},[39,13457,13458],{"class":41,"line":212},[39,13459,115],{"class":53},[14,13461,13463],{"id":13462},"_63引用做函数参数","6.3引用做函数参数",[19,13465,13466],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,13468,13469],{},"优点：可以简化指针修改实参",[30,13471,13473],{"className":32,"code":13472,"language":34,"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",[26,13474,13475,13480,13501,13512,13521,13530,13534,13538,13543,13565,13577,13589,13599,13603,13607,13612,13634,13644,13652,13660,13664,13668,13676,13680,13692,13704,13708,13719,13745,13749,13769,13793,13797,13807,13831,13835,13845,13849,13857],{"__ignoreMap":35},[39,13476,13477],{"class":41,"line":42},[39,13478,13479],{"class":128},"\u002F\u002F1. 值传递\n",[39,13481,13482,13484,13487,13489,13491,13493,13495,13497,13499],{"class":41,"line":92},[39,13483,370],{"class":45},[39,13485,13486],{"class":49}," mySwap01",[39,13488,54],{"class":53},[39,13490,46],{"class":45},[39,13492,60],{"class":59},[39,13494,63],{"class":53},[39,13496,46],{"class":45},[39,13498,68],{"class":59},[39,13500,89],{"class":53},[39,13502,13503,13505,13508,13510],{"class":41,"line":112},[39,13504,1112],{"class":45},[39,13506,13507],{"class":53}," temp ",[39,13509,1117],{"class":45},[39,13511,2556],{"class":53},[39,13513,13514,13517,13519],{"class":41,"line":118},[39,13515,13516],{"class":53},"    a ",[39,13518,1117],{"class":45},[39,13520,199],{"class":53},[39,13522,13523,13525,13527],{"class":41,"line":125},[39,13524,13199],{"class":53},[39,13526,1117],{"class":45},[39,13528,13529],{"class":53}," temp;\n",[39,13531,13532],{"class":41,"line":132},[39,13533,115],{"class":53},[39,13535,13536],{"class":41,"line":138},[39,13537,122],{"emptyLinePlaceholder":121},[39,13539,13540],{"class":41,"line":169},[39,13541,13542],{"class":128},"\u002F\u002F2. 地址传递\n",[39,13544,13545,13547,13550,13552,13555,13557,13559,13561,13563],{"class":41,"line":190},[39,13546,370],{"class":45},[39,13548,13549],{"class":49}," mySwap02",[39,13551,54],{"class":53},[39,13553,13554],{"class":45},"int*",[39,13556,60],{"class":59},[39,13558,63],{"class":53},[39,13560,13554],{"class":45},[39,13562,68],{"class":59},[39,13564,89],{"class":53},[39,13566,13567,13569,13571,13573,13575],{"class":41,"line":202},[39,13568,1112],{"class":45},[39,13570,13507],{"class":53},[39,13572,1117],{"class":45},[39,13574,7594],{"class":45},[39,13576,7273],{"class":53},[39,13578,13579,13581,13583,13585,13587],{"class":41,"line":207},[39,13580,7479],{"class":45},[39,13582,11981],{"class":53},[39,13584,1117],{"class":45},[39,13586,7594],{"class":45},[39,13588,7145],{"class":53},[39,13590,13591,13593,13595,13597],{"class":41,"line":212},[39,13592,7479],{"class":45},[39,13594,12007],{"class":53},[39,13596,1117],{"class":45},[39,13598,13529],{"class":53},[39,13600,13601],{"class":41,"line":223},[39,13602,115],{"class":53},[39,13604,13605],{"class":41,"line":228},[39,13606,122],{"emptyLinePlaceholder":121},[39,13608,13609],{"class":41,"line":263},[39,13610,13611],{"class":128},"\u002F\u002F3. 引用传递\n",[39,13613,13614,13616,13619,13621,13624,13626,13628,13630,13632],{"class":41,"line":287},[39,13615,370],{"class":45},[39,13617,13618],{"class":49}," mySwap03",[39,13620,54],{"class":53},[39,13622,13623],{"class":45},"int&",[39,13625,60],{"class":59},[39,13627,63],{"class":53},[39,13629,13623],{"class":45},[39,13631,68],{"class":59},[39,13633,89],{"class":53},[39,13635,13636,13638,13640,13642],{"class":41,"line":292},[39,13637,1112],{"class":45},[39,13639,13507],{"class":53},[39,13641,1117],{"class":45},[39,13643,2556],{"class":53},[39,13645,13646,13648,13650],{"class":41,"line":305},[39,13647,13516],{"class":53},[39,13649,1117],{"class":45},[39,13651,199],{"class":53},[39,13653,13654,13656,13658],{"class":41,"line":310},[39,13655,13199],{"class":53},[39,13657,1117],{"class":45},[39,13659,13529],{"class":53},[39,13661,13662],{"class":41,"line":321},[39,13663,115],{"class":53},[39,13665,13666],{"class":41,"line":713},[39,13667,122],{"emptyLinePlaceholder":121},[39,13669,13670,13672,13674],{"class":41,"line":718},[39,13671,46],{"class":45},[39,13673,217],{"class":49},[39,13675,220],{"class":53},[39,13677,13678],{"class":41,"line":723},[39,13679,122],{"emptyLinePlaceholder":121},[39,13681,13682,13684,13686,13688,13690],{"class":41,"line":729},[39,13683,1112],{"class":45},[39,13685,98],{"class":53},[39,13687,1117],{"class":45},[39,13689,75],{"class":74},[39,13691,318],{"class":53},[39,13693,13694,13696,13698,13700,13702],{"class":41,"line":735},[39,13695,1112],{"class":45},[39,13697,104],{"class":53},[39,13699,1117],{"class":45},[39,13701,10018],{"class":74},[39,13703,318],{"class":53},[39,13705,13706],{"class":41,"line":741},[39,13707,122],{"emptyLinePlaceholder":121},[39,13709,13710,13713,13716],{"class":41,"line":747},[39,13711,13712],{"class":49},"    mySwap01",[39,13714,13715],{"class":53},"(a, b);",[39,13717,13718],{"class":128},"\u002F\u002F值传递，形参不会修饰实参\n",[39,13720,13721,13723,13725,13728,13730,13732,13734,13737,13739,13741,13743],{"class":41,"line":753},[39,13722,231],{"class":53},[39,13724,234],{"class":45},[39,13726,13727],{"class":237}," \"a:\"",[39,13729,241],{"class":45},[39,13731,98],{"class":53},[39,13733,234],{"class":45},[39,13735,13736],{"class":237}," \" b:\"",[39,13738,241],{"class":45},[39,13740,104],{"class":53},[39,13742,234],{"class":45},[39,13744,260],{"class":53},[39,13746,13747],{"class":41,"line":758},[39,13748,122],{"emptyLinePlaceholder":121},[39,13750,13751,13754,13756,13758,13761,13763,13766],{"class":41,"line":763},[39,13752,13753],{"class":49},"    mySwap02",[39,13755,54],{"class":53},[39,13757,1617],{"class":45},[39,13759,13760],{"class":53},"a, ",[39,13762,1617],{"class":45},[39,13764,13765],{"class":53},"b);",[39,13767,13768],{"class":128},"\u002F\u002F地址传递，形参会修饰实参\n",[39,13770,13771,13773,13775,13777,13779,13781,13783,13785,13787,13789,13791],{"class":41,"line":772},[39,13772,231],{"class":53},[39,13774,234],{"class":45},[39,13776,13727],{"class":237},[39,13778,241],{"class":45},[39,13780,98],{"class":53},[39,13782,234],{"class":45},[39,13784,13736],{"class":237},[39,13786,241],{"class":45},[39,13788,104],{"class":53},[39,13790,234],{"class":45},[39,13792,260],{"class":53},[39,13794,13795],{"class":41,"line":777},[39,13796,122],{"emptyLinePlaceholder":121},[39,13798,13799,13802,13804],{"class":41,"line":785},[39,13800,13801],{"class":49},"    mySwap03",[39,13803,13715],{"class":53},[39,13805,13806],{"class":128},"\u002F\u002F引用传递，形参会修饰实参\n",[39,13808,13809,13811,13813,13815,13817,13819,13821,13823,13825,13827,13829],{"class":41,"line":796},[39,13810,231],{"class":53},[39,13812,234],{"class":45},[39,13814,13727],{"class":237},[39,13816,241],{"class":45},[39,13818,98],{"class":53},[39,13820,234],{"class":45},[39,13822,13736],{"class":237},[39,13824,241],{"class":45},[39,13826,104],{"class":53},[39,13828,234],{"class":45},[39,13830,260],{"class":53},[39,13832,13833],{"class":41,"line":808},[39,13834,122],{"emptyLinePlaceholder":121},[39,13836,13837,13839,13841,13843],{"class":41,"line":823},[39,13838,295],{"class":49},[39,13840,54],{"class":53},[39,13842,300],{"class":237},[39,13844,166],{"class":53},[39,13846,13847],{"class":41,"line":839},[39,13848,122],{"emptyLinePlaceholder":121},[39,13850,13851,13853,13855],{"class":41,"line":845},[39,13852,95],{"class":45},[39,13854,315],{"class":74},[39,13856,318],{"class":53},[39,13858,13859],{"class":41,"line":856},[39,13860,115],{"class":53},[14,13862,13864],{"id":13863},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13866,13867],{},"作用：引用是可以作为函数的返回值存在的",[19,13869,10093,13870],{},[350,13871,13872],{},"不要返回局部变量引用",[19,13874,13875],{},"用法：函数调用作为左值",[30,13877,13879],{"className":519,"code":13878,"language":521,"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",[26,13880,13881,13886,13894,13909,13915,13919,13923,13928,13936,13953,13959,13963,13967,13975,13979,13984,13998,14018,14037,14041,14046,14059,14079,14097,14101,14117,14121,14140,14158,14162,14172,14176,14184],{"__ignoreMap":35},[39,13882,13883],{"class":41,"line":42},[39,13884,13885],{"class":128},"\u002F\u002F返回局部变量引用\n",[39,13887,13888,13890,13892],{"class":41,"line":92},[39,13889,13623],{"class":45},[39,13891,6666],{"class":49},[39,13893,220],{"class":53},[39,13895,13896,13898,13900,13902,13904,13906],{"class":41,"line":112},[39,13897,1112],{"class":45},[39,13899,98],{"class":53},[39,13901,1117],{"class":45},[39,13903,75],{"class":74},[39,13905,1324],{"class":53},[39,13907,13908],{"class":128}," \u002F\u002F局部变量\n",[39,13910,13911,13913],{"class":41,"line":118},[39,13912,95],{"class":45},[39,13914,2556],{"class":53},[39,13916,13917],{"class":41,"line":125},[39,13918,115],{"class":53},[39,13920,13921],{"class":41,"line":132},[39,13922,122],{"emptyLinePlaceholder":121},[39,13924,13925],{"class":41,"line":138},[39,13926,13927],{"class":128},"\u002F\u002F返回静态变量引用\n",[39,13929,13930,13932,13934],{"class":41,"line":169},[39,13931,13623],{"class":45},[39,13933,6734],{"class":49},[39,13935,220],{"class":53},[39,13937,13938,13940,13942,13944,13946,13948,13950],{"class":41,"line":190},[39,13939,12082],{"class":45},[39,13941,963],{"class":45},[39,13943,98],{"class":53},[39,13945,1117],{"class":45},[39,13947,10018],{"class":74},[39,13949,1324],{"class":53},[39,13951,13952],{"class":128},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[39,13954,13955,13957],{"class":41,"line":202},[39,13956,95],{"class":45},[39,13958,2556],{"class":53},[39,13960,13961],{"class":41,"line":207},[39,13962,115],{"class":53},[39,13964,13965],{"class":41,"line":212},[39,13966,122],{"emptyLinePlaceholder":121},[39,13968,13969,13971,13973],{"class":41,"line":223},[39,13970,46],{"class":45},[39,13972,217],{"class":49},[39,13974,220],{"class":53},[39,13976,13977],{"class":41,"line":228},[39,13978,122],{"emptyLinePlaceholder":121},[39,13980,13981],{"class":41,"line":263},[39,13982,13983],{"class":128},"    \u002F\u002F不能返回局部变量的引用\n",[39,13985,13986,13989,13992,13994,13996],{"class":41,"line":287},[39,13987,13988],{"class":45},"    int&",[39,13990,13991],{"class":53}," ref ",[39,13993,1117],{"class":45},[39,13995,6666],{"class":49},[39,13997,782],{"class":53},[39,13999,14000,14002,14004,14007,14009,14011,14013,14015],{"class":41,"line":292},[39,14001,231],{"class":53},[39,14003,234],{"class":45},[39,14005,14006],{"class":237}," \"ref = \"",[39,14008,241],{"class":45},[39,14010,13991],{"class":53},[39,14012,234],{"class":45},[39,14014,12529],{"class":53},[39,14016,14017],{"class":128},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[39,14019,14020,14022,14024,14026,14028,14030,14032,14034],{"class":41,"line":305},[39,14021,231],{"class":53},[39,14023,234],{"class":45},[39,14025,14006],{"class":237},[39,14027,241],{"class":45},[39,14029,13991],{"class":53},[39,14031,234],{"class":45},[39,14033,12529],{"class":53},[39,14035,14036],{"class":128},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[39,14038,14039],{"class":41,"line":310},[39,14040,122],{"emptyLinePlaceholder":121},[39,14042,14043],{"class":41,"line":321},[39,14044,14045],{"class":128},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[39,14047,14048,14050,14053,14055,14057],{"class":41,"line":713},[39,14049,13988],{"class":45},[39,14051,14052],{"class":53}," ref2 ",[39,14054,1117],{"class":45},[39,14056,6734],{"class":49},[39,14058,782],{"class":53},[39,14060,14061,14063,14065,14068,14070,14072,14074,14076],{"class":41,"line":718},[39,14062,231],{"class":53},[39,14064,234],{"class":45},[39,14066,14067],{"class":237}," \"ref2 = \"",[39,14069,241],{"class":45},[39,14071,14052],{"class":53},[39,14073,234],{"class":45},[39,14075,12529],{"class":53},[39,14077,14078],{"class":128}," \u002F\u002F20\n",[39,14080,14081,14083,14085,14087,14089,14091,14093,14095],{"class":41,"line":723},[39,14082,231],{"class":53},[39,14084,234],{"class":45},[39,14086,14067],{"class":237},[39,14088,241],{"class":45},[39,14090,14052],{"class":53},[39,14092,234],{"class":45},[39,14094,12529],{"class":53},[39,14096,14078],{"class":128},[39,14098,14099],{"class":41,"line":729},[39,14100,122],{"emptyLinePlaceholder":121},[39,14102,14103,14105,14108,14110,14112,14114],{"class":41,"line":735},[39,14104,6779],{"class":49},[39,14106,14107],{"class":53},"() ",[39,14109,1117],{"class":45},[39,14111,4082],{"class":74},[39,14113,1324],{"class":53},[39,14115,14116],{"class":128},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[39,14118,14119],{"class":41,"line":741},[39,14120,122],{"emptyLinePlaceholder":121},[39,14122,14123,14125,14127,14129,14131,14133,14135,14137],{"class":41,"line":747},[39,14124,231],{"class":53},[39,14126,234],{"class":45},[39,14128,14067],{"class":237},[39,14130,241],{"class":45},[39,14132,14052],{"class":53},[39,14134,234],{"class":45},[39,14136,12529],{"class":53},[39,14138,14139],{"class":128}," \u002F\u002F1000\n",[39,14141,14142,14144,14146,14148,14150,14152,14154,14156],{"class":41,"line":753},[39,14143,231],{"class":53},[39,14145,234],{"class":45},[39,14147,14067],{"class":237},[39,14149,241],{"class":45},[39,14151,14052],{"class":53},[39,14153,234],{"class":45},[39,14155,12529],{"class":53},[39,14157,14139],{"class":128},[39,14159,14160],{"class":41,"line":758},[39,14161,122],{"emptyLinePlaceholder":121},[39,14163,14164,14166,14168,14170],{"class":41,"line":763},[39,14165,295],{"class":49},[39,14167,54],{"class":53},[39,14169,300],{"class":237},[39,14171,166],{"class":53},[39,14173,14174],{"class":41,"line":772},[39,14175,122],{"emptyLinePlaceholder":121},[39,14177,14178,14180,14182],{"class":41,"line":777},[39,14179,95],{"class":45},[39,14181,315],{"class":74},[39,14183,318],{"class":53},[39,14185,14186],{"class":41,"line":785},[39,14187,115],{"class":53},[14,14189,14191],{"id":14190},"_65引用的本质","6.5引用的本质",[19,14193,14194,14195],{},"本质：",[350,14196,14197],{},"引用的本质在c++内部实现是一个指针常量.",[30,14199,14201],{"className":32,"code":14200,"language":34,"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",[26,14202,14203,14208,14224,14238,14242,14251,14263,14267,14272,14283,14296,14300,14316,14333,14337,14344,14352],{"__ignoreMap":35},[39,14204,14205],{"class":41,"line":42},[39,14206,14207],{"class":128},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[39,14209,14210,14212,14214,14216,14218,14221],{"class":41,"line":92},[39,14211,370],{"class":45},[39,14213,50],{"class":49},[39,14215,54],{"class":53},[39,14217,13623],{"class":45},[39,14219,14220],{"class":59}," ref",[39,14222,14223],{"class":53},"){\n",[39,14225,14226,14229,14231,14233,14235],{"class":41,"line":112},[39,14227,14228],{"class":53},"    ref ",[39,14230,1117],{"class":45},[39,14232,6831],{"class":74},[39,14234,1324],{"class":53},[39,14236,14237],{"class":128}," \u002F\u002F ref是引用，转换为*ref = 100\n",[39,14239,14240],{"class":41,"line":118},[39,14241,115],{"class":53},[39,14243,14244,14246,14248],{"class":41,"line":125},[39,14245,46],{"class":45},[39,14247,217],{"class":49},[39,14249,14250],{"class":53},"(){\n",[39,14252,14253,14255,14257,14259,14261],{"class":41,"line":132},[39,14254,1112],{"class":45},[39,14256,98],{"class":53},[39,14258,1117],{"class":45},[39,14260,75],{"class":74},[39,14262,318],{"class":53},[39,14264,14265],{"class":41,"line":138},[39,14266,842],{"class":53},[39,14268,14269],{"class":41,"line":169},[39,14270,14271],{"class":128},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[39,14273,14274,14276,14278,14280],{"class":41,"line":190},[39,14275,13988],{"class":45},[39,14277,13991],{"class":53},[39,14279,1117],{"class":45},[39,14281,14282],{"class":53}," a; \n",[39,14284,14285,14287,14289,14291,14293],{"class":41,"line":202},[39,14286,14228],{"class":53},[39,14288,1117],{"class":45},[39,14290,10018],{"class":74},[39,14292,1324],{"class":53},[39,14294,14295],{"class":128}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[39,14297,14298],{"class":41,"line":207},[39,14299,842],{"class":53},[39,14301,14302,14304,14306,14308,14310,14312,14314],{"class":41,"line":212},[39,14303,231],{"class":53},[39,14305,234],{"class":45},[39,14307,13727],{"class":237},[39,14309,241],{"class":45},[39,14311,98],{"class":53},[39,14313,234],{"class":45},[39,14315,260],{"class":53},[39,14317,14318,14320,14322,14325,14327,14329,14331],{"class":41,"line":223},[39,14319,231],{"class":53},[39,14321,234],{"class":45},[39,14323,14324],{"class":237}," \"ref:\"",[39,14326,241],{"class":45},[39,14328,13991],{"class":53},[39,14330,234],{"class":45},[39,14332,260],{"class":53},[39,14334,14335],{"class":41,"line":228},[39,14336,842],{"class":53},[39,14338,14339,14341],{"class":41,"line":263},[39,14340,418],{"class":49},[39,14342,14343],{"class":53},"(a);\n",[39,14345,14346,14348,14350],{"class":41,"line":287},[39,14347,95],{"class":45},[39,14349,315],{"class":74},[39,14351,318],{"class":53},[39,14353,14354],{"class":41,"line":292},[39,14355,115],{"class":53},[19,14357,326],{},[328,14359,14360,14363],{},[331,14361,14362],{},"引用的本质，就是一个指针常量",[331,14364,14365],{},"引用一旦初始化，就不可以发生改变",[14,14367,14369],{"id":14368},"_66常量引用","6.6常量引用",[19,14371,14372],{},"作用：常量引用主要用来修饰形参",[19,14374,14375,14376,14379],{},"在函数形参列表中，可以加",[350,14377,14378],{},"const修饰形参","，防止形参改变实参",[30,14381,14383],{"className":32,"code":14382,"language":34,"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",[26,14384,14385,14390,14395,14414,14419,14432,14436,14440,14448,14452,14457,14462,14476,14480,14488,14500,14504,14509,14521,14528,14532,14542,14546,14554],{"__ignoreMap":35},[39,14386,14387],{"class":41,"line":42},[39,14388,14389],{"class":128},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[39,14391,14392],{"class":41,"line":92},[39,14393,14394],{"class":128},"\u002F\u002F加上const就不能修改实参的\n",[39,14396,14397,14399,14402,14404,14406,14409,14412],{"class":41,"line":112},[39,14398,370],{"class":45},[39,14400,14401],{"class":49}," showValue",[39,14403,54],{"class":53},[39,14405,960],{"class":45},[39,14407,14408],{"class":45}," int&",[39,14410,14411],{"class":59}," v",[39,14413,89],{"class":53},[39,14415,14416],{"class":41,"line":118},[39,14417,14418],{"class":128},"    \u002F\u002Fv += 100;\n",[39,14420,14421,14423,14425,14428,14430],{"class":41,"line":125},[39,14422,231],{"class":53},[39,14424,234],{"class":45},[39,14426,14427],{"class":53}," v ",[39,14429,234],{"class":45},[39,14431,260],{"class":53},[39,14433,14434],{"class":41,"line":132},[39,14435,115],{"class":53},[39,14437,14438],{"class":41,"line":138},[39,14439,122],{"emptyLinePlaceholder":121},[39,14441,14442,14444,14446],{"class":41,"line":169},[39,14443,46],{"class":45},[39,14445,217],{"class":49},[39,14447,220],{"class":53},[39,14449,14450],{"class":41,"line":190},[39,14451,122],{"emptyLinePlaceholder":121},[39,14453,14454],{"class":41,"line":202},[39,14455,14456],{"class":128},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[39,14458,14459],{"class":41,"line":207},[39,14460,14461],{"class":128},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[39,14463,14464,14466,14468,14470,14472,14474],{"class":41,"line":212},[39,14465,12283],{"class":45},[39,14467,14408],{"class":45},[39,14469,13991],{"class":53},[39,14471,1117],{"class":45},[39,14473,75],{"class":74},[39,14475,318],{"class":53},[39,14477,14478],{"class":41,"line":223},[39,14479,122],{"emptyLinePlaceholder":121},[39,14481,14482,14485],{"class":41,"line":228},[39,14483,14484],{"class":128},"    \u002F\u002Fref = 100;",[39,14486,14487],{"class":128},"  \u002F\u002F加入const后不可以修改变量\n",[39,14489,14490,14492,14494,14496,14498],{"class":41,"line":263},[39,14491,231],{"class":53},[39,14493,234],{"class":45},[39,14495,13991],{"class":53},[39,14497,234],{"class":45},[39,14499,260],{"class":53},[39,14501,14502],{"class":41,"line":287},[39,14503,122],{"emptyLinePlaceholder":121},[39,14505,14506],{"class":41,"line":292},[39,14507,14508],{"class":128},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[39,14510,14511,14513,14515,14517,14519],{"class":41,"line":305},[39,14512,1112],{"class":45},[39,14514,98],{"class":53},[39,14516,1117],{"class":45},[39,14518,75],{"class":74},[39,14520,318],{"class":53},[39,14522,14523,14526],{"class":41,"line":310},[39,14524,14525],{"class":49},"    showValue",[39,14527,14343],{"class":53},[39,14529,14530],{"class":41,"line":321},[39,14531,122],{"emptyLinePlaceholder":121},[39,14533,14534,14536,14538,14540],{"class":41,"line":713},[39,14535,295],{"class":49},[39,14537,54],{"class":53},[39,14539,300],{"class":237},[39,14541,166],{"class":53},[39,14543,14544],{"class":41,"line":718},[39,14545,122],{"emptyLinePlaceholder":121},[39,14547,14548,14550,14552],{"class":41,"line":723},[39,14549,95],{"class":45},[39,14551,315],{"class":74},[39,14553,318],{"class":53},[39,14555,14556],{"class":41,"line":729},[39,14557,115],{"class":53},[1192,14559,14560],{},"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":92,"depth":92,"links":14562},[14563,14564,14565,14566,14567,14568],{"id":13100,"depth":92,"text":13101},{"id":13279,"depth":92,"text":13280},{"id":13462,"depth":92,"text":13463},{"id":13863,"depth":92,"text":13864},{"id":14190,"depth":92,"text":14191},{"id":14368,"depth":92,"text":14369},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13092,"description":35},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":4,"title":5,"body":14575,"description":35,"extension":1203,"meta":15579,"navigation":121,"path":1205,"seo":15580,"stem":1207,"__hash__":1208},{"type":7,"value":14576,"toc":15571},[14577,14579,14581,14583,14587,14811,14813,14821,14823,14825,14831,14931,14933,14935,14937,14939,14941,14945,14959,14963,15275,15277,15279,15285,15569],[10,14578,5],{"id":12},[14,14580,17],{"id":16},[19,14582,21],{},[19,14584,24,14585],{},[26,14586,28],{},[30,14588,14589],{"className":32,"code":33,"language":34,"meta":35,"style":35},[26,14590,14591,14625,14639,14643,14647,14651,14655,14683,14703,14713,14717,14721,14729,14733,14759,14781,14785,14795,14799,14807],{"__ignoreMap":35},[39,14592,14593,14595,14597,14599,14601,14603,14605,14607,14609,14611,14613,14615,14617,14619,14621,14623],{"class":41,"line":42},[39,14594,46],{"class":45},[39,14596,50],{"class":49},[39,14598,54],{"class":53},[39,14600,46],{"class":45},[39,14602,60],{"class":59},[39,14604,63],{"class":53},[39,14606,46],{"class":45},[39,14608,68],{"class":59},[39,14610,71],{"class":45},[39,14612,75],{"class":74},[39,14614,63],{"class":53},[39,14616,46],{"class":45},[39,14618,82],{"class":59},[39,14620,71],{"class":45},[39,14622,75],{"class":74},[39,14624,89],{"class":53},[39,14626,14627,14629,14631,14633,14635,14637],{"class":41,"line":92},[39,14628,95],{"class":45},[39,14630,98],{"class":53},[39,14632,101],{"class":45},[39,14634,104],{"class":53},[39,14636,101],{"class":45},[39,14638,109],{"class":53},[39,14640,14641],{"class":41,"line":112},[39,14642,115],{"class":53},[39,14644,14645],{"class":41,"line":118},[39,14646,122],{"emptyLinePlaceholder":121},[39,14648,14649],{"class":41,"line":125},[39,14650,129],{"class":128},[39,14652,14653],{"class":41,"line":132},[39,14654,135],{"class":128},[39,14656,14657,14659,14661,14663,14665,14667,14669,14671,14673,14675,14677,14679,14681],{"class":41,"line":138},[39,14658,46],{"class":45},[39,14660,143],{"class":49},[39,14662,54],{"class":53},[39,14664,46],{"class":45},[39,14666,60],{"class":59},[39,14668,71],{"class":45},[39,14670,75],{"class":74},[39,14672,63],{"class":53},[39,14674,46],{"class":45},[39,14676,68],{"class":59},[39,14678,71],{"class":45},[39,14680,75],{"class":74},[39,14682,166],{"class":53},[39,14684,14685,14687,14689,14691,14693,14695,14697,14699,14701],{"class":41,"line":169},[39,14686,46],{"class":45},[39,14688,143],{"class":49},[39,14690,54],{"class":53},[39,14692,46],{"class":45},[39,14694,60],{"class":59},[39,14696,63],{"class":53},[39,14698,46],{"class":45},[39,14700,68],{"class":59},[39,14702,89],{"class":53},[39,14704,14705,14707,14709,14711],{"class":41,"line":190},[39,14706,95],{"class":45},[39,14708,98],{"class":53},[39,14710,101],{"class":45},[39,14712,199],{"class":53},[39,14714,14715],{"class":41,"line":202},[39,14716,115],{"class":53},[39,14718,14719],{"class":41,"line":207},[39,14720,122],{"emptyLinePlaceholder":121},[39,14722,14723,14725,14727],{"class":41,"line":212},[39,14724,46],{"class":45},[39,14726,217],{"class":49},[39,14728,220],{"class":53},[39,14730,14731],{"class":41,"line":223},[39,14732,122],{"emptyLinePlaceholder":121},[39,14734,14735,14737,14739,14741,14743,14745,14747,14749,14751,14753,14755,14757],{"class":41,"line":228},[39,14736,231],{"class":53},[39,14738,234],{"class":45},[39,14740,238],{"class":237},[39,14742,241],{"class":45},[39,14744,50],{"class":49},[39,14746,54],{"class":53},[39,14748,248],{"class":74},[39,14750,63],{"class":53},[39,14752,248],{"class":74},[39,14754,255],{"class":53},[39,14756,234],{"class":45},[39,14758,260],{"class":53},[39,14760,14761,14763,14765,14767,14769,14771,14773,14775,14777,14779],{"class":41,"line":263},[39,14762,231],{"class":53},[39,14764,234],{"class":45},[39,14766,238],{"class":237},[39,14768,241],{"class":45},[39,14770,50],{"class":49},[39,14772,54],{"class":53},[39,14774,278],{"class":74},[39,14776,255],{"class":53},[39,14778,234],{"class":45},[39,14780,260],{"class":53},[39,14782,14783],{"class":41,"line":287},[39,14784,122],{"emptyLinePlaceholder":121},[39,14786,14787,14789,14791,14793],{"class":41,"line":292},[39,14788,295],{"class":49},[39,14790,54],{"class":53},[39,14792,300],{"class":237},[39,14794,166],{"class":53},[39,14796,14797],{"class":41,"line":305},[39,14798,122],{"emptyLinePlaceholder":121},[39,14800,14801,14803,14805],{"class":41,"line":310},[39,14802,95],{"class":45},[39,14804,315],{"class":74},[39,14806,318],{"class":53},[39,14808,14809],{"class":41,"line":321},[39,14810,115],{"class":53},[19,14812,326],{},[328,14814,14815,14817,14819],{},[331,14816,333],{},[331,14818,336],{},[331,14820,339],{},[14,14822,343],{"id":342},[19,14824,346],{},[19,14826,14827,352,14829],{},[350,14828,24],{},[26,14830,355],{},[30,14832,14833],{"className":32,"code":358,"language":34,"meta":35,"style":35},[26,14834,14835,14839,14857,14869,14873,14881,14885,14901,14905,14915,14919,14927],{"__ignoreMap":35},[39,14836,14837],{"class":41,"line":42},[39,14838,365],{"class":128},[39,14840,14841,14843,14845,14847,14849,14851,14853,14855],{"class":41,"line":92},[39,14842,370],{"class":45},[39,14844,50],{"class":49},[39,14846,54],{"class":53},[39,14848,46],{"class":45},[39,14850,60],{"class":59},[39,14852,63],{"class":53},[39,14854,46],{"class":45},[39,14856,89],{"class":53},[39,14858,14859,14861,14863,14865,14867],{"class":41,"line":112},[39,14860,231],{"class":53},[39,14862,234],{"class":45},[39,14864,393],{"class":237},[39,14866,241],{"class":45},[39,14868,260],{"class":53},[39,14870,14871],{"class":41,"line":118},[39,14872,115],{"class":53},[39,14874,14875,14877,14879],{"class":41,"line":125},[39,14876,46],{"class":45},[39,14878,217],{"class":49},[39,14880,220],{"class":53},[39,14882,14883],{"class":41,"line":132},[39,14884,122],{"emptyLinePlaceholder":121},[39,14886,14887,14889,14891,14893,14895,14897,14899],{"class":41,"line":138},[39,14888,418],{"class":49},[39,14890,54],{"class":53},[39,14892,423],{"class":74},[39,14894,426],{"class":53},[39,14896,423],{"class":74},[39,14898,431],{"class":53},[39,14900,434],{"class":128},[39,14902,14903],{"class":41,"line":169},[39,14904,122],{"emptyLinePlaceholder":121},[39,14906,14907,14909,14911,14913],{"class":41,"line":190},[39,14908,295],{"class":49},[39,14910,54],{"class":53},[39,14912,300],{"class":237},[39,14914,166],{"class":53},[39,14916,14917],{"class":41,"line":202},[39,14918,122],{"emptyLinePlaceholder":121},[39,14920,14921,14923,14925],{"class":41,"line":207},[39,14922,95],{"class":45},[39,14924,315],{"class":74},[39,14926,318],{"class":53},[39,14928,14929],{"class":41,"line":212},[39,14930,115],{"class":53},[19,14932,467],{},[14,14934,471],{"id":470},[19,14936,474],{},[476,14938,479],{"id":478},[19,14940,482],{},[19,14942,14943],{},[350,14944,487],{},[489,14946,14947,14949,14951],{},[331,14948,493],{},[331,14950,496],{},[331,14952,499,14953,503,14955,507,14957],{},[350,14954,502],{},[350,14956,506],{},[350,14958,510],{},[19,14960,14961,516],{},[350,14962,515],{},[30,14964,14965],{"className":519,"code":520,"language":521,"meta":35,"style":35},[26,14966,14967,14971,14979,14983,14995,14999,15013,15017,15029,15033,15047,15051,15063,15067,15087,15091,15103,15107,15127,15131,15143,15147,15151,15155,15159,15163,15167,15171,15175,15179,15187,15191,15197,15207,15217,15231,15245,15249,15259,15263,15271],{"__ignoreMap":35},[39,14968,14969],{"class":41,"line":42},[39,14970,528],{"class":128},[39,14972,14973,14975,14977],{"class":41,"line":92},[39,14974,370],{"class":45},[39,14976,50],{"class":49},[39,14978,537],{"class":53},[39,14980,14981],{"class":41,"line":112},[39,14982,542],{"class":53},[39,14984,14985,14987,14989,14991,14993],{"class":41,"line":118},[39,14986,231],{"class":53},[39,14988,234],{"class":45},[39,14990,551],{"class":237},[39,14992,241],{"class":45},[39,14994,260],{"class":53},[39,14996,14997],{"class":41,"line":125},[39,14998,115],{"class":53},[39,15000,15001,15003,15005,15007,15009,15011],{"class":41,"line":132},[39,15002,370],{"class":45},[39,15004,50],{"class":49},[39,15006,54],{"class":53},[39,15008,46],{"class":45},[39,15010,60],{"class":59},[39,15012,574],{"class":53},[39,15014,15015],{"class":41,"line":138},[39,15016,542],{"class":53},[39,15018,15019,15021,15023,15025,15027],{"class":41,"line":169},[39,15020,231],{"class":53},[39,15022,234],{"class":45},[39,15024,587],{"class":237},[39,15026,241],{"class":45},[39,15028,260],{"class":53},[39,15030,15031],{"class":41,"line":190},[39,15032,115],{"class":53},[39,15034,15035,15037,15039,15041,15043,15045],{"class":41,"line":202},[39,15036,370],{"class":45},[39,15038,50],{"class":49},[39,15040,54],{"class":53},[39,15042,606],{"class":45},[39,15044,60],{"class":59},[39,15046,574],{"class":53},[39,15048,15049],{"class":41,"line":207},[39,15050,542],{"class":53},[39,15052,15053,15055,15057,15059,15061],{"class":41,"line":212},[39,15054,231],{"class":53},[39,15056,234],{"class":45},[39,15058,623],{"class":237},[39,15060,241],{"class":45},[39,15062,260],{"class":53},[39,15064,15065],{"class":41,"line":223},[39,15066,115],{"class":53},[39,15068,15069,15071,15073,15075,15077,15079,15081,15083,15085],{"class":41,"line":228},[39,15070,370],{"class":45},[39,15072,50],{"class":49},[39,15074,54],{"class":53},[39,15076,46],{"class":45},[39,15078,60],{"class":59},[39,15080,646],{"class":53},[39,15082,606],{"class":45},[39,15084,68],{"class":59},[39,15086,574],{"class":53},[39,15088,15089],{"class":41,"line":263},[39,15090,542],{"class":53},[39,15092,15093,15095,15097,15099,15101],{"class":41,"line":287},[39,15094,231],{"class":53},[39,15096,234],{"class":45},[39,15098,665],{"class":237},[39,15100,241],{"class":45},[39,15102,260],{"class":53},[39,15104,15105],{"class":41,"line":292},[39,15106,115],{"class":53},[39,15108,15109,15111,15113,15115,15117,15119,15121,15123,15125],{"class":41,"line":305},[39,15110,370],{"class":45},[39,15112,50],{"class":49},[39,15114,54],{"class":53},[39,15116,606],{"class":45},[39,15118,60],{"class":59},[39,15120,646],{"class":53},[39,15122,46],{"class":45},[39,15124,68],{"class":59},[39,15126,574],{"class":53},[39,15128,15129],{"class":41,"line":310},[39,15130,542],{"class":53},[39,15132,15133,15135,15137,15139,15141],{"class":41,"line":321},[39,15134,231],{"class":53},[39,15136,234],{"class":45},[39,15138,706],{"class":237},[39,15140,241],{"class":45},[39,15142,260],{"class":53},[39,15144,15145],{"class":41,"line":713},[39,15146,115],{"class":53},[39,15148,15149],{"class":41,"line":718},[39,15150,122],{"emptyLinePlaceholder":121},[39,15152,15153],{"class":41,"line":723},[39,15154,726],{"class":128},[39,15156,15157],{"class":41,"line":729},[39,15158,732],{"class":128},[39,15160,15161],{"class":41,"line":735},[39,15162,738],{"class":128},[39,15164,15165],{"class":41,"line":741},[39,15166,744],{"class":128},[39,15168,15169],{"class":41,"line":747},[39,15170,750],{"class":128},[39,15172,15173],{"class":41,"line":753},[39,15174,122],{"emptyLinePlaceholder":121},[39,15176,15177],{"class":41,"line":758},[39,15178,122],{"emptyLinePlaceholder":121},[39,15180,15181,15183,15185],{"class":41,"line":763},[39,15182,46],{"class":45},[39,15184,217],{"class":49},[39,15186,220],{"class":53},[39,15188,15189],{"class":41,"line":772},[39,15190,122],{"emptyLinePlaceholder":121},[39,15192,15193,15195],{"class":41,"line":777},[39,15194,418],{"class":49},[39,15196,782],{"class":53},[39,15198,15199,15201,15203,15205],{"class":41,"line":785},[39,15200,418],{"class":49},[39,15202,54],{"class":53},[39,15204,423],{"class":74},[39,15206,166],{"class":53},[39,15208,15209,15211,15213,15215],{"class":41,"line":796},[39,15210,418],{"class":49},[39,15212,54],{"class":53},[39,15214,803],{"class":74},[39,15216,166],{"class":53},[39,15218,15219,15221,15223,15225,15227,15229],{"class":41,"line":808},[39,15220,418],{"class":49},[39,15222,54],{"class":53},[39,15224,423],{"class":74},[39,15226,426],{"class":53},[39,15228,803],{"class":74},[39,15230,166],{"class":53},[39,15232,15233,15235,15237,15239,15241,15243],{"class":41,"line":823},[39,15234,418],{"class":49},[39,15236,54],{"class":53},[39,15238,803],{"class":74},[39,15240,832],{"class":53},[39,15242,423],{"class":74},[39,15244,166],{"class":53},[39,15246,15247],{"class":41,"line":839},[39,15248,842],{"class":53},[39,15250,15251,15253,15255,15257],{"class":41,"line":845},[39,15252,295],{"class":49},[39,15254,54],{"class":53},[39,15256,300],{"class":237},[39,15258,166],{"class":53},[39,15260,15261],{"class":41,"line":856},[39,15262,122],{"emptyLinePlaceholder":121},[39,15264,15265,15267,15269],{"class":41,"line":861},[39,15266,95],{"class":45},[39,15268,315],{"class":74},[39,15270,318],{"class":53},[39,15272,15273],{"class":41,"line":870},[39,15274,115],{"class":53},[19,15276,875],{},[476,15278,879],{"id":878},[489,15280,15281,15283],{},[331,15282,884],{},[331,15284,887],{},[30,15286,15287],{"className":32,"code":890,"language":34,"meta":35,"style":35},[26,15288,15289,15293,15297,15301,15317,15321,15333,15337,15341,15359,15363,15375,15379,15383,15387,15391,15395,15419,15423,15435,15439,15443,15457,15461,15473,15477,15481,15489,15493,15505,15513,15525,15529,15533,15539,15543,15553,15557,15565],{"__ignoreMap":35},[39,15290,15291],{"class":41,"line":42},[39,15292,897],{"class":128},[39,15294,15295],{"class":41,"line":92},[39,15296,902],{"class":128},[39,15298,15299],{"class":41,"line":112},[39,15300,122],{"emptyLinePlaceholder":121},[39,15302,15303,15305,15307,15309,15311,15313,15315],{"class":41,"line":118},[39,15304,370],{"class":45},[39,15306,50],{"class":49},[39,15308,54],{"class":53},[39,15310,46],{"class":45},[39,15312,919],{"class":45},[39,15314,922],{"class":59},[39,15316,574],{"class":53},[39,15318,15319],{"class":41,"line":125},[39,15320,542],{"class":53},[39,15322,15323,15325,15327,15329,15331],{"class":41,"line":132},[39,15324,231],{"class":53},[39,15326,234],{"class":45},[39,15328,937],{"class":237},[39,15330,241],{"class":45},[39,15332,260],{"class":53},[39,15334,15335],{"class":41,"line":138},[39,15336,115],{"class":53},[39,15338,15339],{"class":41,"line":169},[39,15340,122],{"emptyLinePlaceholder":121},[39,15342,15343,15345,15347,15349,15351,15353,15355,15357],{"class":41,"line":190},[39,15344,370],{"class":45},[39,15346,50],{"class":49},[39,15348,54],{"class":53},[39,15350,960],{"class":45},[39,15352,963],{"class":45},[39,15354,919],{"class":45},[39,15356,922],{"class":59},[39,15358,574],{"class":53},[39,15360,15361],{"class":41,"line":202},[39,15362,542],{"class":53},[39,15364,15365,15367,15369,15371,15373],{"class":41,"line":207},[39,15366,231],{"class":53},[39,15368,234],{"class":45},[39,15370,982],{"class":237},[39,15372,241],{"class":45},[39,15374,260],{"class":53},[39,15376,15377],{"class":41,"line":212},[39,15378,115],{"class":53},[39,15380,15381],{"class":41,"line":223},[39,15382,122],{"emptyLinePlaceholder":121},[39,15384,15385],{"class":41,"line":228},[39,15386,122],{"emptyLinePlaceholder":121},[39,15388,15389],{"class":41,"line":263},[39,15390,1003],{"class":128},[39,15392,15393],{"class":41,"line":287},[39,15394,122],{"emptyLinePlaceholder":121},[39,15396,15397,15399,15401,15403,15405,15407,15409,15411,15413,15415,15417],{"class":41,"line":292},[39,15398,370],{"class":45},[39,15400,143],{"class":49},[39,15402,54],{"class":53},[39,15404,46],{"class":45},[39,15406,60],{"class":59},[39,15408,63],{"class":53},[39,15410,46],{"class":45},[39,15412,68],{"class":59},[39,15414,71],{"class":45},[39,15416,75],{"class":74},[39,15418,574],{"class":53},[39,15420,15421],{"class":41,"line":305},[39,15422,542],{"class":53},[39,15424,15425,15427,15429,15431,15433],{"class":41,"line":310},[39,15426,231],{"class":53},[39,15428,234],{"class":45},[39,15430,1044],{"class":237},[39,15432,241],{"class":45},[39,15434,260],{"class":53},[39,15436,15437],{"class":41,"line":321},[39,15438,115],{"class":53},[39,15440,15441],{"class":41,"line":713},[39,15442,122],{"emptyLinePlaceholder":121},[39,15444,15445,15447,15449,15451,15453,15455],{"class":41,"line":718},[39,15446,370],{"class":45},[39,15448,143],{"class":49},[39,15450,54],{"class":53},[39,15452,46],{"class":45},[39,15454,60],{"class":59},[39,15456,574],{"class":53},[39,15458,15459],{"class":41,"line":723},[39,15460,542],{"class":53},[39,15462,15463,15465,15467,15469,15471],{"class":41,"line":729},[39,15464,231],{"class":53},[39,15466,234],{"class":45},[39,15468,1083],{"class":237},[39,15470,241],{"class":45},[39,15472,260],{"class":53},[39,15474,15475],{"class":41,"line":735},[39,15476,115],{"class":53},[39,15478,15479],{"class":41,"line":741},[39,15480,122],{"emptyLinePlaceholder":121},[39,15482,15483,15485,15487],{"class":41,"line":747},[39,15484,46],{"class":45},[39,15486,217],{"class":49},[39,15488,220],{"class":53},[39,15490,15491],{"class":41,"line":753},[39,15492,842],{"class":53},[39,15494,15495,15497,15499,15501,15503],{"class":41,"line":758},[39,15496,1112],{"class":45},[39,15498,98],{"class":53},[39,15500,1117],{"class":45},[39,15502,75],{"class":74},[39,15504,318],{"class":53},[39,15506,15507,15509,15511],{"class":41,"line":763},[39,15508,418],{"class":49},[39,15510,1128],{"class":53},[39,15512,1131],{"class":128},[39,15514,15515,15517,15519,15521,15523],{"class":41,"line":772},[39,15516,418],{"class":49},[39,15518,54],{"class":53},[39,15520,423],{"class":74},[39,15522,431],{"class":53},[39,15524,1144],{"class":128},[39,15526,15527],{"class":41,"line":777},[39,15528,122],{"emptyLinePlaceholder":121},[39,15530,15531],{"class":41,"line":785},[39,15532,122],{"emptyLinePlaceholder":121},[39,15534,15535,15537],{"class":41,"line":796},[39,15536,1157],{"class":128},[39,15538,1160],{"class":128},[39,15540,15541],{"class":41,"line":808},[39,15542,122],{"emptyLinePlaceholder":121},[39,15544,15545,15547,15549,15551],{"class":41,"line":823},[39,15546,295],{"class":49},[39,15548,54],{"class":53},[39,15550,300],{"class":237},[39,15552,166],{"class":53},[39,15554,15555],{"class":41,"line":839},[39,15556,122],{"emptyLinePlaceholder":121},[39,15558,15559,15561,15563],{"class":41,"line":845},[39,15560,95],{"class":45},[39,15562,315],{"class":74},[39,15564,318],{"class":53},[39,15566,15567],{"class":41,"line":856},[39,15568,115],{"class":53},[1192,15570,1194],{},{"title":35,"searchDepth":92,"depth":92,"links":15572},[15573,15574,15575],{"id":16,"depth":92,"text":17},{"id":342,"depth":92,"text":343},{"id":470,"depth":92,"text":471,"children":15576},[15577,15578],{"id":478,"depth":112,"text":479},{"id":878,"depth":112,"text":879},{},{"title":5,"description":35},{"id":15582,"title":15583,"body":15584,"description":24338,"extension":1203,"meta":24339,"navigation":121,"path":24340,"seo":24341,"stem":24342,"__hash__":24343},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15585,"toc":24319},[15586,15589,15595,15602,15607,15610,15613,15616,15620,15624,15627,15630,15638,15643,15646,15653,15658,15817,15820,16073,16076,16079,16082,16087,16090,16093,16104,16109,16345,16349,16359,16362,16370,16517,16521,16524,16527,16531,16976,16980,16988,16996,17908,17915,17920,18548,18551,18554,18557,18676,18679,18766,18769,18895,18898,18992,18995,19348,19352,19360,19364,19371,19374,19377,19388,19394,19399,19411,19419,19439,19447,19464,19650,19653,19657,19660,19663,19666,19669,19672,19675,19678,20138,20144,20148,20151,20162,20749,20752,21241,21245,21248,21251,21254,21257,21260,21268,21664,21668,21671,21674,22121,22124,22127,22132,22135,22140,22143,22147,22150,22152,22158,22161,22467,22477,22518,22522,22525,22527,22560,22563,22870,22872,22887,22890,22913,22922,22928,22931,22935,22938,22941,22946,22957,22962,22970,22975,23105,23108,23111,23286,23291,23503,23507,23510,23624,23629,23868,23872,23876,23879,23882,23887,23992,23995,23998,24001,24005,24116,24119,24122,24127,24179,24182,24185,24190,24236,24239,24244,24312,24314,24317],[10,15587,15583],{"id":15588},"_8类和对象",[19,15590,15591,15592],{},"C++面向对象的三大特性为",[350,15593,15594],{},"封装、继承、多态",[19,15596,15597,15598,15601],{},"C++认为",[350,15599,15600],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15603,15604],{},[350,15605,15606],{},"例如：",[19,15608,15609],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15611,15612],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15614,15615],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15617,15619],{"id":15618},"_81封装","8.1封装",[476,15621,15623],{"id":15622},"_811封装的意义","8.1.1封装的意义",[19,15625,15626],{},"封装是C++面向对象三大特性之一",[19,15628,15629],{},"封装的意义：",[489,15631,15632,15635],{},[331,15633,15634],{},"将属性和行为作为一个整体，表现生活中的事物",[331,15636,15637],{},"将属性和行为加以权限控制",[19,15639,15640],{},[350,15641,15642],{},"封装意义一：",[19,15644,15645],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,15647,15648,352,15650],{},[350,15649,24],{},[26,15651,15652],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[328,15654,15655],{},[331,15656,15657],{},"**示例1：**设计一个圆类，求圆的周长",[30,15659,15661],{"className":32,"code":15660,"language":34,"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",[26,15662,15663,15671,15675,15680,15685,15690,15695,15702,15707,15717,15721,15739,15743,15747,15755,15759,15764,15769,15774,15779,15790,15813],{"__ignoreMap":35},[39,15664,15665,15668],{"class":41,"line":42},[39,15666,15667],{"class":45},"class",[39,15669,15670],{"class":49}," Circle\n",[39,15672,15673],{"class":41,"line":92},[39,15674,542],{"class":53},[39,15676,15677],{"class":41,"line":112},[39,15678,15679],{"class":128},"    \u002F\u002F访问权限\n",[39,15681,15682],{"class":41,"line":118},[39,15683,15684],{"class":128},"    \u002F\u002F公共权限\n",[39,15686,15687],{"class":41,"line":125},[39,15688,15689],{"class":45},"public:\n",[39,15691,15692],{"class":41,"line":132},[39,15693,15694],{"class":128},"    \u002F\u002F属性\n",[39,15696,15697,15699],{"class":41,"line":138},[39,15698,1112],{"class":45},[39,15700,15701],{"class":53}," m_r;\n",[39,15703,15704],{"class":41,"line":169},[39,15705,15706],{"class":128},"    \u002F\u002F行为\n",[39,15708,15709,15712,15715],{"class":41,"line":190},[39,15710,15711],{"class":45},"    double",[39,15713,15714],{"class":49}," calculateZC",[39,15716,537],{"class":53},[39,15718,15719],{"class":41,"line":202},[39,15720,3128],{"class":53},[39,15722,15723,15726,15729,15731,15734,15736],{"class":41,"line":207},[39,15724,15725],{"class":45},"        return",[39,15727,15728],{"class":74}," 2",[39,15730,1717],{"class":45},[39,15732,15733],{"class":53},"PI",[39,15735,1717],{"class":45},[39,15737,15738],{"class":53},"m_r;\n",[39,15740,15741],{"class":41,"line":212},[39,15742,3284],{"class":53},[39,15744,15745],{"class":41,"line":223},[39,15746,5078],{"class":53},[39,15748,15749,15751,15753],{"class":41,"line":228},[39,15750,46],{"class":45},[39,15752,217],{"class":49},[39,15754,537],{"class":53},[39,15756,15757],{"class":41,"line":263},[39,15758,542],{"class":53},[39,15760,15761],{"class":41,"line":287},[39,15762,15763],{"class":128},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[39,15765,15766],{"class":41,"line":292},[39,15767,15768],{"class":128},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[39,15770,15771],{"class":41,"line":305},[39,15772,15773],{"class":53},"    Circle c1;\n",[39,15775,15776],{"class":41,"line":310},[39,15777,15778],{"class":128},"    \u002F\u002F给圆对象 的属性进行赋值\n",[39,15780,15781,15784,15786,15788],{"class":41,"line":321},[39,15782,15783],{"class":53},"    c1.m_r",[39,15785,1117],{"class":45},[39,15787,423],{"class":74},[39,15789,318],{"class":53},[39,15791,15792,15794,15796,15799,15801,15804,15807,15809,15811],{"class":41,"line":713},[39,15793,2673],{"class":53},[39,15795,234],{"class":45},[39,15797,15798],{"class":237},"\"圆的周长\"",[39,15800,234],{"class":45},[39,15802,15803],{"class":53},"c1.",[39,15805,15806],{"class":49},"calculateZC",[39,15808,3520],{"class":53},[39,15810,234],{"class":45},[39,15812,2324],{"class":53},[39,15814,15815],{"class":41,"line":718},[39,15816,115],{"class":53},[19,15818,15819],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[30,15821,15823],{"className":32,"code":15822,"language":34,"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",[26,15824,15825,15831,15841,15847,15853,15857,15861,15866,15873,15878,15896,15900,15910,15914,15919,15935,15939,15949,15953,15958,15966,15970,16002,16006,16010,16018,16022,16027,16032,16046,16060,16069],{"__ignoreMap":35},[39,15826,15827,15829],{"class":41,"line":42},[39,15828,3051],{"class":45},[39,15830,3054],{"class":237},[39,15832,15833,15835,15837,15839],{"class":41,"line":92},[39,15834,3059],{"class":45},[39,15836,3062],{"class":45},[39,15838,3065],{"class":49},[39,15840,318],{"class":53},[39,15842,15843,15845],{"class":41,"line":112},[39,15844,3051],{"class":45},[39,15846,8823],{"class":237},[39,15848,15849,15851],{"class":41,"line":118},[39,15850,15667],{"class":45},[39,15852,8836],{"class":49},[39,15854,15855],{"class":41,"line":125},[39,15856,542],{"class":53},[39,15858,15859],{"class":41,"line":132},[39,15860,15689],{"class":45},[39,15862,15863],{"class":41,"line":138},[39,15864,15865],{"class":53},"    string m_name;\n",[39,15867,15868,15870],{"class":41,"line":169},[39,15869,1112],{"class":45},[39,15871,15872],{"class":53}," m_id;\n",[39,15874,15875],{"class":41,"line":190},[39,15876,15877],{"class":128},"    \u002F\u002F赋值姓名\n",[39,15879,15880,15883,15886,15888,15891,15894],{"class":41,"line":202},[39,15881,15882],{"class":45},"    void",[39,15884,15885],{"class":49}," setName",[39,15887,54],{"class":53},[39,15889,15890],{"class":49},"string",[39,15892,15893],{"class":59}," name",[39,15895,574],{"class":53},[39,15897,15898],{"class":41,"line":207},[39,15899,3128],{"class":53},[39,15901,15902,15905,15907],{"class":41,"line":212},[39,15903,15904],{"class":53},"        m_name",[39,15906,1117],{"class":45},[39,15908,15909],{"class":53},"name;\n",[39,15911,15912],{"class":41,"line":223},[39,15913,3284],{"class":53},[39,15915,15916],{"class":41,"line":228},[39,15917,15918],{"class":128},"    \u002F\u002F赋值学号\n",[39,15920,15921,15923,15926,15928,15930,15933],{"class":41,"line":263},[39,15922,15882],{"class":45},[39,15924,15925],{"class":49}," setId",[39,15927,54],{"class":53},[39,15929,46],{"class":45},[39,15931,15932],{"class":59}," id",[39,15934,574],{"class":53},[39,15936,15937],{"class":41,"line":287},[39,15938,3128],{"class":53},[39,15940,15941,15944,15946],{"class":41,"line":292},[39,15942,15943],{"class":53},"        m_id",[39,15945,1117],{"class":45},[39,15947,15948],{"class":53},"id;\n",[39,15950,15951],{"class":41,"line":305},[39,15952,3284],{"class":53},[39,15954,15955],{"class":41,"line":310},[39,15956,15957],{"class":128},"    \u002F\u002F打印学生信息\n",[39,15959,15960,15962,15964],{"class":41,"line":321},[39,15961,15882],{"class":45},[39,15963,10683],{"class":49},[39,15965,537],{"class":53},[39,15967,15968],{"class":41,"line":713},[39,15969,3128],{"class":53},[39,15971,15972,15974,15976,15979,15981,15984,15986,15988,15990,15993,15995,15998,16000],{"class":41,"line":718},[39,15973,4534],{"class":53},[39,15975,234],{"class":45},[39,15977,15978],{"class":237},"\"姓名：\"",[39,15980,234],{"class":45},[39,15982,15983],{"class":53},"m_name",[39,15985,234],{"class":45},[39,15987,5440],{"class":237},[39,15989,234],{"class":45},[39,15991,15992],{"class":237},"\"学号：\"",[39,15994,234],{"class":45},[39,15996,15997],{"class":53},"m_id",[39,15999,234],{"class":45},[39,16001,2324],{"class":53},[39,16003,16004],{"class":41,"line":723},[39,16005,3284],{"class":53},[39,16007,16008],{"class":41,"line":729},[39,16009,5078],{"class":53},[39,16011,16012,16014,16016],{"class":41,"line":735},[39,16013,46],{"class":45},[39,16015,217],{"class":49},[39,16017,537],{"class":53},[39,16019,16020],{"class":41,"line":741},[39,16021,542],{"class":53},[39,16023,16024],{"class":41,"line":747},[39,16025,16026],{"class":128},"    \u002F\u002F实例化\n",[39,16028,16029],{"class":41,"line":753},[39,16030,16031],{"class":53},"    Student s1;\n",[39,16033,16034,16037,16040,16042,16044],{"class":41,"line":758},[39,16035,16036],{"class":53},"    s1.",[39,16038,16039],{"class":49},"setName",[39,16041,54],{"class":53},[39,16043,8990],{"class":237},[39,16045,166],{"class":53},[39,16047,16048,16050,16053,16055,16058],{"class":41,"line":763},[39,16049,16036],{"class":53},[39,16051,16052],{"class":49},"setId",[39,16054,54],{"class":53},[39,16056,16057],{"class":74},"123456",[39,16059,166],{"class":53},[39,16061,16062,16064,16067],{"class":41,"line":772},[39,16063,16036],{"class":53},[39,16065,16066],{"class":49},"printInfo",[39,16068,782],{"class":53},[39,16070,16071],{"class":41,"line":777},[39,16072,115],{"class":53},[19,16074,16075],{},"类中的属性和行为统称为成员",[19,16077,16078],{},"属性：成员属性(成员变量)",[19,16080,16081],{},"方法：成员函数(成员方法)",[19,16083,16084],{},[350,16085,16086],{},"封装意义二：",[19,16088,16089],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16091,16092],{},"访问权限有三种：",[328,16094,16095,16098,16101],{},[331,16096,16097],{},"public        公共权限",[331,16099,16100],{},"protected 保护权限",[331,16102,16103],{},"private      私有权限",[19,16105,16106],{},[350,16107,16108],{},"示例：",[30,16110,16112],{"className":519,"code":16111,"language":521,"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",[26,16113,16114,16119,16124,16129,16134,16138,16145,16149,16154,16158,16163,16167,16172,16177,16182,16186,16191,16196,16203,16207,16211,16219,16223,16234,16246,16258,16262,16266,16270,16278,16282,16287,16299,16307,16315,16319,16329,16333,16341],{"__ignoreMap":35},[39,16115,16116],{"class":41,"line":42},[39,16117,16118],{"class":128},"\u002F\u002F三种权限\n",[39,16120,16121],{"class":41,"line":92},[39,16122,16123],{"class":128},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[39,16125,16126],{"class":41,"line":112},[39,16127,16128],{"class":128},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[39,16130,16131],{"class":41,"line":118},[39,16132,16133],{"class":128},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[39,16135,16136],{"class":41,"line":125},[39,16137,122],{"emptyLinePlaceholder":121},[39,16139,16140,16142],{"class":41,"line":132},[39,16141,15667],{"class":45},[39,16143,16144],{"class":49}," Person\n",[39,16146,16147],{"class":41,"line":138},[39,16148,542],{"class":53},[39,16150,16151],{"class":41,"line":169},[39,16152,16153],{"class":128},"    \u002F\u002F姓名  公共权限\n",[39,16155,16156],{"class":41,"line":190},[39,16157,15689],{"class":45},[39,16159,16160],{"class":41,"line":202},[39,16161,16162],{"class":53},"    string m_Name;\n",[39,16164,16165],{"class":41,"line":207},[39,16166,122],{"emptyLinePlaceholder":121},[39,16168,16169],{"class":41,"line":212},[39,16170,16171],{"class":128},"    \u002F\u002F汽车  保护权限\n",[39,16173,16174],{"class":41,"line":223},[39,16175,16176],{"class":45},"protected:\n",[39,16178,16179],{"class":41,"line":228},[39,16180,16181],{"class":53},"    string m_Car;\n",[39,16183,16184],{"class":41,"line":263},[39,16185,122],{"emptyLinePlaceholder":121},[39,16187,16188],{"class":41,"line":287},[39,16189,16190],{"class":128},"    \u002F\u002F银行卡密码  私有权限\n",[39,16192,16193],{"class":41,"line":292},[39,16194,16195],{"class":45},"private:\n",[39,16197,16198,16200],{"class":41,"line":305},[39,16199,1112],{"class":45},[39,16201,16202],{"class":53}," m_Password;\n",[39,16204,16205],{"class":41,"line":310},[39,16206,122],{"emptyLinePlaceholder":121},[39,16208,16209],{"class":41,"line":321},[39,16210,15689],{"class":45},[39,16212,16213,16215,16217],{"class":41,"line":713},[39,16214,15882],{"class":45},[39,16216,50],{"class":49},[39,16218,537],{"class":53},[39,16220,16221],{"class":41,"line":718},[39,16222,3128],{"class":53},[39,16224,16225,16228,16230,16232],{"class":41,"line":723},[39,16226,16227],{"class":53},"        m_Name ",[39,16229,1117],{"class":45},[39,16231,10006],{"class":237},[39,16233,318],{"class":53},[39,16235,16236,16239,16241,16244],{"class":41,"line":729},[39,16237,16238],{"class":53},"        m_Car ",[39,16240,1117],{"class":45},[39,16242,16243],{"class":237}," \"拖拉机\"",[39,16245,318],{"class":53},[39,16247,16248,16251,16253,16256],{"class":41,"line":735},[39,16249,16250],{"class":53},"        m_Password ",[39,16252,1117],{"class":45},[39,16254,16255],{"class":74}," 123456",[39,16257,318],{"class":53},[39,16259,16260],{"class":41,"line":741},[39,16261,3284],{"class":53},[39,16263,16264],{"class":41,"line":747},[39,16265,5078],{"class":53},[39,16267,16268],{"class":41,"line":753},[39,16269,122],{"emptyLinePlaceholder":121},[39,16271,16272,16274,16276],{"class":41,"line":758},[39,16273,46],{"class":45},[39,16275,217],{"class":49},[39,16277,220],{"class":53},[39,16279,16280],{"class":41,"line":763},[39,16281,122],{"emptyLinePlaceholder":121},[39,16283,16284],{"class":41,"line":772},[39,16285,16286],{"class":53},"    Person p;\n",[39,16288,16289,16292,16294,16297],{"class":41,"line":777},[39,16290,16291],{"class":53},"    p.m_Name ",[39,16293,1117],{"class":45},[39,16295,16296],{"class":237}," \"李四\"",[39,16298,318],{"class":53},[39,16300,16301,16304],{"class":41,"line":785},[39,16302,16303],{"class":128},"    \u002F\u002Fp.m_Car = \"奔驰\";",[39,16305,16306],{"class":128},"  \u002F\u002F保护权限类外访问不到\n",[39,16308,16309,16312],{"class":41,"line":796},[39,16310,16311],{"class":128},"    \u002F\u002Fp.m_Password = 123;",[39,16313,16314],{"class":128}," \u002F\u002F私有权限类外访问不到\n",[39,16316,16317],{"class":41,"line":808},[39,16318,122],{"emptyLinePlaceholder":121},[39,16320,16321,16323,16325,16327],{"class":41,"line":823},[39,16322,295],{"class":49},[39,16324,54],{"class":53},[39,16326,300],{"class":237},[39,16328,166],{"class":53},[39,16330,16331],{"class":41,"line":839},[39,16332,122],{"emptyLinePlaceholder":121},[39,16334,16335,16337,16339],{"class":41,"line":845},[39,16336,95],{"class":45},[39,16338,315],{"class":74},[39,16340,318],{"class":53},[39,16342,16343],{"class":41,"line":856},[39,16344,115],{"class":53},[476,16346,16348],{"id":16347},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16350,16351,16352,16355,16356],{},"在C++中 struct和class唯一的",[350,16353,16354],{},"区别","就在于 ",[350,16357,16358],{},"默认的访问权限不同",[19,16360,16361],{},"区别：",[489,16363,16364,16367],{},[331,16365,16366],{},"struct 默认权限为公共",[331,16368,16369],{},"class   默认权限为私有",[30,16371,16373],{"className":519,"code":16372,"language":521,"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",[26,16374,16375,16382,16386,16396,16400,16404,16411,16415,16425,16429,16433,16441,16445,16450,16464,16468,16473,16487,16491,16501,16505,16513],{"__ignoreMap":35},[39,16376,16377,16379],{"class":41,"line":42},[39,16378,15667],{"class":45},[39,16380,16381],{"class":49}," C1\n",[39,16383,16384],{"class":41,"line":92},[39,16385,542],{"class":53},[39,16387,16388,16390,16393],{"class":41,"line":112},[39,16389,1112],{"class":45},[39,16391,16392],{"class":53},"  m_A;",[39,16394,16395],{"class":128}," \u002F\u002F默认是私有权限\n",[39,16397,16398],{"class":41,"line":118},[39,16399,5078],{"class":53},[39,16401,16402],{"class":41,"line":125},[39,16403,122],{"emptyLinePlaceholder":121},[39,16405,16406,16408],{"class":41,"line":132},[39,16407,8833],{"class":45},[39,16409,16410],{"class":49}," C2\n",[39,16412,16413],{"class":41,"line":138},[39,16414,542],{"class":53},[39,16416,16417,16419,16422],{"class":41,"line":169},[39,16418,1112],{"class":45},[39,16420,16421],{"class":53}," m_A;",[39,16423,16424],{"class":128},"  \u002F\u002F默认是公共权限\n",[39,16426,16427],{"class":41,"line":190},[39,16428,5078],{"class":53},[39,16430,16431],{"class":41,"line":202},[39,16432,122],{"emptyLinePlaceholder":121},[39,16434,16435,16437,16439],{"class":41,"line":207},[39,16436,46],{"class":45},[39,16438,217],{"class":49},[39,16440,220],{"class":53},[39,16442,16443],{"class":41,"line":212},[39,16444,122],{"emptyLinePlaceholder":121},[39,16446,16447],{"class":41,"line":223},[39,16448,16449],{"class":53},"    C1 c1;\n",[39,16451,16452,16455,16457,16459,16461],{"class":41,"line":228},[39,16453,16454],{"class":53},"    c1.m_A ",[39,16456,1117],{"class":45},[39,16458,75],{"class":74},[39,16460,1324],{"class":53},[39,16462,16463],{"class":128}," \u002F\u002F错误，访问权限是私有\n",[39,16465,16466],{"class":41,"line":263},[39,16467,122],{"emptyLinePlaceholder":121},[39,16469,16470],{"class":41,"line":287},[39,16471,16472],{"class":53},"    C2 c2;\n",[39,16474,16475,16478,16480,16482,16484],{"class":41,"line":292},[39,16476,16477],{"class":53},"    c2.m_A ",[39,16479,1117],{"class":45},[39,16481,75],{"class":74},[39,16483,1324],{"class":53},[39,16485,16486],{"class":128}," \u002F\u002F正确，访问权限是公共\n",[39,16488,16489],{"class":41,"line":305},[39,16490,122],{"emptyLinePlaceholder":121},[39,16492,16493,16495,16497,16499],{"class":41,"line":310},[39,16494,295],{"class":49},[39,16496,54],{"class":53},[39,16498,300],{"class":237},[39,16500,166],{"class":53},[39,16502,16503],{"class":41,"line":321},[39,16504,122],{"emptyLinePlaceholder":121},[39,16506,16507,16509,16511],{"class":41,"line":713},[39,16508,95],{"class":45},[39,16510,315],{"class":74},[39,16512,318],{"class":53},[39,16514,16515],{"class":41,"line":718},[39,16516,115],{"class":53},[476,16518,16520],{"id":16519},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16522,16523],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16525,16526],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16528,16529],{},[350,16530,16108],{},[30,16532,16534],{"className":519,"code":16533,"language":521,"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",[26,16535,16536,16546,16550,16554,16559,16573,16582,16586,16596,16600,16607,16611,16615,16619,16624,16633,16640,16644,16649,16665,16688,16701,16708,16712,16721,16725,16729,16734,16750,16760,16764,16768,16772,16780,16784,16794,16798,16806,16810,16814,16822,16826,16830,16835,16848,16871,16875,16880,16893,16915,16919,16924,16938,16946,16950,16960,16964,16972],{"__ignoreMap":35},[39,16537,16538,16540,16543],{"class":41,"line":42},[39,16539,15667],{"class":45},[39,16541,16542],{"class":49}," Person",[39,16544,16545],{"class":53}," {\n",[39,16547,16548],{"class":41,"line":92},[39,16549,15689],{"class":45},[39,16551,16552],{"class":41,"line":112},[39,16553,122],{"emptyLinePlaceholder":121},[39,16555,16556],{"class":41,"line":118},[39,16557,16558],{"class":128},"    \u002F\u002F姓名设置可读可写\n",[39,16560,16561,16563,16565,16567,16569,16571],{"class":41,"line":125},[39,16562,15882],{"class":45},[39,16564,15885],{"class":49},[39,16566,54],{"class":53},[39,16568,15890],{"class":49},[39,16570,15893],{"class":59},[39,16572,89],{"class":53},[39,16574,16575,16577,16579],{"class":41,"line":132},[39,16576,16227],{"class":53},[39,16578,1117],{"class":45},[39,16580,16581],{"class":53}," name;\n",[39,16583,16584],{"class":41,"line":138},[39,16585,3284],{"class":53},[39,16587,16588,16591,16594],{"class":41,"line":169},[39,16589,16590],{"class":49},"    string",[39,16592,16593],{"class":49}," getName",[39,16595,537],{"class":53},[39,16597,16598],{"class":41,"line":190},[39,16599,3128],{"class":53},[39,16601,16602,16604],{"class":41,"line":202},[39,16603,15725],{"class":45},[39,16605,16606],{"class":53}," m_Name;\n",[39,16608,16609],{"class":41,"line":207},[39,16610,3284],{"class":53},[39,16612,16613],{"class":41,"line":212},[39,16614,122],{"emptyLinePlaceholder":121},[39,16616,16617],{"class":41,"line":223},[39,16618,122],{"emptyLinePlaceholder":121},[39,16620,16621],{"class":41,"line":228},[39,16622,16623],{"class":128},"    \u002F\u002F获取年龄 \n",[39,16625,16626,16628,16631],{"class":41,"line":263},[39,16627,1112],{"class":45},[39,16629,16630],{"class":49}," getAge",[39,16632,220],{"class":53},[39,16634,16635,16637],{"class":41,"line":287},[39,16636,15725],{"class":45},[39,16638,16639],{"class":53}," m_Age;\n",[39,16641,16642],{"class":41,"line":292},[39,16643,3284],{"class":53},[39,16645,16646],{"class":41,"line":305},[39,16647,16648],{"class":128},"    \u002F\u002F设置年龄\n",[39,16650,16651,16653,16656,16658,16660,16663],{"class":41,"line":310},[39,16652,15882],{"class":45},[39,16654,16655],{"class":49}," setAge",[39,16657,54],{"class":53},[39,16659,46],{"class":45},[39,16661,16662],{"class":59}," age",[39,16664,89],{"class":53},[39,16666,16667,16669,16672,16674,16676,16678,16681,16683,16686],{"class":41,"line":321},[39,16668,3590],{"class":45},[39,16670,16671],{"class":53}," (age ",[39,16673,2170],{"class":45},[39,16675,315],{"class":74},[39,16677,4338],{"class":45},[39,16679,16680],{"class":53}," age ",[39,16682,2220],{"class":45},[39,16684,16685],{"class":74}," 150",[39,16687,89],{"class":53},[39,16689,16690,16692,16694,16697,16699],{"class":41,"line":713},[39,16691,10787],{"class":53},[39,16693,234],{"class":45},[39,16695,16696],{"class":237}," \"你个老妖精!\"",[39,16698,241],{"class":45},[39,16700,260],{"class":53},[39,16702,16703,16706],{"class":41,"line":718},[39,16704,16705],{"class":45},"            return",[39,16707,318],{"class":53},[39,16709,16710],{"class":41,"line":723},[39,16711,3622],{"class":53},[39,16713,16714,16717,16719],{"class":41,"line":729},[39,16715,16716],{"class":53},"        m_Age ",[39,16718,1117],{"class":45},[39,16720,8871],{"class":53},[39,16722,16723],{"class":41,"line":735},[39,16724,3284],{"class":53},[39,16726,16727],{"class":41,"line":741},[39,16728,122],{"emptyLinePlaceholder":121},[39,16730,16731],{"class":41,"line":747},[39,16732,16733],{"class":128},"    \u002F\u002F情人设置为只写\n",[39,16735,16736,16738,16741,16743,16745,16748],{"class":41,"line":753},[39,16737,15882],{"class":45},[39,16739,16740],{"class":49}," setLover",[39,16742,54],{"class":53},[39,16744,15890],{"class":49},[39,16746,16747],{"class":59}," lover",[39,16749,89],{"class":53},[39,16751,16752,16755,16757],{"class":41,"line":758},[39,16753,16754],{"class":53},"        m_Lover ",[39,16756,1117],{"class":45},[39,16758,16759],{"class":53}," lover;\n",[39,16761,16762],{"class":41,"line":763},[39,16763,3284],{"class":53},[39,16765,16766],{"class":41,"line":772},[39,16767,122],{"emptyLinePlaceholder":121},[39,16769,16770],{"class":41,"line":777},[39,16771,16195],{"class":45},[39,16773,16774,16777],{"class":41,"line":785},[39,16775,16776],{"class":53},"    string m_Name;",[39,16778,16779],{"class":128}," \u002F\u002F可读可写  姓名\n",[39,16781,16782],{"class":41,"line":796},[39,16783,842],{"class":53},[39,16785,16786,16788,16791],{"class":41,"line":808},[39,16787,1112],{"class":45},[39,16789,16790],{"class":53}," m_Age;",[39,16792,16793],{"class":128}," \u002F\u002F只读  年龄\n",[39,16795,16796],{"class":41,"line":823},[39,16797,122],{"emptyLinePlaceholder":121},[39,16799,16800,16803],{"class":41,"line":839},[39,16801,16802],{"class":53},"    string m_Lover;",[39,16804,16805],{"class":128}," \u002F\u002F只写  情人\n",[39,16807,16808],{"class":41,"line":845},[39,16809,5078],{"class":53},[39,16811,16812],{"class":41,"line":856},[39,16813,122],{"emptyLinePlaceholder":121},[39,16815,16816,16818,16820],{"class":41,"line":861},[39,16817,46],{"class":45},[39,16819,217],{"class":49},[39,16821,220],{"class":53},[39,16823,16824],{"class":41,"line":870},[39,16825,122],{"emptyLinePlaceholder":121},[39,16827,16828],{"class":41,"line":9084},[39,16829,16286],{"class":53},[39,16831,16832],{"class":41,"line":9090},[39,16833,16834],{"class":128},"    \u002F\u002F姓名设置\n",[39,16836,16837,16840,16842,16844,16846],{"class":41,"line":9102},[39,16838,16839],{"class":53},"    p.",[39,16841,16039],{"class":49},[39,16843,54],{"class":53},[39,16845,8990],{"class":237},[39,16847,166],{"class":53},[39,16849,16850,16852,16854,16857,16859,16862,16865,16867,16869],{"class":41,"line":9114},[39,16851,231],{"class":53},[39,16853,234],{"class":45},[39,16855,16856],{"class":237}," \"姓名： \"",[39,16858,241],{"class":45},[39,16860,16861],{"class":53}," p.",[39,16863,16864],{"class":49},"getName",[39,16866,14107],{"class":53},[39,16868,234],{"class":45},[39,16870,260],{"class":53},[39,16872,16873],{"class":41,"line":9126},[39,16874,122],{"emptyLinePlaceholder":121},[39,16876,16877],{"class":41,"line":10784},[39,16878,16879],{"class":128},"    \u002F\u002F年龄设置\n",[39,16881,16882,16884,16887,16889,16891],{"class":41,"line":10809},[39,16883,16839],{"class":53},[39,16885,16886],{"class":49},"setAge",[39,16888,54],{"class":53},[39,16890,1917],{"class":74},[39,16892,166],{"class":53},[39,16894,16895,16897,16899,16902,16904,16906,16909,16911,16913],{"class":41,"line":10832},[39,16896,231],{"class":53},[39,16898,234],{"class":45},[39,16900,16901],{"class":237}," \"年龄： \"",[39,16903,241],{"class":45},[39,16905,16861],{"class":53},[39,16907,16908],{"class":49},"getAge",[39,16910,14107],{"class":53},[39,16912,234],{"class":45},[39,16914,260],{"class":53},[39,16916,16917],{"class":41,"line":10856},[39,16918,122],{"emptyLinePlaceholder":121},[39,16920,16921],{"class":41,"line":10861},[39,16922,16923],{"class":128},"    \u002F\u002F情人设置\n",[39,16925,16926,16928,16931,16933,16936],{"class":41,"line":10866},[39,16927,16839],{"class":53},[39,16929,16930],{"class":49},"setLover",[39,16932,54],{"class":53},[39,16934,16935],{"class":237},"\"苍井\"",[39,16937,166],{"class":53},[39,16939,16940,16943],{"class":41,"line":10871},[39,16941,16942],{"class":128},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[39,16944,16945],{"class":128},"  \u002F\u002F只写属性，不可以读取\n",[39,16947,16948],{"class":41,"line":10880},[39,16949,122],{"emptyLinePlaceholder":121},[39,16951,16952,16954,16956,16958],{"class":41,"line":10885},[39,16953,295],{"class":49},[39,16955,54],{"class":53},[39,16957,300],{"class":237},[39,16959,166],{"class":53},[39,16961,16962],{"class":41,"line":10891},[39,16963,122],{"emptyLinePlaceholder":121},[39,16965,16966,16968,16970],{"class":41,"line":10912},[39,16967,95],{"class":45},[39,16969,315],{"class":74},[39,16971,318],{"class":53},[39,16973,16974],{"class":41,"line":10918},[39,16975,115],{"class":53},[476,16977,16979],{"id":16978},"_814封装案例","8.1.4封装案例",[328,16981,16982],{},[331,16983,16984,16987],{},[350,16985,16986],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[489,16989,16990,16993],{},[331,16991,16992],{},"求出立方体的面积和体积",[331,16994,16995],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[30,16997,16999],{"className":32,"code":16998,"language":34,"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",[26,17000,17001,17007,17017,17024,17028,17032,17037,17067,17071,17081,17091,17101,17105,17114,17118,17154,17158,17167,17171,17187,17191,17196,17205,17209,17216,17220,17229,17233,17240,17244,17253,17257,17264,17268,17273,17290,17294,17340,17344,17353,17357,17361,17365,17374,17378,17382,17387,17391,17397,17403,17409,17413,17417,17422,17444,17448,17502,17506,17514,17518,17523,17528,17541,17548,17564,17575,17581,17604,17610,17633,17647,17667,17673,17684,17707,17729,17734,17740,17754,17767,17772,17786,17791,17797,17802,17816,17821,17826,17840,17852,17857,17870,17875,17880,17885,17898,17903],{"__ignoreMap":35},[39,17002,17003,17005],{"class":41,"line":42},[39,17004,3051],{"class":45},[39,17006,3054],{"class":237},[39,17008,17009,17011,17013,17015],{"class":41,"line":92},[39,17010,3059],{"class":45},[39,17012,3062],{"class":45},[39,17014,3065],{"class":49},[39,17016,318],{"class":53},[39,17018,17019,17021],{"class":41,"line":112},[39,17020,15667],{"class":45},[39,17022,17023],{"class":49}," Cube\n",[39,17025,17026],{"class":41,"line":118},[39,17027,542],{"class":53},[39,17029,17030],{"class":41,"line":125},[39,17031,15689],{"class":45},[39,17033,17034],{"class":41,"line":132},[39,17035,17036],{"class":128},"    \u002F\u002F输入长宽高\n",[39,17038,17039,17041,17044,17046,17048,17051,17053,17055,17058,17060,17062,17065],{"class":41,"line":138},[39,17040,15882],{"class":45},[39,17042,17043],{"class":49}," setLwh",[39,17045,54],{"class":53},[39,17047,46],{"class":45},[39,17049,17050],{"class":59}," l",[39,17052,426],{"class":53},[39,17054,46],{"class":45},[39,17056,17057],{"class":59}," w",[39,17059,426],{"class":53},[39,17061,46],{"class":45},[39,17063,17064],{"class":59}," h",[39,17066,574],{"class":53},[39,17068,17069],{"class":41,"line":169},[39,17070,3128],{"class":53},[39,17072,17073,17076,17078],{"class":41,"line":190},[39,17074,17075],{"class":53},"        m_L",[39,17077,1117],{"class":45},[39,17079,17080],{"class":53},"l;\n",[39,17082,17083,17086,17088],{"class":41,"line":202},[39,17084,17085],{"class":53},"        m_W",[39,17087,1117],{"class":45},[39,17089,17090],{"class":53},"w;\n",[39,17092,17093,17096,17098],{"class":41,"line":207},[39,17094,17095],{"class":53},"        m_H",[39,17097,1117],{"class":45},[39,17099,17100],{"class":53},"h;\n",[39,17102,17103],{"class":41,"line":212},[39,17104,3284],{"class":53},[39,17106,17107,17109,17112],{"class":41,"line":223},[39,17108,1112],{"class":45},[39,17110,17111],{"class":49}," mianji",[39,17113,537],{"class":53},[39,17115,17116],{"class":41,"line":228},[39,17117,3128],{"class":53},[39,17119,17120,17122,17124,17126,17129,17131,17134,17136,17139,17141,17144,17146,17149,17151],{"class":41,"line":263},[39,17121,15725],{"class":45},[39,17123,15728],{"class":74},[39,17125,1717],{"class":45},[39,17127,17128],{"class":53},"(m_L",[39,17130,1717],{"class":45},[39,17132,17133],{"class":53},"m_W ",[39,17135,101],{"class":45},[39,17137,17138],{"class":53}," m_L",[39,17140,1717],{"class":45},[39,17142,17143],{"class":53},"m_H ",[39,17145,101],{"class":45},[39,17147,17148],{"class":53}," m_W",[39,17150,1717],{"class":45},[39,17152,17153],{"class":53},"m_H);\n",[39,17155,17156],{"class":41,"line":287},[39,17157,3284],{"class":53},[39,17159,17160,17162,17165],{"class":41,"line":292},[39,17161,1112],{"class":45},[39,17163,17164],{"class":49}," tiji",[39,17166,537],{"class":53},[39,17168,17169],{"class":41,"line":305},[39,17170,3128],{"class":53},[39,17172,17173,17175,17177,17179,17182,17184],{"class":41,"line":310},[39,17174,15725],{"class":45},[39,17176,17138],{"class":53},[39,17178,1717],{"class":45},[39,17180,17181],{"class":53},"m_W",[39,17183,1717],{"class":45},[39,17185,17186],{"class":53},"m_H;\n",[39,17188,17189],{"class":41,"line":321},[39,17190,3284],{"class":53},[39,17192,17193],{"class":41,"line":713},[39,17194,17195],{"class":128},"    \u002F\u002F获取长宽高\n",[39,17197,17198,17200,17203],{"class":41,"line":718},[39,17199,1112],{"class":45},[39,17201,17202],{"class":49}," getLength",[39,17204,537],{"class":53},[39,17206,17207],{"class":41,"line":723},[39,17208,3128],{"class":53},[39,17210,17211,17213],{"class":41,"line":729},[39,17212,15725],{"class":45},[39,17214,17215],{"class":53}," m_L;\n",[39,17217,17218],{"class":41,"line":735},[39,17219,3284],{"class":53},[39,17221,17222,17224,17227],{"class":41,"line":741},[39,17223,1112],{"class":45},[39,17225,17226],{"class":49}," getWidth",[39,17228,537],{"class":53},[39,17230,17231],{"class":41,"line":747},[39,17232,3128],{"class":53},[39,17234,17235,17237],{"class":41,"line":753},[39,17236,15725],{"class":45},[39,17238,17239],{"class":53}," m_W;\n",[39,17241,17242],{"class":41,"line":758},[39,17243,3284],{"class":53},[39,17245,17246,17248,17251],{"class":41,"line":763},[39,17247,1112],{"class":45},[39,17249,17250],{"class":49}," getHeight",[39,17252,537],{"class":53},[39,17254,17255],{"class":41,"line":772},[39,17256,3128],{"class":53},[39,17258,17259,17261],{"class":41,"line":777},[39,17260,15725],{"class":45},[39,17262,17263],{"class":53}," m_H;\n",[39,17265,17266],{"class":41,"line":785},[39,17267,3284],{"class":53},[39,17269,17270],{"class":41,"line":796},[39,17271,17272],{"class":128},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[39,17274,17275,17278,17281,17283,17286,17288],{"class":41,"line":808},[39,17276,17277],{"class":45},"    bool",[39,17279,17280],{"class":49}," isEqual",[39,17282,54],{"class":53},[39,17284,17285],{"class":49},"Cube",[39,17287,82],{"class":59},[39,17289,574],{"class":53},[39,17291,17292],{"class":41,"line":823},[39,17293,3128],{"class":53},[39,17295,17296,17298,17301,17304,17306,17308,17311,17313,17316,17319,17321,17323,17326,17328,17330,17333,17335,17337],{"class":41,"line":839},[39,17297,3590],{"class":45},[39,17299,17300],{"class":53}," (c.",[39,17302,17303],{"class":49},"getLength",[39,17305,14107],{"class":53},[39,17307,4032],{"class":45},[39,17309,17310],{"class":53}," m_L ",[39,17312,2825],{"class":45},[39,17314,17315],{"class":53}," c.",[39,17317,17318],{"class":49},"getWidth",[39,17320,14107],{"class":53},[39,17322,4032],{"class":45},[39,17324,17325],{"class":53}," m_W ",[39,17327,2825],{"class":45},[39,17329,17315],{"class":53},[39,17331,17332],{"class":49},"getHeight",[39,17334,14107],{"class":53},[39,17336,4032],{"class":45},[39,17338,17339],{"class":53}," m_H)\n",[39,17341,17342],{"class":41,"line":845},[39,17343,3603],{"class":53},[39,17345,17346,17348,17351],{"class":41,"line":856},[39,17347,16705],{"class":45},[39,17349,17350],{"class":74}," true",[39,17352,318],{"class":53},[39,17354,17355],{"class":41,"line":861},[39,17356,3622],{"class":53},[39,17358,17359],{"class":41,"line":870},[39,17360,3663],{"class":45},[39,17362,17363],{"class":41,"line":9084},[39,17364,3603],{"class":53},[39,17366,17367,17369,17372],{"class":41,"line":9090},[39,17368,16705],{"class":45},[39,17370,17371],{"class":74}," false",[39,17373,318],{"class":53},[39,17375,17376],{"class":41,"line":9102},[39,17377,3622],{"class":53},[39,17379,17380],{"class":41,"line":9114},[39,17381,3284],{"class":53},[39,17383,17384],{"class":41,"line":9126},[39,17385,17386],{"class":128},"    \u002F\u002F私有属性\n",[39,17388,17389],{"class":41,"line":10784},[39,17390,16195],{"class":45},[39,17392,17393,17395],{"class":41,"line":10809},[39,17394,1112],{"class":45},[39,17396,17215],{"class":53},[39,17398,17399,17401],{"class":41,"line":10832},[39,17400,1112],{"class":45},[39,17402,17239],{"class":53},[39,17404,17405,17407],{"class":41,"line":10856},[39,17406,1112],{"class":45},[39,17408,17263],{"class":53},[39,17410,17411],{"class":41,"line":10861},[39,17412,122],{"emptyLinePlaceholder":121},[39,17414,17415],{"class":41,"line":10866},[39,17416,5078],{"class":53},[39,17418,17419],{"class":41,"line":10871},[39,17420,17421],{"class":128},"\u002F\u002F全局函数判断两个立方体是否相等\n",[39,17423,17424,17426,17428,17430,17432,17435,17437,17439,17442],{"class":41,"line":10880},[39,17425,2479],{"class":45},[39,17427,17280],{"class":49},[39,17429,54],{"class":53},[39,17431,17285],{"class":49},[39,17433,17434],{"class":59}," c1",[39,17436,426],{"class":53},[39,17438,17285],{"class":49},[39,17440,17441],{"class":59}," c2",[39,17443,574],{"class":53},[39,17445,17446],{"class":41,"line":10885},[39,17447,542],{"class":53},[39,17449,17450,17452,17455,17457,17459,17461,17464,17466,17469,17471,17473,17475,17477,17479,17481,17483,17485,17487,17489,17491,17493,17495,17497,17499],{"class":41,"line":10891},[39,17451,95],{"class":45},[39,17453,17454],{"class":53}," (c1.",[39,17456,17303],{"class":49},[39,17458,14107],{"class":53},[39,17460,4032],{"class":45},[39,17462,17463],{"class":53}," c2.",[39,17465,17303],{"class":49},[39,17467,17468],{"class":53},"()) ",[39,17470,2825],{"class":45},[39,17472,17454],{"class":53},[39,17474,17318],{"class":49},[39,17476,14107],{"class":53},[39,17478,4032],{"class":45},[39,17480,17463],{"class":53},[39,17482,17318],{"class":49},[39,17484,17468],{"class":53},[39,17486,2825],{"class":45},[39,17488,17454],{"class":53},[39,17490,17332],{"class":49},[39,17492,14107],{"class":53},[39,17494,4032],{"class":45},[39,17496,17463],{"class":53},[39,17498,17332],{"class":49},[39,17500,17501],{"class":53},"());\n",[39,17503,17504],{"class":41,"line":10912},[39,17505,115],{"class":53},[39,17507,17508,17510,17512],{"class":41,"line":10918},[39,17509,46],{"class":45},[39,17511,217],{"class":49},[39,17513,537],{"class":53},[39,17515,17516],{"class":41,"line":10932},[39,17517,542],{"class":53},[39,17519,17520],{"class":41,"line":10938},[39,17521,17522],{"class":53},"    Cube c1;\n",[39,17524,17525],{"class":41,"line":10965},[39,17526,17527],{"class":128},"    \u002F\u002F输入立方体的长宽高\n",[39,17529,17530,17532,17534,17537,17539],{"class":41,"line":10974},[39,17531,2673],{"class":53},[39,17533,234],{"class":45},[39,17535,17536],{"class":237},"\"请输入第一个立方体的长、宽、高：\"",[39,17538,234],{"class":45},[39,17540,2324],{"class":53},[39,17542,17543,17545],{"class":41,"line":10980},[39,17544,1112],{"class":45},[39,17546,17547],{"class":53}," l,w,h,l1,w1,h1;\n",[39,17549,17550,17552,17554,17556,17558,17560,17562],{"class":41,"line":10988},[39,17551,3110],{"class":53},[39,17553,2553],{"class":45},[39,17555,1779],{"class":53},[39,17557,2553],{"class":45},[39,17559,2055],{"class":53},[39,17561,2553],{"class":45},[39,17563,17100],{"class":53},[39,17565,17566,17569,17572],{"class":41,"line":10993},[39,17567,17568],{"class":53},"    c1.",[39,17570,17571],{"class":49},"setLwh",[39,17573,17574],{"class":53},"(l,w,h);\n",[39,17576,17578],{"class":41,"line":17577},66,[39,17579,17580],{"class":128},"    \u002F\u002F面积\n",[39,17582,17584,17586,17588,17591,17593,17595,17598,17600,17602],{"class":41,"line":17583},67,[39,17585,2673],{"class":53},[39,17587,234],{"class":45},[39,17589,17590],{"class":237},"\"立方体的表面积为：\"",[39,17592,234],{"class":45},[39,17594,15803],{"class":53},[39,17596,17597],{"class":49},"mianji",[39,17599,3520],{"class":53},[39,17601,234],{"class":45},[39,17603,2324],{"class":53},[39,17605,17607],{"class":41,"line":17606},68,[39,17608,17609],{"class":128},"    \u002F\u002F体积\n",[39,17611,17613,17615,17617,17620,17622,17624,17627,17629,17631],{"class":41,"line":17612},69,[39,17614,2673],{"class":53},[39,17616,234],{"class":45},[39,17618,17619],{"class":237},"\"立方体的体积为：\"",[39,17621,234],{"class":45},[39,17623,15803],{"class":53},[39,17625,17626],{"class":49},"tiji",[39,17628,3520],{"class":53},[39,17630,234],{"class":45},[39,17632,2324],{"class":53},[39,17634,17636,17638,17640,17643,17645],{"class":41,"line":17635},70,[39,17637,2673],{"class":53},[39,17639,234],{"class":45},[39,17641,17642],{"class":237},"\"请输入第二个立方体的长、宽、高：\"",[39,17644,234],{"class":45},[39,17646,2324],{"class":53},[39,17648,17650,17652,17654,17657,17659,17662,17664],{"class":41,"line":17649},71,[39,17651,3110],{"class":53},[39,17653,2553],{"class":45},[39,17655,17656],{"class":53},"l1",[39,17658,2553],{"class":45},[39,17660,17661],{"class":53},"w1",[39,17663,2553],{"class":45},[39,17665,17666],{"class":53},"h1;\n",[39,17668,17670],{"class":41,"line":17669},72,[39,17671,17672],{"class":53},"    Cube c2;\n",[39,17674,17676,17679,17681],{"class":41,"line":17675},73,[39,17677,17678],{"class":53},"    c2.",[39,17680,17571],{"class":49},[39,17682,17683],{"class":53},"(l1,w1,h1);\n",[39,17685,17687,17689,17691,17694,17696,17699,17701,17703,17705],{"class":41,"line":17686},74,[39,17688,2673],{"class":53},[39,17690,234],{"class":45},[39,17692,17693],{"class":237},"\"第二个立方体的表面积为：\"",[39,17695,234],{"class":45},[39,17697,17698],{"class":53},"c2.",[39,17700,17597],{"class":49},[39,17702,3520],{"class":53},[39,17704,234],{"class":45},[39,17706,2324],{"class":53},[39,17708,17710,17712,17714,17717,17719,17721,17723,17725,17727],{"class":41,"line":17709},75,[39,17711,2673],{"class":53},[39,17713,234],{"class":45},[39,17715,17716],{"class":237},"\"第二个立方体的体积为：\"",[39,17718,234],{"class":45},[39,17720,17698],{"class":53},[39,17722,17626],{"class":49},[39,17724,3520],{"class":53},[39,17726,234],{"class":45},[39,17728,2324],{"class":53},[39,17730,17732],{"class":41,"line":17731},76,[39,17733,122],{"emptyLinePlaceholder":121},[39,17735,17737],{"class":41,"line":17736},77,[39,17738,17739],{"class":128},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[39,17741,17743,17745,17747,17750,17752],{"class":41,"line":17742},78,[39,17744,2673],{"class":53},[39,17746,234],{"class":45},[39,17748,17749],{"class":237},"\"内部函数判断结果：\"",[39,17751,234],{"class":45},[39,17753,2324],{"class":53},[39,17755,17757,17759,17761,17764],{"class":41,"line":17756},79,[39,17758,4184],{"class":45},[39,17760,17454],{"class":53},[39,17762,17763],{"class":49},"isEqual",[39,17765,17766],{"class":53},"(c2))\n",[39,17768,17770],{"class":41,"line":17769},80,[39,17771,3128],{"class":53},[39,17773,17775,17777,17779,17782,17784],{"class":41,"line":17774},81,[39,17776,4534],{"class":53},[39,17778,234],{"class":45},[39,17780,17781],{"class":237},"\"两个立方体相等\"",[39,17783,234],{"class":45},[39,17785,2324],{"class":53},[39,17787,17789],{"class":41,"line":17788},82,[39,17790,3284],{"class":53},[39,17792,17794],{"class":41,"line":17793},83,[39,17795,17796],{"class":45},"    else\n",[39,17798,17800],{"class":41,"line":17799},84,[39,17801,3128],{"class":53},[39,17803,17805,17807,17809,17812,17814],{"class":41,"line":17804},85,[39,17806,4534],{"class":53},[39,17808,234],{"class":45},[39,17810,17811],{"class":237},"\"两个立方体不相等\"",[39,17813,234],{"class":45},[39,17815,2324],{"class":53},[39,17817,17819],{"class":41,"line":17818},86,[39,17820,3284],{"class":53},[39,17822,17824],{"class":41,"line":17823},87,[39,17825,122],{"emptyLinePlaceholder":121},[39,17827,17829,17831,17833,17836,17838],{"class":41,"line":17828},88,[39,17830,2673],{"class":53},[39,17832,234],{"class":45},[39,17834,17835],{"class":237},"\"全局函数判断结果：\"",[39,17837,234],{"class":45},[39,17839,2324],{"class":53},[39,17841,17843,17845,17847,17849],{"class":41,"line":17842},89,[39,17844,4184],{"class":45},[39,17846,2772],{"class":53},[39,17848,17763],{"class":49},[39,17850,17851],{"class":53},"(c1, c2))\n",[39,17853,17855],{"class":41,"line":17854},90,[39,17856,3128],{"class":53},[39,17858,17860,17862,17864,17866,17868],{"class":41,"line":17859},91,[39,17861,4534],{"class":53},[39,17863,234],{"class":45},[39,17865,17781],{"class":237},[39,17867,234],{"class":45},[39,17869,2324],{"class":53},[39,17871,17873],{"class":41,"line":17872},92,[39,17874,3284],{"class":53},[39,17876,17878],{"class":41,"line":17877},93,[39,17879,17796],{"class":45},[39,17881,17883],{"class":41,"line":17882},94,[39,17884,3128],{"class":53},[39,17886,17888,17890,17892,17894,17896],{"class":41,"line":17887},95,[39,17889,4534],{"class":53},[39,17891,234],{"class":45},[39,17893,17811],{"class":237},[39,17895,234],{"class":45},[39,17897,2324],{"class":53},[39,17899,17901],{"class":41,"line":17900},96,[39,17902,3284],{"class":53},[39,17904,17906],{"class":41,"line":17905},97,[39,17907,115],{"class":53},[328,17909,17910],{"start":92},[331,17911,17912],{},[350,17913,17914],{},"练习案例2：点和圆的关系",[489,17916,17917],{},[331,17918,17919],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[30,17921,17923],{"className":32,"code":17922,"language":34,"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",[26,17924,17925,17931,17941,17948,17955,17959,17963,17968,18002,18007,18023,18037,18041,18045,18052,18059,18063,18069,18073,18077,18081,18103,18126,18131,18145,18160,18164,18168,18174,18179,18184,18188,18214,18218,18248,18276,18304,18321,18325,18338,18342,18346,18350,18363,18367,18371,18379,18383,18387,18391,18396,18400,18411,18418,18427,18437,18448,18455,18468,18479,18489,18500,18507,18521,18526,18536,18544],{"__ignoreMap":35},[39,17926,17927,17929],{"class":41,"line":42},[39,17928,3051],{"class":45},[39,17930,3054],{"class":237},[39,17932,17933,17935,17937,17939],{"class":41,"line":92},[39,17934,3059],{"class":45},[39,17936,3062],{"class":45},[39,17938,3065],{"class":49},[39,17940,318],{"class":53},[39,17942,17943,17945],{"class":41,"line":112},[39,17944,3051],{"class":45},[39,17946,17947],{"class":237},"\u003Ccmath>\n",[39,17949,17950,17952],{"class":41,"line":118},[39,17951,15667],{"class":45},[39,17953,17954],{"class":49}," Point\n",[39,17956,17957],{"class":41,"line":125},[39,17958,542],{"class":53},[39,17960,17961],{"class":41,"line":132},[39,17962,15689],{"class":45},[39,17964,17965],{"class":41,"line":138},[39,17966,17967],{"class":128},"    \u002F\u002F赋值\n",[39,17969,17970,17972,17975,17977,17979,17982,17984,17986,17989,17992,17994,17997,17999],{"class":41,"line":169},[39,17971,15882],{"class":45},[39,17973,17974],{"class":49}," setPoint",[39,17976,54],{"class":53},[39,17978,606],{"class":45},[39,17980,17981],{"class":59}," x",[39,17983,63],{"class":53},[39,17985,606],{"class":45},[39,17987,17988],{"class":59}," y",[39,17990,17991],{"class":53},") { m_x ",[39,17993,1117],{"class":45},[39,17995,17996],{"class":53}," x; m_y ",[39,17998,1117],{"class":45},[39,18000,18001],{"class":53}," y; }\n",[39,18003,18004],{"class":41,"line":190},[39,18005,18006],{"class":128},"    \u002F\u002F获取坐标\n",[39,18008,18009,18011,18014,18017,18020],{"class":41,"line":202},[39,18010,15711],{"class":45},[39,18012,18013],{"class":49}," getX",[39,18015,18016],{"class":53},"() { ",[39,18018,18019],{"class":45},"return",[39,18021,18022],{"class":53}," m_x; }\n",[39,18024,18025,18027,18030,18032,18034],{"class":41,"line":207},[39,18026,15711],{"class":45},[39,18028,18029],{"class":49}," getY",[39,18031,18016],{"class":53},[39,18033,18019],{"class":45},[39,18035,18036],{"class":53}," m_y; }\n",[39,18038,18039],{"class":41,"line":212},[39,18040,122],{"emptyLinePlaceholder":121},[39,18042,18043],{"class":41,"line":223},[39,18044,16195],{"class":45},[39,18046,18047,18049],{"class":41,"line":228},[39,18048,15711],{"class":45},[39,18050,18051],{"class":53}," m_x;\n",[39,18053,18054,18056],{"class":41,"line":263},[39,18055,15711],{"class":45},[39,18057,18058],{"class":53}," m_y;\n",[39,18060,18061],{"class":41,"line":287},[39,18062,5078],{"class":53},[39,18064,18065,18067],{"class":41,"line":292},[39,18066,15667],{"class":45},[39,18068,15670],{"class":49},[39,18070,18071],{"class":41,"line":305},[39,18072,542],{"class":53},[39,18074,18075],{"class":41,"line":310},[39,18076,15689],{"class":45},[39,18078,18079],{"class":41,"line":321},[39,18080,17967],{"class":128},[39,18082,18083,18085,18088,18090,18092,18095,18098,18100],{"class":41,"line":713},[39,18084,15882],{"class":45},[39,18086,18087],{"class":49}," setRadius",[39,18089,54],{"class":53},[39,18091,606],{"class":45},[39,18093,18094],{"class":59}," r",[39,18096,18097],{"class":53},") { m_r ",[39,18099,1117],{"class":45},[39,18101,18102],{"class":53}," r; }\n",[39,18104,18105,18107,18110,18112,18115,18118,18121,18123],{"class":41,"line":718},[39,18106,15882],{"class":45},[39,18108,18109],{"class":49}," setCenter",[39,18111,54],{"class":53},[39,18113,18114],{"class":49},"Point",[39,18116,18117],{"class":59}," center",[39,18119,18120],{"class":53},") { m_center ",[39,18122,1117],{"class":45},[39,18124,18125],{"class":53}," center; }\n",[39,18127,18128],{"class":41,"line":723},[39,18129,18130],{"class":128},"    \u002F\u002F获取属性\n",[39,18132,18133,18135,18138,18140,18142],{"class":41,"line":729},[39,18134,15711],{"class":45},[39,18136,18137],{"class":49}," getRadius",[39,18139,18016],{"class":53},[39,18141,18019],{"class":45},[39,18143,18144],{"class":53}," m_r; }\n",[39,18146,18147,18150,18153,18155,18157],{"class":41,"line":735},[39,18148,18149],{"class":49},"    Point",[39,18151,18152],{"class":49}," getCenter",[39,18154,18016],{"class":53},[39,18156,18019],{"class":45},[39,18158,18159],{"class":53}," m_center; }\n",[39,18161,18162],{"class":41,"line":741},[39,18163,122],{"emptyLinePlaceholder":121},[39,18165,18166],{"class":41,"line":747},[39,18167,16195],{"class":45},[39,18169,18170,18172],{"class":41,"line":753},[39,18171,15711],{"class":45},[39,18173,15701],{"class":53},[39,18175,18176],{"class":41,"line":758},[39,18177,18178],{"class":128},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[39,18180,18181],{"class":41,"line":763},[39,18182,18183],{"class":53},"    Point m_center;\n",[39,18185,18186],{"class":41,"line":772},[39,18187,5078],{"class":53},[39,18189,18190,18192,18195,18197,18200,18202,18204,18206,18208,18210,18212],{"class":41,"line":777},[39,18191,370],{"class":45},[39,18193,18194],{"class":49}," isInCircle",[39,18196,54],{"class":53},[39,18198,18199],{"class":49},"Circle",[39,18201,919],{"class":45},[39,18203,1553],{"class":59},[39,18205,426],{"class":53},[39,18207,18114],{"class":49},[39,18209,919],{"class":45},[39,18211,19],{"class":59},[39,18213,574],{"class":53},[39,18215,18216],{"class":41,"line":785},[39,18217,542],{"class":53},[39,18219,18220,18222,18225,18227,18229,18232,18235,18238,18240,18242,18244,18246],{"class":41,"line":796},[39,18221,15711],{"class":45},[39,18223,18224],{"class":53}," dx ",[39,18226,1117],{"class":45},[39,18228,17315],{"class":53},[39,18230,18231],{"class":49},"getCenter",[39,18233,18234],{"class":53},"().",[39,18236,18237],{"class":49},"getX",[39,18239,14107],{"class":53},[39,18241,1793],{"class":45},[39,18243,16861],{"class":53},[39,18245,18237],{"class":49},[39,18247,782],{"class":53},[39,18249,18250,18252,18255,18257,18259,18261,18263,18266,18268,18270,18272,18274],{"class":41,"line":808},[39,18251,15711],{"class":45},[39,18253,18254],{"class":53}," dy ",[39,18256,1117],{"class":45},[39,18258,17315],{"class":53},[39,18260,18231],{"class":49},[39,18262,18234],{"class":53},[39,18264,18265],{"class":49},"getY",[39,18267,14107],{"class":53},[39,18269,1793],{"class":45},[39,18271,16861],{"class":53},[39,18273,18265],{"class":49},[39,18275,782],{"class":53},[39,18277,18278,18280,18283,18285,18288,18291,18293,18295,18297,18299,18301],{"class":41,"line":823},[39,18279,15711],{"class":45},[39,18281,18282],{"class":53}," distance ",[39,18284,1117],{"class":45},[39,18286,18287],{"class":49}," sqrt",[39,18289,18290],{"class":53},"(dx ",[39,18292,1717],{"class":45},[39,18294,18224],{"class":53},[39,18296,101],{"class":45},[39,18298,18254],{"class":53},[39,18300,1717],{"class":45},[39,18302,18303],{"class":53}," dy);\n",[39,18305,18306,18308,18311,18313,18315,18318],{"class":41,"line":839},[39,18307,4184],{"class":45},[39,18309,18310],{"class":53}," (distance ",[39,18312,2170],{"class":45},[39,18314,17315],{"class":53},[39,18316,18317],{"class":49},"getRadius",[39,18319,18320],{"class":53},"())\n",[39,18322,18323],{"class":41,"line":845},[39,18324,3128],{"class":53},[39,18326,18327,18329,18331,18334,18336],{"class":41,"line":856},[39,18328,10737],{"class":53},[39,18330,234],{"class":45},[39,18332,18333],{"class":237}," \"点在圆内\"",[39,18335,241],{"class":45},[39,18337,260],{"class":53},[39,18339,18340],{"class":41,"line":861},[39,18341,3284],{"class":53},[39,18343,18344],{"class":41,"line":870},[39,18345,17796],{"class":45},[39,18347,18348],{"class":41,"line":9084},[39,18349,3128],{"class":53},[39,18351,18352,18354,18356,18359,18361],{"class":41,"line":9090},[39,18353,10737],{"class":53},[39,18355,234],{"class":45},[39,18357,18358],{"class":237}," \"点在圆外\"",[39,18360,241],{"class":45},[39,18362,260],{"class":53},[39,18364,18365],{"class":41,"line":9102},[39,18366,3284],{"class":53},[39,18368,18369],{"class":41,"line":9114},[39,18370,115],{"class":53},[39,18372,18373,18375,18377],{"class":41,"line":9126},[39,18374,46],{"class":45},[39,18376,217],{"class":49},[39,18378,537],{"class":53},[39,18380,18381],{"class":41,"line":10784},[39,18382,542],{"class":53},[39,18384,18385],{"class":41,"line":10809},[39,18386,16026],{"class":128},[39,18388,18389],{"class":41,"line":10832},[39,18390,15773],{"class":53},[39,18392,18393],{"class":41,"line":10856},[39,18394,18395],{"class":53},"    Point p1;\n",[39,18397,18398],{"class":41,"line":10861},[39,18399,17967],{"class":128},[39,18401,18402,18404,18406,18409],{"class":41,"line":10866},[39,18403,2673],{"class":53},[39,18405,234],{"class":45},[39,18407,18408],{"class":237},"\"请输入圆的半径：\"",[39,18410,318],{"class":53},[39,18412,18413,18415],{"class":41,"line":10871},[39,18414,15711],{"class":45},[39,18416,18417],{"class":53}," r;\n",[39,18419,18420,18422,18424],{"class":41,"line":10880},[39,18421,3110],{"class":53},[39,18423,2553],{"class":45},[39,18425,18426],{"class":53},"r;\n",[39,18428,18429,18431,18434],{"class":41,"line":10885},[39,18430,17568],{"class":53},[39,18432,18433],{"class":49},"setRadius",[39,18435,18436],{"class":53},"(r);\n",[39,18438,18439,18441,18443,18446],{"class":41,"line":10891},[39,18440,2673],{"class":53},[39,18442,234],{"class":45},[39,18444,18445],{"class":237},"\"请输入圆心坐标：\"",[39,18447,318],{"class":53},[39,18449,18450,18452],{"class":41,"line":10912},[39,18451,15711],{"class":45},[39,18453,18454],{"class":53}," x, y;\n",[39,18456,18457,18459,18461,18463,18465],{"class":41,"line":10918},[39,18458,3110],{"class":53},[39,18460,2553],{"class":45},[39,18462,2080],{"class":53},[39,18464,2553],{"class":45},[39,18466,18467],{"class":53},"y;\n",[39,18469,18470,18473,18476],{"class":41,"line":10932},[39,18471,18472],{"class":53},"    p1.",[39,18474,18475],{"class":49},"setPoint",[39,18477,18478],{"class":53},"(x, y);\n",[39,18480,18481,18483,18486],{"class":41,"line":10938},[39,18482,17568],{"class":53},[39,18484,18485],{"class":49},"setCenter",[39,18487,18488],{"class":53},"(p1);\n",[39,18490,18491,18493,18495,18498],{"class":41,"line":10965},[39,18492,2673],{"class":53},[39,18494,234],{"class":45},[39,18496,18497],{"class":237},"\"请输入测试点坐标：\"",[39,18499,318],{"class":53},[39,18501,18502,18504],{"class":41,"line":10974},[39,18503,15711],{"class":45},[39,18505,18506],{"class":53}," x1, y1;\n",[39,18508,18509,18511,18513,18516,18518],{"class":41,"line":10980},[39,18510,3110],{"class":53},[39,18512,2553],{"class":45},[39,18514,18515],{"class":53},"x1",[39,18517,2553],{"class":45},[39,18519,18520],{"class":53},"y1;\n",[39,18522,18523],{"class":41,"line":10988},[39,18524,18525],{"class":53},"    Point p2;\n",[39,18527,18528,18531,18533],{"class":41,"line":10993},[39,18529,18530],{"class":53},"    p2.",[39,18532,18475],{"class":49},[39,18534,18535],{"class":53},"(x1, y1);\n",[39,18537,18538,18541],{"class":41,"line":17577},[39,18539,18540],{"class":49},"    isInCircle",[39,18542,18543],{"class":53},"(c1, p2);\n",[39,18545,18546],{"class":41,"line":17583},[39,18547,115],{"class":53},[19,18549,18550],{},"在类中可以让另一个类作为本来的成员",[19,18552,18553],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18555,18556],{},"创建point.h",[30,18558,18560],{"className":32,"code":18559,"language":34,"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",[26,18561,18562,18573,18579,18589,18595,18599,18604,18608,18612,18632,18636,18644,18652,18656,18660,18666,18672],{"__ignoreMap":35},[39,18563,18564,18567,18570],{"class":41,"line":42},[39,18565,18566],{"class":45},"#pragma",[39,18568,18569],{"class":49}," once",[39,18571,18572],{"class":128}," \u002F\u002F防止头文件重复包含\n",[39,18574,18575,18577],{"class":41,"line":92},[39,18576,3051],{"class":45},[39,18578,3054],{"class":237},[39,18580,18581,18583,18585,18587],{"class":41,"line":112},[39,18582,3059],{"class":45},[39,18584,3062],{"class":45},[39,18586,3065],{"class":49},[39,18588,318],{"class":53},[39,18590,18591,18593],{"class":41,"line":118},[39,18592,15667],{"class":45},[39,18594,17954],{"class":49},[39,18596,18597],{"class":41,"line":125},[39,18598,542],{"class":53},[39,18600,18601],{"class":41,"line":132},[39,18602,18603],{"class":128},"\u002F\u002F做好声明与变量定义就可以\n",[39,18605,18606],{"class":41,"line":138},[39,18607,15689],{"class":45},[39,18609,18610],{"class":41,"line":169},[39,18611,17967],{"class":128},[39,18613,18614,18616,18618,18620,18622,18624,18626,18628,18630],{"class":41,"line":190},[39,18615,15882],{"class":45},[39,18617,17974],{"class":49},[39,18619,54],{"class":53},[39,18621,606],{"class":45},[39,18623,17981],{"class":59},[39,18625,63],{"class":53},[39,18627,606],{"class":45},[39,18629,17988],{"class":59},[39,18631,166],{"class":53},[39,18633,18634],{"class":41,"line":202},[39,18635,18006],{"class":128},[39,18637,18638,18640,18642],{"class":41,"line":207},[39,18639,15711],{"class":45},[39,18641,18013],{"class":49},[39,18643,782],{"class":53},[39,18645,18646,18648,18650],{"class":41,"line":212},[39,18647,15711],{"class":45},[39,18649,18029],{"class":49},[39,18651,782],{"class":53},[39,18653,18654],{"class":41,"line":223},[39,18655,122],{"emptyLinePlaceholder":121},[39,18657,18658],{"class":41,"line":228},[39,18659,16195],{"class":45},[39,18661,18662,18664],{"class":41,"line":263},[39,18663,15711],{"class":45},[39,18665,18051],{"class":53},[39,18667,18668,18670],{"class":41,"line":287},[39,18669,15711],{"class":45},[39,18671,18058],{"class":53},[39,18673,18674],{"class":41,"line":292},[39,18675,5078],{"class":53},[19,18677,18678],{},"创建point.cpp",[30,18680,18682],{"className":32,"code":18681,"language":34,"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",[26,18683,18684,18691,18696,18730,18734,18750],{"__ignoreMap":35},[39,18685,18686,18688],{"class":41,"line":42},[39,18687,3051],{"class":45},[39,18689,18690],{"class":237},"\u003Cpoint.h>\n",[39,18692,18693],{"class":41,"line":92},[39,18694,18695],{"class":128},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[39,18697,18698,18700,18703,18706,18708,18710,18712,18714,18716,18718,18720,18722,18724,18726,18728],{"class":41,"line":112},[39,18699,15882],{"class":45},[39,18701,18702],{"class":49}," Point",[39,18704,18705],{"class":53},"::",[39,18707,18475],{"class":49},[39,18709,54],{"class":53},[39,18711,606],{"class":45},[39,18713,17981],{"class":59},[39,18715,63],{"class":53},[39,18717,606],{"class":45},[39,18719,17988],{"class":59},[39,18721,17991],{"class":53},[39,18723,1117],{"class":45},[39,18725,17996],{"class":53},[39,18727,1117],{"class":45},[39,18729,18001],{"class":53},[39,18731,18732],{"class":41,"line":118},[39,18733,18006],{"class":128},[39,18735,18736,18738,18740,18742,18744,18746,18748],{"class":41,"line":125},[39,18737,15711],{"class":45},[39,18739,18702],{"class":49},[39,18741,18705],{"class":53},[39,18743,18237],{"class":49},[39,18745,18016],{"class":53},[39,18747,18019],{"class":45},[39,18749,18022],{"class":53},[39,18751,18752,18754,18756,18758,18760,18762,18764],{"class":41,"line":132},[39,18753,15711],{"class":45},[39,18755,18702],{"class":49},[39,18757,18705],{"class":53},[39,18759,18265],{"class":49},[39,18761,18016],{"class":53},[39,18763,18019],{"class":45},[39,18765,18036],{"class":53},[19,18767,18768],{},"创建circle.h",[30,18770,18772],{"className":32,"code":18771,"language":34,"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",[26,18773,18774,18781,18787,18797,18803,18809,18813,18817,18821,18835,18849,18853,18861,18869,18873,18877,18883,18887,18891],{"__ignoreMap":35},[39,18775,18776,18778],{"class":41,"line":42},[39,18777,18566],{"class":45},[39,18779,18780],{"class":49}," once\n",[39,18782,18783,18785],{"class":41,"line":92},[39,18784,3051],{"class":45},[39,18786,3054],{"class":237},[39,18788,18789,18791,18793,18795],{"class":41,"line":112},[39,18790,3059],{"class":45},[39,18792,3062],{"class":45},[39,18794,3065],{"class":49},[39,18796,318],{"class":53},[39,18798,18799,18801],{"class":41,"line":118},[39,18800,3051],{"class":45},[39,18802,18690],{"class":237},[39,18804,18805,18807],{"class":41,"line":125},[39,18806,15667],{"class":45},[39,18808,15670],{"class":49},[39,18810,18811],{"class":41,"line":132},[39,18812,542],{"class":53},[39,18814,18815],{"class":41,"line":138},[39,18816,15689],{"class":45},[39,18818,18819],{"class":41,"line":169},[39,18820,17967],{"class":128},[39,18822,18823,18825,18827,18829,18831,18833],{"class":41,"line":190},[39,18824,15882],{"class":45},[39,18826,18087],{"class":49},[39,18828,54],{"class":53},[39,18830,606],{"class":45},[39,18832,18094],{"class":59},[39,18834,166],{"class":53},[39,18836,18837,18839,18841,18843,18845,18847],{"class":41,"line":202},[39,18838,15882],{"class":45},[39,18840,18109],{"class":49},[39,18842,54],{"class":53},[39,18844,18114],{"class":49},[39,18846,18117],{"class":59},[39,18848,166],{"class":53},[39,18850,18851],{"class":41,"line":207},[39,18852,18130],{"class":128},[39,18854,18855,18857,18859],{"class":41,"line":212},[39,18856,15711],{"class":45},[39,18858,18137],{"class":49},[39,18860,782],{"class":53},[39,18862,18863,18865,18867],{"class":41,"line":223},[39,18864,18149],{"class":49},[39,18866,18152],{"class":49},[39,18868,782],{"class":53},[39,18870,18871],{"class":41,"line":228},[39,18872,122],{"emptyLinePlaceholder":121},[39,18874,18875],{"class":41,"line":263},[39,18876,16195],{"class":45},[39,18878,18879,18881],{"class":41,"line":287},[39,18880,15711],{"class":45},[39,18882,15701],{"class":53},[39,18884,18885],{"class":41,"line":292},[39,18886,18178],{"class":128},[39,18888,18889],{"class":41,"line":305},[39,18890,18183],{"class":53},[39,18892,18893],{"class":41,"line":310},[39,18894,5078],{"class":53},[19,18896,18897],{},"创建circle.cpp",[30,18899,18901],{"className":32,"code":18900,"language":34,"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",[26,18902,18903,18910,18933,18955,18960,18976],{"__ignoreMap":35},[39,18904,18905,18907],{"class":41,"line":42},[39,18906,3051],{"class":45},[39,18908,18909],{"class":237},"\u003Ccircle.h>\n",[39,18911,18912,18914,18917,18919,18921,18923,18925,18927,18929,18931],{"class":41,"line":92},[39,18913,370],{"class":45},[39,18915,18916],{"class":49}," Circle",[39,18918,18705],{"class":53},[39,18920,18433],{"class":49},[39,18922,54],{"class":53},[39,18924,606],{"class":45},[39,18926,18094],{"class":59},[39,18928,18097],{"class":53},[39,18930,1117],{"class":45},[39,18932,18102],{"class":53},[39,18934,18935,18937,18939,18941,18943,18945,18947,18949,18951,18953],{"class":41,"line":112},[39,18936,370],{"class":45},[39,18938,18916],{"class":49},[39,18940,18705],{"class":53},[39,18942,18485],{"class":49},[39,18944,54],{"class":53},[39,18946,18114],{"class":49},[39,18948,18117],{"class":59},[39,18950,18120],{"class":53},[39,18952,1117],{"class":45},[39,18954,18125],{"class":53},[39,18956,18957],{"class":41,"line":118},[39,18958,18959],{"class":128},"\u002F\u002F获取属性\n",[39,18961,18962,18964,18966,18968,18970,18972,18974],{"class":41,"line":125},[39,18963,606],{"class":45},[39,18965,18916],{"class":49},[39,18967,18705],{"class":53},[39,18969,18317],{"class":49},[39,18971,18016],{"class":53},[39,18973,18019],{"class":45},[39,18975,18144],{"class":53},[39,18977,18978,18980,18982,18984,18986,18988,18990],{"class":41,"line":132},[39,18979,18114],{"class":49},[39,18981,18916],{"class":49},[39,18983,18705],{"class":53},[39,18985,18231],{"class":49},[39,18987,18016],{"class":53},[39,18989,18019],{"class":45},[39,18991,18159],{"class":53},[19,18993,18994],{},"使用封装的类",[30,18996,18998],{"className":32,"code":18997,"language":34,"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",[26,18999,19000,19006,19016,19022,19028,19052,19056,19082,19108,19132,19146,19150,19162,19166,19170,19174,19186,19190,19194,19202,19206,19210,19214,19218,19222,19232,19238,19246,19254,19264,19270,19282,19290,19298,19308,19314,19326,19330,19338,19344],{"__ignoreMap":35},[39,19001,19002,19004],{"class":41,"line":42},[39,19003,3051],{"class":45},[39,19005,3054],{"class":237},[39,19007,19008,19010,19012,19014],{"class":41,"line":92},[39,19009,3059],{"class":45},[39,19011,3062],{"class":45},[39,19013,3065],{"class":49},[39,19015,318],{"class":53},[39,19017,19018,19020],{"class":41,"line":112},[39,19019,3051],{"class":45},[39,19021,18909],{"class":237},[39,19023,19024,19026],{"class":41,"line":118},[39,19025,3051],{"class":45},[39,19027,18690],{"class":237},[39,19029,19030,19032,19034,19036,19038,19040,19042,19044,19046,19048,19050],{"class":41,"line":125},[39,19031,370],{"class":45},[39,19033,18194],{"class":49},[39,19035,54],{"class":53},[39,19037,18199],{"class":49},[39,19039,919],{"class":45},[39,19041,1553],{"class":59},[39,19043,426],{"class":53},[39,19045,18114],{"class":49},[39,19047,919],{"class":45},[39,19049,19],{"class":59},[39,19051,574],{"class":53},[39,19053,19054],{"class":41,"line":132},[39,19055,542],{"class":53},[39,19057,19058,19060,19062,19064,19066,19068,19070,19072,19074,19076,19078,19080],{"class":41,"line":138},[39,19059,15711],{"class":45},[39,19061,18224],{"class":53},[39,19063,1117],{"class":45},[39,19065,17315],{"class":53},[39,19067,18231],{"class":49},[39,19069,18234],{"class":53},[39,19071,18237],{"class":49},[39,19073,14107],{"class":53},[39,19075,1793],{"class":45},[39,19077,16861],{"class":53},[39,19079,18237],{"class":49},[39,19081,782],{"class":53},[39,19083,19084,19086,19088,19090,19092,19094,19096,19098,19100,19102,19104,19106],{"class":41,"line":169},[39,19085,15711],{"class":45},[39,19087,18254],{"class":53},[39,19089,1117],{"class":45},[39,19091,17315],{"class":53},[39,19093,18231],{"class":49},[39,19095,18234],{"class":53},[39,19097,18265],{"class":49},[39,19099,14107],{"class":53},[39,19101,1793],{"class":45},[39,19103,16861],{"class":53},[39,19105,18265],{"class":49},[39,19107,782],{"class":53},[39,19109,19110,19112,19114,19116,19118,19120,19122,19124,19126,19128,19130],{"class":41,"line":190},[39,19111,15711],{"class":45},[39,19113,18282],{"class":53},[39,19115,1117],{"class":45},[39,19117,18287],{"class":49},[39,19119,18290],{"class":53},[39,19121,1717],{"class":45},[39,19123,18224],{"class":53},[39,19125,101],{"class":45},[39,19127,18254],{"class":53},[39,19129,1717],{"class":45},[39,19131,18303],{"class":53},[39,19133,19134,19136,19138,19140,19142,19144],{"class":41,"line":202},[39,19135,4184],{"class":45},[39,19137,18310],{"class":53},[39,19139,2170],{"class":45},[39,19141,17315],{"class":53},[39,19143,18317],{"class":49},[39,19145,18320],{"class":53},[39,19147,19148],{"class":41,"line":207},[39,19149,3128],{"class":53},[39,19151,19152,19154,19156,19158,19160],{"class":41,"line":212},[39,19153,10737],{"class":53},[39,19155,234],{"class":45},[39,19157,18333],{"class":237},[39,19159,241],{"class":45},[39,19161,260],{"class":53},[39,19163,19164],{"class":41,"line":223},[39,19165,3284],{"class":53},[39,19167,19168],{"class":41,"line":228},[39,19169,17796],{"class":45},[39,19171,19172],{"class":41,"line":263},[39,19173,3128],{"class":53},[39,19175,19176,19178,19180,19182,19184],{"class":41,"line":287},[39,19177,10737],{"class":53},[39,19179,234],{"class":45},[39,19181,18358],{"class":237},[39,19183,241],{"class":45},[39,19185,260],{"class":53},[39,19187,19188],{"class":41,"line":292},[39,19189,3284],{"class":53},[39,19191,19192],{"class":41,"line":305},[39,19193,115],{"class":53},[39,19195,19196,19198,19200],{"class":41,"line":310},[39,19197,46],{"class":45},[39,19199,217],{"class":49},[39,19201,537],{"class":53},[39,19203,19204],{"class":41,"line":321},[39,19205,542],{"class":53},[39,19207,19208],{"class":41,"line":713},[39,19209,16026],{"class":128},[39,19211,19212],{"class":41,"line":718},[39,19213,15773],{"class":53},[39,19215,19216],{"class":41,"line":723},[39,19217,18395],{"class":53},[39,19219,19220],{"class":41,"line":729},[39,19221,17967],{"class":128},[39,19223,19224,19226,19228,19230],{"class":41,"line":735},[39,19225,2673],{"class":53},[39,19227,234],{"class":45},[39,19229,18408],{"class":237},[39,19231,318],{"class":53},[39,19233,19234,19236],{"class":41,"line":741},[39,19235,15711],{"class":45},[39,19237,18417],{"class":53},[39,19239,19240,19242,19244],{"class":41,"line":747},[39,19241,3110],{"class":53},[39,19243,2553],{"class":45},[39,19245,18426],{"class":53},[39,19247,19248,19250,19252],{"class":41,"line":753},[39,19249,17568],{"class":53},[39,19251,18433],{"class":49},[39,19253,18436],{"class":53},[39,19255,19256,19258,19260,19262],{"class":41,"line":758},[39,19257,2673],{"class":53},[39,19259,234],{"class":45},[39,19261,18445],{"class":237},[39,19263,318],{"class":53},[39,19265,19266,19268],{"class":41,"line":763},[39,19267,15711],{"class":45},[39,19269,18454],{"class":53},[39,19271,19272,19274,19276,19278,19280],{"class":41,"line":772},[39,19273,3110],{"class":53},[39,19275,2553],{"class":45},[39,19277,2080],{"class":53},[39,19279,2553],{"class":45},[39,19281,18467],{"class":53},[39,19283,19284,19286,19288],{"class":41,"line":777},[39,19285,18472],{"class":53},[39,19287,18475],{"class":49},[39,19289,18478],{"class":53},[39,19291,19292,19294,19296],{"class":41,"line":785},[39,19293,17568],{"class":53},[39,19295,18485],{"class":49},[39,19297,18488],{"class":53},[39,19299,19300,19302,19304,19306],{"class":41,"line":796},[39,19301,2673],{"class":53},[39,19303,234],{"class":45},[39,19305,18497],{"class":237},[39,19307,318],{"class":53},[39,19309,19310,19312],{"class":41,"line":808},[39,19311,15711],{"class":45},[39,19313,18506],{"class":53},[39,19315,19316,19318,19320,19322,19324],{"class":41,"line":823},[39,19317,3110],{"class":53},[39,19319,2553],{"class":45},[39,19321,18515],{"class":53},[39,19323,2553],{"class":45},[39,19325,18520],{"class":53},[39,19327,19328],{"class":41,"line":839},[39,19329,18525],{"class":53},[39,19331,19332,19334,19336],{"class":41,"line":845},[39,19333,18530],{"class":53},[39,19335,18475],{"class":49},[39,19337,18535],{"class":53},[39,19339,19340,19342],{"class":41,"line":856},[39,19341,18540],{"class":49},[39,19343,18543],{"class":53},[39,19345,19346],{"class":41,"line":861},[39,19347,115],{"class":53},[14,19349,19351],{"id":19350},"_82对象的初始化清理","8.2对象的初始化清理",[489,19353,19354,19357],{},[331,19355,19356],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[331,19358,19359],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[476,19361,19363],{"id":19362},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,19365,19366,19367,19370],{},"对象的",[350,19368,19369],{},"初始化和清理","也是两个非常重要的安全问题",[19,19372,19373],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,19375,19376],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,19378,19379,19380,19383,19384,19387],{},"c++利用了",[350,19381,19382],{},"构造函数","和",[350,19385,19386],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,19389,19390,19391],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[350,19392,19393],{},"我们不提供构造和析构，编译器会提供",[19,19395,19396],{},[350,19397,19398],{},"编译器提供的构造函数和析构函数是空实现。",[489,19400,19401,19404],{},[331,19402,19403],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[331,19405,19406,19407,19410],{},"析构函数：主要作用在于对象",[350,19408,19409],{},"销毁前","系统自动调用，执行一些清理工作。",[19,19412,19413,19416],{},[350,19414,19415],{},"构造函数语法：",[26,19417,19418],{},"类名(){}",[328,19420,19421,19424,19427,19430,19433],{},[331,19422,19423],{},"构造函数，没有返回值也不写void",[331,19425,19426],{},"函数名称与类名相同",[331,19428,19429],{},"构造函数可以有参数，因此可以发生重载",[331,19431,19432],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[331,19434,19435,19436,1692],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[26,19437,19438],{},"Person(){}",[19,19440,19441,352,19444],{},[350,19442,19443],{},"析构函数语法：",[26,19445,19446],{},"~类名(){}",[328,19448,19449,19452,19455,19461],{},[331,19450,19451],{},"析构函数，没有返回值也不写void",[331,19453,19454],{},"函数名称与类名相同,在名称前加上符号  ~",[331,19456,19457,19458],{},"析构函数不可以有参数，因此",[350,19459,19460],{},"不可以发生重载",[331,19462,19463],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[30,19465,19467],{"className":32,"code":19466,"language":34,"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",[26,19468,19469,19475,19479,19483,19488,19495,19499,19512,19516,19521,19528,19532,19545,19549,19553,19557,19561,19569,19573,19581,19585,19589,19597,19601,19606,19610,19617,19621,19634,19638,19646],{"__ignoreMap":35},[39,19470,19471,19473],{"class":41,"line":42},[39,19472,15667],{"class":45},[39,19474,16144],{"class":49},[39,19476,19477],{"class":41,"line":92},[39,19478,542],{"class":53},[39,19480,19481],{"class":41,"line":112},[39,19482,15689],{"class":45},[39,19484,19485],{"class":41,"line":118},[39,19486,19487],{"class":128},"    \u002F\u002F构造函数\n",[39,19489,19490,19493],{"class":41,"line":125},[39,19491,19492],{"class":49},"    Person",[39,19494,537],{"class":53},[39,19496,19497],{"class":41,"line":132},[39,19498,3128],{"class":53},[39,19500,19501,19503,19505,19508,19510],{"class":41,"line":138},[39,19502,10737],{"class":53},[39,19504,234],{"class":45},[39,19506,19507],{"class":237}," \"Person的构造函数调用\"",[39,19509,241],{"class":45},[39,19511,260],{"class":53},[39,19513,19514],{"class":41,"line":169},[39,19515,3284],{"class":53},[39,19517,19518],{"class":41,"line":190},[39,19519,19520],{"class":128},"    \u002F\u002F析构函数\n",[39,19522,19523,19526],{"class":41,"line":202},[39,19524,19525],{"class":49},"    ~Person",[39,19527,537],{"class":53},[39,19529,19530],{"class":41,"line":207},[39,19531,3128],{"class":53},[39,19533,19534,19536,19538,19541,19543],{"class":41,"line":212},[39,19535,10737],{"class":53},[39,19537,234],{"class":45},[39,19539,19540],{"class":237}," \"Person的析构函数调用\"",[39,19542,241],{"class":45},[39,19544,260],{"class":53},[39,19546,19547],{"class":41,"line":223},[39,19548,3284],{"class":53},[39,19550,19551],{"class":41,"line":228},[39,19552,122],{"emptyLinePlaceholder":121},[39,19554,19555],{"class":41,"line":263},[39,19556,5078],{"class":53},[39,19558,19559],{"class":41,"line":287},[39,19560,122],{"emptyLinePlaceholder":121},[39,19562,19563,19565,19567],{"class":41,"line":292},[39,19564,370],{"class":45},[39,19566,6666],{"class":49},[39,19568,537],{"class":53},[39,19570,19571],{"class":41,"line":305},[39,19572,542],{"class":53},[39,19574,19575,19578],{"class":41,"line":310},[39,19576,19577],{"class":53},"    Person p;",[39,19579,19580],{"class":128},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[39,19582,19583],{"class":41,"line":321},[39,19584,115],{"class":53},[39,19586,19587],{"class":41,"line":713},[39,19588,122],{"emptyLinePlaceholder":121},[39,19590,19591,19593,19595],{"class":41,"line":718},[39,19592,46],{"class":45},[39,19594,217],{"class":49},[39,19596,220],{"class":53},[39,19598,19599],{"class":41,"line":723},[39,19600,842],{"class":53},[39,19602,19603],{"class":41,"line":729},[39,19604,19605],{"class":128},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[39,19607,19608],{"class":41,"line":735},[39,19609,122],{"emptyLinePlaceholder":121},[39,19611,19612,19614],{"class":41,"line":741},[39,19613,19577],{"class":53},[39,19615,19616],{"class":128},"\u002F\u002F只有构造函数\n",[39,19618,19619],{"class":41,"line":747},[39,19620,122],{"emptyLinePlaceholder":121},[39,19622,19623,19625,19627,19629,19631],{"class":41,"line":753},[39,19624,295],{"class":49},[39,19626,54],{"class":53},[39,19628,300],{"class":237},[39,19630,431],{"class":53},[39,19632,19633],{"class":128},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[39,19635,19636],{"class":41,"line":758},[39,19637,122],{"emptyLinePlaceholder":121},[39,19639,19640,19642,19644],{"class":41,"line":763},[39,19641,95],{"class":45},[39,19643,315],{"class":74},[39,19645,318],{"class":53},[39,19647,19648],{"class":41,"line":772},[39,19649,115],{"class":53},[19,19651,19652],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[476,19654,19656],{"id":19655},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,19658,19659],{},"两种分类方式：",[19,19661,19662],{},"​\t按参数分为： 有参构造和无参构造",[19,19664,19665],{},"​\t按类型分为： 普通构造和拷贝构造",[19,19667,19668],{},"三种调用方式：",[19,19670,19671],{},"​\t括号法",[19,19673,19674],{},"​\t显示法",[19,19676,19677],{},"​\t隐式转换法",[30,19679,19681],{"className":32,"code":19680,"language":34,"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",[26,19682,19683,19689,19699,19704,19709,19714,19719,19723,19731,19735,19739,19743,19749,19753,19766,19770,19782,19786,19795,19808,19812,19816,19822,19826,19839,19843,19848,19864,19868,19873,19882,19895,19899,19905,19909,19914,19922,19926,19931,19935,19943,19947,19952,19957,19962,19967,19972,19976,19981,19986,19991,19996,20000,20005,20010,20026,20038,20043,20047,20052,20057,20062,20066,20071,20085,20098,20102,20110,20114,20120,20126,20134],{"__ignoreMap":35},[39,19684,19685,19687],{"class":41,"line":42},[39,19686,3051],{"class":45},[39,19688,3054],{"class":237},[39,19690,19691,19693,19695,19697],{"class":41,"line":92},[39,19692,3059],{"class":45},[39,19694,3062],{"class":45},[39,19696,3065],{"class":49},[39,19698,318],{"class":53},[39,19700,19701],{"class":41,"line":112},[39,19702,19703],{"class":128},"\u002F\u002F1.构造函数的分类及调用\n",[39,19705,19706],{"class":41,"line":118},[39,19707,19708],{"class":128},"\u002F\u002F分类\n",[39,19710,19711],{"class":41,"line":125},[39,19712,19713],{"class":128},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[39,19715,19716],{"class":41,"line":132},[39,19717,19718],{"class":128},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[39,19720,19721],{"class":41,"line":138},[39,19722,122],{"emptyLinePlaceholder":121},[39,19724,19725,19727,19729],{"class":41,"line":169},[39,19726,15667],{"class":45},[39,19728,16542],{"class":49},[39,19730,3760],{"class":53},[39,19732,19733],{"class":41,"line":190},[39,19734,542],{"class":53},[39,19736,19737],{"class":41,"line":202},[39,19738,15689],{"class":45},[39,19740,19741],{"class":41,"line":207},[39,19742,19487],{"class":128},[39,19744,19745,19747],{"class":41,"line":212},[39,19746,19492],{"class":49},[39,19748,537],{"class":53},[39,19750,19751],{"class":41,"line":223},[39,19752,3128],{"class":53},[39,19754,19755,19757,19759,19762,19764],{"class":41,"line":228},[39,19756,4534],{"class":53},[39,19758,234],{"class":45},[39,19760,19761],{"class":237},"\"Person构造函数无参构造\"",[39,19763,234],{"class":45},[39,19765,2324],{"class":53},[39,19767,19768],{"class":41,"line":263},[39,19769,3284],{"class":53},[39,19771,19772,19774,19776,19778,19780],{"class":41,"line":287},[39,19773,19492],{"class":49},[39,19775,54],{"class":53},[39,19777,46],{"class":45},[39,19779,60],{"class":59},[39,19781,574],{"class":53},[39,19783,19784],{"class":41,"line":292},[39,19785,3128],{"class":53},[39,19787,19788,19791,19793],{"class":41,"line":305},[39,19789,19790],{"class":53},"        age",[39,19792,1117],{"class":45},[39,19794,7273],{"class":53},[39,19796,19797,19799,19801,19804,19806],{"class":41,"line":310},[39,19798,4534],{"class":53},[39,19800,234],{"class":45},[39,19802,19803],{"class":237},"\"Person构造函数有参构造\"",[39,19805,234],{"class":45},[39,19807,2324],{"class":53},[39,19809,19810],{"class":41,"line":321},[39,19811,3284],{"class":53},[39,19813,19814],{"class":41,"line":713},[39,19815,19520],{"class":128},[39,19817,19818,19820],{"class":41,"line":718},[39,19819,19525],{"class":49},[39,19821,537],{"class":53},[39,19823,19824],{"class":41,"line":723},[39,19825,3128],{"class":53},[39,19827,19828,19830,19832,19835,19837],{"class":41,"line":729},[39,19829,4534],{"class":53},[39,19831,234],{"class":45},[39,19833,19834],{"class":237},"\"Person析构函数被调用\"",[39,19836,234],{"class":45},[39,19838,2324],{"class":53},[39,19840,19841],{"class":41,"line":735},[39,19842,3284],{"class":53},[39,19844,19845],{"class":41,"line":741},[39,19846,19847],{"class":128},"    \u002F\u002F拷贝构造函数\n",[39,19849,19850,19852,19854,19856,19858,19860,19862],{"class":41,"line":747},[39,19851,19492],{"class":49},[39,19853,54],{"class":53},[39,19855,960],{"class":45},[39,19857,16542],{"class":49},[39,19859,919],{"class":45},[39,19861,19],{"class":59},[39,19863,574],{"class":53},[39,19865,19866],{"class":41,"line":753},[39,19867,3128],{"class":53},[39,19869,19870],{"class":41,"line":758},[39,19871,19872],{"class":128},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[39,19874,19875,19877,19879],{"class":41,"line":763},[39,19876,19790],{"class":53},[39,19878,1117],{"class":45},[39,19880,19881],{"class":53},"p.age;\n",[39,19883,19884,19886,19888,19891,19893],{"class":41,"line":772},[39,19885,4534],{"class":53},[39,19887,234],{"class":45},[39,19889,19890],{"class":237},"\"Person拷贝构造函数被调用\"",[39,19892,234],{"class":45},[39,19894,2324],{"class":53},[39,19896,19897],{"class":41,"line":777},[39,19898,3284],{"class":53},[39,19900,19901,19903],{"class":41,"line":785},[39,19902,1112],{"class":45},[39,19904,8871],{"class":53},[39,19906,19907],{"class":41,"line":796},[39,19908,5078],{"class":53},[39,19910,19911],{"class":41,"line":808},[39,19912,19913],{"class":128},"\u002F\u002F调用\n",[39,19915,19916,19918,19920],{"class":41,"line":823},[39,19917,370],{"class":45},[39,19919,6666],{"class":49},[39,19921,537],{"class":53},[39,19923,19924],{"class":41,"line":839},[39,19925,542],{"class":53},[39,19927,19928],{"class":41,"line":845},[39,19929,19930],{"class":128},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[39,19932,19933],{"class":41,"line":856},[39,19934,115],{"class":53},[39,19936,19937,19939,19941],{"class":41,"line":861},[39,19938,370],{"class":45},[39,19940,6734],{"class":49},[39,19942,537],{"class":53},[39,19944,19945],{"class":41,"line":870},[39,19946,542],{"class":53},[39,19948,19949],{"class":41,"line":9084},[39,19950,19951],{"class":128},"    \u002F\u002F1.括号法\n",[39,19953,19954],{"class":41,"line":9090},[39,19955,19956],{"class":128},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[39,19958,19959],{"class":41,"line":9102},[39,19960,19961],{"class":128},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[39,19963,19964],{"class":41,"line":9114},[39,19965,19966],{"class":128},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[39,19968,19969],{"class":41,"line":9126},[39,19970,19971],{"class":128},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[39,19973,19974],{"class":41,"line":10784},[39,19975,122],{"emptyLinePlaceholder":121},[39,19977,19978],{"class":41,"line":10809},[39,19979,19980],{"class":128},"    \u002F\u002F注意事项\n",[39,19982,19983],{"class":41,"line":10832},[39,19984,19985],{"class":128},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[39,19987,19988],{"class":41,"line":10856},[39,19989,19990],{"class":128},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[39,19992,19993],{"class":41,"line":10861},[39,19994,19995],{"class":128},"    \u002F\u002F Person p4();\n",[39,19997,19998],{"class":41,"line":10866},[39,19999,122],{"emptyLinePlaceholder":121},[39,20001,20002],{"class":41,"line":10871},[39,20003,20004],{"class":128},"    \u002F\u002F2.显示法\n",[39,20006,20007],{"class":41,"line":10880},[39,20008,20009],{"class":53},"    Person p1;\n",[39,20011,20012,20015,20017,20020,20022,20024],{"class":41,"line":10885},[39,20013,20014],{"class":53},"    Person p2",[39,20016,1117],{"class":45},[39,20018,20019],{"class":49},"Person",[39,20021,54],{"class":53},[39,20023,423],{"class":74},[39,20025,166],{"class":53},[39,20027,20028,20031,20033,20035],{"class":41,"line":10891},[39,20029,20030],{"class":53},"    Person p3",[39,20032,1117],{"class":45},[39,20034,20019],{"class":49},[39,20036,20037],{"class":53},"(p2);\n",[39,20039,20040],{"class":41,"line":10912},[39,20041,20042],{"class":128},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[39,20044,20045],{"class":41,"line":10918},[39,20046,122],{"emptyLinePlaceholder":121},[39,20048,20049],{"class":41,"line":10932},[39,20050,20051],{"class":128},"    \u002F\u002F 注意事项2\n",[39,20053,20054],{"class":41,"line":10938},[39,20055,20056],{"class":128},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[39,20058,20059],{"class":41,"line":10965},[39,20060,20061],{"class":128},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[39,20063,20064],{"class":41,"line":10974},[39,20065,122],{"emptyLinePlaceholder":121},[39,20067,20068],{"class":41,"line":10980},[39,20069,20070],{"class":128},"    \u002F\u002F3.隐士转换法\n",[39,20072,20073,20076,20078,20080,20082],{"class":41,"line":10988},[39,20074,20075],{"class":53},"    Person p4",[39,20077,1117],{"class":45},[39,20079,423],{"class":74},[39,20081,1324],{"class":53},[39,20083,20084],{"class":128},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[39,20086,20087,20090,20092,20095],{"class":41,"line":10993},[39,20088,20089],{"class":53},"    Person p5",[39,20091,1117],{"class":45},[39,20093,20094],{"class":53},"p4;",[39,20096,20097],{"class":128}," \u002F\u002F 这里会调用拷贝构造函数\n",[39,20099,20100],{"class":41,"line":17577},[39,20101,115],{"class":53},[39,20103,20104,20106,20108],{"class":41,"line":17583},[39,20105,46],{"class":45},[39,20107,217],{"class":49},[39,20109,537],{"class":53},[39,20111,20112],{"class":41,"line":17606},[39,20113,542],{"class":53},[39,20115,20116,20118],{"class":41,"line":17612},[39,20117,6711],{"class":49},[39,20119,782],{"class":53},[39,20121,20122,20124],{"class":41,"line":17635},[39,20123,6779],{"class":49},[39,20125,782],{"class":53},[39,20127,20128,20130,20132],{"class":41,"line":17649},[39,20129,95],{"class":45},[39,20131,315],{"class":74},[39,20133,318],{"class":53},[39,20135,20136],{"class":41,"line":17669},[39,20137,115],{"class":53},[19,20139,20140,20143],{},[350,20141,20142],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[476,20145,20147],{"id":20146},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20149,20150],{},"C++中拷贝构造函数调用时机通常有三种情况",[489,20152,20153,20156,20159],{},[331,20154,20155],{},"使用一个已经创建完毕的对象来初始化一个新对象",[331,20157,20158],{},"值传递的方式给函数参数传值",[331,20160,20161],{},"以值方式返回局部对象",[30,20163,20165],{"className":32,"code":20164,"language":34,"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",[26,20166,20167,20173,20183,20187,20192,20196,20201,20206,20211,20217,20221,20225,20231,20235,20248,20252,20257,20269,20273,20281,20294,20298,20302,20318,20322,20331,20344,20348,20354,20358,20370,20374,20380,20384,20388,20396,20400,20413,20421,20439,20443,20448,20453,20468,20472,20485,20489,20497,20501,20505,20513,20517,20522,20531,20535,20539,20564,20574,20578,20586,20590,20601,20626,20630,20634,20638,20646,20650,20655,20660,20667,20672,20677,20682,20687,20691,20696,20700,20705,20709,20714,20719,20723,20727,20732,20737,20745],{"__ignoreMap":35},[39,20168,20169,20171],{"class":41,"line":42},[39,20170,3051],{"class":45},[39,20172,3054],{"class":237},[39,20174,20175,20177,20179,20181],{"class":41,"line":92},[39,20176,3059],{"class":45},[39,20178,3062],{"class":45},[39,20180,3065],{"class":49},[39,20182,318],{"class":53},[39,20184,20185],{"class":41,"line":112},[39,20186,122],{"emptyLinePlaceholder":121},[39,20188,20189],{"class":41,"line":118},[39,20190,20191],{"class":128},"\u002F\u002F拷贝构造函数调用时机\n",[39,20193,20194],{"class":41,"line":125},[39,20195,122],{"emptyLinePlaceholder":121},[39,20197,20198],{"class":41,"line":132},[39,20199,20200],{"class":128},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[39,20202,20203],{"class":41,"line":138},[39,20204,20205],{"class":128},"\u002F\u002F2.值传递的方式给函数参数传值\n",[39,20207,20208],{"class":41,"line":169},[39,20209,20210],{"class":128},"\u002F\u002F3.以值方式返回局部对象\n",[39,20212,20213,20215],{"class":41,"line":190},[39,20214,15667],{"class":45},[39,20216,16144],{"class":49},[39,20218,20219],{"class":41,"line":202},[39,20220,542],{"class":53},[39,20222,20223],{"class":41,"line":207},[39,20224,15689],{"class":45},[39,20226,20227,20229],{"class":41,"line":212},[39,20228,19492],{"class":49},[39,20230,537],{"class":53},[39,20232,20233],{"class":41,"line":223},[39,20234,3128],{"class":53},[39,20236,20237,20239,20241,20244,20246],{"class":41,"line":228},[39,20238,10737],{"class":53},[39,20240,234],{"class":45},[39,20242,20243],{"class":237}," \"Person的默认构造函数调用\"",[39,20245,241],{"class":45},[39,20247,260],{"class":53},[39,20249,20250],{"class":41,"line":263},[39,20251,3284],{"class":53},[39,20253,20254],{"class":41,"line":287},[39,20255,20256],{"class":128},"    \u002F\u002F有参构造\n",[39,20258,20259,20261,20263,20265,20267],{"class":41,"line":292},[39,20260,19492],{"class":49},[39,20262,54],{"class":53},[39,20264,46],{"class":45},[39,20266,16662],{"class":59},[39,20268,574],{"class":53},[39,20270,20271],{"class":41,"line":305},[39,20272,3128],{"class":53},[39,20274,20275,20277,20279],{"class":41,"line":310},[39,20276,16716],{"class":53},[39,20278,1117],{"class":45},[39,20280,8871],{"class":53},[39,20282,20283,20285,20287,20290,20292],{"class":41,"line":321},[39,20284,10737],{"class":53},[39,20286,234],{"class":45},[39,20288,20289],{"class":237}," \"Person的有参构造函数调用\"",[39,20291,241],{"class":45},[39,20293,260],{"class":53},[39,20295,20296],{"class":41,"line":713},[39,20297,3284],{"class":53},[39,20299,20300],{"class":41,"line":718},[39,20301,19847],{"class":128},[39,20303,20304,20306,20308,20310,20312,20314,20316],{"class":41,"line":723},[39,20305,19492],{"class":49},[39,20307,54],{"class":53},[39,20309,960],{"class":45},[39,20311,16542],{"class":49},[39,20313,919],{"class":45},[39,20315,19],{"class":59},[39,20317,574],{"class":53},[39,20319,20320],{"class":41,"line":729},[39,20321,3128],{"class":53},[39,20323,20324,20326,20328],{"class":41,"line":735},[39,20325,16716],{"class":53},[39,20327,1117],{"class":45},[39,20329,20330],{"class":53}," p.m_Age;\n",[39,20332,20333,20335,20337,20340,20342],{"class":41,"line":741},[39,20334,10737],{"class":53},[39,20336,234],{"class":45},[39,20338,20339],{"class":237}," \"Person的拷贝构造函数调用\"",[39,20341,241],{"class":45},[39,20343,260],{"class":53},[39,20345,20346],{"class":41,"line":747},[39,20347,3284],{"class":53},[39,20349,20350,20352],{"class":41,"line":753},[39,20351,19525],{"class":49},[39,20353,537],{"class":53},[39,20355,20356],{"class":41,"line":758},[39,20357,3128],{"class":53},[39,20359,20360,20362,20364,20366,20368],{"class":41,"line":763},[39,20361,10737],{"class":53},[39,20363,234],{"class":45},[39,20365,19540],{"class":237},[39,20367,241],{"class":45},[39,20369,260],{"class":53},[39,20371,20372],{"class":41,"line":772},[39,20373,3284],{"class":53},[39,20375,20376,20378],{"class":41,"line":777},[39,20377,1112],{"class":45},[39,20379,16639],{"class":53},[39,20381,20382],{"class":41,"line":785},[39,20383,5078],{"class":53},[39,20385,20386],{"class":41,"line":796},[39,20387,20200],{"class":128},[39,20389,20390,20392,20394],{"class":41,"line":808},[39,20391,370],{"class":45},[39,20393,6666],{"class":49},[39,20395,537],{"class":53},[39,20397,20398],{"class":41,"line":823},[39,20399,542],{"class":53},[39,20401,20402,20405,20407,20409,20411],{"class":41,"line":839},[39,20403,20404],{"class":53},"    Person ",[39,20406,8204],{"class":49},[39,20408,54],{"class":53},[39,20410,248],{"class":74},[39,20412,166],{"class":53},[39,20414,20415,20417,20419],{"class":41,"line":845},[39,20416,20404],{"class":53},[39,20418,8107],{"class":49},[39,20420,18488],{"class":53},[39,20422,20423,20425,20427,20430,20432,20435,20437],{"class":41,"line":856},[39,20424,2673],{"class":53},[39,20426,234],{"class":45},[39,20428,20429],{"class":237},"\"P2的年龄为：\"",[39,20431,234],{"class":45},[39,20433,20434],{"class":53},"p2.m_Age",[39,20436,234],{"class":45},[39,20438,2324],{"class":53},[39,20440,20441],{"class":41,"line":861},[39,20442,115],{"class":53},[39,20444,20445],{"class":41,"line":870},[39,20446,20447],{"class":128},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[39,20449,20450],{"class":41,"line":9084},[39,20451,20452],{"class":128},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[39,20454,20455,20457,20460,20462,20464,20466],{"class":41,"line":9090},[39,20456,370],{"class":45},[39,20458,20459],{"class":49}," doWork",[39,20461,54],{"class":53},[39,20463,20019],{"class":49},[39,20465,7899],{"class":59},[39,20467,574],{"class":53},[39,20469,20470],{"class":41,"line":9102},[39,20471,542],{"class":53},[39,20473,20474,20476,20478,20481,20483],{"class":41,"line":9114},[39,20475,231],{"class":53},[39,20477,234],{"class":45},[39,20479,20480],{"class":237}," \"doWork函数调用\"",[39,20482,241],{"class":45},[39,20484,260],{"class":53},[39,20486,20487],{"class":41,"line":9126},[39,20488,115],{"class":53},[39,20490,20491,20493,20495],{"class":41,"line":10784},[39,20492,370],{"class":45},[39,20494,6734],{"class":49},[39,20496,537],{"class":53},[39,20498,20499],{"class":41,"line":10809},[39,20500,542],{"class":53},[39,20502,20503],{"class":41,"line":10832},[39,20504,16286],{"class":53},[39,20506,20507,20510],{"class":41,"line":10856},[39,20508,20509],{"class":49},"    doWork",[39,20511,20512],{"class":53},"(p);\n",[39,20514,20515],{"class":41,"line":10861},[39,20516,115],{"class":53},[39,20518,20519],{"class":41,"line":10866},[39,20520,20521],{"class":128},"\u002F\u002F 3.以值方式返回局部对象\n",[39,20523,20524,20526,20529],{"class":41,"line":10871},[39,20525,20019],{"class":49},[39,20527,20528],{"class":49}," doWork2",[39,20530,537],{"class":53},[39,20532,20533],{"class":41,"line":10880},[39,20534,542],{"class":53},[39,20536,20537],{"class":41,"line":10885},[39,20538,20009],{"class":53},[39,20540,20541,20543,20545,20547,20549,20551,20553,20555,20557,20559,20561],{"class":41,"line":10891},[39,20542,2673],{"class":53},[39,20544,234],{"class":45},[39,20546,54],{"class":53},[39,20548,46],{"class":45},[39,20550,7594],{"class":45},[39,20552,1692],{"class":53},[39,20554,1617],{"class":45},[39,20556,8204],{"class":53},[39,20558,234],{"class":45},[39,20560,2367],{"class":53},[39,20562,20563],{"class":128},"\u002F\u002F打印p1的地址\n",[39,20565,20566,20568,20571],{"class":41,"line":10912},[39,20567,95],{"class":45},[39,20569,20570],{"class":53}," p1;",[39,20572,20573],{"class":128},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[39,20575,20576],{"class":41,"line":10918},[39,20577,115],{"class":53},[39,20579,20580,20582,20584],{"class":41,"line":10932},[39,20581,370],{"class":45},[39,20583,6806],{"class":49},[39,20585,537],{"class":53},[39,20587,20588],{"class":41,"line":10938},[39,20589,542],{"class":53},[39,20591,20592,20595,20597,20599],{"class":41,"line":10965},[39,20593,20594],{"class":53},"    Person p ",[39,20596,1117],{"class":45},[39,20598,20528],{"class":49},[39,20600,782],{"class":53},[39,20602,20603,20605,20607,20609,20611,20613,20615,20617,20619,20621,20623],{"class":41,"line":10974},[39,20604,2673],{"class":53},[39,20606,234],{"class":45},[39,20608,54],{"class":53},[39,20610,46],{"class":45},[39,20612,7594],{"class":45},[39,20614,1692],{"class":53},[39,20616,1617],{"class":45},[39,20618,19],{"class":53},[39,20620,234],{"class":45},[39,20622,2367],{"class":53},[39,20624,20625],{"class":128},"\u002F\u002F打印p的地址\n",[39,20627,20628],{"class":41,"line":10980},[39,20629,115],{"class":53},[39,20631,20632],{"class":41,"line":10988},[39,20633,122],{"emptyLinePlaceholder":121},[39,20635,20636],{"class":41,"line":10993},[39,20637,122],{"emptyLinePlaceholder":121},[39,20639,20640,20642,20644],{"class":41,"line":17577},[39,20641,46],{"class":45},[39,20643,217],{"class":49},[39,20645,537],{"class":53},[39,20647,20648],{"class":41,"line":17583},[39,20649,542],{"class":53},[39,20651,20652],{"class":41,"line":17606},[39,20653,20654],{"class":128},"    \u002F\u002F test01();\n",[39,20656,20657],{"class":41,"line":17612},[39,20658,20659],{"class":128},"    \u002F\u002F test02();\n",[39,20661,20662,20665],{"class":41,"line":17635},[39,20663,20664],{"class":49},"    test03",[39,20666,782],{"class":53},[39,20668,20669],{"class":41,"line":17649},[39,20670,20671],{"class":128},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[39,20673,20674],{"class":41,"line":17669},[39,20675,20676],{"class":128},"\u002F\u002F 输出结果如下：\n",[39,20678,20679],{"class":41,"line":17675},[39,20680,20681],{"class":128},"\u002F\u002F Person的默认构造函数调用\n",[39,20683,20684],{"class":41,"line":17686},[39,20685,20686],{"class":128},"\u002F\u002F 0x7fffffffceec\n",[39,20688,20689],{"class":41,"line":17709},[39,20690,20686],{"class":128},[39,20692,20693],{"class":41,"line":17731},[39,20694,20695],{"class":128},"\u002F\u002F Person的析构函数调用\n",[39,20697,20698],{"class":41,"line":17736},[39,20699,122],{"emptyLinePlaceholder":121},[39,20701,20702],{"class":41,"line":17742},[39,20703,20704],{"class":128},"\u002F\u002F 之前的输出结果如下：\n",[39,20706,20707],{"class":41,"line":17756},[39,20708,20681],{"class":128},[39,20710,20711],{"class":41,"line":17769},[39,20712,20713],{"class":128},"\u002F\u002F 地址\n",[39,20715,20716],{"class":41,"line":17774},[39,20717,20718],{"class":128},"\u002F\u002F Person的拷贝构造函数调用\n",[39,20720,20721],{"class":41,"line":17788},[39,20722,20695],{"class":128},[39,20724,20725],{"class":41,"line":17793},[39,20726,20713],{"class":128},[39,20728,20729],{"class":41,"line":17799},[39,20730,20731],{"class":128},"\u002F\u002F (这两次输出的地址也是不同的) \n",[39,20733,20734],{"class":41,"line":17804},[39,20735,20736],{"class":128},"\u002F\u002F Person的析构函数调用     \n",[39,20738,20739,20741,20743],{"class":41,"line":17818},[39,20740,95],{"class":45},[39,20742,315],{"class":74},[39,20744,318],{"class":53},[39,20746,20747],{"class":41,"line":17823},[39,20748,115],{"class":53},[19,20750,20751],{},"简化版理解",[30,20753,20755],{"className":32,"code":20754,"language":34,"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",[26,20756,20757,20765,20769,20775,20788,20799,20803,20815,20828,20836,20840,20856,20869,20878,20882,20887,20893,20906,20910,20914,20921,20925,20929,20934,20942,20946,20962,20975,20988,20992,20997,21005,21009,21013,21018,21023,21039,21047,21054,21060,21064,21068,21073,21081,21085,21089,21112,21119,21123,21127,21135,21139,21149,21171,21175,21179,21183,21191,21195,21200,21205,21211,21215,21225,21229,21237],{"__ignoreMap":35},[39,20758,20759,20761,20763],{"class":41,"line":42},[39,20760,15667],{"class":45},[39,20762,16542],{"class":49},[39,20764,16545],{"class":53},[39,20766,20767],{"class":41,"line":92},[39,20768,15689],{"class":45},[39,20770,20771,20773],{"class":41,"line":112},[39,20772,19492],{"class":49},[39,20774,220],{"class":53},[39,20776,20777,20779,20781,20784,20786],{"class":41,"line":118},[39,20778,10737],{"class":53},[39,20780,234],{"class":45},[39,20782,20783],{"class":237}," \"无参构造函数!\"",[39,20785,241],{"class":45},[39,20787,260],{"class":53},[39,20789,20790,20793,20795,20797],{"class":41,"line":125},[39,20791,20792],{"class":53},"        mAge ",[39,20794,1117],{"class":45},[39,20796,315],{"class":74},[39,20798,318],{"class":53},[39,20800,20801],{"class":41,"line":132},[39,20802,3284],{"class":53},[39,20804,20805,20807,20809,20811,20813],{"class":41,"line":138},[39,20806,19492],{"class":49},[39,20808,54],{"class":53},[39,20810,46],{"class":45},[39,20812,16662],{"class":59},[39,20814,89],{"class":53},[39,20816,20817,20819,20821,20824,20826],{"class":41,"line":169},[39,20818,10737],{"class":53},[39,20820,234],{"class":45},[39,20822,20823],{"class":237}," \"有参构造函数!\"",[39,20825,241],{"class":45},[39,20827,260],{"class":53},[39,20829,20830,20832,20834],{"class":41,"line":190},[39,20831,20792],{"class":53},[39,20833,1117],{"class":45},[39,20835,8871],{"class":53},[39,20837,20838],{"class":41,"line":202},[39,20839,3284],{"class":53},[39,20841,20842,20844,20846,20848,20850,20852,20854],{"class":41,"line":207},[39,20843,19492],{"class":49},[39,20845,54],{"class":53},[39,20847,960],{"class":45},[39,20849,16542],{"class":49},[39,20851,1617],{"class":45},[39,20853,7899],{"class":59},[39,20855,89],{"class":53},[39,20857,20858,20860,20862,20865,20867],{"class":41,"line":212},[39,20859,10737],{"class":53},[39,20861,234],{"class":45},[39,20863,20864],{"class":237}," \"拷贝构造函数!\"",[39,20866,241],{"class":45},[39,20868,260],{"class":53},[39,20870,20871,20873,20875],{"class":41,"line":223},[39,20872,20792],{"class":53},[39,20874,1117],{"class":45},[39,20876,20877],{"class":53}," p.mAge;\n",[39,20879,20880],{"class":41,"line":228},[39,20881,3284],{"class":53},[39,20883,20884],{"class":41,"line":263},[39,20885,20886],{"class":128},"    \u002F\u002F析构函数在释放内存之前调用\n",[39,20888,20889,20891],{"class":41,"line":287},[39,20890,19525],{"class":49},[39,20892,220],{"class":53},[39,20894,20895,20897,20899,20902,20904],{"class":41,"line":292},[39,20896,10737],{"class":53},[39,20898,234],{"class":45},[39,20900,20901],{"class":237}," \"析构函数!\"",[39,20903,241],{"class":45},[39,20905,260],{"class":53},[39,20907,20908],{"class":41,"line":305},[39,20909,3284],{"class":53},[39,20911,20912],{"class":41,"line":310},[39,20913,15689],{"class":45},[39,20915,20916,20918],{"class":41,"line":321},[39,20917,1112],{"class":45},[39,20919,20920],{"class":53}," mAge;\n",[39,20922,20923],{"class":41,"line":713},[39,20924,5078],{"class":53},[39,20926,20927],{"class":41,"line":718},[39,20928,122],{"emptyLinePlaceholder":121},[39,20930,20931],{"class":41,"line":723},[39,20932,20933],{"class":128},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[39,20935,20936,20938,20940],{"class":41,"line":729},[39,20937,370],{"class":45},[39,20939,6666],{"class":49},[39,20941,220],{"class":53},[39,20943,20944],{"class":41,"line":735},[39,20945,122],{"emptyLinePlaceholder":121},[39,20947,20948,20950,20953,20955,20957,20959],{"class":41,"line":741},[39,20949,20404],{"class":53},[39,20951,20952],{"class":49},"man",[39,20954,54],{"class":53},[39,20956,278],{"class":74},[39,20958,431],{"class":53},[39,20960,20961],{"class":128}," \u002F\u002Fp对象已经创建完毕\n",[39,20963,20964,20966,20969,20972],{"class":41,"line":747},[39,20965,20404],{"class":53},[39,20967,20968],{"class":49},"newman",[39,20970,20971],{"class":53},"(man);",[39,20973,20974],{"class":128}," \u002F\u002F调用拷贝构造函数\n",[39,20976,20977,20980,20982,20985],{"class":41,"line":753},[39,20978,20979],{"class":53},"    Person newman2 ",[39,20981,1117],{"class":45},[39,20983,20984],{"class":53}," man;",[39,20986,20987],{"class":128}," \u002F\u002F拷贝构造\n",[39,20989,20990],{"class":41,"line":758},[39,20991,122],{"emptyLinePlaceholder":121},[39,20993,20994],{"class":41,"line":763},[39,20995,20996],{"class":128},"    \u002F\u002FPerson newman3;\n",[39,20998,20999,21002],{"class":41,"line":772},[39,21000,21001],{"class":128},"    \u002F\u002Fnewman3 = man;",[39,21003,21004],{"class":128}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[39,21006,21007],{"class":41,"line":777},[39,21008,115],{"class":53},[39,21010,21011],{"class":41,"line":785},[39,21012,122],{"emptyLinePlaceholder":121},[39,21014,21015],{"class":41,"line":796},[39,21016,21017],{"class":128},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[39,21019,21020],{"class":41,"line":808},[39,21021,21022],{"class":128},"\u002F\u002F相当于Person p1 = p;\n",[39,21024,21025,21027,21029,21031,21033,21036],{"class":41,"line":823},[39,21026,370],{"class":45},[39,21028,20459],{"class":49},[39,21030,54],{"class":53},[39,21032,20019],{"class":49},[39,21034,21035],{"class":59}," p1",[39,21037,21038],{"class":53},") {}\n",[39,21040,21041,21043,21045],{"class":41,"line":839},[39,21042,370],{"class":45},[39,21044,6734],{"class":49},[39,21046,220],{"class":53},[39,21048,21049,21051],{"class":41,"line":845},[39,21050,19577],{"class":53},[39,21052,21053],{"class":128}," \u002F\u002F无参构造函数\n",[39,21055,21056,21058],{"class":41,"line":856},[39,21057,20509],{"class":49},[39,21059,20512],{"class":53},[39,21061,21062],{"class":41,"line":861},[39,21063,115],{"class":53},[39,21065,21066],{"class":41,"line":870},[39,21067,122],{"emptyLinePlaceholder":121},[39,21069,21070],{"class":41,"line":9084},[39,21071,21072],{"class":128},"\u002F\u002F3. 以值方式返回局部对象\n",[39,21074,21075,21077,21079],{"class":41,"line":9090},[39,21076,20019],{"class":49},[39,21078,20528],{"class":49},[39,21080,537],{"class":53},[39,21082,21083],{"class":41,"line":9102},[39,21084,542],{"class":53},[39,21086,21087],{"class":41,"line":9114},[39,21088,20009],{"class":53},[39,21090,21091,21093,21095,21097,21099,21101,21103,21105,21108,21110],{"class":41,"line":9126},[39,21092,231],{"class":53},[39,21094,234],{"class":45},[39,21096,2772],{"class":53},[39,21098,46],{"class":45},[39,21100,7594],{"class":45},[39,21102,1692],{"class":53},[39,21104,1617],{"class":45},[39,21106,21107],{"class":53},"p1 ",[39,21109,234],{"class":45},[39,21111,260],{"class":53},[39,21113,21114,21116],{"class":41,"line":10784},[39,21115,95],{"class":45},[39,21117,21118],{"class":53}," p1;\n",[39,21120,21121],{"class":41,"line":10809},[39,21122,115],{"class":53},[39,21124,21125],{"class":41,"line":10832},[39,21126,122],{"emptyLinePlaceholder":121},[39,21128,21129,21131,21133],{"class":41,"line":10856},[39,21130,370],{"class":45},[39,21132,6806],{"class":49},[39,21134,537],{"class":53},[39,21136,21137],{"class":41,"line":10861},[39,21138,542],{"class":53},[39,21140,21141,21143,21145,21147],{"class":41,"line":10866},[39,21142,20594],{"class":53},[39,21144,1117],{"class":45},[39,21146,20528],{"class":49},[39,21148,782],{"class":53},[39,21150,21151,21153,21155,21157,21159,21161,21163,21165,21167,21169],{"class":41,"line":10871},[39,21152,231],{"class":53},[39,21154,234],{"class":45},[39,21156,2772],{"class":53},[39,21158,46],{"class":45},[39,21160,7594],{"class":45},[39,21162,1692],{"class":53},[39,21164,1617],{"class":45},[39,21166,12508],{"class":53},[39,21168,234],{"class":45},[39,21170,260],{"class":53},[39,21172,21173],{"class":41,"line":10880},[39,21174,115],{"class":53},[39,21176,21177],{"class":41,"line":10885},[39,21178,122],{"emptyLinePlaceholder":121},[39,21180,21181],{"class":41,"line":10891},[39,21182,122],{"emptyLinePlaceholder":121},[39,21184,21185,21187,21189],{"class":41,"line":10912},[39,21186,46],{"class":45},[39,21188,217],{"class":49},[39,21190,220],{"class":53},[39,21192,21193],{"class":41,"line":10918},[39,21194,122],{"emptyLinePlaceholder":121},[39,21196,21197],{"class":41,"line":10932},[39,21198,21199],{"class":128},"    \u002F\u002Ftest01();\n",[39,21201,21202],{"class":41,"line":10938},[39,21203,21204],{"class":128},"    \u002F\u002Ftest02();\n",[39,21206,21207,21209],{"class":41,"line":10965},[39,21208,20664],{"class":49},[39,21210,782],{"class":53},[39,21212,21213],{"class":41,"line":10974},[39,21214,122],{"emptyLinePlaceholder":121},[39,21216,21217,21219,21221,21223],{"class":41,"line":10980},[39,21218,295],{"class":49},[39,21220,54],{"class":53},[39,21222,300],{"class":237},[39,21224,166],{"class":53},[39,21226,21227],{"class":41,"line":10988},[39,21228,122],{"emptyLinePlaceholder":121},[39,21230,21231,21233,21235],{"class":41,"line":10993},[39,21232,95],{"class":45},[39,21234,315],{"class":74},[39,21236,318],{"class":53},[39,21238,21239],{"class":41,"line":17577},[39,21240,115],{"class":53},[476,21242,21244],{"id":21243},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,21246,21247],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,21249,21250],{},"1．默认构造函数(无参，函数体为空)",[19,21252,21253],{},"2．默认析构函数(无参，函数体为空)",[19,21255,21256],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21258,21259],{},"构造函数调用规则如下：",[489,21261,21262,21265],{},[331,21263,21264],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[331,21266,21267],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[30,21269,21271],{"className":32,"code":21270,"language":34,"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",[26,21272,21273,21281,21285,21290,21296,21308,21312,21317,21329,21338,21350,21354,21358,21374,21383,21395,21399,21403,21409,21421,21425,21429,21435,21439,21443,21451,21455,21467,21472,21480,21484,21502,21506,21510,21518,21522,21527,21535,21550,21563,21567,21572,21579,21595,21608,21612,21616,21624,21628,21634,21638,21648,21652,21660],{"__ignoreMap":35},[39,21274,21275,21277,21279],{"class":41,"line":42},[39,21276,15667],{"class":45},[39,21278,16542],{"class":49},[39,21280,16545],{"class":53},[39,21282,21283],{"class":41,"line":92},[39,21284,15689],{"class":45},[39,21286,21287],{"class":41,"line":112},[39,21288,21289],{"class":128},"    \u002F\u002F无参（默认）构造函数\n",[39,21291,21292,21294],{"class":41,"line":118},[39,21293,19492],{"class":49},[39,21295,220],{"class":53},[39,21297,21298,21300,21302,21304,21306],{"class":41,"line":125},[39,21299,10737],{"class":53},[39,21301,234],{"class":45},[39,21303,20783],{"class":237},[39,21305,241],{"class":45},[39,21307,260],{"class":53},[39,21309,21310],{"class":41,"line":132},[39,21311,3284],{"class":53},[39,21313,21314],{"class":41,"line":138},[39,21315,21316],{"class":128},"    \u002F\u002F有参构造函数\n",[39,21318,21319,21321,21323,21325,21327],{"class":41,"line":169},[39,21320,19492],{"class":49},[39,21322,54],{"class":53},[39,21324,46],{"class":45},[39,21326,60],{"class":59},[39,21328,89],{"class":53},[39,21330,21331,21334,21336],{"class":41,"line":190},[39,21332,21333],{"class":53},"        age ",[39,21335,1117],{"class":45},[39,21337,2556],{"class":53},[39,21339,21340,21342,21344,21346,21348],{"class":41,"line":202},[39,21341,10737],{"class":53},[39,21343,234],{"class":45},[39,21345,20823],{"class":237},[39,21347,241],{"class":45},[39,21349,260],{"class":53},[39,21351,21352],{"class":41,"line":207},[39,21353,3284],{"class":53},[39,21355,21356],{"class":41,"line":212},[39,21357,19847],{"class":128},[39,21359,21360,21362,21364,21366,21368,21370,21372],{"class":41,"line":223},[39,21361,19492],{"class":49},[39,21363,54],{"class":53},[39,21365,960],{"class":45},[39,21367,16542],{"class":49},[39,21369,1617],{"class":45},[39,21371,7899],{"class":59},[39,21373,89],{"class":53},[39,21375,21376,21378,21380],{"class":41,"line":228},[39,21377,21333],{"class":53},[39,21379,1117],{"class":45},[39,21381,21382],{"class":53}," p.age;\n",[39,21384,21385,21387,21389,21391,21393],{"class":41,"line":263},[39,21386,10737],{"class":53},[39,21388,234],{"class":45},[39,21390,20864],{"class":237},[39,21392,241],{"class":45},[39,21394,260],{"class":53},[39,21396,21397],{"class":41,"line":287},[39,21398,3284],{"class":53},[39,21400,21401],{"class":41,"line":292},[39,21402,19520],{"class":128},[39,21404,21405,21407],{"class":41,"line":305},[39,21406,19525],{"class":49},[39,21408,220],{"class":53},[39,21410,21411,21413,21415,21417,21419],{"class":41,"line":310},[39,21412,10737],{"class":53},[39,21414,234],{"class":45},[39,21416,20901],{"class":237},[39,21418,241],{"class":45},[39,21420,260],{"class":53},[39,21422,21423],{"class":41,"line":321},[39,21424,3284],{"class":53},[39,21426,21427],{"class":41,"line":713},[39,21428,15689],{"class":45},[39,21430,21431,21433],{"class":41,"line":718},[39,21432,1112],{"class":45},[39,21434,8871],{"class":53},[39,21436,21437],{"class":41,"line":723},[39,21438,5078],{"class":53},[39,21440,21441],{"class":41,"line":729},[39,21442,122],{"emptyLinePlaceholder":121},[39,21444,21445,21447,21449],{"class":41,"line":735},[39,21446,370],{"class":45},[39,21448,6666],{"class":49},[39,21450,537],{"class":53},[39,21452,21453],{"class":41,"line":741},[39,21454,542],{"class":53},[39,21456,21457,21459,21461,21463,21465],{"class":41,"line":747},[39,21458,20404],{"class":53},[39,21460,8204],{"class":49},[39,21462,54],{"class":53},[39,21464,1911],{"class":74},[39,21466,166],{"class":53},[39,21468,21469],{"class":41,"line":753},[39,21470,21471],{"class":128},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[39,21473,21474,21476,21478],{"class":41,"line":758},[39,21475,20404],{"class":53},[39,21477,8107],{"class":49},[39,21479,18488],{"class":53},[39,21481,21482],{"class":41,"line":763},[39,21483,122],{"emptyLinePlaceholder":121},[39,21485,21486,21488,21490,21493,21495,21498,21500],{"class":41,"line":772},[39,21487,231],{"class":53},[39,21489,234],{"class":45},[39,21491,21492],{"class":237}," \"p2的年龄为： \"",[39,21494,241],{"class":45},[39,21496,21497],{"class":53}," p2.age ",[39,21499,234],{"class":45},[39,21501,260],{"class":53},[39,21503,21504],{"class":41,"line":777},[39,21505,115],{"class":53},[39,21507,21508],{"class":41,"line":785},[39,21509,122],{"emptyLinePlaceholder":121},[39,21511,21512,21514,21516],{"class":41,"line":796},[39,21513,370],{"class":45},[39,21515,6734],{"class":49},[39,21517,537],{"class":53},[39,21519,21520],{"class":41,"line":808},[39,21521,542],{"class":53},[39,21523,21524],{"class":41,"line":823},[39,21525,21526],{"class":128},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[39,21528,21529,21532],{"class":41,"line":839},[39,21530,21531],{"class":53},"    Person p1;",[39,21533,21534],{"class":128}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[39,21536,21537,21539,21541,21543,21545,21547],{"class":41,"line":845},[39,21538,20404],{"class":53},[39,21540,8107],{"class":49},[39,21542,54],{"class":53},[39,21544,423],{"class":74},[39,21546,431],{"class":53},[39,21548,21549],{"class":128}," \u002F\u002F用户提供的有参\n",[39,21551,21552,21554,21557,21560],{"class":41,"line":856},[39,21553,20404],{"class":53},[39,21555,21556],{"class":49},"p3",[39,21558,21559],{"class":53},"(p2);",[39,21561,21562],{"class":128}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[39,21564,21565],{"class":41,"line":861},[39,21566,122],{"emptyLinePlaceholder":121},[39,21568,21569],{"class":41,"line":870},[39,21570,21571],{"class":128},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[39,21573,21574,21577],{"class":41,"line":9084},[39,21575,21576],{"class":53},"    Person p4;",[39,21578,21534],{"class":128},[39,21580,21581,21583,21586,21588,21590,21592],{"class":41,"line":9090},[39,21582,20404],{"class":53},[39,21584,21585],{"class":49},"p5",[39,21587,54],{"class":53},[39,21589,423],{"class":74},[39,21591,431],{"class":53},[39,21593,21594],{"class":128}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[39,21596,21597,21599,21602,21605],{"class":41,"line":9102},[39,21598,20404],{"class":53},[39,21600,21601],{"class":49},"p6",[39,21603,21604],{"class":53},"(p5);",[39,21606,21607],{"class":128}," \u002F\u002F用户自己提供拷贝构造\n",[39,21609,21610],{"class":41,"line":9114},[39,21611,115],{"class":53},[39,21613,21614],{"class":41,"line":9126},[39,21615,122],{"emptyLinePlaceholder":121},[39,21617,21618,21620,21622],{"class":41,"line":10784},[39,21619,46],{"class":45},[39,21621,217],{"class":49},[39,21623,220],{"class":53},[39,21625,21626],{"class":41,"line":10809},[39,21627,122],{"emptyLinePlaceholder":121},[39,21629,21630,21632],{"class":41,"line":10832},[39,21631,6711],{"class":49},[39,21633,782],{"class":53},[39,21635,21636],{"class":41,"line":10856},[39,21637,122],{"emptyLinePlaceholder":121},[39,21639,21640,21642,21644,21646],{"class":41,"line":10861},[39,21641,295],{"class":49},[39,21643,54],{"class":53},[39,21645,300],{"class":237},[39,21647,166],{"class":53},[39,21649,21650],{"class":41,"line":10866},[39,21651,122],{"emptyLinePlaceholder":121},[39,21653,21654,21656,21658],{"class":41,"line":10871},[39,21655,95],{"class":45},[39,21657,315],{"class":74},[39,21659,318],{"class":53},[39,21661,21662],{"class":41,"line":10880},[39,21663,115],{"class":53},[476,21665,21667],{"id":21666},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,21669,21670],{},"浅拷贝：简单的赋值拷贝操作",[19,21672,21673],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[30,21675,21677],{"className":32,"code":21676,"language":34,"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",[26,21678,21679,21685,21695,21701,21705,21709,21714,21720,21724,21737,21741,21745,21752,21756,21766,21781,21794,21798,21803,21808,21824,21828,21841,21846,21851,21856,21865,21870,21885,21889,21893,21897,21903,21907,21912,21927,21931,21942,21956,21960,21969,21973,21979,21991,21995,22003,22007,22024,22055,22063,22091,22095,22099,22107,22111,22117],{"__ignoreMap":35},[39,21680,21681,21683],{"class":41,"line":42},[39,21682,3051],{"class":45},[39,21684,3054],{"class":237},[39,21686,21687,21689,21691,21693],{"class":41,"line":92},[39,21688,3059],{"class":45},[39,21690,3062],{"class":45},[39,21692,3065],{"class":49},[39,21694,318],{"class":53},[39,21696,21697,21699],{"class":41,"line":112},[39,21698,15667],{"class":45},[39,21700,16144],{"class":49},[39,21702,21703],{"class":41,"line":118},[39,21704,542],{"class":53},[39,21706,21707],{"class":41,"line":125},[39,21708,15689],{"class":45},[39,21710,21711],{"class":41,"line":132},[39,21712,21713],{"class":128},"    \u002F\u002F默认构造函数\n",[39,21715,21716,21718],{"class":41,"line":138},[39,21717,19492],{"class":49},[39,21719,537],{"class":53},[39,21721,21722],{"class":41,"line":169},[39,21723,3128],{"class":53},[39,21725,21726,21728,21730,21733,21735],{"class":41,"line":190},[39,21727,4534],{"class":53},[39,21729,234],{"class":45},[39,21731,21732],{"class":237},"\"默认构造函数\"",[39,21734,234],{"class":45},[39,21736,2324],{"class":53},[39,21738,21739],{"class":41,"line":202},[39,21740,3284],{"class":53},[39,21742,21743],{"class":41,"line":207},[39,21744,21316],{"class":128},[39,21746,21747,21749],{"class":41,"line":212},[39,21748,19525],{"class":49},[39,21750,21751],{"class":53},"(int age,int height)\n",[39,21753,21754],{"class":41,"line":223},[39,21755,3128],{"class":53},[39,21757,21758,21761,21763],{"class":41,"line":228},[39,21759,21760],{"class":53},"        m_Age",[39,21762,1117],{"class":45},[39,21764,21765],{"class":53},"age;\n",[39,21767,21768,21771,21773,21775,21778],{"class":41,"line":263},[39,21769,21770],{"class":53},"        m_Height",[39,21772,12777],{"class":45},[39,21774,963],{"class":45},[39,21776,21777],{"class":53},"(height);",[39,21779,21780],{"class":128},"\u002F\u002F放到堆区\n",[39,21782,21783,21785,21787,21790,21792],{"class":41,"line":287},[39,21784,4534],{"class":53},[39,21786,234],{"class":45},[39,21788,21789],{"class":237},"\"有参构造函数\"",[39,21791,234],{"class":45},[39,21793,2324],{"class":53},[39,21795,21796],{"class":41,"line":292},[39,21797,3284],{"class":53},[39,21799,21800],{"class":41,"line":305},[39,21801,21802],{"class":128},"    \u002F\u002F深拷贝解决上述问题\n",[39,21804,21805],{"class":41,"line":310},[39,21806,21807],{"class":128},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[39,21809,21810,21812,21814,21816,21818,21820,21822],{"class":41,"line":321},[39,21811,19492],{"class":49},[39,21813,54],{"class":53},[39,21815,960],{"class":45},[39,21817,16542],{"class":49},[39,21819,919],{"class":45},[39,21821,19],{"class":59},[39,21823,574],{"class":53},[39,21825,21826],{"class":41,"line":713},[39,21827,3128],{"class":53},[39,21829,21830,21832,21834,21837,21839],{"class":41,"line":718},[39,21831,4534],{"class":53},[39,21833,234],{"class":45},[39,21835,21836],{"class":237},"\"拷贝构造函数\"",[39,21838,234],{"class":45},[39,21840,2324],{"class":53},[39,21842,21843],{"class":41,"line":723},[39,21844,21845],{"class":128},"        \u002F\u002F编译器默认的写如下注释部分\n",[39,21847,21848],{"class":41,"line":729},[39,21849,21850],{"class":128},"        \u002F\u002Fm_Age=p.m_Age;\n",[39,21852,21853],{"class":41,"line":735},[39,21854,21855],{"class":128},"        \u002F\u002Fm_Height=p.m_Height;\n",[39,21857,21858,21860,21862],{"class":41,"line":741},[39,21859,21760],{"class":53},[39,21861,1117],{"class":45},[39,21863,21864],{"class":53},"p.m_Age;\n",[39,21866,21867],{"class":41,"line":747},[39,21868,21869],{"class":128},"        \u002F\u002F深拷贝操作\n",[39,21871,21872,21874,21876,21878,21880,21882],{"class":41,"line":753},[39,21873,21770],{"class":53},[39,21875,12777],{"class":45},[39,21877,963],{"class":45},[39,21879,54],{"class":53},[39,21881,1717],{"class":45},[39,21883,21884],{"class":53},"p.m_Height);\n",[39,21886,21887],{"class":41,"line":758},[39,21888,3284],{"class":53},[39,21890,21891],{"class":41,"line":763},[39,21892,122],{"emptyLinePlaceholder":121},[39,21894,21895],{"class":41,"line":772},[39,21896,19520],{"class":128},[39,21898,21899,21901],{"class":41,"line":777},[39,21900,19525],{"class":49},[39,21902,537],{"class":53},[39,21904,21905],{"class":41,"line":785},[39,21906,3128],{"class":53},[39,21908,21909],{"class":41,"line":796},[39,21910,21911],{"class":128},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[39,21913,21914,21916,21919,21922,21925],{"class":41,"line":808},[39,21915,3590],{"class":45},[39,21917,21918],{"class":53},"(m_Height ",[39,21920,21921],{"class":45},"!=",[39,21923,21924],{"class":74}," NULL",[39,21926,574],{"class":53},[39,21928,21929],{"class":41,"line":823},[39,21930,3603],{"class":53},[39,21932,21933,21936,21939],{"class":41,"line":839},[39,21934,21935],{"class":45},"            delete",[39,21937,21938],{"class":53}," m_Height;",[39,21940,21941],{"class":128}," \u002F\u002F释放堆区内存\n",[39,21943,21944,21947,21949,21951,21953],{"class":41,"line":845},[39,21945,21946],{"class":53},"            m_Height",[39,21948,1117],{"class":45},[39,21950,3486],{"class":74},[39,21952,1324],{"class":53},[39,21954,21955],{"class":128}," \u002F\u002F防止野指针\n",[39,21957,21958],{"class":41,"line":856},[39,21959,3622],{"class":53},[39,21961,21962,21964,21966],{"class":41,"line":861},[39,21963,4534],{"class":53},[39,21965,234],{"class":45},[39,21967,21968],{"class":237},"\"Person的析构函数调用\"\n",[39,21970,21971],{"class":41,"line":870},[39,21972,3284],{"class":53},[39,21974,21975,21977],{"class":41,"line":9084},[39,21976,1112],{"class":45},[39,21978,16639],{"class":53},[39,21980,21981,21983,21985,21988],{"class":41,"line":9090},[39,21982,1112],{"class":45},[39,21984,7594],{"class":45},[39,21986,21987],{"class":53},"m_Height;",[39,21989,21990],{"class":128}," \u002F\u002F定义一个指针，指向身高\n",[39,21992,21993],{"class":41,"line":9102},[39,21994,5078],{"class":53},[39,21996,21997,21999,22001],{"class":41,"line":9114},[39,21998,370],{"class":45},[39,22000,6666],{"class":49},[39,22002,537],{"class":53},[39,22004,22005],{"class":41,"line":9126},[39,22006,542],{"class":53},[39,22008,22009,22011,22013,22015,22017,22019,22022],{"class":41,"line":10784},[39,22010,20404],{"class":53},[39,22012,8204],{"class":49},[39,22014,54],{"class":53},[39,22016,1911],{"class":74},[39,22018,426],{"class":53},[39,22020,22021],{"class":74},"160",[39,22023,166],{"class":53},[39,22025,22026,22028,22030,22033,22035,22038,22040,22043,22045,22048,22050,22052],{"class":41,"line":10809},[39,22027,2673],{"class":53},[39,22029,234],{"class":45},[39,22031,22032],{"class":237},"\"p1的年龄为:\"",[39,22034,234],{"class":45},[39,22036,22037],{"class":53},"p1.m_Age",[39,22039,234],{"class":45},[39,22041,22042],{"class":237},"\"身高为：\"",[39,22044,7495],{"class":45},[39,22046,22047],{"class":53},"p1.m_Height",[39,22049,234],{"class":45},[39,22051,2367],{"class":53},[39,22053,22054],{"class":128},"  \u002F\u002F18\n",[39,22056,22057,22059,22061],{"class":41,"line":10832},[39,22058,20404],{"class":53},[39,22060,8107],{"class":49},[39,22062,18488],{"class":53},[39,22064,22065,22067,22069,22072,22074,22076,22078,22080,22082,22085,22087,22089],{"class":41,"line":10856},[39,22066,2673],{"class":53},[39,22068,234],{"class":45},[39,22070,22071],{"class":237},"\"p2的年龄为：\"",[39,22073,234],{"class":45},[39,22075,20434],{"class":53},[39,22077,234],{"class":45},[39,22079,22042],{"class":237},[39,22081,7495],{"class":45},[39,22083,22084],{"class":53},"p2.m_Height",[39,22086,234],{"class":45},[39,22088,2367],{"class":53},[39,22090,22054],{"class":128},[39,22092,22093],{"class":41,"line":10861},[39,22094,842],{"class":53},[39,22096,22097],{"class":41,"line":10866},[39,22098,115],{"class":53},[39,22100,22101,22103,22105],{"class":41,"line":10871},[39,22102,46],{"class":45},[39,22104,217],{"class":49},[39,22106,537],{"class":53},[39,22108,22109],{"class":41,"line":10880},[39,22110,542],{"class":53},[39,22112,22113,22115],{"class":41,"line":10885},[39,22114,6711],{"class":49},[39,22116,782],{"class":53},[39,22118,22119],{"class":41,"line":10891},[39,22120,115],{"class":53},[19,22122,22123],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22125,22126],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22128,22129],{},[2585,22130],{"alt":35,"src":22131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22133,22134],{},"浅拷贝问题要使用深拷贝来解决",[19,22136,22137],{},[2585,22138],{"alt":35,"src":22139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22141,22142],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[476,22144,22146],{"id":22145},"_826初始化列表","8.2.6初始化列表",[19,22148,22149],{},"作用：初始化属性",[19,22151,24],{},[30,22153,22156],{"className":22154,"code":22155,"language":6267},[6265],"构造函数():属性1(值1),属性2(值2).....{}\n",[26,22157,22155],{"__ignoreMap":35},[19,22159,22160],{},"例子",[30,22162,22164],{"className":32,"code":22163,"language":34,"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",[26,22165,22166,22172,22182,22188,22192,22197,22201,22206,22211,22216,22221,22226,22231,22235,22240,22245,22288,22297,22315,22333,22351,22355,22359,22366,22373,22380,22384,22388,22396,22400,22404,22424,22433,22437,22441,22451,22455,22463],{"__ignoreMap":35},[39,22167,22168,22170],{"class":41,"line":42},[39,22169,3051],{"class":45},[39,22171,3054],{"class":237},[39,22173,22174,22176,22178,22180],{"class":41,"line":92},[39,22175,3059],{"class":45},[39,22177,3062],{"class":45},[39,22179,3065],{"class":49},[39,22181,318],{"class":53},[39,22183,22184,22186],{"class":41,"line":112},[39,22185,15667],{"class":45},[39,22187,16144],{"class":49},[39,22189,22190],{"class":41,"line":118},[39,22191,542],{"class":53},[39,22193,22194],{"class":41,"line":125},[39,22195,22196],{"class":45},"    public:\n",[39,22198,22199],{"class":41,"line":132},[39,22200,122],{"emptyLinePlaceholder":121},[39,22202,22203],{"class":41,"line":138},[39,22204,22205],{"class":128},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[39,22207,22208],{"class":41,"line":169},[39,22209,22210],{"class":128},"    \u002F\u002FPerson(int a, int b, int c) {\n",[39,22212,22213],{"class":41,"line":190},[39,22214,22215],{"class":128},"    \u002F\u002F  m_A = a;\n",[39,22217,22218],{"class":41,"line":202},[39,22219,22220],{"class":128},"    \u002F\u002F  m_B = b;\n",[39,22222,22223],{"class":41,"line":207},[39,22224,22225],{"class":128},"    \u002F\u002F  m_C = c;\n",[39,22227,22228],{"class":41,"line":212},[39,22229,22230],{"class":128},"    \u002F\u002F}\n",[39,22232,22233],{"class":41,"line":223},[39,22234,122],{"emptyLinePlaceholder":121},[39,22236,22237],{"class":41,"line":228},[39,22238,22239],{"class":128},"    \u002F\u002F初始化列表方式初始化\n",[39,22241,22242],{"class":41,"line":263},[39,22243,22244],{"class":128},"    \u002F\u002F使用有参构造函数\n",[39,22246,22247,22249,22251,22253,22255,22257,22259,22261,22263,22265,22267,22270,22273,22276,22279,22282,22285],{"class":41,"line":287},[39,22248,19492],{"class":49},[39,22250,54],{"class":53},[39,22252,46],{"class":45},[39,22254,60],{"class":59},[39,22256,63],{"class":53},[39,22258,46],{"class":45},[39,22260,68],{"class":59},[39,22262,63],{"class":53},[39,22264,46],{"class":45},[39,22266,82],{"class":59},[39,22268,22269],{"class":53},") :",[39,22271,22272],{"class":49},"m_A",[39,22274,22275],{"class":53},"(a), ",[39,22277,22278],{"class":49},"m_B",[39,22280,22281],{"class":53},"(b), ",[39,22283,22284],{"class":49},"m_C",[39,22286,22287],{"class":53},"(c) {}\n",[39,22289,22290,22292,22295],{"class":41,"line":292},[39,22291,15882],{"class":45},[39,22293,22294],{"class":49}," PrintPerson",[39,22296,220],{"class":53},[39,22298,22299,22301,22303,22306,22308,22311,22313],{"class":41,"line":305},[39,22300,10737],{"class":53},[39,22302,234],{"class":45},[39,22304,22305],{"class":237}," \"mA:\"",[39,22307,241],{"class":45},[39,22309,22310],{"class":53}," m_A ",[39,22312,234],{"class":45},[39,22314,260],{"class":53},[39,22316,22317,22319,22321,22324,22326,22329,22331],{"class":41,"line":310},[39,22318,10737],{"class":53},[39,22320,234],{"class":45},[39,22322,22323],{"class":237}," \"mB:\"",[39,22325,241],{"class":45},[39,22327,22328],{"class":53}," m_B ",[39,22330,234],{"class":45},[39,22332,260],{"class":53},[39,22334,22335,22337,22339,22342,22344,22347,22349],{"class":41,"line":321},[39,22336,10737],{"class":53},[39,22338,234],{"class":45},[39,22340,22341],{"class":237}," \"mC:\"",[39,22343,241],{"class":45},[39,22345,22346],{"class":53}," m_C ",[39,22348,234],{"class":45},[39,22350,260],{"class":53},[39,22352,22353],{"class":41,"line":713},[39,22354,3284],{"class":53},[39,22356,22357],{"class":41,"line":718},[39,22358,16195],{"class":45},[39,22360,22361,22363],{"class":41,"line":723},[39,22362,1112],{"class":45},[39,22364,22365],{"class":53}," m_A;\n",[39,22367,22368,22370],{"class":41,"line":729},[39,22369,1112],{"class":45},[39,22371,22372],{"class":53}," m_B;\n",[39,22374,22375,22377],{"class":41,"line":735},[39,22376,1112],{"class":45},[39,22378,22379],{"class":53}," m_C;\n",[39,22381,22382],{"class":41,"line":741},[39,22383,5078],{"class":53},[39,22385,22386],{"class":41,"line":747},[39,22387,122],{"emptyLinePlaceholder":121},[39,22389,22390,22392,22394],{"class":41,"line":753},[39,22391,46],{"class":45},[39,22393,217],{"class":49},[39,22395,7054],{"class":53},[39,22397,22398],{"class":41,"line":758},[39,22399,542],{"class":53},[39,22401,22402],{"class":41,"line":763},[39,22403,122],{"emptyLinePlaceholder":121},[39,22405,22406,22408,22410,22412,22414,22416,22418,22420,22422],{"class":41,"line":772},[39,22407,20404],{"class":53},[39,22409,19],{"class":49},[39,22411,54],{"class":53},[39,22413,1483],{"class":74},[39,22415,63],{"class":53},[39,22417,1345],{"class":74},[39,22419,63],{"class":53},[39,22421,1339],{"class":74},[39,22423,166],{"class":53},[39,22425,22426,22428,22431],{"class":41,"line":777},[39,22427,16839],{"class":53},[39,22429,22430],{"class":49},"PrintPerson",[39,22432,782],{"class":53},[39,22434,22435],{"class":41,"line":785},[39,22436,122],{"emptyLinePlaceholder":121},[39,22438,22439],{"class":41,"line":796},[39,22440,122],{"emptyLinePlaceholder":121},[39,22442,22443,22445,22447,22449],{"class":41,"line":808},[39,22444,295],{"class":49},[39,22446,54],{"class":53},[39,22448,300],{"class":237},[39,22450,166],{"class":53},[39,22452,22453],{"class":41,"line":823},[39,22454,122],{"emptyLinePlaceholder":121},[39,22456,22457,22459,22461],{"class":41,"line":839},[39,22458,95],{"class":45},[39,22460,315],{"class":74},[39,22462,318],{"class":53},[39,22464,22465],{"class":41,"line":845},[39,22466,115],{"class":53},[19,22468,22469,22470,22473,22474],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[350,22471,22472],{},"参数名就是定义的对象属性","，",[350,22475,22476],{},"属性后面的值为有参构造函数的形参",[30,22478,22480],{"className":32,"code":22479,"language":34,"meta":35,"style":35},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[26,22481,22482],{"__ignoreMap":35},[39,22483,22484,22486,22488,22490,22493,22495,22498,22500,22503,22505,22508,22510,22513,22515],{"class":41,"line":42},[39,22485,20019],{"class":49},[39,22487,54],{"class":53},[39,22489,46],{"class":45},[39,22491,22492],{"class":53}," a.",[39,22494,46],{"class":45},[39,22496,22497],{"class":53}," b,",[39,22499,46],{"class":45},[39,22501,22502],{"class":53}," b):",[39,22504,22272],{"class":49},[39,22506,22507],{"class":53},"(a),",[39,22509,22278],{"class":49},[39,22511,22512],{"class":53},"(c),",[39,22514,22284],{"class":49},[39,22516,22517],{"class":53},"(b) {}\n",[476,22519,22521],{"id":22520},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22523,22524],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22526,15606],{},[30,22528,22530],{"className":32,"code":22529,"language":34,"meta":35,"style":35},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[26,22531,22532,22537,22542,22546,22551,22555],{"__ignoreMap":35},[39,22533,22534],{"class":41,"line":42},[39,22535,22536],{"class":53},"A{};\n",[39,22538,22539],{"class":41,"line":92},[39,22540,22541],{"class":53},"B\n",[39,22543,22544],{"class":41,"line":112},[39,22545,542],{"class":53},[39,22547,22548],{"class":41,"line":118},[39,22549,22550],{"class":53},"    A a;\n",[39,22552,22553],{"class":41,"line":125},[39,22554,115],{"class":53},[39,22556,22557],{"class":41,"line":132},[39,22558,22559],{"class":128},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22561,22562],{},"案例",[30,22564,22566],{"className":32,"code":22565,"language":34,"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",[26,22567,22568,22573,22580,22584,22589,22594,22608,22612,22622,22633,22637,22644,22648,22661,22665,22670,22675,22679,22685,22689,22693,22697,22728,22732,22743,22747,22753,22757,22770,22774,22778,22782,22787,22792,22796,22804,22808,22825,22844,22848,22856,22860,22866],{"__ignoreMap":35},[39,22569,22570],{"class":41,"line":42},[39,22571,22572],{"class":128},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[39,22574,22575,22577],{"class":41,"line":92},[39,22576,15667],{"class":45},[39,22578,22579],{"class":49}," Phone\n",[39,22581,22582],{"class":41,"line":112},[39,22583,542],{"class":53},[39,22585,22586],{"class":41,"line":118},[39,22587,22588],{"class":53},"public：\n",[39,22590,22591],{"class":41,"line":125},[39,22592,22593],{"class":128},"    \u002F\u002F 赋值(构造函数)\n",[39,22595,22596,22599,22601,22603,22606],{"class":41,"line":132},[39,22597,22598],{"class":49},"    Phone",[39,22600,54],{"class":53},[39,22602,15890],{"class":49},[39,22604,22605],{"class":59}," pName",[39,22607,574],{"class":53},[39,22609,22610],{"class":41,"line":138},[39,22611,3128],{"class":53},[39,22613,22614,22617,22619],{"class":41,"line":169},[39,22615,22616],{"class":53},"        m_pName",[39,22618,1117],{"class":45},[39,22620,22621],{"class":53},"pName;\n",[39,22623,22624,22626,22628,22631],{"class":41,"line":190},[39,22625,4534],{"class":53},[39,22627,234],{"class":45},[39,22629,22630],{"class":237},"\"Phone的构造函数调用\"",[39,22632,318],{"class":53},[39,22634,22635],{"class":41,"line":202},[39,22636,3284],{"class":53},[39,22638,22639,22642],{"class":41,"line":207},[39,22640,22641],{"class":49},"    ~Phone",[39,22643,537],{"class":53},[39,22645,22646],{"class":41,"line":212},[39,22647,3128],{"class":53},[39,22649,22650,22652,22654,22657,22659],{"class":41,"line":223},[39,22651,4534],{"class":53},[39,22653,234],{"class":45},[39,22655,22656],{"class":237},"\"Phone析构函数调用\"",[39,22658,234],{"class":45},[39,22660,2324],{"class":53},[39,22662,22663],{"class":41,"line":228},[39,22664,3284],{"class":53},[39,22666,22667],{"class":41,"line":263},[39,22668,22669],{"class":128},"    \u002F\u002F\n",[39,22671,22672],{"class":41,"line":287},[39,22673,22674],{"class":53},"    string m_PName;\n",[39,22676,22677],{"class":41,"line":292},[39,22678,5078],{"class":53},[39,22680,22681,22683],{"class":41,"line":305},[39,22682,15667],{"class":45},[39,22684,16144],{"class":49},[39,22686,22687],{"class":41,"line":310},[39,22688,542],{"class":53},[39,22690,22691],{"class":41,"line":321},[39,22692,15689],{"class":45},[39,22694,22695],{"class":41,"line":713},[39,22696,17967],{"class":128},[39,22698,22699,22701,22703,22705,22707,22709,22711,22714,22717,22719,22722,22725],{"class":41,"line":718},[39,22700,19492],{"class":49},[39,22702,54],{"class":53},[39,22704,15890],{"class":49},[39,22706,15893],{"class":59},[39,22708,426],{"class":53},[39,22710,15890],{"class":49},[39,22712,22713],{"class":59}," pname",[39,22715,22716],{"class":53},"):",[39,22718,15983],{"class":49},[39,22720,22721],{"class":53},"(name),m_phone.",[39,22723,22724],{"class":49},"m_PName",[39,22726,22727],{"class":53},"(pname) \n",[39,22729,22730],{"class":41,"line":723},[39,22731,3128],{"class":53},[39,22733,22734,22736,22738,22741],{"class":41,"line":729},[39,22735,4534],{"class":53},[39,22737,234],{"class":45},[39,22739,22740],{"class":237},"\"Person的构造函数调用\"",[39,22742,318],{"class":53},[39,22744,22745],{"class":41,"line":735},[39,22746,3284],{"class":53},[39,22748,22749,22751],{"class":41,"line":741},[39,22750,19525],{"class":49},[39,22752,537],{"class":53},[39,22754,22755],{"class":41,"line":747},[39,22756,3128],{"class":53},[39,22758,22759,22761,22763,22766,22768],{"class":41,"line":753},[39,22760,4534],{"class":53},[39,22762,234],{"class":45},[39,22764,22765],{"class":237},"\"Person析构函数调用\"",[39,22767,234],{"class":45},[39,22769,2324],{"class":53},[39,22771,22772],{"class":41,"line":758},[39,22773,3284],{"class":53},[39,22775,22776],{"class":41,"line":763},[39,22777,8854],{"class":128},[39,22779,22780],{"class":41,"line":772},[39,22781,15865],{"class":53},[39,22783,22784],{"class":41,"line":777},[39,22785,22786],{"class":128},"    \u002F\u002F手机\n",[39,22788,22789],{"class":41,"line":785},[39,22790,22791],{"class":53},"    Phone m_Phone;\n",[39,22793,22794],{"class":41,"line":796},[39,22795,5078],{"class":53},[39,22797,22798,22800,22802],{"class":41,"line":808},[39,22799,370],{"class":45},[39,22801,6666],{"class":49},[39,22803,537],{"class":53},[39,22805,22806],{"class":41,"line":823},[39,22807,542],{"class":53},[39,22809,22810,22812,22814,22816,22818,22820,22823],{"class":41,"line":839},[39,22811,20404],{"class":53},[39,22813,19],{"class":49},[39,22815,54],{"class":53},[39,22817,8990],{"class":237},[39,22819,426],{"class":53},[39,22821,22822],{"class":237},"\"安卓\"",[39,22824,166],{"class":53},[39,22826,22827,22829,22831,22834,22836,22839,22841],{"class":41,"line":845},[39,22828,2673],{"class":53},[39,22830,234],{"class":45},[39,22832,22833],{"class":53},"p.Name",[39,22835,234],{"class":45},[39,22837,22838],{"class":237},"\"拿着：\"",[39,22840,234],{"class":45},[39,22842,22843],{"class":53},"p.m_phone.m_PName;\n",[39,22845,22846],{"class":41,"line":856},[39,22847,115],{"class":53},[39,22849,22850,22852,22854],{"class":41,"line":861},[39,22851,46],{"class":45},[39,22853,217],{"class":49},[39,22855,537],{"class":53},[39,22857,22858],{"class":41,"line":870},[39,22859,542],{"class":53},[39,22861,22862,22864],{"class":41,"line":9084},[39,22863,6711],{"class":49},[39,22865,782],{"class":53},[39,22867,22868],{"class":41,"line":9090},[39,22869,115],{"class":53},[19,22871,10093],{},[30,22873,22875],{"className":32,"code":22874,"language":34,"meta":35,"style":35},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[26,22876,22877,22882],{"__ignoreMap":35},[39,22878,22879],{"class":41,"line":42},[39,22880,22881],{"class":128},"    \u002F\u002F不需要写这个：\n",[39,22883,22884],{"class":41,"line":92},[39,22885,22886],{"class":128},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22888,22889],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[30,22891,22893],{"className":32,"code":22892,"language":34,"meta":35,"style":35},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[26,22894,22895],{"__ignoreMap":35},[39,22896,22897,22899,22902,22904,22907,22910],{"class":41,"line":42},[39,22898,20019],{"class":49},[39,22900,22901],{"class":53},"(string name.string pname):",[39,22903,15983],{"class":49},[39,22905,22906],{"class":53},"(name),",[39,22908,22909],{"class":49},"m_phone",[39,22911,22912],{"class":53},"(pname) {}\n",[19,22914,22915,22916,1117,22919],{},"采用的是隐式转换法，实际为如下：\n",[26,22917,22918],{},"m_phone(pname)",[26,22920,22921],{},"Phone m_phone=pname",[19,22923,22924,22927],{},[350,22925,22926],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22929,22930],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[476,22932,22934],{"id":22933},"_828静态对象","8.2.8静态对象",[19,22936,22937],{},"静态对象在成员对象前static，称为静态对象",[19,22939,22940],{},"静态对象分为两类：",[328,22942,22943],{},[331,22944,22945],{},"静态成员变量",[489,22947,22948,22951,22954],{},[331,22949,22950],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[331,22952,22953],{},"②在编译阶段分配内存",[331,22955,22956],{},"③类内声明，类外初始化",[328,22958,22959],{"start":92},[331,22960,22961],{},"静态成员函数",[489,22963,22964,22967],{},[331,22965,22966],{},"①所有对象共享同一个函数",[331,22968,22969],{},"②静态成员函数只能访问静态成员变量",[22971,22972,22974],"h4",{"id":22973},"_8281静态成员变量","8.2.8.1静态成员变量",[30,22976,22978],{"className":32,"code":22977,"language":34,"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",[26,22979,22980,22986,22996,23002,23006,23010,23015,23020,23025,23033,23037,23041,23045,23053,23057,23061,23066,23079,23083,23091,23095,23101],{"__ignoreMap":35},[39,22981,22982,22984],{"class":41,"line":42},[39,22983,3051],{"class":45},[39,22985,3054],{"class":237},[39,22987,22988,22990,22992,22994],{"class":41,"line":92},[39,22989,3059],{"class":45},[39,22991,3062],{"class":45},[39,22993,3065],{"class":49},[39,22995,318],{"class":53},[39,22997,22998,23000],{"class":41,"line":112},[39,22999,15667],{"class":45},[39,23001,16144],{"class":49},[39,23003,23004],{"class":41,"line":118},[39,23005,542],{"class":53},[39,23007,23008],{"class":41,"line":125},[39,23009,15689],{"class":45},[39,23011,23012],{"class":41,"line":132},[39,23013,23014],{"class":128},"    \u002F\u002F非静态成员变量\n",[39,23016,23017],{"class":41,"line":138},[39,23018,23019],{"class":128},"    \u002F\u002F int m_A;\n",[39,23021,23022],{"class":41,"line":169},[39,23023,23024],{"class":128},"    \u002F\u002F定义静态成员变量\n",[39,23026,23027,23029,23031],{"class":41,"line":190},[39,23028,12082],{"class":45},[39,23030,963],{"class":45},[39,23032,22365],{"class":53},[39,23034,23035],{"class":41,"line":202},[39,23036,122],{"emptyLinePlaceholder":121},[39,23038,23039],{"class":41,"line":207},[39,23040,122],{"emptyLinePlaceholder":121},[39,23042,23043],{"class":41,"line":212},[39,23044,5078],{"class":53},[39,23046,23047,23049,23051],{"class":41,"line":223},[39,23048,370],{"class":45},[39,23050,6666],{"class":49},[39,23052,537],{"class":53},[39,23054,23055],{"class":41,"line":228},[39,23056,542],{"class":53},[39,23058,23059],{"class":41,"line":263},[39,23060,16286],{"class":53},[39,23062,23063],{"class":41,"line":287},[39,23064,23065],{"class":128},"    \u002F\u002F输出类成员变量这块内存\n",[39,23067,23068,23070,23072,23075,23077],{"class":41,"line":292},[39,23069,2673],{"class":53},[39,23071,234],{"class":45},[39,23073,23074],{"class":53},"p.m_A",[39,23076,234],{"class":45},[39,23078,2324],{"class":53},[39,23080,23081],{"class":41,"line":305},[39,23082,115],{"class":53},[39,23084,23085,23087,23089],{"class":41,"line":310},[39,23086,46],{"class":45},[39,23088,217],{"class":49},[39,23090,537],{"class":53},[39,23092,23093],{"class":41,"line":321},[39,23094,542],{"class":53},[39,23096,23097,23099],{"class":41,"line":713},[39,23098,6711],{"class":49},[39,23100,537],{"class":53},[39,23102,23103],{"class":41,"line":718},[39,23104,115],{"class":53},[19,23106,23107],{},"此时输出是报错的：无法解析外部命令",[19,23109,23110],{},"解决这一问题：必须用到类内声明，类外初始化操作",[30,23112,23114],{"className":32,"code":23113,"language":34,"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",[26,23115,23116,23122,23132,23138,23142,23146,23151,23159,23163,23168,23183,23191,23195,23199,23204,23209,23221,23226,23237,23242,23247,23260,23264,23272,23276,23282],{"__ignoreMap":35},[39,23117,23118,23120],{"class":41,"line":42},[39,23119,3051],{"class":45},[39,23121,3054],{"class":237},[39,23123,23124,23126,23128,23130],{"class":41,"line":92},[39,23125,3059],{"class":45},[39,23127,3062],{"class":45},[39,23129,3065],{"class":49},[39,23131,318],{"class":53},[39,23133,23134,23136],{"class":41,"line":112},[39,23135,15667],{"class":45},[39,23137,16144],{"class":49},[39,23139,23140],{"class":41,"line":118},[39,23141,542],{"class":53},[39,23143,23144],{"class":41,"line":125},[39,23145,15689],{"class":45},[39,23147,23148],{"class":41,"line":132},[39,23149,23150],{"class":128},"    \u002F\u002F类内声明\n",[39,23152,23153,23155,23157],{"class":41,"line":138},[39,23154,12082],{"class":45},[39,23156,963],{"class":45},[39,23158,22365],{"class":53},[39,23160,23161],{"class":41,"line":169},[39,23162,5078],{"class":53},[39,23164,23165],{"class":41,"line":190},[39,23166,23167],{"class":128},"\u002F\u002F类外初始化\n",[39,23169,23170,23172,23174,23177,23179,23181],{"class":41,"line":202},[39,23171,46],{"class":45},[39,23173,16542],{"class":49},[39,23175,23176],{"class":53},"::m_A",[39,23178,1117],{"class":45},[39,23180,423],{"class":74},[39,23182,318],{"class":53},[39,23184,23185,23187,23189],{"class":41,"line":207},[39,23186,370],{"class":45},[39,23188,6666],{"class":49},[39,23190,537],{"class":53},[39,23192,23193],{"class":41,"line":212},[39,23194,542],{"class":53},[39,23196,23197],{"class":41,"line":223},[39,23198,16286],{"class":53},[39,23200,23201],{"class":41,"line":228},[39,23202,23203],{"class":128},"    \u002F\u002F访问变量的原内存空间\n",[39,23205,23206],{"class":41,"line":263},[39,23207,23208],{"class":128},"    \u002F\u002F100\n",[39,23210,23211,23213,23215,23217,23219],{"class":41,"line":287},[39,23212,2673],{"class":53},[39,23214,234],{"class":45},[39,23216,23074],{"class":53},[39,23218,234],{"class":45},[39,23220,2324],{"class":53},[39,23222,23223],{"class":41,"line":292},[39,23224,23225],{"class":53},"    Person p2;\n",[39,23227,23228,23231,23233,23235],{"class":41,"line":305},[39,23229,23230],{"class":53},"    p2.m_A",[39,23232,1117],{"class":45},[39,23234,2832],{"class":74},[39,23236,318],{"class":53},[39,23238,23239],{"class":41,"line":310},[39,23240,23241],{"class":128},"    \u002F\u002F继续访问这片空间\n",[39,23243,23244],{"class":41,"line":321},[39,23245,23246],{"class":128},"    \u002F\u002F200\n",[39,23248,23249,23251,23253,23256,23258],{"class":41,"line":713},[39,23250,2673],{"class":53},[39,23252,234],{"class":45},[39,23254,23255],{"class":53},"p2.m_A",[39,23257,234],{"class":45},[39,23259,2324],{"class":53},[39,23261,23262],{"class":41,"line":718},[39,23263,115],{"class":53},[39,23265,23266,23268,23270],{"class":41,"line":723},[39,23267,46],{"class":45},[39,23269,217],{"class":49},[39,23271,537],{"class":53},[39,23273,23274],{"class":41,"line":729},[39,23275,542],{"class":53},[39,23277,23278,23280],{"class":41,"line":735},[39,23279,6711],{"class":49},[39,23281,782],{"class":53},[39,23283,23284],{"class":41,"line":741},[39,23285,115],{"class":53},[19,23287,23288],{},[350,23289,23290],{},"静态变量的访问",[30,23292,23294],{"className":32,"code":23293,"language":34,"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",[26,23295,23296,23302,23312,23318,23322,23326,23330,23338,23342,23347,23355,23359,23363,23377,23392,23400,23404,23409,23414,23419,23424,23436,23441,23446,23460,23477,23481,23489,23493,23499],{"__ignoreMap":35},[39,23297,23298,23300],{"class":41,"line":42},[39,23299,3051],{"class":45},[39,23301,3054],{"class":237},[39,23303,23304,23306,23308,23310],{"class":41,"line":92},[39,23305,3059],{"class":45},[39,23307,3062],{"class":45},[39,23309,3065],{"class":49},[39,23311,318],{"class":53},[39,23313,23314,23316],{"class":41,"line":112},[39,23315,15667],{"class":45},[39,23317,16144],{"class":49},[39,23319,23320],{"class":41,"line":118},[39,23321,542],{"class":53},[39,23323,23324],{"class":41,"line":125},[39,23325,15689],{"class":45},[39,23327,23328],{"class":41,"line":132},[39,23329,23150],{"class":128},[39,23331,23332,23334,23336],{"class":41,"line":138},[39,23333,12082],{"class":45},[39,23335,963],{"class":45},[39,23337,22365],{"class":53},[39,23339,23340],{"class":41,"line":169},[39,23341,16195],{"class":45},[39,23343,23344],{"class":41,"line":190},[39,23345,23346],{"class":128},"    \u002F\u002F静态成员变量也是有访问权限的\n",[39,23348,23349,23351,23353],{"class":41,"line":202},[39,23350,12082],{"class":45},[39,23352,963],{"class":45},[39,23354,22372],{"class":53},[39,23356,23357],{"class":41,"line":207},[39,23358,5078],{"class":53},[39,23360,23361],{"class":41,"line":212},[39,23362,23167],{"class":128},[39,23364,23365,23367,23369,23371,23373,23375],{"class":41,"line":223},[39,23366,46],{"class":45},[39,23368,16542],{"class":49},[39,23370,23176],{"class":53},[39,23372,1117],{"class":45},[39,23374,423],{"class":74},[39,23376,318],{"class":53},[39,23378,23379,23381,23383,23386,23388,23390],{"class":41,"line":228},[39,23380,46],{"class":45},[39,23382,16542],{"class":49},[39,23384,23385],{"class":53},"::m_B",[39,23387,1117],{"class":45},[39,23389,248],{"class":74},[39,23391,318],{"class":53},[39,23393,23394,23396,23398],{"class":41,"line":263},[39,23395,370],{"class":45},[39,23397,6734],{"class":49},[39,23399,537],{"class":53},[39,23401,23402],{"class":41,"line":287},[39,23403,542],{"class":53},[39,23405,23406],{"class":41,"line":292},[39,23407,23408],{"class":128},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[39,23410,23411],{"class":41,"line":305},[39,23412,23413],{"class":128},"    \u002F\u002F静态成员变量有两种访问方式：\n",[39,23415,23416],{"class":41,"line":310},[39,23417,23418],{"class":128},"    \u002F\u002F1.通过对象进行访问\n",[39,23420,23421],{"class":41,"line":321},[39,23422,23423],{"class":53},"    Person p;  \n",[39,23425,23426,23428,23430,23432,23434],{"class":41,"line":713},[39,23427,2673],{"class":53},[39,23429,234],{"class":45},[39,23431,23074],{"class":53},[39,23433,234],{"class":45},[39,23435,2324],{"class":53},[39,23437,23438],{"class":41,"line":718},[39,23439,23440],{"class":128},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[39,23442,23443],{"class":41,"line":723},[39,23444,23445],{"class":128},"    \u002F\u002F2.通过类名进行访问\n",[39,23447,23448,23450,23452,23454,23456,23458],{"class":41,"line":729},[39,23449,2673],{"class":53},[39,23451,234],{"class":45},[39,23453,20019],{"class":49},[39,23455,23176],{"class":53},[39,23457,234],{"class":45},[39,23459,2324],{"class":53},[39,23461,23462,23464,23466,23468,23470,23472,23474],{"class":41,"line":735},[39,23463,2673],{"class":53},[39,23465,234],{"class":45},[39,23467,20019],{"class":49},[39,23469,23385],{"class":53},[39,23471,234],{"class":45},[39,23473,2367],{"class":53},[39,23475,23476],{"class":128}," \u002F\u002F没有访问权限，报错\n",[39,23478,23479],{"class":41,"line":741},[39,23480,115],{"class":53},[39,23482,23483,23485,23487],{"class":41,"line":747},[39,23484,46],{"class":45},[39,23486,217],{"class":49},[39,23488,537],{"class":53},[39,23490,23491],{"class":41,"line":753},[39,23492,542],{"class":53},[39,23494,23495,23497],{"class":41,"line":758},[39,23496,6779],{"class":49},[39,23498,782],{"class":53},[39,23500,23501],{"class":41,"line":763},[39,23502,115],{"class":53},[22971,23504,23506],{"id":23505},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23508,23509],{},"1.静态成员函数定义与访问",[30,23511,23513],{"className":32,"code":23512,"language":34,"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",[26,23514,23515,23521,23525,23529,23534,23545,23549,23563,23567,23571,23579,23583,23588,23593,23597,23605,23610,23620],{"__ignoreMap":35},[39,23516,23517,23519],{"class":41,"line":42},[39,23518,15667],{"class":45},[39,23520,16144],{"class":49},[39,23522,23523],{"class":41,"line":92},[39,23524,542],{"class":53},[39,23526,23527],{"class":41,"line":112},[39,23528,15689],{"class":45},[39,23530,23531],{"class":41,"line":118},[39,23532,23533],{"class":128},"    \u002F\u002F在公共权限下定义静态成员函数\n",[39,23535,23536,23538,23541,23543],{"class":41,"line":125},[39,23537,12082],{"class":45},[39,23539,23540],{"class":45}," void",[39,23542,50],{"class":49},[39,23544,537],{"class":53},[39,23546,23547],{"class":41,"line":132},[39,23548,3128],{"class":53},[39,23550,23551,23554,23556,23559,23561],{"class":41,"line":138},[39,23552,23553],{"class":53},"        coout",[39,23555,234],{"class":45},[39,23557,23558],{"class":237},"\"静态成员函数的调用\"",[39,23560,234],{"class":45},[39,23562,2324],{"class":53},[39,23564,23565],{"class":41,"line":169},[39,23566,3284],{"class":53},[39,23568,23569],{"class":41,"line":190},[39,23570,5078],{"class":53},[39,23572,23573,23575,23577],{"class":41,"line":202},[39,23574,370],{"class":45},[39,23576,6666],{"class":49},[39,23578,537],{"class":53},[39,23580,23581],{"class":41,"line":207},[39,23582,542],{"class":53},[39,23584,23585],{"class":41,"line":212},[39,23586,23587],{"class":128},"    \u002F\u002F静态成员函数的调用方式:\n",[39,23589,23590],{"class":41,"line":223},[39,23591,23592],{"class":128},"    \u002F\u002F1.通过对象访问\n",[39,23594,23595],{"class":41,"line":228},[39,23596,16286],{"class":53},[39,23598,23599,23601,23603],{"class":41,"line":263},[39,23600,16839],{"class":53},[39,23602,12611],{"class":49},[39,23604,782],{"class":53},[39,23606,23607],{"class":41,"line":287},[39,23608,23609],{"class":128},"    \u002F\u002F2.通过类名访问\n",[39,23611,23612,23614,23616,23618],{"class":41,"line":292},[39,23613,19492],{"class":49},[39,23615,18705],{"class":53},[39,23617,12611],{"class":49},[39,23619,782],{"class":53},[39,23621,23622],{"class":41,"line":305},[39,23623,115],{"class":53},[328,23625,23626],{"start":92},[331,23627,23628],{},"静态成员函数只能访问静态成员变量",[30,23630,23632],{"className":32,"code":23631,"language":34,"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",[26,23633,23634,23640,23644,23648,23652,23662,23666,23680,23685,23697,23701,23712,23722,23726,23730,23734,23744,23748,23761,23765,23769,23773,23777,23791,23799,23803,23807,23811,23815,23823,23827,23837,23842,23846,23854,23858,23864],{"__ignoreMap":35},[39,23635,23636,23638],{"class":41,"line":42},[39,23637,15667],{"class":45},[39,23639,16144],{"class":49},[39,23641,23642],{"class":41,"line":92},[39,23643,542],{"class":53},[39,23645,23646],{"class":41,"line":112},[39,23647,15689],{"class":45},[39,23649,23650],{"class":41,"line":118},[39,23651,23533],{"class":128},[39,23653,23654,23656,23658,23660],{"class":41,"line":125},[39,23655,12082],{"class":45},[39,23657,23540],{"class":45},[39,23659,50],{"class":49},[39,23661,537],{"class":53},[39,23663,23664],{"class":41,"line":132},[39,23665,3128],{"class":53},[39,23667,23668,23671,23673,23675,23677],{"class":41,"line":138},[39,23669,23670],{"class":53},"        m_A",[39,23672,1117],{"class":45},[39,23674,278],{"class":74},[39,23676,1324],{"class":53},[39,23678,23679],{"class":128}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[39,23681,23682],{"class":41,"line":169},[39,23683,23684],{"class":128},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[39,23686,23687,23689,23691,23693,23695],{"class":41,"line":190},[39,23688,23553],{"class":53},[39,23690,234],{"class":45},[39,23692,23558],{"class":237},[39,23694,234],{"class":45},[39,23696,2324],{"class":53},[39,23698,23699],{"class":41,"line":202},[39,23700,3284],{"class":53},[39,23702,23703,23705,23707,23709],{"class":41,"line":207},[39,23704,12082],{"class":45},[39,23706,963],{"class":45},[39,23708,16421],{"class":53},[39,23710,23711],{"class":128}," \u002F\u002F静态成员变量\n",[39,23713,23714,23716,23719],{"class":41,"line":212},[39,23715,1112],{"class":45},[39,23717,23718],{"class":53}," m_B;",[39,23720,23721],{"class":128}," \u002F\u002F非静态成员变量\n",[39,23723,23724],{"class":41,"line":223},[39,23725,122],{"emptyLinePlaceholder":121},[39,23727,23728],{"class":41,"line":228},[39,23729,16195],{"class":45},[39,23731,23732],{"class":41,"line":263},[39,23733,23346],{"class":128},[39,23735,23736,23738,23740,23742],{"class":41,"line":287},[39,23737,12082],{"class":45},[39,23739,23540],{"class":45},[39,23741,143],{"class":49},[39,23743,537],{"class":53},[39,23745,23746],{"class":41,"line":292},[39,23747,3128],{"class":53},[39,23749,23750,23752,23754,23757,23759],{"class":41,"line":305},[39,23751,4534],{"class":53},[39,23753,234],{"class":45},[39,23755,23756],{"class":237},"\"这是私有权限下的静态函数调用\"",[39,23758,234],{"class":45},[39,23760,2324],{"class":53},[39,23762,23763],{"class":41,"line":310},[39,23764,3284],{"class":53},[39,23766,23767],{"class":41,"line":321},[39,23768,122],{"emptyLinePlaceholder":121},[39,23770,23771],{"class":41,"line":713},[39,23772,122],{"emptyLinePlaceholder":121},[39,23774,23775],{"class":41,"line":718},[39,23776,5078],{"class":53},[39,23778,23779,23781,23783,23785,23787,23789],{"class":41,"line":723},[39,23780,46],{"class":45},[39,23782,16542],{"class":49},[39,23784,23176],{"class":53},[39,23786,1117],{"class":45},[39,23788,1457],{"class":74},[39,23790,318],{"class":53},[39,23792,23793,23795,23797],{"class":41,"line":729},[39,23794,370],{"class":45},[39,23796,6666],{"class":49},[39,23798,537],{"class":53},[39,23800,23801],{"class":41,"line":735},[39,23802,542],{"class":53},[39,23804,23805],{"class":41,"line":741},[39,23806,23587],{"class":128},[39,23808,23809],{"class":41,"line":747},[39,23810,23592],{"class":128},[39,23812,23813],{"class":41,"line":753},[39,23814,16286],{"class":53},[39,23816,23817,23819,23821],{"class":41,"line":758},[39,23818,16839],{"class":53},[39,23820,12611],{"class":49},[39,23822,782],{"class":53},[39,23824,23825],{"class":41,"line":763},[39,23826,23609],{"class":128},[39,23828,23829,23831,23833,23835],{"class":41,"line":772},[39,23830,19492],{"class":49},[39,23832,18705],{"class":53},[39,23834,12611],{"class":49},[39,23836,782],{"class":53},[39,23838,23839],{"class":41,"line":777},[39,23840,23841],{"class":128},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[39,23843,23844],{"class":41,"line":785},[39,23845,115],{"class":53},[39,23847,23848,23850,23852],{"class":41,"line":796},[39,23849,46],{"class":45},[39,23851,217],{"class":49},[39,23853,537],{"class":53},[39,23855,23856],{"class":41,"line":808},[39,23857,542],{"class":53},[39,23859,23860,23862],{"class":41,"line":823},[39,23861,6711],{"class":49},[39,23863,782],{"class":53},[39,23865,23866],{"class":41,"line":839},[39,23867,115],{"class":53},[476,23869,23871],{"id":23870},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22971,23873,23875],{"id":23874},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23877,23878],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23880,23881],{},"只有非静态成员变量才属于类的对象上",[23883,23884,23886],"h5",{"id":23885},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[30,23888,23890],{"className":32,"code":23889,"language":34,"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",[26,23891,23892,23899,23909,23915,23919,23923,23927,23935,23939,23943,23966,23970,23978,23982,23988],{"__ignoreMap":35},[39,23893,23894,23896],{"class":41,"line":42},[39,23895,3051],{"class":45},[39,23897,23898],{"class":237},"\u003Ciostraem>\n",[39,23900,23901,23903,23905,23907],{"class":41,"line":92},[39,23902,3059],{"class":45},[39,23904,3062],{"class":45},[39,23906,3065],{"class":49},[39,23908,318],{"class":53},[39,23910,23911,23913],{"class":41,"line":112},[39,23912,15667],{"class":45},[39,23914,16144],{"class":49},[39,23916,23917],{"class":41,"line":118},[39,23918,542],{"class":53},[39,23920,23921],{"class":41,"line":125},[39,23922,122],{"emptyLinePlaceholder":121},[39,23924,23925],{"class":41,"line":132},[39,23926,5078],{"class":53},[39,23928,23929,23931,23933],{"class":41,"line":138},[39,23930,370],{"class":45},[39,23932,6666],{"class":49},[39,23934,537],{"class":53},[39,23936,23937],{"class":41,"line":169},[39,23938,542],{"class":53},[39,23940,23941],{"class":41,"line":190},[39,23942,16286],{"class":53},[39,23944,23945,23947,23949,23952,23954,23957,23959,23961,23963],{"class":41,"line":202},[39,23946,2673],{"class":53},[39,23948,234],{"class":45},[39,23950,23951],{"class":237},"\"size of p=\"",[39,23953,234],{"class":45},[39,23955,23956],{"class":49},"sizeoif",[39,23958,7614],{"class":53},[39,23960,234],{"class":45},[39,23962,2367],{"class":53},[39,23964,23965],{"class":128}," \u002F\u002F查看这个空类的占用的内存空间\n",[39,23967,23968],{"class":41,"line":207},[39,23969,115],{"class":53},[39,23971,23972,23974,23976],{"class":41,"line":212},[39,23973,46],{"class":45},[39,23975,217],{"class":49},[39,23977,537],{"class":53},[39,23979,23980],{"class":41,"line":223},[39,23981,542],{"class":53},[39,23983,23984,23986],{"class":41,"line":228},[39,23985,6711],{"class":49},[39,23987,782],{"class":53},[39,23989,23990],{"class":41,"line":263},[39,23991,115],{"class":53},[19,23993,23994],{},"输出结果为：size of p=1",[19,23996,23997],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23999,24000],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23883,24002,24004],{"id":24003},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[30,24006,24008],{"className":32,"code":24007,"language":34,"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",[26,24009,24010,24016,24026,24034,24038,24047,24051,24059,24063,24067,24086,24090,24094,24102,24106,24112],{"__ignoreMap":35},[39,24011,24012,24014],{"class":41,"line":42},[39,24013,3051],{"class":45},[39,24015,3054],{"class":237},[39,24017,24018,24020,24022,24024],{"class":41,"line":92},[39,24019,3059],{"class":45},[39,24021,3062],{"class":45},[39,24023,3065],{"class":49},[39,24025,318],{"class":53},[39,24027,24028,24030,24032],{"class":41,"line":112},[39,24029,15667],{"class":45},[39,24031,16542],{"class":49},[39,24033,3760],{"class":53},[39,24035,24036],{"class":41,"line":118},[39,24037,542],{"class":53},[39,24039,24040,24042,24044],{"class":41,"line":125},[39,24041,1112],{"class":45},[39,24043,16421],{"class":53},[39,24045,24046],{"class":128},"\u002F\u002F非静态成员变量\n",[39,24048,24049],{"class":41,"line":132},[39,24050,5078],{"class":53},[39,24052,24053,24055,24057],{"class":41,"line":138},[39,24054,370],{"class":45},[39,24056,6666],{"class":49},[39,24058,537],{"class":53},[39,24060,24061],{"class":41,"line":169},[39,24062,542],{"class":53},[39,24064,24065],{"class":41,"line":190},[39,24066,16286],{"class":53},[39,24068,24069,24071,24073,24075,24077,24079,24081,24083],{"class":41,"line":202},[39,24070,2673],{"class":53},[39,24072,234],{"class":45},[39,24074,23951],{"class":237},[39,24076,2497],{"class":45},[39,24078,7614],{"class":53},[39,24080,234],{"class":45},[39,24082,2367],{"class":53},[39,24084,24085],{"class":128}," \u002F\u002F查看不是空对象时占用多少内存\n",[39,24087,24088],{"class":41,"line":207},[39,24089,122],{"emptyLinePlaceholder":121},[39,24091,24092],{"class":41,"line":212},[39,24093,115],{"class":53},[39,24095,24096,24098,24100],{"class":41,"line":223},[39,24097,46],{"class":45},[39,24099,217],{"class":49},[39,24101,537],{"class":53},[39,24103,24104],{"class":41,"line":228},[39,24105,542],{"class":53},[39,24107,24108,24110],{"class":41,"line":263},[39,24109,6711],{"class":49},[39,24111,782],{"class":53},[39,24113,24114],{"class":41,"line":287},[39,24115,115],{"class":53},[19,24117,24118],{},"输出结果：size of p=4",[19,24120,24121],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[328,24123,24124],{},[331,24125,24126],{},"如果加上非静态成员变量，Person类修改如下",[30,24128,24130],{"className":32,"code":24129,"language":34,"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",[26,24131,24132,24138,24142,24148,24156,24160,24165],{"__ignoreMap":35},[39,24133,24134,24136],{"class":41,"line":42},[39,24135,15667],{"class":45},[39,24137,16144],{"class":49},[39,24139,24140],{"class":41,"line":92},[39,24141,542],{"class":53},[39,24143,24144,24146],{"class":41,"line":112},[39,24145,1112],{"class":45},[39,24147,22365],{"class":53},[39,24149,24150,24152,24154],{"class":41,"line":118},[39,24151,12082],{"class":45},[39,24153,963],{"class":45},[39,24155,22372],{"class":53},[39,24157,24158],{"class":41,"line":125},[39,24159,5078],{"class":53},[39,24161,24162],{"class":41,"line":132},[39,24163,24164],{"class":128},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[39,24166,24167,24169,24171,24173,24175,24177],{"class":41,"line":138},[39,24168,46],{"class":45},[39,24170,16542],{"class":49},[39,24172,23385],{"class":53},[39,24174,1117],{"class":45},[39,24176,1457],{"class":74},[39,24178,318],{"class":53},[19,24180,24181],{},"输出结果：4",[19,24183,24184],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[328,24186,24187],{"start":92},[331,24188,24189],{},"加上非静态成员函数",[30,24191,24193],{"className":32,"code":24192,"language":34,"meta":35,"style":35},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[26,24194,24195,24202,24206,24212,24220,24224,24228,24232],{"__ignoreMap":35},[39,24196,24197,24199],{"class":41,"line":42},[39,24198,15667],{"class":45},[39,24200,24201],{"class":49},"  Person\n",[39,24203,24204],{"class":41,"line":92},[39,24205,542],{"class":53},[39,24207,24208,24210],{"class":41,"line":112},[39,24209,1112],{"class":45},[39,24211,22365],{"class":53},[39,24213,24214,24216,24218],{"class":41,"line":118},[39,24215,15882],{"class":45},[39,24217,50],{"class":49},[39,24219,537],{"class":53},[39,24221,24222],{"class":41,"line":125},[39,24223,3128],{"class":53},[39,24225,24226],{"class":41,"line":132},[39,24227,122],{"emptyLinePlaceholder":121},[39,24229,24230],{"class":41,"line":138},[39,24231,3284],{"class":53},[39,24233,24234],{"class":41,"line":169},[39,24235,5078],{"class":53},[19,24237,24238],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[328,24240,24241],{"start":112},[331,24242,24243],{},"加上静态成员函数",[30,24245,24247],{"className":32,"code":24246,"language":34,"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",[26,24248,24249,24255,24259,24265,24273,24277,24281,24285,24296,24300,24304,24308],{"__ignoreMap":35},[39,24250,24251,24253],{"class":41,"line":42},[39,24252,15667],{"class":45},[39,24254,24201],{"class":49},[39,24256,24257],{"class":41,"line":92},[39,24258,542],{"class":53},[39,24260,24261,24263],{"class":41,"line":112},[39,24262,1112],{"class":45},[39,24264,22365],{"class":53},[39,24266,24267,24269,24271],{"class":41,"line":118},[39,24268,15882],{"class":45},[39,24270,50],{"class":49},[39,24272,537],{"class":53},[39,24274,24275],{"class":41,"line":125},[39,24276,3128],{"class":53},[39,24278,24279],{"class":41,"line":132},[39,24280,122],{"emptyLinePlaceholder":121},[39,24282,24283],{"class":41,"line":138},[39,24284,3284],{"class":53},[39,24286,24287,24289,24291,24294],{"class":41,"line":169},[39,24288,12082],{"class":45},[39,24290,23540],{"class":45},[39,24292,24293],{"class":49}," func1",[39,24295,537],{"class":53},[39,24297,24298],{"class":41,"line":190},[39,24299,3128],{"class":53},[39,24301,24302],{"class":41,"line":202},[39,24303,122],{"emptyLinePlaceholder":121},[39,24305,24306],{"class":41,"line":207},[39,24307,3284],{"class":53},[39,24309,24310],{"class":41,"line":212},[39,24311,5078],{"class":53},[19,24313,24181],{},[19,24315,24316],{},"解释：静态成员函数也不属于类上",[1192,24318,8748],{},{"title":35,"searchDepth":92,"depth":92,"links":24320},[24321,24327],{"id":15618,"depth":92,"text":15619,"children":24322},[24323,24324,24325,24326],{"id":15622,"depth":112,"text":15623},{"id":16347,"depth":112,"text":16348},{"id":16519,"depth":112,"text":16520},{"id":16978,"depth":112,"text":16979},{"id":19350,"depth":92,"text":19351,"children":24328},[24329,24330,24331,24332,24333,24334,24335,24336,24337],{"id":19362,"depth":112,"text":19363},{"id":19655,"depth":112,"text":19656},{"id":20146,"depth":112,"text":20147},{"id":21243,"depth":112,"text":21244},{"id":21666,"depth":112,"text":21667},{"id":22145,"depth":112,"text":22146},{"id":22520,"depth":112,"text":22521},{"id":22933,"depth":112,"text":22934},{"id":23870,"depth":112,"text":23871},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15583,"description":24338},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24345,"title":34,"body":24346,"description":24350,"extension":1203,"meta":24351,"navigation":121,"path":24353,"seo":24354,"stem":24355,"__hash__":24356},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24347,"toc":24348},[],{"title":35,"searchDepth":92,"depth":92,"links":24349},[],null,{"category":24352},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":34,"description":24350},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24358,"title":24359,"body":24360,"description":35,"extension":1203,"meta":24951,"navigation":121,"path":24952,"seo":24953,"stem":24954,"__hash__":24955},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24361,"toc":24933},[24362,24365,24369,24372,24375,24378,24396,24401,24404,24407,24410,24413,24418,24421,24426,24429,24432,24436,24439,24442,24448,24451,24469,24473,24477,24480,24485,24488,24492,24495,24508,24511,24515,24518,24521,24524,24549,24552,24561,24572,24587,24619,24623,24630,24638,24642,24645,24648,24653,24657,24660,24663,24668,24671,24675,24678,24681,24686,24689,24693,24698,24702,24769,24773,24776,24779,24782,24785,24788,24794,24815,24818,24832,24841,24845,24848,24851,24856,24859,24864,24869,24872,24875,24880,24885,24888,24893,24898,24901,24906,24911,24914,24917,24922,24925,24930],[10,24363,24359],{"id":24364},"_1强化学习基本认识",[14,24366,24368],{"id":24367},"_11什么是强化学习","1.1.什么是强化学习",[19,24370,24371],{},"强化学习有两部分组成：智能体和环境；",[19,24373,24374],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,24376,24377],{},"强化学习与监督学习的区别:",[328,24379,24380,24383,24386,24389],{},[331,24381,24382],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[331,24384,24385],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[331,24387,24388],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[331,24390,24391,24392,24395],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[350,24393,24394],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,24397,24398],{},[2585,24399],{"alt":35,"src":24400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,24402,24403],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,24405,24406],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,24408,24409],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,24411,24412],{},"获取奖励",[19,24414,24415],{},[2585,24416],{"alt":35,"src":24417},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,24419,24420],{},"强化学习可以分成标准强化学习和深度强化学习",[19,24422,24423],{},[2585,24424],{"alt":35,"src":24425},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,24427,24428],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,24430,24431],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24433,24435],{"id":24434},"_12强化学习应用场景","1.2.强化学习应用场景",[19,24437,24438],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,24440,24441],{},"具身智能中的应用",[19,24443,24444,24447],{},[350,24445,24446],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,24449,24450],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,24452,24453,24454,24457,24458,24461,24462,24465,24466],{},"机器人是",[350,24455,24456],{},"躯体","，深度学习是",[350,24459,24460],{},"神经元****网络","，VLA是",[350,24463,24464],{},"通用的行为逻辑","，而强化学习是",[350,24467,24468],{},"教练",[14,24470,24472],{"id":24471},"_13序列决策","1.3.序列决策",[476,24474,24476],{"id":24475},"_131智能体与环境","1.3.1.智能体与环境",[19,24478,24479],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,24481,24482],{},[2585,24483],{"alt":35,"src":24484},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,24486,24487],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[476,24489,24491],{"id":24490},"_132奖励","1.3.2.奖励",[19,24493,24494],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,24496,24497,24498,24507],{},"取某个策略的表现如何。强化学习的目的就是",[350,24499,24500,24501,24506],{},"最大化",[350,24502,24503],{},[350,24504,24505],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,24509,24510],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[476,24512,24514],{"id":24513},"_133序列决策","1.3.3.序列决策",[19,24516,24517],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,24519,24520],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,24522,24523],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,24525,24526,24530,24531,24533,24534,24536,24537,24539,24540,352,24543,352,24546],{},[24527,24528,24529],"em",{},"Ht"," = ",[24527,24532,1857],{},"1*, a",[24527,24535,1483],{},", r",[24527,24538,1483],{},", . . . ,* ",[24527,24541,24542],{},"ot",[24527,24544,24545],{},", at ,",[24527,24547,24548],{},"rt",[19,24550,24551],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,24553,24554,24530,24557,2772,24559,1692],{},[24527,24555,24556],{},"st",[24527,24558,1321],{},[24527,24560,24529],{},[19,24562,24563,24564,24567,24568,24571],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[350,24565,24566],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[350,24569,24570],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,24573,24574,24575,24578,24579,24582,24583,24586],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[350,24576,24577],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[350,24580,24581],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24527,24584,24585],{},"S, A, T, R, Ω, O, γ",")。",[19,24588,24589,24590,24592,24593,24595,24596,54,24598,24601,24602,24604,24605,54,24608,24611,24612,24614,24615,24618],{},"其中 ",[24527,24591,1950],{}," 表示状态空间，为隐变量，",[24527,24594,1498],{}," 为动作空间，",[24527,24597,1974],{},[24527,24599,24600],{},"s ′ |s, a",") 为状态转移概率，",[24527,24603,1925],{}," 为奖励函数，",[24527,24606,24607],{},"Ω",[24527,24609,24610],{},"o|s, a",") 为观测概率，",[24527,24613,1851],{}," 为观测空间，",[24527,24616,24617],{},"γ"," 为折扣因子。",[14,24620,24622],{"id":24621},"_14动作空间","1.4.动作空间",[19,24624,24625,24626,24629],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[350,24627,24628],{},"动作空间"," ，动作空间分为:",[328,24631,24632,24635],{},[331,24633,24634],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[331,24636,24637],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24639,24641],{"id":24640},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,24643,24644],{},"由策略、价值函数、模型三部分组成",[19,24646,24647],{},"这三者组成马尔可夫决策过程",[19,24649,24650],{},[2585,24651],{"alt":35,"src":24652},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[476,24654,24656],{"id":24655},"_151策略","1.5.1.策略",[19,24658,24659],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,24661,24662],{},"策略可分为两种：",[19,24664,24665],{},[2585,24666],{"alt":35,"src":24667},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,24669,24670],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[476,24672,24674],{"id":24673},"_152价值函数","1.5.2.价值函数",[19,24676,24677],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,24679,24680],{},"价值函数中有一个折扣因子，类似于存款利息",[19,24682,24683],{},[2585,24684],{"alt":35,"src":24685},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,24687,24688],{},"进入某个状态采取的最优动作可以通过Q函数得到",[476,24690,24692],{"id":24691},"_153模型","1.5.3.模型",[19,24694,24695],{},[2585,24696],{"alt":35,"src":24697},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24699,24701],{"id":24700},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1404,24703,24704,24715],{},[1407,24705,24706],{},[1410,24707,24708,24712],{},[1413,24709,24711],{"align":24710},"left","类型",[1413,24713,24714],{"align":24710},"特点",[1450,24716,24717,24727,24737,24747,24759],{},[1410,24718,24719,24724],{},[1455,24720,24721],{"align":24710},[350,24722,24723],{},"基于价值的智能体",[1455,24725,24726],{"align":24710},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1410,24728,24729,24734],{},[1455,24730,24731],{"align":24710},[350,24732,24733],{},"基于策略的智能体",[1455,24735,24736],{"align":24710},"直接学习策略，没有学习价值函数",[1410,24738,24739,24744],{},[1455,24740,24741],{"align":24710},[350,24742,24743],{},"演员-评论员智能体",[1455,24745,24746],{"align":24710},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1410,24748,24749,24754],{},[1455,24750,24751],{"align":24710},[350,24752,24753],{},"有模型强化学习智能体",[1455,24755,24756],{"align":24710},[2585,24757],{"alt":35,"src":24758},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1410,24760,24761,24766],{},[1455,24762,24763],{"align":24710},[350,24764,24765],{},"免模型强化学习智能体",[1455,24767,24768],{"align":24710},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24770,24772],{"id":24771},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24774,24775],{},"学习和规划是序列决策的两个基本问题",[19,24777,24778],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24780,24781],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24783,24784],{},"强化学习用到的库：Gym",[19,24786,24787],{},"Gym可以检验强化学习算法的优劣",[19,24789,24790,24793],{},[350,24791,24792],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[30,24795,24799],{"className":24796,"code":24797,"language":24798,"meta":35,"style":35},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[26,24800,24801],{"__ignoreMap":35},[39,24802,24803,24806,24809,24812],{"class":41,"line":42},[39,24804,24805],{"class":49},"pip",[39,24807,24808],{"class":237}," install",[39,24810,24811],{"class":237}," gym==",[39,24813,24814],{"class":74},"0.25.2\n",[19,24816,24817],{},"显示图形界面需要",[30,24819,24821],{"className":24796,"code":24820,"language":24798,"meta":35,"style":35},"pip install pygame\n",[26,24822,24823],{"__ignoreMap":35},[39,24824,24825,24827,24829],{"class":41,"line":42},[39,24826,24805],{"class":49},[39,24828,24808],{"class":237},[39,24830,24831],{"class":237}," pygame\n",[19,24833,24834,24835],{},"有关Gym库的相关文档介绍：",[922,24836,24840],{"href":24837,"rel":24838},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24839],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24842,24844],{"id":24843},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24846,24847],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24849,24850],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24852,24853],{},[2585,24854],{"alt":35,"src":24855},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24857,24858],{},"折扣率需要自己来设定",[19,24860,24861],{},[2585,24862],{"alt":35,"src":24863},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[328,24865,24866],{},[331,24867,24868],{},"状态转移函数：",[19,24870,24871],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24873,24874],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24876,24877],{},[2585,24878],{"alt":35,"src":24879},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[328,24881,24882],{"start":92},[331,24883,24884],{},"动作价值函数：",[19,24886,24887],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24889,24890],{},[2585,24891],{"alt":35,"src":24892},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[328,24894,24895],{"start":112},[331,24896,24897],{},"最优动作价值函数：",[19,24899,24900],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[19,24902,24903],{},[2585,24904],{"alt":35,"src":24905},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[328,24907,24908],{"start":118},[331,24909,24910],{},"状态价值函数:",[19,24912,24913],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24915,24916],{},"它衡量的是“一个具体动作”的长期价值",[19,24918,24919],{},[2585,24920],{"alt":35,"src":24921},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24923,24924],{},"几个价值函数之间的比较：",[19,24926,24927],{},[2585,24928],{"alt":35,"src":24929},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1192,24931,24932],{},"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":92,"depth":92,"links":24934},[24935,24936,24937,24942,24943,24948,24949,24950],{"id":24367,"depth":92,"text":24368},{"id":24434,"depth":92,"text":24435},{"id":24471,"depth":92,"text":24472,"children":24938},[24939,24940,24941],{"id":24475,"depth":112,"text":24476},{"id":24490,"depth":112,"text":24491},{"id":24513,"depth":112,"text":24514},{"id":24621,"depth":92,"text":24622},{"id":24640,"depth":92,"text":24641,"children":24944},[24945,24946,24947],{"id":24655,"depth":112,"text":24656},{"id":24673,"depth":112,"text":24674},{"id":24691,"depth":112,"text":24692},{"id":24700,"depth":92,"text":24701},{"id":24771,"depth":92,"text":24772},{"id":24843,"depth":92,"text":24844},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24359,"description":35},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24957,"title":24958,"body":24959,"description":24966,"extension":1203,"meta":24977,"navigation":121,"path":24978,"seo":24979,"stem":24980,"__hash__":24981},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24960,"toc":24975},[24961,24964,24967,24972],[10,24962,24958],{"id":24963},"_2马尔可夫决策过程",[19,24965,24966],{},"这是强化学习的基本框架",[19,24968,24969],{},[2585,24970],{"alt":35,"src":24971},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24973,24974],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":35,"searchDepth":92,"depth":92,"links":24976},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24958,"description":24966},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24983,"title":24984,"body":24985,"description":35,"extension":1203,"meta":25101,"navigation":121,"path":25102,"seo":25103,"stem":25104,"__hash__":25105},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24986,"toc":25096},[24987,24990,24994,24997,25002,25007,25010,25015,25018,25023,25026,25030,25035,25038,25043,25048,25053,25056,25060,25065,25068,25073,25078,25083,25088,25091],[10,24988,24984],{"id":24989},"_3动作价值函数",[14,24991,24993],{"id":24992},"_31dqn","3.1.DQN",[19,24995,24996],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24998,24999],{},[2585,25000],{"alt":35,"src":25001},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25003,25004],{},[2585,25005],{"alt":35,"src":25006},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25008,25009],{},"DQN算法的描述：",[19,25011,25012],{},[2585,25013],{"alt":35,"src":25014},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25016,25017],{},"这里的Dense指的是全连接层",[19,25019,25020],{},[2585,25021],{"alt":35,"src":25022},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25024,25025],{},"当前观测的状态为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,25027,25029],{"id":25028},"_32dqn的举例","3.2.DQN的举例",[19,25031,25032],{},[2585,25033],{"alt":35,"src":25034},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25036,25037],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25039,25040],{},[2585,25041],{"alt":35,"src":25042},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25044,25045],{},[2585,25046],{"alt":35,"src":25047},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25049,25050],{},[2585,25051],{"alt":35,"src":25052},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25054,25055],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25057,25059],{"id":25058},"_33td算法","3.3.TD算法",[19,25061,25062],{},[2585,25063],{"alt":35,"src":25064},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25066,25067],{},"强化学习TD算法公式的粗略解释：",[19,25069,25070],{},[2585,25071],{"alt":35,"src":25072},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25074,25075],{},[2585,25076],{"alt":35,"src":25077},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25079,25080],{},[2585,25081],{"alt":35,"src":25082},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25084,25085],{},[2585,25086],{"alt":35,"src":25087},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25089,25090],{},"TD算法总结：",[19,25092,25093],{},[2585,25094],{"alt":35,"src":25095},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":35,"searchDepth":92,"depth":92,"links":25097},[25098,25099,25100],{"id":24992,"depth":92,"text":24993},{"id":25028,"depth":92,"text":25029},{"id":25058,"depth":92,"text":25059},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24984,"description":35},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25107,"title":25108,"body":25109,"description":35,"extension":1203,"meta":25342,"navigation":121,"path":25343,"seo":25344,"stem":25345,"__hash__":25346},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25110,"toc":25338},[25111,25114,25118,25121,25124,25129,25134,25137,25142,25147,25150,25155,25158,25163,25166,25171,25174,25179,25182,25187,25192,25195,25200,25203,25206,25211,25214,25219,25224,25228,25231,25234,25239,25244,25247,25252,25257,25260,25265,25268,25271,25276,25279,25284,25287,25292,25297,25300,25305,25310,25313,25318,25321,25326,25329],[10,25112,25108],{"id":25113},"_4策略学习",[14,25115,25117],{"id":25116},"_41概念描述","4.1.概念描述",[19,25119,25120],{},"用神经网络（策略网络）近似策略函数",[19,25122,25123],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25125,25126],{},[2585,25127],{"alt":35,"src":25128},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25130,25131],{},[2585,25132],{"alt":35,"src":25133},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25135,25136],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25138,25139],{},[2585,25140],{"alt":35,"src":25141},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25143,25144],{},[2585,25145],{"alt":35,"src":25146},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25148,25149],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25151,25152],{},[2585,25153],{"alt":35,"src":25154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25156,25157],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25159,25160],{},[2585,25161],{"alt":35,"src":25162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25164,25165],{},"改进theta要用到策略梯度算法",[19,25167,25168],{},[2585,25169],{"alt":35,"src":25170},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25172,25173],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25175,25176],{},[2585,25177],{"alt":35,"src":25178},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25180,25181],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,25183,25184],{},[2585,25185],{"alt":35,"src":25186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,25188,25189],{},[2585,25190],{"alt":35,"src":25191},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,25193,25194],{},"梯度公式总结：",[19,25196,25197],{},[2585,25198],{"alt":35,"src":25199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,25201,25202],{},"两个公式的分别应用场景：",[19,25204,25205],{},"对于离散的动作：",[19,25207,25208],{},[2585,25209],{"alt":35,"src":25210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,25212,25213],{},"对于连续的动作：",[19,25215,25216],{},[2585,25217],{"alt":35,"src":25218},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,25220,25221],{},[2585,25222],{"alt":35,"src":25223},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25225,25227],{"id":25226},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,25229,25230],{},"使用蒙特卡洛来近似计算策略梯度",[19,25232,25233],{},"蒙特卡洛法的解释如下：",[19,25235,25236],{},[2585,25237],{"alt":35,"src":25238},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,25240,25241],{},[2585,25242],{"alt":35,"src":25243},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,25245,25246],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[328,25248,25249],{},[331,25250,25251],{},"方法一：reinforce算法",[19,25253,25254],{},[2585,25255],{"alt":35,"src":25256},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,25258,25259],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[328,25261,25262],{"start":92},[331,25263,25264],{},"方法二：actor-critic算法",[19,25266,25267],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25269,25270],{},"两个网络的构建：",[19,25272,25273],{},[2585,25274],{"alt":35,"src":25275},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25277,25278],{},"actor网路：",[19,25280,25281],{},[2585,25282],{"alt":35,"src":25283},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25285,25286],{},"critic网络",[19,25288,25289],{},[2585,25290],{"alt":35,"src":25291},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[328,25293,25294],{"start":112},[331,25295,25296],{},"网络的训练",[19,25298,25299],{},"网络描述",[19,25301,25302],{},[2585,25303],{"alt":35,"src":25304},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25306,25307],{},[2585,25308],{"alt":35,"src":25309},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25311,25312],{},"TD算法更新梯度：",[19,25314,25315],{},[2585,25316],{"alt":35,"src":25317},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,25319,25320],{},"策略网络更新梯度：",[19,25322,25323],{},[2585,25324],{"alt":35,"src":25325},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,25327,25328],{},"训练整个流程的具体描述：",[19,25330,25331,25334,25335],{},[2585,25332],{"alt":35,"src":25333},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[2585,25336],{"alt":35,"src":25337},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":35,"searchDepth":92,"depth":92,"links":25339},[25340,25341],{"id":25116,"depth":92,"text":25117},{"id":25226,"depth":92,"text":25227},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25108,"description":35},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25348,"title":25349,"body":25350,"description":25357,"extension":1203,"meta":25407,"navigation":121,"path":25408,"seo":25409,"stem":25410,"__hash__":25411},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25351,"toc":25403},[25352,25355,25358,25362,25365,25370,25374,25377,25382,25385,25390,25395,25398],[10,25353,25349],{"id":25354},"_5alphago算法",[19,25356,25357],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25359,25361],{"id":25360},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,25363,25364],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,25366,25367],{},[2585,25368],{"alt":35,"src":25369},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25371,25373],{"id":25372},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,25375,25376],{},"采用强化学习的方式训练策略网络",[19,25378,25379],{},[2585,25380],{"alt":35,"src":25381},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,25383,25384],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,25386,25387],{},[2585,25388],{"alt":35,"src":25389},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,25391,25392],{},[2585,25393],{"alt":35,"src":25394},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,25396,25397],{},"强化学习训练策略网络的总结：",[19,25399,25400],{},[2585,25401],{"alt":35,"src":25402},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":35,"searchDepth":92,"depth":92,"links":25404},[25405,25406],{"id":25360,"depth":92,"text":25361},{"id":25372,"depth":92,"text":25373},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25349,"description":25357},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25413,"title":25414,"body":25415,"description":25422,"extension":1203,"meta":25425,"navigation":121,"path":25426,"seo":25427,"stem":25428,"__hash__":25429},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25416,"toc":25423},[25417,25420],[10,25418,25414],{"id":25419},"_6价值网络",[19,25421,25422],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":35,"searchDepth":92,"depth":92,"links":25424},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25414,"description":25422},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25431,"title":25432,"body":25433,"description":25437,"extension":1203,"meta":25438,"navigation":121,"path":25439,"seo":25440,"stem":25441,"__hash__":25442},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25434,"toc":25435},[],{"title":35,"searchDepth":92,"depth":92,"links":25436},[],"记录自己的强化学习笔记。",{"category":24352},"\u002Fwiki\u002F2025-12-04",{"title":25432,"description":25437},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25444,"title":25445,"body":25446,"description":24350,"extension":1203,"meta":25485,"navigation":121,"path":25486,"seo":25487,"stem":25488,"__hash__":25489},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25447,"toc":25483},[25448,25451,25454,25460,25463,25469,25472,25477,25480],[10,25449,25445],{"id":25450},"_1-项目概览与官方资源",[19,25452,25453],{},"官方文档：",[19,25455,25456],{},[922,25457,25458],{"href":25458,"rel":25459},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24839],[19,25461,25462],{},"官方代码仓库：",[19,25464,25465],{},[922,25466,25467],{"href":25467,"rel":25468},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24839],[19,25470,25471],{},"复现大体流程：",[19,25473,25474],{},[2585,25475],{"alt":35,"src":25476},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,25478,25479],{},"本教程的目标是打通这条链路：",[19,25481,25482],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":35,"searchDepth":92,"depth":92,"links":25484},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25445,"description":24350},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25491,"title":25492,"body":25493,"description":24350,"extension":1203,"meta":25609,"navigation":121,"path":25610,"seo":25611,"stem":25612,"__hash__":25613},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25494,"toc":25604},[25495,25498,25502,25505,25512,25516,25519,25528,25538,25542,25572,25575,25601],[10,25496,25492],{"id":25497},"_2-环境准备与设备连接",[14,25499,25501],{"id":25500},"_21-系统与环境","2.1 系统与环境",[19,25503,25504],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,25506,25507,25508,25511],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[26,25509,25510],{},"lerobot"," 依赖。",[14,25513,25515],{"id":25514},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,25517,25518],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[30,25520,25522],{"className":24796,"code":25521,"language":24798,"meta":35,"style":35},"lerobot-find-out\n",[26,25523,25524],{"__ignoreMap":35},[39,25525,25526],{"class":41,"line":42},[39,25527,25521],{"class":49},[19,25529,25530,25531,1478,25534,25537],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[26,25532,25533],{},"\u002Fdev\u002FttyACM0",[26,25535,25536],{},"\u002Fdev\u002FttyACM1","）。",[14,25539,25541],{"id":25540},"_23-串口授权","2.3 串口授权",[30,25543,25545],{"className":24796,"code":25544,"language":24798,"meta":35,"style":35},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[26,25546,25547,25561],{"__ignoreMap":35},[39,25548,25549,25552,25555,25558],{"class":41,"line":42},[39,25550,25551],{"class":49},"sudo",[39,25553,25554],{"class":237}," chmod",[39,25556,25557],{"class":74}," 666",[39,25559,25560],{"class":237}," \u002Fdev\u002FttyACM0\n",[39,25562,25563,25565,25567,25569],{"class":41,"line":92},[39,25564,25551],{"class":49},[39,25566,25554],{"class":237},[39,25568,25557],{"class":74},[39,25570,25571],{"class":237}," \u002Fdev\u002FttyACM1\n",[19,25573,25574],{},"说明：",[489,25576,25577,25582,25588,25598],{},[331,25578,25579,25581],{},[26,25580,25551],{},"：以 root 权限执行命令。",[331,25583,25584,25587],{},[26,25585,25586],{},"chmod","：修改设备节点权限。",[331,25589,25590,25593,25594,25597],{},[26,25591,25592],{},"666","：",[26,25595,25596],{},"rw-rw-rw-","，所有用户可读写。",[331,25599,25600],{},"串口号必须替换为你机器上的真实端口。",[1192,25602,25603],{},"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":92,"depth":92,"links":25605},[25606,25607,25608],{"id":25500,"depth":92,"text":25501},{"id":25514,"depth":92,"text":25515},{"id":25540,"depth":92,"text":25541},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25492,"description":24350},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25615,"title":25616,"body":25617,"description":24350,"extension":1203,"meta":25778,"navigation":121,"path":25779,"seo":25780,"stem":25781,"__hash__":25782},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25618,"toc":25774},[25619,25623,25627,25633,25636,25693,25696,25700,25703,25771],[10,25620,25622],{"id":25621},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25624,25626],{"id":25625},"_31-配置电机-id","3.1 配置电机 ID",[19,25628,25629,25630,25632],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[26,25631,1483],{},"，需要改成机械臂链路里不冲突的编号。",[19,25634,25635],{},"方式一：用 LeRobot 命令逐步写入。",[30,25637,25639],{"className":24796,"code":25638,"language":24798,"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",[26,25640,25641,25646,25654,25661,25666,25670,25675,25681,25688],{"__ignoreMap":35},[39,25642,25643],{"class":41,"line":42},[39,25644,25645],{"class":128},"# 主臂舵机配置 ID\n",[39,25647,25648,25651],{"class":41,"line":92},[39,25649,25650],{"class":49},"lerobot-setup-motors",[39,25652,25653],{"class":74}," \\\n",[39,25655,25656,25659],{"class":41,"line":112},[39,25657,25658],{"class":74},"  --teleop.type=so101_leader",[39,25660,25653],{"class":74},[39,25662,25663],{"class":41,"line":118},[39,25664,25665],{"class":74},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[39,25667,25668],{"class":41,"line":125},[39,25669,122],{"emptyLinePlaceholder":121},[39,25671,25672],{"class":41,"line":132},[39,25673,25674],{"class":128},"# 从臂舵机配置 ID\n",[39,25676,25677,25679],{"class":41,"line":138},[39,25678,25650],{"class":49},[39,25680,25653],{"class":74},[39,25682,25683,25686],{"class":41,"line":169},[39,25684,25685],{"class":74},"  --robot.type=so101_follower",[39,25687,25653],{"class":74},[39,25689,25690],{"class":41,"line":190},[39,25691,25692],{"class":74},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,25694,25695],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25697,25699],{"id":25698},"_32-机械臂校准","3.2 机械臂校准",[19,25701,25702],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[30,25704,25706],{"className":24796,"code":25705,"language":24798,"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",[26,25707,25708,25713,25720,25726,25733,25738,25742,25747,25753,25759,25766],{"__ignoreMap":35},[39,25709,25710],{"class":41,"line":42},[39,25711,25712],{"class":128},"# 主臂校准\n",[39,25714,25715,25718],{"class":41,"line":92},[39,25716,25717],{"class":49},"lerobot-calibrate",[39,25719,25653],{"class":74},[39,25721,25722,25724],{"class":41,"line":112},[39,25723,25658],{"class":74},[39,25725,25653],{"class":74},[39,25727,25728,25731],{"class":41,"line":118},[39,25729,25730],{"class":74},"  --teleop.port=\u002Fdev\u002FttyACM0",[39,25732,25653],{"class":74},[39,25734,25735],{"class":41,"line":125},[39,25736,25737],{"class":74},"  --teleop.id=my_awesome_leader_arm\n",[39,25739,25740],{"class":41,"line":132},[39,25741,122],{"emptyLinePlaceholder":121},[39,25743,25744],{"class":41,"line":138},[39,25745,25746],{"class":128},"# 从臂校准\n",[39,25748,25749,25751],{"class":41,"line":169},[39,25750,25717],{"class":49},[39,25752,25653],{"class":74},[39,25754,25755,25757],{"class":41,"line":190},[39,25756,25685],{"class":74},[39,25758,25653],{"class":74},[39,25760,25761,25764],{"class":41,"line":202},[39,25762,25763],{"class":74},"  --robot.port=\u002Fdev\u002FttyACM1",[39,25765,25653],{"class":74},[39,25767,25768],{"class":41,"line":207},[39,25769,25770],{"class":74},"  --robot.id=my_awesome_follower_arm\n",[1192,25772,25773],{},"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":92,"depth":92,"links":25775},[25776,25777],{"id":25625,"depth":92,"text":25626},{"id":25698,"depth":92,"text":25699},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25616,"description":24350},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25784,"title":25785,"body":25786,"description":24350,"extension":1203,"meta":25977,"navigation":121,"path":25978,"seo":25979,"stem":25980,"__hash__":25981},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25787,"toc":25973},[25788,25791,25795,25842,25846,25859,25922,25925,25970],[10,25789,25785],{"id":25790},"_4-遥操与相机接入",[14,25792,25794],{"id":25793},"_41-不带相机遥操","4.1 不带相机遥操",[30,25796,25798],{"className":24796,"code":25797,"language":24798,"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",[26,25799,25800,25807,25813,25819,25826,25832,25838],{"__ignoreMap":35},[39,25801,25802,25805],{"class":41,"line":42},[39,25803,25804],{"class":49},"lerobot-teleoperate",[39,25806,25653],{"class":74},[39,25808,25809,25811],{"class":41,"line":92},[39,25810,25685],{"class":74},[39,25812,25653],{"class":74},[39,25814,25815,25817],{"class":41,"line":112},[39,25816,25763],{"class":74},[39,25818,25653],{"class":74},[39,25820,25821,25824],{"class":41,"line":118},[39,25822,25823],{"class":74},"  --robot.id=my_awesome_follower_arm",[39,25825,25653],{"class":74},[39,25827,25828,25830],{"class":41,"line":125},[39,25829,25658],{"class":74},[39,25831,25653],{"class":74},[39,25833,25834,25836],{"class":41,"line":132},[39,25835,25730],{"class":74},[39,25837,25653],{"class":74},[39,25839,25840],{"class":41,"line":138},[39,25841,25737],{"class":74},[14,25843,25845],{"id":25844},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[30,25847,25849],{"className":24796,"code":25848,"language":24798,"meta":35,"style":35},"lerobot-find-cameras opencv\n",[26,25850,25851],{"__ignoreMap":35},[39,25852,25853,25856],{"class":41,"line":42},[39,25854,25855],{"class":49},"lerobot-find-cameras",[39,25857,25858],{"class":237}," opencv\n",[30,25860,25862],{"className":24796,"code":25861,"language":24798,"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",[26,25863,25864,25870,25876,25882,25888,25898,25904,25910,25917],{"__ignoreMap":35},[39,25865,25866,25868],{"class":41,"line":42},[39,25867,25804],{"class":49},[39,25869,25653],{"class":74},[39,25871,25872,25874],{"class":41,"line":92},[39,25873,25685],{"class":74},[39,25875,25653],{"class":74},[39,25877,25878,25880],{"class":41,"line":112},[39,25879,25763],{"class":74},[39,25881,25653],{"class":74},[39,25883,25884,25886],{"class":41,"line":118},[39,25885,25823],{"class":74},[39,25887,25653],{"class":74},[39,25889,25890,25893,25896],{"class":41,"line":125},[39,25891,25892],{"class":74},"  --robot.cameras=",[39,25894,25895],{"class":237},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[39,25897,25653],{"class":74},[39,25899,25900,25902],{"class":41,"line":132},[39,25901,25658],{"class":74},[39,25903,25653],{"class":74},[39,25905,25906,25908],{"class":41,"line":138},[39,25907,25730],{"class":74},[39,25909,25653],{"class":74},[39,25911,25912,25915],{"class":41,"line":169},[39,25913,25914],{"class":74},"  --teleop.id=my_awesome_leader_arm",[39,25916,25653],{"class":74},[39,25918,25919],{"class":41,"line":190},[39,25920,25921],{"class":74},"  --display_data=true\n",[19,25923,25924],{},"相机参数说明：",[489,25926,25927,25933,25939,25948,25958,25964],{},[331,25928,25929,25932],{},[26,25930,25931],{},"front","：相机名称。",[331,25934,25935,25938],{},[26,25936,25937],{},"type: opencv","：相机驱动类型。",[331,25940,25941,25944,25945,25537],{},[26,25942,25943],{},"index_or_path","：设备编号或设备路径（如 ",[26,25946,25947],{},"\u002Fdev\u002Fvideo4",[331,25949,25950,25953,25954,25957],{},[26,25951,25952],{},"width"," \u002F ",[26,25955,25956],{},"height","：图像分辨率。",[331,25959,25960,25963],{},[26,25961,25962],{},"fps","：采样帧率。",[331,25965,25966,25969],{},[26,25967,25968],{},"--display_data=true","：启用实时可视化。",[1192,25971,25972],{},"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":92,"depth":92,"links":25974},[25975,25976],{"id":25793,"depth":92,"text":25794},{"id":25844,"depth":92,"text":25845},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25785,"description":24350},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25983,"title":25984,"body":25985,"description":24350,"extension":1203,"meta":26157,"navigation":121,"path":26158,"seo":26159,"stem":26160,"__hash__":26161},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25986,"toc":26152},[25987,25991,25995,26000,26005,26008,26050,26056,26060,26109,26114,26118,26121,26129,26134,26139,26144,26149],[10,25988,25990],{"id":25989},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25992,25994],{"id":25993},"_51-生成访问令牌","5.1 生成访问令牌",[19,25996,25997],{},[2585,25998],{"alt":35,"src":25999},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26001,26002],{},[2585,26003],{"alt":35,"src":26004},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26006,26007],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[30,26009,26011],{"className":24796,"code":26010,"language":24798,"meta":35,"style":35},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[26,26012,26013,26026],{"__ignoreMap":35},[39,26014,26015,26018,26021,26023],{"class":41,"line":42},[39,26016,26017],{"class":45},"export",[39,26019,26020],{"class":53}," HF_TOKEN",[39,26022,1117],{"class":45},[39,26024,26025],{"class":237},"\"your_huggingface_token\"\n",[39,26027,26028,26031,26034,26037,26040,26042,26045,26047],{"class":41,"line":92},[39,26029,26030],{"class":49},"hf",[39,26032,26033],{"class":237}," auth",[39,26035,26036],{"class":237}," login",[39,26038,26039],{"class":74}," --token",[39,26041,10792],{"class":237},[39,26043,26044],{"class":53},"$HF_TOKEN",[39,26046,1516],{"class":237},[39,26048,26049],{"class":74}," --add-to-git-credential\n",[19,26051,26052,26055],{},[26,26053,26054],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26057,26059],{"id":26058},"_52-验证登录","5.2 验证登录",[30,26061,26063],{"className":24796,"code":26062,"language":24798,"meta":35,"style":35},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[26,26064,26065,26096],{"__ignoreMap":35},[39,26066,26067,26070,26072,26075,26077,26079,26082,26085,26088,26091,26094],{"class":41,"line":42},[39,26068,26069],{"class":53},"HF_USER",[39,26071,1117],{"class":45},[39,26073,26074],{"class":53},"$(",[39,26076,26030],{"class":49},[39,26078,26033],{"class":237},[39,26080,26081],{"class":237}," whoami",[39,26083,26084],{"class":45}," |",[39,26086,26087],{"class":49}," head",[39,26089,26090],{"class":74}," -n",[39,26092,26093],{"class":74}," 1",[39,26095,574],{"class":53},[39,26097,26098,26101,26103,26106],{"class":41,"line":92},[39,26099,26100],{"class":74},"echo",[39,26102,10792],{"class":237},[39,26104,26105],{"class":53},"$HF_USER",[39,26107,26108],{"class":237},"\"\n",[19,26110,26111],{},[2585,26112],{"alt":35,"src":26113},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26115,26117],{"id":26116},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26119,26120],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[489,26122,26123,26126],{},[331,26124,26125],{},"Dataset Repo（用于上传演示数据）",[331,26127,26128],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26130,26131],{},[2585,26132],{"alt":35,"src":26133},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26135,26136],{},[2585,26137],{"alt":35,"src":26138},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26140,26141],{},[2585,26142],{"alt":35,"src":26143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26145,26146],{},[2585,26147],{"alt":35,"src":26148},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1192,26150,26151],{},"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":92,"depth":92,"links":26153},[26154,26155,26156],{"id":25993,"depth":92,"text":25994},{"id":26058,"depth":92,"text":26059},{"id":26116,"depth":92,"text":26117},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25984,"description":24350},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26163,"title":26164,"body":26165,"description":24350,"extension":1203,"meta":26362,"navigation":121,"path":26363,"seo":26364,"stem":26365,"__hash__":26366},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26166,"toc":26357},[26167,26171,26175,26271,26279,26284,26288,26304,26307,26311,26354],[10,26168,26170],{"id":26169},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26172,26174],{"id":26173},"_61-录制示教数据","6.1 录制示教数据",[30,26176,26178],{"className":24796,"code":26177,"language":24798,"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",[26,26179,26180,26187,26193,26199,26205,26214,26220,26226,26232,26239,26249,26256,26266],{"__ignoreMap":35},[39,26181,26182,26185],{"class":41,"line":42},[39,26183,26184],{"class":49},"lerobot-record",[39,26186,25653],{"class":74},[39,26188,26189,26191],{"class":41,"line":92},[39,26190,25685],{"class":74},[39,26192,25653],{"class":74},[39,26194,26195,26197],{"class":41,"line":112},[39,26196,25763],{"class":74},[39,26198,25653],{"class":74},[39,26200,26201,26203],{"class":41,"line":118},[39,26202,25823],{"class":74},[39,26204,25653],{"class":74},[39,26206,26207,26209,26212],{"class":41,"line":125},[39,26208,25892],{"class":74},[39,26210,26211],{"class":237},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[39,26213,25653],{"class":74},[39,26215,26216,26218],{"class":41,"line":132},[39,26217,25658],{"class":74},[39,26219,25653],{"class":74},[39,26221,26222,26224],{"class":41,"line":138},[39,26223,25730],{"class":74},[39,26225,25653],{"class":74},[39,26227,26228,26230],{"class":41,"line":169},[39,26229,25914],{"class":74},[39,26231,25653],{"class":74},[39,26233,26234,26237],{"class":41,"line":190},[39,26235,26236],{"class":74},"  --display_data=true",[39,26238,25653],{"class":74},[39,26240,26241,26244,26247],{"class":41,"line":202},[39,26242,26243],{"class":74},"  --dataset.repo_id=",[39,26245,26246],{"class":237},"\"Embodied-AI-6\u002Fso101_test\"",[39,26248,25653],{"class":74},[39,26250,26251,26254],{"class":41,"line":207},[39,26252,26253],{"class":74},"  --dataset.num_episodes=10",[39,26255,25653],{"class":74},[39,26257,26258,26261,26264],{"class":41,"line":212},[39,26259,26260],{"class":74},"  --dataset.single_task=",[39,26262,26263],{"class":237},"\"Grab the green cube\"",[39,26265,25653],{"class":74},[39,26267,26268],{"class":41,"line":223},[39,26269,26270],{"class":74},"  --resume=true\n",[489,26272,26273],{},[331,26274,26275,26278],{},[26,26276,26277],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26280,26281],{},[2585,26282],{"alt":35,"src":26283},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26285,26287],{"id":26286},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[30,26289,26291],{"className":24796,"code":26290,"language":24798,"meta":35,"style":35},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[26,26292,26293],{"__ignoreMap":35},[39,26294,26295,26298,26301],{"class":41,"line":42},[39,26296,26297],{"class":49},"rm",[39,26299,26300],{"class":74}," -rf",[39,26302,26303],{"class":237}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26305,26306],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26308,26310],{"id":26309},"_63-回放指定-episode","6.3 回放指定 episode",[30,26312,26314],{"className":24796,"code":26313,"language":24798,"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",[26,26315,26316,26323,26329,26335,26341,26349],{"__ignoreMap":35},[39,26317,26318,26321],{"class":41,"line":42},[39,26319,26320],{"class":49},"lerobot-replay",[39,26322,25653],{"class":74},[39,26324,26325,26327],{"class":41,"line":92},[39,26326,25685],{"class":74},[39,26328,25653],{"class":74},[39,26330,26331,26333],{"class":41,"line":112},[39,26332,25763],{"class":74},[39,26334,25653],{"class":74},[39,26336,26337,26339],{"class":41,"line":118},[39,26338,25823],{"class":74},[39,26340,25653],{"class":74},[39,26342,26343,26345,26347],{"class":41,"line":125},[39,26344,26243],{"class":74},[39,26346,26246],{"class":237},[39,26348,25653],{"class":74},[39,26350,26351],{"class":41,"line":132},[39,26352,26353],{"class":74},"  --dataset.episode=0\n",[1192,26355,26356],{},"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":92,"depth":92,"links":26358},[26359,26360,26361],{"id":26173,"depth":92,"text":26174},{"id":26286,"depth":92,"text":26287},{"id":26309,"depth":92,"text":26310},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26164,"description":24350},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26368,"title":26369,"body":26370,"description":24350,"extension":1203,"meta":26498,"navigation":121,"path":26499,"seo":26500,"stem":26501,"__hash__":26502},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26371,"toc":26496},[26372,26376,26439,26442,26489,26494],[10,26373,26375],{"id":26374},"_7-act-模型训练","7. ACT 模型训练",[30,26377,26379],{"className":24796,"code":26378,"language":24798,"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",[26,26380,26381,26388,26396,26403,26410,26417,26424,26431],{"__ignoreMap":35},[39,26382,26383,26386],{"class":41,"line":42},[39,26384,26385],{"class":49},"lerobot-train",[39,26387,25653],{"class":74},[39,26389,26390,26392,26394],{"class":41,"line":92},[39,26391,26243],{"class":74},[39,26393,26246],{"class":237},[39,26395,25653],{"class":74},[39,26397,26398,26401],{"class":41,"line":112},[39,26399,26400],{"class":74},"  --policy.type=act",[39,26402,25653],{"class":74},[39,26404,26405,26408],{"class":41,"line":118},[39,26406,26407],{"class":74},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[39,26409,25653],{"class":74},[39,26411,26412,26415],{"class":41,"line":125},[39,26413,26414],{"class":74},"  --job_name=act_so101_test",[39,26416,25653],{"class":74},[39,26418,26419,26422],{"class":41,"line":132},[39,26420,26421],{"class":74},"  --policy.device=cuda",[39,26423,25653],{"class":74},[39,26425,26426,26429],{"class":41,"line":138},[39,26427,26428],{"class":74},"  --wandb.enable=false",[39,26430,25653],{"class":74},[39,26432,26433,26436],{"class":41,"line":169},[39,26434,26435],{"class":74},"  --policy.repo_id=",[39,26437,26438],{"class":237},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,26440,26441],{},"参数说明：",[489,26443,26444,26450,26456,26462,26468,26477,26483],{},[331,26445,26446,26449],{},[26,26447,26448],{},"--dataset.repo_id","：训练数据集仓库。",[331,26451,26452,26455],{},[26,26453,26454],{},"--policy.type=act","：策略模型类型为 ACT。",[331,26457,26458,26461],{},[26,26459,26460],{},"--output_dir","：本地训练输出目录。",[331,26463,26464,26467],{},[26,26465,26466],{},"--job_name","：训练任务名称。",[331,26469,26470,26473,26474,25537],{},[26,26471,26472],{},"--policy.device","：训练设备（如 ",[26,26475,26476],{},"cuda",[331,26478,26479,26482],{},[26,26480,26481],{},"--wandb.enable","：是否启用 WandB 可视化。",[331,26484,26485,26488],{},[26,26486,26487],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,26490,26491],{},[2585,26492],{"alt":35,"src":26493},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1192,26495,26356],{},{"title":35,"searchDepth":92,"depth":92,"links":26497},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26369,"description":24350},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26504,"title":26505,"body":26506,"description":24350,"extension":1203,"meta":26593,"navigation":121,"path":26594,"seo":26595,"stem":26596,"__hash__":26597},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26507,"toc":26591},[26508,26511,26514,26581,26589],[10,26509,26505],{"id":26510},"_8-策略部署与自动采集",[19,26512,26513],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[30,26515,26517],{"className":24796,"code":26516,"language":24798,"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",[26,26518,26519,26525,26531,26537,26545,26551,26558,26566,26574],{"__ignoreMap":35},[39,26520,26521,26523],{"class":41,"line":42},[39,26522,26184],{"class":49},[39,26524,25653],{"class":74},[39,26526,26527,26529],{"class":41,"line":92},[39,26528,25685],{"class":74},[39,26530,25653],{"class":74},[39,26532,26533,26535],{"class":41,"line":112},[39,26534,25763],{"class":74},[39,26536,25653],{"class":74},[39,26538,26539,26541,26543],{"class":41,"line":118},[39,26540,25892],{"class":74},[39,26542,26211],{"class":237},[39,26544,25653],{"class":74},[39,26546,26547,26549],{"class":41,"line":125},[39,26548,25823],{"class":74},[39,26550,25653],{"class":74},[39,26552,26553,26556],{"class":41,"line":132},[39,26554,26555],{"class":74},"  --display_data=false",[39,26557,25653],{"class":74},[39,26559,26560,26562,26564],{"class":41,"line":138},[39,26561,26243],{"class":74},[39,26563,26246],{"class":237},[39,26565,25653],{"class":74},[39,26567,26568,26570,26572],{"class":41,"line":169},[39,26569,26260],{"class":74},[39,26571,26263],{"class":237},[39,26573,25653],{"class":74},[39,26575,26576,26579],{"class":41,"line":190},[39,26577,26578],{"class":74},"  --policy.path=",[39,26580,26438],{"class":237},[489,26582,26583],{},[331,26584,26585,26588],{},[26,26586,26587],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1192,26590,26356],{},{"title":35,"searchDepth":92,"depth":92,"links":26592},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26505,"description":24350},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26599,"title":26600,"body":26601,"description":24350,"extension":1203,"meta":26630,"navigation":121,"path":26631,"seo":26632,"stem":26633,"__hash__":26634},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26602,"toc":26628},[26603,26607,26610,26616,26619,26625],[10,26604,26606],{"id":26605},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26608,26609],{},"项目地址：",[19,26611,26612],{},[922,26613,26614],{"href":26614,"rel":26615},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24839],[19,26617,26618],{},"参考教程：",[19,26620,26621],{},[922,26622,26623],{"href":26623,"rel":26624},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24839],[19,26626,26627],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":35,"searchDepth":92,"depth":92,"links":26629},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26600,"description":24350},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26636,"title":26637,"body":26638,"description":26642,"extension":1203,"meta":26643,"navigation":121,"path":26644,"seo":26645,"stem":26646,"__hash__":26647},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26639,"toc":26640},[],{"title":35,"searchDepth":92,"depth":92,"links":26641},[],"act复现",{"category":24352},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26637,"description":26642},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26649,"title":26650,"body":26651,"description":35,"extension":1203,"meta":26953,"navigation":121,"path":26954,"seo":26955,"stem":26956,"__hash__":26957},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26652,"toc":26945},[26653,26656,26660,26670,26677,26684,26687,26694,26697,26700,26704,26716,26720,26766,26769,26772,26775,26778,26781,26785,26823,26829,26833,26887,26892,26895,26898,26903,26906,26911,26914,26917,26921,26924,26927,26931],[10,26654,26650],{"id":26655},"_1简介",[476,26657,26659],{"id":26658},"_11什么是-docker","1.1什么是 Docker？",[19,26661,26662,26663,26666,26667],{},"Docker 是一个开源的 ",[350,26664,26665],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[350,26668,26669],{},"一次构建，到处运行。",[19,26671,26672,26673,26676],{},"“ ",[350,26674,26675],{},"一次构建，到处运行"," ”也就是说：",[328,26678,26679],{},[331,26680,26681],{},[350,26682,26683],{},"之前：",[19,26685,26686],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[328,26688,26689],{},[331,26690,26691],{},[350,26692,26693],{},"使用docker后：",[19,26695,26696],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,26698,26699],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[476,26701,26703],{"id":26702},"_12它是怎么工作的","1.2.它是怎么工作的？",[489,26705,26706,26709],{},[331,26707,26708],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[331,26710,26711,26712,26715],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[350,26713,26714],{},"无论在哪运行都一样稳定"," 。",[476,26717,26719],{"id":26718},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1404,26721,26722,26732],{},[1407,26723,26724],{},[1410,26725,26726,26729],{},[1413,26727,26728],{"align":24710},"概念",[1413,26730,26731],{"align":24710},"解释",[1450,26733,26734,26742,26750,26758],{},[1410,26735,26736,26739],{},[1455,26737,26738],{"align":24710},"镜像",[1455,26740,26741],{"align":24710},"Image，运行容器的模板，像是一个应用快照",[1410,26743,26744,26747],{},[1455,26745,26746],{"align":24710},"容器",[1455,26748,26749],{"align":24710},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1410,26751,26752,26755],{},[1455,26753,26754],{"align":24710},"Dockerfile",[1455,26756,26757],{"align":24710},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1410,26759,26760,26763],{},[1455,26761,26762],{"align":24710},"仓库",[1455,26764,26765],{"align":24710},"Registry，存放镜像的地方，比如 Docker Hub",[19,26767,26768],{},"抽象化理解:",[19,26770,26771],{},"Docker镜像≈C++类",[19,26773,26774],{},"Docker容器≈C++类实例(即对象)",[19,26776,26777],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26779,26780],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[476,26782,26784],{"id":26783},"_14类比理解","1.4.类比理解",[1404,26786,26787,26797],{},[1407,26788,26789],{},[1410,26790,26791,26794],{},[1413,26792,26793],{"align":24710},"传统部署",[1413,26795,26796],{"align":24710},"Docker部署",[1450,26798,26799,26807,26815],{},[1410,26800,26801,26804],{},[1455,26802,26803],{"align":24710},"手动安装依赖、调试版本不一致问题",[1455,26805,26806],{"align":24710},"一次打包环境和代码",[1410,26808,26809,26812],{},[1455,26810,26811],{"align":24710},"程序“裸奔”跑在系统上",[1455,26813,26814],{"align":24710},"程序“穿着容器”隔离运行",[1410,26816,26817,26820],{},[1455,26818,26819],{"align":24710},"容易“在我电脑上能跑”",[1455,26821,26822],{"align":24710},"保证“无论在哪都能跑”",[19,26824,26825,26826],{},"就像快递包裹： ",[350,26827,26828],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[476,26830,26832],{"id":26831},"_15docker-的核心优势","1.5.Docker 的核心优势",[1404,26834,26835,26845],{},[1407,26836,26837],{},[1410,26838,26839,26842],{},[1413,26840,26841],{"align":24710},"优势",[1413,26843,26844],{"align":24710},"说明",[1450,26846,26847,26855,26863,26871,26879],{},[1410,26848,26849,26852],{},[1455,26850,26851],{"align":24710},"轻量级",[1455,26853,26854],{"align":24710},"基于系统内核共享，启动速度快，占资源少",[1410,26856,26857,26860],{},[1455,26858,26859],{"align":24710},"跨平台",[1455,26861,26862],{"align":24710},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1410,26864,26865,26868],{},[1455,26866,26867],{"align":24710},"易于迁移部署",[1455,26869,26870],{"align":24710},"应用和环境一起封装，不怕依赖不一致",[1410,26872,26873,26876],{},[1455,26874,26875],{"align":24710},"易于版本控制",[1455,26877,26878],{"align":24710},"镜像版本可控，支持回滚",[1410,26880,26881,26884],{},[1455,26882,26883],{"align":24710},"生态丰富",[1455,26885,26886],{"align":24710},"Docker Hub 上有成千上万的现成镜像可用",[328,26888,26889],{},[331,26890,26891],{},"在Linux上可以几乎实现无性能损失。",[19,26893,26894],{},"docker里的发行版和本机共用Linux内核。",[19,26896,26897],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[328,26899,26900],{},[331,26901,26902],{},"可以快速部署在绝大多数Linux发行版",[19,26904,26905],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[328,26907,26908],{},[331,26909,26910],{},"配置环境简单",[19,26912,26913],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26915,26916],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[328,26918,26919],{},[331,26920,26883],{},[19,26922,26923],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26925,26926],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[476,26928,26930],{"id":26929},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[489,26932,26933,26936,26939,26942],{},[331,26934,26935],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[331,26937,26938],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[331,26940,26941],{},"微服务架构：每个服务一个容器，灵活组合",[331,26943,26944],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":35,"searchDepth":92,"depth":92,"links":26946},[26947,26948,26949,26950,26951,26952],{"id":26658,"depth":112,"text":26659},{"id":26702,"depth":112,"text":26703},{"id":26718,"depth":112,"text":26719},{"id":26783,"depth":112,"text":26784},{"id":26831,"depth":112,"text":26832},{"id":26929,"depth":112,"text":26930},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26650,"description":35},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26959,"title":26960,"body":26961,"description":35,"extension":1203,"meta":27694,"navigation":121,"path":27695,"seo":27696,"stem":27697,"__hash__":27698},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26962,"toc":27689},[26963,26966,26970,26973,26976,26982,26988,26992,27001,27004,27061,27064,27115,27118,27201,27204,27241,27245,27256,27269,27276,27279,27359,27362,27412,27415,27438,27442,27449,27452,27468,27474,27477,27493,27499,27502,27518,27532,27538,27558,27564,27567,27579,27585,27588,27602,27608,27611,27631,27636,27639,27642,27646,27649,27652,27655,27662,27665,27668,27671,27676,27681,27686],[10,26964,26960],{"id":26965},"_2安装docker",[476,26967,26969],{"id":26968},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26971,26972],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26974,26975],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26977,26978],{},[922,26979,26980],{"href":26980,"rel":26981},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24839],[19,26983,26984],{},[922,26985,26986],{"href":26986,"rel":26987},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24839],[22971,26989,26991],{"id":26990},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26993,26994,26995,27000],{},"以下内容根据 ",[922,26996,26999],{"href":26997,"rel":26998},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24839],"官方文档"," 修改而来。",[19,27002,27003],{},"如果你过去安装过 docker，先删掉：",[30,27005,27007],{"className":24796,"code":27006,"language":24798,"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",[26,27008,27009],{"__ignoreMap":35},[39,27010,27011,27013,27016,27019,27022,27025,27028,27031,27034,27037,27040,27043,27046,27049,27052,27055,27058],{"class":41,"line":42},[39,27012,4108],{"class":45},[39,27014,27015],{"class":53}," pkg ",[39,27017,27018],{"class":45},"in",[39,27020,27021],{"class":237}," docker.io",[39,27023,27024],{"class":237}," docker-doc",[39,27026,27027],{"class":237}," docker-compose",[39,27029,27030],{"class":237}," docker-compose-v2",[39,27032,27033],{"class":237}," podman-docker",[39,27035,27036],{"class":237}," containerd",[39,27038,27039],{"class":237}," runc",[39,27041,27042],{"class":53},"; ",[39,27044,27045],{"class":45},"do",[39,27047,27048],{"class":49}," sudo",[39,27050,27051],{"class":237}," apt-get",[39,27053,27054],{"class":237}," remove",[39,27056,27057],{"class":53}," $pkg; ",[39,27059,27060],{"class":45},"done\n",[19,27062,27063],{},"首先安装依赖和GPG：",[30,27065,27069],{"className":27066,"code":27067,"language":27068,"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",[26,27070,27071,27076,27081,27086,27091,27096,27101,27105,27110],{"__ignoreMap":35},[39,27072,27073],{"class":41,"line":42},[39,27074,27075],{},"# Add Docker's official GPG key:\n",[39,27077,27078],{"class":41,"line":92},[39,27079,27080],{},"sudo apt-get update\n",[39,27082,27083],{"class":41,"line":112},[39,27084,27085],{},"sudo apt-get install ca-certificates curl\n",[39,27087,27088],{"class":41,"line":118},[39,27089,27090],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[39,27092,27093],{"class":41,"line":125},[39,27094,27095],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[39,27097,27098],{"class":41,"line":132},[39,27099,27100],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[39,27102,27103],{"class":41,"line":138},[39,27104,122],{"emptyLinePlaceholder":121},[39,27106,27107],{"class":41,"line":169},[39,27108,27109],{},"# 如果上面这行报错就弄下面这行\n",[39,27111,27112],{"class":41,"line":190},[39,27113,27114],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27116,27117],{},"信任 Docker 的 GPG 公钥并添加仓库：",[30,27119,27121],{"className":24796,"code":27120,"language":24798,"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",[26,27122,27123,27128,27134,27151,27184],{"__ignoreMap":35},[39,27124,27125],{"class":41,"line":42},[39,27126,27127],{"class":128},"# Add the repository to Apt sources:\n",[39,27129,27130,27132],{"class":41,"line":92},[39,27131,26100],{"class":74},[39,27133,25653],{"class":74},[39,27135,27136,27139,27142,27145,27148],{"class":41,"line":112},[39,27137,27138],{"class":237},"  \"deb [arch=$(",[39,27140,27141],{"class":49},"dpkg",[39,27143,27144],{"class":74}," --print-architecture",[39,27146,27147],{"class":237},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[39,27149,27150],{"class":74},"\\\n",[39,27152,27153,27156,27158,27160,27163,27166,27168,27170,27173,27175,27177,27180,27182],{"class":41,"line":118},[39,27154,27155],{"class":237},"  \"",[39,27157,26074],{"class":53},[39,27159,1819],{"class":74},[39,27161,27162],{"class":237}," \u002Fetc\u002Fos-release",[39,27164,27165],{"class":53}," && ",[39,27167,26100],{"class":74},[39,27169,10792],{"class":237},[39,27171,27172],{"class":53},"$VERSION_CODENAME",[39,27174,1516],{"class":237},[39,27176,1692],{"class":53},[39,27178,27179],{"class":237},"\" stable\"",[39,27181,26084],{"class":45},[39,27183,25653],{"class":74},[39,27185,27186,27189,27192,27195,27198],{"class":41,"line":125},[39,27187,27188],{"class":49},"  sudo",[39,27190,27191],{"class":237}," tee",[39,27193,27194],{"class":237}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[39,27196,27197],{"class":45}," >",[39,27199,27200],{"class":237}," \u002Fdev\u002Fnull\n",[19,27202,27203],{},"最后安装",[30,27205,27207],{"className":24796,"code":27206,"language":24798,"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",[26,27208,27209,27218],{"__ignoreMap":35},[39,27210,27211,27213,27215],{"class":41,"line":42},[39,27212,25551],{"class":49},[39,27214,27051],{"class":237},[39,27216,27217],{"class":237}," update\n",[39,27219,27220,27222,27224,27226,27229,27232,27235,27238],{"class":41,"line":92},[39,27221,25551],{"class":49},[39,27223,27051],{"class":237},[39,27225,24808],{"class":237},[39,27227,27228],{"class":237}," docker-ce",[39,27230,27231],{"class":237}," docker-ce-cli",[39,27233,27234],{"class":237}," containerd.io",[39,27236,27237],{"class":237}," docker-buildx-plugin",[39,27239,27240],{"class":237}," docker-compose-plugin\n",[22971,27242,27244],{"id":27243},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,27246,27247,27248,27251,27252,27255],{},"查看自己自己包管理工具版本（dnf是 ",[350,27249,27250],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[350,27253,27254],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[30,27257,27259],{"className":24796,"code":27258,"language":24798,"meta":35,"style":35},"dnf --version\n",[26,27260,27261],{"__ignoreMap":35},[39,27262,27263,27266],{"class":41,"line":42},[39,27264,27265],{"class":49},"dnf",[39,27267,27268],{"class":74}," --version\n",[19,27270,26994,27271,27275],{},[922,27272,26999],{"href":27273,"rel":27274},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24839]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,27277,27278],{},"如果你之前安装过 docker，请先删掉",[30,27280,27282],{"className":24796,"code":27281,"language":24798,"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",[26,27283,27284,27298,27305,27312,27319,27326,27333,27340,27347,27354],{"__ignoreMap":35},[39,27285,27286,27288,27291,27293,27296],{"class":41,"line":42},[39,27287,25551],{"class":49},[39,27289,27290],{"class":237}," dnf",[39,27292,27054],{"class":237},[39,27294,27295],{"class":237}," docker",[39,27297,25653],{"class":74},[39,27299,27300,27303],{"class":41,"line":92},[39,27301,27302],{"class":237},"                  docker-client",[39,27304,25653],{"class":74},[39,27306,27307,27310],{"class":41,"line":112},[39,27308,27309],{"class":237},"                  docker-client-latest",[39,27311,25653],{"class":74},[39,27313,27314,27317],{"class":41,"line":118},[39,27315,27316],{"class":237},"                  docker-common",[39,27318,25653],{"class":74},[39,27320,27321,27324],{"class":41,"line":125},[39,27322,27323],{"class":237},"                  docker-latest",[39,27325,25653],{"class":74},[39,27327,27328,27331],{"class":41,"line":132},[39,27329,27330],{"class":237},"                  docker-latest-logrotate",[39,27332,25653],{"class":74},[39,27334,27335,27338],{"class":41,"line":138},[39,27336,27337],{"class":237},"                  docker-logrotate",[39,27339,25653],{"class":74},[39,27341,27342,27345],{"class":41,"line":169},[39,27343,27344],{"class":237},"                  docker-selinux",[39,27346,25653],{"class":74},[39,27348,27349,27352],{"class":41,"line":190},[39,27350,27351],{"class":237},"                  docker-engine-selinux",[39,27353,25653],{"class":74},[39,27355,27356],{"class":41,"line":202},[39,27357,27358],{"class":237},"                  docker-engine\n",[19,27360,27361],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[30,27363,27365],{"className":24796,"code":27364,"language":24798,"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",[26,27366,27367,27381,27396],{"__ignoreMap":35},[39,27368,27369,27371,27373,27376,27378],{"class":41,"line":42},[39,27370,25551],{"class":49},[39,27372,27290],{"class":237},[39,27374,27375],{"class":74}," -y",[39,27377,24808],{"class":237},[39,27379,27380],{"class":237}," dnf-plugins-core\n",[39,27382,27383,27385,27387,27390,27393],{"class":41,"line":92},[39,27384,25551],{"class":49},[39,27386,27290],{"class":237},[39,27388,27389],{"class":237}," config-manager",[39,27391,27392],{"class":237}," addrepo",[39,27394,27395],{"class":74}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[39,27397,27398,27400,27403,27406,27409],{"class":41,"line":112},[39,27399,25551],{"class":49},[39,27401,27402],{"class":237}," sed",[39,27404,27405],{"class":74}," -i",[39,27407,27408],{"class":237}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[39,27410,27411],{"class":237}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,27413,27414],{},"最后安装：",[30,27416,27418],{"className":24796,"code":27417,"language":24798,"meta":35,"style":35},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[26,27419,27420],{"__ignoreMap":35},[39,27421,27422,27424,27426,27428,27430,27432,27434,27436],{"class":41,"line":42},[39,27423,25551],{"class":49},[39,27425,27290],{"class":237},[39,27427,24808],{"class":237},[39,27429,27228],{"class":237},[39,27431,27231],{"class":237},[39,27433,27234],{"class":237},[39,27435,27237],{"class":237},[39,27437,27240],{"class":237},[476,27439,27441],{"id":27440},"_22配置环境","2.2.配置环境",[22971,27443,27445,27448],{"id":27444},"_221检查-docker-服务状态",[350,27446,27447],{},"2.2.1.检查 Docker 服务状态"," ：",[19,27450,27451],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[30,27453,27455],{"className":24796,"code":27454,"language":24798,"meta":35,"style":35},"systemctl status docker\n",[26,27456,27457],{"__ignoreMap":35},[39,27458,27459,27462,27465],{"class":41,"line":42},[39,27460,27461],{"class":49},"systemctl",[39,27463,27464],{"class":237}," status",[39,27466,27467],{"class":237}," docker\n",[22971,27469,27471,27448],{"id":27470},"_222启动-docker-服务",[350,27472,27473],{},"2.2.2.启动 Docker 服务",[19,27475,27476],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[30,27478,27480],{"className":24796,"code":27479,"language":24798,"meta":35,"style":35},"sudo systemctl start docker\n",[26,27481,27482],{"__ignoreMap":35},[39,27483,27484,27486,27489,27491],{"class":41,"line":42},[39,27485,25551],{"class":49},[39,27487,27488],{"class":237}," systemctl",[39,27490,5265],{"class":237},[39,27492,27467],{"class":237},[22971,27494,27496,27448],{"id":27495},"_223设置-docker-开机自启",[350,27497,27498],{},"2.2.3.设置 Docker 开机自启",[19,27500,27501],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[30,27503,27505],{"className":24796,"code":27504,"language":24798,"meta":35,"style":35},"sudo systemctl enable docker\n",[26,27506,27507],{"__ignoreMap":35},[39,27508,27509,27511,27513,27516],{"class":41,"line":42},[39,27510,25551],{"class":49},[39,27512,27488],{"class":237},[39,27514,27515],{"class":237}," enable",[39,27517,27467],{"class":237},[22971,27519,27521,352,27524,352,27529,27448],{"id":27520},"_224将用户添加到-docker-组",[350,27522,27523],{},"2.2.4.将用户添加到",[350,27525,27526],{},[26,27527,27528],{},"docker",[350,27530,27531],{},"组",[19,27533,27534,27535,27537],{},"使用以下命令将当前用户添加到 ",[26,27536,27528],{}," 组：",[30,27539,27541],{"className":24796,"code":27540,"language":24798,"meta":35,"style":35},"sudo usermod -aG docker $USER\n",[26,27542,27543],{"__ignoreMap":35},[39,27544,27545,27547,27550,27553,27555],{"class":41,"line":42},[39,27546,25551],{"class":49},[39,27548,27549],{"class":237}," usermod",[39,27551,27552],{"class":74}," -aG",[39,27554,27295],{"class":237},[39,27556,27557],{"class":53}," $USER\n",[22971,27559,27561,27448],{"id":27560},"_225退出并重新登录",[350,27562,27563],{},"2.2.5.退出并重新登录",[19,27565,27566],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[30,27568,27570],{"className":24796,"code":27569,"language":24798,"meta":35,"style":35},"newgrp docker\n",[26,27571,27572],{"__ignoreMap":35},[39,27573,27574,27577],{"class":41,"line":42},[39,27575,27576],{"class":49},"newgrp",[39,27578,27467],{"class":237},[22971,27580,27582,27448],{"id":27581},"_226重新启动-docker-服务如果需要",[350,27583,27584],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,27586,27587],{},"确保 Docker 服务正在运行，可以使用以下命令：",[30,27589,27590],{"className":24796,"code":27479,"language":24798,"meta":35,"style":35},[26,27591,27592],{"__ignoreMap":35},[39,27593,27594,27596,27598,27600],{"class":41,"line":42},[39,27595,25551],{"class":49},[39,27597,27488],{"class":237},[39,27599,5265],{"class":237},[39,27601,27467],{"class":237},[22971,27603,27605,27448],{"id":27604},"_227重启电脑后检查-docker-服务状态",[350,27606,27607],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,27609,27610],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[30,27612,27614],{"className":24796,"code":27613,"language":24798,"meta":35,"style":35},"sudo reboot\nsystemctl status docker\n",[26,27615,27616,27623],{"__ignoreMap":35},[39,27617,27618,27620],{"class":41,"line":42},[39,27619,25551],{"class":49},[39,27621,27622],{"class":237}," reboot\n",[39,27624,27625,27627,27629],{"class":41,"line":92},[39,27626,27461],{"class":49},[39,27628,27464],{"class":237},[39,27630,27467],{"class":237},[19,27632,27633],{},[2585,27634],{"alt":35,"src":27635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,27637,27638],{},"第三行显示enabled说明开机自启动成功",[19,27640,27641],{},"按q退出",[476,27643,27645],{"id":27644},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,27647,27648],{},"优先使用linux来使用docker是比较好的",[19,27650,27651],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,27653,27654],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,27656,27657,27658],{},"官方下载安装:",[922,27659,27660],{"href":27660,"rel":27661},"https:\u002F\u002Fwww.docker.com\u002F",[24839],[19,27663,27664],{},"Windows的Docker显卡直通与USB直通:",[19,27666,27667],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,27669,27670],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,27672,27673],{},[2585,27674],{"alt":35,"src":27675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,27677,27678],{},[2585,27679],{"alt":35,"src":27680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,27682,27683],{},[2585,27684],{"alt":35,"src":27685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1192,27687,27688],{},"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":92,"depth":92,"links":27690},[27691,27692,27693],{"id":26968,"depth":112,"text":26969},{"id":27440,"depth":112,"text":27441},{"id":27644,"depth":112,"text":27645},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26960,"description":35},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27700,"title":27701,"body":27702,"description":27709,"extension":1203,"meta":28402,"navigation":121,"path":28403,"seo":28404,"stem":28405,"__hash__":28406},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27703,"toc":28396},[27704,27707,27710,27714,27719,27724,27727,27755,27760,27769,27772,27777,27781,27788,27793,27799,27803,27806,27810,27815,27907,27912,27930,27935,27956,27961,27977,27981,27986,28015,28020,28066,28071,28115,28123,28140,28145,28161,28166,28180,28183,28186,28189,28192,28221,28224,28229,28233,28236,28239,28245,28248,28251,28254,28316,28323,28328,28331,28349,28353,28356,28373,28376,28379,28393],[10,27705,27701],{"id":27706},"_3docker直通",[19,27708,27709],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[476,27711,27713],{"id":27712},"_31usb直通","3.1.USB直通",[19,27715,27716],{},[2585,27717],{"alt":35,"src":27718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[328,27720,27721],{},[331,27722,27723],{},"方法一(不是很推荐新手)：",[19,27725,27726],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[30,27728,27730],{"className":24796,"code":27729,"language":24798,"meta":35,"style":35},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[26,27731,27732,27740,27745],{"__ignoreMap":35},[39,27733,27734,27737],{"class":41,"line":42},[39,27735,27736],{"class":49},"ls",[39,27738,27739],{"class":237}," \u002Fdev\n",[39,27741,27742],{"class":41,"line":92},[39,27743,27744],{"class":128},"#例如\n",[39,27746,27747,27750,27752],{"class":41,"line":112},[39,27748,27749],{"class":53},"--device",[39,27751,1117],{"class":45},[39,27753,27754],{"class":237},"\u002Fdev\u002Ftty_USB0\n",[328,27756,27757],{"start":92},[331,27758,27759],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[30,27761,27763],{"className":24796,"code":27762,"language":24798,"meta":35,"style":35},"--privileged\n",[26,27764,27765],{"__ignoreMap":35},[39,27766,27767],{"class":41,"line":42},[39,27768,27762],{"class":49},[19,27770,27771],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27773,27774],{},[2585,27775],{"alt":35,"src":27776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[476,27778,27780],{"id":27779},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27782,27783,27784,27787],{},"NVIDIA Container Toolkit使用户 ",[350,27785,27786],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27789,27790],{},[2585,27791],{"alt":35,"src":27792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27794,27795],{},[922,27796,27797],{"href":27797,"rel":27798},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24839],[22971,27800,27802],{"id":27801},"_321安装","3.2.1.安装",[19,27804,27805],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23883,27807,27809],{"id":27808},"_3211ubuntu","3.2.1.1.Ubuntu",[328,27811,27812],{},[331,27813,27814],{},"配置存储库 并更新",[30,27816,27818],{"className":24796,"code":27817,"language":24798,"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",[26,27819,27820,27849,27869,27881,27893,27899],{"__ignoreMap":35},[39,27821,27822,27825,27828,27831,27833,27835,27838,27841,27844,27847],{"class":41,"line":42},[39,27823,27824],{"class":49},"curl",[39,27826,27827],{"class":74}," -fsSL",[39,27829,27830],{"class":237}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[39,27832,26084],{"class":45},[39,27834,27048],{"class":49},[39,27836,27837],{"class":237}," gpg",[39,27839,27840],{"class":74}," --dearmor",[39,27842,27843],{"class":74}," -o",[39,27845,27846],{"class":237}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[39,27848,25653],{"class":74},[39,27850,27851,27854,27856,27859,27862,27865,27867],{"class":41,"line":92},[39,27852,27853],{"class":53},"  && ",[39,27855,27824],{"class":49},[39,27857,27858],{"class":74}," -s",[39,27860,27861],{"class":74}," -L",[39,27863,27864],{"class":237}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[39,27866,26084],{"class":45},[39,27868,25653],{"class":74},[39,27870,27871,27874,27877,27879],{"class":41,"line":112},[39,27872,27873],{"class":49},"    sed",[39,27875,27876],{"class":237}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[39,27878,26084],{"class":45},[39,27880,25653],{"class":74},[39,27882,27883,27886,27888,27891],{"class":41,"line":118},[39,27884,27885],{"class":49},"    sudo",[39,27887,27191],{"class":237},[39,27889,27890],{"class":237}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[39,27892,25653],{"class":74},[39,27894,27895,27897],{"class":41,"line":125},[39,27896,27853],{"class":53},[39,27898,27150],{"class":74},[39,27900,27901,27903,27905],{"class":41,"line":132},[39,27902,27885],{"class":49},[39,27904,27051],{"class":237},[39,27906,27217],{"class":237},[328,27908,27909],{"start":92},[331,27910,27911],{},"安装nvidia-docker2",[30,27913,27915],{"className":24796,"code":27914,"language":24798,"meta":35,"style":35},"sudo apt-get install -y nvidia-docker2\n",[26,27916,27917],{"__ignoreMap":35},[39,27918,27919,27921,27923,27925,27927],{"class":41,"line":42},[39,27920,25551],{"class":49},[39,27922,27051],{"class":237},[39,27924,24808],{"class":237},[39,27926,27375],{"class":74},[39,27928,27929],{"class":237}," nvidia-docker2\n",[328,27931,27932],{"start":112},[331,27933,27934],{},"使用nvidia-ctk命令配置container runtime",[30,27936,27938],{"className":24796,"code":27937,"language":24798,"meta":35,"style":35},"sudo nvidia-ctk runtime configure --runtime=docker\n",[26,27939,27940],{"__ignoreMap":35},[39,27941,27942,27944,27947,27950,27953],{"class":41,"line":42},[39,27943,25551],{"class":49},[39,27945,27946],{"class":237}," nvidia-ctk",[39,27948,27949],{"class":237}," runtime",[39,27951,27952],{"class":237}," configure",[39,27954,27955],{"class":74}," --runtime=docker\n",[328,27957,27958],{"start":118},[331,27959,27960],{},"重启docker服务:",[30,27962,27964],{"className":24796,"code":27963,"language":24798,"meta":35,"style":35},"sudo systemctl restart docker\n",[26,27965,27966],{"__ignoreMap":35},[39,27967,27968,27970,27972,27975],{"class":41,"line":42},[39,27969,25551],{"class":49},[39,27971,27488],{"class":237},[39,27973,27974],{"class":237}," restart",[39,27976,27467],{"class":237},[23883,27978,27980],{"id":27979},"_3212fedora","3.2.1.2.Fedora",[328,27982,27983],{},[331,27984,27985],{},"配置存储库",[30,27987,27989],{"className":24796,"code":27988,"language":24798,"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",[26,27990,27991,28006],{"__ignoreMap":35},[39,27992,27993,27995,27997,27999,28002,28004],{"class":41,"line":42},[39,27994,27824],{"class":49},[39,27996,27858],{"class":74},[39,27998,27861],{"class":74},[39,28000,28001],{"class":237}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[39,28003,26084],{"class":45},[39,28005,25653],{"class":74},[39,28007,28008,28010,28012],{"class":41,"line":92},[39,28009,25551],{"class":49},[39,28011,27191],{"class":237},[39,28013,28014],{"class":237}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[328,28016,28017],{"start":92},[331,28018,28019],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[30,28021,28023],{"className":24796,"code":28022,"language":24798,"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",[26,28024,28025,28030,28044,28048,28053],{"__ignoreMap":35},[39,28026,28027],{"class":41,"line":42},[39,28028,28029],{"class":128},"# 如果是RHEL或者Rocky（DNF4）\n",[39,28031,28032,28034,28036,28038,28041],{"class":41,"line":92},[39,28033,25551],{"class":49},[39,28035,27290],{"class":237},[39,28037,27389],{"class":237},[39,28039,28040],{"class":74}," --add-repo",[39,28042,28043],{"class":237}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[39,28045,28046],{"class":41,"line":112},[39,28047,122],{"emptyLinePlaceholder":121},[39,28049,28050],{"class":41,"line":118},[39,28051,28052],{"class":128},"# 如果是Feodra41+（DNF5）\n",[39,28054,28055,28057,28059,28061,28063],{"class":41,"line":125},[39,28056,25551],{"class":49},[39,28058,27290],{"class":237},[39,28060,27389],{"class":237},[39,28062,27392],{"class":237},[39,28064,28065],{"class":74}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[328,28067,28068],{"start":112},[331,28069,28070],{},"安装NVIDIA Container Toolki包",[30,28072,28074],{"className":24796,"code":28073,"language":24798,"meta":35,"style":35},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[26,28075,28076,28081,28094,28098,28103],{"__ignoreMap":35},[39,28077,28078],{"class":41,"line":42},[39,28079,28080],{"class":128},"# 如果是RHEL或者Rocky\n",[39,28082,28083,28085,28087,28089,28091],{"class":41,"line":92},[39,28084,25551],{"class":49},[39,28086,27290],{"class":237},[39,28088,24808],{"class":237},[39,28090,27375],{"class":74},[39,28092,28093],{"class":237}," nvidia-container-toolkit\n",[39,28095,28096],{"class":41,"line":112},[39,28097,122],{"emptyLinePlaceholder":121},[39,28099,28100],{"class":41,"line":118},[39,28101,28102],{"class":128},"# 如果是Fedora\n",[39,28104,28105,28107,28109,28111,28113],{"class":41,"line":125},[39,28106,25551],{"class":49},[39,28108,27290],{"class":237},[39,28110,24808],{"class":237},[39,28112,27375],{"class":74},[39,28114,28093],{"class":237},[328,28116,28117],{"start":118},[331,28118,28119,28120,28122],{},"安装nvidia-docker2 ： 在Fedora上使用",[26,28121,27265],{},"进行安装",[30,28124,28126],{"className":24796,"code":28125,"language":24798,"meta":35,"style":35},"sudo dnf install -y nvidia-docker2\n",[26,28127,28128],{"__ignoreMap":35},[39,28129,28130,28132,28134,28136,28138],{"class":41,"line":42},[39,28131,25551],{"class":49},[39,28133,27290],{"class":237},[39,28135,24808],{"class":237},[39,28137,27375],{"class":74},[39,28139,27929],{"class":237},[328,28141,28142],{"start":125},[331,28143,28144],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[30,28146,28147],{"className":24796,"code":27937,"language":24798,"meta":35,"style":35},[26,28148,28149],{"__ignoreMap":35},[39,28150,28151,28153,28155,28157,28159],{"class":41,"line":42},[39,28152,25551],{"class":49},[39,28154,27946],{"class":237},[39,28156,27949],{"class":237},[39,28158,27952],{"class":237},[39,28160,27955],{"class":74},[328,28162,28163],{"start":132},[331,28164,28165],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[30,28167,28168],{"className":24796,"code":27963,"language":24798,"meta":35,"style":35},[26,28169,28170],{"__ignoreMap":35},[39,28171,28172,28174,28176,28178],{"class":41,"line":42},[39,28173,25551],{"class":49},[39,28175,27488],{"class":237},[39,28177,27974],{"class":237},[39,28179,27467],{"class":237},[19,28181,28182],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28184,28185],{},"方法：",[19,28187,28188],{},"1️⃣nvidia-smi",[19,28190,28191],{},"2️⃣运行nvidia cuda 容器进行测试",[30,28193,28195],{"className":24796,"code":28194,"language":24798,"meta":35,"style":35},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[26,28196,28197],{"__ignoreMap":35},[39,28198,28199,28201,28203,28206,28209,28212,28215,28218],{"class":41,"line":42},[39,28200,25551],{"class":49},[39,28202,27295],{"class":237},[39,28204,28205],{"class":237}," run",[39,28207,28208],{"class":74}," --rm",[39,28210,28211],{"class":74}," --gpus",[39,28213,28214],{"class":237}," all",[39,28216,28217],{"class":237}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[39,28219,28220],{"class":237}," nvidia-smi\n",[19,28222,28223],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,28225,28226],{},[2585,28227],{"alt":35,"src":28228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[476,28230,28232],{"id":28231},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,28234,28235],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,28237,28238],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,28240,28241],{},[922,28242,28243],{"href":28243,"rel":28244},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24839],[19,28246,28247],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,28249,28250],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,28252,28253],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1404,28255,28256,28272],{},[1407,28257,28258],{},[1410,28259,28260,28263,28266,28269],{},[1413,28261,28262],{"align":24710},"镜像类型",[1413,28264,28265],{"align":24710},"适用场景",[1413,28267,28268],{"align":24710},"示例标签",[1413,28270,28271],{"align":24710},"大小",[1450,28273,28274,28288,28302],{},[1410,28275,28276,28279,28282,28285],{},[1455,28277,28278],{"align":24710},"base",[1455,28280,28281],{"align":24710},"仅需 CUDA 运行时库",[1455,28283,28284],{"align":24710},"12.4.0-base-ubuntu22.04",[1455,28286,28287],{"align":24710},"~240MB",[1410,28289,28290,28293,28296,28299],{},[1455,28291,28292],{"align":24710},"runtime",[1455,28294,28295],{"align":24710},"部署编译后的应用（含数学库）",[1455,28297,28298],{"align":24710},"12.4.0-runtime-ubuntu22.04",[1455,28300,28301],{"align":24710},"~2GB",[1410,28303,28304,28307,28310,28313],{},[1455,28305,28306],{"align":24710},"devel",[1455,28308,28309],{"align":24710},"开发环境（含编译工具）",[1455,28311,28312],{"align":24710},"12.4.0-devel-ubuntu22.04",[1455,28314,28315],{"align":24710},"~3GB",[19,28317,28318,28319,28322],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[26,28320,28321],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,28324,28325],{},[2585,28326],{"alt":35,"src":28327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,28329,28330],{},"在dockerfile里就可以开头这么写：",[30,28332,28334],{"className":24796,"code":28333,"language":24798,"meta":35,"style":35},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[26,28335,28336,28341],{"__ignoreMap":35},[39,28337,28338],{"class":41,"line":42},[39,28339,28340],{"class":128},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[39,28342,28343,28346],{"class":41,"line":92},[39,28344,28345],{"class":49},"FROM",[39,28347,28348],{"class":237}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[476,28350,28352],{"id":28351},"_34配置以太网","3.4.配置以太网",[19,28354,28355],{},"指定网络模式",[30,28357,28359],{"className":24796,"code":28358,"language":24798,"meta":35,"style":35},"--net=host \\\n",[26,28360,28361],{"__ignoreMap":35},[39,28362,28363,28366,28368,28371],{"class":41,"line":42},[39,28364,28365],{"class":53},"--net",[39,28367,1117],{"class":45},[39,28369,28370],{"class":237},"host",[39,28372,25653],{"class":49},[19,28374,28375],{},"启动参数里加上这行即可。具体在下方",[19,28377,28378],{},"--net选项：指定网络模式，该选项有以下参数可选：",[489,28380,28381,28384,28387,28390],{},[331,28382,28383],{},"--net=bridge:默认选项，表示连接到默认的网桥",[331,28385,28386],{},"--net=host:容器使用宿主机的网络",[331,28388,28389],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[331,28391,28392],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1192,28394,28395],{},"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":92,"depth":92,"links":28397},[28398,28399,28400,28401],{"id":27712,"depth":112,"text":27713},{"id":27779,"depth":112,"text":27780},{"id":28231,"depth":112,"text":28232},{"id":28351,"depth":112,"text":28352},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27701,"description":27709},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28408,"title":28409,"body":28410,"description":28417,"extension":1203,"meta":28423,"navigation":121,"path":28424,"seo":28425,"stem":28426,"__hash__":28427},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28411,"toc":28421},[28412,28415,28418],[10,28413,28409],{"id":28414},"_4dockerhub换源",[19,28416,28417],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,28419,28420],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":35,"searchDepth":92,"depth":92,"links":28422},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28409,"description":28417},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28429,"title":28430,"body":28431,"description":35,"extension":1203,"meta":29443,"navigation":121,"path":29444,"seo":29445,"stem":29446,"__hash__":29447},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28432,"toc":29438},[28433,28436,28440,28446,28450,28453,28793,28796,28799,28802,28807,28812,28815,28818,28821,28824,28843,28846,28857,28863,29045,29055,29071,29334,29336,29361,29376,29385,29435],[10,28434,28430],{"id":28435},"_5docker命令学习",[476,28437,28439],{"id":28438},"_51参考文档","5.1.参考文档",[19,28441,28442],{},[922,28443,28444],{"href":28444,"rel":28445},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24839],[476,28447,28449],{"id":28448},"_52常用命令","5.2.常用命令",[19,28451,28452],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1404,28454,28455,28468],{},[1407,28456,28457],{},[1410,28458,28459,28462,28465],{},[1413,28460,28461],{"align":24710},"命令",[1413,28463,28464],{"align":24710},"描述",[1413,28466,28467],{"align":24710},"示例",[1450,28469,28470,28481,28492,28503,28514,28525,28536,28547,28557,28568,28579,28590,28600,28611,28622,28633,28643,28653,28663,28673,28684,28695,28706,28717,28728,28739,28749,28760,28771,28782],{},[1410,28471,28472,28475,28478],{},[1455,28473,28474],{"align":24710},"docker run",[1455,28476,28477],{"align":24710},"创建并启动一个新的容器。",[1455,28479,28480],{"align":24710},"docker run -it ubuntu bash",[1410,28482,28483,28486,28489],{},[1455,28484,28485],{"align":24710},"docker build",[1455,28487,28488],{"align":24710},"通过指定的 Dockerfile 创建一个新的镜像。",[1455,28490,28491],{"align":24710},"docker build -t myimage .",[1410,28493,28494,28497,28500],{},[1455,28495,28496],{"align":24710},"docker pull",[1455,28498,28499],{"align":24710},"从 Docker 仓库拉取镜像。",[1455,28501,28502],{"align":24710},"docker pull ubuntu",[1410,28504,28505,28508,28511],{},[1455,28506,28507],{"align":24710},"docker push",[1455,28509,28510],{"align":24710},"将本地镜像推送到 Docker 仓库。",[1455,28512,28513],{"align":24710},"docker push myimage",[1410,28515,28516,28519,28522],{},[1455,28517,28518],{"align":24710},"docker stop",[1455,28520,28521],{"align":24710},"停止一个正在运行的容器。",[1455,28523,28524],{"align":24710},"docker stop container_id",[1410,28526,28527,28530,28533],{},[1455,28528,28529],{"align":24710},"docker start",[1455,28531,28532],{"align":24710},"启动一个已经存在的容器。",[1455,28534,28535],{"align":24710},"docker start container_id",[1410,28537,28538,28541,28544],{},[1455,28539,28540],{"align":24710},"docker restart",[1455,28542,28543],{"align":24710},"重新启动容器。",[1455,28545,28546],{"align":24710},"docker restart container_id",[1410,28548,28549,28552,28555],{},[1455,28550,28551],{"align":24710},"docker ps",[1455,28553,28554],{"align":24710},"列出当前正在运行的容器。",[1455,28556,28551],{"align":24710},[1410,28558,28559,28562,28565],{},[1455,28560,28561],{"align":24710},"docker rm",[1455,28563,28564],{"align":24710},"删除一个或多个停止的容器。",[1455,28566,28567],{"align":24710},"docker rm container_id",[1410,28569,28570,28573,28576],{},[1455,28571,28572],{"align":24710},"docker exec",[1455,28574,28575],{"align":24710},"在一个正在运行的容器中执行命令。",[1455,28577,28578],{"align":24710},"docker exec -it container_id bash",[1410,28580,28581,28584,28587],{},[1455,28582,28583],{"align":24710},"docker logs",[1455,28585,28586],{"align":24710},"查看容器的日志输出。",[1455,28588,28589],{"align":24710},"docker logs container_id",[1410,28591,28592,28595,28598],{},[1455,28593,28594],{"align":24710},"docker images",[1455,28596,28597],{"align":24710},"列出本地所有镜像。",[1455,28599,28594],{"align":24710},[1410,28601,28602,28605,28608],{},[1455,28603,28604],{"align":24710},"docker rmi",[1455,28606,28607],{"align":24710},"删除一个或多个镜像。",[1455,28609,28610],{"align":24710},"docker rmi myimage",[1410,28612,28613,28616,28619],{},[1455,28614,28615],{"align":24710},"docker network",[1455,28617,28618],{"align":24710},"管理 Docker 网络。",[1455,28620,28621],{"align":24710},"docker network ls",[1410,28623,28624,28627,28630],{},[1455,28625,28626],{"align":24710},"docker volume",[1455,28628,28629],{"align":24710},"管理 Docker 数据卷。",[1455,28631,28632],{"align":24710},"docker volume ls",[1410,28634,28635,28638,28641],{},[1455,28636,28637],{"align":24710},"docker-compose up",[1455,28639,28640],{"align":24710},"启动 docker-compose.yml 中定义的所有服务。",[1455,28642,28637],{"align":24710},[1410,28644,28645,28648,28651],{},[1455,28646,28647],{"align":24710},"docker-compose down",[1455,28649,28650],{"align":24710},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1455,28652,28647],{"align":24710},[1410,28654,28655,28658,28661],{},[1455,28656,28657],{"align":24710},"docker info",[1455,28659,28660],{"align":24710},"显示 Docker 系统的详细信息。",[1455,28662,28657],{"align":24710},[1410,28664,28665,28668,28671],{},[1455,28666,28667],{"align":24710},"docker stats",[1455,28669,28670],{"align":24710},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1455,28672,28667],{"align":24710},[1410,28674,28675,28678,28681],{},[1455,28676,28677],{"align":24710},"docker inspect",[1455,28679,28680],{"align":24710},"查看容器或镜像的详细信息（JSON 格式）。",[1455,28682,28683],{"align":24710},"docker inspect container_id",[1410,28685,28686,28689,28692],{},[1455,28687,28688],{"align":24710},"docker save",[1455,28690,28691],{"align":24710},"将一个镜像保存为 tar 文件。",[1455,28693,28694],{"align":24710},"docker save -o myimage.tar myimage",[1410,28696,28697,28700,28703],{},[1455,28698,28699],{"align":24710},"docker load",[1455,28701,28702],{"align":24710},"从 tar 文件中加载镜像。",[1455,28704,28705],{"align":24710},"docker load -i myimage.tar",[1410,28707,28708,28711,28714],{},[1455,28709,28710],{"align":24710},"docker tag",[1455,28712,28713],{"align":24710},"为镜像添加标签（tag）。",[1455,28715,28716],{"align":24710},"docker tag myimage myimage:v1",[1410,28718,28719,28722,28725],{},[1455,28720,28721],{"align":24710},"docker buildx build",[1455,28723,28724],{"align":24710},"使用 Buildx 构建多架构镜像。",[1455,28726,28727],{"align":24710},"docker buildx build -t myimage .",[1410,28729,28730,28733,28736],{},[1455,28731,28732],{"align":24710},"docker buildx create",[1455,28734,28735],{"align":24710},"创建一个新的 Buildx 构建实例。",[1455,28737,28738],{"align":24710},"docker buildx create –use",[1410,28740,28741,28744,28747],{},[1455,28742,28743],{"align":24710},"docker buildx ls",[1455,28745,28746],{"align":24710},"列出所有可用的 Buildx 构建实例。",[1455,28748,28743],{"align":24710},[1410,28750,28751,28754,28757],{},[1455,28752,28753],{"align":24710},"docker buildx use",[1455,28755,28756],{"align":24710},"设置当前的 Buildx 构建实例。",[1455,28758,28759],{"align":24710},"docker buildx use mybuilder",[1410,28761,28762,28765,28768],{},[1455,28763,28764],{"align":24710},"docker buildx bake",[1455,28766,28767],{"align":24710},"使用 Bake 文件批量构建镜像。",[1455,28769,28770],{"align":24710},"docker buildx bake -f bake.hcl",[1410,28772,28773,28776,28779],{},[1455,28774,28775],{"align":24710},"docker buildx build –push",[1455,28777,28778],{"align":24710},"构建镜像并推送到镜像仓库。",[1455,28780,28781],{"align":24710},"docker buildx build –push -t myimage .",[1410,28783,28784,28787,28790],{},[1455,28785,28786],{"align":24710},"docker buildx build –platform",[1455,28788,28789],{"align":24710},"构建镜像并为多个平台生成支持。",[1455,28791,28792],{"align":24710},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28794,28795],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28797,28798],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,28800,28801],{},"docker images 可以查看已经下载的镜像",[19,28803,28804],{},[2585,28805],{"alt":35,"src":28806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28808,28809],{},[350,28810,28811],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28813,28814],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28816,28817],{},"docker container logs 查看容器日志",[19,28819,28820],{},"docker top 查看容器里的进程",[19,28822,28823],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[30,28825,28827],{"className":24796,"code":28826,"language":24798,"meta":35,"style":35},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[26,28828,28829],{"__ignoreMap":35},[39,28830,28831,28834,28837,28840],{"class":41,"line":42},[39,28832,28833],{"class":49},"如：docker",[39,28835,28836],{"class":237}," cp",[39,28838,28839],{"class":237}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[39,28841,28842],{"class":237}," \u002Fmydata\u002Fnginx\n",[19,28844,28845],{},"docker run时在启动容器的时候会有几个常用的选项：",[489,28847,28848,28851,28854],{},[331,28849,28850],{},"-d选项：表示后台运行",[331,28852,28853],{},"-P选项：随机端口映射",[331,28855,28856],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[476,28858,28860],{"id":28859},"_53run命令的参数非常重要",[350,28861,28862],{},"5.3.run命令的参数（非常重要）",[1404,28864,28865,28878],{},[1407,28866,28867],{},[1410,28868,28869,28872,28875],{},[1413,28870,28871],{"align":24710},"参数\u002F配置",[1413,28873,28874],{"align":24710},"功能说明",[1413,28876,28877],{"align":24710},"重要性与参考依据",[1450,28879,28880,28891,28902,28913,28924,28935,28946,28957,28968,28979,28990,29001,29012,29023,29034],{},[1410,28881,28882,28885,28888],{},[1455,28883,28884],{"align":24710},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1455,28886,28887],{"align":24710},"指定容器名称，便于后续管理",[1455,28889,28890],{"align":24710},"替代随机生成的容器名。",[1410,28892,28893,28896,28899],{},[1455,28894,28895],{"align":24710},"–gpus all",[1455,28897,28898],{"align":24710},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1455,28900,28901],{"align":24710},"用于CUDA加速等GPU依赖任务。",[1410,28903,28904,28907,28910],{},[1455,28905,28906],{"align":24710},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1455,28908,28909],{"align":24710},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1455,28911,28912],{"align":24710},"确保容器内GPU功能完整67。",[1410,28914,28915,28918,28921],{},[1455,28916,28917],{"align":24710},"-dit",[1455,28919,28920],{"align":24710},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1455,28922,28923],{"align":24710},"允许容器在后台运行并支持交互操作。",[1410,28925,28926,28929,28932],{},[1455,28927,28928],{"align":24710},"–privileged",[1455,28930,28931],{"align":24710},"赋予容器完全主机权限（可访问设备、内核模块等）",[1455,28933,28934],{"align":24710},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1410,28936,28937,28940,28943],{},[1455,28938,28939],{"align":24710},"–net=host",[1455,28941,28942],{"align":24710},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1455,28944,28945],{"align":24710},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1410,28947,28948,28951,28954],{},[1455,28949,28950],{"align":24710},"–group-add audio–group-add video–group-add dialout",[1455,28952,28953],{"align":24710},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1455,28955,28956],{"align":24710},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1410,28958,28959,28962,28965],{},[1455,28960,28961],{"align":24710},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1455,28963,28964],{"align":24710},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1455,28966,28967],{"align":24710},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1410,28969,28970,28973,28976],{},[1455,28971,28972],{"align":24710},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1455,28974,28975],{"align":24710},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1455,28977,28978],{"align":24710},"实现容器内图形显示。",[1410,28980,28981,28984,28987],{},[1455,28982,28983],{"align":24710},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1455,28985,28986],{"align":24710},"挂载X11认证文件（只读）",[1455,28988,28989],{"align":24710},"确保容器有权连接宿主机显示服务。",[1410,28991,28992,28995,28998],{},[1455,28993,28994],{"align":24710},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1455,28996,28997],{"align":24710},"挂载Wayland显示协议相关目录",[1455,28999,29000],{"align":24710},"支持Wayland协议的图形显示。",[1410,29002,29003,29006,29009],{},[1455,29004,29005],{"align":24710},"–ulimit nofile=1024:524288",[1455,29007,29008],{"align":24710},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1455,29010,29011],{"align":24710},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1410,29013,29014,29017,29020],{},[1455,29015,29016],{"align":24710},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1455,29018,29019],{"align":24710},"挂载宿主机用户目录到容器内同名路径",[1455,29021,29022],{"align":24710},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1410,29024,29025,29028,29031],{},[1455,29026,29027],{"align":24710},"-w \u002Fhome\u002Ftungchiahui",[1455,29029,29030],{"align":24710},"设置容器启动后的默认工作目录",[1455,29032,29033],{"align":24710},"直接进入项目路径，方便执行命令2324。",[1410,29035,29036,29039,29042],{},[1455,29037,29038],{"align":24710},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1455,29040,29041],{"align":24710},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1455,29043,29044],{"align":24710},"提供预配置的深度学习与机器人开发环境。",[19,29046,29047,29048,29050,29051,29054],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[26,29049,25551],{},"加不加",[26,29052,29053],{},"sudo -E","都无所谓。",[19,29056,29057,29058,29060,29061,29063,29064,29067,29068,29070],{},"用户已经被加到docker组了，不用",[26,29059,25551],{},"也行跑，其次，",[26,29062,25551],{},"运行的话，你的",[26,29065,29066],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[26,29069,29066],{},"更不可能变了。",[30,29072,29074],{"className":24796,"code":29073,"language":24798,"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",[26,29075,29076,29089,29099,29109,29121,29128,29135,29142,29152,29161,29170,29184,29196,29208,29217,29227,29236,29251,29284,29311,29322,29329],{"__ignoreMap":35},[39,29077,29078,29080,29082,29084,29087],{"class":41,"line":42},[39,29079,25551],{"class":49},[39,29081,27295],{"class":237},[39,29083,28205],{"class":237},[39,29085,29086],{"class":74}," --name=ros_opencv_cuda",[39,29088,25653],{"class":74},[39,29090,29091,29094,29097],{"class":41,"line":92},[39,29092,29093],{"class":53},"--gpus ",[39,29095,29096],{"class":237},"all",[39,29098,25653],{"class":74},[39,29100,29101,29104,29107],{"class":41,"line":112},[39,29102,29103],{"class":53},"-e ",[39,29105,29106],{"class":237},"NVIDIA_DRIVER_CAPABILITIES=all",[39,29108,25653],{"class":74},[39,29110,29111,29113,29116,29119],{"class":41,"line":118},[39,29112,29103],{"class":53},[39,29114,29115],{"class":237},"DISPLAY=",[39,29117,29118],{"class":53},"$DISPLAY ",[39,29120,27150],{"class":74},[39,29122,29123,29126],{"class":41,"line":125},[39,29124,29125],{"class":53},"-dit ",[39,29127,27150],{"class":74},[39,29129,29130,29133],{"class":41,"line":132},[39,29131,29132],{"class":53},"--privileged ",[39,29134,27150],{"class":74},[39,29136,29137,29140],{"class":41,"line":138},[39,29138,29139],{"class":53},"--net=host ",[39,29141,27150],{"class":74},[39,29143,29144,29147,29150],{"class":41,"line":169},[39,29145,29146],{"class":53},"--group-add ",[39,29148,29149],{"class":237},"audio",[39,29151,25653],{"class":74},[39,29153,29154,29156,29159],{"class":41,"line":190},[39,29155,29146],{"class":53},[39,29157,29158],{"class":237},"video",[39,29160,25653],{"class":74},[39,29162,29163,29165,29168],{"class":41,"line":202},[39,29164,29146],{"class":53},[39,29166,29167],{"class":237},"dialout",[39,29169,25653],{"class":74},[39,29171,29172,29174,29177,29179,29182],{"class":41,"line":207},[39,29173,29103],{"class":53},[39,29175,29176],{"class":237},"XAUTHORITY=",[39,29178,29066],{"class":53},[39,29180,29181],{"class":237},"\u002F.Xauthority",[39,29183,25653],{"class":74},[39,29185,29186,29188,29191,29194],{"class":41,"line":212},[39,29187,29103],{"class":53},[39,29189,29190],{"class":237},"WAYLAND_DISPLAY=",[39,29192,29193],{"class":53},"$WAYLAND_DISPLAY ",[39,29195,27150],{"class":74},[39,29197,29198,29200,29203,29206],{"class":41,"line":223},[39,29199,29103],{"class":53},[39,29201,29202],{"class":237},"XDG_RUNTIME_DIR=",[39,29204,29205],{"class":53},"$XDG_RUNTIME_DIR ",[39,29207,27150],{"class":74},[39,29209,29210,29212,29215],{"class":41,"line":228},[39,29211,29103],{"class":53},[39,29213,29214],{"class":237},"QT_QPA_PLATFORM=xcb",[39,29216,25653],{"class":74},[39,29218,29219,29222,29225],{"class":41,"line":263},[39,29220,29221],{"class":53},"-v ",[39,29223,29224],{"class":237},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[39,29226,25653],{"class":74},[39,29228,29229,29231,29234],{"class":41,"line":287},[39,29230,29221],{"class":53},[39,29232,29233],{"class":237},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[39,29235,25653],{"class":74},[39,29237,29238,29241,29244,29246,29249],{"class":41,"line":292},[39,29239,29240],{"class":53},"-v $HOME",[39,29242,29243],{"class":237},"\u002F.Xauthority:",[39,29245,29066],{"class":53},[39,29247,29248],{"class":237},"\u002F.Xauthority:ro",[39,29250,25653],{"class":74},[39,29252,29253,29255,29258,29260,29263,29266,29268,29271,29273,29275,29277,29279,29282],{"class":41,"line":305},[39,29254,29221],{"class":53},[39,29256,29257],{"class":237},"\u002Frun\u002Fuser\u002F",[39,29259,26074],{"class":53},[39,29261,29262],{"class":49},"id",[39,29264,29265],{"class":74}," -u",[39,29267,1692],{"class":53},[39,29269,29270],{"class":237},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[39,29272,26074],{"class":53},[39,29274,29262],{"class":49},[39,29276,29265],{"class":74},[39,29278,1692],{"class":53},[39,29280,29281],{"class":237},"\u002Fwayland-0",[39,29283,25653],{"class":74},[39,29285,29286,29288,29290,29292,29294,29296,29298,29301,29303,29305,29307,29309],{"class":41,"line":310},[39,29287,29221],{"class":53},[39,29289,29257],{"class":237},[39,29291,26074],{"class":53},[39,29293,29262],{"class":49},[39,29295,29265],{"class":74},[39,29297,1692],{"class":53},[39,29299,29300],{"class":237},":\u002Frun\u002Fuser\u002F",[39,29302,26074],{"class":53},[39,29304,29262],{"class":49},[39,29306,29265],{"class":74},[39,29308,255],{"class":53},[39,29310,27150],{"class":74},[39,29312,29313,29315,29317,29320],{"class":41,"line":321},[39,29314,29240],{"class":53},[39,29316,2119],{"class":237},[39,29318,29319],{"class":53},"$HOME ",[39,29321,27150],{"class":74},[39,29323,29324,29327],{"class":41,"line":713},[39,29325,29326],{"class":53},"-w $HOME ",[39,29328,27150],{"class":74},[39,29330,29331],{"class":41,"line":718},[39,29332,29333],{"class":53},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,29335,10093],{},[328,29337,29338,29346,29349,29352],{},[331,29339,29340,352,29342,29345],{},[26,29341,29106],{},[26,29343,29344],{},"--gpus all","没有英伟达显卡请注释。",[331,29347,29348],{},"--name后面请自己为容器起名。",[331,29350,29351],{},"最后一行仓库名称请你自己找对应的镜像填上。",[331,29353,29354,29355,29360],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24527,29356,29357],{},[350,29358,29359],{},"请不要加","。",[30,29362,29364],{"className":24796,"code":29363,"language":24798,"meta":35,"style":35},"--ulimit nofile=1024:524288 \\\n",[26,29365,29366],{"__ignoreMap":35},[39,29367,29368,29371,29374],{"class":41,"line":42},[39,29369,29370],{"class":49},"--ulimit",[39,29372,29373],{"class":237}," nofile=1024:524288",[39,29375,25653],{"class":74},[19,29377,29378,29379,29384],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24527,29380,29381],{},[350,29382,29383],{},"不建议","**.**",[30,29386,29388],{"className":24796,"code":29387,"language":24798,"meta":35,"style":35},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[26,29389,29390,29417,29426],{"__ignoreMap":35},[39,29391,29392,29395,29398,29400,29402,29404,29406,29408,29410,29413,29415],{"class":41,"line":42},[39,29393,29394],{"class":49},"--user",[39,29396,29397],{"class":53}," $(",[39,29399,29262],{"class":49},[39,29401,29265],{"class":74},[39,29403,1692],{"class":53},[39,29405,2119],{"class":237},[39,29407,26074],{"class":53},[39,29409,29262],{"class":49},[39,29411,29412],{"class":74}," -g",[39,29414,255],{"class":53},[39,29416,27150],{"class":74},[39,29418,29419,29421,29424],{"class":41,"line":92},[39,29420,29221],{"class":53},[39,29422,29423],{"class":237},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[39,29425,25653],{"class":74},[39,29427,29428,29430,29433],{"class":41,"line":112},[39,29429,29221],{"class":53},[39,29431,29432],{"class":237},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[39,29434,25653],{"class":74},[1192,29436,29437],{},"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":92,"depth":92,"links":29439},[29440,29441,29442],{"id":28438,"depth":112,"text":28439},{"id":28448,"depth":112,"text":28449},{"id":28859,"depth":112,"text":28862},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28430,"description":35},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29449,"title":29450,"body":29451,"description":35,"extension":1203,"meta":31074,"navigation":121,"path":31075,"seo":31076,"stem":31077,"__hash__":31078},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29452,"toc":31069},[29453,29456,29460,29463,29685,29689,29693,29696,29802,29807,29810,29815,29818,29823,29826,29831,29834,29846,29849,29854,29861,29889,29896,29972,29977,29980,30003,30005,30080,30085,30088,30092,30100,30105,30110,30114,30125,30131,30134,30137,30161,30164,30167,30195,30198,30201,30666,30669,30674,30679,30683,30706,30711,30715,30719,30722,30725,30728,30755,30758,30761,30779,30782,30785,30807,30815,30820,30825,30829,30832,30835,30838,30841,30886,30889,30907,30910,30915,30918,30939,30942,30998,31001,31006,31010,31013,31020,31023,31026,31031,31034,31050,31053,31066],[10,29454,29450],{"id":29455},"_6手动创建docker镜像",[476,29457,29459],{"id":29458},"_61dockerfile","6.1.DockerFile",[19,29461,29462],{},"常用命令：",[1404,29464,29465,29476],{},[1407,29466,29467],{},[1410,29468,29469,29472,29474],{},[1413,29470,29471],{"align":24710},"指令",[1413,29473,26844],{"align":24710},[1413,29475,28467],{"align":24710},[1450,29477,29478,29488,29504,29515,29526,29537,29548,29559,29570,29584,29598,29609,29623,29634,29645,29659,29674],{},[1410,29479,29480,29482,29485],{},[1455,29481,28345],{"align":24710},[1455,29483,29484],{"align":24710},"指定基础镜像，是 Dockerfile 的起点",[1455,29486,29487],{"align":24710},"FROM ubuntu:22.04",[1410,29489,29490,29493,29496],{},[1455,29491,29492],{"align":24710},"LABEL",[1455,29494,29495],{"align":24710},"添加元数据（如作者、版本等）",[1455,29497,29498,29499,29503],{"align":24710},"LABEL maintainer=”",[922,29500,29502],{"href":29501},"mailto:you@example.com","you@example.com","”",[1410,29505,29506,29509,29512],{},[1455,29507,29508],{"align":24710},"ENV",[1455,29510,29511],{"align":24710},"设置环境变量",[1455,29513,29514],{"align":24710},"ENV PORT=8080",[1410,29516,29517,29520,29523],{},[1455,29518,29519],{"align":24710},"ARG",[1455,29521,29522],{"align":24710},"构建参数，只在构建期间可用",[1455,29524,29525],{"align":24710},"ARG VERSION=1.0",[1410,29527,29528,29531,29534],{},[1455,29529,29530],{"align":24710},"RUN",[1455,29532,29533],{"align":24710},"构建镜像时运行命令",[1455,29535,29536],{"align":24710},"RUN apt-get update && apt-get install -y curl",[1410,29538,29539,29542,29545],{},[1455,29540,29541],{"align":24710},"COPY",[1455,29543,29544],{"align":24710},"复制文件到镜像中",[1455,29546,29547],{"align":24710},"COPY . \u002Fapp",[1410,29549,29550,29553,29556],{},[1455,29551,29552],{"align":24710},"ADD",[1455,29554,29555],{"align":24710},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1455,29557,29558],{"align":24710},"ADD archive.tar.gz \u002Fdata\u002F",[1410,29560,29561,29564,29567],{},[1455,29562,29563],{"align":24710},"WORKDIR",[1455,29565,29566],{"align":24710},"设置工作目录",[1455,29568,29569],{"align":24710},"WORKDIR \u002Fopt",[1410,29571,29572,29575,29578],{},[1455,29573,29574],{"align":24710},"CMD",[1455,29576,29577],{"align":24710},"设置容器启动时默认命令（可被 docker run 覆盖）",[1455,29579,29580,29581],{"align":24710},"CMD ",[39,29582,29583],{},"“node”, “index.js”",[1410,29585,29586,29589,29592],{},[1455,29587,29588],{"align":24710},"ENTRYPOINT",[1455,29590,29591],{"align":24710},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1455,29593,29594,29595],{"align":24710},"ENTRYPOINT ",[39,29596,29597],{},"“python3”",[1410,29599,29600,29603,29606],{},[1455,29601,29602],{"align":24710},"EXPOSE",[1455,29604,29605],{"align":24710},"声明镜像内服务监听的端口（不会自动映射）",[1455,29607,29608],{"align":24710},"EXPOSE 80",[1410,29610,29611,29614,29617],{},[1455,29612,29613],{"align":24710},"VOLUME",[1455,29615,29616],{"align":24710},"声明数据卷挂载点",[1455,29618,29619,29620],{"align":24710},"VOLUME ",[39,29621,29622],{},"“\u002Fdata”",[1410,29624,29625,29628,29631],{},[1455,29626,29627],{"align":24710},"USER",[1455,29629,29630],{"align":24710},"设置后续命令执行的用户",[1455,29632,29633],{"align":24710},"USER appuser",[1410,29635,29636,29639,29642],{},[1455,29637,29638],{"align":24710},"ONBUILD",[1455,29640,29641],{"align":24710},"当镜像作为其他镜像基础镜像时触发的构建指令",[1455,29643,29644],{"align":24710},"ONBUILD COPY . \u002Fsrc",[1410,29646,29647,29650,29653],{},[1455,29648,29649],{"align":24710},"SHELL",[1455,29651,29652],{"align":24710},"更改默认 shell，比如将 sh -c 改为 bash -c",[1455,29654,29655,29656],{"align":24710},"SHELL ",[39,29657,29658],{},"“\u002Fbin\u002Fbash”, “-c”",[1410,29660,29661,29664,29667],{},[1455,29662,29663],{"align":24710},"HEALTHCHECK",[1455,29665,29666],{"align":24710},"定义容器运行时的健康检查命令",[1455,29668,29669,29670],{"align":24710},"`HEALTHCHECK CMD curl –fail ",[922,29671,29672],{"href":29672,"rel":29673},"http:\u002F\u002Flocalhost:8080",[24839],[1410,29675,29676,29679,29682],{},[1455,29677,29678],{"align":24710},"STOPSIGNAL",[1455,29680,29681],{"align":24710},"容器停止时发送的信号",[1455,29683,29684],{"align":24710},"STOPSIGNAL SIGKILL",[476,29686,29688],{"id":29687},"_62自己创建容器","6.2.自己创建容器",[22971,29690,29692],{"id":29691},"_621手动创建","6.2.1.手动创建",[19,29694,29695],{},"在x86电脑上编译x86的：",[30,29697,29699],{"className":24796,"code":29698,"language":24798,"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",[26,29700,29701,29717,29721,29734,29738,29751,29755,29768,29772,29785,29789],{"__ignoreMap":35},[39,29702,29703,29705,29708,29711,29714],{"class":41,"line":42},[39,29704,27528],{"class":49},[39,29706,29707],{"class":237}," build",[39,29709,29710],{"class":74}," -t",[39,29712,29713],{"class":237}," ros-melodic-cuda118-cudnn8-bionic:latest",[39,29715,29716],{"class":237}," .\n",[39,29718,29719],{"class":41,"line":92},[39,29720,122],{"emptyLinePlaceholder":121},[39,29722,29723,29725,29727,29729,29732],{"class":41,"line":112},[39,29724,27528],{"class":49},[39,29726,29707],{"class":237},[39,29728,29710],{"class":74},[39,29730,29731],{"class":237}," ros-noetic-focal:latest",[39,29733,29716],{"class":237},[39,29735,29736],{"class":41,"line":118},[39,29737,122],{"emptyLinePlaceholder":121},[39,29739,29740,29742,29744,29746,29749],{"class":41,"line":125},[39,29741,27528],{"class":49},[39,29743,29707],{"class":237},[39,29745,29710],{"class":74},[39,29747,29748],{"class":237}," ros-humble-jammy:latest",[39,29750,29716],{"class":237},[39,29752,29753],{"class":41,"line":132},[39,29754,122],{"emptyLinePlaceholder":121},[39,29756,29757,29759,29761,29763,29766],{"class":41,"line":138},[39,29758,27528],{"class":49},[39,29760,29707],{"class":237},[39,29762,29710],{"class":74},[39,29764,29765],{"class":237}," ros-jazzy-noble:latest",[39,29767,29716],{"class":237},[39,29769,29770],{"class":41,"line":169},[39,29771,122],{"emptyLinePlaceholder":121},[39,29773,29774,29776,29778,29780,29783],{"class":41,"line":190},[39,29775,27528],{"class":49},[39,29777,29707],{"class":237},[39,29779,29710],{"class":74},[39,29781,29782],{"class":237}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[39,29784,29716],{"class":237},[39,29786,29787],{"class":41,"line":202},[39,29788,122],{"emptyLinePlaceholder":121},[39,29790,29791,29793,29795,29797,29800],{"class":41,"line":207},[39,29792,27528],{"class":49},[39,29794,29707],{"class":237},[39,29796,29710],{"class":74},[39,29798,29799],{"class":237}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[39,29801,29716],{"class":237},[19,29803,29804],{},[2585,29805],{"alt":35,"src":29806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29808,29809],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29811,29812],{},[2585,29813],{"alt":35,"src":29814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29816,29817],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[328,29819,29820],{},[331,29821,29822],{},"创建 Docker Hub 账户",[19,29824,29825],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[328,29827,29828],{"start":92},[331,29829,29830],{},"登录 Docker Hub",[19,29832,29833],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[30,29835,29837],{"className":24796,"code":29836,"language":24798,"meta":35,"style":35},"docker login\n",[26,29838,29839],{"__ignoreMap":35},[39,29840,29841,29843],{"class":41,"line":42},[39,29842,27528],{"class":49},[39,29844,29845],{"class":237}," login\n",[19,29847,29848],{},"输入你的 Docker Hub 用户名和密码进行验证。",[328,29850,29851],{},[331,29852,29853],{},"为你的镜像打标签",[19,29855,29856,29857,29860],{},"Docker Hub 使用 ",[26,29858,29859],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[30,29862,29864],{"className":24796,"code":29863,"language":24798,"meta":35,"style":35},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[26,29865,29866],{"__ignoreMap":35},[39,29867,29868,29870,29873,29875,29878,29881,29884,29886],{"class":41,"line":42},[39,29869,27528],{"class":49},[39,29871,29872],{"class":237}," tag",[39,29874,29765],{"class":237},[39,29876,29877],{"class":45}," \u003C",[39,29879,29880],{"class":237},"你的用户",[39,29882,29883],{"class":53},"名",[39,29885,2220],{"class":45},[39,29887,29888],{"class":237},"\u002Fros-jazzy-noble:latest\n",[19,29890,29891,29892,29895],{},"例如，如果你的 Docker Hub 用户名是 ",[26,29893,29894],{},"tungchiahui","，你应该执行：",[30,29897,29899],{"className":24796,"code":29898,"language":24798,"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",[26,29900,29901,29912,29916,29927,29931,29942,29946,29957,29961],{"__ignoreMap":35},[39,29902,29903,29905,29907,29909],{"class":41,"line":42},[39,29904,27528],{"class":49},[39,29906,29872],{"class":237},[39,29908,29731],{"class":237},[39,29910,29911],{"class":237}," tungchiahui\u002Fros-noetic-focal:latest\n",[39,29913,29914],{"class":41,"line":92},[39,29915,122],{"emptyLinePlaceholder":121},[39,29917,29918,29920,29922,29924],{"class":41,"line":112},[39,29919,27528],{"class":49},[39,29921,29872],{"class":237},[39,29923,29748],{"class":237},[39,29925,29926],{"class":237}," tungchiahui\u002Fros-humble-jammy:latest\n",[39,29928,29929],{"class":41,"line":118},[39,29930,122],{"emptyLinePlaceholder":121},[39,29932,29933,29935,29937,29939],{"class":41,"line":125},[39,29934,27528],{"class":49},[39,29936,29872],{"class":237},[39,29938,29765],{"class":237},[39,29940,29941],{"class":237}," tungchiahui\u002Fros-jazzy-noble:latest\n",[39,29943,29944],{"class":41,"line":132},[39,29945,122],{"emptyLinePlaceholder":121},[39,29947,29948,29950,29952,29954],{"class":41,"line":138},[39,29949,27528],{"class":49},[39,29951,29872],{"class":237},[39,29953,29782],{"class":237},[39,29955,29956],{"class":237}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[39,29958,29959],{"class":41,"line":169},[39,29960,122],{"emptyLinePlaceholder":121},[39,29962,29963,29965,29967,29969],{"class":41,"line":190},[39,29964,27528],{"class":49},[39,29966,29872],{"class":237},[39,29968,29799],{"class":237},[39,29970,29971],{"class":237}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[328,29973,29974],{"start":92},[331,29975,29976],{},"推送镜像到 Docker Hub",[19,29978,29979],{},"使用以下命令将镜像推送到 Docker Hub：",[30,29981,29983],{"className":24796,"code":29982,"language":24798,"meta":35,"style":35},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[26,29984,29985],{"__ignoreMap":35},[39,29986,29987,29989,29992,29994,29996,29998,30000],{"class":41,"line":42},[39,29988,27528],{"class":49},[39,29990,29991],{"class":237}," push",[39,29993,29877],{"class":45},[39,29995,29880],{"class":237},[39,29997,29883],{"class":53},[39,29999,2220],{"class":45},[39,30001,30002],{"class":237},"\u002Fros-noetic-jazzy-noble:latest\n",[19,30004,15606],{},[30,30006,30008],{"className":24796,"code":30007,"language":24798,"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",[26,30009,30010,30018,30022,30030,30034,30042,30046,30055,30059,30067,30071],{"__ignoreMap":35},[39,30011,30012,30014,30016],{"class":41,"line":42},[39,30013,27528],{"class":49},[39,30015,29991],{"class":237},[39,30017,29911],{"class":237},[39,30019,30020],{"class":41,"line":92},[39,30021,122],{"emptyLinePlaceholder":121},[39,30023,30024,30026,30028],{"class":41,"line":112},[39,30025,27528],{"class":49},[39,30027,29991],{"class":237},[39,30029,29926],{"class":237},[39,30031,30032],{"class":41,"line":118},[39,30033,122],{"emptyLinePlaceholder":121},[39,30035,30036,30038,30040],{"class":41,"line":125},[39,30037,27528],{"class":49},[39,30039,29991],{"class":237},[39,30041,29941],{"class":237},[39,30043,30044],{"class":41,"line":132},[39,30045,122],{"emptyLinePlaceholder":121},[39,30047,30048,30050,30052],{"class":41,"line":138},[39,30049,27528],{"class":49},[39,30051,29991],{"class":237},[39,30053,30054],{"class":237}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[39,30056,30057],{"class":41,"line":169},[39,30058,122],{"emptyLinePlaceholder":121},[39,30060,30061,30063,30065],{"class":41,"line":190},[39,30062,27528],{"class":49},[39,30064,29991],{"class":237},[39,30066,29971],{"class":237},[39,30068,30069],{"class":41,"line":202},[39,30070,122],{"emptyLinePlaceholder":121},[39,30072,30073,30075,30077],{"class":41,"line":207},[39,30074,27528],{"class":49},[39,30076,29991],{"class":237},[39,30078,30079],{"class":237}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[328,30081,30082],{"start":112},[331,30083,30084],{},"验证推送成功",[19,30086,30087],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,30089,30090],{},[350,30091,4867],{},[489,30093,30094,30097],{},[331,30095,30096],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[331,30098,30099],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,30101,30102],{},[2585,30103],{"alt":35,"src":30104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,30106,30107],{},[2585,30108],{"alt":35,"src":30109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22971,30111,30113],{"id":30112},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,30115,30116,30117,30120,30121,30124],{},"如果您想在 ",[350,30118,30119],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[350,30122,30123],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,30126,30127,30128],{},"1. ",[350,30129,30130],{},"启用 Docker 跨平台构建",[19,30132,30133],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,30135,30136],{},"第一步：启用 buildx（只需执行一次）",[30,30138,30140],{"className":24796,"code":30139,"language":24798,"meta":35,"style":35},"docker buildx create --name multiarch_builder --use\n",[26,30141,30142],{"__ignoreMap":35},[39,30143,30144,30146,30149,30152,30155,30158],{"class":41,"line":42},[39,30145,27528],{"class":49},[39,30147,30148],{"class":237}," buildx",[39,30150,30151],{"class":237}," create",[39,30153,30154],{"class":74}," --name",[39,30156,30157],{"class":237}," multiarch_builder",[39,30159,30160],{"class":74}," --use\n",[19,30162,30163],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,30165,30166],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[30,30168,30170],{"className":24796,"code":30169,"language":24798,"meta":35,"style":35},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[26,30171,30172],{"__ignoreMap":35},[39,30173,30174,30176,30178,30180,30183,30186,30189,30192],{"class":41,"line":42},[39,30175,27528],{"class":49},[39,30177,28205],{"class":237},[39,30179,28208],{"class":74},[39,30181,30182],{"class":74}," --privileged",[39,30184,30185],{"class":237}," multiarch\u002Fqemu-user-static",[39,30187,30188],{"class":74}," --reset",[39,30190,30191],{"class":74}," -p",[39,30193,30194],{"class":237}," yes\n",[19,30196,30197],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,30199,30200],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[30,30202,30204],{"className":24796,"code":30203,"language":24798,"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",[26,30205,30206,30248,30252,30257,30267,30277,30286,30292,30296,30300,30310,30318,30327,30333,30337,30341,30351,30359,30368,30374,30378,30382,30392,30400,30409,30415,30419,30423,30433,30441,30450,30456,30460,30464,30474,30482,30491,30497,30501,30505,30515,30523,30532,30538,30542,30546,30556,30564,30573,30579,30583,30587,30597,30605,30614,30620,30624,30628,30639,30647,30656,30662],{"__ignoreMap":35},[39,30207,30208,30210,30212,30214,30217,30220,30222,30224,30227,30229,30231,30233,30235,30238,30241,30243,30246],{"class":41,"line":42},[39,30209,27528],{"class":49},[39,30211,30148],{"class":237},[39,30213,29707],{"class":237},[39,30215,30216],{"class":74}," --platform",[39,30218,30219],{"class":237}," linux\u002Famd64,linux\u002Farm64",[39,30221,29710],{"class":74},[39,30223,29877],{"class":45},[39,30225,30226],{"class":237},"你的镜像",[39,30228,29883],{"class":53},[39,30230,2220],{"class":45},[39,30232,2119],{"class":237},[39,30234,2170],{"class":45},[39,30236,30237],{"class":237},"标",[39,30239,30240],{"class":53},"签",[39,30242,2220],{"class":45},[39,30244,30245],{"class":74}," --push",[39,30247,29716],{"class":237},[39,30249,30250],{"class":41,"line":92},[39,30251,122],{"emptyLinePlaceholder":121},[39,30253,30254],{"class":41,"line":112},[39,30255,30256],{"class":128},"# 例子：\n",[39,30258,30259,30261,30263,30265],{"class":41,"line":118},[39,30260,27528],{"class":49},[39,30262,30148],{"class":237},[39,30264,29707],{"class":237},[39,30266,25653],{"class":74},[39,30268,30269,30272,30275],{"class":41,"line":125},[39,30270,30271],{"class":53},"--platform ",[39,30273,30274],{"class":237},"linux\u002Famd64,linux\u002Farm64",[39,30276,25653],{"class":74},[39,30278,30279,30281,30284],{"class":41,"line":132},[39,30280,29710],{"class":74},[39,30282,30283],{"class":237}," tungchiahui\u002Fros:noetic-focal",[39,30285,25653],{"class":74},[39,30287,30288,30290],{"class":41,"line":138},[39,30289,30245],{"class":74},[39,30291,25653],{"class":74},[39,30293,30294],{"class":41,"line":169},[39,30295,29716],{"class":237},[39,30297,30298],{"class":41,"line":190},[39,30299,122],{"emptyLinePlaceholder":121},[39,30301,30302,30304,30306,30308],{"class":41,"line":202},[39,30303,27528],{"class":49},[39,30305,30148],{"class":237},[39,30307,29707],{"class":237},[39,30309,25653],{"class":74},[39,30311,30312,30314,30316],{"class":41,"line":207},[39,30313,30271],{"class":53},[39,30315,30274],{"class":237},[39,30317,25653],{"class":74},[39,30319,30320,30322,30325],{"class":41,"line":212},[39,30321,29710],{"class":74},[39,30323,30324],{"class":237}," tungchiahui\u002Fros:humble-jammy",[39,30326,25653],{"class":74},[39,30328,30329,30331],{"class":41,"line":223},[39,30330,30245],{"class":74},[39,30332,25653],{"class":74},[39,30334,30335],{"class":41,"line":228},[39,30336,29716],{"class":237},[39,30338,30339],{"class":41,"line":263},[39,30340,122],{"emptyLinePlaceholder":121},[39,30342,30343,30345,30347,30349],{"class":41,"line":287},[39,30344,27528],{"class":49},[39,30346,30148],{"class":237},[39,30348,29707],{"class":237},[39,30350,25653],{"class":74},[39,30352,30353,30355,30357],{"class":41,"line":292},[39,30354,30271],{"class":53},[39,30356,30274],{"class":237},[39,30358,25653],{"class":74},[39,30360,30361,30363,30366],{"class":41,"line":305},[39,30362,29710],{"class":74},[39,30364,30365],{"class":237}," tungchiahui\u002Fros:jazzy-noble",[39,30367,25653],{"class":74},[39,30369,30370,30372],{"class":41,"line":310},[39,30371,30245],{"class":74},[39,30373,25653],{"class":74},[39,30375,30376],{"class":41,"line":321},[39,30377,29716],{"class":237},[39,30379,30380],{"class":41,"line":713},[39,30381,122],{"emptyLinePlaceholder":121},[39,30383,30384,30386,30388,30390],{"class":41,"line":718},[39,30385,27295],{"class":49},[39,30387,30148],{"class":237},[39,30389,29707],{"class":237},[39,30391,25653],{"class":74},[39,30393,30394,30396,30398],{"class":41,"line":723},[39,30395,30271],{"class":53},[39,30397,30274],{"class":237},[39,30399,25653],{"class":74},[39,30401,30402,30404,30407],{"class":41,"line":729},[39,30403,29710],{"class":74},[39,30405,30406],{"class":237}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[39,30408,25653],{"class":74},[39,30410,30411,30413],{"class":41,"line":735},[39,30412,30245],{"class":74},[39,30414,25653],{"class":74},[39,30416,30417],{"class":41,"line":741},[39,30418,29716],{"class":237},[39,30420,30421],{"class":41,"line":747},[39,30422,122],{"emptyLinePlaceholder":121},[39,30424,30425,30427,30429,30431],{"class":41,"line":753},[39,30426,27528],{"class":49},[39,30428,30148],{"class":237},[39,30430,29707],{"class":237},[39,30432,25653],{"class":74},[39,30434,30435,30437,30439],{"class":41,"line":758},[39,30436,30271],{"class":53},[39,30438,30274],{"class":237},[39,30440,25653],{"class":74},[39,30442,30443,30445,30448],{"class":41,"line":763},[39,30444,29710],{"class":74},[39,30446,30447],{"class":237}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[39,30449,25653],{"class":74},[39,30451,30452,30454],{"class":41,"line":772},[39,30453,30245],{"class":74},[39,30455,25653],{"class":74},[39,30457,30458],{"class":41,"line":777},[39,30459,29716],{"class":237},[39,30461,30462],{"class":41,"line":785},[39,30463,122],{"emptyLinePlaceholder":121},[39,30465,30466,30468,30470,30472],{"class":41,"line":796},[39,30467,27295],{"class":49},[39,30469,30148],{"class":237},[39,30471,29707],{"class":237},[39,30473,25653],{"class":74},[39,30475,30476,30478,30480],{"class":41,"line":808},[39,30477,30271],{"class":53},[39,30479,30274],{"class":237},[39,30481,25653],{"class":74},[39,30483,30484,30486,30489],{"class":41,"line":823},[39,30485,29710],{"class":74},[39,30487,30488],{"class":237}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[39,30490,25653],{"class":74},[39,30492,30493,30495],{"class":41,"line":839},[39,30494,30245],{"class":74},[39,30496,25653],{"class":74},[39,30498,30499],{"class":41,"line":845},[39,30500,29716],{"class":237},[39,30502,30503],{"class":41,"line":856},[39,30504,122],{"emptyLinePlaceholder":121},[39,30506,30507,30509,30511,30513],{"class":41,"line":861},[39,30508,27528],{"class":49},[39,30510,30148],{"class":237},[39,30512,29707],{"class":237},[39,30514,25653],{"class":74},[39,30516,30517,30519,30521],{"class":41,"line":870},[39,30518,30271],{"class":53},[39,30520,30274],{"class":237},[39,30522,25653],{"class":74},[39,30524,30525,30527,30530],{"class":41,"line":9084},[39,30526,29710],{"class":74},[39,30528,30529],{"class":237}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[39,30531,25653],{"class":74},[39,30533,30534,30536],{"class":41,"line":9090},[39,30535,30245],{"class":74},[39,30537,25653],{"class":74},[39,30539,30540],{"class":41,"line":9102},[39,30541,29716],{"class":237},[39,30543,30544],{"class":41,"line":9114},[39,30545,122],{"emptyLinePlaceholder":121},[39,30547,30548,30550,30552,30554],{"class":41,"line":9126},[39,30549,27528],{"class":49},[39,30551,30148],{"class":237},[39,30553,29707],{"class":237},[39,30555,25653],{"class":74},[39,30557,30558,30560,30562],{"class":41,"line":10784},[39,30559,30271],{"class":53},[39,30561,30274],{"class":237},[39,30563,25653],{"class":74},[39,30565,30566,30568,30571],{"class":41,"line":10809},[39,30567,29710],{"class":74},[39,30569,30570],{"class":237}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[39,30572,25653],{"class":74},[39,30574,30575,30577],{"class":41,"line":10832},[39,30576,30245],{"class":74},[39,30578,25653],{"class":74},[39,30580,30581],{"class":41,"line":10856},[39,30582,29716],{"class":237},[39,30584,30585],{"class":41,"line":10861},[39,30586,122],{"emptyLinePlaceholder":121},[39,30588,30589,30591,30593,30595],{"class":41,"line":10866},[39,30590,27295],{"class":49},[39,30592,30148],{"class":237},[39,30594,29707],{"class":237},[39,30596,25653],{"class":74},[39,30598,30599,30601,30603],{"class":41,"line":10871},[39,30600,30271],{"class":53},[39,30602,30274],{"class":237},[39,30604,25653],{"class":74},[39,30606,30607,30609,30612],{"class":41,"line":10880},[39,30608,29710],{"class":74},[39,30610,30611],{"class":237}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[39,30613,25653],{"class":74},[39,30615,30616,30618],{"class":41,"line":10885},[39,30617,30245],{"class":74},[39,30619,25653],{"class":74},[39,30621,30622],{"class":41,"line":10891},[39,30623,29716],{"class":237},[39,30625,30626],{"class":41,"line":10912},[39,30627,122],{"emptyLinePlaceholder":121},[39,30629,30630,30633,30635,30637],{"class":41,"line":10918},[39,30631,30632],{"class":49},"  docker",[39,30634,30148],{"class":237},[39,30636,29707],{"class":237},[39,30638,25653],{"class":74},[39,30640,30641,30643,30645],{"class":41,"line":10932},[39,30642,30271],{"class":53},[39,30644,30274],{"class":237},[39,30646,25653],{"class":74},[39,30648,30649,30651,30654],{"class":41,"line":10938},[39,30650,29710],{"class":74},[39,30652,30653],{"class":237}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[39,30655,25653],{"class":74},[39,30657,30658,30660],{"class":41,"line":10965},[39,30659,30245],{"class":74},[39,30661,25653],{"class":74},[39,30663,30664],{"class":41,"line":10974},[39,30665,29716],{"class":237},[19,30667,30668],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,30670,30671],{},[2585,30672],{"alt":35,"src":30673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,30675,30676],{},[2585,30677],{"alt":35,"src":30678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22971,30680,30682],{"id":30681},"_623清除构建缓存","6.2.3.清除构建缓存",[30,30684,30686],{"className":24796,"code":30685,"language":24798,"meta":35,"style":35},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[26,30687,30688,30693],{"__ignoreMap":35},[39,30689,30690],{"class":41,"line":42},[39,30691,30692],{"class":128},"# 清理BuildKit构建缓存\n",[39,30694,30695,30697,30700,30703],{"class":41,"line":92},[39,30696,27528],{"class":49},[39,30698,30699],{"class":237}," builder",[39,30701,30702],{"class":237}," prune",[39,30704,30705],{"class":74}," -f\n",[19,30707,30708],{},[2585,30709],{"alt":35,"src":30710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[476,30712,30714],{"id":30713},"_63补充","6.3.补充",[22971,30716,30718],{"id":30717},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30720,30721],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30723,30724],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30726,30727],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[30,30729,30731],{"className":24796,"code":30730,"language":24798,"meta":35,"style":35},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[26,30732,30733,30740],{"__ignoreMap":35},[39,30734,30735,30737],{"class":41,"line":42},[39,30736,28345],{"class":49},[39,30738,30739],{"class":237}," nginx\n",[39,30741,30742,30744,30747,30750,30752],{"class":41,"line":92},[39,30743,29530],{"class":49},[39,30745,30746],{"class":237}," echo",[39,30748,30749],{"class":237}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[39,30751,27197],{"class":45},[39,30753,30754],{"class":237}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,30756,30757],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,30759,30760],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[30,30762,30764],{"className":24796,"code":30763,"language":24798,"meta":35,"style":35},"docker build -t nginx:tuling .\n",[26,30765,30766],{"__ignoreMap":35},[39,30767,30768,30770,30772,30774,30777],{"class":41,"line":42},[39,30769,27528],{"class":49},[39,30771,29707],{"class":237},[39,30773,29710],{"class":74},[39,30775,30776],{"class":237}," nginx:tuling",[39,30778,29716],{"class":237},[19,30780,30781],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30783,30784],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[30,30786,30788],{"className":24796,"code":30787,"language":24798,"meta":35,"style":35},"docker run -d -p 92:80 nginx:tuling\n",[26,30789,30790],{"__ignoreMap":35},[39,30791,30792,30794,30796,30799,30801,30804],{"class":41,"line":42},[39,30793,27528],{"class":49},[39,30795,28205],{"class":237},[39,30797,30798],{"class":74}," -d",[39,30800,30191],{"class":74},[39,30802,30803],{"class":237}," 92:80",[39,30805,30806],{"class":237}," nginx:tuling\n",[19,30808,30809,30810],{},"4、访问 ",[922,30811,30814],{"href":30812,"rel":30813},"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",[24839],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30816,30817],{},[2585,30818],{"alt":35,"src":30819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30821,30822],{},[2585,30823],{"alt":35,"src":30824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22971,30826,30828],{"id":30827},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30830,30831],{},"只需要知道大体流程即可",[19,30833,30834],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30836,30837],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30839,30840],{},"2、在Dockerfile中添加以下内容",[30,30842,30844],{"className":27066,"code":30843,"language":27068,"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",[26,30845,30846,30851,30856,30861,30866,30871,30876,30881],{"__ignoreMap":35},[39,30847,30848],{"class":41,"line":42},[39,30849,30850],{},"# 基于哪个镜像\n",[39,30852,30853],{"class":41,"line":92},[39,30854,30855],{},"From java:8\n",[39,30857,30858],{"class":41,"line":112},[39,30859,30860],{},"# 复制文件到容器\n",[39,30862,30863],{"class":41,"line":118},[39,30864,30865],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[39,30867,30868],{"class":41,"line":125},[39,30869,30870],{},"# 声明需要暴露的端口\n",[39,30872,30873],{"class":41,"line":132},[39,30874,30875],{},"EXPOSE 8877\n",[39,30877,30878],{"class":41,"line":138},[39,30879,30880],{},"# 配置容器启动后执行的命令\n",[39,30882,30883],{"class":41,"line":169},[39,30884,30885],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30887,30888],{},"3、使用docker build命令构建镜像",[30,30890,30892],{"className":24796,"code":30891,"language":24798,"meta":35,"style":35},"docker build -t tulingmall-member:0.0.5 .\n",[26,30893,30894],{"__ignoreMap":35},[39,30895,30896,30898,30900,30902,30905],{"class":41,"line":42},[39,30897,27528],{"class":49},[39,30899,29707],{"class":237},[39,30901,29710],{"class":74},[39,30903,30904],{"class":237}," tulingmall-member:0.0.5",[39,30906,29716],{"class":237},[19,30908,30909],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30911,30912],{},[2585,30913],{"alt":35,"src":30914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30916,30917],{},"4、启动镜像，加-d可在后台启动",[30,30919,30921],{"className":24796,"code":30920,"language":24798,"meta":35,"style":35},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[26,30922,30923],{"__ignoreMap":35},[39,30924,30925,30927,30929,30931,30933,30936],{"class":41,"line":42},[39,30926,27528],{"class":49},[39,30928,28205],{"class":237},[39,30930,30798],{"class":74},[39,30932,30191],{"class":74},[39,30934,30935],{"class":237}," 8877:8877",[39,30937,30938],{"class":237}," tulingmall-member:0.0.5\n",[19,30940,30941],{},"加上JVM参数：",[30,30943,30945],{"className":24796,"code":30944,"language":24798,"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",[26,30946,30947,30952,30967,30977,30986,30993],{"__ignoreMap":35},[39,30948,30949],{"class":41,"line":42},[39,30950,30951],{"class":128},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[39,30953,30954,30956,30958,30961,30963,30965],{"class":41,"line":92},[39,30955,27528],{"class":49},[39,30957,28205],{"class":237},[39,30959,30960],{"class":74},"  -d",[39,30962,30191],{"class":74},[39,30964,30935],{"class":237},[39,30966,25653],{"class":74},[39,30968,30969,30971,30974],{"class":41,"line":112},[39,30970,29103],{"class":53},[39,30972,30973],{"class":237},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[39,30975,30976],{"class":74},"  \\\n",[39,30978,30979,30981,30984],{"class":41,"line":118},[39,30980,29103],{"class":53},[39,30982,30983],{"class":237},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[39,30985,30976],{"class":74},[39,30987,30988,30991],{"class":41,"line":125},[39,30989,30990],{"class":53},"--cap-add=SYS_PTRACE  ",[39,30992,27150],{"class":74},[39,30994,30995],{"class":41,"line":132},[39,30996,30997],{"class":53},"tulingmall-member:0.0.5\n",[19,30999,31000],{},"5、访问会员服务接口",[19,31002,31003],{},[2585,31004],{"alt":35,"src":31005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22971,31007,31009],{"id":31008},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,31011,31012],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,31014,31015,31016],{},"阿里云docker镜像仓库：",[922,31017,31018],{"href":31018,"rel":31019},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24839],[19,31021,31022],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,31024,31025],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,31027,31028],{},[2585,31029],{"alt":35,"src":31030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,31032,31033],{},"要把镜像推送到镜像仓库",[30,31035,31037],{"className":24796,"code":31036,"language":24798,"meta":35,"style":35},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[26,31038,31039],{"__ignoreMap":35},[39,31040,31041,31043,31045,31047],{"class":41,"line":42},[39,31042,27528],{"class":49},[39,31044,29872],{"class":237},[39,31046,30904],{"class":237},[39,31048,31049],{"class":237}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,31051,31052],{},"最后将镜像推送到远程仓库",[30,31054,31056],{"className":24796,"code":31055,"language":24798,"meta":35,"style":35},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[26,31057,31058],{"__ignoreMap":35},[39,31059,31060,31062,31064],{"class":41,"line":42},[39,31061,27528],{"class":49},[39,31063,29991],{"class":237},[39,31065,31049],{"class":237},[1192,31067,31068],{},"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":92,"depth":92,"links":31070},[31071,31072,31073],{"id":29458,"depth":112,"text":29459},{"id":29687,"depth":112,"text":29688},{"id":30713,"depth":112,"text":30714},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29450,"description":35},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31080,"title":31081,"body":31082,"description":35,"extension":1203,"meta":31225,"navigation":121,"path":31226,"seo":31227,"stem":31228,"__hash__":31229},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31083,"toc":31223},[31084,31087,31092,31097,31100,31105,31110,31113,31118,31123,31126,31131,31134,31137,31140,31143,31146,31149,31169,31191,31194,31197,31217,31220],[10,31085,31081],{"id":31086},"_7vscode远程开发",[328,31088,31089],{},[331,31090,31091],{},"插件1：微软Docker工具",[19,31093,31094],{},[2585,31095],{"alt":35,"src":31096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31098,31099],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31101,31102],{},[2585,31103],{"alt":35,"src":31104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[328,31106,31107],{"start":92},[331,31108,31109],{},"插件2：微软Docker远程开发工具",[19,31111,31112],{},"下面这是远程开发的插件。",[19,31114,31115],{},[2585,31116],{"alt":35,"src":31117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31119,31120],{},[2585,31121],{"alt":35,"src":31122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31124,31125],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31127,31128],{},[2585,31129],{"alt":35,"src":31130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31132,31133],{},"安装完拓展之后，vscode进行链接：",[19,31135,31136],{},"1.按ctrl+shift+p",[19,31138,31139],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31141,31142],{},"3.选择目前运行的容器",[19,31144,31145],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31147,31148],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[30,31150,31152],{"className":24796,"code":31151,"language":24798,"meta":35,"style":35},"docker run -v 主机目录:容器目录 image-name\n",[26,31153,31154],{"__ignoreMap":35},[39,31155,31156,31158,31160,31163,31166],{"class":41,"line":42},[39,31157,27528],{"class":49},[39,31159,28205],{"class":237},[39,31161,31162],{"class":74}," -v",[39,31164,31165],{"class":237}," 主机目录:容器目录",[39,31167,31168],{"class":237}," image-name\n",[30,31170,31172],{"className":24796,"code":31171,"language":24798,"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",[26,31173,31174],{"__ignoreMap":35},[39,31175,31176,31178,31180,31183,31185,31188],{"class":41,"line":42},[39,31177,27528],{"class":49},[39,31179,28205],{"class":237},[39,31181,31182],{"class":74}," -it",[39,31184,31162],{"class":74},[39,31186,31187],{"class":237}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[39,31189,31190],{"class":237}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,31192,31193],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,31195,31196],{},"查看挂载情况：",[30,31198,31200],{"className":24796,"code":31199,"language":24798,"meta":35,"style":35},"mount | grep -i project\n",[26,31201,31202],{"__ignoreMap":35},[39,31203,31204,31207,31209,31212,31214],{"class":41,"line":42},[39,31205,31206],{"class":49},"mount",[39,31208,26084],{"class":45},[39,31210,31211],{"class":49}," grep",[39,31213,27405],{"class":74},[39,31215,31216],{"class":237}," project\n",[19,31218,31219],{},"也可以通过ls来进行查看",[1192,31221,31222],{},"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":92,"depth":92,"links":31224},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31081,"description":35},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31231,"title":31232,"body":31233,"description":24350,"extension":1203,"meta":31237,"navigation":121,"path":31239,"seo":31240,"stem":31241,"__hash__":31242},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31234,"toc":31235},[],{"title":35,"searchDepth":92,"depth":92,"links":31236},[],{"category":31238},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31232,"description":24350},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31244,"title":31245,"body":31246,"description":24350,"extension":1203,"meta":31250,"navigation":121,"path":31251,"seo":31252,"stem":31253,"__hash__":31254},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31247,"toc":31248},[],{"title":35,"searchDepth":92,"depth":92,"links":31249},[],{"category":31238},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31245,"description":24350},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31256,"title":31257,"body":31258,"description":24350,"extension":1203,"meta":31551,"navigation":121,"path":31552,"seo":31553,"stem":31554,"__hash__":31555},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31259,"toc":31549},[31260,31263,31271,31286,31291,31342,31345,31351,31538,31543,31546],[10,31261,31257],{"id":31262},"_1验证深度学习环境",[19,31264,31265,31266],{},"关于环境的安装，看",[922,31267,31270],{"href":31268,"rel":31269},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24839],"Pytorch-->深度学习",[19,31272,31273,31274,31277,31278,31281,31282,31285],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[26,31275,31276],{},"pytorch-cuda=12.4"," 是一个“ ",[350,31279,31280],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[350,31283,31284],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,31287,31288],{},[2585,31289],{"alt":35,"src":31290},"\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",[30,31292,31294],{"className":24796,"code":31293,"language":24798,"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",[26,31295,31296,31301],{"__ignoreMap":35},[39,31297,31298],{"class":41,"line":42},[39,31299,31300],{"class":128},"# CUDA 12.4\n",[39,31302,31303,31306,31308,31311,31314,31317,31320,31323,31325,31328,31331,31334,31337,31339],{"class":41,"line":92},[39,31304,31305],{"class":49},"conda",[39,31307,24808],{"class":237},[39,31309,31310],{"class":237}," pytorch==",[39,31312,31313],{"class":74},"2.5.1",[39,31315,31316],{"class":237}," torchvision==",[39,31318,31319],{"class":74},"0.20.1",[39,31321,31322],{"class":237}," torchaudio==",[39,31324,31313],{"class":74},[39,31326,31327],{"class":237}," pytorch-cuda=",[39,31329,31330],{"class":74},"12.4",[39,31332,31333],{"class":74}," -c",[39,31335,31336],{"class":237}," pytorch",[39,31338,31333],{"class":74},[39,31340,31341],{"class":237}," nvidia\n",[19,31343,31344],{},"）：",[19,31346,31347],{},[922,31348,31349],{"href":31349,"rel":31350},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24839],[30,31352,31356],{"className":31353,"code":31354,"language":31355,"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",[26,31357,31358,31363,31371,31376,31386,31402,31407,31417,31454,31461,31473,31489,31494,31504,31516,31526],{"__ignoreMap":35},[39,31359,31360],{"class":41,"line":42},[39,31361,31362],{"class":128},"# 对深度学习环境进行测试\n",[39,31364,31365,31368],{"class":41,"line":92},[39,31366,31367],{"class":45},"import",[39,31369,31370],{"class":53}," torch\n",[39,31372,31373],{"class":41,"line":112},[39,31374,31375],{"class":128},"# 查看cuda是否被激活\n",[39,31377,31378,31381,31383],{"class":41,"line":118},[39,31379,31380],{"class":53},"flag",[39,31382,1117],{"class":45},[39,31384,31385],{"class":53},"torch.cuda.is_available()\n",[39,31387,31388,31391,31393,31396,31399],{"class":41,"line":125},[39,31389,31390],{"class":74},"print",[39,31392,54],{"class":53},[39,31394,31395],{"class":237},"\"cuda:\"",[39,31397,31398],{"class":53},", flag)   ",[39,31400,31401],{"class":128},"#返回true的话说明被激活\n",[39,31403,31404],{"class":41,"line":132},[39,31405,31406],{"class":128},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[39,31408,31409,31412,31414],{"class":41,"line":138},[39,31410,31411],{"class":53},"ngpu",[39,31413,1117],{"class":45},[39,31415,31416],{"class":74},"1\n",[39,31418,31419,31422,31424,31427,31430,31432,31435,31438,31441,31443,31445,31447,31449,31452],{"class":41,"line":169},[39,31420,31421],{"class":53},"device",[39,31423,1117],{"class":45},[39,31425,31426],{"class":53},"torch.device(",[39,31428,31429],{"class":237},"\"cuda:0\"",[39,31431,2814],{"class":45},[39,31433,31434],{"class":53},"(torch.cuda.is_available() ",[39,31436,31437],{"class":45},"and",[39,31439,31440],{"class":53}," ngpu",[39,31442,2220],{"class":45},[39,31444,1457],{"class":74},[39,31446,255],{"class":53},[39,31448,2811],{"class":45},[39,31450,31451],{"class":237}," \"cpu\"",[39,31453,574],{"class":53},[39,31455,31456,31458],{"class":41,"line":190},[39,31457,31390],{"class":74},[39,31459,31460],{"class":53},"(device)\n",[39,31462,31463,31465,31468,31470],{"class":41,"line":202},[39,31464,31390],{"class":74},[39,31466,31467],{"class":53},"(torch.cuda.get_device_name(",[39,31469,1457],{"class":74},[39,31471,31472],{"class":53},"))\n",[39,31474,31475,31477,31480,31482,31484,31486],{"class":41,"line":207},[39,31476,31390],{"class":74},[39,31478,31479],{"class":53},"(torch.rand(",[39,31481,1339],{"class":74},[39,31483,426],{"class":53},[39,31485,1339],{"class":74},[39,31487,31488],{"class":53},").cuda())\n",[39,31490,31491],{"class":41,"line":212},[39,31492,31493],{"class":128},"# 查看cuda和cudnn的版本\n",[39,31495,31496,31499,31501],{"class":41,"line":223},[39,31497,31498],{"class":53},"cuda_version",[39,31500,1117],{"class":45},[39,31502,31503],{"class":53},"torch.version.cuda\n",[39,31505,31506,31508,31510,31513],{"class":41,"line":228},[39,31507,31390],{"class":74},[39,31509,54],{"class":53},[39,31511,31512],{"class":237},"\"cuda version\"",[39,31514,31515],{"class":53},",cuda_version)\n",[39,31517,31518,31521,31523],{"class":41,"line":263},[39,31519,31520],{"class":53},"cudnn_version",[39,31522,1117],{"class":45},[39,31524,31525],{"class":53},"torch.backends.cudnn.version()\n",[39,31527,31528,31530,31532,31535],{"class":41,"line":287},[39,31529,31390],{"class":74},[39,31531,54],{"class":53},[39,31533,31534],{"class":237},"\"cudnn version\"",[39,31536,31537],{"class":53},",cudnn_version)\n",[19,31539,31540],{},[2585,31541],{"alt":35,"src":31542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,31544,31545],{},"cuda:0 指的是一块显卡",[1192,31547,31548],{},"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":92,"depth":92,"links":31550},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31257,"description":24350},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31557,"title":31558,"body":31559,"description":24350,"extension":1203,"meta":51363,"navigation":121,"path":51364,"seo":51365,"stem":51366,"__hash__":51367},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31560,"toc":51357},[31561,31564,31568,31572,31575,31580,31585,31588,31593,31598,31603,31606,31610,31615,31619,31624,31627,31632,31635,31638,31641,31644,31649,31652,31657,31662,31667,31672,31675,31679,31682,31687,32291,32296,32299,32304,32307,32310,32774,32777,32780,32783,32786,34837,34840,34845,34850,35645,35648,35653,36431,36435,38094,38098,38812,38816,38820,38825,38830,38835,38838,38843,38848,38853,38858,38863,38867,38872,40154,40159,40162,40165,40168,40323,40326,40329,41545,41550,42245,42249,42253,42258,42263,42266,42271,42276,42281,42286,42291,42296,42301,42306,42311,42316,42321,42326,42331,42336,42341,42346,42351,42356,42361,42366,42371,42376,42381,42386,42391,42396,42401,42406,42411,42416,42420,42424,42427,43905,43909,45556,45560,46254,46258,46261,46264,46808,46811,46815,46818,48215,48219,48222,48800,50587,50591,50594,51354],[10,31562,31558],{"id":31563},"_2经典神经网络",[476,31565,31567],{"id":31566},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22971,31569,31571],{"id":31570},"_211原理介绍","2.1.1.原理介绍",[19,31573,31574],{},"LeNet-5",[328,31576,31577],{},[331,31578,31579],{},"原理",[19,31581,31582],{},[2585,31583],{"alt":35,"src":31584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,31586,31587],{},"B是batch批次；C是channel通道",[328,31589,31590],{"start":92},[331,31591,31592],{},"网络参数详细",[19,31594,31595],{},[2585,31596],{"alt":35,"src":31597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,31599,31600],{},[2585,31601],{"alt":35,"src":31602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[19,31604,31605],{},"AlexNet",[328,31607,31608],{},[331,31609,31579],{},[19,31611,31612],{},[2585,31613],{"alt":35,"src":31614},"\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",[328,31616,31617],{"start":92},[331,31618,31592],{},[19,31620,31621],{},[2585,31622],{"alt":35,"src":31623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,31625,31626],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31628,31629],{},[2585,31630],{"alt":35,"src":31631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[19,31633,31634],{},"数据处理中的图像增强操作:",[19,31636,31637],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31639,31640],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31642,31643],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,31645,31646],{},[2585,31647],{"alt":35,"src":31648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[19,31650,31651],{},"提升网络精确度的方法：LRN正则化",[19,31653,31654],{},[2585,31655],{"alt":35,"src":31656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[19,31658,31659],{},[2585,31660],{"alt":35,"src":31661},"\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",[328,31663,31664],{"start":112},[331,31665,31666],{},"AlexNet的总结",[19,31668,31669],{},[2585,31670],{"alt":35,"src":31671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,31673,31674],{},"比LeNet模型要深一丢丢",[22971,31676,31678],{"id":31677},"_212代码实现","2.1.2.代码实现",[19,31680,31681],{},"（1）LeNet",[328,31683,31684],{},[331,31685,31686],{},"模型搭建",[30,31688,31690],{"className":31353,"code":31689,"language":31355,"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",[26,31691,31692,31697,31703,31708,31721,31726,31738,31742,31762,31767,31772,31783,31788,31807,31811,31816,31865,31877,31882,31911,31946,31973,31978,31990,31995,32015,32034,32053,32057,32062,32072,32089,32100,32115,32126,32137,32152,32167,32178,32185,32189,32203,32208,32231,32236,32241,32246,32250,32255,32260,32270],{"__ignoreMap":35},[39,31693,31694],{"class":41,"line":42},[39,31695,31696],{"class":128},"# 导入库\n",[39,31698,31699,31701],{"class":41,"line":92},[39,31700,31367],{"class":45},[39,31702,31370],{"class":53},[39,31704,31705],{"class":41,"line":112},[39,31706,31707],{"class":128},"# 导入神经网络层\n",[39,31709,31710,31713,31716,31718],{"class":41,"line":118},[39,31711,31712],{"class":45},"from",[39,31714,31715],{"class":53}," torch ",[39,31717,31367],{"class":45},[39,31719,31720],{"class":53}," nn\n",[39,31722,31723],{"class":41,"line":125},[39,31724,31725],{"class":128},"# 导入展示神经网络参数的包\n",[39,31727,31728,31730,31733,31735],{"class":41,"line":132},[39,31729,31712],{"class":45},[39,31731,31732],{"class":53}," torchsummary ",[39,31734,31367],{"class":45},[39,31736,31737],{"class":53}," summary\n",[39,31739,31740],{"class":41,"line":138},[39,31741,122],{"emptyLinePlaceholder":121},[39,31743,31744,31746,31749,31751,31754,31756,31759],{"class":41,"line":169},[39,31745,15667],{"class":45},[39,31747,31748],{"class":49}," LeNet",[39,31750,54],{"class":53},[39,31752,31753],{"class":49},"nn",[39,31755,1819],{"class":53},[39,31757,31758],{"class":49},"Module",[39,31760,31761],{"class":53},"):\n",[39,31763,31764],{"class":41,"line":190},[39,31765,31766],{"class":128},"    # 模型初始化:\n",[39,31768,31769],{"class":41,"line":202},[39,31770,31771],{"class":128},"    # 定义一些网络层和激活函数\n",[39,31773,31774,31777,31780],{"class":41,"line":207},[39,31775,31776],{"class":45},"    def",[39,31778,31779],{"class":74}," __init__",[39,31781,31782],{"class":53},"(self):\n",[39,31784,31785],{"class":41,"line":212},[39,31786,31787],{"class":128},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[39,31789,31790,31793,31796,31799,31802,31805],{"class":41,"line":223},[39,31791,31792],{"class":74},"        super",[39,31794,31795],{"class":53},"(LeNet,",[39,31797,31798],{"class":74},"self",[39,31800,31801],{"class":53},").",[39,31803,31804],{"class":74},"__init__",[39,31806,537],{"class":53},[39,31808,31809],{"class":41,"line":228},[39,31810,122],{"emptyLinePlaceholder":121},[39,31812,31813],{"class":41,"line":263},[39,31814,31815],{"class":128},"        # 定义网络层\n",[39,31817,31818,31821,31824,31826,31829,31832,31834,31836,31838,31841,31843,31845,31847,31850,31852,31854,31856,31859,31861,31863],{"class":41,"line":287},[39,31819,31820],{"class":74},"        self",[39,31822,31823],{"class":53},".c1",[39,31825,1117],{"class":45},[39,31827,31828],{"class":53},"nn.Conv2d(",[39,31830,31831],{"class":59},"in_channels",[39,31833,1117],{"class":45},[39,31835,1483],{"class":74},[39,31837,426],{"class":53},[39,31839,31840],{"class":59},"out_channels",[39,31842,1117],{"class":45},[39,31844,1608],{"class":74},[39,31846,426],{"class":53},[39,31848,31849],{"class":59},"kernel_size",[39,31851,1117],{"class":45},[39,31853,1583],{"class":74},[39,31855,426],{"class":53},[39,31857,31858],{"class":59},"padding",[39,31860,1117],{"class":45},[39,31862,1345],{"class":74},[39,31864,574],{"class":53},[39,31866,31867,31869,31872,31874],{"class":41,"line":292},[39,31868,31820],{"class":74},[39,31870,31871],{"class":53},".sig",[39,31873,1117],{"class":45},[39,31875,31876],{"class":53},"nn.Sigmoid()\n",[39,31878,31879],{"class":41,"line":305},[39,31880,31881],{"class":128},"        # 定义池化\n",[39,31883,31884,31886,31889,31891,31894,31896,31898,31900,31902,31905,31907,31909],{"class":41,"line":310},[39,31885,31820],{"class":74},[39,31887,31888],{"class":53},".s2",[39,31890,1117],{"class":45},[39,31892,31893],{"class":53},"nn.AvgPool2d(",[39,31895,31849],{"class":59},[39,31897,1117],{"class":45},[39,31899,1345],{"class":74},[39,31901,426],{"class":53},[39,31903,31904],{"class":59},"stride",[39,31906,1117],{"class":45},[39,31908,1345],{"class":74},[39,31910,574],{"class":53},[39,31912,31913,31915,31918,31920,31922,31924,31926,31928,31930,31932,31934,31936,31938,31940,31942,31944],{"class":41,"line":321},[39,31914,31820],{"class":74},[39,31916,31917],{"class":53},".c3",[39,31919,1117],{"class":45},[39,31921,31828],{"class":53},[39,31923,31831],{"class":59},[39,31925,1117],{"class":45},[39,31927,1608],{"class":74},[39,31929,426],{"class":53},[39,31931,31840],{"class":59},[39,31933,1117],{"class":45},[39,31935,1862],{"class":74},[39,31937,426],{"class":53},[39,31939,31849],{"class":59},[39,31941,1117],{"class":45},[39,31943,1583],{"class":74},[39,31945,574],{"class":53},[39,31947,31948,31950,31953,31955,31957,31959,31961,31963,31965,31967,31969,31971],{"class":41,"line":713},[39,31949,31820],{"class":74},[39,31951,31952],{"class":53},".s4",[39,31954,1117],{"class":45},[39,31956,31893],{"class":53},[39,31958,31849],{"class":59},[39,31960,1117],{"class":45},[39,31962,1345],{"class":74},[39,31964,426],{"class":53},[39,31966,31904],{"class":59},[39,31968,1117],{"class":45},[39,31970,1345],{"class":74},[39,31972,574],{"class":53},[39,31974,31975],{"class":41,"line":718},[39,31976,31977],{"class":128},"        # 定义平展层\n",[39,31979,31980,31982,31985,31987],{"class":41,"line":723},[39,31981,31820],{"class":74},[39,31983,31984],{"class":53},".flatten",[39,31986,1117],{"class":45},[39,31988,31989],{"class":53},"nn.Flatten()\n",[39,31991,31992],{"class":41,"line":729},[39,31993,31994],{"class":128},"        # 定义全连接层\n",[39,31996,31997,31999,32002,32004,32007,32009,32011,32013],{"class":41,"line":735},[39,31998,31820],{"class":74},[39,32000,32001],{"class":53},".f5",[39,32003,1117],{"class":45},[39,32005,32006],{"class":53},"nn.Linear(",[39,32008,5070],{"class":74},[39,32010,426],{"class":53},[39,32012,2077],{"class":74},[39,32014,574],{"class":53},[39,32016,32017,32019,32022,32024,32026,32028,32030,32032],{"class":41,"line":741},[39,32018,31820],{"class":74},[39,32020,32021],{"class":53},".f6",[39,32023,1117],{"class":45},[39,32025,32006],{"class":53},[39,32027,2077],{"class":74},[39,32029,426],{"class":53},[39,32031,1971],{"class":74},[39,32033,574],{"class":53},[39,32035,32036,32038,32041,32043,32045,32047,32049,32051],{"class":41,"line":747},[39,32037,31820],{"class":74},[39,32039,32040],{"class":53},".f7",[39,32042,1117],{"class":45},[39,32044,32006],{"class":53},[39,32046,1971],{"class":74},[39,32048,426],{"class":53},[39,32050,423],{"class":74},[39,32052,574],{"class":53},[39,32054,32055],{"class":41,"line":753},[39,32056,122],{"emptyLinePlaceholder":121},[39,32058,32059],{"class":41,"line":758},[39,32060,32061],{"class":128},"    # 写工具->写前向传播\n",[39,32063,32064,32066,32069],{"class":41,"line":763},[39,32065,31776],{"class":45},[39,32067,32068],{"class":49}," forward",[39,32070,32071],{"class":53},"(self,x):\n",[39,32073,32074,32077,32079,32081,32084,32086],{"class":41,"line":772},[39,32075,32076],{"class":53},"        x",[39,32078,1117],{"class":45},[39,32080,31798],{"class":74},[39,32082,32083],{"class":53},".sig(",[39,32085,31798],{"class":74},[39,32087,32088],{"class":53},".c1(x))\n",[39,32090,32091,32093,32095,32097],{"class":41,"line":777},[39,32092,32076],{"class":53},[39,32094,1117],{"class":45},[39,32096,31798],{"class":74},[39,32098,32099],{"class":53},".s2(x)\n",[39,32101,32102,32104,32106,32108,32110,32112],{"class":41,"line":785},[39,32103,32076],{"class":53},[39,32105,1117],{"class":45},[39,32107,31798],{"class":74},[39,32109,32083],{"class":53},[39,32111,31798],{"class":74},[39,32113,32114],{"class":53},".c3(x))\n",[39,32116,32117,32119,32121,32123],{"class":41,"line":796},[39,32118,32076],{"class":53},[39,32120,1117],{"class":45},[39,32122,31798],{"class":74},[39,32124,32125],{"class":53},".s4(x)\n",[39,32127,32128,32130,32132,32134],{"class":41,"line":808},[39,32129,32076],{"class":53},[39,32131,1117],{"class":45},[39,32133,31798],{"class":74},[39,32135,32136],{"class":53},".flatten(x)\n",[39,32138,32139,32141,32143,32145,32147,32149],{"class":41,"line":823},[39,32140,32076],{"class":53},[39,32142,1117],{"class":45},[39,32144,31798],{"class":74},[39,32146,32083],{"class":53},[39,32148,31798],{"class":74},[39,32150,32151],{"class":53},".f5(x))\n",[39,32153,32154,32156,32158,32160,32162,32164],{"class":41,"line":839},[39,32155,32076],{"class":53},[39,32157,1117],{"class":45},[39,32159,31798],{"class":74},[39,32161,32083],{"class":53},[39,32163,31798],{"class":74},[39,32165,32166],{"class":53},".f6(x))\n",[39,32168,32169,32171,32173,32175],{"class":41,"line":845},[39,32170,32076],{"class":53},[39,32172,1117],{"class":45},[39,32174,31798],{"class":74},[39,32176,32177],{"class":53},".f7(x)\n",[39,32179,32180,32182],{"class":41,"line":856},[39,32181,15725],{"class":45},[39,32183,32184],{"class":53}," x\n",[39,32186,32187],{"class":41,"line":861},[39,32188,122],{"emptyLinePlaceholder":121},[39,32190,32191,32193,32196,32198,32201],{"class":41,"line":870},[39,32192,2654],{"class":45},[39,32194,32195],{"class":74}," __name__",[39,32197,4032],{"class":45},[39,32199,32200],{"class":237},"\"__main__\"",[39,32202,4822],{"class":53},[39,32204,32205],{"class":41,"line":9084},[39,32206,32207],{"class":128},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[39,32209,32210,32213,32215,32217,32220,32222,32225,32227,32229],{"class":41,"line":9090},[39,32211,32212],{"class":53},"    device",[39,32214,1117],{"class":45},[39,32216,31426],{"class":53},[39,32218,32219],{"class":237},"\"cuda\"",[39,32221,2814],{"class":45},[39,32223,32224],{"class":53}," torch.cuda.is_available() ",[39,32226,2811],{"class":45},[39,32228,31451],{"class":237},[39,32230,574],{"class":53},[39,32232,32233],{"class":41,"line":9102},[39,32234,32235],{"class":128},"    # 如果就是想指定用cpu用下方代码:\n",[39,32237,32238],{"class":41,"line":9114},[39,32239,32240],{"class":128},"    # device=\"cpu\"\n",[39,32242,32243],{"class":41,"line":9126},[39,32244,32245],{"class":128},"    # print(device)\n",[39,32247,32248],{"class":41,"line":10784},[39,32249,122],{"emptyLinePlaceholder":121},[39,32251,32252],{"class":41,"line":10809},[39,32253,32254],{"class":128},"    # 实例化模型\n",[39,32256,32257],{"class":41,"line":10832},[39,32258,32259],{"class":128},"    # 将模型放到设备中去运行\n",[39,32261,32262,32265,32267],{"class":41,"line":10856},[39,32263,32264],{"class":53},"    model",[39,32266,1117],{"class":45},[39,32268,32269],{"class":53},"LeNet().to(device)\n",[39,32271,32272,32275,32278,32280,32282,32284,32286,32288],{"class":41,"line":10861},[39,32273,32274],{"class":74},"    print",[39,32276,32277],{"class":53},"(summary(model,(",[39,32279,1483],{"class":74},[39,32281,426],{"class":53},[39,32283,2161],{"class":74},[39,32285,426],{"class":53},[39,32287,2161],{"class":74},[39,32289,32290],{"class":53},")))\n",[19,32292,32293],{},[2585,32294],{"alt":35,"src":32295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[19,32297,32298],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[328,32300,32301],{"start":92},[331,32302,32303],{},"训练",[19,32305,32306],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,32308,32309],{},"在训练之前可以将数据展示看一下",[30,32311,32313],{"className":31353,"code":32312,"language":31355,"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",[26,32314,32315,32320,32325,32337,32349,32362,32367,32379,32384,32396,32401,32413,32417,32421,32442,32454,32459,32480,32491,32495,32500,32518,32529,32534,32545,32550,32561,32565,32570,32585,32598,32603,32608,32621,32634,32647,32652,32656,32661,32681,32698,32718,32731,32744,32754,32769],{"__ignoreMap":35},[39,32316,32317],{"class":41,"line":42},[39,32318,32319],{"class":128},"# 建立画图的函数，用于展示数据\n",[39,32321,32322],{"class":41,"line":92},[39,32323,32324],{"class":128},"# torchvision中包含很多内置的数据集\n",[39,32326,32327,32329,32332,32334],{"class":41,"line":112},[39,32328,31712],{"class":45},[39,32330,32331],{"class":53}," sklearn.externals.array_api_compat.torch ",[39,32333,31367],{"class":45},[39,32335,32336],{"class":53}," squeeze\n",[39,32338,32339,32341,32344,32346],{"class":41,"line":118},[39,32340,31712],{"class":45},[39,32342,32343],{"class":53}," torchvision.datasets ",[39,32345,31367],{"class":45},[39,32347,32348],{"class":53}," FashionMNIST\n",[39,32350,32351,32353,32356,32359],{"class":41,"line":125},[39,32352,31367],{"class":45},[39,32354,32355],{"class":53}," numpy ",[39,32357,32358],{"class":45},"as",[39,32360,32361],{"class":53}," np\n",[39,32363,32364],{"class":41,"line":132},[39,32365,32366],{"class":128},"# 引入处理数据集的包\n",[39,32368,32369,32371,32374,32376],{"class":41,"line":138},[39,32370,31712],{"class":45},[39,32372,32373],{"class":53}," torchvision ",[39,32375,31367],{"class":45},[39,32377,32378],{"class":53}," transforms\n",[39,32380,32381],{"class":41,"line":169},[39,32382,32383],{"class":128},"# 从torch库中引入数据处理的包\n",[39,32385,32386,32388,32391,32393],{"class":41,"line":190},[39,32387,31367],{"class":45},[39,32389,32390],{"class":53}," torch.utils.data ",[39,32392,32358],{"class":45},[39,32394,32395],{"class":53}," Data\n",[39,32397,32398],{"class":41,"line":202},[39,32399,32400],{"class":128},"# 导入画图的库\n",[39,32402,32403,32405,32408,32410],{"class":41,"line":207},[39,32404,31367],{"class":45},[39,32406,32407],{"class":53}," matplotlib.pyplot ",[39,32409,32358],{"class":45},[39,32411,32412],{"class":53}," plt\n",[39,32414,32415],{"class":41,"line":212},[39,32416,122],{"emptyLinePlaceholder":121},[39,32418,32419],{"class":41,"line":223},[39,32420,122],{"emptyLinePlaceholder":121},[39,32422,32423,32426,32428,32431,32434,32436,32439],{"class":41,"line":228},[39,32424,32425],{"class":53},"train_data",[39,32427,1117],{"class":45},[39,32429,32430],{"class":53},"FashionMNIST(",[39,32432,32433],{"class":59},"root",[39,32435,1117],{"class":45},[39,32437,32438],{"class":237},"'.\u002Fdata'",[39,32440,32441],{"class":53},",\n",[39,32443,32444,32447,32449,32452],{"class":41,"line":263},[39,32445,32446],{"class":59},"                        train",[39,32448,1117],{"class":45},[39,32450,32451],{"class":74},"True",[39,32453,32441],{"class":53},[39,32455,32456],{"class":41,"line":287},[39,32457,32458],{"class":128},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[39,32460,32461,32464,32466,32469,32472,32474,32477],{"class":41,"line":292},[39,32462,32463],{"class":59},"                        transform",[39,32465,1117],{"class":45},[39,32467,32468],{"class":53},"transforms.Compose([transforms.Resize(",[39,32470,32471],{"class":59},"size",[39,32473,1117],{"class":45},[39,32475,32476],{"class":74},"224",[39,32478,32479],{"class":53},"),transforms.ToTensor()]),\n",[39,32481,32482,32485,32487,32489],{"class":41,"line":305},[39,32483,32484],{"class":59},"                        download",[39,32486,1117],{"class":45},[39,32488,32451],{"class":74},[39,32490,574],{"class":53},[39,32492,32493],{"class":41,"line":310},[39,32494,122],{"emptyLinePlaceholder":121},[39,32496,32497],{"class":41,"line":321},[39,32498,32499],{"class":128},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[39,32501,32502,32505,32507,32510,32513,32515],{"class":41,"line":713},[39,32503,32504],{"class":53},"train_loader",[39,32506,1117],{"class":45},[39,32508,32509],{"class":53},"Data.DataLoader(",[39,32511,32512],{"class":59},"dataset",[39,32514,1117],{"class":45},[39,32516,32517],{"class":53},"train_data,\n",[39,32519,32520,32523,32525,32527],{"class":41,"line":718},[39,32521,32522],{"class":59},"                             batch_size",[39,32524,1117],{"class":45},[39,32526,1469],{"class":74},[39,32528,32441],{"class":53},[39,32530,32531],{"class":41,"line":723},[39,32532,32533],{"class":128},"                             # 数据是否打乱\n",[39,32535,32536,32539,32541,32543],{"class":41,"line":729},[39,32537,32538],{"class":59},"                             shuffle",[39,32540,1117],{"class":45},[39,32542,32451],{"class":74},[39,32544,32441],{"class":53},[39,32546,32547],{"class":41,"line":735},[39,32548,32549],{"class":128},"                             # 规定加载数据的进程\n",[39,32551,32552,32555,32557,32559],{"class":41,"line":741},[39,32553,32554],{"class":59},"                             num_workers",[39,32556,1117],{"class":45},[39,32558,1457],{"class":74},[39,32560,574],{"class":53},[39,32562,32563],{"class":41,"line":747},[39,32564,122],{"emptyLinePlaceholder":121},[39,32566,32567],{"class":41,"line":753},[39,32568,32569],{"class":128},"# 获得一个batch的数据\n",[39,32571,32572,32574,32577,32579,32582],{"class":41,"line":758},[39,32573,4108],{"class":45},[39,32575,32576],{"class":53}," step,(b_x,b_y) ",[39,32578,27018],{"class":45},[39,32580,32581],{"class":74}," enumerate",[39,32583,32584],{"class":53},"(train_loader):\n",[39,32586,32587,32589,32592,32594,32596],{"class":41,"line":763},[39,32588,4184],{"class":45},[39,32590,32591],{"class":53}," step ",[39,32593,2220],{"class":45},[39,32595,315],{"class":74},[39,32597,4822],{"class":53},[39,32599,32600],{"class":41,"line":772},[39,32601,32602],{"class":45},"        break\n",[39,32604,32605],{"class":41,"line":777},[39,32606,32607],{"class":128},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[39,32609,32610,32613,32615,32618],{"class":41,"line":785},[39,32611,32612],{"class":53},"batch_x",[39,32614,1117],{"class":45},[39,32616,32617],{"class":53},"b_x.squeeze().numpy()  ",[39,32619,32620],{"class":128},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[39,32622,32623,32626,32628,32631],{"class":41,"line":796},[39,32624,32625],{"class":53},"batch_y",[39,32627,1117],{"class":45},[39,32629,32630],{"class":53},"b_y.numpy()   ",[39,32632,32633],{"class":128},"#将张量转换成功numpy数组\n",[39,32635,32636,32639,32641,32644],{"class":41,"line":808},[39,32637,32638],{"class":53},"class_label",[39,32640,1117],{"class":45},[39,32642,32643],{"class":53},"train_data.classes  ",[39,32645,32646],{"class":128},"#训练集标签\n",[39,32648,32649],{"class":41,"line":823},[39,32650,32651],{"class":128},"# print(class_label)\n",[39,32653,32654],{"class":41,"line":839},[39,32655,122],{"emptyLinePlaceholder":121},[39,32657,32658],{"class":41,"line":845},[39,32659,32660],{"class":128},"# 可视化一个batch的图像\n",[39,32662,32663,32666,32669,32671,32673,32675,32677,32679],{"class":41,"line":856},[39,32664,32665],{"class":53},"plt.figure(",[39,32667,32668],{"class":59},"figsize",[39,32670,1117],{"class":45},[39,32672,54],{"class":53},[39,32674,1759],{"class":74},[39,32676,426],{"class":53},[39,32678,1583],{"class":74},[39,32680,31472],{"class":53},[39,32682,32683,32685,32688,32690,32693,32695],{"class":41,"line":861},[39,32684,4108],{"class":45},[39,32686,32687],{"class":53}," ii ",[39,32689,27018],{"class":45},[39,32691,32692],{"class":53}," np.arange(",[39,32694,8432],{"class":74},[39,32696,32697],{"class":53},"(batch_y)):\n",[39,32699,32700,32703,32705,32707,32709,32712,32714,32716],{"class":41,"line":870},[39,32701,32702],{"class":53},"    plt.subplot(",[39,32704,1558],{"class":74},[39,32706,426],{"class":53},[39,32708,1862],{"class":74},[39,32710,32711],{"class":53},",ii ",[39,32713,101],{"class":45},[39,32715,26093],{"class":74},[39,32717,574],{"class":53},[39,32719,32720,32723,32726,32728],{"class":41,"line":9084},[39,32721,32722],{"class":53},"    plt.imshow(batch_x[ii,:,:],",[39,32724,32725],{"class":59},"cmap",[39,32727,1117],{"class":45},[39,32729,32730],{"class":53},"plt.cm.gray)\n",[39,32732,32733,32736,32738,32740,32742],{"class":41,"line":9090},[39,32734,32735],{"class":53},"    plt.title(class_label[batch_y[ii]],",[39,32737,32471],{"class":59},[39,32739,1117],{"class":45},[39,32741,423],{"class":74},[39,32743,574],{"class":53},[39,32745,32746,32749,32752],{"class":41,"line":9102},[39,32747,32748],{"class":53},"    plt.axis(",[39,32750,32751],{"class":237},"\"off\"",[39,32753,574],{"class":53},[39,32755,32756,32759,32762,32764,32767],{"class":41,"line":9114},[39,32757,32758],{"class":53},"    plt.subplots_adjust(",[39,32760,32761],{"class":59},"wspace",[39,32763,1117],{"class":45},[39,32765,32766],{"class":74},"0.05",[39,32768,574],{"class":53},[39,32770,32771],{"class":41,"line":9126},[39,32772,32773],{"class":53},"plt.show()\n",[19,32775,32776],{},"用matplotlib进行展示的过程可以后续再补",[19,32778,32779],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32781,32782],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32784,32785],{},"模型训练：",[30,32787,32789],{"className":31353,"code":32788,"language":31355,"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",[26,32790,32791,32798,32805,32809,32821,32827,32838,32848,32858,32868,32878,32883,32895,32905,32909,32913,32918,32929,32942,32953,32970,32981,33020,33036,33048,33059,33064,33075,33091,33102,33113,33124,33131,33135,33140,33145,33149,33154,33164,33185,33189,33193,33198,33203,33208,33228,33232,33237,33247,33251,33256,33265,33270,33275,33280,33290,33294,33298,33303,33308,33318,33323,33333,33338,33347,33352,33361,33366,33375,33379,33384,33394,33398,33402,33407,33422,33450,33465,33469,33474,33479,33488,33493,33502,33507,33516,33521,33530,33535,33544,33549,33558,33563,33576,33581,33591,33596,33606,33612,33618,33624,33630,33641,33647,33667,33673,33684,33690,33696,33702,33708,33714,33720,33726,33746,33752,33768,33774,33788,33794,33809,33815,33824,33830,33839,33845,33851,33860,33866,33877,33883,33902,33908,33919,33925,33945,33961,33967,33981,33987,33993,34004,34010,34016,34026,34032,34043,34049,34059,34064,34070,34119,34166,34171,34177,34196,34202,34222,34228,34234,34244,34249,34255,34271,34316,34322,34328,34334,34345,34351,34357,34363,34381,34395,34404,34413,34422,34431,34437,34443,34451,34456,34462,34473,34479,34499,34505,34511,34517,34534,34540,34546,34552,34558,34564,34591,34615,34621,34627,34633,34644,34655,34661,34678,34701,34724,34730,34735,34744,34754,34760,34765,34771,34784,34790,34801,34812,34831],{"__ignoreMap":35},[39,32792,32793,32795],{"class":41,"line":42},[39,32794,31367],{"class":45},[39,32796,32797],{"class":53}," copy\n",[39,32799,32800,32802],{"class":41,"line":92},[39,32801,31367],{"class":45},[39,32803,32804],{"class":53}," time\n",[39,32806,32807],{"class":41,"line":112},[39,32808,122],{"emptyLinePlaceholder":121},[39,32810,32811,32813,32816,32818],{"class":41,"line":118},[39,32812,31367],{"class":45},[39,32814,32815],{"class":53}," pandas ",[39,32817,32358],{"class":45},[39,32819,32820],{"class":53}," pd\n",[39,32822,32823,32825],{"class":41,"line":125},[39,32824,31367],{"class":45},[39,32826,31370],{"class":53},[39,32828,32829,32831,32833,32835],{"class":41,"line":132},[39,32830,31712],{"class":45},[39,32832,32390],{"class":53},[39,32834,31367],{"class":45},[39,32836,32837],{"class":53}," Dataset\n",[39,32839,32840,32842,32844,32846],{"class":41,"line":138},[39,32841,31712],{"class":45},[39,32843,32343],{"class":53},[39,32845,31367],{"class":45},[39,32847,32348],{"class":53},[39,32849,32850,32852,32854,32856],{"class":41,"line":169},[39,32851,31712],{"class":45},[39,32853,32373],{"class":53},[39,32855,31367],{"class":45},[39,32857,32378],{"class":53},[39,32859,32860,32862,32864,32866],{"class":41,"line":190},[39,32861,31367],{"class":45},[39,32863,32390],{"class":53},[39,32865,32358],{"class":45},[39,32867,32395],{"class":53},[39,32869,32870,32872,32874,32876],{"class":41,"line":202},[39,32871,31367],{"class":45},[39,32873,32407],{"class":53},[39,32875,32358],{"class":45},[39,32877,32412],{"class":53},[39,32879,32880],{"class":41,"line":207},[39,32881,32882],{"class":128},"# 导入模型\n",[39,32884,32885,32887,32890,32892],{"class":41,"line":212},[39,32886,31712],{"class":45},[39,32888,32889],{"class":53}," model ",[39,32891,31367],{"class":45},[39,32893,32894],{"class":53}," LeNet\n",[39,32896,32897,32899,32901,32903],{"class":41,"line":223},[39,32898,31712],{"class":45},[39,32900,31715],{"class":53},[39,32902,31367],{"class":45},[39,32904,31720],{"class":53},[39,32906,32907],{"class":41,"line":228},[39,32908,122],{"emptyLinePlaceholder":121},[39,32910,32911],{"class":41,"line":263},[39,32912,122],{"emptyLinePlaceholder":121},[39,32914,32915],{"class":41,"line":287},[39,32916,32917],{"class":128},"# 处理训练集与验证集函数--->划分数据集\n",[39,32919,32920,32923,32926],{"class":41,"line":292},[39,32921,32922],{"class":45},"def",[39,32924,32925],{"class":49}," train_val_data_process",[39,32927,32928],{"class":53},"():\n",[39,32930,32931,32934,32936,32938,32940],{"class":41,"line":305},[39,32932,32933],{"class":53},"    train_data",[39,32935,1117],{"class":45},[39,32937,32430],{"class":53},[39,32939,32438],{"class":237},[39,32941,32441],{"class":53},[39,32943,32944,32947,32949,32951],{"class":41,"line":310},[39,32945,32946],{"class":59},"                            train",[39,32948,1117],{"class":45},[39,32950,32451],{"class":74},[39,32952,32441],{"class":53},[39,32954,32955,32958,32960,32962,32964,32966,32968],{"class":41,"line":321},[39,32956,32957],{"class":59},"                            transform",[39,32959,1117],{"class":45},[39,32961,32468],{"class":53},[39,32963,32471],{"class":59},[39,32965,1117],{"class":45},[39,32967,2161],{"class":74},[39,32969,32479],{"class":53},[39,32971,32972,32975,32977,32979],{"class":41,"line":713},[39,32973,32974],{"class":59},"                            download",[39,32976,1117],{"class":45},[39,32978,32451],{"class":74},[39,32980,574],{"class":53},[39,32982,32983,32986,32988,32991,32994,32996,32999,33001,33003,33006,33008,33010,33013,33015,33017],{"class":41,"line":718},[39,32984,32985],{"class":53},"    train_data,val_data",[39,32987,1117],{"class":45},[39,32989,32990],{"class":53},"Data.random_split(train_data,[",[39,32992,32993],{"class":74},"round",[39,32995,54],{"class":53},[39,32997,32998],{"class":74},"0.8",[39,33000,1717],{"class":45},[39,33002,8432],{"class":74},[39,33004,33005],{"class":53},"(train_data)),",[39,33007,32993],{"class":74},[39,33009,54],{"class":53},[39,33011,33012],{"class":74},"0.2",[39,33014,1717],{"class":45},[39,33016,8432],{"class":74},[39,33018,33019],{"class":53},"(train_data))])\n",[39,33021,33022,33025,33027,33030,33032,33034],{"class":41,"line":723},[39,33023,33024],{"class":53},"    train_dataloader ",[39,33026,1117],{"class":45},[39,33028,33029],{"class":53}," Data.DataLoader(",[39,33031,32512],{"class":59},[39,33033,1117],{"class":45},[39,33035,32517],{"class":53},[39,33037,33038,33041,33043,33046],{"class":41,"line":729},[39,33039,33040],{"class":59},"                                       batch_size",[39,33042,1117],{"class":45},[39,33044,33045],{"class":74},"128",[39,33047,32441],{"class":53},[39,33049,33050,33053,33055,33057],{"class":41,"line":735},[39,33051,33052],{"class":59},"                                       shuffle",[39,33054,1117],{"class":45},[39,33056,32451],{"class":74},[39,33058,32441],{"class":53},[39,33060,33061],{"class":41,"line":741},[39,33062,33063],{"class":128},"                                       # 规定8个进程\n",[39,33065,33066,33069,33071,33073],{"class":41,"line":747},[39,33067,33068],{"class":59},"                                       num_workers",[39,33070,1117],{"class":45},[39,33072,1658],{"class":74},[39,33074,574],{"class":53},[39,33076,33077,33080,33082,33084,33086,33088],{"class":41,"line":753},[39,33078,33079],{"class":53},"    val_dataloader",[39,33081,1117],{"class":45},[39,33083,32509],{"class":53},[39,33085,32512],{"class":59},[39,33087,1117],{"class":45},[39,33089,33090],{"class":53},"val_data,\n",[39,33092,33093,33096,33098,33100],{"class":41,"line":758},[39,33094,33095],{"class":59},"                                   batch_size",[39,33097,1117],{"class":45},[39,33099,33045],{"class":74},[39,33101,32441],{"class":53},[39,33103,33104,33107,33109,33111],{"class":41,"line":763},[39,33105,33106],{"class":59},"                                   shuffle",[39,33108,1117],{"class":45},[39,33110,32451],{"class":74},[39,33112,32441],{"class":53},[39,33114,33115,33118,33120,33122],{"class":41,"line":772},[39,33116,33117],{"class":59},"                                   num_workers",[39,33119,1117],{"class":45},[39,33121,1658],{"class":74},[39,33123,574],{"class":53},[39,33125,33126,33128],{"class":41,"line":777},[39,33127,95],{"class":45},[39,33129,33130],{"class":53}," train_dataloader,val_dataloader\n",[39,33132,33133],{"class":41,"line":785},[39,33134,122],{"emptyLinePlaceholder":121},[39,33136,33137],{"class":41,"line":796},[39,33138,33139],{"class":128},"# 验证是否出错\n",[39,33141,33142],{"class":41,"line":808},[39,33143,33144],{"class":128},"# train_val_data_process()\n",[39,33146,33147],{"class":41,"line":823},[39,33148,122],{"emptyLinePlaceholder":121},[39,33150,33151],{"class":41,"line":839},[39,33152,33153],{"class":128},"# 定义模型训练函数\n",[39,33155,33156,33158,33161],{"class":41,"line":845},[39,33157,32922],{"class":45},[39,33159,33160],{"class":49}," train_model_process",[39,33162,33163],{"class":53},"(model,train_dataloader,val_dataloader,num_epochs):\n",[39,33165,33166,33168,33170,33172,33174,33176,33178,33180,33183],{"class":41,"line":856},[39,33167,32212],{"class":53},[39,33169,1117],{"class":45},[39,33171,31426],{"class":53},[39,33173,32219],{"class":237},[39,33175,2814],{"class":45},[39,33177,32224],{"class":53},[39,33179,2811],{"class":45},[39,33181,33182],{"class":237}," 'cpu'",[39,33184,574],{"class":53},[39,33186,33187],{"class":41,"line":861},[39,33188,122],{"emptyLinePlaceholder":121},[39,33190,33191],{"class":41,"line":870},[39,33192,122],{"emptyLinePlaceholder":121},[39,33194,33195],{"class":41,"line":9084},[39,33196,33197],{"class":128},"    # 定义优化器\n",[39,33199,33200],{"class":41,"line":9090},[39,33201,33202],{"class":128},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[39,33204,33205],{"class":41,"line":9102},[39,33206,33207],{"class":128},"    # lr为学习率\n",[39,33209,33210,33213,33215,33218,33221,33223,33226],{"class":41,"line":9114},[39,33211,33212],{"class":53},"    optimizer",[39,33214,1117],{"class":45},[39,33216,33217],{"class":53},"torch.optim.Adam(model.parameters(),",[39,33219,33220],{"class":59},"lr",[39,33222,1117],{"class":45},[39,33224,33225],{"class":74},"0.001",[39,33227,574],{"class":53},[39,33229,33230],{"class":41,"line":9126},[39,33231,122],{"emptyLinePlaceholder":121},[39,33233,33234],{"class":41,"line":10784},[39,33235,33236],{"class":128},"    # 定义损失函数使用交叉熵损失函数\n",[39,33238,33239,33242,33244],{"class":41,"line":10809},[39,33240,33241],{"class":53},"    criterion",[39,33243,1117],{"class":45},[39,33245,33246],{"class":53},"nn.CrossEntropyLoss()\n",[39,33248,33249],{"class":41,"line":10832},[39,33250,122],{"emptyLinePlaceholder":121},[39,33252,33253],{"class":41,"line":10856},[39,33254,33255],{"class":128},"    # 将模型放到GPU中进行训练\n",[39,33257,33258,33260,33262],{"class":41,"line":10861},[39,33259,32264],{"class":53},[39,33261,1117],{"class":45},[39,33263,33264],{"class":53},"model.to(device)\n",[39,33266,33267],{"class":41,"line":10866},[39,33268,33269],{"class":128},"    # 复制当前模型的参数\n",[39,33271,33272],{"class":41,"line":10871},[39,33273,33274],{"class":128},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[39,33276,33277],{"class":41,"line":10880},[39,33278,33279],{"class":128},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[39,33281,33282,33285,33287],{"class":41,"line":10885},[39,33283,33284],{"class":53},"    best_model_wts",[39,33286,1117],{"class":45},[39,33288,33289],{"class":53},"copy.deepcopy(model.state_dict())\n",[39,33291,33292],{"class":41,"line":10891},[39,33293,122],{"emptyLinePlaceholder":121},[39,33295,33296],{"class":41,"line":10912},[39,33297,122],{"emptyLinePlaceholder":121},[39,33299,33300],{"class":41,"line":10918},[39,33301,33302],{"class":128},"    # 初始化参数\n",[39,33304,33305],{"class":41,"line":10932},[39,33306,33307],{"class":128},"    # 最高准确度\n",[39,33309,33310,33313,33315],{"class":41,"line":10938},[39,33311,33312],{"class":53},"    best_acc",[39,33314,1117],{"class":45},[39,33316,33317],{"class":74},"0.0\n",[39,33319,33320],{"class":41,"line":10965},[39,33321,33322],{"class":128},"    # 训练集损失列表\n",[39,33324,33325,33328,33330],{"class":41,"line":10974},[39,33326,33327],{"class":53},"    train_loss_all",[39,33329,1117],{"class":45},[39,33331,33332],{"class":53},"[]\n",[39,33334,33335],{"class":41,"line":10980},[39,33336,33337],{"class":128},"    # 验证集函数列表\n",[39,33339,33340,33343,33345],{"class":41,"line":10988},[39,33341,33342],{"class":53},"    val_loss_all",[39,33344,1117],{"class":45},[39,33346,33332],{"class":53},[39,33348,33349],{"class":41,"line":10993},[39,33350,33351],{"class":128},"    # 训练集准确度列表\n",[39,33353,33354,33357,33359],{"class":41,"line":17577},[39,33355,33356],{"class":53},"    train_acc_all",[39,33358,1117],{"class":45},[39,33360,33332],{"class":53},[39,33362,33363],{"class":41,"line":17583},[39,33364,33365],{"class":128},"    # 验证集准确度列表\n",[39,33367,33368,33371,33373],{"class":41,"line":17606},[39,33369,33370],{"class":53},"    val_acc_all",[39,33372,1117],{"class":45},[39,33374,33332],{"class":53},[39,33376,33377],{"class":41,"line":17612},[39,33378,122],{"emptyLinePlaceholder":121},[39,33380,33381],{"class":41,"line":17635},[39,33382,33383],{"class":128},"    # 保存当前时间--->方便看每轮训练的时间\n",[39,33385,33386,33389,33391],{"class":41,"line":17649},[39,33387,33388],{"class":53},"    since",[39,33390,1117],{"class":45},[39,33392,33393],{"class":53},"time.time()\n",[39,33395,33396],{"class":41,"line":17669},[39,33397,122],{"emptyLinePlaceholder":121},[39,33399,33400],{"class":41,"line":17675},[39,33401,122],{"emptyLinePlaceholder":121},[39,33403,33404],{"class":41,"line":17686},[39,33405,33406],{"class":128},"    # 准备工作完成--->开始训练模型\n",[39,33408,33409,33411,33414,33416,33419],{"class":41,"line":17709},[39,33410,4284],{"class":45},[39,33412,33413],{"class":53}," epoch ",[39,33415,27018],{"class":45},[39,33417,33418],{"class":74}," range",[39,33420,33421],{"class":53},"(num_epochs):\n",[39,33423,33424,33427,33429,33432,33435,33437,33439,33441,33444,33446,33448],{"class":41,"line":17731},[39,33425,33426],{"class":74},"        print",[39,33428,54],{"class":53},[39,33430,33431],{"class":237},"\"Epoch ",[39,33433,33434],{"class":74},"{}",[39,33436,1845],{"class":237},[39,33438,33434],{"class":74},[39,33440,1516],{"class":237},[39,33442,33443],{"class":53},".format(epoch,num_epochs",[39,33445,1793],{"class":45},[39,33447,1483],{"class":74},[39,33449,31472],{"class":53},[39,33451,33452,33454,33456,33459,33461,33463],{"class":41,"line":17736},[39,33453,33426],{"class":74},[39,33455,54],{"class":53},[39,33457,33458],{"class":237},"\"-\"",[39,33460,1717],{"class":45},[39,33462,423],{"class":74},[39,33464,574],{"class":53},[39,33466,33467],{"class":41,"line":17742},[39,33468,122],{"emptyLinePlaceholder":121},[39,33470,33471],{"class":41,"line":17756},[39,33472,33473],{"class":128},"        # 初始化参数\n",[39,33475,33476],{"class":41,"line":17769},[39,33477,33478],{"class":128},"        # 训练集损失函数\n",[39,33480,33481,33484,33486],{"class":41,"line":17774},[39,33482,33483],{"class":53},"        train_loss",[39,33485,1117],{"class":45},[39,33487,33317],{"class":74},[39,33489,33490],{"class":41,"line":17788},[39,33491,33492],{"class":128},"        # 训练集准确度\n",[39,33494,33495,33498,33500],{"class":41,"line":17793},[39,33496,33497],{"class":53},"        train_corrects",[39,33499,1117],{"class":45},[39,33501,4168],{"class":74},[39,33503,33504],{"class":41,"line":17799},[39,33505,33506],{"class":128},"        # 验证集损失函数\n",[39,33508,33509,33512,33514],{"class":41,"line":17804},[39,33510,33511],{"class":53},"        val_loss",[39,33513,1117],{"class":45},[39,33515,33317],{"class":74},[39,33517,33518],{"class":41,"line":17818},[39,33519,33520],{"class":128},"        # 验证集准确度\n",[39,33522,33523,33526,33528],{"class":41,"line":17823},[39,33524,33525],{"class":53},"        val_corrects",[39,33527,1117],{"class":45},[39,33529,4168],{"class":74},[39,33531,33532],{"class":41,"line":17828},[39,33533,33534],{"class":128},"        # 训练集样本数量\n",[39,33536,33537,33540,33542],{"class":41,"line":17842},[39,33538,33539],{"class":53},"        train_num",[39,33541,1117],{"class":45},[39,33543,4168],{"class":74},[39,33545,33546],{"class":41,"line":17854},[39,33547,33548],{"class":128},"        # 验证集样本数量\n",[39,33550,33551,33554,33556],{"class":41,"line":17859},[39,33552,33553],{"class":53},"        val_num",[39,33555,1117],{"class":45},[39,33557,4168],{"class":74},[39,33559,33560],{"class":41,"line":17872},[39,33561,33562],{"class":128},"        # 将数据放到设备,并开始训练\n",[39,33564,33565,33567,33569,33571,33573],{"class":41,"line":17877},[39,33566,4486],{"class":45},[39,33568,32576],{"class":53},[39,33570,27018],{"class":45},[39,33572,32581],{"class":74},[39,33574,33575],{"class":53},"(train_dataloader):\n",[39,33577,33578],{"class":41,"line":17882},[39,33579,33580],{"class":128},"            # 将特征放入到训练设备\n",[39,33582,33583,33586,33588],{"class":41,"line":17887},[39,33584,33585],{"class":53},"            b_x",[39,33587,1117],{"class":45},[39,33589,33590],{"class":53},"b_x.to(device)\n",[39,33592,33593],{"class":41,"line":17900},[39,33594,33595],{"class":128},"            # 将标签放入到训练设备当中\n",[39,33597,33598,33601,33603],{"class":41,"line":17905},[39,33599,33600],{"class":53},"            b_y",[39,33602,1117],{"class":45},[39,33604,33605],{"class":53},"b_y.to(device)\n",[39,33607,33609],{"class":41,"line":33608},98,[39,33610,33611],{"class":128},"            # 设置模型为训练模式\n",[39,33613,33615],{"class":41,"line":33614},99,[39,33616,33617],{"class":53},"            model.train()\n",[39,33619,33621],{"class":41,"line":33620},100,[39,33622,33623],{"class":128},"            # 将数据放到模型当中,开始前向传播\n",[39,33625,33627],{"class":41,"line":33626},101,[39,33628,33629],{"class":128},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[39,33631,33633,33636,33638],{"class":41,"line":33632},102,[39,33634,33635],{"class":53},"            output",[39,33637,1117],{"class":45},[39,33639,33640],{"class":53},"model(b_x)\n",[39,33642,33644],{"class":41,"line":33643},103,[39,33645,33646],{"class":128},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[39,33648,33650,33653,33655,33658,33661,33663,33665],{"class":41,"line":33649},104,[39,33651,33652],{"class":53},"            pre_lab",[39,33654,1117],{"class":45},[39,33656,33657],{"class":53},"torch.argmax(output,",[39,33659,33660],{"class":59},"dim",[39,33662,1117],{"class":45},[39,33664,1483],{"class":74},[39,33666,574],{"class":53},[39,33668,33670],{"class":41,"line":33669},105,[39,33671,33672],{"class":128},"            # 计算每一个batch的损失函数\n",[39,33674,33676,33679,33681],{"class":41,"line":33675},106,[39,33677,33678],{"class":53},"            loss",[39,33680,1117],{"class":45},[39,33682,33683],{"class":53},"criterion(output,b_y)\n",[39,33685,33687],{"class":41,"line":33686},107,[39,33688,33689],{"class":128},"            # 将梯度初始化为0\n",[39,33691,33693],{"class":41,"line":33692},108,[39,33694,33695],{"class":53},"            optimizer.zero_grad()\n",[39,33697,33699],{"class":41,"line":33698},109,[39,33700,33701],{"class":128},"            # 梯度置为0后再进行反向传播\n",[39,33703,33705],{"class":41,"line":33704},110,[39,33706,33707],{"class":53},"            loss.backward()\n",[39,33709,33711],{"class":41,"line":33710},111,[39,33712,33713],{"class":128},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[39,33715,33717],{"class":41,"line":33716},112,[39,33718,33719],{"class":53},"            optimizer.step()\n",[39,33721,33723],{"class":41,"line":33722},113,[39,33724,33725],{"class":128},"            # loss.item()指的是batch的平均损失\n",[39,33727,33729,33732,33734,33737,33739,33742,33744],{"class":41,"line":33728},114,[39,33730,33731],{"class":53},"            train_loss",[39,33733,10545],{"class":45},[39,33735,33736],{"class":53},"loss.item()",[39,33738,1717],{"class":45},[39,33740,33741],{"class":53},"b_x.size(",[39,33743,1457],{"class":74},[39,33745,574],{"class":53},[39,33747,33749],{"class":41,"line":33748},115,[39,33750,33751],{"class":128},"            # 计算每个批次中正确预测的数量\n",[39,33753,33755,33758,33760,33763,33765],{"class":41,"line":33754},116,[39,33756,33757],{"class":53},"            train_corrects",[39,33759,10545],{"class":45},[39,33761,33762],{"class":53},"torch.sum(pre_lab",[39,33764,4032],{"class":45},[39,33766,33767],{"class":53},"b_y.data)\n",[39,33769,33771],{"class":41,"line":33770},117,[39,33772,33773],{"class":128},"            # 计算目前为止一共处理了多少样本\n",[39,33775,33777,33780,33782,33784,33786],{"class":41,"line":33776},118,[39,33778,33779],{"class":53},"            train_num",[39,33781,10545],{"class":45},[39,33783,33741],{"class":53},[39,33785,1457],{"class":74},[39,33787,574],{"class":53},[39,33789,33791],{"class":41,"line":33790},119,[39,33792,33793],{"class":128},"        # 验证数据\n",[39,33795,33797,33799,33802,33804,33806],{"class":41,"line":33796},120,[39,33798,4486],{"class":45},[39,33800,33801],{"class":53}," step ,(b_x,b_y) ",[39,33803,27018],{"class":45},[39,33805,32581],{"class":74},[39,33807,33808],{"class":53},"(val_dataloader):\n",[39,33810,33812],{"class":41,"line":33811},121,[39,33813,33814],{"class":128},"            # 将特征放到验证设备当中\n",[39,33816,33818,33820,33822],{"class":41,"line":33817},122,[39,33819,33585],{"class":53},[39,33821,1117],{"class":45},[39,33823,33590],{"class":53},[39,33825,33827],{"class":41,"line":33826},123,[39,33828,33829],{"class":128},"            # 将标签放到放到训练设备当中\n",[39,33831,33833,33835,33837],{"class":41,"line":33832},124,[39,33834,33600],{"class":53},[39,33836,1117],{"class":45},[39,33838,33605],{"class":53},[39,33840,33842],{"class":41,"line":33841},125,[39,33843,33844],{"class":128},"            # 开启验证模式，设置模型为评估模式\n",[39,33846,33848],{"class":41,"line":33847},126,[39,33849,33850],{"class":53},"            model.eval()\n",[39,33852,33854,33857],{"class":41,"line":33853},127,[39,33855,33856],{"class":45},"            with",[39,33858,33859],{"class":53}," torch.no_grad():\n",[39,33861,33863],{"class":41,"line":33862},128,[39,33864,33865],{"class":128},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[39,33867,33869,33872,33874],{"class":41,"line":33868},129,[39,33870,33871],{"class":53},"                output ",[39,33873,1117],{"class":45},[39,33875,33876],{"class":53}," model(b_x)\n",[39,33878,33880],{"class":41,"line":33879},130,[39,33881,33882],{"class":128},"                # 查找每一行中最大值对应的下标\n",[39,33884,33886,33889,33891,33894,33896,33898,33900],{"class":41,"line":33885},131,[39,33887,33888],{"class":53},"                pre_lab ",[39,33890,1117],{"class":45},[39,33892,33893],{"class":53}," torch.argmax(output, ",[39,33895,33660],{"class":59},[39,33897,1117],{"class":45},[39,33899,1483],{"class":74},[39,33901,574],{"class":53},[39,33903,33905],{"class":41,"line":33904},132,[39,33906,33907],{"class":128},"                # 计算验证集上的当前 batch 损失\n",[39,33909,33911,33914,33916],{"class":41,"line":33910},133,[39,33912,33913],{"class":53},"                val_batch_loss ",[39,33915,1117],{"class":45},[39,33917,33918],{"class":53}," criterion(output, b_y)\n",[39,33920,33922],{"class":41,"line":33921},134,[39,33923,33924],{"class":128},"                # 对损失函数进行累加（按样本数加权）\n",[39,33926,33928,33931,33933,33936,33938,33941,33943],{"class":41,"line":33927},135,[39,33929,33930],{"class":53},"                val_loss ",[39,33932,10545],{"class":45},[39,33934,33935],{"class":53}," val_batch_loss.item() ",[39,33937,1717],{"class":45},[39,33939,33940],{"class":53}," b_x.size(",[39,33942,1457],{"class":74},[39,33944,574],{"class":53},[39,33946,33948,33951,33953,33956,33958],{"class":41,"line":33947},136,[39,33949,33950],{"class":53},"                val_corrects ",[39,33952,10545],{"class":45},[39,33954,33955],{"class":53}," torch.sum(pre_lab ",[39,33957,4032],{"class":45},[39,33959,33960],{"class":53}," b_y.data)\n",[39,33962,33964],{"class":41,"line":33963},137,[39,33965,33966],{"class":128},"                # 当前用于验证的样本数量\n",[39,33968,33970,33973,33975,33977,33979],{"class":41,"line":33969},138,[39,33971,33972],{"class":53},"            val_num ",[39,33974,10545],{"class":45},[39,33976,33940],{"class":53},[39,33978,1457],{"class":74},[39,33980,574],{"class":53},[39,33982,33984],{"class":41,"line":33983},139,[39,33985,33986],{"class":128},"        # 计算并保存每一次迭代的loss值和准确率\n",[39,33988,33990],{"class":41,"line":33989},140,[39,33991,33992],{"class":128},"        # 计算并保存训练集的loss值\n",[39,33994,33996,33999,34001],{"class":41,"line":33995},141,[39,33997,33998],{"class":53},"        train_loss_all.append(train_loss",[39,34000,1845],{"class":45},[39,34002,34003],{"class":53},"train_num)\n",[39,34005,34007],{"class":41,"line":34006},142,[39,34008,34009],{"class":128},"        # 取双精度\n",[39,34011,34013],{"class":41,"line":34012},143,[39,34014,34015],{"class":128},"        # 计算并保存训练集的准确率\n",[39,34017,34019,34022,34024],{"class":41,"line":34018},144,[39,34020,34021],{"class":53},"        train_acc_all.append(train_corrects.double().item()",[39,34023,1845],{"class":45},[39,34025,34003],{"class":53},[39,34027,34029],{"class":41,"line":34028},145,[39,34030,34031],{"class":128},"        # 计算并保存验证集的loss值\n",[39,34033,34035,34038,34040],{"class":41,"line":34034},146,[39,34036,34037],{"class":53},"        val_loss_all.append(val_loss",[39,34039,1845],{"class":45},[39,34041,34042],{"class":53},"val_num)\n",[39,34044,34046],{"class":41,"line":34045},147,[39,34047,34048],{"class":128},"        # 计算并保存验证集的准确率\n",[39,34050,34052,34055,34057],{"class":41,"line":34051},148,[39,34053,34054],{"class":53},"        val_acc_all.append(val_corrects.double().item()",[39,34056,1845],{"class":45},[39,34058,34042],{"class":53},[39,34060,34062],{"class":41,"line":34061},149,[39,34063,122],{"emptyLinePlaceholder":121},[39,34065,34067],{"class":41,"line":34066},150,[39,34068,34069],{"class":128},"        # 打印训练一轮的loss值和准确率\n",[39,34071,34073,34075,34077,34079,34081,34084,34086,34089,34091,34094,34096,34098,34100,34102,34105,34107,34109,34112,34114,34116],{"class":41,"line":34072},151,[39,34074,33426],{"class":74},[39,34076,54],{"class":53},[39,34078,4675],{"class":237},[39,34080,33434],{"class":74},[39,34082,34083],{"class":237},"train loss:",[39,34085,2156],{"class":74},[39,34087,34088],{"class":45},":.4f",[39,34090,2206],{"class":74},[39,34092,34093],{"class":237}," train acc:",[39,34095,2156],{"class":74},[39,34097,34088],{"class":45},[39,34099,2206],{"class":74},[39,34101,4675],{"class":237},[39,34103,34104],{"class":53},".format(epoch,train_loss_all[",[39,34106,1793],{"class":45},[39,34108,1483],{"class":74},[39,34110,34111],{"class":53},"],train_acc_all[",[39,34113,1793],{"class":45},[39,34115,1483],{"class":74},[39,34117,34118],{"class":53},"]))\n",[39,34120,34122,34124,34126,34128,34130,34133,34135,34137,34139,34142,34144,34146,34148,34150,34153,34155,34157,34160,34162,34164],{"class":41,"line":34121},152,[39,34123,33426],{"class":74},[39,34125,54],{"class":53},[39,34127,4675],{"class":237},[39,34129,33434],{"class":74},[39,34131,34132],{"class":237},"val loss:",[39,34134,2156],{"class":74},[39,34136,34088],{"class":45},[39,34138,2206],{"class":74},[39,34140,34141],{"class":237}," val acc:",[39,34143,2156],{"class":74},[39,34145,34088],{"class":45},[39,34147,2206],{"class":74},[39,34149,4675],{"class":237},[39,34151,34152],{"class":53},".format(epoch,val_loss_all[",[39,34154,1793],{"class":45},[39,34156,1483],{"class":74},[39,34158,34159],{"class":53},"],val_acc_all[",[39,34161,1793],{"class":45},[39,34163,1483],{"class":74},[39,34165,34118],{"class":53},[39,34167,34169],{"class":41,"line":34168},153,[39,34170,122],{"emptyLinePlaceholder":121},[39,34172,34174],{"class":41,"line":34173},154,[39,34175,34176],{"class":128},"        # 判断准确度--->保存最优模型\n",[39,34178,34180,34182,34185,34187,34189,34191,34193],{"class":41,"line":34179},155,[39,34181,3590],{"class":45},[39,34183,34184],{"class":53}," val_acc_all[",[39,34186,1793],{"class":45},[39,34188,1483],{"class":74},[39,34190,2200],{"class":53},[39,34192,2220],{"class":45},[39,34194,34195],{"class":53},"best_acc:\n",[39,34197,34199],{"class":41,"line":34198},156,[39,34200,34201],{"class":128},"            # 保存当前模型准确度\n",[39,34203,34205,34208,34210,34212,34215,34217,34219],{"class":41,"line":34204},157,[39,34206,34207],{"class":53},"            best_acc:",[39,34209,1311],{"class":74},[39,34211,1117],{"class":45},[39,34213,34214],{"class":53},"val_acc_all[",[39,34216,1793],{"class":45},[39,34218,1483],{"class":74},[39,34220,34221],{"class":53},"]\n",[39,34223,34225],{"class":41,"line":34224},158,[39,34226,34227],{"class":128},"            # 保存当前的准确度\n",[39,34229,34231],{"class":41,"line":34230},159,[39,34232,34233],{"class":128},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[39,34235,34237,34240,34242],{"class":41,"line":34236},160,[39,34238,34239],{"class":53},"            best_model_wts",[39,34241,1117],{"class":45},[39,34243,33289],{"class":53},[39,34245,34247],{"class":41,"line":34246},161,[39,34248,122],{"emptyLinePlaceholder":121},[39,34250,34252],{"class":41,"line":34251},162,[39,34253,34254],{"class":128},"        # 计算耗时\n",[39,34256,34258,34261,34263,34266,34268],{"class":41,"line":34257},163,[39,34259,34260],{"class":53},"        time_use",[39,34262,1117],{"class":45},[39,34264,34265],{"class":53},"time.time()",[39,34267,1793],{"class":45},[39,34269,34270],{"class":53},"since\n",[39,34272,34274,34276,34278,34281,34283,34286,34288,34290,34292,34294,34296,34299,34302,34305,34307,34310,34312,34314],{"class":41,"line":34273},164,[39,34275,33426],{"class":74},[39,34277,54],{"class":53},[39,34279,34280],{"class":237},"'训练和验证耗费的时间",[39,34282,2156],{"class":74},[39,34284,34285],{"class":45},":.0f",[39,34287,2206],{"class":74},[39,34289,1805],{"class":237},[39,34291,2156],{"class":74},[39,34293,34285],{"class":45},[39,34295,2206],{"class":74},[39,34297,34298],{"class":237},"s'",[39,34300,34301],{"class":53},".format(time_use",[39,34303,34304],{"class":45},"\u002F\u002F",[39,34306,2167],{"class":74},[39,34308,34309],{"class":53},",time_use",[39,34311,1592],{"class":45},[39,34313,2167],{"class":74},[39,34315,31472],{"class":53},[39,34317,34319],{"class":41,"line":34318},165,[39,34320,34321],{"class":128},"    # 选择最优参数\n",[39,34323,34325],{"class":41,"line":34324},166,[39,34326,34327],{"class":128},"    # 加载最高准确率下的模型参数\n",[39,34329,34331],{"class":41,"line":34330},167,[39,34332,34333],{"class":128},"    # model.load_state_dict(best_model_wts)\n",[39,34335,34337,34340,34343],{"class":41,"line":34336},168,[39,34338,34339],{"class":53},"    torch.save(model.state_dict(best_model_wts), ",[39,34341,34342],{"class":237},"'.\u002Fbest_model.pth'",[39,34344,574],{"class":53},[39,34346,34348],{"class":41,"line":34347},169,[39,34349,34350],{"class":128},"    # 或者写成\n",[39,34352,34354],{"class":41,"line":34353},170,[39,34355,34356],{"class":128},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[39,34358,34360],{"class":41,"line":34359},171,[39,34361,34362],{"class":128},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[39,34364,34366,34369,34371,34374,34377,34379],{"class":41,"line":34365},172,[39,34367,34368],{"class":53},"    train_process",[39,34370,1117],{"class":45},[39,34372,34373],{"class":53},"pd.DataFrame(",[39,34375,34376],{"class":59},"data",[39,34378,1117],{"class":45},[39,34380,542],{"class":53},[39,34382,34384,34387,34389,34392],{"class":41,"line":34383},173,[39,34385,34386],{"class":237},"        \"epoch\"",[39,34388,2119],{"class":53},[39,34390,34391],{"class":74},"range",[39,34393,34394],{"class":53},"(num_epochs),\n",[39,34396,34398,34401],{"class":41,"line":34397},174,[39,34399,34400],{"class":237},"        \"train_loss_all\"",[39,34402,34403],{"class":53},":train_loss_all,\n",[39,34405,34407,34410],{"class":41,"line":34406},175,[39,34408,34409],{"class":237},"        \"val_loss_all\"",[39,34411,34412],{"class":53},":val_loss_all,\n",[39,34414,34416,34419],{"class":41,"line":34415},176,[39,34417,34418],{"class":237},"        \"train_acc_all\"",[39,34420,34421],{"class":53},":train_acc_all,\n",[39,34423,34425,34428],{"class":41,"line":34424},177,[39,34426,34427],{"class":237},"        \"val_acc_all\"",[39,34429,34430],{"class":53},":val_acc_all\n",[39,34432,34434],{"class":41,"line":34433},178,[39,34435,34436],{"class":53},"    })\n",[39,34438,34440],{"class":41,"line":34439},179,[39,34441,34442],{"class":128},"    # 返回训练保存的过程\n",[39,34444,34446,34448],{"class":41,"line":34445},180,[39,34447,95],{"class":45},[39,34449,34450],{"class":53}," train_process\n",[39,34452,34454],{"class":41,"line":34453},181,[39,34455,122],{"emptyLinePlaceholder":121},[39,34457,34459],{"class":41,"line":34458},182,[39,34460,34461],{"class":128},"# 将loss值和精度按照图片的形式展示出来\n",[39,34463,34465,34467,34470],{"class":41,"line":34464},183,[39,34466,32922],{"class":45},[39,34468,34469],{"class":49}," matplot_acc_loss",[39,34471,34472],{"class":53},"(train_process):\n",[39,34474,34476],{"class":41,"line":34475},184,[39,34477,34478],{"class":128},"    # 设置图的大小\n",[39,34480,34482,34485,34487,34489,34491,34493,34495,34497],{"class":41,"line":34481},185,[39,34483,34484],{"class":53},"    plt.figure(",[39,34486,32668],{"class":59},[39,34488,1117],{"class":45},[39,34490,54],{"class":53},[39,34492,1759],{"class":74},[39,34494,426],{"class":53},[39,34496,1558],{"class":74},[39,34498,31472],{"class":53},[39,34500,34502],{"class":41,"line":34501},186,[39,34503,34504],{"class":128},"    # 设置图中有几张图\n",[39,34506,34508],{"class":41,"line":34507},187,[39,34509,34510],{"class":128},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[39,34512,34514],{"class":41,"line":34513},188,[39,34515,34516],{"class":128},"    # ①loss图\n",[39,34518,34520,34522,34524,34526,34528,34530,34532],{"class":41,"line":34519},189,[39,34521,32702],{"class":53},[39,34523,1483],{"class":74},[39,34525,426],{"class":53},[39,34527,1345],{"class":74},[39,34529,426],{"class":53},[39,34531,1483],{"class":74},[39,34533,574],{"class":53},[39,34535,34537],{"class":41,"line":34536},190,[39,34538,34539],{"class":128},"    # 补充:\n",[39,34541,34543],{"class":41,"line":34542},191,[39,34544,34545],{"class":128},"    # plt.subplot(nrows, ncols, index)\n",[39,34547,34549],{"class":41,"line":34548},192,[39,34550,34551],{"class":128},"    # nrows：行数\n",[39,34553,34555],{"class":41,"line":34554},193,[39,34556,34557],{"class":128},"    # ncols：列数\n",[39,34559,34561],{"class":41,"line":34560},194,[39,34562,34563],{"class":128},"    # index：目前选中第几个子图（从1开始）\n",[39,34565,34567,34570,34573,34576,34579,34581,34584,34586,34589],{"class":41,"line":34566},195,[39,34568,34569],{"class":53},"    plt.plot(train_process[",[39,34571,34572],{"class":237},"\"epoch\"",[39,34574,34575],{"class":53},"],train_process.train_loss_all,",[39,34577,34578],{"class":237},"'ro-'",[39,34580,426],{"class":53},[39,34582,34583],{"class":59},"label",[39,34585,1117],{"class":45},[39,34587,34588],{"class":237},"'train loss'",[39,34590,574],{"class":53},[39,34592,34594,34596,34598,34601,34604,34606,34608,34610,34613],{"class":41,"line":34593},196,[39,34595,34569],{"class":53},[39,34597,34572],{"class":237},[39,34599,34600],{"class":53},"],train_process.val_loss_all,",[39,34602,34603],{"class":237},"'bs--'",[39,34605,426],{"class":53},[39,34607,34583],{"class":59},[39,34609,1117],{"class":45},[39,34611,34612],{"class":237},"'val loss'",[39,34614,574],{"class":53},[39,34616,34618],{"class":41,"line":34617},197,[39,34619,34620],{"class":128},"    # 添加一个图例\n",[39,34622,34624],{"class":41,"line":34623},198,[39,34625,34626],{"class":53},"    plt.legend()\n",[39,34628,34630],{"class":41,"line":34629},199,[39,34631,34632],{"class":128},"    # 给轴添加标签\n",[39,34634,34636,34639,34642],{"class":41,"line":34635},200,[39,34637,34638],{"class":53},"    plt.xlabel(",[39,34640,34641],{"class":237},"'epoch'",[39,34643,574],{"class":53},[39,34645,34647,34650,34653],{"class":41,"line":34646},201,[39,34648,34649],{"class":53},"    plt.ylabel(",[39,34651,34652],{"class":237},"'loss'",[39,34654,574],{"class":53},[39,34656,34658],{"class":41,"line":34657},202,[39,34659,34660],{"class":128},"    # ②准确度图\n",[39,34662,34664,34666,34668,34670,34672,34674,34676],{"class":41,"line":34663},203,[39,34665,32702],{"class":53},[39,34667,1483],{"class":74},[39,34669,426],{"class":53},[39,34671,1345],{"class":74},[39,34673,426],{"class":53},[39,34675,1345],{"class":74},[39,34677,574],{"class":53},[39,34679,34681,34683,34685,34688,34690,34692,34694,34696,34699],{"class":41,"line":34680},204,[39,34682,34569],{"class":53},[39,34684,34572],{"class":237},[39,34686,34687],{"class":53},"],train_process.train_acc_all,",[39,34689,34578],{"class":237},[39,34691,426],{"class":53},[39,34693,34583],{"class":59},[39,34695,1117],{"class":45},[39,34697,34698],{"class":237},"'train acc'",[39,34700,574],{"class":53},[39,34702,34704,34706,34708,34711,34713,34715,34717,34719,34722],{"class":41,"line":34703},205,[39,34705,34569],{"class":53},[39,34707,34572],{"class":237},[39,34709,34710],{"class":53},"],train_process.val_acc_all,",[39,34712,34603],{"class":237},[39,34714,426],{"class":53},[39,34716,34583],{"class":59},[39,34718,1117],{"class":45},[39,34720,34721],{"class":237},"'val acc'",[39,34723,574],{"class":53},[39,34725,34727],{"class":41,"line":34726},206,[39,34728,34729],{"class":128},"    # 添加图例\n",[39,34731,34733],{"class":41,"line":34732},207,[39,34734,34626],{"class":53},[39,34736,34738,34740,34742],{"class":41,"line":34737},208,[39,34739,34638],{"class":53},[39,34741,34572],{"class":237},[39,34743,574],{"class":53},[39,34745,34747,34749,34752],{"class":41,"line":34746},209,[39,34748,34649],{"class":53},[39,34750,34751],{"class":237},"\"acc\"",[39,34753,574],{"class":53},[39,34755,34757],{"class":41,"line":34756},210,[39,34758,34759],{"class":53},"    plt.show()\n",[39,34761,34763],{"class":41,"line":34762},211,[39,34764,122],{"emptyLinePlaceholder":121},[39,34766,34768],{"class":41,"line":34767},212,[39,34769,34770],{"class":128},"# 正式开始训练:\n",[39,34772,34774,34776,34778,34780,34782],{"class":41,"line":34773},213,[39,34775,2654],{"class":45},[39,34777,32195],{"class":74},[39,34779,4032],{"class":45},[39,34781,32200],{"class":237},[39,34783,4822],{"class":53},[39,34785,34787],{"class":41,"line":34786},214,[39,34788,34789],{"class":128},"    # 将模型实例化\n",[39,34791,34793,34796,34798],{"class":41,"line":34792},215,[39,34794,34795],{"class":53},"    LeNet",[39,34797,1117],{"class":45},[39,34799,34800],{"class":53},"LeNet()\n",[39,34802,34804,34807,34809],{"class":41,"line":34803},216,[39,34805,34806],{"class":53},"    train_dataloader,val_dataloader",[39,34808,1117],{"class":45},[39,34810,34811],{"class":53},"train_val_data_process()\n",[39,34813,34815,34817,34819,34822,34825,34827,34829],{"class":41,"line":34814},217,[39,34816,34368],{"class":53},[39,34818,1117],{"class":45},[39,34820,34821],{"class":53},"train_model_process(LeNet,train_dataloader,val_dataloader,",[39,34823,34824],{"class":59},"num_epochs",[39,34826,1117],{"class":45},[39,34828,248],{"class":74},[39,34830,574],{"class":53},[39,34832,34834],{"class":41,"line":34833},218,[39,34835,34836],{"class":53},"    matplot_acc_loss(train_process)\n",[19,34838,34839],{},"画图的补充点学习：",[19,34841,34842],{},[2585,34843],{"alt":35,"src":34844},"\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",[328,34846,34847],{"start":112},[331,34848,34849],{},"测试",[30,34851,34853],{"className":31353,"code":34852,"language":31355,"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",[26,34854,34855,34861,34871,34883,34893,34898,34908,34918,34922,34927,34936,34953,34965,34982,34993,35009,35014,35025,35036,35047,35054,35058,35063,35073,35078,35095,35103,35107,35112,35121,35130,35134,35139,35144,35149,35156,35161,35173,35183,35193,35198,35202,35207,35216,35221,35237,35242,35247,35252,35266,35271,35285,35289,35294,35309,35314,35326,35330,35335,35347,35352,35360,35365,35370,35380,35385,35394,35399,35404,35408,35413,35418,35434,35442,35447,35452,35511,35517,35522,35533,35541,35549,35553,35558,35562,35567,35575,35580,35596,35601,35611,35621],{"__ignoreMap":35},[39,34856,34857,34859],{"class":41,"line":42},[39,34858,31367],{"class":45},[39,34860,31370],{"class":53},[39,34862,34863,34865,34867,34869],{"class":41,"line":92},[39,34864,31367],{"class":45},[39,34866,32390],{"class":53},[39,34868,32358],{"class":45},[39,34870,32395],{"class":53},[39,34872,34873,34875,34878,34880],{"class":41,"line":112},[39,34874,31712],{"class":45},[39,34876,34877],{"class":53}," jupyter_client.consoleapp ",[39,34879,31367],{"class":45},[39,34881,34882],{"class":53}," classes\n",[39,34884,34885,34887,34889,34891],{"class":41,"line":118},[39,34886,31712],{"class":45},[39,34888,32373],{"class":53},[39,34890,31367],{"class":45},[39,34892,32378],{"class":53},[39,34894,34895],{"class":41,"line":125},[39,34896,34897],{"class":128},"# 导入数据集\n",[39,34899,34900,34902,34904,34906],{"class":41,"line":132},[39,34901,31712],{"class":45},[39,34903,32343],{"class":53},[39,34905,31367],{"class":45},[39,34907,32348],{"class":53},[39,34909,34910,34912,34914,34916],{"class":41,"line":138},[39,34911,31712],{"class":45},[39,34913,32889],{"class":53},[39,34915,31367],{"class":45},[39,34917,32894],{"class":53},[39,34919,34920],{"class":41,"line":169},[39,34921,122],{"emptyLinePlaceholder":121},[39,34923,34924],{"class":41,"line":190},[39,34925,34926],{"class":128},"# 测试数据处理\n",[39,34928,34929,34931,34934],{"class":41,"line":202},[39,34930,32922],{"class":45},[39,34932,34933],{"class":49}," test_data_process",[39,34935,32928],{"class":53},[39,34937,34938,34941,34943,34945,34947,34949,34951],{"class":41,"line":207},[39,34939,34940],{"class":53},"    test_data",[39,34942,1117],{"class":45},[39,34944,32430],{"class":53},[39,34946,32433],{"class":59},[39,34948,1117],{"class":45},[39,34950,32438],{"class":237},[39,34952,32441],{"class":53},[39,34954,34955,34958,34960,34963],{"class":41,"line":212},[39,34956,34957],{"class":59},"                           train",[39,34959,1117],{"class":45},[39,34961,34962],{"class":74},"False",[39,34964,32441],{"class":53},[39,34966,34967,34970,34972,34974,34976,34978,34980],{"class":41,"line":223},[39,34968,34969],{"class":59},"                           transform",[39,34971,1117],{"class":45},[39,34973,32468],{"class":53},[39,34975,32471],{"class":59},[39,34977,1117],{"class":45},[39,34979,2161],{"class":74},[39,34981,32479],{"class":53},[39,34983,34984,34987,34989,34991],{"class":41,"line":228},[39,34985,34986],{"class":59},"                           download",[39,34988,1117],{"class":45},[39,34990,32451],{"class":74},[39,34992,574],{"class":53},[39,34994,34995,34998,35000,35002,35004,35006],{"class":41,"line":263},[39,34996,34997],{"class":53},"    test_dataloader",[39,34999,1117],{"class":45},[39,35001,32509],{"class":53},[39,35003,32512],{"class":59},[39,35005,1117],{"class":45},[39,35007,35008],{"class":53},"test_data,\n",[39,35010,35011],{"class":41,"line":287},[39,35012,35013],{"class":128},"                                    # 这里是一张一张进行测试\n",[39,35015,35016,35019,35021,35023],{"class":41,"line":292},[39,35017,35018],{"class":59},"                                    batch_size",[39,35020,1117],{"class":45},[39,35022,1483],{"class":74},[39,35024,32441],{"class":53},[39,35026,35027,35030,35032,35034],{"class":41,"line":305},[39,35028,35029],{"class":59},"                                    shuffle",[39,35031,1117],{"class":45},[39,35033,32451],{"class":74},[39,35035,32441],{"class":53},[39,35037,35038,35041,35043,35045],{"class":41,"line":310},[39,35039,35040],{"class":59},"                                    num_workers",[39,35042,1117],{"class":45},[39,35044,1457],{"class":74},[39,35046,574],{"class":53},[39,35048,35049,35051],{"class":41,"line":321},[39,35050,95],{"class":45},[39,35052,35053],{"class":53}," test_dataloader\n",[39,35055,35056],{"class":41,"line":713},[39,35057,122],{"emptyLinePlaceholder":121},[39,35059,35060],{"class":41,"line":718},[39,35061,35062],{"class":128},"# 定义模型测试函数\n",[39,35064,35065,35067,35070],{"class":41,"line":723},[39,35066,32922],{"class":45},[39,35068,35069],{"class":49}," test_model_process",[39,35071,35072],{"class":53},"(model,test_dataloader):\n",[39,35074,35075],{"class":41,"line":729},[39,35076,35077],{"class":128},"    # 将模型放到设备当中，先进行判断\n",[39,35079,35080,35082,35084,35086,35088,35090,35092],{"class":41,"line":735},[39,35081,32212],{"class":53},[39,35083,1117],{"class":45},[39,35085,32219],{"class":237},[39,35087,2814],{"class":45},[39,35089,32224],{"class":53},[39,35091,2811],{"class":45},[39,35093,35094],{"class":237}," \"cpu\"\n",[39,35096,35097,35099,35101],{"class":41,"line":741},[39,35098,32264],{"class":53},[39,35100,1117],{"class":45},[39,35102,33264],{"class":53},[39,35104,35105],{"class":41,"line":747},[39,35106,122],{"emptyLinePlaceholder":121},[39,35108,35109],{"class":41,"line":753},[39,35110,35111],{"class":128},"    # 设置初始化参数\n",[39,35113,35114,35117,35119],{"class":41,"line":758},[39,35115,35116],{"class":53},"    test_corrects",[39,35118,1117],{"class":45},[39,35120,33317],{"class":74},[39,35122,35123,35126,35128],{"class":41,"line":763},[39,35124,35125],{"class":53},"    test_num",[39,35127,1117],{"class":45},[39,35129,4168],{"class":74},[39,35131,35132],{"class":41,"line":772},[39,35133,122],{"emptyLinePlaceholder":121},[39,35135,35136],{"class":41,"line":777},[39,35137,35138],{"class":128},"    # 进行模型测试\n",[39,35140,35141],{"class":41,"line":785},[39,35142,35143],{"class":128},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[39,35145,35146],{"class":41,"line":796},[39,35147,35148],{"class":128},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[39,35150,35151,35154],{"class":41,"line":808},[39,35152,35153],{"class":45},"    with",[39,35155,33859],{"class":53},[39,35157,35158],{"class":41,"line":823},[39,35159,35160],{"class":128},"        # 从数据中进行\n",[39,35162,35163,35165,35168,35170],{"class":41,"line":839},[39,35164,4486],{"class":45},[39,35166,35167],{"class":53}," test_data_x,test_data_y ",[39,35169,27018],{"class":45},[39,35171,35172],{"class":53}," test_dataloader:\n",[39,35174,35175,35178,35180],{"class":41,"line":845},[39,35176,35177],{"class":53},"            test_data_x",[39,35179,1117],{"class":45},[39,35181,35182],{"class":53},"test_data_x.to(device)\n",[39,35184,35185,35188,35190],{"class":41,"line":856},[39,35186,35187],{"class":53},"            test_data_y",[39,35189,1117],{"class":45},[39,35191,35192],{"class":53},"test_data_y.to(device)\n",[39,35194,35195],{"class":41,"line":861},[39,35196,35197],{"class":128},"            # 设置为验证模式\n",[39,35199,35200],{"class":41,"line":870},[39,35201,33850],{"class":53},[39,35203,35204],{"class":41,"line":9084},[39,35205,35206],{"class":128},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[39,35208,35209,35211,35213],{"class":41,"line":9090},[39,35210,33635],{"class":53},[39,35212,1117],{"class":45},[39,35214,35215],{"class":53},"model(test_data_x)\n",[39,35217,35218],{"class":41,"line":9102},[39,35219,35220],{"class":128},"            # 查找每一行中最大值对应的下标\n",[39,35222,35223,35225,35227,35229,35231,35233,35235],{"class":41,"line":9114},[39,35224,33652],{"class":53},[39,35226,1117],{"class":45},[39,35228,33657],{"class":53},[39,35230,33660],{"class":59},[39,35232,1117],{"class":45},[39,35234,1483],{"class":74},[39,35236,574],{"class":53},[39,35238,35239],{"class":41,"line":9126},[39,35240,35241],{"class":128},"            # 计算正确率\n",[39,35243,35244],{"class":41,"line":10784},[39,35245,35246],{"class":128},"            # .data表示是一个不带梯度信息的tensor\n",[39,35248,35249],{"class":41,"line":10809},[39,35250,35251],{"class":128},"            # 如果预测正确，则准确度test_corrects加1\n",[39,35253,35254,35257,35259,35261,35263],{"class":41,"line":10832},[39,35255,35256],{"class":53},"            test_corrects",[39,35258,10545],{"class":45},[39,35260,33762],{"class":53},[39,35262,4032],{"class":45},[39,35264,35265],{"class":53},"test_data_y.data)\n",[39,35267,35268],{"class":41,"line":10856},[39,35269,35270],{"class":128},"            # 将所有的测试样本进行累计\n",[39,35272,35273,35276,35278,35281,35283],{"class":41,"line":10861},[39,35274,35275],{"class":53},"            test_num",[39,35277,10545],{"class":45},[39,35279,35280],{"class":53},"test_data_x.size(",[39,35282,1457],{"class":74},[39,35284,574],{"class":53},[39,35286,35287],{"class":41,"line":10866},[39,35288,122],{"emptyLinePlaceholder":121},[39,35290,35291],{"class":41,"line":10871},[39,35292,35293],{"class":128},"        # 计算准确度\n",[39,35295,35296,35299,35301,35304,35306],{"class":41,"line":10880},[39,35297,35298],{"class":53},"        test_acc",[39,35300,1117],{"class":45},[39,35302,35303],{"class":53},"test_corrects.double().item()",[39,35305,1845],{"class":45},[39,35307,35308],{"class":53},"test_num\n",[39,35310,35311],{"class":41,"line":10885},[39,35312,35313],{"class":128},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[39,35315,35316,35318,35320,35323],{"class":41,"line":10891},[39,35317,33426],{"class":74},[39,35319,54],{"class":53},[39,35321,35322],{"class":237},"\"测试的准确率：\"",[39,35324,35325],{"class":53},",test_acc)\n",[39,35327,35328],{"class":41,"line":10912},[39,35329,122],{"emptyLinePlaceholder":121},[39,35331,35332],{"class":41,"line":10918},[39,35333,35334],{"class":128},"# 实现模型的测试功能\n",[39,35336,35337,35339,35341,35343,35345],{"class":41,"line":10932},[39,35338,2654],{"class":45},[39,35340,32195],{"class":74},[39,35342,4032],{"class":45},[39,35344,32200],{"class":237},[39,35346,4822],{"class":53},[39,35348,35349],{"class":41,"line":10938},[39,35350,35351],{"class":128},"    # 加载模型\n",[39,35353,35354,35356,35358],{"class":41,"line":10965},[39,35355,32264],{"class":53},[39,35357,1117],{"class":45},[39,35359,34800],{"class":53},[39,35361,35362],{"class":41,"line":10974},[39,35363,35364],{"class":128},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[39,35366,35367],{"class":41,"line":10980},[39,35368,35369],{"class":128},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[39,35371,35372,35375,35378],{"class":41,"line":10988},[39,35373,35374],{"class":53},"    model.load_state_dict(torch.load(",[39,35376,35377],{"class":237},"'best_model.pth'",[39,35379,31472],{"class":53},[39,35381,35382],{"class":41,"line":10993},[39,35383,35384],{"class":128},"    # 数据加载\n",[39,35386,35387,35389,35391],{"class":41,"line":17577},[39,35388,34997],{"class":53},[39,35390,1117],{"class":45},[39,35392,35393],{"class":53},"test_data_process()\n",[39,35395,35396],{"class":41,"line":17583},[39,35397,35398],{"class":128},"    # 加载模型测试的函数\n",[39,35400,35401],{"class":41,"line":17606},[39,35402,35403],{"class":53},"    test_model_process(model,test_dataloader)\n",[39,35405,35406],{"class":41,"line":17612},[39,35407,122],{"emptyLinePlaceholder":121},[39,35409,35410],{"class":41,"line":17635},[39,35411,35412],{"class":128},"    # 验证集推理实现：\n",[39,35414,35415],{"class":41,"line":17649},[39,35416,35417],{"class":128},"    # 加载数据加载的更详细一些\n",[39,35419,35420,35422,35424,35426,35428,35430,35432],{"class":41,"line":17669},[39,35421,32212],{"class":53},[39,35423,1117],{"class":45},[39,35425,32219],{"class":237},[39,35427,2814],{"class":45},[39,35429,32224],{"class":53},[39,35431,2811],{"class":45},[39,35433,35094],{"class":237},[39,35435,35436,35438,35440],{"class":41,"line":17675},[39,35437,32264],{"class":53},[39,35439,1117],{"class":45},[39,35441,33264],{"class":53},[39,35443,35444],{"class":41,"line":17686},[39,35445,35446],{"class":128},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[39,35448,35449],{"class":41,"line":17709},[39,35450,35451],{"class":128},"    # 顺序不可改变\n",[39,35453,35454,35457,35459,35461,35464,35466,35469,35471,35474,35476,35479,35481,35484,35486,35489,35491,35494,35496,35499,35501,35504,35506,35509],{"class":41,"line":17731},[39,35455,35456],{"class":53},"    classes",[39,35458,1117],{"class":45},[39,35460,2150],{"class":53},[39,35462,35463],{"class":237},"'T-shirt\u002Ftop'",[39,35465,426],{"class":53},[39,35467,35468],{"class":237},"'Trouser'",[39,35470,426],{"class":53},[39,35472,35473],{"class":237},"'Pullover'",[39,35475,426],{"class":53},[39,35477,35478],{"class":237},"'Dress'",[39,35480,426],{"class":53},[39,35482,35483],{"class":237},"'Coat'",[39,35485,426],{"class":53},[39,35487,35488],{"class":237},"'Sandal'",[39,35490,426],{"class":53},[39,35492,35493],{"class":237},"'Shirt'",[39,35495,426],{"class":53},[39,35497,35498],{"class":237},"'Sneaker'",[39,35500,426],{"class":53},[39,35502,35503],{"class":237},"'Bag'",[39,35505,426],{"class":53},[39,35507,35508],{"class":237},"'Ankle boot'",[39,35510,34221],{"class":53},[39,35512,35513,35515],{"class":41,"line":17736},[39,35514,35153],{"class":45},[39,35516,33859],{"class":53},[39,35518,35519],{"class":41,"line":17742},[39,35520,35521],{"class":128},"        # 将数据和标签都放到设备当中\n",[39,35523,35524,35526,35529,35531],{"class":41,"line":17756},[39,35525,4486],{"class":45},[39,35527,35528],{"class":53}," b_x,b_y ",[39,35530,27018],{"class":45},[39,35532,35172],{"class":53},[39,35534,35535,35537,35539],{"class":41,"line":17769},[39,35536,33585],{"class":53},[39,35538,1117],{"class":45},[39,35540,33590],{"class":53},[39,35542,35543,35545,35547],{"class":41,"line":17774},[39,35544,33600],{"class":53},[39,35546,1117],{"class":45},[39,35548,33605],{"class":53},[39,35550,35551],{"class":41,"line":17788},[39,35552,122],{"emptyLinePlaceholder":121},[39,35554,35555],{"class":41,"line":17793},[39,35556,35557],{"class":128},"            # 设置模型为验证模式\n",[39,35559,35560],{"class":41,"line":17799},[39,35561,33850],{"class":53},[39,35563,35564],{"class":41,"line":17804},[39,35565,35566],{"class":128},"            # 模型推理结果\n",[39,35568,35569,35571,35573],{"class":41,"line":17818},[39,35570,33635],{"class":53},[39,35572,1117],{"class":45},[39,35574,33640],{"class":53},[39,35576,35577],{"class":41,"line":17823},[39,35578,35579],{"class":128},"            # 获取最大下标，最大下标就是类别号\n",[39,35581,35582,35584,35586,35588,35590,35592,35594],{"class":41,"line":17828},[39,35583,33652],{"class":53},[39,35585,1117],{"class":45},[39,35587,33657],{"class":53},[39,35589,33660],{"class":59},[39,35591,1117],{"class":45},[39,35593,1483],{"class":74},[39,35595,574],{"class":53},[39,35597,35598],{"class":41,"line":17842},[39,35599,35600],{"class":128},"            # 取出张量中的数值\n",[39,35602,35603,35606,35608],{"class":41,"line":17854},[39,35604,35605],{"class":53},"            result",[39,35607,1117],{"class":45},[39,35609,35610],{"class":53},"pre_lab.item()\n",[39,35612,35613,35616,35618],{"class":41,"line":17859},[39,35614,35615],{"class":53},"            label",[39,35617,1117],{"class":45},[39,35619,35620],{"class":53},"b_y.item()\n",[39,35622,35623,35626,35628,35631,35634,35637,35639,35642],{"class":41,"line":17872},[39,35624,35625],{"class":74},"            print",[39,35627,54],{"class":53},[39,35629,35630],{"class":237},"\"预测值：\"",[39,35632,35633],{"class":53},",classes[result],",[39,35635,35636],{"class":237},"\"------\"",[39,35638,426],{"class":53},[39,35640,35641],{"class":237},"\"真实值：\"",[39,35643,35644],{"class":53},",classes[label])\n",[19,35646,35647],{},"（2）AlexNet",[328,35649,35650],{},[331,35651,35652],{},"神经网络构建",[30,35654,35656],{"className":31353,"code":35655,"language":31355,"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",[26,35657,35658,35664,35674,35684,35696,35700,35717,35725,35740,35752,35794,35821,35864,35890,35934,35977,36020,36047,36051,36061,36066,36094,36113,36132,36136,36141,36149,36164,36174,36188,36198,36213,36228,36243,36254,36258,36263,36273,36288,36293,36307,36322,36334,36339,36350,36355,36361,36366,36378,36398,36403,36412],{"__ignoreMap":35},[39,35659,35660,35662],{"class":41,"line":42},[39,35661,31367],{"class":45},[39,35663,31370],{"class":53},[39,35665,35666,35668,35670,35672],{"class":41,"line":92},[39,35667,31712],{"class":45},[39,35669,31715],{"class":53},[39,35671,31367],{"class":45},[39,35673,31720],{"class":53},[39,35675,35676,35678,35680,35682],{"class":41,"line":112},[39,35677,31712],{"class":45},[39,35679,31732],{"class":53},[39,35681,31367],{"class":45},[39,35683,31737],{"class":53},[39,35685,35686,35688,35691,35693],{"class":41,"line":118},[39,35687,31367],{"class":45},[39,35689,35690],{"class":53}," torch.nn.functional ",[39,35692,32358],{"class":45},[39,35694,35695],{"class":53}," F\n",[39,35697,35698],{"class":41,"line":125},[39,35699,122],{"emptyLinePlaceholder":121},[39,35701,35702,35704,35707,35709,35711,35713,35715],{"class":41,"line":132},[39,35703,15667],{"class":45},[39,35705,35706],{"class":49}," AlexNet",[39,35708,54],{"class":53},[39,35710,31753],{"class":49},[39,35712,1819],{"class":53},[39,35714,31758],{"class":49},[39,35716,31761],{"class":53},[39,35718,35719,35721,35723],{"class":41,"line":138},[39,35720,31776],{"class":45},[39,35722,31779],{"class":74},[39,35724,31782],{"class":53},[39,35726,35727,35729,35732,35734,35736,35738],{"class":41,"line":169},[39,35728,31792],{"class":74},[39,35730,35731],{"class":53},"(AlexNet,",[39,35733,31798],{"class":74},[39,35735,31801],{"class":53},[39,35737,31804],{"class":74},[39,35739,537],{"class":53},[39,35741,35742,35744,35747,35749],{"class":41,"line":190},[39,35743,31820],{"class":74},[39,35745,35746],{"class":53},".ReLu",[39,35748,1117],{"class":45},[39,35750,35751],{"class":53},"nn.ReLU()\n",[39,35753,35754,35756,35758,35760,35762,35764,35766,35768,35770,35772,35774,35776,35778,35780,35782,35784,35786,35788,35790,35792],{"class":41,"line":202},[39,35755,31820],{"class":74},[39,35757,31823],{"class":53},[39,35759,1117],{"class":45},[39,35761,31828],{"class":53},[39,35763,31831],{"class":59},[39,35765,1117],{"class":45},[39,35767,1483],{"class":74},[39,35769,426],{"class":53},[39,35771,31840],{"class":59},[39,35773,1117],{"class":45},[39,35775,1475],{"class":74},[39,35777,426],{"class":53},[39,35779,31849],{"class":59},[39,35781,1117],{"class":45},[39,35783,1734],{"class":74},[39,35785,426],{"class":53},[39,35787,31904],{"class":59},[39,35789,1117],{"class":45},[39,35791,1558],{"class":74},[39,35793,574],{"class":53},[39,35795,35796,35798,35800,35802,35805,35807,35809,35811,35813,35815,35817,35819],{"class":41,"line":207},[39,35797,31820],{"class":74},[39,35799,31888],{"class":53},[39,35801,1117],{"class":45},[39,35803,35804],{"class":53},"nn.MaxPool2d(",[39,35806,31849],{"class":59},[39,35808,1117],{"class":45},[39,35810,1339],{"class":74},[39,35812,426],{"class":53},[39,35814,31904],{"class":59},[39,35816,1117],{"class":45},[39,35818,1345],{"class":74},[39,35820,574],{"class":53},[39,35822,35823,35825,35827,35829,35831,35833,35835,35837,35839,35841,35843,35846,35848,35850,35852,35854,35856,35858,35860,35862],{"class":41,"line":212},[39,35824,31820],{"class":74},[39,35826,31917],{"class":53},[39,35828,1117],{"class":45},[39,35830,31828],{"class":53},[39,35832,31831],{"class":59},[39,35834,1117],{"class":45},[39,35836,1475],{"class":74},[39,35838,426],{"class":53},[39,35840,31840],{"class":59},[39,35842,1117],{"class":45},[39,35844,35845],{"class":74},"256",[39,35847,426],{"class":53},[39,35849,31849],{"class":59},[39,35851,1117],{"class":45},[39,35853,1583],{"class":74},[39,35855,426],{"class":53},[39,35857,31858],{"class":59},[39,35859,1117],{"class":45},[39,35861,1345],{"class":74},[39,35863,574],{"class":53},[39,35865,35866,35868,35870,35872,35874,35876,35878,35880,35882,35884,35886,35888],{"class":41,"line":223},[39,35867,31820],{"class":74},[39,35869,31952],{"class":53},[39,35871,1117],{"class":45},[39,35873,35804],{"class":53},[39,35875,31849],{"class":59},[39,35877,1117],{"class":45},[39,35879,1339],{"class":74},[39,35881,426],{"class":53},[39,35883,31904],{"class":59},[39,35885,1117],{"class":45},[39,35887,1345],{"class":74},[39,35889,574],{"class":53},[39,35891,35892,35894,35897,35899,35901,35903,35905,35907,35909,35911,35913,35916,35918,35920,35922,35924,35926,35928,35930,35932],{"class":41,"line":228},[39,35893,31820],{"class":74},[39,35895,35896],{"class":53},".c5",[39,35898,1117],{"class":45},[39,35900,31828],{"class":53},[39,35902,31831],{"class":59},[39,35904,1117],{"class":45},[39,35906,35845],{"class":74},[39,35908,426],{"class":53},[39,35910,31840],{"class":59},[39,35912,1117],{"class":45},[39,35914,35915],{"class":74},"384",[39,35917,426],{"class":53},[39,35919,31849],{"class":59},[39,35921,1117],{"class":45},[39,35923,1339],{"class":74},[39,35925,426],{"class":53},[39,35927,31858],{"class":59},[39,35929,1117],{"class":45},[39,35931,1483],{"class":74},[39,35933,574],{"class":53},[39,35935,35936,35938,35941,35943,35945,35947,35949,35951,35953,35955,35957,35959,35961,35963,35965,35967,35969,35971,35973,35975],{"class":41,"line":263},[39,35937,31820],{"class":74},[39,35939,35940],{"class":53},".c6",[39,35942,1117],{"class":45},[39,35944,31828],{"class":53},[39,35946,31831],{"class":59},[39,35948,1117],{"class":45},[39,35950,35915],{"class":74},[39,35952,426],{"class":53},[39,35954,31840],{"class":59},[39,35956,1117],{"class":45},[39,35958,35915],{"class":74},[39,35960,426],{"class":53},[39,35962,31849],{"class":59},[39,35964,1117],{"class":45},[39,35966,1339],{"class":74},[39,35968,426],{"class":53},[39,35970,31858],{"class":59},[39,35972,1117],{"class":45},[39,35974,1483],{"class":74},[39,35976,574],{"class":53},[39,35978,35979,35981,35984,35986,35988,35990,35992,35994,35996,35998,36000,36002,36004,36006,36008,36010,36012,36014,36016,36018],{"class":41,"line":287},[39,35980,31820],{"class":74},[39,35982,35983],{"class":53},".c7",[39,35985,1117],{"class":45},[39,35987,31828],{"class":53},[39,35989,31831],{"class":59},[39,35991,1117],{"class":45},[39,35993,35915],{"class":74},[39,35995,426],{"class":53},[39,35997,31840],{"class":59},[39,35999,1117],{"class":45},[39,36001,35845],{"class":74},[39,36003,426],{"class":53},[39,36005,31849],{"class":59},[39,36007,1117],{"class":45},[39,36009,1339],{"class":74},[39,36011,426],{"class":53},[39,36013,31858],{"class":59},[39,36015,1117],{"class":45},[39,36017,1483],{"class":74},[39,36019,574],{"class":53},[39,36021,36022,36024,36027,36029,36031,36033,36035,36037,36039,36041,36043,36045],{"class":41,"line":292},[39,36023,31820],{"class":74},[39,36025,36026],{"class":53},".s8",[39,36028,1117],{"class":45},[39,36030,35804],{"class":53},[39,36032,31849],{"class":59},[39,36034,1117],{"class":45},[39,36036,1339],{"class":74},[39,36038,426],{"class":53},[39,36040,31904],{"class":59},[39,36042,1117],{"class":45},[39,36044,1345],{"class":74},[39,36046,574],{"class":53},[39,36048,36049],{"class":41,"line":305},[39,36050,31977],{"class":128},[39,36052,36053,36055,36057,36059],{"class":41,"line":310},[39,36054,31820],{"class":74},[39,36056,31984],{"class":53},[39,36058,1117],{"class":45},[39,36060,31989],{"class":53},[39,36062,36063],{"class":41,"line":321},[39,36064,36065],{"class":128},"       # 定义全连接层\n",[39,36067,36068,36070,36073,36075,36077,36079,36081,36083,36085,36087,36089,36092],{"class":41,"line":713},[39,36069,31820],{"class":74},[39,36071,36072],{"class":53},".f1",[39,36074,1117],{"class":45},[39,36076,32006],{"class":53},[39,36078,1608],{"class":74},[39,36080,1717],{"class":45},[39,36082,1608],{"class":74},[39,36084,1717],{"class":45},[39,36086,35845],{"class":74},[39,36088,426],{"class":53},[39,36090,36091],{"class":74},"4096",[39,36093,574],{"class":53},[39,36095,36096,36098,36101,36103,36105,36107,36109,36111],{"class":41,"line":718},[39,36097,31820],{"class":74},[39,36099,36100],{"class":53},".f2",[39,36102,1117],{"class":45},[39,36104,32006],{"class":53},[39,36106,36091],{"class":74},[39,36108,426],{"class":53},[39,36110,36091],{"class":74},[39,36112,574],{"class":53},[39,36114,36115,36117,36120,36122,36124,36126,36128,36130],{"class":41,"line":723},[39,36116,31820],{"class":74},[39,36118,36119],{"class":53},".f3",[39,36121,1117],{"class":45},[39,36123,32006],{"class":53},[39,36125,36091],{"class":74},[39,36127,426],{"class":53},[39,36129,423],{"class":74},[39,36131,574],{"class":53},[39,36133,36134],{"class":41,"line":729},[39,36135,122],{"emptyLinePlaceholder":121},[39,36137,36138],{"class":41,"line":735},[39,36139,36140],{"class":128},"    # 定义前向传播\n",[39,36142,36143,36145,36147],{"class":41,"line":741},[39,36144,31776],{"class":45},[39,36146,32068],{"class":49},[39,36148,32071],{"class":53},[39,36150,36151,36153,36155,36157,36160,36162],{"class":41,"line":747},[39,36152,32076],{"class":53},[39,36154,1117],{"class":45},[39,36156,31798],{"class":74},[39,36158,36159],{"class":53},".ReLu(",[39,36161,31798],{"class":74},[39,36163,32088],{"class":53},[39,36165,36166,36168,36170,36172],{"class":41,"line":753},[39,36167,32076],{"class":53},[39,36169,1117],{"class":45},[39,36171,31798],{"class":74},[39,36173,32099],{"class":53},[39,36175,36176,36178,36180,36182,36184,36186],{"class":41,"line":758},[39,36177,32076],{"class":53},[39,36179,1117],{"class":45},[39,36181,31798],{"class":74},[39,36183,36159],{"class":53},[39,36185,31798],{"class":74},[39,36187,32114],{"class":53},[39,36189,36190,36192,36194,36196],{"class":41,"line":763},[39,36191,32076],{"class":53},[39,36193,1117],{"class":45},[39,36195,31798],{"class":74},[39,36197,32125],{"class":53},[39,36199,36200,36202,36204,36206,36208,36210],{"class":41,"line":772},[39,36201,32076],{"class":53},[39,36203,1117],{"class":45},[39,36205,31798],{"class":74},[39,36207,36159],{"class":53},[39,36209,31798],{"class":74},[39,36211,36212],{"class":53},".c5(x))\n",[39,36214,36215,36217,36219,36221,36223,36225],{"class":41,"line":777},[39,36216,32076],{"class":53},[39,36218,1117],{"class":45},[39,36220,31798],{"class":74},[39,36222,36159],{"class":53},[39,36224,31798],{"class":74},[39,36226,36227],{"class":53},".c6(x))\n",[39,36229,36230,36232,36234,36236,36238,36240],{"class":41,"line":785},[39,36231,32076],{"class":53},[39,36233,1117],{"class":45},[39,36235,31798],{"class":74},[39,36237,36159],{"class":53},[39,36239,31798],{"class":74},[39,36241,36242],{"class":53},".c7(x))\n",[39,36244,36245,36247,36249,36251],{"class":41,"line":796},[39,36246,32076],{"class":53},[39,36248,1117],{"class":45},[39,36250,31798],{"class":74},[39,36252,36253],{"class":53},".s8(x)\n",[39,36255,36256],{"class":41,"line":808},[39,36257,122],{"emptyLinePlaceholder":121},[39,36259,36260],{"class":41,"line":823},[39,36261,36262],{"class":128},"        # 展平加线性全连接层\n",[39,36264,36265,36267,36269,36271],{"class":41,"line":839},[39,36266,32076],{"class":53},[39,36268,1117],{"class":45},[39,36270,31798],{"class":74},[39,36272,32136],{"class":53},[39,36274,36275,36277,36279,36281,36283,36285],{"class":41,"line":845},[39,36276,32076],{"class":53},[39,36278,1117],{"class":45},[39,36280,31798],{"class":74},[39,36282,36159],{"class":53},[39,36284,31798],{"class":74},[39,36286,36287],{"class":53},".f1(x))\n",[39,36289,36290],{"class":41,"line":856},[39,36291,36292],{"class":128},"        # 还需要dropout对神经元随机进行失活\n",[39,36294,36295,36297,36299,36302,36305],{"class":41,"line":861},[39,36296,32076],{"class":53},[39,36298,1117],{"class":45},[39,36300,36301],{"class":53},"F.dropout(x,",[39,36303,36304],{"class":74},"0.5",[39,36306,574],{"class":53},[39,36308,36309,36311,36313,36315,36317,36319],{"class":41,"line":870},[39,36310,32076],{"class":53},[39,36312,1117],{"class":45},[39,36314,31798],{"class":74},[39,36316,36159],{"class":53},[39,36318,31798],{"class":74},[39,36320,36321],{"class":53},".f2(x))\n",[39,36323,36324,36326,36328,36330,36332],{"class":41,"line":9084},[39,36325,32076],{"class":53},[39,36327,1117],{"class":45},[39,36329,36301],{"class":53},[39,36331,36304],{"class":74},[39,36333,574],{"class":53},[39,36335,36336],{"class":41,"line":9090},[39,36337,36338],{"class":128},"        # 直接输出\n",[39,36340,36341,36343,36345,36347],{"class":41,"line":9102},[39,36342,32076],{"class":53},[39,36344,1117],{"class":45},[39,36346,31798],{"class":74},[39,36348,36349],{"class":53},".f3(x)\n",[39,36351,36352],{"class":41,"line":9114},[39,36353,36354],{"class":128},"        # 前向传播输出\n",[39,36356,36357,36359],{"class":41,"line":9126},[39,36358,15725],{"class":45},[39,36360,32184],{"class":53},[39,36362,36363],{"class":41,"line":10784},[39,36364,36365],{"class":128},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[39,36367,36368,36370,36372,36374,36376],{"class":41,"line":10809},[39,36369,2654],{"class":45},[39,36371,32195],{"class":74},[39,36373,4032],{"class":45},[39,36375,32200],{"class":237},[39,36377,4822],{"class":53},[39,36379,36380,36382,36384,36386,36388,36390,36392,36394,36396],{"class":41,"line":10832},[39,36381,32212],{"class":53},[39,36383,1117],{"class":45},[39,36385,31426],{"class":53},[39,36387,32219],{"class":237},[39,36389,2814],{"class":45},[39,36391,32224],{"class":53},[39,36393,2811],{"class":45},[39,36395,31451],{"class":237},[39,36397,574],{"class":53},[39,36399,36400],{"class":41,"line":10856},[39,36401,36402],{"class":128},"    # 模型实例化，然后将实例化的模型放到设备中\n",[39,36404,36405,36407,36409],{"class":41,"line":10861},[39,36406,32264],{"class":53},[39,36408,1117],{"class":45},[39,36410,36411],{"class":53},"AlexNet().to(device)\n",[39,36413,36414,36416,36418,36420,36422,36425,36427,36429],{"class":41,"line":10866},[39,36415,32274],{"class":74},[39,36417,32277],{"class":53},[39,36419,1483],{"class":74},[39,36421,426],{"class":53},[39,36423,36424],{"class":74},"227",[39,36426,426],{"class":53},[39,36428,36424],{"class":74},[39,36430,32290],{"class":53},[328,36432,36433],{"start":92},[331,36434,32303],{},[30,36436,36438],{"className":31353,"code":36437,"language":31355,"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",[26,36439,36440,36446,36452,36462,36468,36478,36488,36498,36508,36518,36522,36533,36543,36547,36551,36555,36563,36575,36585,36601,36611,36643,36657,36667,36677,36681,36691,36705,36715,36725,36735,36741,36745,36749,36753,36757,36761,36769,36789,36793,36797,36801,36805,36809,36825,36829,36833,36841,36845,36849,36857,36861,36865,36869,36877,36881,36885,36889,36893,36901,36905,36913,36917,36925,36929,36937,36941,36949,36953,36957,36965,36969,36973,36977,36989,37013,37027,37031,37035,37039,37047,37051,37059,37063,37071,37075,37083,37087,37095,37099,37107,37111,37123,37127,37135,37139,37147,37151,37155,37159,37163,37171,37175,37191,37195,37203,37207,37211,37215,37219,37223,37227,37231,37247,37251,37263,37267,37279,37283,37295,37299,37307,37311,37319,37323,37327,37332,37338,37342,37351,37355,37372,37376,37385,37389,37407,37420,37425,37438,37442,37446,37454,37458,37462,37470,37474,37482,37486,37494,37498,37502,37544,37586,37590,37594,37610,37614,37630,37634,37638,37646,37650,37654,37666,37704,37709,37714,37723,37727,37741,37751,37757,37763,37769,37775,37779,37783,37789,37793,37797,37805,37809,37827,37831,37835,37839,37855,37859,37863,37867,37871,37875,37895,37915,37919,37923,37927,37935,37943,37947,37963,37983,38003,38007,38011,38019,38027,38031,38035,38039,38051,38055,38065,38073,38090],{"__ignoreMap":35},[39,36441,36442,36444],{"class":41,"line":42},[39,36443,31367],{"class":45},[39,36445,32797],{"class":53},[39,36447,36448,36450],{"class":41,"line":92},[39,36449,31367],{"class":45},[39,36451,32804],{"class":53},[39,36453,36454,36456,36458,36460],{"class":41,"line":112},[39,36455,31367],{"class":45},[39,36457,32815],{"class":53},[39,36459,32358],{"class":45},[39,36461,32820],{"class":53},[39,36463,36464,36466],{"class":41,"line":118},[39,36465,31367],{"class":45},[39,36467,31370],{"class":53},[39,36469,36470,36472,36474,36476],{"class":41,"line":125},[39,36471,31712],{"class":45},[39,36473,32390],{"class":53},[39,36475,31367],{"class":45},[39,36477,32837],{"class":53},[39,36479,36480,36482,36484,36486],{"class":41,"line":132},[39,36481,31712],{"class":45},[39,36483,32343],{"class":53},[39,36485,31367],{"class":45},[39,36487,32348],{"class":53},[39,36489,36490,36492,36494,36496],{"class":41,"line":138},[39,36491,31712],{"class":45},[39,36493,32373],{"class":53},[39,36495,31367],{"class":45},[39,36497,32378],{"class":53},[39,36499,36500,36502,36504,36506],{"class":41,"line":169},[39,36501,31367],{"class":45},[39,36503,32390],{"class":53},[39,36505,32358],{"class":45},[39,36507,32395],{"class":53},[39,36509,36510,36512,36514,36516],{"class":41,"line":190},[39,36511,31367],{"class":45},[39,36513,32407],{"class":53},[39,36515,32358],{"class":45},[39,36517,32412],{"class":53},[39,36519,36520],{"class":41,"line":202},[39,36521,32882],{"class":128},[39,36523,36524,36526,36528,36530],{"class":41,"line":207},[39,36525,31712],{"class":45},[39,36527,32889],{"class":53},[39,36529,31367],{"class":45},[39,36531,36532],{"class":53}," AlexNet\n",[39,36534,36535,36537,36539,36541],{"class":41,"line":212},[39,36536,31712],{"class":45},[39,36538,31715],{"class":53},[39,36540,31367],{"class":45},[39,36542,31720],{"class":53},[39,36544,36545],{"class":41,"line":223},[39,36546,122],{"emptyLinePlaceholder":121},[39,36548,36549],{"class":41,"line":228},[39,36550,122],{"emptyLinePlaceholder":121},[39,36552,36553],{"class":41,"line":263},[39,36554,32917],{"class":128},[39,36556,36557,36559,36561],{"class":41,"line":287},[39,36558,32922],{"class":45},[39,36560,32925],{"class":49},[39,36562,32928],{"class":53},[39,36564,36565,36567,36569,36571,36573],{"class":41,"line":292},[39,36566,32933],{"class":53},[39,36568,1117],{"class":45},[39,36570,32430],{"class":53},[39,36572,32438],{"class":237},[39,36574,32441],{"class":53},[39,36576,36577,36579,36581,36583],{"class":41,"line":305},[39,36578,32946],{"class":59},[39,36580,1117],{"class":45},[39,36582,32451],{"class":74},[39,36584,32441],{"class":53},[39,36586,36587,36589,36591,36593,36595,36597,36599],{"class":41,"line":310},[39,36588,32957],{"class":59},[39,36590,1117],{"class":45},[39,36592,32468],{"class":53},[39,36594,32471],{"class":59},[39,36596,1117],{"class":45},[39,36598,36424],{"class":74},[39,36600,32479],{"class":53},[39,36602,36603,36605,36607,36609],{"class":41,"line":321},[39,36604,32974],{"class":59},[39,36606,1117],{"class":45},[39,36608,32451],{"class":74},[39,36610,574],{"class":53},[39,36612,36613,36615,36617,36619,36621,36623,36625,36627,36629,36631,36633,36635,36637,36639,36641],{"class":41,"line":713},[39,36614,32985],{"class":53},[39,36616,1117],{"class":45},[39,36618,32990],{"class":53},[39,36620,32993],{"class":74},[39,36622,54],{"class":53},[39,36624,32998],{"class":74},[39,36626,1717],{"class":45},[39,36628,8432],{"class":74},[39,36630,33005],{"class":53},[39,36632,32993],{"class":74},[39,36634,54],{"class":53},[39,36636,33012],{"class":74},[39,36638,1717],{"class":45},[39,36640,8432],{"class":74},[39,36642,33019],{"class":53},[39,36644,36645,36647,36649,36651,36653,36655],{"class":41,"line":718},[39,36646,33024],{"class":53},[39,36648,1117],{"class":45},[39,36650,33029],{"class":53},[39,36652,32512],{"class":59},[39,36654,1117],{"class":45},[39,36656,32517],{"class":53},[39,36658,36659,36661,36663,36665],{"class":41,"line":723},[39,36660,33040],{"class":59},[39,36662,1117],{"class":45},[39,36664,33045],{"class":74},[39,36666,32441],{"class":53},[39,36668,36669,36671,36673,36675],{"class":41,"line":729},[39,36670,33052],{"class":59},[39,36672,1117],{"class":45},[39,36674,32451],{"class":74},[39,36676,32441],{"class":53},[39,36678,36679],{"class":41,"line":735},[39,36680,33063],{"class":128},[39,36682,36683,36685,36687,36689],{"class":41,"line":741},[39,36684,33068],{"class":59},[39,36686,1117],{"class":45},[39,36688,1658],{"class":74},[39,36690,574],{"class":53},[39,36692,36693,36695,36697,36699,36701,36703],{"class":41,"line":747},[39,36694,33079],{"class":53},[39,36696,1117],{"class":45},[39,36698,32509],{"class":53},[39,36700,32512],{"class":59},[39,36702,1117],{"class":45},[39,36704,33090],{"class":53},[39,36706,36707,36709,36711,36713],{"class":41,"line":753},[39,36708,33095],{"class":59},[39,36710,1117],{"class":45},[39,36712,33045],{"class":74},[39,36714,32441],{"class":53},[39,36716,36717,36719,36721,36723],{"class":41,"line":758},[39,36718,33106],{"class":59},[39,36720,1117],{"class":45},[39,36722,32451],{"class":74},[39,36724,32441],{"class":53},[39,36726,36727,36729,36731,36733],{"class":41,"line":763},[39,36728,33117],{"class":59},[39,36730,1117],{"class":45},[39,36732,1658],{"class":74},[39,36734,574],{"class":53},[39,36736,36737,36739],{"class":41,"line":772},[39,36738,95],{"class":45},[39,36740,33130],{"class":53},[39,36742,36743],{"class":41,"line":777},[39,36744,122],{"emptyLinePlaceholder":121},[39,36746,36747],{"class":41,"line":785},[39,36748,33139],{"class":128},[39,36750,36751],{"class":41,"line":796},[39,36752,33144],{"class":128},[39,36754,36755],{"class":41,"line":808},[39,36756,122],{"emptyLinePlaceholder":121},[39,36758,36759],{"class":41,"line":823},[39,36760,33153],{"class":128},[39,36762,36763,36765,36767],{"class":41,"line":839},[39,36764,32922],{"class":45},[39,36766,33160],{"class":49},[39,36768,33163],{"class":53},[39,36770,36771,36773,36775,36777,36779,36781,36783,36785,36787],{"class":41,"line":845},[39,36772,32212],{"class":53},[39,36774,1117],{"class":45},[39,36776,31426],{"class":53},[39,36778,32219],{"class":237},[39,36780,2814],{"class":45},[39,36782,32224],{"class":53},[39,36784,2811],{"class":45},[39,36786,33182],{"class":237},[39,36788,574],{"class":53},[39,36790,36791],{"class":41,"line":856},[39,36792,122],{"emptyLinePlaceholder":121},[39,36794,36795],{"class":41,"line":861},[39,36796,122],{"emptyLinePlaceholder":121},[39,36798,36799],{"class":41,"line":870},[39,36800,33197],{"class":128},[39,36802,36803],{"class":41,"line":9084},[39,36804,33202],{"class":128},[39,36806,36807],{"class":41,"line":9090},[39,36808,33207],{"class":128},[39,36810,36811,36813,36815,36817,36819,36821,36823],{"class":41,"line":9102},[39,36812,33212],{"class":53},[39,36814,1117],{"class":45},[39,36816,33217],{"class":53},[39,36818,33220],{"class":59},[39,36820,1117],{"class":45},[39,36822,33225],{"class":74},[39,36824,574],{"class":53},[39,36826,36827],{"class":41,"line":9114},[39,36828,122],{"emptyLinePlaceholder":121},[39,36830,36831],{"class":41,"line":9126},[39,36832,33236],{"class":128},[39,36834,36835,36837,36839],{"class":41,"line":10784},[39,36836,33241],{"class":53},[39,36838,1117],{"class":45},[39,36840,33246],{"class":53},[39,36842,36843],{"class":41,"line":10809},[39,36844,122],{"emptyLinePlaceholder":121},[39,36846,36847],{"class":41,"line":10832},[39,36848,33255],{"class":128},[39,36850,36851,36853,36855],{"class":41,"line":10856},[39,36852,32264],{"class":53},[39,36854,1117],{"class":45},[39,36856,33264],{"class":53},[39,36858,36859],{"class":41,"line":10861},[39,36860,33269],{"class":128},[39,36862,36863],{"class":41,"line":10866},[39,36864,33274],{"class":128},[39,36866,36867],{"class":41,"line":10871},[39,36868,33279],{"class":128},[39,36870,36871,36873,36875],{"class":41,"line":10880},[39,36872,33284],{"class":53},[39,36874,1117],{"class":45},[39,36876,33289],{"class":53},[39,36878,36879],{"class":41,"line":10885},[39,36880,122],{"emptyLinePlaceholder":121},[39,36882,36883],{"class":41,"line":10891},[39,36884,122],{"emptyLinePlaceholder":121},[39,36886,36887],{"class":41,"line":10912},[39,36888,33302],{"class":128},[39,36890,36891],{"class":41,"line":10918},[39,36892,33307],{"class":128},[39,36894,36895,36897,36899],{"class":41,"line":10932},[39,36896,33312],{"class":53},[39,36898,1117],{"class":45},[39,36900,33317],{"class":74},[39,36902,36903],{"class":41,"line":10938},[39,36904,33322],{"class":128},[39,36906,36907,36909,36911],{"class":41,"line":10965},[39,36908,33327],{"class":53},[39,36910,1117],{"class":45},[39,36912,33332],{"class":53},[39,36914,36915],{"class":41,"line":10974},[39,36916,33337],{"class":128},[39,36918,36919,36921,36923],{"class":41,"line":10980},[39,36920,33342],{"class":53},[39,36922,1117],{"class":45},[39,36924,33332],{"class":53},[39,36926,36927],{"class":41,"line":10988},[39,36928,33351],{"class":128},[39,36930,36931,36933,36935],{"class":41,"line":10993},[39,36932,33356],{"class":53},[39,36934,1117],{"class":45},[39,36936,33332],{"class":53},[39,36938,36939],{"class":41,"line":17577},[39,36940,33365],{"class":128},[39,36942,36943,36945,36947],{"class":41,"line":17583},[39,36944,33370],{"class":53},[39,36946,1117],{"class":45},[39,36948,33332],{"class":53},[39,36950,36951],{"class":41,"line":17606},[39,36952,122],{"emptyLinePlaceholder":121},[39,36954,36955],{"class":41,"line":17612},[39,36956,33383],{"class":128},[39,36958,36959,36961,36963],{"class":41,"line":17635},[39,36960,33388],{"class":53},[39,36962,1117],{"class":45},[39,36964,33393],{"class":53},[39,36966,36967],{"class":41,"line":17649},[39,36968,122],{"emptyLinePlaceholder":121},[39,36970,36971],{"class":41,"line":17669},[39,36972,122],{"emptyLinePlaceholder":121},[39,36974,36975],{"class":41,"line":17675},[39,36976,33406],{"class":128},[39,36978,36979,36981,36983,36985,36987],{"class":41,"line":17686},[39,36980,4284],{"class":45},[39,36982,33413],{"class":53},[39,36984,27018],{"class":45},[39,36986,33418],{"class":74},[39,36988,33421],{"class":53},[39,36990,36991,36993,36995,36997,36999,37001,37003,37005,37007,37009,37011],{"class":41,"line":17709},[39,36992,33426],{"class":74},[39,36994,54],{"class":53},[39,36996,33431],{"class":237},[39,36998,33434],{"class":74},[39,37000,1845],{"class":237},[39,37002,33434],{"class":74},[39,37004,1516],{"class":237},[39,37006,33443],{"class":53},[39,37008,1793],{"class":45},[39,37010,1483],{"class":74},[39,37012,31472],{"class":53},[39,37014,37015,37017,37019,37021,37023,37025],{"class":41,"line":17731},[39,37016,33426],{"class":74},[39,37018,54],{"class":53},[39,37020,33458],{"class":237},[39,37022,1717],{"class":45},[39,37024,423],{"class":74},[39,37026,574],{"class":53},[39,37028,37029],{"class":41,"line":17736},[39,37030,122],{"emptyLinePlaceholder":121},[39,37032,37033],{"class":41,"line":17742},[39,37034,33473],{"class":128},[39,37036,37037],{"class":41,"line":17756},[39,37038,33478],{"class":128},[39,37040,37041,37043,37045],{"class":41,"line":17769},[39,37042,33483],{"class":53},[39,37044,1117],{"class":45},[39,37046,33317],{"class":74},[39,37048,37049],{"class":41,"line":17774},[39,37050,33492],{"class":128},[39,37052,37053,37055,37057],{"class":41,"line":17788},[39,37054,33497],{"class":53},[39,37056,1117],{"class":45},[39,37058,4168],{"class":74},[39,37060,37061],{"class":41,"line":17793},[39,37062,33506],{"class":128},[39,37064,37065,37067,37069],{"class":41,"line":17799},[39,37066,33511],{"class":53},[39,37068,1117],{"class":45},[39,37070,33317],{"class":74},[39,37072,37073],{"class":41,"line":17804},[39,37074,33520],{"class":128},[39,37076,37077,37079,37081],{"class":41,"line":17818},[39,37078,33525],{"class":53},[39,37080,1117],{"class":45},[39,37082,4168],{"class":74},[39,37084,37085],{"class":41,"line":17823},[39,37086,33534],{"class":128},[39,37088,37089,37091,37093],{"class":41,"line":17828},[39,37090,33539],{"class":53},[39,37092,1117],{"class":45},[39,37094,4168],{"class":74},[39,37096,37097],{"class":41,"line":17842},[39,37098,33548],{"class":128},[39,37100,37101,37103,37105],{"class":41,"line":17854},[39,37102,33553],{"class":53},[39,37104,1117],{"class":45},[39,37106,4168],{"class":74},[39,37108,37109],{"class":41,"line":17859},[39,37110,33562],{"class":128},[39,37112,37113,37115,37117,37119,37121],{"class":41,"line":17872},[39,37114,4486],{"class":45},[39,37116,32576],{"class":53},[39,37118,27018],{"class":45},[39,37120,32581],{"class":74},[39,37122,33575],{"class":53},[39,37124,37125],{"class":41,"line":17877},[39,37126,33580],{"class":128},[39,37128,37129,37131,37133],{"class":41,"line":17882},[39,37130,33585],{"class":53},[39,37132,1117],{"class":45},[39,37134,33590],{"class":53},[39,37136,37137],{"class":41,"line":17887},[39,37138,33595],{"class":128},[39,37140,37141,37143,37145],{"class":41,"line":17900},[39,37142,33600],{"class":53},[39,37144,1117],{"class":45},[39,37146,33605],{"class":53},[39,37148,37149],{"class":41,"line":17905},[39,37150,33611],{"class":128},[39,37152,37153],{"class":41,"line":33608},[39,37154,33617],{"class":53},[39,37156,37157],{"class":41,"line":33614},[39,37158,33623],{"class":128},[39,37160,37161],{"class":41,"line":33620},[39,37162,33629],{"class":128},[39,37164,37165,37167,37169],{"class":41,"line":33626},[39,37166,33635],{"class":53},[39,37168,1117],{"class":45},[39,37170,33640],{"class":53},[39,37172,37173],{"class":41,"line":33632},[39,37174,33646],{"class":128},[39,37176,37177,37179,37181,37183,37185,37187,37189],{"class":41,"line":33643},[39,37178,33652],{"class":53},[39,37180,1117],{"class":45},[39,37182,33657],{"class":53},[39,37184,33660],{"class":59},[39,37186,1117],{"class":45},[39,37188,1483],{"class":74},[39,37190,574],{"class":53},[39,37192,37193],{"class":41,"line":33649},[39,37194,33672],{"class":128},[39,37196,37197,37199,37201],{"class":41,"line":33669},[39,37198,33678],{"class":53},[39,37200,1117],{"class":45},[39,37202,33683],{"class":53},[39,37204,37205],{"class":41,"line":33675},[39,37206,33689],{"class":128},[39,37208,37209],{"class":41,"line":33686},[39,37210,33695],{"class":53},[39,37212,37213],{"class":41,"line":33692},[39,37214,33701],{"class":128},[39,37216,37217],{"class":41,"line":33698},[39,37218,33707],{"class":53},[39,37220,37221],{"class":41,"line":33704},[39,37222,33713],{"class":128},[39,37224,37225],{"class":41,"line":33710},[39,37226,33719],{"class":53},[39,37228,37229],{"class":41,"line":33716},[39,37230,33725],{"class":128},[39,37232,37233,37235,37237,37239,37241,37243,37245],{"class":41,"line":33722},[39,37234,33731],{"class":53},[39,37236,10545],{"class":45},[39,37238,33736],{"class":53},[39,37240,1717],{"class":45},[39,37242,33741],{"class":53},[39,37244,1457],{"class":74},[39,37246,574],{"class":53},[39,37248,37249],{"class":41,"line":33728},[39,37250,33751],{"class":128},[39,37252,37253,37255,37257,37259,37261],{"class":41,"line":33748},[39,37254,33757],{"class":53},[39,37256,10545],{"class":45},[39,37258,33762],{"class":53},[39,37260,4032],{"class":45},[39,37262,33767],{"class":53},[39,37264,37265],{"class":41,"line":33754},[39,37266,33773],{"class":128},[39,37268,37269,37271,37273,37275,37277],{"class":41,"line":33770},[39,37270,33779],{"class":53},[39,37272,10545],{"class":45},[39,37274,33741],{"class":53},[39,37276,1457],{"class":74},[39,37278,574],{"class":53},[39,37280,37281],{"class":41,"line":33776},[39,37282,33793],{"class":128},[39,37284,37285,37287,37289,37291,37293],{"class":41,"line":33790},[39,37286,4486],{"class":45},[39,37288,33801],{"class":53},[39,37290,27018],{"class":45},[39,37292,32581],{"class":74},[39,37294,33808],{"class":53},[39,37296,37297],{"class":41,"line":33796},[39,37298,33814],{"class":128},[39,37300,37301,37303,37305],{"class":41,"line":33811},[39,37302,33585],{"class":53},[39,37304,1117],{"class":45},[39,37306,33590],{"class":53},[39,37308,37309],{"class":41,"line":33817},[39,37310,33829],{"class":128},[39,37312,37313,37315,37317],{"class":41,"line":33826},[39,37314,33600],{"class":53},[39,37316,1117],{"class":45},[39,37318,33605],{"class":53},[39,37320,37321],{"class":41,"line":33832},[39,37322,33844],{"class":128},[39,37324,37325],{"class":41,"line":33841},[39,37326,33850],{"class":53},[39,37328,37329],{"class":41,"line":33847},[39,37330,37331],{"class":128},"            # 验证时不计算梯度以节省内存\u002F计算\n",[39,37333,37334,37336],{"class":41,"line":33853},[39,37335,33856],{"class":45},[39,37337,33859],{"class":53},[39,37339,37340],{"class":41,"line":33862},[39,37341,33865],{"class":128},[39,37343,37344,37347,37349],{"class":41,"line":33868},[39,37345,37346],{"class":53},"                output",[39,37348,1117],{"class":45},[39,37350,33640],{"class":53},[39,37352,37353],{"class":41,"line":33879},[39,37354,33882],{"class":128},[39,37356,37357,37360,37362,37364,37366,37368,37370],{"class":41,"line":33885},[39,37358,37359],{"class":53},"                pre_lab",[39,37361,1117],{"class":45},[39,37363,33657],{"class":53},[39,37365,33660],{"class":59},[39,37367,1117],{"class":45},[39,37369,1483],{"class":74},[39,37371,574],{"class":53},[39,37373,37374],{"class":41,"line":33904},[39,37375,33907],{"class":128},[39,37377,37378,37381,37383],{"class":41,"line":33910},[39,37379,37380],{"class":53},"                val_batch_loss",[39,37382,1117],{"class":45},[39,37384,33683],{"class":53},[39,37386,37387],{"class":41,"line":33921},[39,37388,33924],{"class":128},[39,37390,37391,37394,37396,37399,37401,37403,37405],{"class":41,"line":33927},[39,37392,37393],{"class":53},"                val_loss",[39,37395,10545],{"class":45},[39,37397,37398],{"class":53},"val_batch_loss.item()",[39,37400,1717],{"class":45},[39,37402,33741],{"class":53},[39,37404,1457],{"class":74},[39,37406,574],{"class":53},[39,37408,37409,37412,37414,37416,37418],{"class":41,"line":33947},[39,37410,37411],{"class":53},"                val_corrects",[39,37413,10545],{"class":45},[39,37415,33762],{"class":53},[39,37417,4032],{"class":45},[39,37419,33767],{"class":53},[39,37421,37422],{"class":41,"line":33963},[39,37423,37424],{"class":128},"            # 当前用于验证的样本数量\n",[39,37426,37427,37430,37432,37434,37436],{"class":41,"line":33969},[39,37428,37429],{"class":53},"            val_num",[39,37431,10545],{"class":45},[39,37433,33741],{"class":53},[39,37435,1457],{"class":74},[39,37437,574],{"class":53},[39,37439,37440],{"class":41,"line":33983},[39,37441,33986],{"class":128},[39,37443,37444],{"class":41,"line":33989},[39,37445,33992],{"class":128},[39,37447,37448,37450,37452],{"class":41,"line":33995},[39,37449,33998],{"class":53},[39,37451,1845],{"class":45},[39,37453,34003],{"class":53},[39,37455,37456],{"class":41,"line":34006},[39,37457,34009],{"class":128},[39,37459,37460],{"class":41,"line":34012},[39,37461,34015],{"class":128},[39,37463,37464,37466,37468],{"class":41,"line":34018},[39,37465,34021],{"class":53},[39,37467,1845],{"class":45},[39,37469,34003],{"class":53},[39,37471,37472],{"class":41,"line":34028},[39,37473,34031],{"class":128},[39,37475,37476,37478,37480],{"class":41,"line":34034},[39,37477,34037],{"class":53},[39,37479,1845],{"class":45},[39,37481,34042],{"class":53},[39,37483,37484],{"class":41,"line":34045},[39,37485,34048],{"class":128},[39,37487,37488,37490,37492],{"class":41,"line":34051},[39,37489,34054],{"class":53},[39,37491,1845],{"class":45},[39,37493,34042],{"class":53},[39,37495,37496],{"class":41,"line":34061},[39,37497,122],{"emptyLinePlaceholder":121},[39,37499,37500],{"class":41,"line":34066},[39,37501,34069],{"class":128},[39,37503,37504,37506,37508,37510,37512,37514,37516,37518,37520,37522,37524,37526,37528,37530,37532,37534,37536,37538,37540,37542],{"class":41,"line":34072},[39,37505,33426],{"class":74},[39,37507,54],{"class":53},[39,37509,4675],{"class":237},[39,37511,33434],{"class":74},[39,37513,34083],{"class":237},[39,37515,2156],{"class":74},[39,37517,34088],{"class":45},[39,37519,2206],{"class":74},[39,37521,34093],{"class":237},[39,37523,2156],{"class":74},[39,37525,34088],{"class":45},[39,37527,2206],{"class":74},[39,37529,4675],{"class":237},[39,37531,34104],{"class":53},[39,37533,1793],{"class":45},[39,37535,1483],{"class":74},[39,37537,34111],{"class":53},[39,37539,1793],{"class":45},[39,37541,1483],{"class":74},[39,37543,34118],{"class":53},[39,37545,37546,37548,37550,37552,37554,37556,37558,37560,37562,37564,37566,37568,37570,37572,37574,37576,37578,37580,37582,37584],{"class":41,"line":34121},[39,37547,33426],{"class":74},[39,37549,54],{"class":53},[39,37551,4675],{"class":237},[39,37553,33434],{"class":74},[39,37555,34132],{"class":237},[39,37557,2156],{"class":74},[39,37559,34088],{"class":45},[39,37561,2206],{"class":74},[39,37563,34141],{"class":237},[39,37565,2156],{"class":74},[39,37567,34088],{"class":45},[39,37569,2206],{"class":74},[39,37571,4675],{"class":237},[39,37573,34152],{"class":53},[39,37575,1793],{"class":45},[39,37577,1483],{"class":74},[39,37579,34159],{"class":53},[39,37581,1793],{"class":45},[39,37583,1483],{"class":74},[39,37585,34118],{"class":53},[39,37587,37588],{"class":41,"line":34168},[39,37589,122],{"emptyLinePlaceholder":121},[39,37591,37592],{"class":41,"line":34173},[39,37593,34176],{"class":128},[39,37595,37596,37598,37600,37602,37604,37606,37608],{"class":41,"line":34179},[39,37597,3590],{"class":45},[39,37599,34184],{"class":53},[39,37601,1793],{"class":45},[39,37603,1483],{"class":74},[39,37605,2200],{"class":53},[39,37607,2220],{"class":45},[39,37609,34195],{"class":53},[39,37611,37612],{"class":41,"line":34198},[39,37613,34201],{"class":128},[39,37615,37616,37618,37620,37622,37624,37626,37628],{"class":41,"line":34204},[39,37617,34207],{"class":53},[39,37619,1311],{"class":74},[39,37621,1117],{"class":45},[39,37623,34214],{"class":53},[39,37625,1793],{"class":45},[39,37627,1483],{"class":74},[39,37629,34221],{"class":53},[39,37631,37632],{"class":41,"line":34224},[39,37633,34227],{"class":128},[39,37635,37636],{"class":41,"line":34230},[39,37637,34233],{"class":128},[39,37639,37640,37642,37644],{"class":41,"line":34236},[39,37641,34239],{"class":53},[39,37643,1117],{"class":45},[39,37645,33289],{"class":53},[39,37647,37648],{"class":41,"line":34246},[39,37649,122],{"emptyLinePlaceholder":121},[39,37651,37652],{"class":41,"line":34251},[39,37653,34254],{"class":128},[39,37655,37656,37658,37660,37662,37664],{"class":41,"line":34257},[39,37657,34260],{"class":53},[39,37659,1117],{"class":45},[39,37661,34265],{"class":53},[39,37663,1793],{"class":45},[39,37665,34270],{"class":53},[39,37667,37668,37670,37672,37674,37676,37678,37680,37682,37684,37686,37688,37690,37692,37694,37696,37698,37700,37702],{"class":41,"line":34273},[39,37669,33426],{"class":74},[39,37671,54],{"class":53},[39,37673,34280],{"class":237},[39,37675,2156],{"class":74},[39,37677,34285],{"class":45},[39,37679,2206],{"class":74},[39,37681,1805],{"class":237},[39,37683,2156],{"class":74},[39,37685,34285],{"class":45},[39,37687,2206],{"class":74},[39,37689,34298],{"class":237},[39,37691,34301],{"class":53},[39,37693,34304],{"class":45},[39,37695,2167],{"class":74},[39,37697,34309],{"class":53},[39,37699,1592],{"class":45},[39,37701,2167],{"class":74},[39,37703,31472],{"class":53},[39,37705,37706],{"class":41,"line":34318},[39,37707,37708],{"class":128},"    # 选择最优参数并保存\n",[39,37710,37711],{"class":41,"line":34324},[39,37712,37713],{"class":128},"    # 保存最佳模型权重字典\n",[39,37715,37716,37719,37721],{"class":41,"line":34330},[39,37717,37718],{"class":53},"    torch.save(best_model_wts,",[39,37720,34342],{"class":237},[39,37722,574],{"class":53},[39,37724,37725],{"class":41,"line":34336},[39,37726,34362],{"class":128},[39,37728,37729,37731,37733,37735,37737,37739],{"class":41,"line":34347},[39,37730,34368],{"class":53},[39,37732,1117],{"class":45},[39,37734,34373],{"class":53},[39,37736,34376],{"class":59},[39,37738,1117],{"class":45},[39,37740,542],{"class":53},[39,37742,37743,37745,37747,37749],{"class":41,"line":34353},[39,37744,34386],{"class":237},[39,37746,2119],{"class":53},[39,37748,34391],{"class":74},[39,37750,34394],{"class":53},[39,37752,37753,37755],{"class":41,"line":34359},[39,37754,34400],{"class":237},[39,37756,34403],{"class":53},[39,37758,37759,37761],{"class":41,"line":34365},[39,37760,34409],{"class":237},[39,37762,34412],{"class":53},[39,37764,37765,37767],{"class":41,"line":34383},[39,37766,34418],{"class":237},[39,37768,34421],{"class":53},[39,37770,37771,37773],{"class":41,"line":34397},[39,37772,34427],{"class":237},[39,37774,34430],{"class":53},[39,37776,37777],{"class":41,"line":34406},[39,37778,34436],{"class":53},[39,37780,37781],{"class":41,"line":34415},[39,37782,34442],{"class":128},[39,37784,37785,37787],{"class":41,"line":34424},[39,37786,95],{"class":45},[39,37788,34450],{"class":53},[39,37790,37791],{"class":41,"line":34433},[39,37792,122],{"emptyLinePlaceholder":121},[39,37794,37795],{"class":41,"line":34439},[39,37796,34461],{"class":128},[39,37798,37799,37801,37803],{"class":41,"line":34445},[39,37800,32922],{"class":45},[39,37802,34469],{"class":49},[39,37804,34472],{"class":53},[39,37806,37807],{"class":41,"line":34453},[39,37808,34478],{"class":128},[39,37810,37811,37813,37815,37817,37819,37821,37823,37825],{"class":41,"line":34458},[39,37812,34484],{"class":53},[39,37814,32668],{"class":59},[39,37816,1117],{"class":45},[39,37818,54],{"class":53},[39,37820,1759],{"class":74},[39,37822,426],{"class":53},[39,37824,1558],{"class":74},[39,37826,31472],{"class":53},[39,37828,37829],{"class":41,"line":34464},[39,37830,34504],{"class":128},[39,37832,37833],{"class":41,"line":34475},[39,37834,34510],{"class":128},[39,37836,37837],{"class":41,"line":34481},[39,37838,34516],{"class":128},[39,37840,37841,37843,37845,37847,37849,37851,37853],{"class":41,"line":34501},[39,37842,32702],{"class":53},[39,37844,1483],{"class":74},[39,37846,426],{"class":53},[39,37848,1345],{"class":74},[39,37850,426],{"class":53},[39,37852,1483],{"class":74},[39,37854,574],{"class":53},[39,37856,37857],{"class":41,"line":34507},[39,37858,34539],{"class":128},[39,37860,37861],{"class":41,"line":34513},[39,37862,34545],{"class":128},[39,37864,37865],{"class":41,"line":34519},[39,37866,34551],{"class":128},[39,37868,37869],{"class":41,"line":34536},[39,37870,34557],{"class":128},[39,37872,37873],{"class":41,"line":34542},[39,37874,34563],{"class":128},[39,37876,37877,37879,37881,37883,37885,37887,37889,37891,37893],{"class":41,"line":34548},[39,37878,34569],{"class":53},[39,37880,34572],{"class":237},[39,37882,34575],{"class":53},[39,37884,34578],{"class":237},[39,37886,426],{"class":53},[39,37888,34583],{"class":59},[39,37890,1117],{"class":45},[39,37892,34588],{"class":237},[39,37894,574],{"class":53},[39,37896,37897,37899,37901,37903,37905,37907,37909,37911,37913],{"class":41,"line":34554},[39,37898,34569],{"class":53},[39,37900,34572],{"class":237},[39,37902,34600],{"class":53},[39,37904,34603],{"class":237},[39,37906,426],{"class":53},[39,37908,34583],{"class":59},[39,37910,1117],{"class":45},[39,37912,34612],{"class":237},[39,37914,574],{"class":53},[39,37916,37917],{"class":41,"line":34560},[39,37918,34620],{"class":128},[39,37920,37921],{"class":41,"line":34566},[39,37922,34626],{"class":53},[39,37924,37925],{"class":41,"line":34593},[39,37926,34632],{"class":128},[39,37928,37929,37931,37933],{"class":41,"line":34617},[39,37930,34638],{"class":53},[39,37932,34641],{"class":237},[39,37934,574],{"class":53},[39,37936,37937,37939,37941],{"class":41,"line":34623},[39,37938,34649],{"class":53},[39,37940,34652],{"class":237},[39,37942,574],{"class":53},[39,37944,37945],{"class":41,"line":34629},[39,37946,34660],{"class":128},[39,37948,37949,37951,37953,37955,37957,37959,37961],{"class":41,"line":34635},[39,37950,32702],{"class":53},[39,37952,1483],{"class":74},[39,37954,426],{"class":53},[39,37956,1345],{"class":74},[39,37958,426],{"class":53},[39,37960,1345],{"class":74},[39,37962,574],{"class":53},[39,37964,37965,37967,37969,37971,37973,37975,37977,37979,37981],{"class":41,"line":34646},[39,37966,34569],{"class":53},[39,37968,34572],{"class":237},[39,37970,34687],{"class":53},[39,37972,34578],{"class":237},[39,37974,426],{"class":53},[39,37976,34583],{"class":59},[39,37978,1117],{"class":45},[39,37980,34698],{"class":237},[39,37982,574],{"class":53},[39,37984,37985,37987,37989,37991,37993,37995,37997,37999,38001],{"class":41,"line":34657},[39,37986,34569],{"class":53},[39,37988,34572],{"class":237},[39,37990,34710],{"class":53},[39,37992,34603],{"class":237},[39,37994,426],{"class":53},[39,37996,34583],{"class":59},[39,37998,1117],{"class":45},[39,38000,34721],{"class":237},[39,38002,574],{"class":53},[39,38004,38005],{"class":41,"line":34663},[39,38006,34729],{"class":128},[39,38008,38009],{"class":41,"line":34680},[39,38010,34626],{"class":53},[39,38012,38013,38015,38017],{"class":41,"line":34703},[39,38014,34638],{"class":53},[39,38016,34572],{"class":237},[39,38018,574],{"class":53},[39,38020,38021,38023,38025],{"class":41,"line":34726},[39,38022,34649],{"class":53},[39,38024,34751],{"class":237},[39,38026,574],{"class":53},[39,38028,38029],{"class":41,"line":34732},[39,38030,34759],{"class":53},[39,38032,38033],{"class":41,"line":34737},[39,38034,122],{"emptyLinePlaceholder":121},[39,38036,38037],{"class":41,"line":34746},[39,38038,34770],{"class":128},[39,38040,38041,38043,38045,38047,38049],{"class":41,"line":34756},[39,38042,2654],{"class":45},[39,38044,32195],{"class":74},[39,38046,4032],{"class":45},[39,38048,32200],{"class":237},[39,38050,4822],{"class":53},[39,38052,38053],{"class":41,"line":34762},[39,38054,34789],{"class":128},[39,38056,38057,38060,38062],{"class":41,"line":34767},[39,38058,38059],{"class":53},"    AlexNet",[39,38061,1117],{"class":45},[39,38063,38064],{"class":53},"AlexNet()\n",[39,38066,38067,38069,38071],{"class":41,"line":34773},[39,38068,34806],{"class":53},[39,38070,1117],{"class":45},[39,38072,34811],{"class":53},[39,38074,38075,38077,38079,38082,38084,38086,38088],{"class":41,"line":34786},[39,38076,34368],{"class":53},[39,38078,1117],{"class":45},[39,38080,38081],{"class":53},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[39,38083,34824],{"class":59},[39,38085,1117],{"class":45},[39,38087,248],{"class":74},[39,38089,574],{"class":53},[39,38091,38092],{"class":41,"line":34792},[39,38093,34836],{"class":53},[328,38095,38096],{"start":112},[331,38097,34849],{},[30,38099,38101],{"className":31353,"code":38100,"language":31355,"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",[26,38102,38103,38109,38119,38129,38139,38143,38153,38163,38174,38178,38182,38186,38194,38210,38220,38236,38246,38260,38264,38274,38284,38294,38300,38304,38308,38316,38320,38336,38344,38348,38352,38360,38368,38372,38376,38380,38384,38390,38394,38404,38412,38420,38424,38428,38432,38440,38444,38460,38464,38468,38472,38484,38488,38500,38504,38508,38520,38524,38534,38538,38542,38554,38558,38566,38570,38574,38582,38586,38594,38598,38602,38606,38610,38614,38630,38638,38642,38646,38694,38700,38704,38714,38722,38730,38734,38738,38742,38746,38754,38758,38774,38778,38786,38794],{"__ignoreMap":35},[39,38104,38105,38107],{"class":41,"line":42},[39,38106,31367],{"class":45},[39,38108,31370],{"class":53},[39,38110,38111,38113,38115,38117],{"class":41,"line":92},[39,38112,31367],{"class":45},[39,38114,32390],{"class":53},[39,38116,32358],{"class":45},[39,38118,32395],{"class":53},[39,38120,38121,38123,38125,38127],{"class":41,"line":112},[39,38122,31712],{"class":45},[39,38124,34877],{"class":53},[39,38126,31367],{"class":45},[39,38128,34882],{"class":53},[39,38130,38131,38133,38135,38137],{"class":41,"line":118},[39,38132,31712],{"class":45},[39,38134,32373],{"class":53},[39,38136,31367],{"class":45},[39,38138,32378],{"class":53},[39,38140,38141],{"class":41,"line":125},[39,38142,34897],{"class":128},[39,38144,38145,38147,38149,38151],{"class":41,"line":132},[39,38146,31712],{"class":45},[39,38148,32343],{"class":53},[39,38150,31367],{"class":45},[39,38152,32348],{"class":53},[39,38154,38155,38157,38159,38161],{"class":41,"line":138},[39,38156,31712],{"class":45},[39,38158,32889],{"class":53},[39,38160,31367],{"class":45},[39,38162,36532],{"class":53},[39,38164,38165,38167,38170,38172],{"class":41,"line":169},[39,38166,31712],{"class":45},[39,38168,38169],{"class":53}," 练习.AlexNet.model ",[39,38171,31367],{"class":45},[39,38173,36532],{"class":53},[39,38175,38176],{"class":41,"line":190},[39,38177,122],{"emptyLinePlaceholder":121},[39,38179,38180],{"class":41,"line":202},[39,38181,122],{"emptyLinePlaceholder":121},[39,38183,38184],{"class":41,"line":207},[39,38185,34926],{"class":128},[39,38187,38188,38190,38192],{"class":41,"line":212},[39,38189,32922],{"class":45},[39,38191,34933],{"class":49},[39,38193,32928],{"class":53},[39,38195,38196,38198,38200,38202,38204,38206,38208],{"class":41,"line":223},[39,38197,34940],{"class":53},[39,38199,1117],{"class":45},[39,38201,32430],{"class":53},[39,38203,32433],{"class":59},[39,38205,1117],{"class":45},[39,38207,32438],{"class":237},[39,38209,32441],{"class":53},[39,38211,38212,38214,38216,38218],{"class":41,"line":228},[39,38213,34957],{"class":59},[39,38215,1117],{"class":45},[39,38217,34962],{"class":74},[39,38219,32441],{"class":53},[39,38221,38222,38224,38226,38228,38230,38232,38234],{"class":41,"line":263},[39,38223,34969],{"class":59},[39,38225,1117],{"class":45},[39,38227,32468],{"class":53},[39,38229,32471],{"class":59},[39,38231,1117],{"class":45},[39,38233,36424],{"class":74},[39,38235,32479],{"class":53},[39,38237,38238,38240,38242,38244],{"class":41,"line":287},[39,38239,34986],{"class":59},[39,38241,1117],{"class":45},[39,38243,32451],{"class":74},[39,38245,574],{"class":53},[39,38247,38248,38250,38252,38254,38256,38258],{"class":41,"line":292},[39,38249,34997],{"class":53},[39,38251,1117],{"class":45},[39,38253,32509],{"class":53},[39,38255,32512],{"class":59},[39,38257,1117],{"class":45},[39,38259,35008],{"class":53},[39,38261,38262],{"class":41,"line":305},[39,38263,35013],{"class":128},[39,38265,38266,38268,38270,38272],{"class":41,"line":310},[39,38267,35018],{"class":59},[39,38269,1117],{"class":45},[39,38271,1483],{"class":74},[39,38273,32441],{"class":53},[39,38275,38276,38278,38280,38282],{"class":41,"line":321},[39,38277,35029],{"class":59},[39,38279,1117],{"class":45},[39,38281,32451],{"class":74},[39,38283,32441],{"class":53},[39,38285,38286,38288,38290,38292],{"class":41,"line":713},[39,38287,35040],{"class":59},[39,38289,1117],{"class":45},[39,38291,1457],{"class":74},[39,38293,574],{"class":53},[39,38295,38296,38298],{"class":41,"line":718},[39,38297,95],{"class":45},[39,38299,35053],{"class":53},[39,38301,38302],{"class":41,"line":723},[39,38303,122],{"emptyLinePlaceholder":121},[39,38305,38306],{"class":41,"line":729},[39,38307,35062],{"class":128},[39,38309,38310,38312,38314],{"class":41,"line":735},[39,38311,32922],{"class":45},[39,38313,35069],{"class":49},[39,38315,35072],{"class":53},[39,38317,38318],{"class":41,"line":741},[39,38319,35077],{"class":128},[39,38321,38322,38324,38326,38328,38330,38332,38334],{"class":41,"line":747},[39,38323,32212],{"class":53},[39,38325,1117],{"class":45},[39,38327,32219],{"class":237},[39,38329,2814],{"class":45},[39,38331,32224],{"class":53},[39,38333,2811],{"class":45},[39,38335,35094],{"class":237},[39,38337,38338,38340,38342],{"class":41,"line":753},[39,38339,32264],{"class":53},[39,38341,1117],{"class":45},[39,38343,33264],{"class":53},[39,38345,38346],{"class":41,"line":758},[39,38347,122],{"emptyLinePlaceholder":121},[39,38349,38350],{"class":41,"line":763},[39,38351,35111],{"class":128},[39,38353,38354,38356,38358],{"class":41,"line":772},[39,38355,35116],{"class":53},[39,38357,1117],{"class":45},[39,38359,33317],{"class":74},[39,38361,38362,38364,38366],{"class":41,"line":777},[39,38363,35125],{"class":53},[39,38365,1117],{"class":45},[39,38367,4168],{"class":74},[39,38369,38370],{"class":41,"line":785},[39,38371,122],{"emptyLinePlaceholder":121},[39,38373,38374],{"class":41,"line":796},[39,38375,35138],{"class":128},[39,38377,38378],{"class":41,"line":808},[39,38379,35143],{"class":128},[39,38381,38382],{"class":41,"line":823},[39,38383,35148],{"class":128},[39,38385,38386,38388],{"class":41,"line":839},[39,38387,35153],{"class":45},[39,38389,33859],{"class":53},[39,38391,38392],{"class":41,"line":845},[39,38393,35160],{"class":128},[39,38395,38396,38398,38400,38402],{"class":41,"line":856},[39,38397,4486],{"class":45},[39,38399,35167],{"class":53},[39,38401,27018],{"class":45},[39,38403,35172],{"class":53},[39,38405,38406,38408,38410],{"class":41,"line":861},[39,38407,35177],{"class":53},[39,38409,1117],{"class":45},[39,38411,35182],{"class":53},[39,38413,38414,38416,38418],{"class":41,"line":870},[39,38415,35187],{"class":53},[39,38417,1117],{"class":45},[39,38419,35192],{"class":53},[39,38421,38422],{"class":41,"line":9084},[39,38423,35197],{"class":128},[39,38425,38426],{"class":41,"line":9090},[39,38427,33850],{"class":53},[39,38429,38430],{"class":41,"line":9102},[39,38431,35206],{"class":128},[39,38433,38434,38436,38438],{"class":41,"line":9114},[39,38435,33635],{"class":53},[39,38437,1117],{"class":45},[39,38439,35215],{"class":53},[39,38441,38442],{"class":41,"line":9126},[39,38443,35220],{"class":128},[39,38445,38446,38448,38450,38452,38454,38456,38458],{"class":41,"line":10784},[39,38447,33652],{"class":53},[39,38449,1117],{"class":45},[39,38451,33657],{"class":53},[39,38453,33660],{"class":59},[39,38455,1117],{"class":45},[39,38457,1483],{"class":74},[39,38459,574],{"class":53},[39,38461,38462],{"class":41,"line":10809},[39,38463,35241],{"class":128},[39,38465,38466],{"class":41,"line":10832},[39,38467,35246],{"class":128},[39,38469,38470],{"class":41,"line":10856},[39,38471,35251],{"class":128},[39,38473,38474,38476,38478,38480,38482],{"class":41,"line":10861},[39,38475,35256],{"class":53},[39,38477,10545],{"class":45},[39,38479,33762],{"class":53},[39,38481,4032],{"class":45},[39,38483,35265],{"class":53},[39,38485,38486],{"class":41,"line":10866},[39,38487,35270],{"class":128},[39,38489,38490,38492,38494,38496,38498],{"class":41,"line":10871},[39,38491,35275],{"class":53},[39,38493,10545],{"class":45},[39,38495,35280],{"class":53},[39,38497,1457],{"class":74},[39,38499,574],{"class":53},[39,38501,38502],{"class":41,"line":10880},[39,38503,122],{"emptyLinePlaceholder":121},[39,38505,38506],{"class":41,"line":10885},[39,38507,35293],{"class":128},[39,38509,38510,38512,38514,38516,38518],{"class":41,"line":10891},[39,38511,35298],{"class":53},[39,38513,1117],{"class":45},[39,38515,35303],{"class":53},[39,38517,1845],{"class":45},[39,38519,35308],{"class":53},[39,38521,38522],{"class":41,"line":10912},[39,38523,35313],{"class":128},[39,38525,38526,38528,38530,38532],{"class":41,"line":10918},[39,38527,33426],{"class":74},[39,38529,54],{"class":53},[39,38531,35322],{"class":237},[39,38533,35325],{"class":53},[39,38535,38536],{"class":41,"line":10932},[39,38537,122],{"emptyLinePlaceholder":121},[39,38539,38540],{"class":41,"line":10938},[39,38541,35334],{"class":128},[39,38543,38544,38546,38548,38550,38552],{"class":41,"line":10965},[39,38545,2654],{"class":45},[39,38547,32195],{"class":74},[39,38549,4032],{"class":45},[39,38551,32200],{"class":237},[39,38553,4822],{"class":53},[39,38555,38556],{"class":41,"line":10974},[39,38557,35351],{"class":128},[39,38559,38560,38562,38564],{"class":41,"line":10980},[39,38561,32264],{"class":53},[39,38563,1117],{"class":45},[39,38565,38064],{"class":53},[39,38567,38568],{"class":41,"line":10988},[39,38569,35364],{"class":128},[39,38571,38572],{"class":41,"line":10993},[39,38573,35369],{"class":128},[39,38575,38576,38578,38580],{"class":41,"line":17577},[39,38577,35374],{"class":53},[39,38579,35377],{"class":237},[39,38581,31472],{"class":53},[39,38583,38584],{"class":41,"line":17583},[39,38585,35384],{"class":128},[39,38587,38588,38590,38592],{"class":41,"line":17606},[39,38589,34997],{"class":53},[39,38591,1117],{"class":45},[39,38593,35393],{"class":53},[39,38595,38596],{"class":41,"line":17612},[39,38597,35398],{"class":128},[39,38599,38600],{"class":41,"line":17635},[39,38601,35403],{"class":53},[39,38603,38604],{"class":41,"line":17649},[39,38605,122],{"emptyLinePlaceholder":121},[39,38607,38608],{"class":41,"line":17669},[39,38609,35412],{"class":128},[39,38611,38612],{"class":41,"line":17675},[39,38613,35417],{"class":128},[39,38615,38616,38618,38620,38622,38624,38626,38628],{"class":41,"line":17686},[39,38617,32212],{"class":53},[39,38619,1117],{"class":45},[39,38621,32219],{"class":237},[39,38623,2814],{"class":45},[39,38625,32224],{"class":53},[39,38627,2811],{"class":45},[39,38629,35094],{"class":237},[39,38631,38632,38634,38636],{"class":41,"line":17709},[39,38633,32264],{"class":53},[39,38635,1117],{"class":45},[39,38637,33264],{"class":53},[39,38639,38640],{"class":41,"line":17731},[39,38641,35446],{"class":128},[39,38643,38644],{"class":41,"line":17736},[39,38645,35451],{"class":128},[39,38647,38648,38650,38652,38654,38656,38658,38660,38662,38664,38666,38668,38670,38672,38674,38676,38678,38680,38682,38684,38686,38688,38690,38692],{"class":41,"line":17742},[39,38649,35456],{"class":53},[39,38651,1117],{"class":45},[39,38653,2150],{"class":53},[39,38655,35463],{"class":237},[39,38657,426],{"class":53},[39,38659,35468],{"class":237},[39,38661,426],{"class":53},[39,38663,35473],{"class":237},[39,38665,426],{"class":53},[39,38667,35478],{"class":237},[39,38669,426],{"class":53},[39,38671,35483],{"class":237},[39,38673,426],{"class":53},[39,38675,35488],{"class":237},[39,38677,426],{"class":53},[39,38679,35493],{"class":237},[39,38681,426],{"class":53},[39,38683,35498],{"class":237},[39,38685,426],{"class":53},[39,38687,35503],{"class":237},[39,38689,426],{"class":53},[39,38691,35508],{"class":237},[39,38693,34221],{"class":53},[39,38695,38696,38698],{"class":41,"line":17756},[39,38697,35153],{"class":45},[39,38699,33859],{"class":53},[39,38701,38702],{"class":41,"line":17769},[39,38703,35521],{"class":128},[39,38705,38706,38708,38710,38712],{"class":41,"line":17774},[39,38707,4486],{"class":45},[39,38709,35528],{"class":53},[39,38711,27018],{"class":45},[39,38713,35172],{"class":53},[39,38715,38716,38718,38720],{"class":41,"line":17788},[39,38717,33585],{"class":53},[39,38719,1117],{"class":45},[39,38721,33590],{"class":53},[39,38723,38724,38726,38728],{"class":41,"line":17793},[39,38725,33600],{"class":53},[39,38727,1117],{"class":45},[39,38729,33605],{"class":53},[39,38731,38732],{"class":41,"line":17799},[39,38733,122],{"emptyLinePlaceholder":121},[39,38735,38736],{"class":41,"line":17804},[39,38737,35557],{"class":128},[39,38739,38740],{"class":41,"line":17818},[39,38741,33850],{"class":53},[39,38743,38744],{"class":41,"line":17823},[39,38745,35566],{"class":128},[39,38747,38748,38750,38752],{"class":41,"line":17828},[39,38749,33635],{"class":53},[39,38751,1117],{"class":45},[39,38753,33640],{"class":53},[39,38755,38756],{"class":41,"line":17842},[39,38757,35579],{"class":128},[39,38759,38760,38762,38764,38766,38768,38770,38772],{"class":41,"line":17854},[39,38761,33652],{"class":53},[39,38763,1117],{"class":45},[39,38765,33657],{"class":53},[39,38767,33660],{"class":59},[39,38769,1117],{"class":45},[39,38771,1483],{"class":74},[39,38773,574],{"class":53},[39,38775,38776],{"class":41,"line":17859},[39,38777,35600],{"class":128},[39,38779,38780,38782,38784],{"class":41,"line":17872},[39,38781,35605],{"class":53},[39,38783,1117],{"class":45},[39,38785,35610],{"class":53},[39,38787,38788,38790,38792],{"class":41,"line":17877},[39,38789,35615],{"class":53},[39,38791,1117],{"class":45},[39,38793,35620],{"class":53},[39,38795,38796,38798,38800,38802,38804,38806,38808,38810],{"class":41,"line":17882},[39,38797,35625],{"class":74},[39,38799,54],{"class":53},[39,38801,35630],{"class":237},[39,38803,35633],{"class":53},[39,38805,35636],{"class":237},[39,38807,426],{"class":53},[39,38809,35641],{"class":237},[39,38811,35644],{"class":53},[476,38813,38815],{"id":38814},"_22vgg","2.2.VGG",[22971,38817,38819],{"id":38818},"_221原理","2.2.1.原理",[19,38821,38822],{},[2585,38823],{"alt":35,"src":38824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,38826,38827],{},[2585,38828],{"alt":35,"src":38829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,38831,38832],{},[2585,38833],{"alt":35,"src":38834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[19,38836,38837],{},"参数详细描述：",[19,38839,38840],{},[2585,38841],{"alt":35,"src":38842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[19,38844,38845],{},[2585,38846],{"alt":35,"src":38847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[19,38849,38850],{},[2585,38851],{"alt":35,"src":38852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,38854,38855],{},[2585,38856],{"alt":35,"src":38857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,38859,38860],{},[2585,38861],{"alt":35,"src":38862},"\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",[22971,38864,38866],{"id":38865},"_222代码实现","2.2.2.代码实现",[328,38868,38869],{},[331,38870,38871],{},"网络搭建",[30,38873,38875],{"className":31353,"code":38874,"language":31355,"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",[26,38876,38877,38883,38895,38905,38915,38919,38936,38944,38963,38968,38973,38985,39023,39028,39064,39068,39097,39102,39107,39118,39154,39158,39194,39198,39226,39230,39235,39246,39282,39286,39322,39326,39362,39366,39394,39398,39403,39414,39451,39455,39491,39495,39531,39535,39563,39567,39572,39583,39619,39623,39659,39663,39699,39703,39731,39735,39740,39751,39756,39761,39766,39787,39791,39803,39807,39819,39823,39827,39832,39837,39852,39857,39867,39872,39887,39892,39911,39916,39925,39930,39940,39945,39950,39964,39969,39983,39991,39995,39999,40007,40018,40029,40040,40051,40062,40073,40079,40083,40088,40101,40121,40127,40136],{"__ignoreMap":35},[39,38878,38879,38881],{"class":41,"line":42},[39,38880,31367],{"class":45},[39,38882,31370],{"class":53},[39,38884,38885,38887,38890,38892],{"class":41,"line":92},[39,38886,31712],{"class":45},[39,38888,38889],{"class":53}," sympy.core.sympify ",[39,38891,31367],{"class":45},[39,38893,38894],{"class":53}," kernS\n",[39,38896,38897,38899,38901,38903],{"class":41,"line":112},[39,38898,31712],{"class":45},[39,38900,31715],{"class":53},[39,38902,31367],{"class":45},[39,38904,31720],{"class":53},[39,38906,38907,38909,38911,38913],{"class":41,"line":118},[39,38908,31712],{"class":45},[39,38910,31732],{"class":53},[39,38912,31367],{"class":45},[39,38914,31737],{"class":53},[39,38916,38917],{"class":41,"line":125},[39,38918,122],{"emptyLinePlaceholder":121},[39,38920,38921,38923,38926,38928,38930,38932,38934],{"class":41,"line":132},[39,38922,15667],{"class":45},[39,38924,38925],{"class":49}," VGG16",[39,38927,54],{"class":53},[39,38929,31753],{"class":49},[39,38931,1819],{"class":53},[39,38933,31758],{"class":49},[39,38935,31761],{"class":53},[39,38937,38938,38940,38942],{"class":41,"line":138},[39,38939,31776],{"class":45},[39,38941,31779],{"class":74},[39,38943,31782],{"class":53},[39,38945,38946,38948,38950,38953,38955,38957,38959,38961],{"class":41,"line":169},[39,38947,31792],{"class":74},[39,38949,54],{"class":53},[39,38951,38952],{"class":74},"VGG16",[39,38954,63],{"class":53},[39,38956,31798],{"class":74},[39,38958,31801],{"class":53},[39,38960,31804],{"class":74},[39,38962,537],{"class":53},[39,38964,38965],{"class":41,"line":190},[39,38966,38967],{"class":128},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[39,38969,38970],{"class":41,"line":202},[39,38971,38972],{"class":128},"        # 这里用的是灰度图\n",[39,38974,38975,38977,38980,38982],{"class":41,"line":207},[39,38976,31820],{"class":74},[39,38978,38979],{"class":53},".block1",[39,38981,1117],{"class":45},[39,38983,38984],{"class":53},"nn.Sequential(\n",[39,38986,38987,38990,38992,38994,38996,38998,39000,39002,39004,39006,39008,39010,39012,39014,39016,39018,39020],{"class":41,"line":212},[39,38988,38989],{"class":53},"            nn.Conv2d(",[39,38991,31831],{"class":59},[39,38993,1117],{"class":45},[39,38995,1483],{"class":74},[39,38997,426],{"class":53},[39,38999,31840],{"class":59},[39,39001,1117],{"class":45},[39,39003,1469],{"class":74},[39,39005,426],{"class":53},[39,39007,31849],{"class":59},[39,39009,1117],{"class":45},[39,39011,1339],{"class":74},[39,39013,426],{"class":53},[39,39015,31858],{"class":59},[39,39017,1117],{"class":45},[39,39019,1483],{"class":74},[39,39021,39022],{"class":53},"),\n",[39,39024,39025],{"class":41,"line":223},[39,39026,39027],{"class":53},"            nn.ReLU(),\n",[39,39029,39030,39032,39034,39036,39038,39040,39042,39044,39046,39048,39050,39052,39054,39056,39058,39060,39062],{"class":41,"line":228},[39,39031,38989],{"class":53},[39,39033,31831],{"class":59},[39,39035,1117],{"class":45},[39,39037,1469],{"class":74},[39,39039,426],{"class":53},[39,39041,31840],{"class":59},[39,39043,1117],{"class":45},[39,39045,1469],{"class":74},[39,39047,426],{"class":53},[39,39049,31849],{"class":59},[39,39051,1117],{"class":45},[39,39053,1339],{"class":74},[39,39055,426],{"class":53},[39,39057,31858],{"class":59},[39,39059,1117],{"class":45},[39,39061,1483],{"class":74},[39,39063,39022],{"class":53},[39,39065,39066],{"class":41,"line":263},[39,39067,39027],{"class":53},[39,39069,39070,39073,39075,39077,39079,39081,39083,39085,39087,39089,39091,39093,39095],{"class":41,"line":287},[39,39071,39072],{"class":53},"            nn.MaxPool2d(",[39,39074,31849],{"class":59},[39,39076,1117],{"class":45},[39,39078,1345],{"class":74},[39,39080,426],{"class":53},[39,39082,31904],{"class":59},[39,39084,1117],{"class":45},[39,39086,1345],{"class":74},[39,39088,426],{"class":53},[39,39090,31858],{"class":59},[39,39092,1117],{"class":45},[39,39094,1457],{"class":74},[39,39096,574],{"class":53},[39,39098,39099],{"class":41,"line":292},[39,39100,39101],{"class":53},"        )\n",[39,39103,39104],{"class":41,"line":305},[39,39105,39106],{"class":128},"        # 第二层\n",[39,39108,39109,39111,39114,39116],{"class":41,"line":310},[39,39110,31820],{"class":74},[39,39112,39113],{"class":53},".block2",[39,39115,1117],{"class":45},[39,39117,38984],{"class":53},[39,39119,39120,39122,39124,39126,39128,39130,39132,39134,39136,39138,39140,39142,39144,39146,39148,39150,39152],{"class":41,"line":321},[39,39121,38989],{"class":53},[39,39123,31831],{"class":59},[39,39125,1117],{"class":45},[39,39127,1469],{"class":74},[39,39129,426],{"class":53},[39,39131,31840],{"class":59},[39,39133,1117],{"class":45},[39,39135,33045],{"class":74},[39,39137,426],{"class":53},[39,39139,31849],{"class":59},[39,39141,1117],{"class":45},[39,39143,1339],{"class":74},[39,39145,426],{"class":53},[39,39147,31858],{"class":59},[39,39149,1117],{"class":45},[39,39151,1483],{"class":74},[39,39153,39022],{"class":53},[39,39155,39156],{"class":41,"line":713},[39,39157,39027],{"class":53},[39,39159,39160,39162,39164,39166,39168,39170,39172,39174,39176,39178,39180,39182,39184,39186,39188,39190,39192],{"class":41,"line":718},[39,39161,38989],{"class":53},[39,39163,31831],{"class":59},[39,39165,1117],{"class":45},[39,39167,33045],{"class":74},[39,39169,426],{"class":53},[39,39171,31840],{"class":59},[39,39173,1117],{"class":45},[39,39175,33045],{"class":74},[39,39177,426],{"class":53},[39,39179,31849],{"class":59},[39,39181,1117],{"class":45},[39,39183,1339],{"class":74},[39,39185,426],{"class":53},[39,39187,31858],{"class":59},[39,39189,1117],{"class":45},[39,39191,1483],{"class":74},[39,39193,39022],{"class":53},[39,39195,39196],{"class":41,"line":723},[39,39197,39027],{"class":53},[39,39199,39200,39202,39204,39206,39208,39210,39212,39214,39216,39218,39220,39222,39224],{"class":41,"line":729},[39,39201,39072],{"class":53},[39,39203,31849],{"class":59},[39,39205,1117],{"class":45},[39,39207,1345],{"class":74},[39,39209,426],{"class":53},[39,39211,31904],{"class":59},[39,39213,1117],{"class":45},[39,39215,1345],{"class":74},[39,39217,426],{"class":53},[39,39219,31858],{"class":59},[39,39221,1117],{"class":45},[39,39223,1457],{"class":74},[39,39225,574],{"class":53},[39,39227,39228],{"class":41,"line":735},[39,39229,39101],{"class":53},[39,39231,39232],{"class":41,"line":741},[39,39233,39234],{"class":128},"        # 第三层\n",[39,39236,39237,39239,39242,39244],{"class":41,"line":747},[39,39238,31820],{"class":74},[39,39240,39241],{"class":53},".block3",[39,39243,1117],{"class":45},[39,39245,38984],{"class":53},[39,39247,39248,39250,39252,39254,39256,39258,39260,39262,39264,39266,39268,39270,39272,39274,39276,39278,39280],{"class":41,"line":753},[39,39249,38989],{"class":53},[39,39251,31831],{"class":59},[39,39253,1117],{"class":45},[39,39255,33045],{"class":74},[39,39257,426],{"class":53},[39,39259,31840],{"class":59},[39,39261,1117],{"class":45},[39,39263,35845],{"class":74},[39,39265,426],{"class":53},[39,39267,31849],{"class":59},[39,39269,1117],{"class":45},[39,39271,1339],{"class":74},[39,39273,426],{"class":53},[39,39275,31858],{"class":59},[39,39277,1117],{"class":45},[39,39279,1483],{"class":74},[39,39281,39022],{"class":53},[39,39283,39284],{"class":41,"line":758},[39,39285,39027],{"class":53},[39,39287,39288,39290,39292,39294,39296,39298,39300,39302,39304,39306,39308,39310,39312,39314,39316,39318,39320],{"class":41,"line":763},[39,39289,38989],{"class":53},[39,39291,31831],{"class":59},[39,39293,1117],{"class":45},[39,39295,35845],{"class":74},[39,39297,426],{"class":53},[39,39299,31840],{"class":59},[39,39301,1117],{"class":45},[39,39303,35845],{"class":74},[39,39305,426],{"class":53},[39,39307,31849],{"class":59},[39,39309,1117],{"class":45},[39,39311,1339],{"class":74},[39,39313,426],{"class":53},[39,39315,31858],{"class":59},[39,39317,1117],{"class":45},[39,39319,1483],{"class":74},[39,39321,39022],{"class":53},[39,39323,39324],{"class":41,"line":772},[39,39325,39027],{"class":53},[39,39327,39328,39330,39332,39334,39336,39338,39340,39342,39344,39346,39348,39350,39352,39354,39356,39358,39360],{"class":41,"line":777},[39,39329,38989],{"class":53},[39,39331,31831],{"class":59},[39,39333,1117],{"class":45},[39,39335,35845],{"class":74},[39,39337,426],{"class":53},[39,39339,31840],{"class":59},[39,39341,1117],{"class":45},[39,39343,35845],{"class":74},[39,39345,426],{"class":53},[39,39347,31849],{"class":59},[39,39349,1117],{"class":45},[39,39351,1339],{"class":74},[39,39353,426],{"class":53},[39,39355,31858],{"class":59},[39,39357,1117],{"class":45},[39,39359,1483],{"class":74},[39,39361,39022],{"class":53},[39,39363,39364],{"class":41,"line":785},[39,39365,39027],{"class":53},[39,39367,39368,39370,39372,39374,39376,39378,39380,39382,39384,39386,39388,39390,39392],{"class":41,"line":796},[39,39369,39072],{"class":53},[39,39371,31849],{"class":59},[39,39373,1117],{"class":45},[39,39375,1345],{"class":74},[39,39377,426],{"class":53},[39,39379,31904],{"class":59},[39,39381,1117],{"class":45},[39,39383,1345],{"class":74},[39,39385,426],{"class":53},[39,39387,31858],{"class":59},[39,39389,1117],{"class":45},[39,39391,1457],{"class":74},[39,39393,574],{"class":53},[39,39395,39396],{"class":41,"line":808},[39,39397,39101],{"class":53},[39,39399,39400],{"class":41,"line":823},[39,39401,39402],{"class":128},"        # 第四层\n",[39,39404,39405,39407,39410,39412],{"class":41,"line":839},[39,39406,31820],{"class":74},[39,39408,39409],{"class":53},".block4",[39,39411,1117],{"class":45},[39,39413,38984],{"class":53},[39,39415,39416,39418,39420,39422,39424,39426,39428,39430,39433,39435,39437,39439,39441,39443,39445,39447,39449],{"class":41,"line":845},[39,39417,38989],{"class":53},[39,39419,31831],{"class":59},[39,39421,1117],{"class":45},[39,39423,35845],{"class":74},[39,39425,426],{"class":53},[39,39427,31840],{"class":59},[39,39429,1117],{"class":45},[39,39431,39432],{"class":74},"512",[39,39434,426],{"class":53},[39,39436,31849],{"class":59},[39,39438,1117],{"class":45},[39,39440,1339],{"class":74},[39,39442,426],{"class":53},[39,39444,31858],{"class":59},[39,39446,1117],{"class":45},[39,39448,1483],{"class":74},[39,39450,39022],{"class":53},[39,39452,39453],{"class":41,"line":856},[39,39454,39027],{"class":53},[39,39456,39457,39459,39461,39463,39465,39467,39469,39471,39473,39475,39477,39479,39481,39483,39485,39487,39489],{"class":41,"line":861},[39,39458,38989],{"class":53},[39,39460,31831],{"class":59},[39,39462,1117],{"class":45},[39,39464,39432],{"class":74},[39,39466,426],{"class":53},[39,39468,31840],{"class":59},[39,39470,1117],{"class":45},[39,39472,39432],{"class":74},[39,39474,426],{"class":53},[39,39476,31849],{"class":59},[39,39478,1117],{"class":45},[39,39480,1339],{"class":74},[39,39482,426],{"class":53},[39,39484,31858],{"class":59},[39,39486,1117],{"class":45},[39,39488,1483],{"class":74},[39,39490,39022],{"class":53},[39,39492,39493],{"class":41,"line":870},[39,39494,39027],{"class":53},[39,39496,39497,39499,39501,39503,39505,39507,39509,39511,39513,39515,39517,39519,39521,39523,39525,39527,39529],{"class":41,"line":9084},[39,39498,38989],{"class":53},[39,39500,31831],{"class":59},[39,39502,1117],{"class":45},[39,39504,39432],{"class":74},[39,39506,426],{"class":53},[39,39508,31840],{"class":59},[39,39510,1117],{"class":45},[39,39512,39432],{"class":74},[39,39514,426],{"class":53},[39,39516,31849],{"class":59},[39,39518,1117],{"class":45},[39,39520,1339],{"class":74},[39,39522,426],{"class":53},[39,39524,31858],{"class":59},[39,39526,1117],{"class":45},[39,39528,1483],{"class":74},[39,39530,39022],{"class":53},[39,39532,39533],{"class":41,"line":9090},[39,39534,39027],{"class":53},[39,39536,39537,39539,39541,39543,39545,39547,39549,39551,39553,39555,39557,39559,39561],{"class":41,"line":9102},[39,39538,39072],{"class":53},[39,39540,31849],{"class":59},[39,39542,1117],{"class":45},[39,39544,1345],{"class":74},[39,39546,426],{"class":53},[39,39548,31904],{"class":59},[39,39550,1117],{"class":45},[39,39552,1345],{"class":74},[39,39554,426],{"class":53},[39,39556,31858],{"class":59},[39,39558,1117],{"class":45},[39,39560,1457],{"class":74},[39,39562,574],{"class":53},[39,39564,39565],{"class":41,"line":9114},[39,39566,39101],{"class":53},[39,39568,39569],{"class":41,"line":9126},[39,39570,39571],{"class":128},"        # 第五层\n",[39,39573,39574,39576,39579,39581],{"class":41,"line":10784},[39,39575,31820],{"class":74},[39,39577,39578],{"class":53},".block5",[39,39580,1117],{"class":45},[39,39582,38984],{"class":53},[39,39584,39585,39587,39589,39591,39593,39595,39597,39599,39601,39603,39605,39607,39609,39611,39613,39615,39617],{"class":41,"line":10809},[39,39586,38989],{"class":53},[39,39588,31831],{"class":59},[39,39590,1117],{"class":45},[39,39592,39432],{"class":74},[39,39594,426],{"class":53},[39,39596,31840],{"class":59},[39,39598,1117],{"class":45},[39,39600,39432],{"class":74},[39,39602,426],{"class":53},[39,39604,31849],{"class":59},[39,39606,1117],{"class":45},[39,39608,1339],{"class":74},[39,39610,426],{"class":53},[39,39612,31858],{"class":59},[39,39614,1117],{"class":45},[39,39616,1483],{"class":74},[39,39618,39022],{"class":53},[39,39620,39621],{"class":41,"line":10832},[39,39622,39027],{"class":53},[39,39624,39625,39627,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657],{"class":41,"line":10856},[39,39626,38989],{"class":53},[39,39628,31831],{"class":59},[39,39630,1117],{"class":45},[39,39632,39432],{"class":74},[39,39634,426],{"class":53},[39,39636,31840],{"class":59},[39,39638,1117],{"class":45},[39,39640,39432],{"class":74},[39,39642,426],{"class":53},[39,39644,31849],{"class":59},[39,39646,1117],{"class":45},[39,39648,1339],{"class":74},[39,39650,426],{"class":53},[39,39652,31858],{"class":59},[39,39654,1117],{"class":45},[39,39656,1483],{"class":74},[39,39658,39022],{"class":53},[39,39660,39661],{"class":41,"line":10861},[39,39662,39027],{"class":53},[39,39664,39665,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687,39689,39691,39693,39695,39697],{"class":41,"line":10866},[39,39666,38989],{"class":53},[39,39668,31831],{"class":59},[39,39670,1117],{"class":45},[39,39672,39432],{"class":74},[39,39674,426],{"class":53},[39,39676,31840],{"class":59},[39,39678,1117],{"class":45},[39,39680,39432],{"class":74},[39,39682,426],{"class":53},[39,39684,31849],{"class":59},[39,39686,1117],{"class":45},[39,39688,1339],{"class":74},[39,39690,426],{"class":53},[39,39692,31858],{"class":59},[39,39694,1117],{"class":45},[39,39696,1483],{"class":74},[39,39698,39022],{"class":53},[39,39700,39701],{"class":41,"line":10871},[39,39702,39027],{"class":53},[39,39704,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729],{"class":41,"line":10880},[39,39706,39072],{"class":53},[39,39708,31849],{"class":59},[39,39710,1117],{"class":45},[39,39712,1345],{"class":74},[39,39714,426],{"class":53},[39,39716,31904],{"class":59},[39,39718,1117],{"class":45},[39,39720,1345],{"class":74},[39,39722,426],{"class":53},[39,39724,31858],{"class":59},[39,39726,1117],{"class":45},[39,39728,1457],{"class":74},[39,39730,574],{"class":53},[39,39732,39733],{"class":41,"line":10885},[39,39734,39101],{"class":53},[39,39736,39737],{"class":41,"line":10891},[39,39738,39739],{"class":128},"        # 全连接层\n",[39,39741,39742,39744,39747,39749],{"class":41,"line":10912},[39,39743,31820],{"class":74},[39,39745,39746],{"class":53},".block6",[39,39748,1117],{"class":45},[39,39750,38984],{"class":53},[39,39752,39753],{"class":41,"line":10918},[39,39754,39755],{"class":128},"            # 平展操作\n",[39,39757,39758],{"class":41,"line":10932},[39,39759,39760],{"class":128},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[39,39762,39763],{"class":41,"line":10938},[39,39764,39765],{"class":53},"            nn.Flatten(),\n",[39,39767,39768,39771,39773,39775,39777,39779,39781,39783,39785],{"class":41,"line":10965},[39,39769,39770],{"class":53},"            nn.Linear(",[39,39772,1633],{"class":74},[39,39774,1717],{"class":45},[39,39776,1633],{"class":74},[39,39778,1717],{"class":45},[39,39780,39432],{"class":74},[39,39782,426],{"class":53},[39,39784,35845],{"class":74},[39,39786,39022],{"class":53},[39,39788,39789],{"class":41,"line":10974},[39,39790,39027],{"class":53},[39,39792,39793,39795,39797,39799,39801],{"class":41,"line":10980},[39,39794,39770],{"class":53},[39,39796,35845],{"class":74},[39,39798,426],{"class":53},[39,39800,33045],{"class":74},[39,39802,39022],{"class":53},[39,39804,39805],{"class":41,"line":10988},[39,39806,39027],{"class":53},[39,39808,39809,39811,39813,39815,39817],{"class":41,"line":10993},[39,39810,39770],{"class":53},[39,39812,33045],{"class":74},[39,39814,426],{"class":53},[39,39816,423],{"class":74},[39,39818,574],{"class":53},[39,39820,39821],{"class":41,"line":17577},[39,39822,39101],{"class":53},[39,39824,39825],{"class":41,"line":17583},[39,39826,122],{"emptyLinePlaceholder":121},[39,39828,39829],{"class":41,"line":17606},[39,39830,39831],{"class":128},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[39,39833,39834],{"class":41,"line":17612},[39,39835,39836],{"class":128},"        # 循环遍历模型\n",[39,39838,39839,39841,39844,39846,39849],{"class":41,"line":17635},[39,39840,4486],{"class":45},[39,39842,39843],{"class":53}," m ",[39,39845,27018],{"class":45},[39,39847,39848],{"class":74}," self",[39,39850,39851],{"class":53},".modules():\n",[39,39853,39854],{"class":41,"line":17649},[39,39855,39856],{"class":128},"            # print(m)\n",[39,39858,39859,39861,39864],{"class":41,"line":17669},[39,39860,5723],{"class":45},[39,39862,39863],{"class":74}," isinstance",[39,39865,39866],{"class":53},"(m,nn.Conv2d):\n",[39,39868,39869],{"class":41,"line":17675},[39,39870,39871],{"class":128},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[39,39873,39874,39877,39880,39882,39885],{"class":41,"line":17686},[39,39875,39876],{"class":53},"                nn.init.kaiming_normal_(m.weight,",[39,39878,39879],{"class":59},"nonlinearity",[39,39881,1117],{"class":45},[39,39883,39884],{"class":237},"'relu'",[39,39886,574],{"class":53},[39,39888,39889],{"class":41,"line":17709},[39,39890,39891],{"class":128},"                # 判断b参数是否存在\n",[39,39893,39894,39897,39900,39903,39906,39909],{"class":41,"line":17731},[39,39895,39896],{"class":45},"                if",[39,39898,39899],{"class":53}," m.bias ",[39,39901,39902],{"class":45},"is",[39,39904,39905],{"class":45}," not",[39,39907,39908],{"class":74}," None",[39,39910,4822],{"class":53},[39,39912,39913],{"class":41,"line":17736},[39,39914,39915],{"class":128},"                    # 如果参数不存在的化初始化b=0\n",[39,39917,39918,39921,39923],{"class":41,"line":17742},[39,39919,39920],{"class":53},"                    nn.init.constant_(m.bias,",[39,39922,1457],{"class":74},[39,39924,574],{"class":53},[39,39926,39927],{"class":41,"line":17756},[39,39928,39929],{"class":128},"            # 全连接层初始化\n",[39,39931,39932,39935,39937],{"class":41,"line":17769},[39,39933,39934],{"class":45},"            elif",[39,39936,39863],{"class":74},[39,39938,39939],{"class":53},"(m,nn.Linear):\n",[39,39941,39942],{"class":41,"line":17774},[39,39943,39944],{"class":128},"                # 这个初始化方法是利用的是正太分布的方式\n",[39,39946,39947],{"class":41,"line":17788},[39,39948,39949],{"class":128},"                # 均值为0，方差为0.01\n",[39,39951,39952,39955,39957,39959,39962],{"class":41,"line":17793},[39,39953,39954],{"class":53},"                nn.init.normal_(m.weight,",[39,39956,1457],{"class":74},[39,39958,426],{"class":53},[39,39960,39961],{"class":74},"0.01",[39,39963,574],{"class":53},[39,39965,39966],{"class":41,"line":17799},[39,39967,39968],{"class":128},"                # 初始化b参数\n",[39,39970,39971,39973,39975,39977,39979,39981],{"class":41,"line":17804},[39,39972,39896],{"class":45},[39,39974,39899],{"class":53},[39,39976,39902],{"class":45},[39,39978,39905],{"class":45},[39,39980,39908],{"class":74},[39,39982,4822],{"class":53},[39,39984,39985,39987,39989],{"class":41,"line":17818},[39,39986,39920],{"class":53},[39,39988,1457],{"class":74},[39,39990,574],{"class":53},[39,39992,39993],{"class":41,"line":17823},[39,39994,122],{"emptyLinePlaceholder":121},[39,39996,39997],{"class":41,"line":17828},[39,39998,36140],{"class":128},[39,40000,40001,40003,40005],{"class":41,"line":17842},[39,40002,31776],{"class":45},[39,40004,32068],{"class":49},[39,40006,32071],{"class":53},[39,40008,40009,40011,40013,40015],{"class":41,"line":17854},[39,40010,32076],{"class":53},[39,40012,1117],{"class":45},[39,40014,31798],{"class":74},[39,40016,40017],{"class":53},".block1(x)\n",[39,40019,40020,40022,40024,40026],{"class":41,"line":17859},[39,40021,32076],{"class":53},[39,40023,1117],{"class":45},[39,40025,31798],{"class":74},[39,40027,40028],{"class":53},".block2(x)\n",[39,40030,40031,40033,40035,40037],{"class":41,"line":17872},[39,40032,32076],{"class":53},[39,40034,1117],{"class":45},[39,40036,31798],{"class":74},[39,40038,40039],{"class":53},".block3(x)\n",[39,40041,40042,40044,40046,40048],{"class":41,"line":17877},[39,40043,32076],{"class":53},[39,40045,1117],{"class":45},[39,40047,31798],{"class":74},[39,40049,40050],{"class":53},".block4(x)\n",[39,40052,40053,40055,40057,40059],{"class":41,"line":17882},[39,40054,32076],{"class":53},[39,40056,1117],{"class":45},[39,40058,31798],{"class":74},[39,40060,40061],{"class":53},".block5(x)\n",[39,40063,40064,40066,40068,40070],{"class":41,"line":17887},[39,40065,32076],{"class":53},[39,40067,1117],{"class":45},[39,40069,31798],{"class":74},[39,40071,40072],{"class":53},".block6(x)\n",[39,40074,40075,40077],{"class":41,"line":17900},[39,40076,15725],{"class":45},[39,40078,32184],{"class":53},[39,40080,40081],{"class":41,"line":17905},[39,40082,122],{"emptyLinePlaceholder":121},[39,40084,40085],{"class":41,"line":33608},[39,40086,40087],{"class":128},"# 验证模型\n",[39,40089,40090,40092,40094,40096,40099],{"class":41,"line":33614},[39,40091,2654],{"class":45},[39,40093,32195],{"class":74},[39,40095,4032],{"class":45},[39,40097,40098],{"class":237},"'__main__'",[39,40100,4822],{"class":53},[39,40102,40103,40105,40107,40109,40111,40113,40115,40117,40119],{"class":41,"line":33620},[39,40104,32212],{"class":53},[39,40106,1117],{"class":45},[39,40108,31426],{"class":53},[39,40110,32219],{"class":237},[39,40112,2814],{"class":45},[39,40114,32224],{"class":53},[39,40116,2811],{"class":45},[39,40118,31451],{"class":237},[39,40120,574],{"class":53},[39,40122,40123,40125],{"class":41,"line":33626},[39,40124,32274],{"class":74},[39,40126,31460],{"class":53},[39,40128,40129,40131,40133],{"class":41,"line":33632},[39,40130,32264],{"class":53},[39,40132,1117],{"class":45},[39,40134,40135],{"class":53},"VGG16().to(device)\n",[39,40137,40138,40140,40142,40144,40146,40148,40150,40152],{"class":41,"line":33643},[39,40139,32274],{"class":74},[39,40141,32277],{"class":53},[39,40143,1483],{"class":74},[39,40145,426],{"class":53},[39,40147,32476],{"class":74},[39,40149,426],{"class":53},[39,40151,32476],{"class":74},[39,40153,32290],{"class":53},[328,40155,40156],{"start":92},[331,40157,40158],{},"训练代码",[19,40160,40161],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40163,40164],{},"解决方式:",[19,40166,40167],{},"①权重初始化",[30,40169,40171],{"className":31353,"code":40170,"language":31355,"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",[26,40172,40173,40178,40183,40195,40200,40208,40213,40226,40231,40245,40250,40259,40264,40273,40278,40283,40296,40301,40315],{"__ignoreMap":35},[39,40174,40175],{"class":41,"line":42},[39,40176,40177],{"class":128},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[39,40179,40180],{"class":41,"line":92},[39,40181,40182],{"class":128},"# 循环遍历模型\n",[39,40184,40185,40187,40189,40191,40193],{"class":41,"line":112},[39,40186,4108],{"class":45},[39,40188,39843],{"class":53},[39,40190,27018],{"class":45},[39,40192,39848],{"class":74},[39,40194,39851],{"class":53},[39,40196,40197],{"class":41,"line":118},[39,40198,40199],{"class":128},"    # print(m)\n",[39,40201,40202,40204,40206],{"class":41,"line":125},[39,40203,4184],{"class":45},[39,40205,39863],{"class":74},[39,40207,39866],{"class":53},[39,40209,40210],{"class":41,"line":132},[39,40211,40212],{"class":128},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[39,40214,40215,40218,40220,40222,40224],{"class":41,"line":138},[39,40216,40217],{"class":53},"        nn.init.kaiming_normal_(m.weight,",[39,40219,39879],{"class":59},[39,40221,1117],{"class":45},[39,40223,39884],{"class":237},[39,40225,574],{"class":53},[39,40227,40228],{"class":41,"line":169},[39,40229,40230],{"class":128},"        # 判断b参数是否存在\n",[39,40232,40233,40235,40237,40239,40241,40243],{"class":41,"line":190},[39,40234,3590],{"class":45},[39,40236,39899],{"class":53},[39,40238,39902],{"class":45},[39,40240,39905],{"class":45},[39,40242,39908],{"class":74},[39,40244,4822],{"class":53},[39,40246,40247],{"class":41,"line":202},[39,40248,40249],{"class":128},"            # 如果参数不存在的化初始化b=0\n",[39,40251,40252,40255,40257],{"class":41,"line":207},[39,40253,40254],{"class":53},"            nn.init.constant_(m.bias,",[39,40256,1457],{"class":74},[39,40258,574],{"class":53},[39,40260,40261],{"class":41,"line":212},[39,40262,40263],{"class":128},"    # 全连接层初始化\n",[39,40265,40266,40269,40271],{"class":41,"line":223},[39,40267,40268],{"class":45},"    elif",[39,40270,39863],{"class":74},[39,40272,39939],{"class":53},[39,40274,40275],{"class":41,"line":228},[39,40276,40277],{"class":128},"        # 这个初始化方法是利用的是正太分布的方式\n",[39,40279,40280],{"class":41,"line":263},[39,40281,40282],{"class":128},"        # 均值为0，方差为0.01\n",[39,40284,40285,40288,40290,40292,40294],{"class":41,"line":287},[39,40286,40287],{"class":53},"        nn.init.normal_(m.weight,",[39,40289,1457],{"class":74},[39,40291,426],{"class":53},[39,40293,39961],{"class":74},[39,40295,574],{"class":53},[39,40297,40298],{"class":41,"line":292},[39,40299,40300],{"class":128},"        # 初始化b参数\n",[39,40302,40303,40305,40307,40309,40311,40313],{"class":41,"line":305},[39,40304,3590],{"class":45},[39,40306,39899],{"class":53},[39,40308,39902],{"class":45},[39,40310,39905],{"class":45},[39,40312,39908],{"class":74},[39,40314,4822],{"class":53},[39,40316,40317,40319,40321],{"class":41,"line":310},[39,40318,40254],{"class":53},[39,40320,1457],{"class":74},[39,40322,574],{"class":53},[19,40324,40325],{},"②尽可能地增加批次",[19,40327,40328],{},"训练完整代码：",[30,40330,40331],{"className":31353,"code":38874,"language":31355,"meta":35,"style":35},[26,40332,40333,40339,40349,40359,40369,40373,40389,40397,40415,40419,40423,40433,40469,40473,40509,40513,40541,40545,40549,40559,40595,40599,40635,40639,40667,40671,40675,40685,40721,40725,40761,40765,40801,40805,40833,40837,40841,40851,40887,40891,40927,40931,40967,40971,40999,41003,41007,41017,41053,41057,41093,41097,41133,41137,41165,41169,41173,41183,41187,41191,41195,41215,41219,41231,41235,41247,41251,41255,41259,41263,41275,41279,41287,41291,41303,41307,41321,41325,41333,41337,41345,41349,41353,41365,41369,41383,41391,41395,41399,41407,41417,41427,41437,41447,41457,41467,41473,41477,41481,41493,41513,41519,41527],{"__ignoreMap":35},[39,40334,40335,40337],{"class":41,"line":42},[39,40336,31367],{"class":45},[39,40338,31370],{"class":53},[39,40340,40341,40343,40345,40347],{"class":41,"line":92},[39,40342,31712],{"class":45},[39,40344,38889],{"class":53},[39,40346,31367],{"class":45},[39,40348,38894],{"class":53},[39,40350,40351,40353,40355,40357],{"class":41,"line":112},[39,40352,31712],{"class":45},[39,40354,31715],{"class":53},[39,40356,31367],{"class":45},[39,40358,31720],{"class":53},[39,40360,40361,40363,40365,40367],{"class":41,"line":118},[39,40362,31712],{"class":45},[39,40364,31732],{"class":53},[39,40366,31367],{"class":45},[39,40368,31737],{"class":53},[39,40370,40371],{"class":41,"line":125},[39,40372,122],{"emptyLinePlaceholder":121},[39,40374,40375,40377,40379,40381,40383,40385,40387],{"class":41,"line":132},[39,40376,15667],{"class":45},[39,40378,38925],{"class":49},[39,40380,54],{"class":53},[39,40382,31753],{"class":49},[39,40384,1819],{"class":53},[39,40386,31758],{"class":49},[39,40388,31761],{"class":53},[39,40390,40391,40393,40395],{"class":41,"line":138},[39,40392,31776],{"class":45},[39,40394,31779],{"class":74},[39,40396,31782],{"class":53},[39,40398,40399,40401,40403,40405,40407,40409,40411,40413],{"class":41,"line":169},[39,40400,31792],{"class":74},[39,40402,54],{"class":53},[39,40404,38952],{"class":74},[39,40406,63],{"class":53},[39,40408,31798],{"class":74},[39,40410,31801],{"class":53},[39,40412,31804],{"class":74},[39,40414,537],{"class":53},[39,40416,40417],{"class":41,"line":190},[39,40418,38967],{"class":128},[39,40420,40421],{"class":41,"line":202},[39,40422,38972],{"class":128},[39,40424,40425,40427,40429,40431],{"class":41,"line":207},[39,40426,31820],{"class":74},[39,40428,38979],{"class":53},[39,40430,1117],{"class":45},[39,40432,38984],{"class":53},[39,40434,40435,40437,40439,40441,40443,40445,40447,40449,40451,40453,40455,40457,40459,40461,40463,40465,40467],{"class":41,"line":212},[39,40436,38989],{"class":53},[39,40438,31831],{"class":59},[39,40440,1117],{"class":45},[39,40442,1483],{"class":74},[39,40444,426],{"class":53},[39,40446,31840],{"class":59},[39,40448,1117],{"class":45},[39,40450,1469],{"class":74},[39,40452,426],{"class":53},[39,40454,31849],{"class":59},[39,40456,1117],{"class":45},[39,40458,1339],{"class":74},[39,40460,426],{"class":53},[39,40462,31858],{"class":59},[39,40464,1117],{"class":45},[39,40466,1483],{"class":74},[39,40468,39022],{"class":53},[39,40470,40471],{"class":41,"line":223},[39,40472,39027],{"class":53},[39,40474,40475,40477,40479,40481,40483,40485,40487,40489,40491,40493,40495,40497,40499,40501,40503,40505,40507],{"class":41,"line":228},[39,40476,38989],{"class":53},[39,40478,31831],{"class":59},[39,40480,1117],{"class":45},[39,40482,1469],{"class":74},[39,40484,426],{"class":53},[39,40486,31840],{"class":59},[39,40488,1117],{"class":45},[39,40490,1469],{"class":74},[39,40492,426],{"class":53},[39,40494,31849],{"class":59},[39,40496,1117],{"class":45},[39,40498,1339],{"class":74},[39,40500,426],{"class":53},[39,40502,31858],{"class":59},[39,40504,1117],{"class":45},[39,40506,1483],{"class":74},[39,40508,39022],{"class":53},[39,40510,40511],{"class":41,"line":263},[39,40512,39027],{"class":53},[39,40514,40515,40517,40519,40521,40523,40525,40527,40529,40531,40533,40535,40537,40539],{"class":41,"line":287},[39,40516,39072],{"class":53},[39,40518,31849],{"class":59},[39,40520,1117],{"class":45},[39,40522,1345],{"class":74},[39,40524,426],{"class":53},[39,40526,31904],{"class":59},[39,40528,1117],{"class":45},[39,40530,1345],{"class":74},[39,40532,426],{"class":53},[39,40534,31858],{"class":59},[39,40536,1117],{"class":45},[39,40538,1457],{"class":74},[39,40540,574],{"class":53},[39,40542,40543],{"class":41,"line":292},[39,40544,39101],{"class":53},[39,40546,40547],{"class":41,"line":305},[39,40548,39106],{"class":128},[39,40550,40551,40553,40555,40557],{"class":41,"line":310},[39,40552,31820],{"class":74},[39,40554,39113],{"class":53},[39,40556,1117],{"class":45},[39,40558,38984],{"class":53},[39,40560,40561,40563,40565,40567,40569,40571,40573,40575,40577,40579,40581,40583,40585,40587,40589,40591,40593],{"class":41,"line":321},[39,40562,38989],{"class":53},[39,40564,31831],{"class":59},[39,40566,1117],{"class":45},[39,40568,1469],{"class":74},[39,40570,426],{"class":53},[39,40572,31840],{"class":59},[39,40574,1117],{"class":45},[39,40576,33045],{"class":74},[39,40578,426],{"class":53},[39,40580,31849],{"class":59},[39,40582,1117],{"class":45},[39,40584,1339],{"class":74},[39,40586,426],{"class":53},[39,40588,31858],{"class":59},[39,40590,1117],{"class":45},[39,40592,1483],{"class":74},[39,40594,39022],{"class":53},[39,40596,40597],{"class":41,"line":713},[39,40598,39027],{"class":53},[39,40600,40601,40603,40605,40607,40609,40611,40613,40615,40617,40619,40621,40623,40625,40627,40629,40631,40633],{"class":41,"line":718},[39,40602,38989],{"class":53},[39,40604,31831],{"class":59},[39,40606,1117],{"class":45},[39,40608,33045],{"class":74},[39,40610,426],{"class":53},[39,40612,31840],{"class":59},[39,40614,1117],{"class":45},[39,40616,33045],{"class":74},[39,40618,426],{"class":53},[39,40620,31849],{"class":59},[39,40622,1117],{"class":45},[39,40624,1339],{"class":74},[39,40626,426],{"class":53},[39,40628,31858],{"class":59},[39,40630,1117],{"class":45},[39,40632,1483],{"class":74},[39,40634,39022],{"class":53},[39,40636,40637],{"class":41,"line":723},[39,40638,39027],{"class":53},[39,40640,40641,40643,40645,40647,40649,40651,40653,40655,40657,40659,40661,40663,40665],{"class":41,"line":729},[39,40642,39072],{"class":53},[39,40644,31849],{"class":59},[39,40646,1117],{"class":45},[39,40648,1345],{"class":74},[39,40650,426],{"class":53},[39,40652,31904],{"class":59},[39,40654,1117],{"class":45},[39,40656,1345],{"class":74},[39,40658,426],{"class":53},[39,40660,31858],{"class":59},[39,40662,1117],{"class":45},[39,40664,1457],{"class":74},[39,40666,574],{"class":53},[39,40668,40669],{"class":41,"line":735},[39,40670,39101],{"class":53},[39,40672,40673],{"class":41,"line":741},[39,40674,39234],{"class":128},[39,40676,40677,40679,40681,40683],{"class":41,"line":747},[39,40678,31820],{"class":74},[39,40680,39241],{"class":53},[39,40682,1117],{"class":45},[39,40684,38984],{"class":53},[39,40686,40687,40689,40691,40693,40695,40697,40699,40701,40703,40705,40707,40709,40711,40713,40715,40717,40719],{"class":41,"line":753},[39,40688,38989],{"class":53},[39,40690,31831],{"class":59},[39,40692,1117],{"class":45},[39,40694,33045],{"class":74},[39,40696,426],{"class":53},[39,40698,31840],{"class":59},[39,40700,1117],{"class":45},[39,40702,35845],{"class":74},[39,40704,426],{"class":53},[39,40706,31849],{"class":59},[39,40708,1117],{"class":45},[39,40710,1339],{"class":74},[39,40712,426],{"class":53},[39,40714,31858],{"class":59},[39,40716,1117],{"class":45},[39,40718,1483],{"class":74},[39,40720,39022],{"class":53},[39,40722,40723],{"class":41,"line":758},[39,40724,39027],{"class":53},[39,40726,40727,40729,40731,40733,40735,40737,40739,40741,40743,40745,40747,40749,40751,40753,40755,40757,40759],{"class":41,"line":763},[39,40728,38989],{"class":53},[39,40730,31831],{"class":59},[39,40732,1117],{"class":45},[39,40734,35845],{"class":74},[39,40736,426],{"class":53},[39,40738,31840],{"class":59},[39,40740,1117],{"class":45},[39,40742,35845],{"class":74},[39,40744,426],{"class":53},[39,40746,31849],{"class":59},[39,40748,1117],{"class":45},[39,40750,1339],{"class":74},[39,40752,426],{"class":53},[39,40754,31858],{"class":59},[39,40756,1117],{"class":45},[39,40758,1483],{"class":74},[39,40760,39022],{"class":53},[39,40762,40763],{"class":41,"line":772},[39,40764,39027],{"class":53},[39,40766,40767,40769,40771,40773,40775,40777,40779,40781,40783,40785,40787,40789,40791,40793,40795,40797,40799],{"class":41,"line":777},[39,40768,38989],{"class":53},[39,40770,31831],{"class":59},[39,40772,1117],{"class":45},[39,40774,35845],{"class":74},[39,40776,426],{"class":53},[39,40778,31840],{"class":59},[39,40780,1117],{"class":45},[39,40782,35845],{"class":74},[39,40784,426],{"class":53},[39,40786,31849],{"class":59},[39,40788,1117],{"class":45},[39,40790,1339],{"class":74},[39,40792,426],{"class":53},[39,40794,31858],{"class":59},[39,40796,1117],{"class":45},[39,40798,1483],{"class":74},[39,40800,39022],{"class":53},[39,40802,40803],{"class":41,"line":785},[39,40804,39027],{"class":53},[39,40806,40807,40809,40811,40813,40815,40817,40819,40821,40823,40825,40827,40829,40831],{"class":41,"line":796},[39,40808,39072],{"class":53},[39,40810,31849],{"class":59},[39,40812,1117],{"class":45},[39,40814,1345],{"class":74},[39,40816,426],{"class":53},[39,40818,31904],{"class":59},[39,40820,1117],{"class":45},[39,40822,1345],{"class":74},[39,40824,426],{"class":53},[39,40826,31858],{"class":59},[39,40828,1117],{"class":45},[39,40830,1457],{"class":74},[39,40832,574],{"class":53},[39,40834,40835],{"class":41,"line":808},[39,40836,39101],{"class":53},[39,40838,40839],{"class":41,"line":823},[39,40840,39402],{"class":128},[39,40842,40843,40845,40847,40849],{"class":41,"line":839},[39,40844,31820],{"class":74},[39,40846,39409],{"class":53},[39,40848,1117],{"class":45},[39,40850,38984],{"class":53},[39,40852,40853,40855,40857,40859,40861,40863,40865,40867,40869,40871,40873,40875,40877,40879,40881,40883,40885],{"class":41,"line":845},[39,40854,38989],{"class":53},[39,40856,31831],{"class":59},[39,40858,1117],{"class":45},[39,40860,35845],{"class":74},[39,40862,426],{"class":53},[39,40864,31840],{"class":59},[39,40866,1117],{"class":45},[39,40868,39432],{"class":74},[39,40870,426],{"class":53},[39,40872,31849],{"class":59},[39,40874,1117],{"class":45},[39,40876,1339],{"class":74},[39,40878,426],{"class":53},[39,40880,31858],{"class":59},[39,40882,1117],{"class":45},[39,40884,1483],{"class":74},[39,40886,39022],{"class":53},[39,40888,40889],{"class":41,"line":856},[39,40890,39027],{"class":53},[39,40892,40893,40895,40897,40899,40901,40903,40905,40907,40909,40911,40913,40915,40917,40919,40921,40923,40925],{"class":41,"line":861},[39,40894,38989],{"class":53},[39,40896,31831],{"class":59},[39,40898,1117],{"class":45},[39,40900,39432],{"class":74},[39,40902,426],{"class":53},[39,40904,31840],{"class":59},[39,40906,1117],{"class":45},[39,40908,39432],{"class":74},[39,40910,426],{"class":53},[39,40912,31849],{"class":59},[39,40914,1117],{"class":45},[39,40916,1339],{"class":74},[39,40918,426],{"class":53},[39,40920,31858],{"class":59},[39,40922,1117],{"class":45},[39,40924,1483],{"class":74},[39,40926,39022],{"class":53},[39,40928,40929],{"class":41,"line":870},[39,40930,39027],{"class":53},[39,40932,40933,40935,40937,40939,40941,40943,40945,40947,40949,40951,40953,40955,40957,40959,40961,40963,40965],{"class":41,"line":9084},[39,40934,38989],{"class":53},[39,40936,31831],{"class":59},[39,40938,1117],{"class":45},[39,40940,39432],{"class":74},[39,40942,426],{"class":53},[39,40944,31840],{"class":59},[39,40946,1117],{"class":45},[39,40948,39432],{"class":74},[39,40950,426],{"class":53},[39,40952,31849],{"class":59},[39,40954,1117],{"class":45},[39,40956,1339],{"class":74},[39,40958,426],{"class":53},[39,40960,31858],{"class":59},[39,40962,1117],{"class":45},[39,40964,1483],{"class":74},[39,40966,39022],{"class":53},[39,40968,40969],{"class":41,"line":9090},[39,40970,39027],{"class":53},[39,40972,40973,40975,40977,40979,40981,40983,40985,40987,40989,40991,40993,40995,40997],{"class":41,"line":9102},[39,40974,39072],{"class":53},[39,40976,31849],{"class":59},[39,40978,1117],{"class":45},[39,40980,1345],{"class":74},[39,40982,426],{"class":53},[39,40984,31904],{"class":59},[39,40986,1117],{"class":45},[39,40988,1345],{"class":74},[39,40990,426],{"class":53},[39,40992,31858],{"class":59},[39,40994,1117],{"class":45},[39,40996,1457],{"class":74},[39,40998,574],{"class":53},[39,41000,41001],{"class":41,"line":9114},[39,41002,39101],{"class":53},[39,41004,41005],{"class":41,"line":9126},[39,41006,39571],{"class":128},[39,41008,41009,41011,41013,41015],{"class":41,"line":10784},[39,41010,31820],{"class":74},[39,41012,39578],{"class":53},[39,41014,1117],{"class":45},[39,41016,38984],{"class":53},[39,41018,41019,41021,41023,41025,41027,41029,41031,41033,41035,41037,41039,41041,41043,41045,41047,41049,41051],{"class":41,"line":10809},[39,41020,38989],{"class":53},[39,41022,31831],{"class":59},[39,41024,1117],{"class":45},[39,41026,39432],{"class":74},[39,41028,426],{"class":53},[39,41030,31840],{"class":59},[39,41032,1117],{"class":45},[39,41034,39432],{"class":74},[39,41036,426],{"class":53},[39,41038,31849],{"class":59},[39,41040,1117],{"class":45},[39,41042,1339],{"class":74},[39,41044,426],{"class":53},[39,41046,31858],{"class":59},[39,41048,1117],{"class":45},[39,41050,1483],{"class":74},[39,41052,39022],{"class":53},[39,41054,41055],{"class":41,"line":10832},[39,41056,39027],{"class":53},[39,41058,41059,41061,41063,41065,41067,41069,41071,41073,41075,41077,41079,41081,41083,41085,41087,41089,41091],{"class":41,"line":10856},[39,41060,38989],{"class":53},[39,41062,31831],{"class":59},[39,41064,1117],{"class":45},[39,41066,39432],{"class":74},[39,41068,426],{"class":53},[39,41070,31840],{"class":59},[39,41072,1117],{"class":45},[39,41074,39432],{"class":74},[39,41076,426],{"class":53},[39,41078,31849],{"class":59},[39,41080,1117],{"class":45},[39,41082,1339],{"class":74},[39,41084,426],{"class":53},[39,41086,31858],{"class":59},[39,41088,1117],{"class":45},[39,41090,1483],{"class":74},[39,41092,39022],{"class":53},[39,41094,41095],{"class":41,"line":10861},[39,41096,39027],{"class":53},[39,41098,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131],{"class":41,"line":10866},[39,41100,38989],{"class":53},[39,41102,31831],{"class":59},[39,41104,1117],{"class":45},[39,41106,39432],{"class":74},[39,41108,426],{"class":53},[39,41110,31840],{"class":59},[39,41112,1117],{"class":45},[39,41114,39432],{"class":74},[39,41116,426],{"class":53},[39,41118,31849],{"class":59},[39,41120,1117],{"class":45},[39,41122,1339],{"class":74},[39,41124,426],{"class":53},[39,41126,31858],{"class":59},[39,41128,1117],{"class":45},[39,41130,1483],{"class":74},[39,41132,39022],{"class":53},[39,41134,41135],{"class":41,"line":10871},[39,41136,39027],{"class":53},[39,41138,41139,41141,41143,41145,41147,41149,41151,41153,41155,41157,41159,41161,41163],{"class":41,"line":10880},[39,41140,39072],{"class":53},[39,41142,31849],{"class":59},[39,41144,1117],{"class":45},[39,41146,1345],{"class":74},[39,41148,426],{"class":53},[39,41150,31904],{"class":59},[39,41152,1117],{"class":45},[39,41154,1345],{"class":74},[39,41156,426],{"class":53},[39,41158,31858],{"class":59},[39,41160,1117],{"class":45},[39,41162,1457],{"class":74},[39,41164,574],{"class":53},[39,41166,41167],{"class":41,"line":10885},[39,41168,39101],{"class":53},[39,41170,41171],{"class":41,"line":10891},[39,41172,39739],{"class":128},[39,41174,41175,41177,41179,41181],{"class":41,"line":10912},[39,41176,31820],{"class":74},[39,41178,39746],{"class":53},[39,41180,1117],{"class":45},[39,41182,38984],{"class":53},[39,41184,41185],{"class":41,"line":10918},[39,41186,39755],{"class":128},[39,41188,41189],{"class":41,"line":10932},[39,41190,39760],{"class":128},[39,41192,41193],{"class":41,"line":10938},[39,41194,39765],{"class":53},[39,41196,41197,41199,41201,41203,41205,41207,41209,41211,41213],{"class":41,"line":10965},[39,41198,39770],{"class":53},[39,41200,1633],{"class":74},[39,41202,1717],{"class":45},[39,41204,1633],{"class":74},[39,41206,1717],{"class":45},[39,41208,39432],{"class":74},[39,41210,426],{"class":53},[39,41212,35845],{"class":74},[39,41214,39022],{"class":53},[39,41216,41217],{"class":41,"line":10974},[39,41218,39027],{"class":53},[39,41220,41221,41223,41225,41227,41229],{"class":41,"line":10980},[39,41222,39770],{"class":53},[39,41224,35845],{"class":74},[39,41226,426],{"class":53},[39,41228,33045],{"class":74},[39,41230,39022],{"class":53},[39,41232,41233],{"class":41,"line":10988},[39,41234,39027],{"class":53},[39,41236,41237,41239,41241,41243,41245],{"class":41,"line":10993},[39,41238,39770],{"class":53},[39,41240,33045],{"class":74},[39,41242,426],{"class":53},[39,41244,423],{"class":74},[39,41246,574],{"class":53},[39,41248,41249],{"class":41,"line":17577},[39,41250,39101],{"class":53},[39,41252,41253],{"class":41,"line":17583},[39,41254,122],{"emptyLinePlaceholder":121},[39,41256,41257],{"class":41,"line":17606},[39,41258,39831],{"class":128},[39,41260,41261],{"class":41,"line":17612},[39,41262,39836],{"class":128},[39,41264,41265,41267,41269,41271,41273],{"class":41,"line":17635},[39,41266,4486],{"class":45},[39,41268,39843],{"class":53},[39,41270,27018],{"class":45},[39,41272,39848],{"class":74},[39,41274,39851],{"class":53},[39,41276,41277],{"class":41,"line":17649},[39,41278,39856],{"class":128},[39,41280,41281,41283,41285],{"class":41,"line":17669},[39,41282,5723],{"class":45},[39,41284,39863],{"class":74},[39,41286,39866],{"class":53},[39,41288,41289],{"class":41,"line":17675},[39,41290,39871],{"class":128},[39,41292,41293,41295,41297,41299,41301],{"class":41,"line":17686},[39,41294,39876],{"class":53},[39,41296,39879],{"class":59},[39,41298,1117],{"class":45},[39,41300,39884],{"class":237},[39,41302,574],{"class":53},[39,41304,41305],{"class":41,"line":17709},[39,41306,39891],{"class":128},[39,41308,41309,41311,41313,41315,41317,41319],{"class":41,"line":17731},[39,41310,39896],{"class":45},[39,41312,39899],{"class":53},[39,41314,39902],{"class":45},[39,41316,39905],{"class":45},[39,41318,39908],{"class":74},[39,41320,4822],{"class":53},[39,41322,41323],{"class":41,"line":17736},[39,41324,39915],{"class":128},[39,41326,41327,41329,41331],{"class":41,"line":17742},[39,41328,39920],{"class":53},[39,41330,1457],{"class":74},[39,41332,574],{"class":53},[39,41334,41335],{"class":41,"line":17756},[39,41336,39929],{"class":128},[39,41338,41339,41341,41343],{"class":41,"line":17769},[39,41340,39934],{"class":45},[39,41342,39863],{"class":74},[39,41344,39939],{"class":53},[39,41346,41347],{"class":41,"line":17774},[39,41348,39944],{"class":128},[39,41350,41351],{"class":41,"line":17788},[39,41352,39949],{"class":128},[39,41354,41355,41357,41359,41361,41363],{"class":41,"line":17793},[39,41356,39954],{"class":53},[39,41358,1457],{"class":74},[39,41360,426],{"class":53},[39,41362,39961],{"class":74},[39,41364,574],{"class":53},[39,41366,41367],{"class":41,"line":17799},[39,41368,39968],{"class":128},[39,41370,41371,41373,41375,41377,41379,41381],{"class":41,"line":17804},[39,41372,39896],{"class":45},[39,41374,39899],{"class":53},[39,41376,39902],{"class":45},[39,41378,39905],{"class":45},[39,41380,39908],{"class":74},[39,41382,4822],{"class":53},[39,41384,41385,41387,41389],{"class":41,"line":17818},[39,41386,39920],{"class":53},[39,41388,1457],{"class":74},[39,41390,574],{"class":53},[39,41392,41393],{"class":41,"line":17823},[39,41394,122],{"emptyLinePlaceholder":121},[39,41396,41397],{"class":41,"line":17828},[39,41398,36140],{"class":128},[39,41400,41401,41403,41405],{"class":41,"line":17842},[39,41402,31776],{"class":45},[39,41404,32068],{"class":49},[39,41406,32071],{"class":53},[39,41408,41409,41411,41413,41415],{"class":41,"line":17854},[39,41410,32076],{"class":53},[39,41412,1117],{"class":45},[39,41414,31798],{"class":74},[39,41416,40017],{"class":53},[39,41418,41419,41421,41423,41425],{"class":41,"line":17859},[39,41420,32076],{"class":53},[39,41422,1117],{"class":45},[39,41424,31798],{"class":74},[39,41426,40028],{"class":53},[39,41428,41429,41431,41433,41435],{"class":41,"line":17872},[39,41430,32076],{"class":53},[39,41432,1117],{"class":45},[39,41434,31798],{"class":74},[39,41436,40039],{"class":53},[39,41438,41439,41441,41443,41445],{"class":41,"line":17877},[39,41440,32076],{"class":53},[39,41442,1117],{"class":45},[39,41444,31798],{"class":74},[39,41446,40050],{"class":53},[39,41448,41449,41451,41453,41455],{"class":41,"line":17882},[39,41450,32076],{"class":53},[39,41452,1117],{"class":45},[39,41454,31798],{"class":74},[39,41456,40061],{"class":53},[39,41458,41459,41461,41463,41465],{"class":41,"line":17887},[39,41460,32076],{"class":53},[39,41462,1117],{"class":45},[39,41464,31798],{"class":74},[39,41466,40072],{"class":53},[39,41468,41469,41471],{"class":41,"line":17900},[39,41470,15725],{"class":45},[39,41472,32184],{"class":53},[39,41474,41475],{"class":41,"line":17905},[39,41476,122],{"emptyLinePlaceholder":121},[39,41478,41479],{"class":41,"line":33608},[39,41480,40087],{"class":128},[39,41482,41483,41485,41487,41489,41491],{"class":41,"line":33614},[39,41484,2654],{"class":45},[39,41486,32195],{"class":74},[39,41488,4032],{"class":45},[39,41490,40098],{"class":237},[39,41492,4822],{"class":53},[39,41494,41495,41497,41499,41501,41503,41505,41507,41509,41511],{"class":41,"line":33620},[39,41496,32212],{"class":53},[39,41498,1117],{"class":45},[39,41500,31426],{"class":53},[39,41502,32219],{"class":237},[39,41504,2814],{"class":45},[39,41506,32224],{"class":53},[39,41508,2811],{"class":45},[39,41510,31451],{"class":237},[39,41512,574],{"class":53},[39,41514,41515,41517],{"class":41,"line":33626},[39,41516,32274],{"class":74},[39,41518,31460],{"class":53},[39,41520,41521,41523,41525],{"class":41,"line":33632},[39,41522,32264],{"class":53},[39,41524,1117],{"class":45},[39,41526,40135],{"class":53},[39,41528,41529,41531,41533,41535,41537,41539,41541,41543],{"class":41,"line":33643},[39,41530,32274],{"class":74},[39,41532,32277],{"class":53},[39,41534,1483],{"class":74},[39,41536,426],{"class":53},[39,41538,32476],{"class":74},[39,41540,426],{"class":53},[39,41542,32476],{"class":74},[39,41544,32290],{"class":53},[328,41546,41547],{"start":112},[331,41548,41549],{},"测试代码",[30,41551,41553],{"className":31353,"code":41552,"language":31355,"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",[26,41554,41555,41561,41571,41581,41585,41595,41606,41610,41614,41618,41626,41642,41652,41668,41678,41692,41696,41706,41716,41726,41732,41736,41740,41748,41752,41768,41776,41780,41784,41792,41800,41804,41808,41812,41816,41822,41826,41836,41844,41852,41856,41860,41864,41872,41876,41892,41896,41900,41904,41916,41920,41932,41936,41940,41952,41956,41966,41970,41974,41986,41990,41999,42003,42007,42015,42019,42027,42031,42035,42039,42043,42047,42063,42071,42075,42079,42127,42133,42137,42147,42155,42163,42167,42171,42175,42179,42187,42191,42207,42211,42219,42227],{"__ignoreMap":35},[39,41556,41557,41559],{"class":41,"line":42},[39,41558,31367],{"class":45},[39,41560,31370],{"class":53},[39,41562,41563,41565,41567,41569],{"class":41,"line":92},[39,41564,31367],{"class":45},[39,41566,32390],{"class":53},[39,41568,32358],{"class":45},[39,41570,32395],{"class":53},[39,41572,41573,41575,41577,41579],{"class":41,"line":112},[39,41574,31712],{"class":45},[39,41576,32373],{"class":53},[39,41578,31367],{"class":45},[39,41580,32378],{"class":53},[39,41582,41583],{"class":41,"line":118},[39,41584,34897],{"class":128},[39,41586,41587,41589,41591,41593],{"class":41,"line":125},[39,41588,31712],{"class":45},[39,41590,32343],{"class":53},[39,41592,31367],{"class":45},[39,41594,32348],{"class":53},[39,41596,41597,41599,41601,41603],{"class":41,"line":132},[39,41598,31712],{"class":45},[39,41600,32889],{"class":53},[39,41602,31367],{"class":45},[39,41604,41605],{"class":74}," VGG16\n",[39,41607,41608],{"class":41,"line":138},[39,41609,122],{"emptyLinePlaceholder":121},[39,41611,41612],{"class":41,"line":169},[39,41613,122],{"emptyLinePlaceholder":121},[39,41615,41616],{"class":41,"line":190},[39,41617,34926],{"class":128},[39,41619,41620,41622,41624],{"class":41,"line":202},[39,41621,32922],{"class":45},[39,41623,34933],{"class":49},[39,41625,32928],{"class":53},[39,41627,41628,41630,41632,41634,41636,41638,41640],{"class":41,"line":207},[39,41629,34940],{"class":53},[39,41631,1117],{"class":45},[39,41633,32430],{"class":53},[39,41635,32433],{"class":59},[39,41637,1117],{"class":45},[39,41639,32438],{"class":237},[39,41641,32441],{"class":53},[39,41643,41644,41646,41648,41650],{"class":41,"line":212},[39,41645,34957],{"class":59},[39,41647,1117],{"class":45},[39,41649,34962],{"class":74},[39,41651,32441],{"class":53},[39,41653,41654,41656,41658,41660,41662,41664,41666],{"class":41,"line":223},[39,41655,34969],{"class":59},[39,41657,1117],{"class":45},[39,41659,32468],{"class":53},[39,41661,32471],{"class":59},[39,41663,1117],{"class":45},[39,41665,32476],{"class":74},[39,41667,32479],{"class":53},[39,41669,41670,41672,41674,41676],{"class":41,"line":228},[39,41671,34986],{"class":59},[39,41673,1117],{"class":45},[39,41675,32451],{"class":74},[39,41677,574],{"class":53},[39,41679,41680,41682,41684,41686,41688,41690],{"class":41,"line":263},[39,41681,34997],{"class":53},[39,41683,1117],{"class":45},[39,41685,32509],{"class":53},[39,41687,32512],{"class":59},[39,41689,1117],{"class":45},[39,41691,35008],{"class":53},[39,41693,41694],{"class":41,"line":287},[39,41695,35013],{"class":128},[39,41697,41698,41700,41702,41704],{"class":41,"line":292},[39,41699,35018],{"class":59},[39,41701,1117],{"class":45},[39,41703,1483],{"class":74},[39,41705,32441],{"class":53},[39,41707,41708,41710,41712,41714],{"class":41,"line":305},[39,41709,35029],{"class":59},[39,41711,1117],{"class":45},[39,41713,32451],{"class":74},[39,41715,32441],{"class":53},[39,41717,41718,41720,41722,41724],{"class":41,"line":310},[39,41719,35040],{"class":59},[39,41721,1117],{"class":45},[39,41723,1457],{"class":74},[39,41725,574],{"class":53},[39,41727,41728,41730],{"class":41,"line":321},[39,41729,95],{"class":45},[39,41731,35053],{"class":53},[39,41733,41734],{"class":41,"line":713},[39,41735,122],{"emptyLinePlaceholder":121},[39,41737,41738],{"class":41,"line":718},[39,41739,35062],{"class":128},[39,41741,41742,41744,41746],{"class":41,"line":723},[39,41743,32922],{"class":45},[39,41745,35069],{"class":49},[39,41747,35072],{"class":53},[39,41749,41750],{"class":41,"line":729},[39,41751,35077],{"class":128},[39,41753,41754,41756,41758,41760,41762,41764,41766],{"class":41,"line":735},[39,41755,32212],{"class":53},[39,41757,1117],{"class":45},[39,41759,32219],{"class":237},[39,41761,2814],{"class":45},[39,41763,32224],{"class":53},[39,41765,2811],{"class":45},[39,41767,35094],{"class":237},[39,41769,41770,41772,41774],{"class":41,"line":741},[39,41771,32264],{"class":53},[39,41773,1117],{"class":45},[39,41775,33264],{"class":53},[39,41777,41778],{"class":41,"line":747},[39,41779,122],{"emptyLinePlaceholder":121},[39,41781,41782],{"class":41,"line":753},[39,41783,35111],{"class":128},[39,41785,41786,41788,41790],{"class":41,"line":758},[39,41787,35116],{"class":53},[39,41789,1117],{"class":45},[39,41791,33317],{"class":74},[39,41793,41794,41796,41798],{"class":41,"line":763},[39,41795,35125],{"class":53},[39,41797,1117],{"class":45},[39,41799,4168],{"class":74},[39,41801,41802],{"class":41,"line":772},[39,41803,122],{"emptyLinePlaceholder":121},[39,41805,41806],{"class":41,"line":777},[39,41807,35138],{"class":128},[39,41809,41810],{"class":41,"line":785},[39,41811,35143],{"class":128},[39,41813,41814],{"class":41,"line":796},[39,41815,35148],{"class":128},[39,41817,41818,41820],{"class":41,"line":808},[39,41819,35153],{"class":45},[39,41821,33859],{"class":53},[39,41823,41824],{"class":41,"line":823},[39,41825,35160],{"class":128},[39,41827,41828,41830,41832,41834],{"class":41,"line":839},[39,41829,4486],{"class":45},[39,41831,35167],{"class":53},[39,41833,27018],{"class":45},[39,41835,35172],{"class":53},[39,41837,41838,41840,41842],{"class":41,"line":845},[39,41839,35177],{"class":53},[39,41841,1117],{"class":45},[39,41843,35182],{"class":53},[39,41845,41846,41848,41850],{"class":41,"line":856},[39,41847,35187],{"class":53},[39,41849,1117],{"class":45},[39,41851,35192],{"class":53},[39,41853,41854],{"class":41,"line":861},[39,41855,35197],{"class":128},[39,41857,41858],{"class":41,"line":870},[39,41859,33850],{"class":53},[39,41861,41862],{"class":41,"line":9084},[39,41863,35206],{"class":128},[39,41865,41866,41868,41870],{"class":41,"line":9090},[39,41867,33635],{"class":53},[39,41869,1117],{"class":45},[39,41871,35215],{"class":53},[39,41873,41874],{"class":41,"line":9102},[39,41875,35220],{"class":128},[39,41877,41878,41880,41882,41884,41886,41888,41890],{"class":41,"line":9114},[39,41879,33652],{"class":53},[39,41881,1117],{"class":45},[39,41883,33657],{"class":53},[39,41885,33660],{"class":59},[39,41887,1117],{"class":45},[39,41889,1483],{"class":74},[39,41891,574],{"class":53},[39,41893,41894],{"class":41,"line":9126},[39,41895,35241],{"class":128},[39,41897,41898],{"class":41,"line":10784},[39,41899,35246],{"class":128},[39,41901,41902],{"class":41,"line":10809},[39,41903,35251],{"class":128},[39,41905,41906,41908,41910,41912,41914],{"class":41,"line":10832},[39,41907,35256],{"class":53},[39,41909,10545],{"class":45},[39,41911,33762],{"class":53},[39,41913,4032],{"class":45},[39,41915,35265],{"class":53},[39,41917,41918],{"class":41,"line":10856},[39,41919,35270],{"class":128},[39,41921,41922,41924,41926,41928,41930],{"class":41,"line":10861},[39,41923,35275],{"class":53},[39,41925,10545],{"class":45},[39,41927,35280],{"class":53},[39,41929,1457],{"class":74},[39,41931,574],{"class":53},[39,41933,41934],{"class":41,"line":10866},[39,41935,122],{"emptyLinePlaceholder":121},[39,41937,41938],{"class":41,"line":10871},[39,41939,35293],{"class":128},[39,41941,41942,41944,41946,41948,41950],{"class":41,"line":10880},[39,41943,35298],{"class":53},[39,41945,1117],{"class":45},[39,41947,35303],{"class":53},[39,41949,1845],{"class":45},[39,41951,35308],{"class":53},[39,41953,41954],{"class":41,"line":10885},[39,41955,35313],{"class":128},[39,41957,41958,41960,41962,41964],{"class":41,"line":10891},[39,41959,33426],{"class":74},[39,41961,54],{"class":53},[39,41963,35322],{"class":237},[39,41965,35325],{"class":53},[39,41967,41968],{"class":41,"line":10912},[39,41969,122],{"emptyLinePlaceholder":121},[39,41971,41972],{"class":41,"line":10918},[39,41973,35334],{"class":128},[39,41975,41976,41978,41980,41982,41984],{"class":41,"line":10932},[39,41977,2654],{"class":45},[39,41979,32195],{"class":74},[39,41981,4032],{"class":45},[39,41983,32200],{"class":237},[39,41985,4822],{"class":53},[39,41987,41988],{"class":41,"line":10938},[39,41989,35351],{"class":128},[39,41991,41992,41994,41996],{"class":41,"line":10965},[39,41993,32264],{"class":53},[39,41995,1117],{"class":45},[39,41997,41998],{"class":53},"VGG16()\n",[39,42000,42001],{"class":41,"line":10974},[39,42002,35364],{"class":128},[39,42004,42005],{"class":41,"line":10980},[39,42006,35369],{"class":128},[39,42008,42009,42011,42013],{"class":41,"line":10988},[39,42010,35374],{"class":53},[39,42012,35377],{"class":237},[39,42014,31472],{"class":53},[39,42016,42017],{"class":41,"line":10993},[39,42018,35384],{"class":128},[39,42020,42021,42023,42025],{"class":41,"line":17577},[39,42022,34997],{"class":53},[39,42024,1117],{"class":45},[39,42026,35393],{"class":53},[39,42028,42029],{"class":41,"line":17583},[39,42030,35398],{"class":128},[39,42032,42033],{"class":41,"line":17606},[39,42034,35403],{"class":53},[39,42036,42037],{"class":41,"line":17612},[39,42038,122],{"emptyLinePlaceholder":121},[39,42040,42041],{"class":41,"line":17635},[39,42042,35412],{"class":128},[39,42044,42045],{"class":41,"line":17649},[39,42046,35417],{"class":128},[39,42048,42049,42051,42053,42055,42057,42059,42061],{"class":41,"line":17669},[39,42050,32212],{"class":53},[39,42052,1117],{"class":45},[39,42054,32219],{"class":237},[39,42056,2814],{"class":45},[39,42058,32224],{"class":53},[39,42060,2811],{"class":45},[39,42062,35094],{"class":237},[39,42064,42065,42067,42069],{"class":41,"line":17675},[39,42066,32264],{"class":53},[39,42068,1117],{"class":45},[39,42070,33264],{"class":53},[39,42072,42073],{"class":41,"line":17686},[39,42074,35446],{"class":128},[39,42076,42077],{"class":41,"line":17709},[39,42078,35451],{"class":128},[39,42080,42081,42083,42085,42087,42089,42091,42093,42095,42097,42099,42101,42103,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125],{"class":41,"line":17731},[39,42082,35456],{"class":53},[39,42084,1117],{"class":45},[39,42086,2150],{"class":53},[39,42088,35463],{"class":237},[39,42090,426],{"class":53},[39,42092,35468],{"class":237},[39,42094,426],{"class":53},[39,42096,35473],{"class":237},[39,42098,426],{"class":53},[39,42100,35478],{"class":237},[39,42102,426],{"class":53},[39,42104,35483],{"class":237},[39,42106,426],{"class":53},[39,42108,35488],{"class":237},[39,42110,426],{"class":53},[39,42112,35493],{"class":237},[39,42114,426],{"class":53},[39,42116,35498],{"class":237},[39,42118,426],{"class":53},[39,42120,35503],{"class":237},[39,42122,426],{"class":53},[39,42124,35508],{"class":237},[39,42126,34221],{"class":53},[39,42128,42129,42131],{"class":41,"line":17736},[39,42130,35153],{"class":45},[39,42132,33859],{"class":53},[39,42134,42135],{"class":41,"line":17742},[39,42136,35521],{"class":128},[39,42138,42139,42141,42143,42145],{"class":41,"line":17756},[39,42140,4486],{"class":45},[39,42142,35528],{"class":53},[39,42144,27018],{"class":45},[39,42146,35172],{"class":53},[39,42148,42149,42151,42153],{"class":41,"line":17769},[39,42150,33585],{"class":53},[39,42152,1117],{"class":45},[39,42154,33590],{"class":53},[39,42156,42157,42159,42161],{"class":41,"line":17774},[39,42158,33600],{"class":53},[39,42160,1117],{"class":45},[39,42162,33605],{"class":53},[39,42164,42165],{"class":41,"line":17788},[39,42166,122],{"emptyLinePlaceholder":121},[39,42168,42169],{"class":41,"line":17793},[39,42170,35557],{"class":128},[39,42172,42173],{"class":41,"line":17799},[39,42174,33850],{"class":53},[39,42176,42177],{"class":41,"line":17804},[39,42178,35566],{"class":128},[39,42180,42181,42183,42185],{"class":41,"line":17818},[39,42182,33635],{"class":53},[39,42184,1117],{"class":45},[39,42186,33640],{"class":53},[39,42188,42189],{"class":41,"line":17823},[39,42190,35579],{"class":128},[39,42192,42193,42195,42197,42199,42201,42203,42205],{"class":41,"line":17828},[39,42194,33652],{"class":53},[39,42196,1117],{"class":45},[39,42198,33657],{"class":53},[39,42200,33660],{"class":59},[39,42202,1117],{"class":45},[39,42204,1483],{"class":74},[39,42206,574],{"class":53},[39,42208,42209],{"class":41,"line":17842},[39,42210,35600],{"class":128},[39,42212,42213,42215,42217],{"class":41,"line":17854},[39,42214,35605],{"class":53},[39,42216,1117],{"class":45},[39,42218,35610],{"class":53},[39,42220,42221,42223,42225],{"class":41,"line":17859},[39,42222,35615],{"class":53},[39,42224,1117],{"class":45},[39,42226,35620],{"class":53},[39,42228,42229,42231,42233,42235,42237,42239,42241,42243],{"class":41,"line":17872},[39,42230,35625],{"class":74},[39,42232,54],{"class":53},[39,42234,35630],{"class":237},[39,42236,35633],{"class":53},[39,42238,35636],{"class":237},[39,42240,426],{"class":53},[39,42242,35641],{"class":237},[39,42244,35644],{"class":53},[476,42246,42248],{"id":42247},"_23googlenet","2.3.GoogLeNet",[22971,42250,42252],{"id":42251},"_231原理","2.3.1.原理",[328,42254,42255],{},[331,42256,42257],{},"网络结构",[19,42259,42260],{},[2585,42261],{"alt":35,"src":42262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[19,42264,42265],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,42267,42268],{},[2585,42269],{"alt":35,"src":42270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[19,42272,42273],{},[2585,42274],{"alt":35,"src":42275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[19,42277,42278],{},[2585,42279],{"alt":35,"src":42280},"\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",[328,42282,42283],{"start":92},[331,42284,42285],{},"1x1卷积的优点",[19,42287,42288],{},[2585,42289],{"alt":35,"src":42290},"\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",[328,42292,42293],{"start":112},[331,42294,42295],{},"全局平均池化层优点",[19,42297,42298],{},[2585,42299],{"alt":35,"src":42300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[19,42302,42303],{},[2585,42304],{"alt":35,"src":42305},"\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",[328,42307,42308],{"start":118},[331,42309,42310],{},"参数详细描述",[19,42312,42313],{},[2585,42314],{"alt":35,"src":42315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[19,42317,42318],{},[2585,42319],{"alt":35,"src":42320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[19,42322,42323],{},[2585,42324],{"alt":35,"src":42325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[19,42327,42328],{},[2585,42329],{"alt":35,"src":42330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[19,42332,42333],{},[2585,42334],{"alt":35,"src":42335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,42337,42338],{},[2585,42339],{"alt":35,"src":42340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,42342,42343],{},[2585,42344],{"alt":35,"src":42345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,42347,42348],{},[2585,42349],{"alt":35,"src":42350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,42352,42353],{},[2585,42354],{"alt":35,"src":42355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,42357,42358],{},[2585,42359],{"alt":35,"src":42360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,42362,42363],{},[2585,42364],{"alt":35,"src":42365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,42367,42368],{},[2585,42369],{"alt":35,"src":42370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,42372,42373],{},[2585,42374],{"alt":35,"src":42375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[19,42377,42378],{},[2585,42379],{"alt":35,"src":42380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[19,42382,42383],{},[2585,42384],{"alt":35,"src":42385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[19,42387,42388],{},[2585,42389],{"alt":35,"src":42390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,42392,42393],{},[2585,42394],{"alt":35,"src":42395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[19,42397,42398],{},[2585,42399],{"alt":35,"src":42400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,42402,42403],{},[2585,42404],{"alt":35,"src":42405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,42407,42408],{},[2585,42409],{"alt":35,"src":42410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,42412,42413],{},[2585,42414],{"alt":35,"src":42415},"\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",[22971,42417,42419],{"id":42418},"_232代码实现","2.3.2.代码实现",[328,42421,42422],{},[331,42423,31686],{},[19,42425,42426],{},"根据原理一步一步搭建即可",[30,42428,42430],{"className":31353,"code":42429,"language":31355,"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",[26,42431,42432,42438,42448,42458,42462,42479,42488,42503,42513,42518,42551,42556,42593,42640,42645,42681,42728,42733,42738,42773,42805,42809,42817,42833,42857,42882,42903,42908,42923,42927,42931,42936,42953,42958,42967,42982,42993,43037,43041,43069,43073,43084,43112,43116,43153,43157,43185,43189,43200,43236,43268,43296,43300,43311,43345,43377,43409,43442,43476,43504,43508,43519,43552,43584,43598,43602,43615,43619,43624,43636,43644,43666,43671,43676,43681,43686,43691,43696,43710,43718,43727,43740,43755,43764,43768,43776,43787,43798,43809,43820,43831,43837,43841,43846,43858,43878,43887],{"__ignoreMap":35},[39,42433,42434,42436],{"class":41,"line":42},[39,42435,31367],{"class":45},[39,42437,31370],{"class":53},[39,42439,42440,42442,42444,42446],{"class":41,"line":92},[39,42441,31712],{"class":45},[39,42443,31715],{"class":53},[39,42445,31367],{"class":45},[39,42447,31720],{"class":53},[39,42449,42450,42452,42454,42456],{"class":41,"line":112},[39,42451,31712],{"class":45},[39,42453,31732],{"class":53},[39,42455,31367],{"class":45},[39,42457,31737],{"class":53},[39,42459,42460],{"class":41,"line":118},[39,42461,122],{"emptyLinePlaceholder":121},[39,42463,42464,42466,42469,42471,42473,42475,42477],{"class":41,"line":125},[39,42465,15667],{"class":45},[39,42467,42468],{"class":49}," Inception",[39,42470,54],{"class":53},[39,42472,31753],{"class":49},[39,42474,1819],{"class":53},[39,42476,31758],{"class":49},[39,42478,31761],{"class":53},[39,42480,42481,42483,42485],{"class":41,"line":132},[39,42482,31776],{"class":45},[39,42484,31779],{"class":74},[39,42486,42487],{"class":53},"(self,in_channels,c1,c2,c3,c4):\n",[39,42489,42490,42492,42495,42497,42499,42501],{"class":41,"line":138},[39,42491,31792],{"class":74},[39,42493,42494],{"class":53},"(Inception,",[39,42496,31798],{"class":74},[39,42498,31801],{"class":53},[39,42500,31804],{"class":74},[39,42502,537],{"class":53},[39,42504,42505,42507,42509,42511],{"class":41,"line":169},[39,42506,31820],{"class":74},[39,42508,35746],{"class":53},[39,42510,1117],{"class":45},[39,42512,35751],{"class":53},[39,42514,42515],{"class":41,"line":190},[39,42516,42517],{"class":128},"        # 路线1：定义1*1卷积\n",[39,42519,42520,42522,42525,42527,42529,42531,42533,42536,42538,42540,42543,42545,42547,42549],{"class":41,"line":202},[39,42521,31820],{"class":74},[39,42523,42524],{"class":53},".p1_1",[39,42526,1117],{"class":45},[39,42528,31828],{"class":53},[39,42530,31831],{"class":59},[39,42532,1117],{"class":45},[39,42534,42535],{"class":53},"in_channels,",[39,42537,31840],{"class":59},[39,42539,1117],{"class":45},[39,42541,42542],{"class":53},"c1,",[39,42544,31849],{"class":59},[39,42546,1117],{"class":45},[39,42548,1483],{"class":74},[39,42550,574],{"class":53},[39,42552,42553],{"class":41,"line":207},[39,42554,42555],{"class":128},"        # 路线2：定义1*1卷积和3*3\n",[39,42557,42558,42560,42563,42565,42567,42569,42571,42573,42575,42577,42580,42582,42585,42587,42589,42591],{"class":41,"line":212},[39,42559,31820],{"class":74},[39,42561,42562],{"class":53},".p2_1",[39,42564,1117],{"class":45},[39,42566,31828],{"class":53},[39,42568,31831],{"class":59},[39,42570,1117],{"class":45},[39,42572,42535],{"class":53},[39,42574,31840],{"class":59},[39,42576,1117],{"class":45},[39,42578,42579],{"class":53},"c2[",[39,42581,1457],{"class":74},[39,42583,42584],{"class":53},"],",[39,42586,31849],{"class":59},[39,42588,1117],{"class":45},[39,42590,1483],{"class":74},[39,42592,574],{"class":53},[39,42594,42595,42597,42600,42602,42604,42606,42608,42610,42612,42614,42616,42618,42620,42622,42624,42626,42628,42630,42632,42634,42636,42638],{"class":41,"line":223},[39,42596,31820],{"class":74},[39,42598,42599],{"class":53},".p2_2",[39,42601,1117],{"class":45},[39,42603,31828],{"class":53},[39,42605,31831],{"class":59},[39,42607,1117],{"class":45},[39,42609,42579],{"class":53},[39,42611,1457],{"class":74},[39,42613,42584],{"class":53},[39,42615,31840],{"class":59},[39,42617,1117],{"class":45},[39,42619,42579],{"class":53},[39,42621,1483],{"class":74},[39,42623,42584],{"class":53},[39,42625,31849],{"class":59},[39,42627,1117],{"class":45},[39,42629,1339],{"class":74},[39,42631,426],{"class":53},[39,42633,31858],{"class":59},[39,42635,1117],{"class":45},[39,42637,1483],{"class":74},[39,42639,574],{"class":53},[39,42641,42642],{"class":41,"line":228},[39,42643,42644],{"class":128},"        # 路线3：定义1*1卷积和5*5\n",[39,42646,42647,42649,42652,42654,42656,42658,42660,42662,42664,42666,42669,42671,42673,42675,42677,42679],{"class":41,"line":263},[39,42648,31820],{"class":74},[39,42650,42651],{"class":53},".p3_1",[39,42653,1117],{"class":45},[39,42655,31828],{"class":53},[39,42657,31831],{"class":59},[39,42659,1117],{"class":45},[39,42661,42535],{"class":53},[39,42663,31840],{"class":59},[39,42665,1117],{"class":45},[39,42667,42668],{"class":53},"c3[",[39,42670,1457],{"class":74},[39,42672,42584],{"class":53},[39,42674,31849],{"class":59},[39,42676,1117],{"class":45},[39,42678,1483],{"class":74},[39,42680,574],{"class":53},[39,42682,42683,42685,42688,42690,42692,42694,42696,42698,42700,42702,42704,42706,42708,42710,42712,42714,42716,42718,42720,42722,42724,42726],{"class":41,"line":287},[39,42684,31820],{"class":74},[39,42686,42687],{"class":53},".p3_2",[39,42689,1117],{"class":45},[39,42691,31828],{"class":53},[39,42693,31831],{"class":59},[39,42695,1117],{"class":45},[39,42697,42668],{"class":53},[39,42699,1457],{"class":74},[39,42701,42584],{"class":53},[39,42703,31840],{"class":59},[39,42705,1117],{"class":45},[39,42707,42668],{"class":53},[39,42709,1483],{"class":74},[39,42711,42584],{"class":53},[39,42713,31849],{"class":59},[39,42715,1117],{"class":45},[39,42717,1583],{"class":74},[39,42719,426],{"class":53},[39,42721,31858],{"class":59},[39,42723,1117],{"class":45},[39,42725,1345],{"class":74},[39,42727,574],{"class":53},[39,42729,42730],{"class":41,"line":292},[39,42731,42732],{"class":128},"        # 路线4：定义3*3最大池化和1*1卷积\n",[39,42734,42735],{"class":41,"line":305},[39,42736,42737],{"class":128},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[39,42739,42740,42742,42745,42747,42749,42751,42753,42755,42757,42759,42761,42763,42765,42767,42769,42771],{"class":41,"line":310},[39,42741,31820],{"class":74},[39,42743,42744],{"class":53},".p4_1",[39,42746,1117],{"class":45},[39,42748,35804],{"class":53},[39,42750,31849],{"class":59},[39,42752,1117],{"class":45},[39,42754,1339],{"class":74},[39,42756,426],{"class":53},[39,42758,31904],{"class":59},[39,42760,1117],{"class":45},[39,42762,1483],{"class":74},[39,42764,426],{"class":53},[39,42766,31858],{"class":59},[39,42768,1117],{"class":45},[39,42770,1483],{"class":74},[39,42772,574],{"class":53},[39,42774,42775,42777,42780,42782,42784,42786,42788,42790,42792,42794,42797,42799,42801,42803],{"class":41,"line":321},[39,42776,31820],{"class":74},[39,42778,42779],{"class":53},".p4_2",[39,42781,1117],{"class":45},[39,42783,31828],{"class":53},[39,42785,31831],{"class":59},[39,42787,1117],{"class":45},[39,42789,42535],{"class":53},[39,42791,31840],{"class":59},[39,42793,1117],{"class":45},[39,42795,42796],{"class":53},"c4,",[39,42798,31849],{"class":59},[39,42800,1117],{"class":45},[39,42802,1483],{"class":74},[39,42804,574],{"class":53},[39,42806,42807],{"class":41,"line":713},[39,42808,122],{"emptyLinePlaceholder":121},[39,42810,42811,42813,42815],{"class":41,"line":718},[39,42812,31776],{"class":45},[39,42814,32068],{"class":49},[39,42816,32071],{"class":53},[39,42818,42819,42822,42824,42826,42828,42830],{"class":41,"line":723},[39,42820,42821],{"class":53},"        p1",[39,42823,1117],{"class":45},[39,42825,31798],{"class":74},[39,42827,36159],{"class":53},[39,42829,31798],{"class":74},[39,42831,42832],{"class":53},".p1_1(x))\n",[39,42834,42835,42837,42839,42841,42843,42845,42848,42850,42852,42854],{"class":41,"line":729},[39,42836,8159],{"class":53},[39,42838,1117],{"class":45},[39,42840,31798],{"class":74},[39,42842,36159],{"class":53},[39,42844,31798],{"class":74},[39,42846,42847],{"class":53},".p2_2(",[39,42849,31798],{"class":74},[39,42851,36159],{"class":53},[39,42853,31798],{"class":74},[39,42855,42856],{"class":53},".p2_1(x))))\n",[39,42858,42859,42862,42864,42866,42868,42870,42873,42875,42877,42879],{"class":41,"line":735},[39,42860,42861],{"class":53},"        p3",[39,42863,1117],{"class":45},[39,42865,31798],{"class":74},[39,42867,36159],{"class":53},[39,42869,31798],{"class":74},[39,42871,42872],{"class":53},".p3_2(",[39,42874,31798],{"class":74},[39,42876,36159],{"class":53},[39,42878,31798],{"class":74},[39,42880,42881],{"class":53},".p3_1(x))))\n",[39,42883,42884,42887,42889,42891,42893,42895,42898,42900],{"class":41,"line":741},[39,42885,42886],{"class":53},"        p4",[39,42888,1117],{"class":45},[39,42890,31798],{"class":74},[39,42892,36159],{"class":53},[39,42894,31798],{"class":74},[39,42896,42897],{"class":53},".p4_2(",[39,42899,31798],{"class":74},[39,42901,42902],{"class":53},".p4_1(x)))\n",[39,42904,42905],{"class":41,"line":747},[39,42906,42907],{"class":128},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[39,42909,42910,42912,42915,42917,42919,42921],{"class":41,"line":753},[39,42911,15725],{"class":45},[39,42913,42914],{"class":53}," torch.cat((p1,p2,p3,p4),",[39,42916,33660],{"class":59},[39,42918,1117],{"class":45},[39,42920,1483],{"class":74},[39,42922,574],{"class":53},[39,42924,42925],{"class":41,"line":758},[39,42926,122],{"emptyLinePlaceholder":121},[39,42928,42929],{"class":41,"line":763},[39,42930,122],{"emptyLinePlaceholder":121},[39,42932,42933],{"class":41,"line":772},[39,42934,42935],{"class":128},"# 搭建GoogLeNet网络\n",[39,42937,42938,42940,42943,42945,42947,42949,42951],{"class":41,"line":777},[39,42939,15667],{"class":45},[39,42941,42942],{"class":49}," GoogLeNet",[39,42944,54],{"class":53},[39,42946,31753],{"class":49},[39,42948,1819],{"class":53},[39,42950,31758],{"class":49},[39,42952,31761],{"class":53},[39,42954,42955],{"class":41,"line":785},[39,42956,42957],{"class":128},"    # 必须把Inception导入到里边\n",[39,42959,42960,42962,42964],{"class":41,"line":796},[39,42961,31776],{"class":45},[39,42963,31779],{"class":74},[39,42965,42966],{"class":53},"(self,Inception):\n",[39,42968,42969,42971,42974,42976,42978,42980],{"class":41,"line":808},[39,42970,31792],{"class":74},[39,42972,42973],{"class":53},"(GoogLeNet,",[39,42975,31798],{"class":74},[39,42977,31801],{"class":53},[39,42979,31804],{"class":74},[39,42981,537],{"class":53},[39,42983,42984,42986,42989,42991],{"class":41,"line":823},[39,42985,31820],{"class":74},[39,42987,42988],{"class":53},".b1",[39,42990,1117],{"class":45},[39,42992,38984],{"class":53},[39,42994,42995,42997,42999,43001,43003,43005,43007,43009,43011,43013,43015,43017,43019,43021,43023,43025,43027,43029,43031,43033,43035],{"class":41,"line":839},[39,42996,38989],{"class":53},[39,42998,31831],{"class":59},[39,43000,1117],{"class":45},[39,43002,1483],{"class":74},[39,43004,426],{"class":53},[39,43006,31840],{"class":59},[39,43008,1117],{"class":45},[39,43010,1469],{"class":74},[39,43012,426],{"class":53},[39,43014,31849],{"class":59},[39,43016,1117],{"class":45},[39,43018,1633],{"class":74},[39,43020,426],{"class":53},[39,43022,31904],{"class":59},[39,43024,1117],{"class":45},[39,43026,1345],{"class":74},[39,43028,426],{"class":53},[39,43030,31858],{"class":59},[39,43032,1117],{"class":45},[39,43034,1339],{"class":74},[39,43036,39022],{"class":53},[39,43038,43039],{"class":41,"line":845},[39,43040,39027],{"class":53},[39,43042,43043,43045,43047,43049,43051,43053,43055,43057,43059,43061,43063,43065,43067],{"class":41,"line":856},[39,43044,39072],{"class":53},[39,43046,31849],{"class":59},[39,43048,1117],{"class":45},[39,43050,1339],{"class":74},[39,43052,426],{"class":53},[39,43054,31904],{"class":59},[39,43056,1117],{"class":45},[39,43058,1345],{"class":74},[39,43060,426],{"class":53},[39,43062,31858],{"class":59},[39,43064,1117],{"class":45},[39,43066,1483],{"class":74},[39,43068,574],{"class":53},[39,43070,43071],{"class":41,"line":861},[39,43072,39101],{"class":53},[39,43074,43075,43077,43080,43082],{"class":41,"line":870},[39,43076,31820],{"class":74},[39,43078,43079],{"class":53},".b2",[39,43081,1117],{"class":45},[39,43083,38984],{"class":53},[39,43085,43086,43088,43090,43092,43094,43096,43098,43100,43102,43104,43106,43108,43110],{"class":41,"line":9084},[39,43087,38989],{"class":53},[39,43089,31831],{"class":59},[39,43091,1117],{"class":45},[39,43093,1469],{"class":74},[39,43095,426],{"class":53},[39,43097,31840],{"class":59},[39,43099,1117],{"class":45},[39,43101,1469],{"class":74},[39,43103,426],{"class":53},[39,43105,31849],{"class":59},[39,43107,1117],{"class":45},[39,43109,1483],{"class":74},[39,43111,39022],{"class":53},[39,43113,43114],{"class":41,"line":9090},[39,43115,39027],{"class":53},[39,43117,43118,43120,43122,43124,43126,43128,43130,43132,43135,43137,43139,43141,43143,43145,43147,43149,43151],{"class":41,"line":9102},[39,43119,38989],{"class":53},[39,43121,31831],{"class":59},[39,43123,1117],{"class":45},[39,43125,1469],{"class":74},[39,43127,426],{"class":53},[39,43129,31840],{"class":59},[39,43131,1117],{"class":45},[39,43133,43134],{"class":74},"192",[39,43136,426],{"class":53},[39,43138,31849],{"class":59},[39,43140,1117],{"class":45},[39,43142,1339],{"class":74},[39,43144,426],{"class":53},[39,43146,31858],{"class":59},[39,43148,1117],{"class":45},[39,43150,1483],{"class":74},[39,43152,39022],{"class":53},[39,43154,43155],{"class":41,"line":9114},[39,43156,39027],{"class":53},[39,43158,43159,43161,43163,43165,43167,43169,43171,43173,43175,43177,43179,43181,43183],{"class":41,"line":9126},[39,43160,39072],{"class":53},[39,43162,31849],{"class":59},[39,43164,1117],{"class":45},[39,43166,1339],{"class":74},[39,43168,426],{"class":53},[39,43170,31904],{"class":59},[39,43172,1117],{"class":45},[39,43174,1345],{"class":74},[39,43176,426],{"class":53},[39,43178,31858],{"class":59},[39,43180,1117],{"class":45},[39,43182,1483],{"class":74},[39,43184,574],{"class":53},[39,43186,43187],{"class":41,"line":10784},[39,43188,39101],{"class":53},[39,43190,43191,43193,43196,43198],{"class":41,"line":10809},[39,43192,31820],{"class":74},[39,43194,43195],{"class":53},".b3",[39,43197,1117],{"class":45},[39,43199,38984],{"class":53},[39,43201,43202,43205,43207,43209,43211,43214,43216,43218,43220,43223,43225,43227,43229,43232,43234],{"class":41,"line":10832},[39,43203,43204],{"class":53},"            Inception(",[39,43206,43134],{"class":74},[39,43208,426],{"class":53},[39,43210,1469],{"class":74},[39,43212,43213],{"class":53},",(",[39,43215,1475],{"class":74},[39,43217,426],{"class":53},[39,43219,33045],{"class":74},[39,43221,43222],{"class":53},"),(",[39,43224,1862],{"class":74},[39,43226,426],{"class":53},[39,43228,1463],{"class":74},[39,43230,43231],{"class":53},"),",[39,43233,1463],{"class":74},[39,43235,39022],{"class":53},[39,43237,43238,43240,43242,43244,43246,43248,43250,43252,43254,43256,43258,43260,43262,43264,43266],{"class":41,"line":10856},[39,43239,43204],{"class":53},[39,43241,35845],{"class":74},[39,43243,426],{"class":53},[39,43245,33045],{"class":74},[39,43247,43213],{"class":53},[39,43249,33045],{"class":74},[39,43251,426],{"class":53},[39,43253,43134],{"class":74},[39,43255,43222],{"class":53},[39,43257,1463],{"class":74},[39,43259,426],{"class":53},[39,43261,1475],{"class":74},[39,43263,43231],{"class":53},[39,43265,1469],{"class":74},[39,43267,39022],{"class":53},[39,43269,43270,43272,43274,43276,43278,43280,43282,43284,43286,43288,43290,43292,43294],{"class":41,"line":10861},[39,43271,39072],{"class":53},[39,43273,31849],{"class":59},[39,43275,1117],{"class":45},[39,43277,1339],{"class":74},[39,43279,426],{"class":53},[39,43281,31904],{"class":59},[39,43283,1117],{"class":45},[39,43285,1345],{"class":74},[39,43287,426],{"class":53},[39,43289,31858],{"class":59},[39,43291,1117],{"class":45},[39,43293,1483],{"class":74},[39,43295,574],{"class":53},[39,43297,43298],{"class":41,"line":10866},[39,43299,39101],{"class":53},[39,43301,43302,43304,43307,43309],{"class":41,"line":10871},[39,43303,31820],{"class":74},[39,43305,43306],{"class":53},".b4",[39,43308,1117],{"class":45},[39,43310,38984],{"class":53},[39,43312,43313,43315,43318,43320,43322,43324,43326,43328,43331,43333,43335,43337,43339,43341,43343],{"class":41,"line":10880},[39,43314,43204],{"class":53},[39,43316,43317],{"class":74},"480",[39,43319,426],{"class":53},[39,43321,43134],{"class":74},[39,43323,43213],{"class":53},[39,43325,1475],{"class":74},[39,43327,426],{"class":53},[39,43329,43330],{"class":74},"208",[39,43332,43222],{"class":53},[39,43334,1862],{"class":74},[39,43336,426],{"class":53},[39,43338,1868],{"class":74},[39,43340,43231],{"class":53},[39,43342,1469],{"class":74},[39,43344,39022],{"class":53},[39,43346,43347,43349,43351,43353,43355,43357,43359,43361,43363,43365,43367,43369,43371,43373,43375],{"class":41,"line":10885},[39,43348,43204],{"class":53},[39,43350,39432],{"class":74},[39,43352,426],{"class":53},[39,43354,22021],{"class":74},[39,43356,43213],{"class":53},[39,43358,1879],{"class":74},[39,43360,426],{"class":53},[39,43362,32476],{"class":74},[39,43364,43222],{"class":53},[39,43366,2060],{"class":74},[39,43368,426],{"class":53},[39,43370,1469],{"class":74},[39,43372,43231],{"class":53},[39,43374,1469],{"class":74},[39,43376,39022],{"class":53},[39,43378,43379,43381,43383,43385,43387,43389,43391,43393,43395,43397,43399,43401,43403,43405,43407],{"class":41,"line":10891},[39,43380,43204],{"class":53},[39,43382,39432],{"class":74},[39,43384,426],{"class":53},[39,43386,33045],{"class":74},[39,43388,43213],{"class":53},[39,43390,33045],{"class":74},[39,43392,426],{"class":53},[39,43394,35845],{"class":74},[39,43396,43222],{"class":53},[39,43398,2060],{"class":74},[39,43400,426],{"class":53},[39,43402,1469],{"class":74},[39,43404,43231],{"class":53},[39,43406,1469],{"class":74},[39,43408,39022],{"class":53},[39,43410,43411,43413,43415,43417,43419,43421,43423,43425,43428,43430,43432,43434,43436,43438,43440],{"class":41,"line":10912},[39,43412,43204],{"class":53},[39,43414,39432],{"class":74},[39,43416,426],{"class":53},[39,43418,1879],{"class":74},[39,43420,43213],{"class":53},[39,43422,33045],{"class":74},[39,43424,426],{"class":53},[39,43426,43427],{"class":74},"288",[39,43429,43222],{"class":53},[39,43431,1463],{"class":74},[39,43433,426],{"class":53},[39,43435,1469],{"class":74},[39,43437,43231],{"class":53},[39,43439,1469],{"class":74},[39,43441,39022],{"class":53},[39,43443,43444,43446,43449,43451,43453,43455,43457,43459,43462,43464,43466,43468,43470,43472,43474],{"class":41,"line":10918},[39,43445,43204],{"class":53},[39,43447,43448],{"class":74},"528",[39,43450,426],{"class":53},[39,43452,35845],{"class":74},[39,43454,43213],{"class":53},[39,43456,22021],{"class":74},[39,43458,426],{"class":53},[39,43460,43461],{"class":74},"320",[39,43463,43222],{"class":53},[39,43465,1463],{"class":74},[39,43467,426],{"class":53},[39,43469,33045],{"class":74},[39,43471,43231],{"class":53},[39,43473,33045],{"class":74},[39,43475,39022],{"class":53},[39,43477,43478,43480,43482,43484,43486,43488,43490,43492,43494,43496,43498,43500,43502],{"class":41,"line":10932},[39,43479,39072],{"class":53},[39,43481,31849],{"class":59},[39,43483,1117],{"class":45},[39,43485,1339],{"class":74},[39,43487,426],{"class":53},[39,43489,31904],{"class":59},[39,43491,1117],{"class":45},[39,43493,1345],{"class":74},[39,43495,426],{"class":53},[39,43497,31858],{"class":59},[39,43499,1117],{"class":45},[39,43501,1483],{"class":74},[39,43503,574],{"class":53},[39,43505,43506],{"class":41,"line":10938},[39,43507,39101],{"class":53},[39,43509,43510,43512,43515,43517],{"class":41,"line":10965},[39,43511,31820],{"class":74},[39,43513,43514],{"class":53},".b5",[39,43516,1117],{"class":45},[39,43518,38984],{"class":53},[39,43520,43521,43523,43526,43528,43530,43532,43534,43536,43538,43540,43542,43544,43546,43548,43550],{"class":41,"line":10974},[39,43522,43204],{"class":53},[39,43524,43525],{"class":74},"832",[39,43527,426],{"class":53},[39,43529,35845],{"class":74},[39,43531,43213],{"class":53},[39,43533,22021],{"class":74},[39,43535,426],{"class":53},[39,43537,43461],{"class":74},[39,43539,43222],{"class":53},[39,43541,1463],{"class":74},[39,43543,426],{"class":53},[39,43545,33045],{"class":74},[39,43547,43231],{"class":53},[39,43549,33045],{"class":74},[39,43551,39022],{"class":53},[39,43553,43554,43556,43558,43560,43562,43564,43566,43568,43570,43572,43574,43576,43578,43580,43582],{"class":41,"line":10980},[39,43555,43204],{"class":53},[39,43557,43525],{"class":74},[39,43559,426],{"class":53},[39,43561,35915],{"class":74},[39,43563,43213],{"class":53},[39,43565,43134],{"class":74},[39,43567,426],{"class":53},[39,43569,35915],{"class":74},[39,43571,43222],{"class":53},[39,43573,1868],{"class":74},[39,43575,426],{"class":53},[39,43577,33045],{"class":74},[39,43579,43231],{"class":53},[39,43581,33045],{"class":74},[39,43583,39022],{"class":53},[39,43585,43586,43589,43591,43593,43595],{"class":41,"line":10988},[39,43587,43588],{"class":53},"            nn.AdaptiveAvgPool2d((",[39,43590,1483],{"class":74},[39,43592,426],{"class":53},[39,43594,1483],{"class":74},[39,43596,43597],{"class":53},")),\n",[39,43599,43600],{"class":41,"line":10993},[39,43601,39765],{"class":53},[39,43603,43604,43606,43609,43611,43613],{"class":41,"line":17577},[39,43605,39770],{"class":53},[39,43607,43608],{"class":74},"1024",[39,43610,426],{"class":53},[39,43612,423],{"class":74},[39,43614,574],{"class":53},[39,43616,43617],{"class":41,"line":17583},[39,43618,39101],{"class":53},[39,43620,43621],{"class":41,"line":17606},[39,43622,43623],{"class":128},"        # 对模型参数初始化\n",[39,43625,43626,43628,43630,43632,43634],{"class":41,"line":17612},[39,43627,4486],{"class":45},[39,43629,39843],{"class":53},[39,43631,27018],{"class":45},[39,43633,39848],{"class":74},[39,43635,39851],{"class":53},[39,43637,43638,43640,43642],{"class":41,"line":17635},[39,43639,5723],{"class":45},[39,43641,39863],{"class":74},[39,43643,39866],{"class":53},[39,43645,43646,43648,43651,43653,43656,43658,43660,43662,43664],{"class":41,"line":17649},[39,43647,39876],{"class":53},[39,43649,43650],{"class":59},"mode",[39,43652,1117],{"class":45},[39,43654,43655],{"class":237},"'fan_out'",[39,43657,426],{"class":53},[39,43659,39879],{"class":59},[39,43661,1117],{"class":45},[39,43663,39884],{"class":237},[39,43665,574],{"class":53},[39,43667,43668],{"class":41,"line":17669},[39,43669,43670],{"class":128},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[39,43672,43673],{"class":41,"line":17675},[39,43674,43675],{"class":128},"                # ② mode = 'fan_out'决定使用的fan值：\n",[39,43677,43678],{"class":41,"line":17686},[39,43679,43680],{"class":128},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[39,43682,43683],{"class":41,"line":17709},[39,43684,43685],{"class":128},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[39,43687,43688],{"class":41,"line":17731},[39,43689,43690],{"class":128},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[39,43692,43693],{"class":41,"line":17736},[39,43694,43695],{"class":128},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[39,43697,43698,43700,43702,43704,43706,43708],{"class":41,"line":17742},[39,43699,39896],{"class":45},[39,43701,39899],{"class":53},[39,43703,39902],{"class":45},[39,43705,39905],{"class":45},[39,43707,39908],{"class":74},[39,43709,4822],{"class":53},[39,43711,43712,43714,43716],{"class":41,"line":17756},[39,43713,39920],{"class":53},[39,43715,1457],{"class":74},[39,43717,574],{"class":53},[39,43719,43720,43723,43725],{"class":41,"line":17769},[39,43721,43722],{"class":45},"                elif",[39,43724,39863],{"class":74},[39,43726,39939],{"class":53},[39,43728,43729,43732,43734,43736,43738],{"class":41,"line":17774},[39,43730,43731],{"class":53},"                    nn.init.normal_(m.weight,",[39,43733,1457],{"class":74},[39,43735,426],{"class":53},[39,43737,39961],{"class":74},[39,43739,574],{"class":53},[39,43741,43742,43745,43747,43749,43751,43753],{"class":41,"line":17788},[39,43743,43744],{"class":45},"                    if",[39,43746,39899],{"class":53},[39,43748,39902],{"class":45},[39,43750,39905],{"class":45},[39,43752,39908],{"class":74},[39,43754,4822],{"class":53},[39,43756,43757,43760,43762],{"class":41,"line":17793},[39,43758,43759],{"class":53},"                        nn.init.constant_(m.bias,",[39,43761,1457],{"class":74},[39,43763,574],{"class":53},[39,43765,43766],{"class":41,"line":17799},[39,43767,36140],{"class":128},[39,43769,43770,43772,43774],{"class":41,"line":17804},[39,43771,31776],{"class":45},[39,43773,32068],{"class":49},[39,43775,32071],{"class":53},[39,43777,43778,43780,43782,43784],{"class":41,"line":17818},[39,43779,32076],{"class":53},[39,43781,1117],{"class":45},[39,43783,31798],{"class":74},[39,43785,43786],{"class":53},".b1(x)\n",[39,43788,43789,43791,43793,43795],{"class":41,"line":17823},[39,43790,32076],{"class":53},[39,43792,1117],{"class":45},[39,43794,31798],{"class":74},[39,43796,43797],{"class":53},".b2(x)\n",[39,43799,43800,43802,43804,43806],{"class":41,"line":17828},[39,43801,32076],{"class":53},[39,43803,1117],{"class":45},[39,43805,31798],{"class":74},[39,43807,43808],{"class":53},".b3(x)\n",[39,43810,43811,43813,43815,43817],{"class":41,"line":17842},[39,43812,32076],{"class":53},[39,43814,1117],{"class":45},[39,43816,31798],{"class":74},[39,43818,43819],{"class":53},".b4(x)\n",[39,43821,43822,43824,43826,43828],{"class":41,"line":17854},[39,43823,32076],{"class":53},[39,43825,1117],{"class":45},[39,43827,31798],{"class":74},[39,43829,43830],{"class":53},".b5(x)\n",[39,43832,43833,43835],{"class":41,"line":17859},[39,43834,15725],{"class":45},[39,43836,32184],{"class":53},[39,43838,43839],{"class":41,"line":17872},[39,43840,122],{"emptyLinePlaceholder":121},[39,43842,43843],{"class":41,"line":17877},[39,43844,43845],{"class":128},"# 模型展示\n",[39,43847,43848,43850,43852,43854,43856],{"class":41,"line":17882},[39,43849,2654],{"class":45},[39,43851,32195],{"class":74},[39,43853,4032],{"class":45},[39,43855,32200],{"class":237},[39,43857,4822],{"class":53},[39,43859,43860,43862,43864,43866,43868,43870,43872,43874,43876],{"class":41,"line":17887},[39,43861,32212],{"class":53},[39,43863,1117],{"class":45},[39,43865,31426],{"class":53},[39,43867,32219],{"class":237},[39,43869,2814],{"class":45},[39,43871,32224],{"class":53},[39,43873,2811],{"class":45},[39,43875,31451],{"class":237},[39,43877,574],{"class":53},[39,43879,43880,43882,43884],{"class":41,"line":17900},[39,43881,32264],{"class":53},[39,43883,1117],{"class":45},[39,43885,43886],{"class":53},"GoogLeNet(Inception).to(device)\n",[39,43888,43889,43891,43893,43895,43897,43899,43901,43903],{"class":41,"line":17905},[39,43890,32274],{"class":74},[39,43892,32277],{"class":53},[39,43894,1483],{"class":74},[39,43896,426],{"class":53},[39,43898,32476],{"class":74},[39,43900,426],{"class":53},[39,43902,32476],{"class":74},[39,43904,32290],{"class":53},[328,43906,43907],{"start":92},[331,43908,40158],{},[30,43910,43912],{"className":31353,"code":43911,"language":31355,"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",[26,43913,43914,43920,43926,43936,43942,43952,43962,43972,43982,43992,43996,44007,44017,44021,44025,44029,44037,44049,44059,44075,44085,44117,44131,44141,44151,44155,44165,44179,44189,44199,44209,44215,44219,44223,44227,44231,44235,44243,44263,44267,44271,44275,44279,44283,44299,44303,44307,44315,44319,44323,44331,44335,44339,44343,44351,44355,44359,44363,44367,44375,44379,44387,44391,44399,44403,44411,44415,44423,44427,44431,44439,44443,44447,44451,44463,44487,44501,44505,44509,44513,44521,44525,44533,44537,44545,44549,44557,44561,44569,44573,44581,44585,44597,44601,44609,44613,44621,44625,44629,44633,44637,44645,44649,44665,44669,44677,44681,44685,44689,44693,44697,44701,44705,44721,44725,44737,44741,44753,44757,44769,44773,44781,44785,44793,44797,44801,44805,44811,44815,44823,44827,44843,44847,44855,44859,44875,44887,44891,44903,44907,44911,44919,44923,44927,44935,44939,44947,44951,44959,44963,44967,45009,45051,45055,45059,45075,45079,45095,45099,45103,45111,45115,45119,45131,45169,45173,45177,45185,45189,45203,45213,45219,45225,45231,45237,45241,45245,45251,45255,45259,45267,45271,45289,45293,45297,45301,45317,45321,45325,45329,45333,45337,45357,45377,45381,45385,45389,45397,45405,45409,45425,45445,45465,45469,45473,45481,45489,45493,45497,45501,45513,45517,45527,45535,45552],{"__ignoreMap":35},[39,43915,43916,43918],{"class":41,"line":42},[39,43917,31367],{"class":45},[39,43919,32797],{"class":53},[39,43921,43922,43924],{"class":41,"line":92},[39,43923,31367],{"class":45},[39,43925,32804],{"class":53},[39,43927,43928,43930,43932,43934],{"class":41,"line":112},[39,43929,31367],{"class":45},[39,43931,32815],{"class":53},[39,43933,32358],{"class":45},[39,43935,32820],{"class":53},[39,43937,43938,43940],{"class":41,"line":118},[39,43939,31367],{"class":45},[39,43941,31370],{"class":53},[39,43943,43944,43946,43948,43950],{"class":41,"line":125},[39,43945,31712],{"class":45},[39,43947,32390],{"class":53},[39,43949,31367],{"class":45},[39,43951,32837],{"class":53},[39,43953,43954,43956,43958,43960],{"class":41,"line":132},[39,43955,31712],{"class":45},[39,43957,32343],{"class":53},[39,43959,31367],{"class":45},[39,43961,32348],{"class":53},[39,43963,43964,43966,43968,43970],{"class":41,"line":138},[39,43965,31712],{"class":45},[39,43967,32373],{"class":53},[39,43969,31367],{"class":45},[39,43971,32378],{"class":53},[39,43973,43974,43976,43978,43980],{"class":41,"line":169},[39,43975,31367],{"class":45},[39,43977,32390],{"class":53},[39,43979,32358],{"class":45},[39,43981,32395],{"class":53},[39,43983,43984,43986,43988,43990],{"class":41,"line":190},[39,43985,31367],{"class":45},[39,43987,32407],{"class":53},[39,43989,32358],{"class":45},[39,43991,32412],{"class":53},[39,43993,43994],{"class":41,"line":202},[39,43995,32882],{"class":128},[39,43997,43998,44000,44002,44004],{"class":41,"line":207},[39,43999,31712],{"class":45},[39,44001,32889],{"class":53},[39,44003,31367],{"class":45},[39,44005,44006],{"class":53}," GoogLeNet, Inception\n",[39,44008,44009,44011,44013,44015],{"class":41,"line":212},[39,44010,31712],{"class":45},[39,44012,31715],{"class":53},[39,44014,31367],{"class":45},[39,44016,31720],{"class":53},[39,44018,44019],{"class":41,"line":223},[39,44020,122],{"emptyLinePlaceholder":121},[39,44022,44023],{"class":41,"line":228},[39,44024,122],{"emptyLinePlaceholder":121},[39,44026,44027],{"class":41,"line":263},[39,44028,32917],{"class":128},[39,44030,44031,44033,44035],{"class":41,"line":287},[39,44032,32922],{"class":45},[39,44034,32925],{"class":49},[39,44036,32928],{"class":53},[39,44038,44039,44041,44043,44045,44047],{"class":41,"line":292},[39,44040,32933],{"class":53},[39,44042,1117],{"class":45},[39,44044,32430],{"class":53},[39,44046,32438],{"class":237},[39,44048,32441],{"class":53},[39,44050,44051,44053,44055,44057],{"class":41,"line":305},[39,44052,32946],{"class":59},[39,44054,1117],{"class":45},[39,44056,32451],{"class":74},[39,44058,32441],{"class":53},[39,44060,44061,44063,44065,44067,44069,44071,44073],{"class":41,"line":310},[39,44062,32957],{"class":59},[39,44064,1117],{"class":45},[39,44066,32468],{"class":53},[39,44068,32471],{"class":59},[39,44070,1117],{"class":45},[39,44072,36424],{"class":74},[39,44074,32479],{"class":53},[39,44076,44077,44079,44081,44083],{"class":41,"line":321},[39,44078,32974],{"class":59},[39,44080,1117],{"class":45},[39,44082,32451],{"class":74},[39,44084,574],{"class":53},[39,44086,44087,44089,44091,44093,44095,44097,44099,44101,44103,44105,44107,44109,44111,44113,44115],{"class":41,"line":713},[39,44088,32985],{"class":53},[39,44090,1117],{"class":45},[39,44092,32990],{"class":53},[39,44094,32993],{"class":74},[39,44096,54],{"class":53},[39,44098,32998],{"class":74},[39,44100,1717],{"class":45},[39,44102,8432],{"class":74},[39,44104,33005],{"class":53},[39,44106,32993],{"class":74},[39,44108,54],{"class":53},[39,44110,33012],{"class":74},[39,44112,1717],{"class":45},[39,44114,8432],{"class":74},[39,44116,33019],{"class":53},[39,44118,44119,44121,44123,44125,44127,44129],{"class":41,"line":718},[39,44120,33024],{"class":53},[39,44122,1117],{"class":45},[39,44124,33029],{"class":53},[39,44126,32512],{"class":59},[39,44128,1117],{"class":45},[39,44130,32517],{"class":53},[39,44132,44133,44135,44137,44139],{"class":41,"line":723},[39,44134,33040],{"class":59},[39,44136,1117],{"class":45},[39,44138,1463],{"class":74},[39,44140,32441],{"class":53},[39,44142,44143,44145,44147,44149],{"class":41,"line":729},[39,44144,33052],{"class":59},[39,44146,1117],{"class":45},[39,44148,32451],{"class":74},[39,44150,32441],{"class":53},[39,44152,44153],{"class":41,"line":735},[39,44154,33063],{"class":128},[39,44156,44157,44159,44161,44163],{"class":41,"line":741},[39,44158,33068],{"class":59},[39,44160,1117],{"class":45},[39,44162,1658],{"class":74},[39,44164,574],{"class":53},[39,44166,44167,44169,44171,44173,44175,44177],{"class":41,"line":747},[39,44168,33079],{"class":53},[39,44170,1117],{"class":45},[39,44172,32509],{"class":53},[39,44174,32512],{"class":59},[39,44176,1117],{"class":45},[39,44178,33090],{"class":53},[39,44180,44181,44183,44185,44187],{"class":41,"line":753},[39,44182,33095],{"class":59},[39,44184,1117],{"class":45},[39,44186,1463],{"class":74},[39,44188,32441],{"class":53},[39,44190,44191,44193,44195,44197],{"class":41,"line":758},[39,44192,33106],{"class":59},[39,44194,1117],{"class":45},[39,44196,32451],{"class":74},[39,44198,32441],{"class":53},[39,44200,44201,44203,44205,44207],{"class":41,"line":763},[39,44202,33117],{"class":59},[39,44204,1117],{"class":45},[39,44206,1658],{"class":74},[39,44208,574],{"class":53},[39,44210,44211,44213],{"class":41,"line":772},[39,44212,95],{"class":45},[39,44214,33130],{"class":53},[39,44216,44217],{"class":41,"line":777},[39,44218,122],{"emptyLinePlaceholder":121},[39,44220,44221],{"class":41,"line":785},[39,44222,33139],{"class":128},[39,44224,44225],{"class":41,"line":796},[39,44226,33144],{"class":128},[39,44228,44229],{"class":41,"line":808},[39,44230,122],{"emptyLinePlaceholder":121},[39,44232,44233],{"class":41,"line":823},[39,44234,33153],{"class":128},[39,44236,44237,44239,44241],{"class":41,"line":839},[39,44238,32922],{"class":45},[39,44240,33160],{"class":49},[39,44242,33163],{"class":53},[39,44244,44245,44247,44249,44251,44253,44255,44257,44259,44261],{"class":41,"line":845},[39,44246,32212],{"class":53},[39,44248,1117],{"class":45},[39,44250,31426],{"class":53},[39,44252,32219],{"class":237},[39,44254,2814],{"class":45},[39,44256,32224],{"class":53},[39,44258,2811],{"class":45},[39,44260,33182],{"class":237},[39,44262,574],{"class":53},[39,44264,44265],{"class":41,"line":856},[39,44266,122],{"emptyLinePlaceholder":121},[39,44268,44269],{"class":41,"line":861},[39,44270,122],{"emptyLinePlaceholder":121},[39,44272,44273],{"class":41,"line":870},[39,44274,33197],{"class":128},[39,44276,44277],{"class":41,"line":9084},[39,44278,33202],{"class":128},[39,44280,44281],{"class":41,"line":9090},[39,44282,33207],{"class":128},[39,44284,44285,44287,44289,44291,44293,44295,44297],{"class":41,"line":9102},[39,44286,33212],{"class":53},[39,44288,1117],{"class":45},[39,44290,33217],{"class":53},[39,44292,33220],{"class":59},[39,44294,1117],{"class":45},[39,44296,33225],{"class":74},[39,44298,574],{"class":53},[39,44300,44301],{"class":41,"line":9114},[39,44302,122],{"emptyLinePlaceholder":121},[39,44304,44305],{"class":41,"line":9126},[39,44306,33236],{"class":128},[39,44308,44309,44311,44313],{"class":41,"line":10784},[39,44310,33241],{"class":53},[39,44312,1117],{"class":45},[39,44314,33246],{"class":53},[39,44316,44317],{"class":41,"line":10809},[39,44318,122],{"emptyLinePlaceholder":121},[39,44320,44321],{"class":41,"line":10832},[39,44322,33255],{"class":128},[39,44324,44325,44327,44329],{"class":41,"line":10856},[39,44326,32264],{"class":53},[39,44328,1117],{"class":45},[39,44330,33264],{"class":53},[39,44332,44333],{"class":41,"line":10861},[39,44334,33269],{"class":128},[39,44336,44337],{"class":41,"line":10866},[39,44338,33274],{"class":128},[39,44340,44341],{"class":41,"line":10871},[39,44342,33279],{"class":128},[39,44344,44345,44347,44349],{"class":41,"line":10880},[39,44346,33284],{"class":53},[39,44348,1117],{"class":45},[39,44350,33289],{"class":53},[39,44352,44353],{"class":41,"line":10885},[39,44354,122],{"emptyLinePlaceholder":121},[39,44356,44357],{"class":41,"line":10891},[39,44358,122],{"emptyLinePlaceholder":121},[39,44360,44361],{"class":41,"line":10912},[39,44362,33302],{"class":128},[39,44364,44365],{"class":41,"line":10918},[39,44366,33307],{"class":128},[39,44368,44369,44371,44373],{"class":41,"line":10932},[39,44370,33312],{"class":53},[39,44372,1117],{"class":45},[39,44374,33317],{"class":74},[39,44376,44377],{"class":41,"line":10938},[39,44378,33322],{"class":128},[39,44380,44381,44383,44385],{"class":41,"line":10965},[39,44382,33327],{"class":53},[39,44384,1117],{"class":45},[39,44386,33332],{"class":53},[39,44388,44389],{"class":41,"line":10974},[39,44390,33337],{"class":128},[39,44392,44393,44395,44397],{"class":41,"line":10980},[39,44394,33342],{"class":53},[39,44396,1117],{"class":45},[39,44398,33332],{"class":53},[39,44400,44401],{"class":41,"line":10988},[39,44402,33351],{"class":128},[39,44404,44405,44407,44409],{"class":41,"line":10993},[39,44406,33356],{"class":53},[39,44408,1117],{"class":45},[39,44410,33332],{"class":53},[39,44412,44413],{"class":41,"line":17577},[39,44414,33365],{"class":128},[39,44416,44417,44419,44421],{"class":41,"line":17583},[39,44418,33370],{"class":53},[39,44420,1117],{"class":45},[39,44422,33332],{"class":53},[39,44424,44425],{"class":41,"line":17606},[39,44426,122],{"emptyLinePlaceholder":121},[39,44428,44429],{"class":41,"line":17612},[39,44430,33383],{"class":128},[39,44432,44433,44435,44437],{"class":41,"line":17635},[39,44434,33388],{"class":53},[39,44436,1117],{"class":45},[39,44438,33393],{"class":53},[39,44440,44441],{"class":41,"line":17649},[39,44442,122],{"emptyLinePlaceholder":121},[39,44444,44445],{"class":41,"line":17669},[39,44446,122],{"emptyLinePlaceholder":121},[39,44448,44449],{"class":41,"line":17675},[39,44450,33406],{"class":128},[39,44452,44453,44455,44457,44459,44461],{"class":41,"line":17686},[39,44454,4284],{"class":45},[39,44456,33413],{"class":53},[39,44458,27018],{"class":45},[39,44460,33418],{"class":74},[39,44462,33421],{"class":53},[39,44464,44465,44467,44469,44471,44473,44475,44477,44479,44481,44483,44485],{"class":41,"line":17709},[39,44466,33426],{"class":74},[39,44468,54],{"class":53},[39,44470,33431],{"class":237},[39,44472,33434],{"class":74},[39,44474,1845],{"class":237},[39,44476,33434],{"class":74},[39,44478,1516],{"class":237},[39,44480,33443],{"class":53},[39,44482,1793],{"class":45},[39,44484,1483],{"class":74},[39,44486,31472],{"class":53},[39,44488,44489,44491,44493,44495,44497,44499],{"class":41,"line":17731},[39,44490,33426],{"class":74},[39,44492,54],{"class":53},[39,44494,33458],{"class":237},[39,44496,1717],{"class":45},[39,44498,423],{"class":74},[39,44500,574],{"class":53},[39,44502,44503],{"class":41,"line":17736},[39,44504,122],{"emptyLinePlaceholder":121},[39,44506,44507],{"class":41,"line":17742},[39,44508,33473],{"class":128},[39,44510,44511],{"class":41,"line":17756},[39,44512,33478],{"class":128},[39,44514,44515,44517,44519],{"class":41,"line":17769},[39,44516,33483],{"class":53},[39,44518,1117],{"class":45},[39,44520,33317],{"class":74},[39,44522,44523],{"class":41,"line":17774},[39,44524,33492],{"class":128},[39,44526,44527,44529,44531],{"class":41,"line":17788},[39,44528,33497],{"class":53},[39,44530,1117],{"class":45},[39,44532,4168],{"class":74},[39,44534,44535],{"class":41,"line":17793},[39,44536,33506],{"class":128},[39,44538,44539,44541,44543],{"class":41,"line":17799},[39,44540,33511],{"class":53},[39,44542,1117],{"class":45},[39,44544,33317],{"class":74},[39,44546,44547],{"class":41,"line":17804},[39,44548,33520],{"class":128},[39,44550,44551,44553,44555],{"class":41,"line":17818},[39,44552,33525],{"class":53},[39,44554,1117],{"class":45},[39,44556,4168],{"class":74},[39,44558,44559],{"class":41,"line":17823},[39,44560,33534],{"class":128},[39,44562,44563,44565,44567],{"class":41,"line":17828},[39,44564,33539],{"class":53},[39,44566,1117],{"class":45},[39,44568,4168],{"class":74},[39,44570,44571],{"class":41,"line":17842},[39,44572,33548],{"class":128},[39,44574,44575,44577,44579],{"class":41,"line":17854},[39,44576,33553],{"class":53},[39,44578,1117],{"class":45},[39,44580,4168],{"class":74},[39,44582,44583],{"class":41,"line":17859},[39,44584,33562],{"class":128},[39,44586,44587,44589,44591,44593,44595],{"class":41,"line":17872},[39,44588,4486],{"class":45},[39,44590,32576],{"class":53},[39,44592,27018],{"class":45},[39,44594,32581],{"class":74},[39,44596,33575],{"class":53},[39,44598,44599],{"class":41,"line":17877},[39,44600,33580],{"class":128},[39,44602,44603,44605,44607],{"class":41,"line":17882},[39,44604,33585],{"class":53},[39,44606,1117],{"class":45},[39,44608,33590],{"class":53},[39,44610,44611],{"class":41,"line":17887},[39,44612,33595],{"class":128},[39,44614,44615,44617,44619],{"class":41,"line":17900},[39,44616,33600],{"class":53},[39,44618,1117],{"class":45},[39,44620,33605],{"class":53},[39,44622,44623],{"class":41,"line":17905},[39,44624,33611],{"class":128},[39,44626,44627],{"class":41,"line":33608},[39,44628,33617],{"class":53},[39,44630,44631],{"class":41,"line":33614},[39,44632,33623],{"class":128},[39,44634,44635],{"class":41,"line":33620},[39,44636,33629],{"class":128},[39,44638,44639,44641,44643],{"class":41,"line":33626},[39,44640,33635],{"class":53},[39,44642,1117],{"class":45},[39,44644,33640],{"class":53},[39,44646,44647],{"class":41,"line":33632},[39,44648,33646],{"class":128},[39,44650,44651,44653,44655,44657,44659,44661,44663],{"class":41,"line":33643},[39,44652,33652],{"class":53},[39,44654,1117],{"class":45},[39,44656,33657],{"class":53},[39,44658,33660],{"class":59},[39,44660,1117],{"class":45},[39,44662,1483],{"class":74},[39,44664,574],{"class":53},[39,44666,44667],{"class":41,"line":33649},[39,44668,33672],{"class":128},[39,44670,44671,44673,44675],{"class":41,"line":33669},[39,44672,33678],{"class":53},[39,44674,1117],{"class":45},[39,44676,33683],{"class":53},[39,44678,44679],{"class":41,"line":33675},[39,44680,33689],{"class":128},[39,44682,44683],{"class":41,"line":33686},[39,44684,33695],{"class":53},[39,44686,44687],{"class":41,"line":33692},[39,44688,33701],{"class":128},[39,44690,44691],{"class":41,"line":33698},[39,44692,33707],{"class":53},[39,44694,44695],{"class":41,"line":33704},[39,44696,33713],{"class":128},[39,44698,44699],{"class":41,"line":33710},[39,44700,33719],{"class":53},[39,44702,44703],{"class":41,"line":33716},[39,44704,33725],{"class":128},[39,44706,44707,44709,44711,44713,44715,44717,44719],{"class":41,"line":33722},[39,44708,33731],{"class":53},[39,44710,10545],{"class":45},[39,44712,33736],{"class":53},[39,44714,1717],{"class":45},[39,44716,33741],{"class":53},[39,44718,1457],{"class":74},[39,44720,574],{"class":53},[39,44722,44723],{"class":41,"line":33728},[39,44724,33751],{"class":128},[39,44726,44727,44729,44731,44733,44735],{"class":41,"line":33748},[39,44728,33757],{"class":53},[39,44730,10545],{"class":45},[39,44732,33762],{"class":53},[39,44734,4032],{"class":45},[39,44736,33767],{"class":53},[39,44738,44739],{"class":41,"line":33754},[39,44740,33773],{"class":128},[39,44742,44743,44745,44747,44749,44751],{"class":41,"line":33770},[39,44744,33779],{"class":53},[39,44746,10545],{"class":45},[39,44748,33741],{"class":53},[39,44750,1457],{"class":74},[39,44752,574],{"class":53},[39,44754,44755],{"class":41,"line":33776},[39,44756,33793],{"class":128},[39,44758,44759,44761,44763,44765,44767],{"class":41,"line":33790},[39,44760,4486],{"class":45},[39,44762,33801],{"class":53},[39,44764,27018],{"class":45},[39,44766,32581],{"class":74},[39,44768,33808],{"class":53},[39,44770,44771],{"class":41,"line":33796},[39,44772,33814],{"class":128},[39,44774,44775,44777,44779],{"class":41,"line":33811},[39,44776,33585],{"class":53},[39,44778,1117],{"class":45},[39,44780,33590],{"class":53},[39,44782,44783],{"class":41,"line":33817},[39,44784,33829],{"class":128},[39,44786,44787,44789,44791],{"class":41,"line":33826},[39,44788,33600],{"class":53},[39,44790,1117],{"class":45},[39,44792,33605],{"class":53},[39,44794,44795],{"class":41,"line":33832},[39,44796,33844],{"class":128},[39,44798,44799],{"class":41,"line":33841},[39,44800,33850],{"class":53},[39,44802,44803],{"class":41,"line":33847},[39,44804,37331],{"class":128},[39,44806,44807,44809],{"class":41,"line":33853},[39,44808,33856],{"class":45},[39,44810,33859],{"class":53},[39,44812,44813],{"class":41,"line":33862},[39,44814,33865],{"class":128},[39,44816,44817,44819,44821],{"class":41,"line":33868},[39,44818,37346],{"class":53},[39,44820,1117],{"class":45},[39,44822,33640],{"class":53},[39,44824,44825],{"class":41,"line":33879},[39,44826,33882],{"class":128},[39,44828,44829,44831,44833,44835,44837,44839,44841],{"class":41,"line":33885},[39,44830,37359],{"class":53},[39,44832,1117],{"class":45},[39,44834,33657],{"class":53},[39,44836,33660],{"class":59},[39,44838,1117],{"class":45},[39,44840,1483],{"class":74},[39,44842,574],{"class":53},[39,44844,44845],{"class":41,"line":33904},[39,44846,33907],{"class":128},[39,44848,44849,44851,44853],{"class":41,"line":33910},[39,44850,37380],{"class":53},[39,44852,1117],{"class":45},[39,44854,33683],{"class":53},[39,44856,44857],{"class":41,"line":33921},[39,44858,33924],{"class":128},[39,44860,44861,44863,44865,44867,44869,44871,44873],{"class":41,"line":33927},[39,44862,37393],{"class":53},[39,44864,10545],{"class":45},[39,44866,37398],{"class":53},[39,44868,1717],{"class":45},[39,44870,33741],{"class":53},[39,44872,1457],{"class":74},[39,44874,574],{"class":53},[39,44876,44877,44879,44881,44883,44885],{"class":41,"line":33947},[39,44878,37411],{"class":53},[39,44880,10545],{"class":45},[39,44882,33762],{"class":53},[39,44884,4032],{"class":45},[39,44886,33767],{"class":53},[39,44888,44889],{"class":41,"line":33963},[39,44890,37424],{"class":128},[39,44892,44893,44895,44897,44899,44901],{"class":41,"line":33969},[39,44894,37429],{"class":53},[39,44896,10545],{"class":45},[39,44898,33741],{"class":53},[39,44900,1457],{"class":74},[39,44902,574],{"class":53},[39,44904,44905],{"class":41,"line":33983},[39,44906,33986],{"class":128},[39,44908,44909],{"class":41,"line":33989},[39,44910,33992],{"class":128},[39,44912,44913,44915,44917],{"class":41,"line":33995},[39,44914,33998],{"class":53},[39,44916,1845],{"class":45},[39,44918,34003],{"class":53},[39,44920,44921],{"class":41,"line":34006},[39,44922,34009],{"class":128},[39,44924,44925],{"class":41,"line":34012},[39,44926,34015],{"class":128},[39,44928,44929,44931,44933],{"class":41,"line":34018},[39,44930,34021],{"class":53},[39,44932,1845],{"class":45},[39,44934,34003],{"class":53},[39,44936,44937],{"class":41,"line":34028},[39,44938,34031],{"class":128},[39,44940,44941,44943,44945],{"class":41,"line":34034},[39,44942,34037],{"class":53},[39,44944,1845],{"class":45},[39,44946,34042],{"class":53},[39,44948,44949],{"class":41,"line":34045},[39,44950,34048],{"class":128},[39,44952,44953,44955,44957],{"class":41,"line":34051},[39,44954,34054],{"class":53},[39,44956,1845],{"class":45},[39,44958,34042],{"class":53},[39,44960,44961],{"class":41,"line":34061},[39,44962,122],{"emptyLinePlaceholder":121},[39,44964,44965],{"class":41,"line":34066},[39,44966,34069],{"class":128},[39,44968,44969,44971,44973,44975,44977,44979,44981,44983,44985,44987,44989,44991,44993,44995,44997,44999,45001,45003,45005,45007],{"class":41,"line":34072},[39,44970,33426],{"class":74},[39,44972,54],{"class":53},[39,44974,4675],{"class":237},[39,44976,33434],{"class":74},[39,44978,34083],{"class":237},[39,44980,2156],{"class":74},[39,44982,34088],{"class":45},[39,44984,2206],{"class":74},[39,44986,34093],{"class":237},[39,44988,2156],{"class":74},[39,44990,34088],{"class":45},[39,44992,2206],{"class":74},[39,44994,4675],{"class":237},[39,44996,34104],{"class":53},[39,44998,1793],{"class":45},[39,45000,1483],{"class":74},[39,45002,34111],{"class":53},[39,45004,1793],{"class":45},[39,45006,1483],{"class":74},[39,45008,34118],{"class":53},[39,45010,45011,45013,45015,45017,45019,45021,45023,45025,45027,45029,45031,45033,45035,45037,45039,45041,45043,45045,45047,45049],{"class":41,"line":34121},[39,45012,33426],{"class":74},[39,45014,54],{"class":53},[39,45016,4675],{"class":237},[39,45018,33434],{"class":74},[39,45020,34132],{"class":237},[39,45022,2156],{"class":74},[39,45024,34088],{"class":45},[39,45026,2206],{"class":74},[39,45028,34141],{"class":237},[39,45030,2156],{"class":74},[39,45032,34088],{"class":45},[39,45034,2206],{"class":74},[39,45036,4675],{"class":237},[39,45038,34152],{"class":53},[39,45040,1793],{"class":45},[39,45042,1483],{"class":74},[39,45044,34159],{"class":53},[39,45046,1793],{"class":45},[39,45048,1483],{"class":74},[39,45050,34118],{"class":53},[39,45052,45053],{"class":41,"line":34168},[39,45054,122],{"emptyLinePlaceholder":121},[39,45056,45057],{"class":41,"line":34173},[39,45058,34176],{"class":128},[39,45060,45061,45063,45065,45067,45069,45071,45073],{"class":41,"line":34179},[39,45062,3590],{"class":45},[39,45064,34184],{"class":53},[39,45066,1793],{"class":45},[39,45068,1483],{"class":74},[39,45070,2200],{"class":53},[39,45072,2220],{"class":45},[39,45074,34195],{"class":53},[39,45076,45077],{"class":41,"line":34198},[39,45078,34201],{"class":128},[39,45080,45081,45083,45085,45087,45089,45091,45093],{"class":41,"line":34204},[39,45082,34207],{"class":53},[39,45084,1311],{"class":74},[39,45086,1117],{"class":45},[39,45088,34214],{"class":53},[39,45090,1793],{"class":45},[39,45092,1483],{"class":74},[39,45094,34221],{"class":53},[39,45096,45097],{"class":41,"line":34224},[39,45098,34227],{"class":128},[39,45100,45101],{"class":41,"line":34230},[39,45102,34233],{"class":128},[39,45104,45105,45107,45109],{"class":41,"line":34236},[39,45106,34239],{"class":53},[39,45108,1117],{"class":45},[39,45110,33289],{"class":53},[39,45112,45113],{"class":41,"line":34246},[39,45114,122],{"emptyLinePlaceholder":121},[39,45116,45117],{"class":41,"line":34251},[39,45118,34254],{"class":128},[39,45120,45121,45123,45125,45127,45129],{"class":41,"line":34257},[39,45122,34260],{"class":53},[39,45124,1117],{"class":45},[39,45126,34265],{"class":53},[39,45128,1793],{"class":45},[39,45130,34270],{"class":53},[39,45132,45133,45135,45137,45139,45141,45143,45145,45147,45149,45151,45153,45155,45157,45159,45161,45163,45165,45167],{"class":41,"line":34273},[39,45134,33426],{"class":74},[39,45136,54],{"class":53},[39,45138,34280],{"class":237},[39,45140,2156],{"class":74},[39,45142,34285],{"class":45},[39,45144,2206],{"class":74},[39,45146,1805],{"class":237},[39,45148,2156],{"class":74},[39,45150,34285],{"class":45},[39,45152,2206],{"class":74},[39,45154,34298],{"class":237},[39,45156,34301],{"class":53},[39,45158,34304],{"class":45},[39,45160,2167],{"class":74},[39,45162,34309],{"class":53},[39,45164,1592],{"class":45},[39,45166,2167],{"class":74},[39,45168,31472],{"class":53},[39,45170,45171],{"class":41,"line":34318},[39,45172,37708],{"class":128},[39,45174,45175],{"class":41,"line":34324},[39,45176,37713],{"class":128},[39,45178,45179,45181,45183],{"class":41,"line":34330},[39,45180,37718],{"class":53},[39,45182,34342],{"class":237},[39,45184,574],{"class":53},[39,45186,45187],{"class":41,"line":34336},[39,45188,34362],{"class":128},[39,45190,45191,45193,45195,45197,45199,45201],{"class":41,"line":34347},[39,45192,34368],{"class":53},[39,45194,1117],{"class":45},[39,45196,34373],{"class":53},[39,45198,34376],{"class":59},[39,45200,1117],{"class":45},[39,45202,542],{"class":53},[39,45204,45205,45207,45209,45211],{"class":41,"line":34353},[39,45206,34386],{"class":237},[39,45208,2119],{"class":53},[39,45210,34391],{"class":74},[39,45212,34394],{"class":53},[39,45214,45215,45217],{"class":41,"line":34359},[39,45216,34400],{"class":237},[39,45218,34403],{"class":53},[39,45220,45221,45223],{"class":41,"line":34365},[39,45222,34409],{"class":237},[39,45224,34412],{"class":53},[39,45226,45227,45229],{"class":41,"line":34383},[39,45228,34418],{"class":237},[39,45230,34421],{"class":53},[39,45232,45233,45235],{"class":41,"line":34397},[39,45234,34427],{"class":237},[39,45236,34430],{"class":53},[39,45238,45239],{"class":41,"line":34406},[39,45240,34436],{"class":53},[39,45242,45243],{"class":41,"line":34415},[39,45244,34442],{"class":128},[39,45246,45247,45249],{"class":41,"line":34424},[39,45248,95],{"class":45},[39,45250,34450],{"class":53},[39,45252,45253],{"class":41,"line":34433},[39,45254,122],{"emptyLinePlaceholder":121},[39,45256,45257],{"class":41,"line":34439},[39,45258,34461],{"class":128},[39,45260,45261,45263,45265],{"class":41,"line":34445},[39,45262,32922],{"class":45},[39,45264,34469],{"class":49},[39,45266,34472],{"class":53},[39,45268,45269],{"class":41,"line":34453},[39,45270,34478],{"class":128},[39,45272,45273,45275,45277,45279,45281,45283,45285,45287],{"class":41,"line":34458},[39,45274,34484],{"class":53},[39,45276,32668],{"class":59},[39,45278,1117],{"class":45},[39,45280,54],{"class":53},[39,45282,1759],{"class":74},[39,45284,426],{"class":53},[39,45286,1558],{"class":74},[39,45288,31472],{"class":53},[39,45290,45291],{"class":41,"line":34464},[39,45292,34504],{"class":128},[39,45294,45295],{"class":41,"line":34475},[39,45296,34510],{"class":128},[39,45298,45299],{"class":41,"line":34481},[39,45300,34516],{"class":128},[39,45302,45303,45305,45307,45309,45311,45313,45315],{"class":41,"line":34501},[39,45304,32702],{"class":53},[39,45306,1483],{"class":74},[39,45308,426],{"class":53},[39,45310,1345],{"class":74},[39,45312,426],{"class":53},[39,45314,1483],{"class":74},[39,45316,574],{"class":53},[39,45318,45319],{"class":41,"line":34507},[39,45320,34539],{"class":128},[39,45322,45323],{"class":41,"line":34513},[39,45324,34545],{"class":128},[39,45326,45327],{"class":41,"line":34519},[39,45328,34551],{"class":128},[39,45330,45331],{"class":41,"line":34536},[39,45332,34557],{"class":128},[39,45334,45335],{"class":41,"line":34542},[39,45336,34563],{"class":128},[39,45338,45339,45341,45343,45345,45347,45349,45351,45353,45355],{"class":41,"line":34548},[39,45340,34569],{"class":53},[39,45342,34572],{"class":237},[39,45344,34575],{"class":53},[39,45346,34578],{"class":237},[39,45348,426],{"class":53},[39,45350,34583],{"class":59},[39,45352,1117],{"class":45},[39,45354,34588],{"class":237},[39,45356,574],{"class":53},[39,45358,45359,45361,45363,45365,45367,45369,45371,45373,45375],{"class":41,"line":34554},[39,45360,34569],{"class":53},[39,45362,34572],{"class":237},[39,45364,34600],{"class":53},[39,45366,34603],{"class":237},[39,45368,426],{"class":53},[39,45370,34583],{"class":59},[39,45372,1117],{"class":45},[39,45374,34612],{"class":237},[39,45376,574],{"class":53},[39,45378,45379],{"class":41,"line":34560},[39,45380,34620],{"class":128},[39,45382,45383],{"class":41,"line":34566},[39,45384,34626],{"class":53},[39,45386,45387],{"class":41,"line":34593},[39,45388,34632],{"class":128},[39,45390,45391,45393,45395],{"class":41,"line":34617},[39,45392,34638],{"class":53},[39,45394,34641],{"class":237},[39,45396,574],{"class":53},[39,45398,45399,45401,45403],{"class":41,"line":34623},[39,45400,34649],{"class":53},[39,45402,34652],{"class":237},[39,45404,574],{"class":53},[39,45406,45407],{"class":41,"line":34629},[39,45408,34660],{"class":128},[39,45410,45411,45413,45415,45417,45419,45421,45423],{"class":41,"line":34635},[39,45412,32702],{"class":53},[39,45414,1483],{"class":74},[39,45416,426],{"class":53},[39,45418,1345],{"class":74},[39,45420,426],{"class":53},[39,45422,1345],{"class":74},[39,45424,574],{"class":53},[39,45426,45427,45429,45431,45433,45435,45437,45439,45441,45443],{"class":41,"line":34646},[39,45428,34569],{"class":53},[39,45430,34572],{"class":237},[39,45432,34687],{"class":53},[39,45434,34578],{"class":237},[39,45436,426],{"class":53},[39,45438,34583],{"class":59},[39,45440,1117],{"class":45},[39,45442,34698],{"class":237},[39,45444,574],{"class":53},[39,45446,45447,45449,45451,45453,45455,45457,45459,45461,45463],{"class":41,"line":34657},[39,45448,34569],{"class":53},[39,45450,34572],{"class":237},[39,45452,34710],{"class":53},[39,45454,34603],{"class":237},[39,45456,426],{"class":53},[39,45458,34583],{"class":59},[39,45460,1117],{"class":45},[39,45462,34721],{"class":237},[39,45464,574],{"class":53},[39,45466,45467],{"class":41,"line":34663},[39,45468,34729],{"class":128},[39,45470,45471],{"class":41,"line":34680},[39,45472,34626],{"class":53},[39,45474,45475,45477,45479],{"class":41,"line":34703},[39,45476,34638],{"class":53},[39,45478,34572],{"class":237},[39,45480,574],{"class":53},[39,45482,45483,45485,45487],{"class":41,"line":34726},[39,45484,34649],{"class":53},[39,45486,34751],{"class":237},[39,45488,574],{"class":53},[39,45490,45491],{"class":41,"line":34732},[39,45492,34759],{"class":53},[39,45494,45495],{"class":41,"line":34737},[39,45496,122],{"emptyLinePlaceholder":121},[39,45498,45499],{"class":41,"line":34746},[39,45500,34770],{"class":128},[39,45502,45503,45505,45507,45509,45511],{"class":41,"line":34756},[39,45504,2654],{"class":45},[39,45506,32195],{"class":74},[39,45508,4032],{"class":45},[39,45510,32200],{"class":237},[39,45512,4822],{"class":53},[39,45514,45515],{"class":41,"line":34762},[39,45516,34789],{"class":128},[39,45518,45519,45522,45524],{"class":41,"line":34767},[39,45520,45521],{"class":53},"    GoogLeNet",[39,45523,1117],{"class":45},[39,45525,45526],{"class":53},"GoogLeNet(Inception)\n",[39,45528,45529,45531,45533],{"class":41,"line":34773},[39,45530,34806],{"class":53},[39,45532,1117],{"class":45},[39,45534,34811],{"class":53},[39,45536,45537,45539,45541,45544,45546,45548,45550],{"class":41,"line":34786},[39,45538,34368],{"class":53},[39,45540,1117],{"class":45},[39,45542,45543],{"class":53},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[39,45545,34824],{"class":59},[39,45547,1117],{"class":45},[39,45549,2211],{"class":74},[39,45551,574],{"class":53},[39,45553,45554],{"class":41,"line":34792},[39,45555,34836],{"class":53},[328,45557,45558],{"start":112},[331,45559,41549],{},[30,45561,45563],{"className":31353,"code":45562,"language":31355,"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",[26,45564,45565,45571,45581,45591,45595,45605,45616,45620,45624,45628,45636,45652,45662,45678,45688,45702,45706,45716,45726,45736,45742,45746,45750,45758,45762,45778,45786,45790,45794,45802,45810,45814,45818,45822,45826,45832,45836,45846,45854,45862,45866,45870,45874,45882,45886,45902,45906,45910,45914,45926,45930,45942,45946,45950,45962,45966,45976,45980,45984,45996,46000,46008,46012,46016,46024,46028,46036,46040,46044,46048,46052,46056,46072,46080,46084,46088,46136,46142,46146,46156,46164,46172,46176,46180,46184,46188,46196,46200,46216,46220,46228,46236],{"__ignoreMap":35},[39,45566,45567,45569],{"class":41,"line":42},[39,45568,31367],{"class":45},[39,45570,31370],{"class":53},[39,45572,45573,45575,45577,45579],{"class":41,"line":92},[39,45574,31367],{"class":45},[39,45576,32390],{"class":53},[39,45578,32358],{"class":45},[39,45580,32395],{"class":53},[39,45582,45583,45585,45587,45589],{"class":41,"line":112},[39,45584,31712],{"class":45},[39,45586,32373],{"class":53},[39,45588,31367],{"class":45},[39,45590,32378],{"class":53},[39,45592,45593],{"class":41,"line":118},[39,45594,34897],{"class":128},[39,45596,45597,45599,45601,45603],{"class":41,"line":125},[39,45598,31712],{"class":45},[39,45600,32343],{"class":53},[39,45602,31367],{"class":45},[39,45604,32348],{"class":53},[39,45606,45607,45609,45611,45613],{"class":41,"line":132},[39,45608,31712],{"class":45},[39,45610,32889],{"class":53},[39,45612,31367],{"class":45},[39,45614,45615],{"class":53}," GoogLeNet,Inception\n",[39,45617,45618],{"class":41,"line":138},[39,45619,122],{"emptyLinePlaceholder":121},[39,45621,45622],{"class":41,"line":169},[39,45623,122],{"emptyLinePlaceholder":121},[39,45625,45626],{"class":41,"line":190},[39,45627,34926],{"class":128},[39,45629,45630,45632,45634],{"class":41,"line":202},[39,45631,32922],{"class":45},[39,45633,34933],{"class":49},[39,45635,32928],{"class":53},[39,45637,45638,45640,45642,45644,45646,45648,45650],{"class":41,"line":207},[39,45639,34940],{"class":53},[39,45641,1117],{"class":45},[39,45643,32430],{"class":53},[39,45645,32433],{"class":59},[39,45647,1117],{"class":45},[39,45649,32438],{"class":237},[39,45651,32441],{"class":53},[39,45653,45654,45656,45658,45660],{"class":41,"line":212},[39,45655,34957],{"class":59},[39,45657,1117],{"class":45},[39,45659,34962],{"class":74},[39,45661,32441],{"class":53},[39,45663,45664,45666,45668,45670,45672,45674,45676],{"class":41,"line":223},[39,45665,34969],{"class":59},[39,45667,1117],{"class":45},[39,45669,32468],{"class":53},[39,45671,32471],{"class":59},[39,45673,1117],{"class":45},[39,45675,36424],{"class":74},[39,45677,32479],{"class":53},[39,45679,45680,45682,45684,45686],{"class":41,"line":228},[39,45681,34986],{"class":59},[39,45683,1117],{"class":45},[39,45685,32451],{"class":74},[39,45687,574],{"class":53},[39,45689,45690,45692,45694,45696,45698,45700],{"class":41,"line":263},[39,45691,34997],{"class":53},[39,45693,1117],{"class":45},[39,45695,32509],{"class":53},[39,45697,32512],{"class":59},[39,45699,1117],{"class":45},[39,45701,35008],{"class":53},[39,45703,45704],{"class":41,"line":287},[39,45705,35013],{"class":128},[39,45707,45708,45710,45712,45714],{"class":41,"line":292},[39,45709,35018],{"class":59},[39,45711,1117],{"class":45},[39,45713,1483],{"class":74},[39,45715,32441],{"class":53},[39,45717,45718,45720,45722,45724],{"class":41,"line":305},[39,45719,35029],{"class":59},[39,45721,1117],{"class":45},[39,45723,32451],{"class":74},[39,45725,32441],{"class":53},[39,45727,45728,45730,45732,45734],{"class":41,"line":310},[39,45729,35040],{"class":59},[39,45731,1117],{"class":45},[39,45733,1457],{"class":74},[39,45735,574],{"class":53},[39,45737,45738,45740],{"class":41,"line":321},[39,45739,95],{"class":45},[39,45741,35053],{"class":53},[39,45743,45744],{"class":41,"line":713},[39,45745,122],{"emptyLinePlaceholder":121},[39,45747,45748],{"class":41,"line":718},[39,45749,35062],{"class":128},[39,45751,45752,45754,45756],{"class":41,"line":723},[39,45753,32922],{"class":45},[39,45755,35069],{"class":49},[39,45757,35072],{"class":53},[39,45759,45760],{"class":41,"line":729},[39,45761,35077],{"class":128},[39,45763,45764,45766,45768,45770,45772,45774,45776],{"class":41,"line":735},[39,45765,32212],{"class":53},[39,45767,1117],{"class":45},[39,45769,32219],{"class":237},[39,45771,2814],{"class":45},[39,45773,32224],{"class":53},[39,45775,2811],{"class":45},[39,45777,35094],{"class":237},[39,45779,45780,45782,45784],{"class":41,"line":741},[39,45781,32264],{"class":53},[39,45783,1117],{"class":45},[39,45785,33264],{"class":53},[39,45787,45788],{"class":41,"line":747},[39,45789,122],{"emptyLinePlaceholder":121},[39,45791,45792],{"class":41,"line":753},[39,45793,35111],{"class":128},[39,45795,45796,45798,45800],{"class":41,"line":758},[39,45797,35116],{"class":53},[39,45799,1117],{"class":45},[39,45801,33317],{"class":74},[39,45803,45804,45806,45808],{"class":41,"line":763},[39,45805,35125],{"class":53},[39,45807,1117],{"class":45},[39,45809,4168],{"class":74},[39,45811,45812],{"class":41,"line":772},[39,45813,122],{"emptyLinePlaceholder":121},[39,45815,45816],{"class":41,"line":777},[39,45817,35138],{"class":128},[39,45819,45820],{"class":41,"line":785},[39,45821,35143],{"class":128},[39,45823,45824],{"class":41,"line":796},[39,45825,35148],{"class":128},[39,45827,45828,45830],{"class":41,"line":808},[39,45829,35153],{"class":45},[39,45831,33859],{"class":53},[39,45833,45834],{"class":41,"line":823},[39,45835,35160],{"class":128},[39,45837,45838,45840,45842,45844],{"class":41,"line":839},[39,45839,4486],{"class":45},[39,45841,35167],{"class":53},[39,45843,27018],{"class":45},[39,45845,35172],{"class":53},[39,45847,45848,45850,45852],{"class":41,"line":845},[39,45849,35177],{"class":53},[39,45851,1117],{"class":45},[39,45853,35182],{"class":53},[39,45855,45856,45858,45860],{"class":41,"line":856},[39,45857,35187],{"class":53},[39,45859,1117],{"class":45},[39,45861,35192],{"class":53},[39,45863,45864],{"class":41,"line":861},[39,45865,35197],{"class":128},[39,45867,45868],{"class":41,"line":870},[39,45869,33850],{"class":53},[39,45871,45872],{"class":41,"line":9084},[39,45873,35206],{"class":128},[39,45875,45876,45878,45880],{"class":41,"line":9090},[39,45877,33635],{"class":53},[39,45879,1117],{"class":45},[39,45881,35215],{"class":53},[39,45883,45884],{"class":41,"line":9102},[39,45885,35220],{"class":128},[39,45887,45888,45890,45892,45894,45896,45898,45900],{"class":41,"line":9114},[39,45889,33652],{"class":53},[39,45891,1117],{"class":45},[39,45893,33657],{"class":53},[39,45895,33660],{"class":59},[39,45897,1117],{"class":45},[39,45899,1483],{"class":74},[39,45901,574],{"class":53},[39,45903,45904],{"class":41,"line":9126},[39,45905,35241],{"class":128},[39,45907,45908],{"class":41,"line":10784},[39,45909,35246],{"class":128},[39,45911,45912],{"class":41,"line":10809},[39,45913,35251],{"class":128},[39,45915,45916,45918,45920,45922,45924],{"class":41,"line":10832},[39,45917,35256],{"class":53},[39,45919,10545],{"class":45},[39,45921,33762],{"class":53},[39,45923,4032],{"class":45},[39,45925,35265],{"class":53},[39,45927,45928],{"class":41,"line":10856},[39,45929,35270],{"class":128},[39,45931,45932,45934,45936,45938,45940],{"class":41,"line":10861},[39,45933,35275],{"class":53},[39,45935,10545],{"class":45},[39,45937,35280],{"class":53},[39,45939,1457],{"class":74},[39,45941,574],{"class":53},[39,45943,45944],{"class":41,"line":10866},[39,45945,122],{"emptyLinePlaceholder":121},[39,45947,45948],{"class":41,"line":10871},[39,45949,35293],{"class":128},[39,45951,45952,45954,45956,45958,45960],{"class":41,"line":10880},[39,45953,35298],{"class":53},[39,45955,1117],{"class":45},[39,45957,35303],{"class":53},[39,45959,1845],{"class":45},[39,45961,35308],{"class":53},[39,45963,45964],{"class":41,"line":10885},[39,45965,35313],{"class":128},[39,45967,45968,45970,45972,45974],{"class":41,"line":10891},[39,45969,33426],{"class":74},[39,45971,54],{"class":53},[39,45973,35322],{"class":237},[39,45975,35325],{"class":53},[39,45977,45978],{"class":41,"line":10912},[39,45979,122],{"emptyLinePlaceholder":121},[39,45981,45982],{"class":41,"line":10918},[39,45983,35334],{"class":128},[39,45985,45986,45988,45990,45992,45994],{"class":41,"line":10932},[39,45987,2654],{"class":45},[39,45989,32195],{"class":74},[39,45991,4032],{"class":45},[39,45993,32200],{"class":237},[39,45995,4822],{"class":53},[39,45997,45998],{"class":41,"line":10938},[39,45999,35351],{"class":128},[39,46001,46002,46004,46006],{"class":41,"line":10965},[39,46003,32264],{"class":53},[39,46005,1117],{"class":45},[39,46007,45526],{"class":53},[39,46009,46010],{"class":41,"line":10974},[39,46011,35364],{"class":128},[39,46013,46014],{"class":41,"line":10980},[39,46015,35369],{"class":128},[39,46017,46018,46020,46022],{"class":41,"line":10988},[39,46019,35374],{"class":53},[39,46021,35377],{"class":237},[39,46023,31472],{"class":53},[39,46025,46026],{"class":41,"line":10993},[39,46027,35384],{"class":128},[39,46029,46030,46032,46034],{"class":41,"line":17577},[39,46031,34997],{"class":53},[39,46033,1117],{"class":45},[39,46035,35393],{"class":53},[39,46037,46038],{"class":41,"line":17583},[39,46039,35398],{"class":128},[39,46041,46042],{"class":41,"line":17606},[39,46043,35403],{"class":53},[39,46045,46046],{"class":41,"line":17612},[39,46047,122],{"emptyLinePlaceholder":121},[39,46049,46050],{"class":41,"line":17635},[39,46051,35412],{"class":128},[39,46053,46054],{"class":41,"line":17649},[39,46055,35417],{"class":128},[39,46057,46058,46060,46062,46064,46066,46068,46070],{"class":41,"line":17669},[39,46059,32212],{"class":53},[39,46061,1117],{"class":45},[39,46063,32219],{"class":237},[39,46065,2814],{"class":45},[39,46067,32224],{"class":53},[39,46069,2811],{"class":45},[39,46071,35094],{"class":237},[39,46073,46074,46076,46078],{"class":41,"line":17675},[39,46075,32264],{"class":53},[39,46077,1117],{"class":45},[39,46079,33264],{"class":53},[39,46081,46082],{"class":41,"line":17686},[39,46083,35446],{"class":128},[39,46085,46086],{"class":41,"line":17709},[39,46087,35451],{"class":128},[39,46089,46090,46092,46094,46096,46098,46100,46102,46104,46106,46108,46110,46112,46114,46116,46118,46120,46122,46124,46126,46128,46130,46132,46134],{"class":41,"line":17731},[39,46091,35456],{"class":53},[39,46093,1117],{"class":45},[39,46095,2150],{"class":53},[39,46097,35463],{"class":237},[39,46099,426],{"class":53},[39,46101,35468],{"class":237},[39,46103,426],{"class":53},[39,46105,35473],{"class":237},[39,46107,426],{"class":53},[39,46109,35478],{"class":237},[39,46111,426],{"class":53},[39,46113,35483],{"class":237},[39,46115,426],{"class":53},[39,46117,35488],{"class":237},[39,46119,426],{"class":53},[39,46121,35493],{"class":237},[39,46123,426],{"class":53},[39,46125,35498],{"class":237},[39,46127,426],{"class":53},[39,46129,35503],{"class":237},[39,46131,426],{"class":53},[39,46133,35508],{"class":237},[39,46135,34221],{"class":53},[39,46137,46138,46140],{"class":41,"line":17736},[39,46139,35153],{"class":45},[39,46141,33859],{"class":53},[39,46143,46144],{"class":41,"line":17742},[39,46145,35521],{"class":128},[39,46147,46148,46150,46152,46154],{"class":41,"line":17756},[39,46149,4486],{"class":45},[39,46151,35528],{"class":53},[39,46153,27018],{"class":45},[39,46155,35172],{"class":53},[39,46157,46158,46160,46162],{"class":41,"line":17769},[39,46159,33585],{"class":53},[39,46161,1117],{"class":45},[39,46163,33590],{"class":53},[39,46165,46166,46168,46170],{"class":41,"line":17774},[39,46167,33600],{"class":53},[39,46169,1117],{"class":45},[39,46171,33605],{"class":53},[39,46173,46174],{"class":41,"line":17788},[39,46175,122],{"emptyLinePlaceholder":121},[39,46177,46178],{"class":41,"line":17793},[39,46179,35557],{"class":128},[39,46181,46182],{"class":41,"line":17799},[39,46183,33850],{"class":53},[39,46185,46186],{"class":41,"line":17804},[39,46187,35566],{"class":128},[39,46189,46190,46192,46194],{"class":41,"line":17818},[39,46191,33635],{"class":53},[39,46193,1117],{"class":45},[39,46195,33640],{"class":53},[39,46197,46198],{"class":41,"line":17823},[39,46199,35579],{"class":128},[39,46201,46202,46204,46206,46208,46210,46212,46214],{"class":41,"line":17828},[39,46203,33652],{"class":53},[39,46205,1117],{"class":45},[39,46207,33657],{"class":53},[39,46209,33660],{"class":59},[39,46211,1117],{"class":45},[39,46213,1483],{"class":74},[39,46215,574],{"class":53},[39,46217,46218],{"class":41,"line":17842},[39,46219,35600],{"class":128},[39,46221,46222,46224,46226],{"class":41,"line":17854},[39,46223,35605],{"class":53},[39,46225,1117],{"class":45},[39,46227,35610],{"class":53},[39,46229,46230,46232,46234],{"class":41,"line":17859},[39,46231,35615],{"class":53},[39,46233,1117],{"class":45},[39,46235,35620],{"class":53},[39,46237,46238,46240,46242,46244,46246,46248,46250,46252],{"class":41,"line":17872},[39,46239,35625],{"class":74},[39,46241,54],{"class":53},[39,46243,35630],{"class":237},[39,46245,35633],{"class":53},[39,46247,35636],{"class":237},[39,46249,426],{"class":53},[39,46251,35641],{"class":237},[39,46253,35644],{"class":53},[476,46255,46257],{"id":46256},"_24训练自己的数据集","2.4.训练自己的数据集",[19,46259,46260],{},"猫狗分类任务",[19,46262,46263],{},"划分数据集和验证集",[30,46265,46267],{"className":31353,"code":46266,"language":31355,"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",[26,46268,46269,46274,46281,46286,46297,46304,46308,46318,46332,46341,46345,46350,46360,46380,46384,46389,46399,46410,46423,46427,46432,46441,46451,46462,46466,46471,46481,46485,46490,46495,46500,46505,46510,46514,46524,46551,46564,46576,46603,46608,46613,46627,46632,46644,46659,46674,46682,46686,46691,46697,46709,46722,46727,46732,46737,46787,46793,46797],{"__ignoreMap":35},[39,46270,46271],{"class":41,"line":42},[39,46272,46273],{"class":128},"# 创建脚本，用于划分数据集和验证集\n",[39,46275,46276,46278],{"class":41,"line":92},[39,46277,31367],{"class":45},[39,46279,46280],{"class":53}," os\n",[39,46282,46283],{"class":41,"line":112},[39,46284,46285],{"class":128},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[39,46287,46288,46290,46293,46295],{"class":41,"line":118},[39,46289,31712],{"class":45},[39,46291,46292],{"class":53}," shutil ",[39,46294,31367],{"class":45},[39,46296,32797],{"class":53},[39,46298,46299,46301],{"class":41,"line":125},[39,46300,31367],{"class":45},[39,46302,46303],{"class":53}," random\n",[39,46305,46306],{"class":41,"line":132},[39,46307,122],{"emptyLinePlaceholder":121},[39,46309,46310,46312,46315],{"class":41,"line":138},[39,46311,32922],{"class":45},[39,46313,46314],{"class":49}," mkfile",[39,46316,46317],{"class":53},"(file):\n",[39,46319,46320,46322,46324,46327,46330],{"class":41,"line":169},[39,46321,4184],{"class":45},[39,46323,39905],{"class":45},[39,46325,46326],{"class":53}," os.path.exists(",[39,46328,46329],{"class":59},"file",[39,46331,31761],{"class":53},[39,46333,46334,46337,46339],{"class":41,"line":190},[39,46335,46336],{"class":53},"        os.makedirs(",[39,46338,46329],{"class":59},[39,46340,574],{"class":53},[39,46342,46343],{"class":41,"line":202},[39,46344,122],{"emptyLinePlaceholder":121},[39,46346,46347],{"class":41,"line":207},[39,46348,46349],{"class":128},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[39,46351,46352,46355,46357],{"class":41,"line":212},[39,46353,46354],{"class":53},"file_path",[39,46356,1117],{"class":45},[39,46358,46359],{"class":237},"'data_cat_dog'\n",[39,46361,46362,46365,46367,46370,46372,46375,46377],{"class":41,"line":223},[39,46363,46364],{"class":53},"flower_class",[39,46366,1117],{"class":45},[39,46368,46369],{"class":53},"[cla ",[39,46371,4108],{"class":45},[39,46373,46374],{"class":53}," cla ",[39,46376,27018],{"class":45},[39,46378,46379],{"class":53}," os.listdir(file_path)]\n",[39,46381,46382],{"class":41,"line":228},[39,46383,122],{"emptyLinePlaceholder":121},[39,46385,46386],{"class":41,"line":263},[39,46387,46388],{"class":128},"# 创建训练集train文件夹\n",[39,46390,46391,46394,46397],{"class":41,"line":287},[39,46392,46393],{"class":53},"mkfile(",[39,46395,46396],{"class":237},"'data\u002Ftrain'",[39,46398,574],{"class":53},[39,46400,46401,46403,46405,46407],{"class":41,"line":292},[39,46402,4108],{"class":45},[39,46404,46374],{"class":53},[39,46406,27018],{"class":45},[39,46408,46409],{"class":53}," flower_class:\n",[39,46411,46412,46415,46418,46420],{"class":41,"line":305},[39,46413,46414],{"class":53},"    mkfile(",[39,46416,46417],{"class":237},"'data\u002Ftrain\u002F'",[39,46419,101],{"class":45},[39,46421,46422],{"class":53},"cla)\n",[39,46424,46425],{"class":41,"line":310},[39,46426,122],{"emptyLinePlaceholder":121},[39,46428,46429],{"class":41,"line":321},[39,46430,46431],{"class":128},"# 创建验证集val文件夹\n",[39,46433,46434,46436,46439],{"class":41,"line":713},[39,46435,46393],{"class":53},[39,46437,46438],{"class":237},"'data\u002Ftest'",[39,46440,574],{"class":53},[39,46442,46443,46445,46447,46449],{"class":41,"line":718},[39,46444,4108],{"class":45},[39,46446,46374],{"class":53},[39,46448,27018],{"class":45},[39,46450,46409],{"class":53},[39,46452,46453,46455,46458,46460],{"class":41,"line":723},[39,46454,46414],{"class":53},[39,46456,46457],{"class":237},"'data\u002Ftest\u002F'",[39,46459,101],{"class":45},[39,46461,46422],{"class":53},[39,46463,46464],{"class":41,"line":729},[39,46465,122],{"emptyLinePlaceholder":121},[39,46467,46468],{"class":41,"line":735},[39,46469,46470],{"class":128},"# 划分比例，训练集：测试集=9：1\n",[39,46472,46473,46476,46478],{"class":41,"line":741},[39,46474,46475],{"class":53},"split_rate",[39,46477,1117],{"class":45},[39,46479,46480],{"class":74},"0.1\n",[39,46482,46483],{"class":41,"line":747},[39,46484,122],{"emptyLinePlaceholder":121},[39,46486,46487],{"class":41,"line":753},[39,46488,46489],{"class":128},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[39,46491,46492],{"class":41,"line":758},[39,46493,46494],{"class":128},"# cla_path：当前类别的原始图片路径\n",[39,46496,46497],{"class":41,"line":763},[39,46498,46499],{"class":128},"# images：当前类别下所有图片的文件名列表\n",[39,46501,46502],{"class":41,"line":772},[39,46503,46504],{"class":128},"# num：该类别图片总数\n",[39,46506,46507],{"class":41,"line":777},[39,46508,46509],{"class":128},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[39,46511,46512],{"class":41,"line":785},[39,46513,122],{"emptyLinePlaceholder":121},[39,46515,46516,46518,46520,46522],{"class":41,"line":796},[39,46517,4108],{"class":45},[39,46519,46374],{"class":53},[39,46521,27018],{"class":45},[39,46523,46409],{"class":53},[39,46525,46526,46529,46531,46534,46536,46539,46542,46544,46546,46548],{"class":41,"line":808},[39,46527,46528],{"class":53},"    cla_path ",[39,46530,1117],{"class":45},[39,46532,46533],{"class":53}," file_path ",[39,46535,101],{"class":45},[39,46537,46538],{"class":237}," '\u002F'",[39,46540,46541],{"class":45}," +",[39,46543,46374],{"class":53},[39,46545,101],{"class":45},[39,46547,46538],{"class":237},[39,46549,46550],{"class":128},"  # 某一类别的子目录\n",[39,46552,46553,46556,46558,46561],{"class":41,"line":823},[39,46554,46555],{"class":53},"    images ",[39,46557,1117],{"class":45},[39,46559,46560],{"class":53}," os.listdir(cla_path)  ",[39,46562,46563],{"class":128},"# iamges 列表存储了该目录下所有图像的名称\n",[39,46565,46566,46569,46571,46573],{"class":41,"line":839},[39,46567,46568],{"class":53},"    num ",[39,46570,1117],{"class":45},[39,46572,8405],{"class":74},[39,46574,46575],{"class":53},"(images)\n",[39,46577,46578,46581,46583,46586,46588,46590,46592,46595,46597,46600],{"class":41,"line":845},[39,46579,46580],{"class":53},"    eval_index ",[39,46582,1117],{"class":45},[39,46584,46585],{"class":53}," random.sample(images, ",[39,46587,1754],{"class":59},[39,46589,1117],{"class":45},[39,46591,46],{"class":74},[39,46593,46594],{"class":53},"(num ",[39,46596,1717],{"class":45},[39,46598,46599],{"class":53}," split_rate))  ",[39,46601,46602],{"class":128},"# 从images列表中随机抽取 k 个图像名称\n",[39,46604,46605],{"class":41,"line":856},[39,46606,46607],{"class":128},"    # 遍历该类别下的所有图片\n",[39,46609,46610],{"class":41,"line":861},[39,46611,46612],{"class":128},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[39,46614,46615,46617,46620,46622,46624],{"class":41,"line":870},[39,46616,4284],{"class":45},[39,46618,46619],{"class":53}," index, image ",[39,46621,27018],{"class":45},[39,46623,32581],{"class":74},[39,46625,46626],{"class":53},"(images):\n",[39,46628,46629],{"class":41,"line":9084},[39,46630,46631],{"class":128},"        # eval_index 中保存验证集val的图像名称\n",[39,46633,46634,46636,46639,46641],{"class":41,"line":9090},[39,46635,3590],{"class":45},[39,46637,46638],{"class":53}," image ",[39,46640,27018],{"class":45},[39,46642,46643],{"class":53}," eval_index:\n",[39,46645,46646,46649,46651,46654,46656],{"class":41,"line":9102},[39,46647,46648],{"class":53},"            image_path ",[39,46650,1117],{"class":45},[39,46652,46653],{"class":53}," cla_path ",[39,46655,101],{"class":45},[39,46657,46658],{"class":53}," image\n",[39,46660,46661,46664,46666,46669,46671],{"class":41,"line":9114},[39,46662,46663],{"class":53},"            new_path ",[39,46665,1117],{"class":45},[39,46667,46668],{"class":237}," 'data\u002Ftest\u002F'",[39,46670,46541],{"class":45},[39,46672,46673],{"class":53}," cla\n",[39,46675,46676,46679],{"class":41,"line":9126},[39,46677,46678],{"class":53},"            copy(image_path, new_path)  ",[39,46680,46681],{"class":128},"# 将选中的图像复制到新路径\n",[39,46683,46684],{"class":41,"line":10784},[39,46685,122],{"emptyLinePlaceholder":121},[39,46687,46688],{"class":41,"line":10809},[39,46689,46690],{"class":128},"        # 其余的图像保存在训练集train中\n",[39,46692,46693,46695],{"class":41,"line":10832},[39,46694,3627],{"class":45},[39,46696,4822],{"class":53},[39,46698,46699,46701,46703,46705,46707],{"class":41,"line":10856},[39,46700,46648],{"class":53},[39,46702,1117],{"class":45},[39,46704,46653],{"class":53},[39,46706,101],{"class":45},[39,46708,46658],{"class":53},[39,46710,46711,46713,46715,46718,46720],{"class":41,"line":10861},[39,46712,46663],{"class":53},[39,46714,1117],{"class":45},[39,46716,46717],{"class":237}," 'data\u002Ftrain\u002F'",[39,46719,46541],{"class":45},[39,46721,46673],{"class":53},[39,46723,46724],{"class":41,"line":10866},[39,46725,46726],{"class":53},"            copy(image_path, new_path)\n",[39,46728,46729],{"class":41,"line":10871},[39,46730,46731],{"class":128},"            # 打印进度条信息\n",[39,46733,46734],{"class":41,"line":10880},[39,46735,46736],{"class":128},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[39,46738,46739,46741,46743,46745,46748,46750,46752,46755,46757,46759,46761,46764,46767,46769,46771,46774,46777,46779,46781,46784],{"class":41,"line":10885},[39,46740,33426],{"class":74},[39,46742,54],{"class":53},[39,46744,1516],{"class":237},[39,46746,46747],{"class":74},"\\r",[39,46749,2150],{"class":237},[39,46751,33434],{"class":74},[39,46753,46754],{"class":237},"] processing [",[39,46756,33434],{"class":74},[39,46758,1845],{"class":237},[39,46760,33434],{"class":74},[39,46762,46763],{"class":237},"]\"",[39,46765,46766],{"class":53},".format(cla, index ",[39,46768,101],{"class":45},[39,46770,26093],{"class":74},[39,46772,46773],{"class":53},", num), ",[39,46775,46776],{"class":59},"end",[39,46778,1117],{"class":45},[39,46780,8726],{"class":237},[39,46782,46783],{"class":53},")  ",[39,46785,46786],{"class":128},"# processing bar\n",[39,46788,46789,46791],{"class":41,"line":10891},[39,46790,32274],{"class":74},[39,46792,537],{"class":53},[39,46794,46795],{"class":41,"line":10912},[39,46796,122],{"emptyLinePlaceholder":121},[39,46798,46799,46801,46803,46806],{"class":41,"line":10918},[39,46800,31390],{"class":74},[39,46802,54],{"class":53},[39,46804,46805],{"class":237},"\"processing done!\"",[39,46807,574],{"class":53},[19,46809,46810],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22971,46812,46814],{"id":46813},"_242模型代码","2.4.2.模型代码",[19,46816,46817],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[30,46819,46821],{"className":31353,"code":46820,"language":31355,"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",[26,46822,46823,46829,46839,46849,46853,46869,46877,46891,46901,46905,46935,46939,46973,47019,47023,47057,47103,47107,47111,47145,47175,47179,47187,47201,47223,47245,47263,47267,47281,47285,47289,47305,47309,47317,47331,47341,47385,47389,47417,47421,47431,47459,47463,47499,47503,47531,47535,47545,47577,47609,47637,47641,47651,47683,47715,47747,47779,47811,47839,47843,47853,47885,47917,47929,47933,47945,47949,47953,47965,47973,47993,47997,48001,48005,48009,48013,48017,48031,48039,48047,48059,48073,48081,48085,48093,48103,48113,48123,48133,48143,48149,48153,48157,48169,48189,48197],{"__ignoreMap":35},[39,46824,46825,46827],{"class":41,"line":42},[39,46826,31367],{"class":45},[39,46828,31370],{"class":53},[39,46830,46831,46833,46835,46837],{"class":41,"line":92},[39,46832,31712],{"class":45},[39,46834,31715],{"class":53},[39,46836,31367],{"class":45},[39,46838,31720],{"class":53},[39,46840,46841,46843,46845,46847],{"class":41,"line":112},[39,46842,31712],{"class":45},[39,46844,31732],{"class":53},[39,46846,31367],{"class":45},[39,46848,31737],{"class":53},[39,46850,46851],{"class":41,"line":118},[39,46852,122],{"emptyLinePlaceholder":121},[39,46854,46855,46857,46859,46861,46863,46865,46867],{"class":41,"line":125},[39,46856,15667],{"class":45},[39,46858,42468],{"class":49},[39,46860,54],{"class":53},[39,46862,31753],{"class":49},[39,46864,1819],{"class":53},[39,46866,31758],{"class":49},[39,46868,31761],{"class":53},[39,46870,46871,46873,46875],{"class":41,"line":132},[39,46872,31776],{"class":45},[39,46874,31779],{"class":74},[39,46876,42487],{"class":53},[39,46878,46879,46881,46883,46885,46887,46889],{"class":41,"line":138},[39,46880,31792],{"class":74},[39,46882,42494],{"class":53},[39,46884,31798],{"class":74},[39,46886,31801],{"class":53},[39,46888,31804],{"class":74},[39,46890,537],{"class":53},[39,46892,46893,46895,46897,46899],{"class":41,"line":169},[39,46894,31820],{"class":74},[39,46896,35746],{"class":53},[39,46898,1117],{"class":45},[39,46900,35751],{"class":53},[39,46902,46903],{"class":41,"line":190},[39,46904,42517],{"class":128},[39,46906,46907,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933],{"class":41,"line":202},[39,46908,31820],{"class":74},[39,46910,42524],{"class":53},[39,46912,1117],{"class":45},[39,46914,31828],{"class":53},[39,46916,31831],{"class":59},[39,46918,1117],{"class":45},[39,46920,42535],{"class":53},[39,46922,31840],{"class":59},[39,46924,1117],{"class":45},[39,46926,42542],{"class":53},[39,46928,31849],{"class":59},[39,46930,1117],{"class":45},[39,46932,1483],{"class":74},[39,46934,574],{"class":53},[39,46936,46937],{"class":41,"line":207},[39,46938,42555],{"class":128},[39,46940,46941,46943,46945,46947,46949,46951,46953,46955,46957,46959,46961,46963,46965,46967,46969,46971],{"class":41,"line":212},[39,46942,31820],{"class":74},[39,46944,42562],{"class":53},[39,46946,1117],{"class":45},[39,46948,31828],{"class":53},[39,46950,31831],{"class":59},[39,46952,1117],{"class":45},[39,46954,42535],{"class":53},[39,46956,31840],{"class":59},[39,46958,1117],{"class":45},[39,46960,42579],{"class":53},[39,46962,1457],{"class":74},[39,46964,42584],{"class":53},[39,46966,31849],{"class":59},[39,46968,1117],{"class":45},[39,46970,1483],{"class":74},[39,46972,574],{"class":53},[39,46974,46975,46977,46979,46981,46983,46985,46987,46989,46991,46993,46995,46997,46999,47001,47003,47005,47007,47009,47011,47013,47015,47017],{"class":41,"line":223},[39,46976,31820],{"class":74},[39,46978,42599],{"class":53},[39,46980,1117],{"class":45},[39,46982,31828],{"class":53},[39,46984,31831],{"class":59},[39,46986,1117],{"class":45},[39,46988,42579],{"class":53},[39,46990,1457],{"class":74},[39,46992,42584],{"class":53},[39,46994,31840],{"class":59},[39,46996,1117],{"class":45},[39,46998,42579],{"class":53},[39,47000,1483],{"class":74},[39,47002,42584],{"class":53},[39,47004,31849],{"class":59},[39,47006,1117],{"class":45},[39,47008,1339],{"class":74},[39,47010,426],{"class":53},[39,47012,31858],{"class":59},[39,47014,1117],{"class":45},[39,47016,1483],{"class":74},[39,47018,574],{"class":53},[39,47020,47021],{"class":41,"line":228},[39,47022,42644],{"class":128},[39,47024,47025,47027,47029,47031,47033,47035,47037,47039,47041,47043,47045,47047,47049,47051,47053,47055],{"class":41,"line":263},[39,47026,31820],{"class":74},[39,47028,42651],{"class":53},[39,47030,1117],{"class":45},[39,47032,31828],{"class":53},[39,47034,31831],{"class":59},[39,47036,1117],{"class":45},[39,47038,42535],{"class":53},[39,47040,31840],{"class":59},[39,47042,1117],{"class":45},[39,47044,42668],{"class":53},[39,47046,1457],{"class":74},[39,47048,42584],{"class":53},[39,47050,31849],{"class":59},[39,47052,1117],{"class":45},[39,47054,1483],{"class":74},[39,47056,574],{"class":53},[39,47058,47059,47061,47063,47065,47067,47069,47071,47073,47075,47077,47079,47081,47083,47085,47087,47089,47091,47093,47095,47097,47099,47101],{"class":41,"line":287},[39,47060,31820],{"class":74},[39,47062,42687],{"class":53},[39,47064,1117],{"class":45},[39,47066,31828],{"class":53},[39,47068,31831],{"class":59},[39,47070,1117],{"class":45},[39,47072,42668],{"class":53},[39,47074,1457],{"class":74},[39,47076,42584],{"class":53},[39,47078,31840],{"class":59},[39,47080,1117],{"class":45},[39,47082,42668],{"class":53},[39,47084,1483],{"class":74},[39,47086,42584],{"class":53},[39,47088,31849],{"class":59},[39,47090,1117],{"class":45},[39,47092,1583],{"class":74},[39,47094,426],{"class":53},[39,47096,31858],{"class":59},[39,47098,1117],{"class":45},[39,47100,1345],{"class":74},[39,47102,574],{"class":53},[39,47104,47105],{"class":41,"line":292},[39,47106,42732],{"class":128},[39,47108,47109],{"class":41,"line":305},[39,47110,42737],{"class":128},[39,47112,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133,47135,47137,47139,47141,47143],{"class":41,"line":310},[39,47114,31820],{"class":74},[39,47116,42744],{"class":53},[39,47118,1117],{"class":45},[39,47120,35804],{"class":53},[39,47122,31849],{"class":59},[39,47124,1117],{"class":45},[39,47126,1339],{"class":74},[39,47128,426],{"class":53},[39,47130,31904],{"class":59},[39,47132,1117],{"class":45},[39,47134,1483],{"class":74},[39,47136,426],{"class":53},[39,47138,31858],{"class":59},[39,47140,1117],{"class":45},[39,47142,1483],{"class":74},[39,47144,574],{"class":53},[39,47146,47147,47149,47151,47153,47155,47157,47159,47161,47163,47165,47167,47169,47171,47173],{"class":41,"line":321},[39,47148,31820],{"class":74},[39,47150,42779],{"class":53},[39,47152,1117],{"class":45},[39,47154,31828],{"class":53},[39,47156,31831],{"class":59},[39,47158,1117],{"class":45},[39,47160,42535],{"class":53},[39,47162,31840],{"class":59},[39,47164,1117],{"class":45},[39,47166,42796],{"class":53},[39,47168,31849],{"class":59},[39,47170,1117],{"class":45},[39,47172,1483],{"class":74},[39,47174,574],{"class":53},[39,47176,47177],{"class":41,"line":713},[39,47178,122],{"emptyLinePlaceholder":121},[39,47180,47181,47183,47185],{"class":41,"line":718},[39,47182,31776],{"class":45},[39,47184,32068],{"class":49},[39,47186,32071],{"class":53},[39,47188,47189,47191,47193,47195,47197,47199],{"class":41,"line":723},[39,47190,42821],{"class":53},[39,47192,1117],{"class":45},[39,47194,31798],{"class":74},[39,47196,36159],{"class":53},[39,47198,31798],{"class":74},[39,47200,42832],{"class":53},[39,47202,47203,47205,47207,47209,47211,47213,47215,47217,47219,47221],{"class":41,"line":729},[39,47204,8159],{"class":53},[39,47206,1117],{"class":45},[39,47208,31798],{"class":74},[39,47210,36159],{"class":53},[39,47212,31798],{"class":74},[39,47214,42847],{"class":53},[39,47216,31798],{"class":74},[39,47218,36159],{"class":53},[39,47220,31798],{"class":74},[39,47222,42856],{"class":53},[39,47224,47225,47227,47229,47231,47233,47235,47237,47239,47241,47243],{"class":41,"line":735},[39,47226,42861],{"class":53},[39,47228,1117],{"class":45},[39,47230,31798],{"class":74},[39,47232,36159],{"class":53},[39,47234,31798],{"class":74},[39,47236,42872],{"class":53},[39,47238,31798],{"class":74},[39,47240,36159],{"class":53},[39,47242,31798],{"class":74},[39,47244,42881],{"class":53},[39,47246,47247,47249,47251,47253,47255,47257,47259,47261],{"class":41,"line":741},[39,47248,42886],{"class":53},[39,47250,1117],{"class":45},[39,47252,31798],{"class":74},[39,47254,36159],{"class":53},[39,47256,31798],{"class":74},[39,47258,42897],{"class":53},[39,47260,31798],{"class":74},[39,47262,42902],{"class":53},[39,47264,47265],{"class":41,"line":747},[39,47266,42907],{"class":128},[39,47268,47269,47271,47273,47275,47277,47279],{"class":41,"line":753},[39,47270,15725],{"class":45},[39,47272,42914],{"class":53},[39,47274,33660],{"class":59},[39,47276,1117],{"class":45},[39,47278,1483],{"class":74},[39,47280,574],{"class":53},[39,47282,47283],{"class":41,"line":758},[39,47284,122],{"emptyLinePlaceholder":121},[39,47286,47287],{"class":41,"line":763},[39,47288,42935],{"class":128},[39,47290,47291,47293,47295,47297,47299,47301,47303],{"class":41,"line":772},[39,47292,15667],{"class":45},[39,47294,42942],{"class":49},[39,47296,54],{"class":53},[39,47298,31753],{"class":49},[39,47300,1819],{"class":53},[39,47302,31758],{"class":49},[39,47304,31761],{"class":53},[39,47306,47307],{"class":41,"line":777},[39,47308,42957],{"class":128},[39,47310,47311,47313,47315],{"class":41,"line":785},[39,47312,31776],{"class":45},[39,47314,31779],{"class":74},[39,47316,42966],{"class":53},[39,47318,47319,47321,47323,47325,47327,47329],{"class":41,"line":796},[39,47320,31792],{"class":74},[39,47322,42973],{"class":53},[39,47324,31798],{"class":74},[39,47326,31801],{"class":53},[39,47328,31804],{"class":74},[39,47330,537],{"class":53},[39,47332,47333,47335,47337,47339],{"class":41,"line":808},[39,47334,31820],{"class":74},[39,47336,42988],{"class":53},[39,47338,1117],{"class":45},[39,47340,38984],{"class":53},[39,47342,47343,47345,47347,47349,47351,47353,47355,47357,47359,47361,47363,47365,47367,47369,47371,47373,47375,47377,47379,47381,47383],{"class":41,"line":823},[39,47344,38989],{"class":53},[39,47346,31831],{"class":59},[39,47348,1117],{"class":45},[39,47350,1339],{"class":74},[39,47352,426],{"class":53},[39,47354,31840],{"class":59},[39,47356,1117],{"class":45},[39,47358,1469],{"class":74},[39,47360,426],{"class":53},[39,47362,31849],{"class":59},[39,47364,1117],{"class":45},[39,47366,1633],{"class":74},[39,47368,426],{"class":53},[39,47370,31904],{"class":59},[39,47372,1117],{"class":45},[39,47374,1345],{"class":74},[39,47376,426],{"class":53},[39,47378,31858],{"class":59},[39,47380,1117],{"class":45},[39,47382,1339],{"class":74},[39,47384,39022],{"class":53},[39,47386,47387],{"class":41,"line":839},[39,47388,39027],{"class":53},[39,47390,47391,47393,47395,47397,47399,47401,47403,47405,47407,47409,47411,47413,47415],{"class":41,"line":845},[39,47392,39072],{"class":53},[39,47394,31849],{"class":59},[39,47396,1117],{"class":45},[39,47398,1339],{"class":74},[39,47400,426],{"class":53},[39,47402,31904],{"class":59},[39,47404,1117],{"class":45},[39,47406,1345],{"class":74},[39,47408,426],{"class":53},[39,47410,31858],{"class":59},[39,47412,1117],{"class":45},[39,47414,1483],{"class":74},[39,47416,574],{"class":53},[39,47418,47419],{"class":41,"line":856},[39,47420,39101],{"class":53},[39,47422,47423,47425,47427,47429],{"class":41,"line":861},[39,47424,31820],{"class":74},[39,47426,43079],{"class":53},[39,47428,1117],{"class":45},[39,47430,38984],{"class":53},[39,47432,47433,47435,47437,47439,47441,47443,47445,47447,47449,47451,47453,47455,47457],{"class":41,"line":870},[39,47434,38989],{"class":53},[39,47436,31831],{"class":59},[39,47438,1117],{"class":45},[39,47440,1469],{"class":74},[39,47442,426],{"class":53},[39,47444,31840],{"class":59},[39,47446,1117],{"class":45},[39,47448,1469],{"class":74},[39,47450,426],{"class":53},[39,47452,31849],{"class":59},[39,47454,1117],{"class":45},[39,47456,1483],{"class":74},[39,47458,39022],{"class":53},[39,47460,47461],{"class":41,"line":9084},[39,47462,39027],{"class":53},[39,47464,47465,47467,47469,47471,47473,47475,47477,47479,47481,47483,47485,47487,47489,47491,47493,47495,47497],{"class":41,"line":9090},[39,47466,38989],{"class":53},[39,47468,31831],{"class":59},[39,47470,1117],{"class":45},[39,47472,1469],{"class":74},[39,47474,426],{"class":53},[39,47476,31840],{"class":59},[39,47478,1117],{"class":45},[39,47480,43134],{"class":74},[39,47482,426],{"class":53},[39,47484,31849],{"class":59},[39,47486,1117],{"class":45},[39,47488,1339],{"class":74},[39,47490,426],{"class":53},[39,47492,31858],{"class":59},[39,47494,1117],{"class":45},[39,47496,1483],{"class":74},[39,47498,39022],{"class":53},[39,47500,47501],{"class":41,"line":9102},[39,47502,39027],{"class":53},[39,47504,47505,47507,47509,47511,47513,47515,47517,47519,47521,47523,47525,47527,47529],{"class":41,"line":9114},[39,47506,39072],{"class":53},[39,47508,31849],{"class":59},[39,47510,1117],{"class":45},[39,47512,1339],{"class":74},[39,47514,426],{"class":53},[39,47516,31904],{"class":59},[39,47518,1117],{"class":45},[39,47520,1345],{"class":74},[39,47522,426],{"class":53},[39,47524,31858],{"class":59},[39,47526,1117],{"class":45},[39,47528,1483],{"class":74},[39,47530,574],{"class":53},[39,47532,47533],{"class":41,"line":9126},[39,47534,39101],{"class":53},[39,47536,47537,47539,47541,47543],{"class":41,"line":10784},[39,47538,31820],{"class":74},[39,47540,43195],{"class":53},[39,47542,1117],{"class":45},[39,47544,38984],{"class":53},[39,47546,47547,47549,47551,47553,47555,47557,47559,47561,47563,47565,47567,47569,47571,47573,47575],{"class":41,"line":10809},[39,47548,43204],{"class":53},[39,47550,43134],{"class":74},[39,47552,426],{"class":53},[39,47554,1469],{"class":74},[39,47556,43213],{"class":53},[39,47558,1475],{"class":74},[39,47560,426],{"class":53},[39,47562,33045],{"class":74},[39,47564,43222],{"class":53},[39,47566,1862],{"class":74},[39,47568,426],{"class":53},[39,47570,1463],{"class":74},[39,47572,43231],{"class":53},[39,47574,1463],{"class":74},[39,47576,39022],{"class":53},[39,47578,47579,47581,47583,47585,47587,47589,47591,47593,47595,47597,47599,47601,47603,47605,47607],{"class":41,"line":10832},[39,47580,43204],{"class":53},[39,47582,35845],{"class":74},[39,47584,426],{"class":53},[39,47586,33045],{"class":74},[39,47588,43213],{"class":53},[39,47590,33045],{"class":74},[39,47592,426],{"class":53},[39,47594,43134],{"class":74},[39,47596,43222],{"class":53},[39,47598,1463],{"class":74},[39,47600,426],{"class":53},[39,47602,1475],{"class":74},[39,47604,43231],{"class":53},[39,47606,1469],{"class":74},[39,47608,39022],{"class":53},[39,47610,47611,47613,47615,47617,47619,47621,47623,47625,47627,47629,47631,47633,47635],{"class":41,"line":10856},[39,47612,39072],{"class":53},[39,47614,31849],{"class":59},[39,47616,1117],{"class":45},[39,47618,1339],{"class":74},[39,47620,426],{"class":53},[39,47622,31904],{"class":59},[39,47624,1117],{"class":45},[39,47626,1345],{"class":74},[39,47628,426],{"class":53},[39,47630,31858],{"class":59},[39,47632,1117],{"class":45},[39,47634,1483],{"class":74},[39,47636,574],{"class":53},[39,47638,47639],{"class":41,"line":10861},[39,47640,39101],{"class":53},[39,47642,47643,47645,47647,47649],{"class":41,"line":10866},[39,47644,31820],{"class":74},[39,47646,43306],{"class":53},[39,47648,1117],{"class":45},[39,47650,38984],{"class":53},[39,47652,47653,47655,47657,47659,47661,47663,47665,47667,47669,47671,47673,47675,47677,47679,47681],{"class":41,"line":10871},[39,47654,43204],{"class":53},[39,47656,43317],{"class":74},[39,47658,426],{"class":53},[39,47660,43134],{"class":74},[39,47662,43213],{"class":53},[39,47664,1475],{"class":74},[39,47666,426],{"class":53},[39,47668,43330],{"class":74},[39,47670,43222],{"class":53},[39,47672,1862],{"class":74},[39,47674,426],{"class":53},[39,47676,1868],{"class":74},[39,47678,43231],{"class":53},[39,47680,1469],{"class":74},[39,47682,39022],{"class":53},[39,47684,47685,47687,47689,47691,47693,47695,47697,47699,47701,47703,47705,47707,47709,47711,47713],{"class":41,"line":10880},[39,47686,43204],{"class":53},[39,47688,39432],{"class":74},[39,47690,426],{"class":53},[39,47692,22021],{"class":74},[39,47694,43213],{"class":53},[39,47696,1879],{"class":74},[39,47698,426],{"class":53},[39,47700,32476],{"class":74},[39,47702,43222],{"class":53},[39,47704,2060],{"class":74},[39,47706,426],{"class":53},[39,47708,1469],{"class":74},[39,47710,43231],{"class":53},[39,47712,1469],{"class":74},[39,47714,39022],{"class":53},[39,47716,47717,47719,47721,47723,47725,47727,47729,47731,47733,47735,47737,47739,47741,47743,47745],{"class":41,"line":10885},[39,47718,43204],{"class":53},[39,47720,39432],{"class":74},[39,47722,426],{"class":53},[39,47724,33045],{"class":74},[39,47726,43213],{"class":53},[39,47728,33045],{"class":74},[39,47730,426],{"class":53},[39,47732,35845],{"class":74},[39,47734,43222],{"class":53},[39,47736,2060],{"class":74},[39,47738,426],{"class":53},[39,47740,1469],{"class":74},[39,47742,43231],{"class":53},[39,47744,1469],{"class":74},[39,47746,39022],{"class":53},[39,47748,47749,47751,47753,47755,47757,47759,47761,47763,47765,47767,47769,47771,47773,47775,47777],{"class":41,"line":10891},[39,47750,43204],{"class":53},[39,47752,39432],{"class":74},[39,47754,426],{"class":53},[39,47756,1879],{"class":74},[39,47758,43213],{"class":53},[39,47760,33045],{"class":74},[39,47762,426],{"class":53},[39,47764,43427],{"class":74},[39,47766,43222],{"class":53},[39,47768,1463],{"class":74},[39,47770,426],{"class":53},[39,47772,1469],{"class":74},[39,47774,43231],{"class":53},[39,47776,1469],{"class":74},[39,47778,39022],{"class":53},[39,47780,47781,47783,47785,47787,47789,47791,47793,47795,47797,47799,47801,47803,47805,47807,47809],{"class":41,"line":10912},[39,47782,43204],{"class":53},[39,47784,43448],{"class":74},[39,47786,426],{"class":53},[39,47788,35845],{"class":74},[39,47790,43213],{"class":53},[39,47792,22021],{"class":74},[39,47794,426],{"class":53},[39,47796,43461],{"class":74},[39,47798,43222],{"class":53},[39,47800,1463],{"class":74},[39,47802,426],{"class":53},[39,47804,33045],{"class":74},[39,47806,43231],{"class":53},[39,47808,33045],{"class":74},[39,47810,39022],{"class":53},[39,47812,47813,47815,47817,47819,47821,47823,47825,47827,47829,47831,47833,47835,47837],{"class":41,"line":10918},[39,47814,39072],{"class":53},[39,47816,31849],{"class":59},[39,47818,1117],{"class":45},[39,47820,1339],{"class":74},[39,47822,426],{"class":53},[39,47824,31904],{"class":59},[39,47826,1117],{"class":45},[39,47828,1345],{"class":74},[39,47830,426],{"class":53},[39,47832,31858],{"class":59},[39,47834,1117],{"class":45},[39,47836,1483],{"class":74},[39,47838,574],{"class":53},[39,47840,47841],{"class":41,"line":10932},[39,47842,39101],{"class":53},[39,47844,47845,47847,47849,47851],{"class":41,"line":10938},[39,47846,31820],{"class":74},[39,47848,43514],{"class":53},[39,47850,1117],{"class":45},[39,47852,38984],{"class":53},[39,47854,47855,47857,47859,47861,47863,47865,47867,47869,47871,47873,47875,47877,47879,47881,47883],{"class":41,"line":10965},[39,47856,43204],{"class":53},[39,47858,43525],{"class":74},[39,47860,426],{"class":53},[39,47862,35845],{"class":74},[39,47864,43213],{"class":53},[39,47866,22021],{"class":74},[39,47868,426],{"class":53},[39,47870,43461],{"class":74},[39,47872,43222],{"class":53},[39,47874,1463],{"class":74},[39,47876,426],{"class":53},[39,47878,33045],{"class":74},[39,47880,43231],{"class":53},[39,47882,33045],{"class":74},[39,47884,39022],{"class":53},[39,47886,47887,47889,47891,47893,47895,47897,47899,47901,47903,47905,47907,47909,47911,47913,47915],{"class":41,"line":10974},[39,47888,43204],{"class":53},[39,47890,43525],{"class":74},[39,47892,426],{"class":53},[39,47894,35915],{"class":74},[39,47896,43213],{"class":53},[39,47898,43134],{"class":74},[39,47900,426],{"class":53},[39,47902,35915],{"class":74},[39,47904,43222],{"class":53},[39,47906,1868],{"class":74},[39,47908,426],{"class":53},[39,47910,33045],{"class":74},[39,47912,43231],{"class":53},[39,47914,33045],{"class":74},[39,47916,39022],{"class":53},[39,47918,47919,47921,47923,47925,47927],{"class":41,"line":10980},[39,47920,43588],{"class":53},[39,47922,1483],{"class":74},[39,47924,426],{"class":53},[39,47926,1483],{"class":74},[39,47928,43597],{"class":53},[39,47930,47931],{"class":41,"line":10988},[39,47932,39765],{"class":53},[39,47934,47935,47937,47939,47941,47943],{"class":41,"line":10993},[39,47936,39770],{"class":53},[39,47938,43608],{"class":74},[39,47940,426],{"class":53},[39,47942,1345],{"class":74},[39,47944,574],{"class":53},[39,47946,47947],{"class":41,"line":17577},[39,47948,39101],{"class":53},[39,47950,47951],{"class":41,"line":17583},[39,47952,43623],{"class":128},[39,47954,47955,47957,47959,47961,47963],{"class":41,"line":17606},[39,47956,4486],{"class":45},[39,47958,39843],{"class":53},[39,47960,27018],{"class":45},[39,47962,39848],{"class":74},[39,47964,39851],{"class":53},[39,47966,47967,47969,47971],{"class":41,"line":17612},[39,47968,5723],{"class":45},[39,47970,39863],{"class":74},[39,47972,39866],{"class":53},[39,47974,47975,47977,47979,47981,47983,47985,47987,47989,47991],{"class":41,"line":17635},[39,47976,39876],{"class":53},[39,47978,43650],{"class":59},[39,47980,1117],{"class":45},[39,47982,43655],{"class":237},[39,47984,426],{"class":53},[39,47986,39879],{"class":59},[39,47988,1117],{"class":45},[39,47990,39884],{"class":237},[39,47992,574],{"class":53},[39,47994,47995],{"class":41,"line":17649},[39,47996,43670],{"class":128},[39,47998,47999],{"class":41,"line":17669},[39,48000,43675],{"class":128},[39,48002,48003],{"class":41,"line":17675},[39,48004,43680],{"class":128},[39,48006,48007],{"class":41,"line":17686},[39,48008,43685],{"class":128},[39,48010,48011],{"class":41,"line":17709},[39,48012,43690],{"class":128},[39,48014,48015],{"class":41,"line":17731},[39,48016,43695],{"class":128},[39,48018,48019,48021,48023,48025,48027,48029],{"class":41,"line":17736},[39,48020,39896],{"class":45},[39,48022,39899],{"class":53},[39,48024,39902],{"class":45},[39,48026,39905],{"class":45},[39,48028,39908],{"class":74},[39,48030,4822],{"class":53},[39,48032,48033,48035,48037],{"class":41,"line":17742},[39,48034,39920],{"class":53},[39,48036,1457],{"class":74},[39,48038,574],{"class":53},[39,48040,48041,48043,48045],{"class":41,"line":17756},[39,48042,43722],{"class":45},[39,48044,39863],{"class":74},[39,48046,39939],{"class":53},[39,48048,48049,48051,48053,48055,48057],{"class":41,"line":17769},[39,48050,43731],{"class":53},[39,48052,1457],{"class":74},[39,48054,426],{"class":53},[39,48056,39961],{"class":74},[39,48058,574],{"class":53},[39,48060,48061,48063,48065,48067,48069,48071],{"class":41,"line":17774},[39,48062,43744],{"class":45},[39,48064,39899],{"class":53},[39,48066,39902],{"class":45},[39,48068,39905],{"class":45},[39,48070,39908],{"class":74},[39,48072,4822],{"class":53},[39,48074,48075,48077,48079],{"class":41,"line":17788},[39,48076,43759],{"class":53},[39,48078,1457],{"class":74},[39,48080,574],{"class":53},[39,48082,48083],{"class":41,"line":17793},[39,48084,36140],{"class":128},[39,48086,48087,48089,48091],{"class":41,"line":17799},[39,48088,31776],{"class":45},[39,48090,32068],{"class":49},[39,48092,32071],{"class":53},[39,48094,48095,48097,48099,48101],{"class":41,"line":17804},[39,48096,32076],{"class":53},[39,48098,1117],{"class":45},[39,48100,31798],{"class":74},[39,48102,43786],{"class":53},[39,48104,48105,48107,48109,48111],{"class":41,"line":17818},[39,48106,32076],{"class":53},[39,48108,1117],{"class":45},[39,48110,31798],{"class":74},[39,48112,43797],{"class":53},[39,48114,48115,48117,48119,48121],{"class":41,"line":17823},[39,48116,32076],{"class":53},[39,48118,1117],{"class":45},[39,48120,31798],{"class":74},[39,48122,43808],{"class":53},[39,48124,48125,48127,48129,48131],{"class":41,"line":17828},[39,48126,32076],{"class":53},[39,48128,1117],{"class":45},[39,48130,31798],{"class":74},[39,48132,43819],{"class":53},[39,48134,48135,48137,48139,48141],{"class":41,"line":17842},[39,48136,32076],{"class":53},[39,48138,1117],{"class":45},[39,48140,31798],{"class":74},[39,48142,43830],{"class":53},[39,48144,48145,48147],{"class":41,"line":17854},[39,48146,15725],{"class":45},[39,48148,32184],{"class":53},[39,48150,48151],{"class":41,"line":17859},[39,48152,122],{"emptyLinePlaceholder":121},[39,48154,48155],{"class":41,"line":17872},[39,48156,43845],{"class":128},[39,48158,48159,48161,48163,48165,48167],{"class":41,"line":17877},[39,48160,2654],{"class":45},[39,48162,32195],{"class":74},[39,48164,4032],{"class":45},[39,48166,32200],{"class":237},[39,48168,4822],{"class":53},[39,48170,48171,48173,48175,48177,48179,48181,48183,48185,48187],{"class":41,"line":17882},[39,48172,32212],{"class":53},[39,48174,1117],{"class":45},[39,48176,31426],{"class":53},[39,48178,32219],{"class":237},[39,48180,2814],{"class":45},[39,48182,32224],{"class":53},[39,48184,2811],{"class":45},[39,48186,31451],{"class":237},[39,48188,574],{"class":53},[39,48190,48191,48193,48195],{"class":41,"line":17887},[39,48192,32264],{"class":53},[39,48194,1117],{"class":45},[39,48196,43886],{"class":53},[39,48198,48199,48201,48203,48205,48207,48209,48211,48213],{"class":41,"line":17900},[39,48200,32274],{"class":74},[39,48202,32277],{"class":53},[39,48204,1483],{"class":74},[39,48206,426],{"class":53},[39,48208,32476],{"class":74},[39,48210,426],{"class":53},[39,48212,32476],{"class":74},[39,48214,32290],{"class":53},[22971,48216,48218],{"id":48217},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,48220,48221],{},"计算图片的均值与方差，用于训练中归一化处理操作",[30,48223,48225],{"className":31353,"code":48224,"language":31355,"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",[26,48226,48227,48232,48245,48250,48256,48261,48271,48275,48280,48290,48294,48299,48309,48326,48330,48335,48347,48359,48390,48399,48409,48419,48423,48428,48443,48447,48452,48457,48462,48472,48477,48502,48506,48511,48526,48530,48543,48547,48552,48557,48562,48567,48572,48582,48592,48615,48623,48631,48639,48643,48655,48659,48664,48668,48672,48679,48699,48723,48730,48744,48749,48754,48758,48772,48776,48788],{"__ignoreMap":35},[39,48228,48229],{"class":41,"line":42},[39,48230,48231],{"class":128},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[39,48233,48234,48236,48239,48242],{"class":41,"line":92},[39,48235,31712],{"class":45},[39,48237,48238],{"class":74}," PIL",[39,48240,48241],{"class":45}," import",[39,48243,48244],{"class":53}," Image\n",[39,48246,48247],{"class":41,"line":112},[39,48248,48249],{"class":128},"# os 用来处理文件夹和文件路径\n",[39,48251,48252,48254],{"class":41,"line":118},[39,48253,31367],{"class":45},[39,48255,46280],{"class":53},[39,48257,48258],{"class":41,"line":125},[39,48259,48260],{"class":128},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[39,48262,48263,48265,48267,48269],{"class":41,"line":132},[39,48264,31367],{"class":45},[39,48266,32355],{"class":53},[39,48268,32358],{"class":45},[39,48270,32361],{"class":53},[39,48272,48273],{"class":41,"line":138},[39,48274,122],{"emptyLinePlaceholder":121},[39,48276,48277],{"class":41,"line":169},[39,48278,48279],{"class":128},"# 文件夹路径，包含所有图片文件\n",[39,48281,48282,48285,48287],{"class":41,"line":190},[39,48283,48284],{"class":53},"folder_path ",[39,48286,1117],{"class":45},[39,48288,48289],{"class":237}," 'data_cat_dog'\n",[39,48291,48292],{"class":41,"line":202},[39,48293,122],{"emptyLinePlaceholder":121},[39,48295,48296],{"class":41,"line":207},[39,48297,48298],{"class":128},"# 初始化累积变量\n",[39,48300,48301,48304,48306],{"class":41,"line":212},[39,48302,48303],{"class":53},"total_pixels ",[39,48305,1117],{"class":45},[39,48307,48308],{"class":74}," 0\n",[39,48310,48311,48314,48316,48319,48321,48323],{"class":41,"line":223},[39,48312,48313],{"class":53},"sum_normalized_pixel_values ",[39,48315,1117],{"class":45},[39,48317,48318],{"class":53}," np.zeros(",[39,48320,1339],{"class":74},[39,48322,46783],{"class":53},[39,48324,48325],{"class":128},"# 如果是RGB图像，需要三个通道的均值和方差\n",[39,48327,48328],{"class":41,"line":228},[39,48329,122],{"emptyLinePlaceholder":121},[39,48331,48332],{"class":41,"line":263},[39,48333,48334],{"class":128},"# 遍历文件夹中的图片文件\n",[39,48336,48337,48339,48342,48344],{"class":41,"line":287},[39,48338,4108],{"class":45},[39,48340,48341],{"class":53}," root, dirs, files ",[39,48343,27018],{"class":45},[39,48345,48346],{"class":53}," os.walk(folder_path):\n",[39,48348,48349,48351,48354,48356],{"class":41,"line":292},[39,48350,4284],{"class":45},[39,48352,48353],{"class":53}," filename ",[39,48355,27018],{"class":45},[39,48357,48358],{"class":53}," files:\n",[39,48360,48361,48363,48366,48369,48371,48374,48376,48379,48381,48384,48387],{"class":41,"line":305},[39,48362,3590],{"class":45},[39,48364,48365],{"class":53}," filename.endswith((",[39,48367,48368],{"class":237},"'.jpg'",[39,48370,63],{"class":53},[39,48372,48373],{"class":237},"'.jpeg'",[39,48375,63],{"class":53},[39,48377,48378],{"class":237},"'.png'",[39,48380,63],{"class":53},[39,48382,48383],{"class":237},"'.bmp'",[39,48385,48386],{"class":53},")):  ",[39,48388,48389],{"class":128},"# 可根据实际情况添加其他格式\n",[39,48391,48392,48394,48396],{"class":41,"line":310},[39,48393,46648],{"class":53},[39,48395,1117],{"class":45},[39,48397,48398],{"class":53}," os.path.join(root, filename)\n",[39,48400,48401,48404,48406],{"class":41,"line":321},[39,48402,48403],{"class":53},"            image ",[39,48405,1117],{"class":45},[39,48407,48408],{"class":53}," Image.open(image_path)\n",[39,48410,48411,48414,48416],{"class":41,"line":713},[39,48412,48413],{"class":53},"            image_array ",[39,48415,1117],{"class":45},[39,48417,48418],{"class":53}," np.array(image)\n",[39,48420,48421],{"class":41,"line":718},[39,48422,122],{"emptyLinePlaceholder":121},[39,48424,48425],{"class":41,"line":723},[39,48426,48427],{"class":128},"            # 归一化像素值到0-1之间\n",[39,48429,48430,48433,48435,48438,48440],{"class":41,"line":729},[39,48431,48432],{"class":53},"            normalized_image_array ",[39,48434,1117],{"class":45},[39,48436,48437],{"class":53}," image_array ",[39,48439,1845],{"class":45},[39,48441,48442],{"class":74}," 255.0\n",[39,48444,48445],{"class":41,"line":735},[39,48446,122],{"emptyLinePlaceholder":121},[39,48448,48449],{"class":41,"line":741},[39,48450,48451],{"class":128},"            # print(image_path)\n",[39,48453,48454],{"class":41,"line":747},[39,48455,48456],{"class":128},"            # print(normalized_image_array.shape)\n",[39,48458,48459],{"class":41,"line":753},[39,48460,48461],{"class":128},"            # 累积归一化后的像素值和像素数量\n",[39,48463,48464,48467,48469],{"class":41,"line":758},[39,48465,48466],{"class":53},"            total_pixels ",[39,48468,10545],{"class":45},[39,48470,48471],{"class":53}," normalized_image_array.size\n",[39,48473,48474],{"class":41,"line":763},[39,48475,48476],{"class":128},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[39,48478,48479,48482,48484,48487,48490,48492,48494,48496,48498,48500],{"class":41,"line":772},[39,48480,48481],{"class":53},"            sum_normalized_pixel_values ",[39,48483,10545],{"class":45},[39,48485,48486],{"class":53}," np.sum(normalized_image_array, ",[39,48488,48489],{"class":59},"axis",[39,48491,1117],{"class":45},[39,48493,54],{"class":53},[39,48495,1457],{"class":74},[39,48497,63],{"class":53},[39,48499,1483],{"class":74},[39,48501,31472],{"class":53},[39,48503,48504],{"class":41,"line":777},[39,48505,122],{"emptyLinePlaceholder":121},[39,48507,48508],{"class":41,"line":785},[39,48509,48510],{"class":128},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[39,48512,48513,48516,48518,48521,48523],{"class":41,"line":796},[39,48514,48515],{"class":53},"mean ",[39,48517,1117],{"class":45},[39,48519,48520],{"class":53}," sum_normalized_pixel_values ",[39,48522,1845],{"class":45},[39,48524,48525],{"class":53}," total_pixels\n",[39,48527,48528],{"class":41,"line":808},[39,48529,122],{"emptyLinePlaceholder":121},[39,48531,48532,48535,48537,48539,48541],{"class":41,"line":823},[39,48533,48534],{"class":53},"sum_squared_diff ",[39,48536,1117],{"class":45},[39,48538,48318],{"class":53},[39,48540,1339],{"class":74},[39,48542,574],{"class":53},[39,48544,48545],{"class":41,"line":839},[39,48546,122],{"emptyLinePlaceholder":121},[39,48548,48549],{"class":41,"line":845},[39,48550,48551],{"class":128},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[39,48553,48554],{"class":41,"line":856},[39,48555,48556],{"class":128},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[39,48558,48559],{"class":41,"line":861},[39,48560,48561],{"class":128},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[39,48563,48564],{"class":41,"line":870},[39,48565,48566],{"class":128},"# Image.open(image_path)：打开图片\n",[39,48568,48569],{"class":41,"line":9084},[39,48570,48571],{"class":128},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[39,48573,48574,48576,48578,48580],{"class":41,"line":9090},[39,48575,4108],{"class":45},[39,48577,48341],{"class":53},[39,48579,27018],{"class":45},[39,48581,48346],{"class":53},[39,48583,48584,48586,48588,48590],{"class":41,"line":9102},[39,48585,4284],{"class":45},[39,48587,48353],{"class":53},[39,48589,27018],{"class":45},[39,48591,48358],{"class":53},[39,48593,48594,48596,48598,48600,48602,48604,48606,48608,48610,48612],{"class":41,"line":9114},[39,48595,3590],{"class":45},[39,48597,48365],{"class":53},[39,48599,48368],{"class":237},[39,48601,63],{"class":53},[39,48603,48373],{"class":237},[39,48605,63],{"class":53},[39,48607,48378],{"class":237},[39,48609,63],{"class":53},[39,48611,48383],{"class":237},[39,48613,48614],{"class":53},")):\n",[39,48616,48617,48619,48621],{"class":41,"line":9126},[39,48618,46648],{"class":53},[39,48620,1117],{"class":45},[39,48622,48398],{"class":53},[39,48624,48625,48627,48629],{"class":41,"line":10784},[39,48626,48403],{"class":53},[39,48628,1117],{"class":45},[39,48630,48408],{"class":53},[39,48632,48633,48635,48637],{"class":41,"line":10809},[39,48634,48413],{"class":53},[39,48636,1117],{"class":45},[39,48638,48418],{"class":53},[39,48640,48641],{"class":41,"line":10832},[39,48642,48427],{"class":128},[39,48644,48645,48647,48649,48651,48653],{"class":41,"line":10856},[39,48646,48432],{"class":53},[39,48648,1117],{"class":45},[39,48650,48437],{"class":53},[39,48652,1845],{"class":45},[39,48654,48442],{"class":74},[39,48656,48657],{"class":41,"line":10861},[39,48658,48456],{"class":128},[39,48660,48661],{"class":41,"line":10866},[39,48662,48663],{"class":128},"            # print(mean.shape)\n",[39,48665,48666],{"class":41,"line":10871},[39,48667,48451],{"class":128},[39,48669,48670],{"class":41,"line":10880},[39,48671,122],{"emptyLinePlaceholder":121},[39,48673,48674,48677],{"class":41,"line":10885},[39,48675,48676],{"class":45},"            try",[39,48678,4822],{"class":53},[39,48680,48681,48684,48686,48689,48691,48694,48696],{"class":41,"line":10891},[39,48682,48683],{"class":53},"                diff ",[39,48685,1117],{"class":45},[39,48687,48688],{"class":53}," (normalized_image_array ",[39,48690,1793],{"class":45},[39,48692,48693],{"class":53}," mean) ",[39,48695,11726],{"class":45},[39,48697,48698],{"class":74}," 2\n",[39,48700,48701,48704,48706,48709,48711,48713,48715,48717,48719,48721],{"class":41,"line":10912},[39,48702,48703],{"class":53},"                sum_squared_diff ",[39,48705,10545],{"class":45},[39,48707,48708],{"class":53}," np.sum(diff, ",[39,48710,48489],{"class":59},[39,48712,1117],{"class":45},[39,48714,54],{"class":53},[39,48716,1457],{"class":74},[39,48718,63],{"class":53},[39,48720,1483],{"class":74},[39,48722,31472],{"class":53},[39,48724,48725,48728],{"class":41,"line":10918},[39,48726,48727],{"class":45},"            except",[39,48729,4822],{"class":53},[39,48731,48732,48735,48737,48739,48742],{"class":41,"line":10932},[39,48733,48734],{"class":74},"                print",[39,48736,54],{"class":53},[39,48738,1321],{"class":45},[39,48740,48741],{"class":237},"\"捕获到自定义异常\"",[39,48743,574],{"class":53},[39,48745,48746],{"class":41,"line":10938},[39,48747,48748],{"class":128},"            # diff = (normalized_image_array - mean) ** 2\n",[39,48750,48751],{"class":41,"line":10965},[39,48752,48753],{"class":128},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[39,48755,48756],{"class":41,"line":10974},[39,48757,122],{"emptyLinePlaceholder":121},[39,48759,48760,48763,48765,48768,48770],{"class":41,"line":10980},[39,48761,48762],{"class":53},"variance ",[39,48764,1117],{"class":45},[39,48766,48767],{"class":53}," sum_squared_diff ",[39,48769,1845],{"class":45},[39,48771,48525],{"class":53},[39,48773,48774],{"class":41,"line":10988},[39,48775,122],{"emptyLinePlaceholder":121},[39,48777,48778,48780,48782,48785],{"class":41,"line":10993},[39,48779,31390],{"class":74},[39,48781,54],{"class":53},[39,48783,48784],{"class":237},"\"Mean:\"",[39,48786,48787],{"class":53},", mean)\n",[39,48789,48790,48792,48794,48797],{"class":41,"line":17577},[39,48791,31390],{"class":74},[39,48793,54],{"class":53},[39,48795,48796],{"class":237},"\"Variance:\"",[39,48798,48799],{"class":53},", variance)\n",[30,48801,48803],{"className":31353,"code":48802,"language":31355,"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",[26,48804,48805,48811,48817,48827,48833,48843,48857,48867,48877,48887,48891,48901,48911,48915,48919,48927,48932,48937,48956,48960,48965,48970,48975,48980,49021,49026,49036,49041,49054,49059,49064,49069,49074,49079,49083,49088,49093,49115,49119,49151,49165,49175,49185,49189,49199,49213,49223,49233,49243,49249,49253,49257,49261,49265,49269,49277,49297,49301,49305,49309,49313,49329,49333,49337,49345,49349,49353,49361,49365,49369,49373,49381,49385,49389,49393,49401,49405,49413,49417,49425,49429,49437,49441,49449,49453,49457,49465,49469,49473,49485,49509,49523,49527,49531,49535,49543,49547,49555,49559,49567,49571,49579,49583,49591,49595,49603,49607,49619,49623,49631,49635,49643,49647,49651,49655,49659,49667,49671,49687,49691,49699,49703,49707,49711,49715,49719,49723,49727,49743,49747,49759,49763,49775,49779,49791,49795,49803,49807,49815,49819,49823,49827,49833,49837,49845,49849,49865,49869,49877,49881,49897,49909,49913,49925,49929,49933,49941,49945,49949,49957,49961,49969,49973,49981,49985,49989,50031,50073,50077,50081,50097,50101,50117,50121,50125,50133,50137,50141,50153,50191,50195,50199,50207,50211,50225,50235,50241,50247,50253,50259,50263,50267,50273,50277,50281,50289,50293,50311,50315,50319,50323,50339,50343,50347,50351,50355,50359,50379,50399,50403,50407,50411,50419,50427,50431,50447,50467,50487,50491,50496,50505,50514,50519,50524,50529,50542,50547,50556,50565,50582],{"__ignoreMap":35},[39,48806,48807,48809],{"class":41,"line":42},[39,48808,31367],{"class":45},[39,48810,32797],{"class":53},[39,48812,48813,48815],{"class":41,"line":92},[39,48814,31367],{"class":45},[39,48816,32804],{"class":53},[39,48818,48819,48821,48823,48825],{"class":41,"line":112},[39,48820,31367],{"class":45},[39,48822,32815],{"class":53},[39,48824,32358],{"class":45},[39,48826,32820],{"class":53},[39,48828,48829,48831],{"class":41,"line":118},[39,48830,31367],{"class":45},[39,48832,31370],{"class":53},[39,48834,48835,48837,48839,48841],{"class":41,"line":125},[39,48836,31712],{"class":45},[39,48838,32390],{"class":53},[39,48840,31367],{"class":45},[39,48842,32837],{"class":53},[39,48844,48845,48847,48849,48851,48854],{"class":41,"line":132},[39,48846,31712],{"class":45},[39,48848,32343],{"class":53},[39,48850,31367],{"class":45},[39,48852,48853],{"class":53}," ImageFolder ",[39,48855,48856],{"class":128},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[39,48858,48859,48861,48863,48865],{"class":41,"line":138},[39,48860,31712],{"class":45},[39,48862,32373],{"class":53},[39,48864,31367],{"class":45},[39,48866,32378],{"class":53},[39,48868,48869,48871,48873,48875],{"class":41,"line":169},[39,48870,31367],{"class":45},[39,48872,32390],{"class":53},[39,48874,32358],{"class":45},[39,48876,32395],{"class":53},[39,48878,48879,48881,48883,48885],{"class":41,"line":190},[39,48880,31367],{"class":45},[39,48882,32407],{"class":53},[39,48884,32358],{"class":45},[39,48886,32412],{"class":53},[39,48888,48889],{"class":41,"line":202},[39,48890,32882],{"class":128},[39,48892,48893,48895,48897,48899],{"class":41,"line":207},[39,48894,31712],{"class":45},[39,48896,32889],{"class":53},[39,48898,31367],{"class":45},[39,48900,44006],{"class":53},[39,48902,48903,48905,48907,48909],{"class":41,"line":212},[39,48904,31712],{"class":45},[39,48906,31715],{"class":53},[39,48908,31367],{"class":45},[39,48910,31720],{"class":53},[39,48912,48913],{"class":41,"line":223},[39,48914,122],{"emptyLinePlaceholder":121},[39,48916,48917],{"class":41,"line":228},[39,48918,32917],{"class":128},[39,48920,48921,48923,48925],{"class":41,"line":263},[39,48922,32922],{"class":45},[39,48924,32925],{"class":49},[39,48926,32928],{"class":53},[39,48928,48929],{"class":41,"line":287},[39,48930,48931],{"class":128},"    # 导入自己的数据集，并进行数据处理\n",[39,48933,48934],{"class":41,"line":292},[39,48935,48936],{"class":128},"    # 定义数据集的路径\n",[39,48938,48939,48942,48944,48946,48948,48950,48954],{"class":41,"line":305},[39,48940,48941],{"class":74},"    ROOT_PATH",[39,48943,1117],{"class":45},[39,48945,1931],{"class":45},[39,48947,1516],{"class":237},[39,48949,1819],{"class":74},[39,48951,48953],{"class":48952},"sA_wV","\u002Fdata\u002Ftrain",[39,48955,26108],{"class":237},[39,48957,48958],{"class":41,"line":310},[39,48959,122],{"emptyLinePlaceholder":121},[39,48961,48962],{"class":41,"line":321},[39,48963,48964],{"class":128},"    # 定义归一化方法\n",[39,48966,48967],{"class":41,"line":713},[39,48968,48969],{"class":128},"    # 这里需要先计算一下数据集的均值和方差\n",[39,48971,48972],{"class":41,"line":718},[39,48973,48974],{"class":128},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[39,48976,48977],{"class":41,"line":723},[39,48978,48979],{"class":128},"    # 第一个参数是均值，第二个参数是方差\n",[39,48981,48982,48985,48987,48990,48993,48995,48998,49000,49003,49006,49009,49011,49014,49016,49019],{"class":41,"line":729},[39,48983,48984],{"class":53},"    normalize",[39,48986,1117],{"class":45},[39,48988,48989],{"class":53},"transforms.Normalize([",[39,48991,48992],{"class":74},"0.162",[39,48994,426],{"class":53},[39,48996,48997],{"class":74},"0.151",[39,48999,426],{"class":53},[39,49001,49002],{"class":74},"0.138",[39,49004,49005],{"class":53},"],[",[39,49007,49008],{"class":74},"0.058",[39,49010,426],{"class":53},[39,49012,49013],{"class":74},"0.052",[39,49015,426],{"class":53},[39,49017,49018],{"class":74},"0.048",[39,49020,5738],{"class":53},[39,49022,49023],{"class":41,"line":735},[39,49024,49025],{"class":128},"    # 定义数据集处理方法变量\n",[39,49027,49028,49031,49033],{"class":41,"line":741},[39,49029,49030],{"class":53},"    train_transform",[39,49032,1117],{"class":45},[39,49034,49035],{"class":53},"transforms.Compose([\n",[39,49037,49038],{"class":41,"line":747},[39,49039,49040],{"class":128},"        # 调整图像大小为224*224\n",[39,49042,49043,49046,49048,49050,49052],{"class":41,"line":753},[39,49044,49045],{"class":53},"        transforms.Resize((",[39,49047,32476],{"class":74},[39,49049,426],{"class":53},[39,49051,32476],{"class":74},[39,49053,43597],{"class":53},[39,49055,49056],{"class":41,"line":758},[39,49057,49058],{"class":128},"        # 将图像转换为张量\n",[39,49060,49061],{"class":41,"line":763},[39,49062,49063],{"class":53},"        transforms.ToTensor(),\n",[39,49065,49066],{"class":41,"line":772},[39,49067,49068],{"class":53},"        normalize])\n",[39,49070,49071],{"class":41,"line":777},[39,49072,49073],{"class":128},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[39,49075,49076],{"class":41,"line":785},[39,49077,49078],{"class":128},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[39,49080,49081],{"class":41,"line":796},[39,49082,122],{"emptyLinePlaceholder":121},[39,49084,49085],{"class":41,"line":808},[39,49086,49087],{"class":128},"    # 加载数据集\n",[39,49089,49090],{"class":41,"line":823},[39,49091,49092],{"class":128},"    # 传入数据集路径与处理方法\n",[39,49094,49095,49097,49099,49102,49105,49107,49110,49112],{"class":41,"line":839},[39,49096,32933],{"class":53},[39,49098,1117],{"class":45},[39,49100,49101],{"class":53},"ImageFolder(",[39,49103,49104],{"class":74},"ROOT_PATH",[39,49106,426],{"class":53},[39,49108,49109],{"class":59},"transform",[39,49111,1117],{"class":45},[39,49113,49114],{"class":53},"train_transform)\n",[39,49116,49117],{"class":41,"line":845},[39,49118,122],{"emptyLinePlaceholder":121},[39,49120,49121,49123,49125,49127,49129,49131,49133,49135,49137,49139,49141,49143,49145,49147,49149],{"class":41,"line":856},[39,49122,32985],{"class":53},[39,49124,1117],{"class":45},[39,49126,32990],{"class":53},[39,49128,32993],{"class":74},[39,49130,54],{"class":53},[39,49132,32998],{"class":74},[39,49134,1717],{"class":45},[39,49136,8432],{"class":74},[39,49138,33005],{"class":53},[39,49140,32993],{"class":74},[39,49142,54],{"class":53},[39,49144,33012],{"class":74},[39,49146,1717],{"class":45},[39,49148,8432],{"class":74},[39,49150,33019],{"class":53},[39,49152,49153,49155,49157,49159,49161,49163],{"class":41,"line":861},[39,49154,33024],{"class":53},[39,49156,1117],{"class":45},[39,49158,33029],{"class":53},[39,49160,32512],{"class":59},[39,49162,1117],{"class":45},[39,49164,32517],{"class":53},[39,49166,49167,49169,49171,49173],{"class":41,"line":870},[39,49168,33040],{"class":59},[39,49170,1117],{"class":45},[39,49172,1463],{"class":74},[39,49174,32441],{"class":53},[39,49176,49177,49179,49181,49183],{"class":41,"line":9084},[39,49178,33052],{"class":59},[39,49180,1117],{"class":45},[39,49182,32451],{"class":74},[39,49184,32441],{"class":53},[39,49186,49187],{"class":41,"line":9090},[39,49188,33063],{"class":128},[39,49190,49191,49193,49195,49197],{"class":41,"line":9102},[39,49192,33068],{"class":59},[39,49194,1117],{"class":45},[39,49196,1658],{"class":74},[39,49198,574],{"class":53},[39,49200,49201,49203,49205,49207,49209,49211],{"class":41,"line":9114},[39,49202,33079],{"class":53},[39,49204,1117],{"class":45},[39,49206,32509],{"class":53},[39,49208,32512],{"class":59},[39,49210,1117],{"class":45},[39,49212,33090],{"class":53},[39,49214,49215,49217,49219,49221],{"class":41,"line":9126},[39,49216,33095],{"class":59},[39,49218,1117],{"class":45},[39,49220,1463],{"class":74},[39,49222,32441],{"class":53},[39,49224,49225,49227,49229,49231],{"class":41,"line":10784},[39,49226,33106],{"class":59},[39,49228,1117],{"class":45},[39,49230,32451],{"class":74},[39,49232,32441],{"class":53},[39,49234,49235,49237,49239,49241],{"class":41,"line":10809},[39,49236,33117],{"class":59},[39,49238,1117],{"class":45},[39,49240,1658],{"class":74},[39,49242,574],{"class":53},[39,49244,49245,49247],{"class":41,"line":10832},[39,49246,95],{"class":45},[39,49248,33130],{"class":53},[39,49250,49251],{"class":41,"line":10856},[39,49252,122],{"emptyLinePlaceholder":121},[39,49254,49255],{"class":41,"line":10861},[39,49256,33139],{"class":128},[39,49258,49259],{"class":41,"line":10866},[39,49260,33144],{"class":128},[39,49262,49263],{"class":41,"line":10871},[39,49264,122],{"emptyLinePlaceholder":121},[39,49266,49267],{"class":41,"line":10880},[39,49268,33153],{"class":128},[39,49270,49271,49273,49275],{"class":41,"line":10885},[39,49272,32922],{"class":45},[39,49274,33160],{"class":49},[39,49276,33163],{"class":53},[39,49278,49279,49281,49283,49285,49287,49289,49291,49293,49295],{"class":41,"line":10891},[39,49280,32212],{"class":53},[39,49282,1117],{"class":45},[39,49284,31426],{"class":53},[39,49286,32219],{"class":237},[39,49288,2814],{"class":45},[39,49290,32224],{"class":53},[39,49292,2811],{"class":45},[39,49294,33182],{"class":237},[39,49296,574],{"class":53},[39,49298,49299],{"class":41,"line":10912},[39,49300,122],{"emptyLinePlaceholder":121},[39,49302,49303],{"class":41,"line":10918},[39,49304,33197],{"class":128},[39,49306,49307],{"class":41,"line":10932},[39,49308,33202],{"class":128},[39,49310,49311],{"class":41,"line":10938},[39,49312,33207],{"class":128},[39,49314,49315,49317,49319,49321,49323,49325,49327],{"class":41,"line":10965},[39,49316,33212],{"class":53},[39,49318,1117],{"class":45},[39,49320,33217],{"class":53},[39,49322,33220],{"class":59},[39,49324,1117],{"class":45},[39,49326,33225],{"class":74},[39,49328,574],{"class":53},[39,49330,49331],{"class":41,"line":10974},[39,49332,122],{"emptyLinePlaceholder":121},[39,49334,49335],{"class":41,"line":10980},[39,49336,33236],{"class":128},[39,49338,49339,49341,49343],{"class":41,"line":10988},[39,49340,33241],{"class":53},[39,49342,1117],{"class":45},[39,49344,33246],{"class":53},[39,49346,49347],{"class":41,"line":10993},[39,49348,122],{"emptyLinePlaceholder":121},[39,49350,49351],{"class":41,"line":17577},[39,49352,33255],{"class":128},[39,49354,49355,49357,49359],{"class":41,"line":17583},[39,49356,32264],{"class":53},[39,49358,1117],{"class":45},[39,49360,33264],{"class":53},[39,49362,49363],{"class":41,"line":17606},[39,49364,33269],{"class":128},[39,49366,49367],{"class":41,"line":17612},[39,49368,33274],{"class":128},[39,49370,49371],{"class":41,"line":17635},[39,49372,33279],{"class":128},[39,49374,49375,49377,49379],{"class":41,"line":17649},[39,49376,33284],{"class":53},[39,49378,1117],{"class":45},[39,49380,33289],{"class":53},[39,49382,49383],{"class":41,"line":17669},[39,49384,122],{"emptyLinePlaceholder":121},[39,49386,49387],{"class":41,"line":17675},[39,49388,33302],{"class":128},[39,49390,49391],{"class":41,"line":17686},[39,49392,33307],{"class":128},[39,49394,49395,49397,49399],{"class":41,"line":17709},[39,49396,33312],{"class":53},[39,49398,1117],{"class":45},[39,49400,33317],{"class":74},[39,49402,49403],{"class":41,"line":17731},[39,49404,33322],{"class":128},[39,49406,49407,49409,49411],{"class":41,"line":17736},[39,49408,33327],{"class":53},[39,49410,1117],{"class":45},[39,49412,33332],{"class":53},[39,49414,49415],{"class":41,"line":17742},[39,49416,33337],{"class":128},[39,49418,49419,49421,49423],{"class":41,"line":17756},[39,49420,33342],{"class":53},[39,49422,1117],{"class":45},[39,49424,33332],{"class":53},[39,49426,49427],{"class":41,"line":17769},[39,49428,33351],{"class":128},[39,49430,49431,49433,49435],{"class":41,"line":17774},[39,49432,33356],{"class":53},[39,49434,1117],{"class":45},[39,49436,33332],{"class":53},[39,49438,49439],{"class":41,"line":17788},[39,49440,33365],{"class":128},[39,49442,49443,49445,49447],{"class":41,"line":17793},[39,49444,33370],{"class":53},[39,49446,1117],{"class":45},[39,49448,33332],{"class":53},[39,49450,49451],{"class":41,"line":17799},[39,49452,122],{"emptyLinePlaceholder":121},[39,49454,49455],{"class":41,"line":17804},[39,49456,33383],{"class":128},[39,49458,49459,49461,49463],{"class":41,"line":17818},[39,49460,33388],{"class":53},[39,49462,1117],{"class":45},[39,49464,33393],{"class":53},[39,49466,49467],{"class":41,"line":17823},[39,49468,122],{"emptyLinePlaceholder":121},[39,49470,49471],{"class":41,"line":17828},[39,49472,33406],{"class":128},[39,49474,49475,49477,49479,49481,49483],{"class":41,"line":17842},[39,49476,4284],{"class":45},[39,49478,33413],{"class":53},[39,49480,27018],{"class":45},[39,49482,33418],{"class":74},[39,49484,33421],{"class":53},[39,49486,49487,49489,49491,49493,49495,49497,49499,49501,49503,49505,49507],{"class":41,"line":17854},[39,49488,33426],{"class":74},[39,49490,54],{"class":53},[39,49492,33431],{"class":237},[39,49494,33434],{"class":74},[39,49496,1845],{"class":237},[39,49498,33434],{"class":74},[39,49500,1516],{"class":237},[39,49502,33443],{"class":53},[39,49504,1793],{"class":45},[39,49506,1483],{"class":74},[39,49508,31472],{"class":53},[39,49510,49511,49513,49515,49517,49519,49521],{"class":41,"line":17859},[39,49512,33426],{"class":74},[39,49514,54],{"class":53},[39,49516,33458],{"class":237},[39,49518,1717],{"class":45},[39,49520,423],{"class":74},[39,49522,574],{"class":53},[39,49524,49525],{"class":41,"line":17872},[39,49526,122],{"emptyLinePlaceholder":121},[39,49528,49529],{"class":41,"line":17877},[39,49530,33473],{"class":128},[39,49532,49533],{"class":41,"line":17882},[39,49534,33478],{"class":128},[39,49536,49537,49539,49541],{"class":41,"line":17887},[39,49538,33483],{"class":53},[39,49540,1117],{"class":45},[39,49542,33317],{"class":74},[39,49544,49545],{"class":41,"line":17900},[39,49546,33492],{"class":128},[39,49548,49549,49551,49553],{"class":41,"line":17905},[39,49550,33497],{"class":53},[39,49552,1117],{"class":45},[39,49554,4168],{"class":74},[39,49556,49557],{"class":41,"line":33608},[39,49558,33506],{"class":128},[39,49560,49561,49563,49565],{"class":41,"line":33614},[39,49562,33511],{"class":53},[39,49564,1117],{"class":45},[39,49566,33317],{"class":74},[39,49568,49569],{"class":41,"line":33620},[39,49570,33520],{"class":128},[39,49572,49573,49575,49577],{"class":41,"line":33626},[39,49574,33525],{"class":53},[39,49576,1117],{"class":45},[39,49578,4168],{"class":74},[39,49580,49581],{"class":41,"line":33632},[39,49582,33534],{"class":128},[39,49584,49585,49587,49589],{"class":41,"line":33643},[39,49586,33539],{"class":53},[39,49588,1117],{"class":45},[39,49590,4168],{"class":74},[39,49592,49593],{"class":41,"line":33649},[39,49594,33548],{"class":128},[39,49596,49597,49599,49601],{"class":41,"line":33669},[39,49598,33553],{"class":53},[39,49600,1117],{"class":45},[39,49602,4168],{"class":74},[39,49604,49605],{"class":41,"line":33675},[39,49606,33562],{"class":128},[39,49608,49609,49611,49613,49615,49617],{"class":41,"line":33686},[39,49610,4486],{"class":45},[39,49612,32576],{"class":53},[39,49614,27018],{"class":45},[39,49616,32581],{"class":74},[39,49618,33575],{"class":53},[39,49620,49621],{"class":41,"line":33692},[39,49622,33580],{"class":128},[39,49624,49625,49627,49629],{"class":41,"line":33698},[39,49626,33585],{"class":53},[39,49628,1117],{"class":45},[39,49630,33590],{"class":53},[39,49632,49633],{"class":41,"line":33704},[39,49634,33595],{"class":128},[39,49636,49637,49639,49641],{"class":41,"line":33710},[39,49638,33600],{"class":53},[39,49640,1117],{"class":45},[39,49642,33605],{"class":53},[39,49644,49645],{"class":41,"line":33716},[39,49646,33611],{"class":128},[39,49648,49649],{"class":41,"line":33722},[39,49650,33617],{"class":53},[39,49652,49653],{"class":41,"line":33728},[39,49654,33623],{"class":128},[39,49656,49657],{"class":41,"line":33748},[39,49658,33629],{"class":128},[39,49660,49661,49663,49665],{"class":41,"line":33754},[39,49662,33635],{"class":53},[39,49664,1117],{"class":45},[39,49666,33640],{"class":53},[39,49668,49669],{"class":41,"line":33770},[39,49670,33646],{"class":128},[39,49672,49673,49675,49677,49679,49681,49683,49685],{"class":41,"line":33776},[39,49674,33652],{"class":53},[39,49676,1117],{"class":45},[39,49678,33657],{"class":53},[39,49680,33660],{"class":59},[39,49682,1117],{"class":45},[39,49684,1483],{"class":74},[39,49686,574],{"class":53},[39,49688,49689],{"class":41,"line":33790},[39,49690,33672],{"class":128},[39,49692,49693,49695,49697],{"class":41,"line":33796},[39,49694,33678],{"class":53},[39,49696,1117],{"class":45},[39,49698,33683],{"class":53},[39,49700,49701],{"class":41,"line":33811},[39,49702,33689],{"class":128},[39,49704,49705],{"class":41,"line":33817},[39,49706,33695],{"class":53},[39,49708,49709],{"class":41,"line":33826},[39,49710,33701],{"class":128},[39,49712,49713],{"class":41,"line":33832},[39,49714,33707],{"class":53},[39,49716,49717],{"class":41,"line":33841},[39,49718,33713],{"class":128},[39,49720,49721],{"class":41,"line":33847},[39,49722,33719],{"class":53},[39,49724,49725],{"class":41,"line":33853},[39,49726,33725],{"class":128},[39,49728,49729,49731,49733,49735,49737,49739,49741],{"class":41,"line":33862},[39,49730,33731],{"class":53},[39,49732,10545],{"class":45},[39,49734,33736],{"class":53},[39,49736,1717],{"class":45},[39,49738,33741],{"class":53},[39,49740,1457],{"class":74},[39,49742,574],{"class":53},[39,49744,49745],{"class":41,"line":33868},[39,49746,33751],{"class":128},[39,49748,49749,49751,49753,49755,49757],{"class":41,"line":33879},[39,49750,33757],{"class":53},[39,49752,10545],{"class":45},[39,49754,33762],{"class":53},[39,49756,4032],{"class":45},[39,49758,33767],{"class":53},[39,49760,49761],{"class":41,"line":33885},[39,49762,33773],{"class":128},[39,49764,49765,49767,49769,49771,49773],{"class":41,"line":33904},[39,49766,33779],{"class":53},[39,49768,10545],{"class":45},[39,49770,33741],{"class":53},[39,49772,1457],{"class":74},[39,49774,574],{"class":53},[39,49776,49777],{"class":41,"line":33910},[39,49778,33793],{"class":128},[39,49780,49781,49783,49785,49787,49789],{"class":41,"line":33921},[39,49782,4486],{"class":45},[39,49784,33801],{"class":53},[39,49786,27018],{"class":45},[39,49788,32581],{"class":74},[39,49790,33808],{"class":53},[39,49792,49793],{"class":41,"line":33927},[39,49794,33814],{"class":128},[39,49796,49797,49799,49801],{"class":41,"line":33947},[39,49798,33585],{"class":53},[39,49800,1117],{"class":45},[39,49802,33590],{"class":53},[39,49804,49805],{"class":41,"line":33963},[39,49806,33829],{"class":128},[39,49808,49809,49811,49813],{"class":41,"line":33969},[39,49810,33600],{"class":53},[39,49812,1117],{"class":45},[39,49814,33605],{"class":53},[39,49816,49817],{"class":41,"line":33983},[39,49818,33844],{"class":128},[39,49820,49821],{"class":41,"line":33989},[39,49822,33850],{"class":53},[39,49824,49825],{"class":41,"line":33995},[39,49826,37331],{"class":128},[39,49828,49829,49831],{"class":41,"line":34006},[39,49830,33856],{"class":45},[39,49832,33859],{"class":53},[39,49834,49835],{"class":41,"line":34012},[39,49836,33865],{"class":128},[39,49838,49839,49841,49843],{"class":41,"line":34018},[39,49840,37346],{"class":53},[39,49842,1117],{"class":45},[39,49844,33640],{"class":53},[39,49846,49847],{"class":41,"line":34028},[39,49848,33882],{"class":128},[39,49850,49851,49853,49855,49857,49859,49861,49863],{"class":41,"line":34034},[39,49852,37359],{"class":53},[39,49854,1117],{"class":45},[39,49856,33657],{"class":53},[39,49858,33660],{"class":59},[39,49860,1117],{"class":45},[39,49862,1483],{"class":74},[39,49864,574],{"class":53},[39,49866,49867],{"class":41,"line":34045},[39,49868,33907],{"class":128},[39,49870,49871,49873,49875],{"class":41,"line":34051},[39,49872,37380],{"class":53},[39,49874,1117],{"class":45},[39,49876,33683],{"class":53},[39,49878,49879],{"class":41,"line":34061},[39,49880,33924],{"class":128},[39,49882,49883,49885,49887,49889,49891,49893,49895],{"class":41,"line":34066},[39,49884,37393],{"class":53},[39,49886,10545],{"class":45},[39,49888,37398],{"class":53},[39,49890,1717],{"class":45},[39,49892,33741],{"class":53},[39,49894,1457],{"class":74},[39,49896,574],{"class":53},[39,49898,49899,49901,49903,49905,49907],{"class":41,"line":34072},[39,49900,37411],{"class":53},[39,49902,10545],{"class":45},[39,49904,33762],{"class":53},[39,49906,4032],{"class":45},[39,49908,33767],{"class":53},[39,49910,49911],{"class":41,"line":34121},[39,49912,37424],{"class":128},[39,49914,49915,49917,49919,49921,49923],{"class":41,"line":34168},[39,49916,37429],{"class":53},[39,49918,10545],{"class":45},[39,49920,33741],{"class":53},[39,49922,1457],{"class":74},[39,49924,574],{"class":53},[39,49926,49927],{"class":41,"line":34173},[39,49928,33986],{"class":128},[39,49930,49931],{"class":41,"line":34179},[39,49932,33992],{"class":128},[39,49934,49935,49937,49939],{"class":41,"line":34198},[39,49936,33998],{"class":53},[39,49938,1845],{"class":45},[39,49940,34003],{"class":53},[39,49942,49943],{"class":41,"line":34204},[39,49944,34009],{"class":128},[39,49946,49947],{"class":41,"line":34224},[39,49948,34015],{"class":128},[39,49950,49951,49953,49955],{"class":41,"line":34230},[39,49952,34021],{"class":53},[39,49954,1845],{"class":45},[39,49956,34003],{"class":53},[39,49958,49959],{"class":41,"line":34236},[39,49960,34031],{"class":128},[39,49962,49963,49965,49967],{"class":41,"line":34246},[39,49964,34037],{"class":53},[39,49966,1845],{"class":45},[39,49968,34042],{"class":53},[39,49970,49971],{"class":41,"line":34251},[39,49972,34048],{"class":128},[39,49974,49975,49977,49979],{"class":41,"line":34257},[39,49976,34054],{"class":53},[39,49978,1845],{"class":45},[39,49980,34042],{"class":53},[39,49982,49983],{"class":41,"line":34273},[39,49984,122],{"emptyLinePlaceholder":121},[39,49986,49987],{"class":41,"line":34318},[39,49988,34069],{"class":128},[39,49990,49991,49993,49995,49997,49999,50001,50003,50005,50007,50009,50011,50013,50015,50017,50019,50021,50023,50025,50027,50029],{"class":41,"line":34324},[39,49992,33426],{"class":74},[39,49994,54],{"class":53},[39,49996,4675],{"class":237},[39,49998,33434],{"class":74},[39,50000,34083],{"class":237},[39,50002,2156],{"class":74},[39,50004,34088],{"class":45},[39,50006,2206],{"class":74},[39,50008,34093],{"class":237},[39,50010,2156],{"class":74},[39,50012,34088],{"class":45},[39,50014,2206],{"class":74},[39,50016,4675],{"class":237},[39,50018,34104],{"class":53},[39,50020,1793],{"class":45},[39,50022,1483],{"class":74},[39,50024,34111],{"class":53},[39,50026,1793],{"class":45},[39,50028,1483],{"class":74},[39,50030,34118],{"class":53},[39,50032,50033,50035,50037,50039,50041,50043,50045,50047,50049,50051,50053,50055,50057,50059,50061,50063,50065,50067,50069,50071],{"class":41,"line":34330},[39,50034,33426],{"class":74},[39,50036,54],{"class":53},[39,50038,4675],{"class":237},[39,50040,33434],{"class":74},[39,50042,34132],{"class":237},[39,50044,2156],{"class":74},[39,50046,34088],{"class":45},[39,50048,2206],{"class":74},[39,50050,34141],{"class":237},[39,50052,2156],{"class":74},[39,50054,34088],{"class":45},[39,50056,2206],{"class":74},[39,50058,4675],{"class":237},[39,50060,34152],{"class":53},[39,50062,1793],{"class":45},[39,50064,1483],{"class":74},[39,50066,34159],{"class":53},[39,50068,1793],{"class":45},[39,50070,1483],{"class":74},[39,50072,34118],{"class":53},[39,50074,50075],{"class":41,"line":34336},[39,50076,122],{"emptyLinePlaceholder":121},[39,50078,50079],{"class":41,"line":34347},[39,50080,34176],{"class":128},[39,50082,50083,50085,50087,50089,50091,50093,50095],{"class":41,"line":34353},[39,50084,3590],{"class":45},[39,50086,34184],{"class":53},[39,50088,1793],{"class":45},[39,50090,1483],{"class":74},[39,50092,2200],{"class":53},[39,50094,2220],{"class":45},[39,50096,34195],{"class":53},[39,50098,50099],{"class":41,"line":34359},[39,50100,34201],{"class":128},[39,50102,50103,50105,50107,50109,50111,50113,50115],{"class":41,"line":34365},[39,50104,34207],{"class":53},[39,50106,1311],{"class":74},[39,50108,1117],{"class":45},[39,50110,34214],{"class":53},[39,50112,1793],{"class":45},[39,50114,1483],{"class":74},[39,50116,34221],{"class":53},[39,50118,50119],{"class":41,"line":34383},[39,50120,34227],{"class":128},[39,50122,50123],{"class":41,"line":34397},[39,50124,34233],{"class":128},[39,50126,50127,50129,50131],{"class":41,"line":34406},[39,50128,34239],{"class":53},[39,50130,1117],{"class":45},[39,50132,33289],{"class":53},[39,50134,50135],{"class":41,"line":34415},[39,50136,122],{"emptyLinePlaceholder":121},[39,50138,50139],{"class":41,"line":34424},[39,50140,34254],{"class":128},[39,50142,50143,50145,50147,50149,50151],{"class":41,"line":34433},[39,50144,34260],{"class":53},[39,50146,1117],{"class":45},[39,50148,34265],{"class":53},[39,50150,1793],{"class":45},[39,50152,34270],{"class":53},[39,50154,50155,50157,50159,50161,50163,50165,50167,50169,50171,50173,50175,50177,50179,50181,50183,50185,50187,50189],{"class":41,"line":34439},[39,50156,33426],{"class":74},[39,50158,54],{"class":53},[39,50160,34280],{"class":237},[39,50162,2156],{"class":74},[39,50164,34285],{"class":45},[39,50166,2206],{"class":74},[39,50168,1805],{"class":237},[39,50170,2156],{"class":74},[39,50172,34285],{"class":45},[39,50174,2206],{"class":74},[39,50176,34298],{"class":237},[39,50178,34301],{"class":53},[39,50180,34304],{"class":45},[39,50182,2167],{"class":74},[39,50184,34309],{"class":53},[39,50186,1592],{"class":45},[39,50188,2167],{"class":74},[39,50190,31472],{"class":53},[39,50192,50193],{"class":41,"line":34445},[39,50194,37708],{"class":128},[39,50196,50197],{"class":41,"line":34453},[39,50198,37713],{"class":128},[39,50200,50201,50203,50205],{"class":41,"line":34458},[39,50202,37718],{"class":53},[39,50204,34342],{"class":237},[39,50206,574],{"class":53},[39,50208,50209],{"class":41,"line":34464},[39,50210,34362],{"class":128},[39,50212,50213,50215,50217,50219,50221,50223],{"class":41,"line":34475},[39,50214,34368],{"class":53},[39,50216,1117],{"class":45},[39,50218,34373],{"class":53},[39,50220,34376],{"class":59},[39,50222,1117],{"class":45},[39,50224,542],{"class":53},[39,50226,50227,50229,50231,50233],{"class":41,"line":34481},[39,50228,34386],{"class":237},[39,50230,2119],{"class":53},[39,50232,34391],{"class":74},[39,50234,34394],{"class":53},[39,50236,50237,50239],{"class":41,"line":34501},[39,50238,34400],{"class":237},[39,50240,34403],{"class":53},[39,50242,50243,50245],{"class":41,"line":34507},[39,50244,34409],{"class":237},[39,50246,34412],{"class":53},[39,50248,50249,50251],{"class":41,"line":34513},[39,50250,34418],{"class":237},[39,50252,34421],{"class":53},[39,50254,50255,50257],{"class":41,"line":34519},[39,50256,34427],{"class":237},[39,50258,34430],{"class":53},[39,50260,50261],{"class":41,"line":34536},[39,50262,34436],{"class":53},[39,50264,50265],{"class":41,"line":34542},[39,50266,34442],{"class":128},[39,50268,50269,50271],{"class":41,"line":34548},[39,50270,95],{"class":45},[39,50272,34450],{"class":53},[39,50274,50275],{"class":41,"line":34554},[39,50276,122],{"emptyLinePlaceholder":121},[39,50278,50279],{"class":41,"line":34560},[39,50280,34461],{"class":128},[39,50282,50283,50285,50287],{"class":41,"line":34566},[39,50284,32922],{"class":45},[39,50286,34469],{"class":49},[39,50288,34472],{"class":53},[39,50290,50291],{"class":41,"line":34593},[39,50292,34478],{"class":128},[39,50294,50295,50297,50299,50301,50303,50305,50307,50309],{"class":41,"line":34617},[39,50296,34484],{"class":53},[39,50298,32668],{"class":59},[39,50300,1117],{"class":45},[39,50302,54],{"class":53},[39,50304,1759],{"class":74},[39,50306,426],{"class":53},[39,50308,1558],{"class":74},[39,50310,31472],{"class":53},[39,50312,50313],{"class":41,"line":34623},[39,50314,34504],{"class":128},[39,50316,50317],{"class":41,"line":34629},[39,50318,34510],{"class":128},[39,50320,50321],{"class":41,"line":34635},[39,50322,34516],{"class":128},[39,50324,50325,50327,50329,50331,50333,50335,50337],{"class":41,"line":34646},[39,50326,32702],{"class":53},[39,50328,1483],{"class":74},[39,50330,426],{"class":53},[39,50332,1345],{"class":74},[39,50334,426],{"class":53},[39,50336,1483],{"class":74},[39,50338,574],{"class":53},[39,50340,50341],{"class":41,"line":34657},[39,50342,34539],{"class":128},[39,50344,50345],{"class":41,"line":34663},[39,50346,34545],{"class":128},[39,50348,50349],{"class":41,"line":34680},[39,50350,34551],{"class":128},[39,50352,50353],{"class":41,"line":34703},[39,50354,34557],{"class":128},[39,50356,50357],{"class":41,"line":34726},[39,50358,34563],{"class":128},[39,50360,50361,50363,50365,50367,50369,50371,50373,50375,50377],{"class":41,"line":34732},[39,50362,34569],{"class":53},[39,50364,34572],{"class":237},[39,50366,34575],{"class":53},[39,50368,34578],{"class":237},[39,50370,426],{"class":53},[39,50372,34583],{"class":59},[39,50374,1117],{"class":45},[39,50376,34588],{"class":237},[39,50378,574],{"class":53},[39,50380,50381,50383,50385,50387,50389,50391,50393,50395,50397],{"class":41,"line":34737},[39,50382,34569],{"class":53},[39,50384,34572],{"class":237},[39,50386,34600],{"class":53},[39,50388,34603],{"class":237},[39,50390,426],{"class":53},[39,50392,34583],{"class":59},[39,50394,1117],{"class":45},[39,50396,34612],{"class":237},[39,50398,574],{"class":53},[39,50400,50401],{"class":41,"line":34746},[39,50402,34620],{"class":128},[39,50404,50405],{"class":41,"line":34756},[39,50406,34626],{"class":53},[39,50408,50409],{"class":41,"line":34762},[39,50410,34632],{"class":128},[39,50412,50413,50415,50417],{"class":41,"line":34767},[39,50414,34638],{"class":53},[39,50416,34641],{"class":237},[39,50418,574],{"class":53},[39,50420,50421,50423,50425],{"class":41,"line":34773},[39,50422,34649],{"class":53},[39,50424,34652],{"class":237},[39,50426,574],{"class":53},[39,50428,50429],{"class":41,"line":34786},[39,50430,34660],{"class":128},[39,50432,50433,50435,50437,50439,50441,50443,50445],{"class":41,"line":34792},[39,50434,32702],{"class":53},[39,50436,1483],{"class":74},[39,50438,426],{"class":53},[39,50440,1345],{"class":74},[39,50442,426],{"class":53},[39,50444,1345],{"class":74},[39,50446,574],{"class":53},[39,50448,50449,50451,50453,50455,50457,50459,50461,50463,50465],{"class":41,"line":34803},[39,50450,34569],{"class":53},[39,50452,34572],{"class":237},[39,50454,34687],{"class":53},[39,50456,34578],{"class":237},[39,50458,426],{"class":53},[39,50460,34583],{"class":59},[39,50462,1117],{"class":45},[39,50464,34698],{"class":237},[39,50466,574],{"class":53},[39,50468,50469,50471,50473,50475,50477,50479,50481,50483,50485],{"class":41,"line":34814},[39,50470,34569],{"class":53},[39,50472,34572],{"class":237},[39,50474,34710],{"class":53},[39,50476,34603],{"class":237},[39,50478,426],{"class":53},[39,50480,34583],{"class":59},[39,50482,1117],{"class":45},[39,50484,34721],{"class":237},[39,50486,574],{"class":53},[39,50488,50489],{"class":41,"line":34833},[39,50490,34729],{"class":128},[39,50492,50494],{"class":41,"line":50493},219,[39,50495,34626],{"class":53},[39,50497,50499,50501,50503],{"class":41,"line":50498},220,[39,50500,34638],{"class":53},[39,50502,34572],{"class":237},[39,50504,574],{"class":53},[39,50506,50508,50510,50512],{"class":41,"line":50507},221,[39,50509,34649],{"class":53},[39,50511,34751],{"class":237},[39,50513,574],{"class":53},[39,50515,50517],{"class":41,"line":50516},222,[39,50518,34759],{"class":53},[39,50520,50522],{"class":41,"line":50521},223,[39,50523,122],{"emptyLinePlaceholder":121},[39,50525,50527],{"class":41,"line":50526},224,[39,50528,34770],{"class":128},[39,50530,50532,50534,50536,50538,50540],{"class":41,"line":50531},225,[39,50533,2654],{"class":45},[39,50535,32195],{"class":74},[39,50537,4032],{"class":45},[39,50539,32200],{"class":237},[39,50541,4822],{"class":53},[39,50543,50545],{"class":41,"line":50544},226,[39,50546,34789],{"class":128},[39,50548,50550,50552,50554],{"class":41,"line":50549},227,[39,50551,45521],{"class":53},[39,50553,1117],{"class":45},[39,50555,45526],{"class":53},[39,50557,50559,50561,50563],{"class":41,"line":50558},228,[39,50560,34806],{"class":53},[39,50562,1117],{"class":45},[39,50564,34811],{"class":53},[39,50566,50568,50570,50572,50574,50576,50578,50580],{"class":41,"line":50567},229,[39,50569,34368],{"class":53},[39,50571,1117],{"class":45},[39,50573,45543],{"class":53},[39,50575,34824],{"class":59},[39,50577,1117],{"class":45},[39,50579,2167],{"class":74},[39,50581,574],{"class":53},[39,50583,50585],{"class":41,"line":50584},230,[39,50586,34836],{"class":53},[22971,50588,50590],{"id":50589},"_242测试代码","2.4.2.测试代码",[19,50592,50593],{},"使用测试集进行测试与推理",[30,50595,50597],{"className":31353,"code":50596,"language":31355,"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",[26,50598,50599,50605,50615,50625,50636,50646,50650,50654,50662,50667,50671,50688,50692,50696,50700,50704,50708,50740,50744,50752,50756,50768,50772,50776,50780,50784,50788,50792,50796,50800,50818,50832,50836,50846,50856,50866,50872,50876,50880,50888,50892,50908,50916,50920,50924,50932,50940,50944,50948,50952,50956,50962,50966,50976,50984,50992,50996,51000,51004,51012,51016,51032,51036,51040,51044,51056,51060,51072,51076,51080,51092,51096,51106,51110,51114,51126,51130,51138,51142,51146,51154,51158,51166,51170,51174,51178,51182,51186,51202,51210,51214,51218,51236,51242,51246,51256,51264,51272,51276,51280,51284,51288,51296,51300,51316,51320,51328,51336],{"__ignoreMap":35},[39,50600,50601,50603],{"class":41,"line":42},[39,50602,31367],{"class":45},[39,50604,31370],{"class":53},[39,50606,50607,50609,50611,50613],{"class":41,"line":92},[39,50608,31367],{"class":45},[39,50610,32390],{"class":53},[39,50612,32358],{"class":45},[39,50614,32395],{"class":53},[39,50616,50617,50619,50621,50623],{"class":41,"line":112},[39,50618,31712],{"class":45},[39,50620,32373],{"class":53},[39,50622,31367],{"class":45},[39,50624,32378],{"class":53},[39,50626,50627,50629,50631,50633],{"class":41,"line":118},[39,50628,31712],{"class":45},[39,50630,32343],{"class":53},[39,50632,31367],{"class":45},[39,50634,50635],{"class":53}," ImageFolder\n",[39,50637,50638,50640,50642,50644],{"class":41,"line":125},[39,50639,31712],{"class":45},[39,50641,32889],{"class":53},[39,50643,31367],{"class":45},[39,50645,45615],{"class":53},[39,50647,50648],{"class":41,"line":132},[39,50649,122],{"emptyLinePlaceholder":121},[39,50651,50652],{"class":41,"line":138},[39,50653,34926],{"class":128},[39,50655,50656,50658,50660],{"class":41,"line":169},[39,50657,32922],{"class":45},[39,50659,34933],{"class":49},[39,50661,32928],{"class":53},[39,50663,50664],{"class":41,"line":190},[39,50665,50666],{"class":128},"   # 导入自己的数据集，并进行数据处理\n",[39,50668,50669],{"class":41,"line":202},[39,50670,48936],{"class":128},[39,50672,50673,50675,50677,50679,50681,50683,50686],{"class":41,"line":207},[39,50674,48941],{"class":74},[39,50676,1117],{"class":45},[39,50678,1931],{"class":45},[39,50680,1516],{"class":237},[39,50682,1819],{"class":74},[39,50684,50685],{"class":48952},"\u002Fdata\u002Ftest",[39,50687,26108],{"class":237},[39,50689,50690],{"class":41,"line":212},[39,50691,122],{"emptyLinePlaceholder":121},[39,50693,50694],{"class":41,"line":223},[39,50695,48964],{"class":128},[39,50697,50698],{"class":41,"line":228},[39,50699,48969],{"class":128},[39,50701,50702],{"class":41,"line":263},[39,50703,48974],{"class":128},[39,50705,50706],{"class":41,"line":287},[39,50707,48979],{"class":128},[39,50709,50710,50712,50714,50716,50718,50720,50722,50724,50726,50728,50730,50732,50734,50736,50738],{"class":41,"line":292},[39,50711,48984],{"class":53},[39,50713,1117],{"class":45},[39,50715,48989],{"class":53},[39,50717,48992],{"class":74},[39,50719,426],{"class":53},[39,50721,48997],{"class":74},[39,50723,426],{"class":53},[39,50725,49002],{"class":74},[39,50727,49005],{"class":53},[39,50729,49008],{"class":74},[39,50731,426],{"class":53},[39,50733,49013],{"class":74},[39,50735,426],{"class":53},[39,50737,49018],{"class":74},[39,50739,5738],{"class":53},[39,50741,50742],{"class":41,"line":305},[39,50743,49025],{"class":128},[39,50745,50746,50748,50750],{"class":41,"line":310},[39,50747,49030],{"class":53},[39,50749,1117],{"class":45},[39,50751,49035],{"class":53},[39,50753,50754],{"class":41,"line":321},[39,50755,49040],{"class":128},[39,50757,50758,50760,50762,50764,50766],{"class":41,"line":713},[39,50759,49045],{"class":53},[39,50761,32476],{"class":74},[39,50763,426],{"class":53},[39,50765,32476],{"class":74},[39,50767,43597],{"class":53},[39,50769,50770],{"class":41,"line":718},[39,50771,49058],{"class":128},[39,50773,50774],{"class":41,"line":723},[39,50775,49063],{"class":53},[39,50777,50778],{"class":41,"line":729},[39,50779,49068],{"class":53},[39,50781,50782],{"class":41,"line":735},[39,50783,49073],{"class":128},[39,50785,50786],{"class":41,"line":741},[39,50787,49078],{"class":128},[39,50789,50790],{"class":41,"line":747},[39,50791,122],{"emptyLinePlaceholder":121},[39,50793,50794],{"class":41,"line":753},[39,50795,49087],{"class":128},[39,50797,50798],{"class":41,"line":758},[39,50799,49092],{"class":128},[39,50801,50802,50804,50806,50808,50810,50812,50814,50816],{"class":41,"line":763},[39,50803,34940],{"class":53},[39,50805,1117],{"class":45},[39,50807,49101],{"class":53},[39,50809,49104],{"class":74},[39,50811,426],{"class":53},[39,50813,49109],{"class":59},[39,50815,1117],{"class":45},[39,50817,49114],{"class":53},[39,50819,50820,50822,50824,50826,50828,50830],{"class":41,"line":772},[39,50821,34997],{"class":53},[39,50823,1117],{"class":45},[39,50825,32509],{"class":53},[39,50827,32512],{"class":59},[39,50829,1117],{"class":45},[39,50831,35008],{"class":53},[39,50833,50834],{"class":41,"line":777},[39,50835,35013],{"class":128},[39,50837,50838,50840,50842,50844],{"class":41,"line":785},[39,50839,35018],{"class":59},[39,50841,1117],{"class":45},[39,50843,1483],{"class":74},[39,50845,32441],{"class":53},[39,50847,50848,50850,50852,50854],{"class":41,"line":796},[39,50849,35029],{"class":59},[39,50851,1117],{"class":45},[39,50853,32451],{"class":74},[39,50855,32441],{"class":53},[39,50857,50858,50860,50862,50864],{"class":41,"line":808},[39,50859,35040],{"class":59},[39,50861,1117],{"class":45},[39,50863,1457],{"class":74},[39,50865,574],{"class":53},[39,50867,50868,50870],{"class":41,"line":823},[39,50869,95],{"class":45},[39,50871,35053],{"class":53},[39,50873,50874],{"class":41,"line":839},[39,50875,122],{"emptyLinePlaceholder":121},[39,50877,50878],{"class":41,"line":845},[39,50879,35062],{"class":128},[39,50881,50882,50884,50886],{"class":41,"line":856},[39,50883,32922],{"class":45},[39,50885,35069],{"class":49},[39,50887,35072],{"class":53},[39,50889,50890],{"class":41,"line":861},[39,50891,35077],{"class":128},[39,50893,50894,50896,50898,50900,50902,50904,50906],{"class":41,"line":870},[39,50895,32212],{"class":53},[39,50897,1117],{"class":45},[39,50899,32219],{"class":237},[39,50901,2814],{"class":45},[39,50903,32224],{"class":53},[39,50905,2811],{"class":45},[39,50907,35094],{"class":237},[39,50909,50910,50912,50914],{"class":41,"line":9084},[39,50911,32264],{"class":53},[39,50913,1117],{"class":45},[39,50915,33264],{"class":53},[39,50917,50918],{"class":41,"line":9090},[39,50919,122],{"emptyLinePlaceholder":121},[39,50921,50922],{"class":41,"line":9102},[39,50923,35111],{"class":128},[39,50925,50926,50928,50930],{"class":41,"line":9114},[39,50927,35116],{"class":53},[39,50929,1117],{"class":45},[39,50931,33317],{"class":74},[39,50933,50934,50936,50938],{"class":41,"line":9126},[39,50935,35125],{"class":53},[39,50937,1117],{"class":45},[39,50939,4168],{"class":74},[39,50941,50942],{"class":41,"line":10784},[39,50943,122],{"emptyLinePlaceholder":121},[39,50945,50946],{"class":41,"line":10809},[39,50947,35138],{"class":128},[39,50949,50950],{"class":41,"line":10832},[39,50951,35143],{"class":128},[39,50953,50954],{"class":41,"line":10856},[39,50955,35148],{"class":128},[39,50957,50958,50960],{"class":41,"line":10861},[39,50959,35153],{"class":45},[39,50961,33859],{"class":53},[39,50963,50964],{"class":41,"line":10866},[39,50965,35160],{"class":128},[39,50967,50968,50970,50972,50974],{"class":41,"line":10871},[39,50969,4486],{"class":45},[39,50971,35167],{"class":53},[39,50973,27018],{"class":45},[39,50975,35172],{"class":53},[39,50977,50978,50980,50982],{"class":41,"line":10880},[39,50979,35177],{"class":53},[39,50981,1117],{"class":45},[39,50983,35182],{"class":53},[39,50985,50986,50988,50990],{"class":41,"line":10885},[39,50987,35187],{"class":53},[39,50989,1117],{"class":45},[39,50991,35192],{"class":53},[39,50993,50994],{"class":41,"line":10891},[39,50995,35197],{"class":128},[39,50997,50998],{"class":41,"line":10912},[39,50999,33850],{"class":53},[39,51001,51002],{"class":41,"line":10918},[39,51003,35206],{"class":128},[39,51005,51006,51008,51010],{"class":41,"line":10932},[39,51007,33635],{"class":53},[39,51009,1117],{"class":45},[39,51011,35215],{"class":53},[39,51013,51014],{"class":41,"line":10938},[39,51015,35220],{"class":128},[39,51017,51018,51020,51022,51024,51026,51028,51030],{"class":41,"line":10965},[39,51019,33652],{"class":53},[39,51021,1117],{"class":45},[39,51023,33657],{"class":53},[39,51025,33660],{"class":59},[39,51027,1117],{"class":45},[39,51029,1483],{"class":74},[39,51031,574],{"class":53},[39,51033,51034],{"class":41,"line":10974},[39,51035,35241],{"class":128},[39,51037,51038],{"class":41,"line":10980},[39,51039,35246],{"class":128},[39,51041,51042],{"class":41,"line":10988},[39,51043,35251],{"class":128},[39,51045,51046,51048,51050,51052,51054],{"class":41,"line":10993},[39,51047,35256],{"class":53},[39,51049,10545],{"class":45},[39,51051,33762],{"class":53},[39,51053,4032],{"class":45},[39,51055,35265],{"class":53},[39,51057,51058],{"class":41,"line":17577},[39,51059,35270],{"class":128},[39,51061,51062,51064,51066,51068,51070],{"class":41,"line":17583},[39,51063,35275],{"class":53},[39,51065,10545],{"class":45},[39,51067,35280],{"class":53},[39,51069,1457],{"class":74},[39,51071,574],{"class":53},[39,51073,51074],{"class":41,"line":17606},[39,51075,122],{"emptyLinePlaceholder":121},[39,51077,51078],{"class":41,"line":17612},[39,51079,35293],{"class":128},[39,51081,51082,51084,51086,51088,51090],{"class":41,"line":17635},[39,51083,35298],{"class":53},[39,51085,1117],{"class":45},[39,51087,35303],{"class":53},[39,51089,1845],{"class":45},[39,51091,35308],{"class":53},[39,51093,51094],{"class":41,"line":17649},[39,51095,35313],{"class":128},[39,51097,51098,51100,51102,51104],{"class":41,"line":17669},[39,51099,33426],{"class":74},[39,51101,54],{"class":53},[39,51103,35322],{"class":237},[39,51105,35325],{"class":53},[39,51107,51108],{"class":41,"line":17675},[39,51109,122],{"emptyLinePlaceholder":121},[39,51111,51112],{"class":41,"line":17686},[39,51113,35334],{"class":128},[39,51115,51116,51118,51120,51122,51124],{"class":41,"line":17709},[39,51117,2654],{"class":45},[39,51119,32195],{"class":74},[39,51121,4032],{"class":45},[39,51123,32200],{"class":237},[39,51125,4822],{"class":53},[39,51127,51128],{"class":41,"line":17731},[39,51129,35351],{"class":128},[39,51131,51132,51134,51136],{"class":41,"line":17736},[39,51133,32264],{"class":53},[39,51135,1117],{"class":45},[39,51137,45526],{"class":53},[39,51139,51140],{"class":41,"line":17742},[39,51141,35364],{"class":128},[39,51143,51144],{"class":41,"line":17756},[39,51145,35369],{"class":128},[39,51147,51148,51150,51152],{"class":41,"line":17769},[39,51149,35374],{"class":53},[39,51151,35377],{"class":237},[39,51153,31472],{"class":53},[39,51155,51156],{"class":41,"line":17774},[39,51157,35384],{"class":128},[39,51159,51160,51162,51164],{"class":41,"line":17788},[39,51161,34997],{"class":53},[39,51163,1117],{"class":45},[39,51165,35393],{"class":53},[39,51167,51168],{"class":41,"line":17793},[39,51169,35398],{"class":128},[39,51171,51172],{"class":41,"line":17799},[39,51173,35403],{"class":53},[39,51175,51176],{"class":41,"line":17804},[39,51177,122],{"emptyLinePlaceholder":121},[39,51179,51180],{"class":41,"line":17818},[39,51181,35412],{"class":128},[39,51183,51184],{"class":41,"line":17823},[39,51185,35417],{"class":128},[39,51187,51188,51190,51192,51194,51196,51198,51200],{"class":41,"line":17828},[39,51189,32212],{"class":53},[39,51191,1117],{"class":45},[39,51193,32219],{"class":237},[39,51195,2814],{"class":45},[39,51197,32224],{"class":53},[39,51199,2811],{"class":45},[39,51201,35094],{"class":237},[39,51203,51204,51206,51208],{"class":41,"line":17842},[39,51205,32264],{"class":53},[39,51207,1117],{"class":45},[39,51209,33264],{"class":53},[39,51211,51212],{"class":41,"line":17854},[39,51213,35446],{"class":128},[39,51215,51216],{"class":41,"line":17859},[39,51217,35451],{"class":128},[39,51219,51220,51222,51224,51226,51229,51231,51234],{"class":41,"line":17872},[39,51221,35456],{"class":53},[39,51223,1117],{"class":45},[39,51225,2150],{"class":53},[39,51227,51228],{"class":237},"'猫'",[39,51230,426],{"class":53},[39,51232,51233],{"class":237},"'狗'",[39,51235,34221],{"class":53},[39,51237,51238,51240],{"class":41,"line":17877},[39,51239,35153],{"class":45},[39,51241,33859],{"class":53},[39,51243,51244],{"class":41,"line":17882},[39,51245,35521],{"class":128},[39,51247,51248,51250,51252,51254],{"class":41,"line":17887},[39,51249,4486],{"class":45},[39,51251,35528],{"class":53},[39,51253,27018],{"class":45},[39,51255,35172],{"class":53},[39,51257,51258,51260,51262],{"class":41,"line":17900},[39,51259,33585],{"class":53},[39,51261,1117],{"class":45},[39,51263,33590],{"class":53},[39,51265,51266,51268,51270],{"class":41,"line":17905},[39,51267,33600],{"class":53},[39,51269,1117],{"class":45},[39,51271,33605],{"class":53},[39,51273,51274],{"class":41,"line":33608},[39,51275,122],{"emptyLinePlaceholder":121},[39,51277,51278],{"class":41,"line":33614},[39,51279,35557],{"class":128},[39,51281,51282],{"class":41,"line":33620},[39,51283,33850],{"class":53},[39,51285,51286],{"class":41,"line":33626},[39,51287,35566],{"class":128},[39,51289,51290,51292,51294],{"class":41,"line":33632},[39,51291,33635],{"class":53},[39,51293,1117],{"class":45},[39,51295,33640],{"class":53},[39,51297,51298],{"class":41,"line":33643},[39,51299,35579],{"class":128},[39,51301,51302,51304,51306,51308,51310,51312,51314],{"class":41,"line":33649},[39,51303,33652],{"class":53},[39,51305,1117],{"class":45},[39,51307,33657],{"class":53},[39,51309,33660],{"class":59},[39,51311,1117],{"class":45},[39,51313,1483],{"class":74},[39,51315,574],{"class":53},[39,51317,51318],{"class":41,"line":33669},[39,51319,35600],{"class":128},[39,51321,51322,51324,51326],{"class":41,"line":33675},[39,51323,35605],{"class":53},[39,51325,1117],{"class":45},[39,51327,35610],{"class":53},[39,51329,51330,51332,51334],{"class":41,"line":33686},[39,51331,35615],{"class":53},[39,51333,1117],{"class":45},[39,51335,35620],{"class":53},[39,51337,51338,51340,51342,51344,51346,51348,51350,51352],{"class":41,"line":33692},[39,51339,35625],{"class":74},[39,51341,54],{"class":53},[39,51343,35630],{"class":237},[39,51345,35633],{"class":53},[39,51347,35636],{"class":237},[39,51349,426],{"class":53},[39,51351,35641],{"class":237},[39,51353,35644],{"class":53},[1192,51355,51356],{},"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":92,"depth":92,"links":51358},[51359,51360,51361,51362],{"id":31566,"depth":112,"text":31567},{"id":38814,"depth":112,"text":38815},{"id":42247,"depth":112,"text":42248},{"id":46256,"depth":112,"text":46257},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31558,"description":24350},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51369,"title":51370,"body":51371,"description":24350,"extension":1203,"meta":51378,"navigation":121,"path":51379,"seo":51380,"stem":51381,"__hash__":51382},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51372,"toc":51376},[51373],[10,51374,51370],{"id":51375},"_3yolo模型学习",{"title":35,"searchDepth":92,"depth":92,"links":51377},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51370,"description":24350},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51384,"title":51385,"body":51386,"description":51393,"extension":1203,"meta":51394,"navigation":121,"path":51396,"seo":51397,"stem":51398,"__hash__":51399},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51387,"toc":51391},[51388],[19,51389,51390],{},"yolo模型还未补充",{"title":35,"searchDepth":92,"depth":92,"links":51392},[],"深度学习学习",{"category":51395},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51385,"description":51393},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51401,"title":51402,"body":51403,"description":24350,"extension":1203,"meta":51428,"navigation":121,"path":51429,"seo":51430,"stem":51431,"__hash__":51432},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51404,"toc":51426},[51405,51408,51411,51416,51423],[10,51406,51402],{"id":51407},"_1工具",[19,51409,51410],{},"提示错误插件：有问题会提前报错",[19,51412,51413],{},[2585,51414],{"alt":35,"src":51415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,51417,51418],{},[922,51419,51422],{"href":51420,"rel":51421},"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",[24839],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,51424,51425],{},"alt键加上下箭头可以实现语句的移动",{"title":35,"searchDepth":92,"depth":92,"links":51427},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51402,"description":24350},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51434,"title":51435,"body":51436,"description":24350,"extension":1203,"meta":54300,"navigation":121,"path":54301,"seo":54302,"stem":54303,"__hash__":54304},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51437,"toc":54251},[51438,51441,51445,51449,51454,51457,51462,51466,51473,51478,51485,51490,51497,51502,51506,51511,51514,51518,51523,51527,51532,51535,51538,51541,51544,51547,51550,51553,51556,51561,51566,51571,51575,51578,51581,51585,51590,51593,51601,51606,51623,51631,51636,51641,51646,51651,51656,51659,51664,51669,51673,51682,51687,51692,51696,51701,51704,51708,51713,51721,51726,51731,51734,51739,51744,51749,51752,51755,51758,51763,51768,51771,51776,51779,51784,51787,51790,51793,51798,51801,51804,51819,51824,51829,51834,51837,51840,51843,51857,51860,51865,51870,51873,51876,51879,51882,51885,51888,51891,51895,51899,51904,51908,51911,51916,51921,51924,51929,51932,51936,51941,51944,51947,51950,51953,51956,51959,51962,51965,51968,51972,51977,51982,51987,51990,51993,51997,52002,52005,52009,52012,52015,52020,52023,52026,52030,52034,52037,52042,52047,52050,52079,52084,52089,52094,52099,52103,52108,52112,52117,52120,52124,52128,52133,52137,52142,52147,52151,52156,52159,52161,52164,52169,52173,52178,52182,52186,52191,52196,52201,52206,52210,52215,52220,52225,52228,52231,52236,52239,52244,52249,52254,52259,52263,53070,53074,53417,53422,53425,53428,53431,53434,53437,53440,53443,53446,53448,53451,53453,53456,53460,53465,53468,53471,53474,53478,53483,53488,53508,53511,53515,53520,53525,53542,53546,53575,53579,53601,53603,53642,53650,53656,53660,53663,53666,53671,53676,53679,53682,53685,53690,53695,53698,53701,53704,53707,53710,53713,53716,53719,53722,53725,53728,53730,53733,53736,53739,53742,53745,53748,53751,53754,53758,53763,53766,53771,53774,53777,53780,53783,53786,53789,53792,53794,53797,53800,53803,53806,53809,53812,53816,53819,53828,53831,53836,53839,53844,53847,53850,53853,53856,53859,53862,53865,53869,53873,53876,53879,53884,53889,53894,53898,53903,53908,53911,53914,53917,53920,53923,53928,53931,53936,53938,53943,53946,53950,53955,53958,53961,53966,53970,53973,53978,53981,53984,54013,54018,54021,54024,54027,54030,54033,54037,54040,54126,54130,54133,54138,54143,54150,54153,54156,54159,54162,54165,54170,54175,54178,54181,54184,54187,54190,54193,54196,54199,54202,54204,54207,54211,54216,54221,54226,54229,54234,54239,54242,54245,54248],[10,51439,51435],{"id":51440},"_2基础语法",[14,51442,51444],{"id":51443},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[476,51446,51448],{"id":51447},"_211-js组成","2.1.1 js组成",[328,51450,51451],{},[331,51452,51453],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,51455,51456],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[328,51458,51459],{"start":92},[331,51460,51461],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[476,51463,51465],{"id":51464},"_212-js书写位置","2.1.2 js书写位置",[328,51467,51468],{},[331,51469,51470],{},[350,51471,51472],{},"内部 JavaScript",[19,51474,51475],{},[2585,51476],{"alt":35,"src":51477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[328,51479,51480],{"start":92},[331,51481,51482],{},[350,51483,51484],{},"外部 JavaScript",[19,51486,51487],{},[2585,51488],{"alt":35,"src":51489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[328,51491,51492],{"start":112},[331,51493,51494],{},[350,51495,51496],{},"内联 JavaScript",[19,51498,51499],{},[2585,51500],{"alt":35,"src":51501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[476,51503,51505],{"id":51504},"_213-javascript注释","2.1.3 JavaScript注释",[19,51507,51508],{},[2585,51509],{"alt":35,"src":51510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51512,51513],{},"alt+shift+a一定要记住！",[476,51515,51517],{"id":51516},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51519,51520],{},[2585,51521],{"alt":35,"src":51522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[476,51524,51526],{"id":51525},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[328,51528,51529],{},[331,51530,51531],{},"输出语法：",[19,51533,51534],{},"①document.write('要出的内容')",[19,51536,51537],{},"向body内输出内容；",[19,51539,51540],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51542,51543],{},"②alert('要出的内容')",[19,51545,51546],{},"页面弹出警告对话框",[19,51548,51549],{},"③console.log('控制台打印')",[19,51551,51552],{},"控制台输出语法，程序员调试使用",[19,51554,51555],{},"输入log就行，自动生成：",[19,51557,51558],{},[2585,51559],{"alt":35,"src":51560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[328,51562,51563],{"start":92},[331,51564,51565],{},"输入语法：",[19,51567,51568],{},[2585,51569],{"alt":35,"src":51570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[476,51572,51574],{"id":51573},"_2116-字面量","21.1.6 字面量",[19,51576,51577],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51579,51580],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51582,51584],{"id":51583},"_22-变量","2.2 变量",[328,51586,51587],{},[331,51588,51589],{},"变量声明",[19,51591,51592],{},"let 变量名",[489,51594,51595,51598],{},[331,51596,51597],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[331,51599,51600],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[328,51602,51603],{"start":92},[331,51604,51605],{},"变量赋值",[30,51607,51611],{"className":51608,"code":51609,"language":51610,"meta":35,"style":35},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[26,51612,51613,51618],{"__ignoreMap":35},[39,51614,51615],{"class":41,"line":42},[39,51616,51617],{"class":53},"let age\n",[39,51619,51620],{"class":41,"line":92},[39,51621,51622],{"class":53},"age=18\n",[328,51624,51625,51628],{"start":112},[331,51626,51627],{},"连这些（变量的初始化）：let age=18",[331,51629,51630],{},"更新变量",[19,51632,51633],{},[2585,51634],{"alt":35,"src":51635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[328,51637,51638],{"start":125},[331,51639,51640],{},"声明多个变量",[19,51642,51643],{},[2585,51644],{"alt":35,"src":51645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[328,51647,51648],{"start":132},[331,51649,51650],{},"变量命名规则与规范",[19,51652,51653],{},[2585,51654],{"alt":35,"src":51655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,51657,51658],{},"遵守小驼峰！",[328,51660,51661],{"start":138},[331,51662,51663],{},"变量拓展-let和var的区别",[19,51665,51666],{},[2585,51667],{"alt":35,"src":51668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51670,51672],{"id":51671},"_23-数组","2.3 数组",[30,51674,51676],{"className":51608,"code":51675,"language":51610,"meta":35,"style":35},"let arr = []\n",[26,51677,51678],{"__ignoreMap":35},[39,51679,51680],{"class":41,"line":42},[39,51681,51675],{"class":53},[19,51683,51684],{},[2585,51685],{"alt":35,"src":51686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,51688,51689],{},[2585,51690],{"alt":35,"src":51691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51693,51695],{"id":51694},"_24-常量","2.4 常量",[19,51697,51698],{},[2585,51699],{"alt":35,"src":51700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51702,51703],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51705,51707],{"id":51706},"_25-数据类型","2.5 数据类型",[19,51709,51710],{},[2585,51711],{"alt":35,"src":51712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[328,51714,51715,51718],{},[331,51716,51717],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[331,51719,51720],{},"算数运算符：",[19,51722,51723],{},[2585,51724],{"alt":35,"src":51725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[328,51727,51728],{"start":112},[331,51729,51730],{},"数字类型（Number）",[19,51732,51733],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,51735,51736],{},[2585,51737],{"alt":35,"src":51738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[328,51740,51741],{"start":118},[331,51742,51743],{},"字符串类型（string）",[19,51745,51746],{},[2585,51747],{"alt":35,"src":51748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,51750,51751],{},"反引号也是可以使用的",[19,51753,51754],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,51756,51757],{},"例如：document.write(\"我今年\"+age+\"岁\")",[328,51759,51760],{"start":125},[331,51761,51762],{},"模板字符串",[19,51764,51765],{},[2585,51766],{"alt":35,"src":51767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,51769,51770],{},"类似于python的字符串格式化",[328,51772,51773],{"start":132},[331,51774,51775],{},"布尔类型",[19,51777,51778],{},"true 和 false",[328,51780,51781],{"start":138},[331,51782,51783],{},"未定义类型（underfined）",[19,51785,51786],{},"表示没有赋值",[19,51788,51789],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51791,51792],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[328,51794,51795],{"start":169},[331,51796,51797],{},"null（空类型）",[19,51799,51800],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51802,51803],{},"赋值了，但是内容为空",[30,51805,51807],{"className":51608,"code":51806,"language":51610,"meta":35,"style":35},"typeof null\n输出的是'object'，是一个对象数据类型\n",[26,51808,51809,51814],{"__ignoreMap":35},[39,51810,51811],{"class":41,"line":42},[39,51812,51813],{"class":53},"typeof null\n",[39,51815,51816],{"class":41,"line":92},[39,51817,51818],{"class":53},"输出的是'object'，是一个对象数据类型\n",[328,51820,51821],{"start":190},[331,51822,51823],{},"控制台检测数据类型",[19,51825,51826],{},[2585,51827],{"alt":35,"src":51828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[328,51830,51831],{"start":202},[331,51832,51833],{},"类型转换",[19,51835,51836],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51838,51839],{},"转换方式：隐式转换和显示转换",[19,51841,51842],{},"①隐式转换",[489,51844,51845,51848,51851,51854],{},[331,51846,51847],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[331,51849,51850],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[331,51852,51853],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[331,51855,51856],{},"任何数据和字符串相加结果都是字符串",[19,51858,51859],{},"②显示转换",[19,51861,51862],{},[2585,51863],{"alt":35,"src":51864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51866,51867],{},[2585,51868],{"alt":35,"src":51869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51871,51872],{},"在输入的时候要用好隐式转换，简单写起来",[19,51874,51875],{},"let num = +prompt(’请输入数字：‘)",[19,51877,51878],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51880,51881],{},"console.log(parseInt('12.333px'))",[19,51883,51884],{},"输出为：12",[19,51886,51887],{},"console.log(parseInt('a'a'a12.333px'))",[19,51889,51890],{},"输出：NaN",[14,51892,51894],{"id":51893},"_26-运算符","2.6 运算符",[476,51896,51898],{"id":51897},"_261-赋值运算符","2.6.1 赋值运算符",[19,51900,51901],{},[2585,51902],{"alt":35,"src":51903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[476,51905,51907],{"id":51906},"_262-一元运算符","2.6.2 一元运算符",[19,51909,51910],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51912,51913],{},[2585,51914],{"alt":35,"src":51915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51917,51918],{},[2585,51919],{"alt":35,"src":51920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51922,51923],{},"两者的区别：",[19,51925,51926],{},[2585,51927],{"alt":35,"src":51928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51930,51931],{},"前置先自加；后置后加，代码执行完之后再加",[476,51933,51935],{"id":51934},"_263-比较运算符","2.6.3 比较运算符",[19,51937,51938],{},[2585,51939],{"alt":35,"src":51940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51942,51943],{},"比较运算符也有隐式转换",[19,51945,51946],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51948,51949],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51951,51952],{},"要使用三等，开发的时候",[19,51954,51955],{},"NaN不等于任何人，包括它自己",[19,51957,51958],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51960,51961],{},"7\u002F10=0.7",[19,51963,51964],{},"最后：0.5+0.2=0.7",[19,51966,51967],{},"字符串比较，比较的是字符对应的ASCII码",[476,51969,51971],{"id":51970},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51973,51974],{},[2585,51975],{"alt":35,"src":51976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51978,51979],{},[2585,51980],{"alt":35,"src":51981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51983,51984],{},[2585,51985],{"alt":35,"src":51986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51988,51989],{},"上述题目选D",[19,51991,51992],{},"与真2假1；或真1假2",[476,51994,51996],{"id":51995},"_265-运算符优先级","2.6.5 运算符优先级",[19,51998,51999],{},[2585,52000],{"alt":35,"src":52001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52003,52004],{},"先算逻辑与，后算逻辑或",[14,52006,52008],{"id":52007},"_27-语句","2.7 语句",[19,52010,52011],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52013,52014],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52016,52017],{},[2585,52018],{"alt":35,"src":52019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52021,52022],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52024,52025],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[476,52027,52029],{"id":52028},"_271-分支语句","2.7.1 分支语句",[22971,52031,52033],{"id":52032},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52035,52036],{},"if语句单行简单的话，可以不写{}，写在一行就行",[328,52038,52039],{},[331,52040,52041],{},"单分支语句",[19,52043,52044],{},[2585,52045],{"alt":35,"src":52046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52048,52049],{},"除了0，所有数字都为真",[30,52051,52053],{"className":51608,"code":52052,"language":51610,"meta":35,"style":35},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[26,52054,52055,52060,52065,52070,52074],{"__ignoreMap":35},[39,52056,52057],{"class":41,"line":42},[39,52058,52059],{"class":53},"if（0) {\n",[39,52061,52062],{"class":41,"line":92},[39,52063,52064],{"class":53},"    let a=1\n",[39,52066,52067],{"class":41,"line":112},[39,52068,52069],{"class":53},"    alert(typeof a)\n",[39,52071,52072],{"class":41,"line":118},[39,52073,115],{"class":53},[39,52075,52076],{"class":41,"line":125},[39,52077,52078],{"class":53},"不输出，括号为假\n",[328,52080,52081],{"start":92},[331,52082,52083],{},"双分支语句",[19,52085,52086],{},[2585,52087],{"alt":35,"src":52088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[328,52090,52091],{"start":112},[331,52092,52093],{},"多分支语句",[19,52095,52096],{},[2585,52097],{"alt":35,"src":52098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22971,52100,52102],{"id":52101},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52104,52105],{},[2585,52106],{"alt":35,"src":52107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22971,52109,52111],{"id":52110},"_2713-switch语句","2.7.1.3 switch语句",[19,52113,52114],{},[2585,52115],{"alt":35,"src":52116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52118,52119],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[476,52121,52123],{"id":52122},"_272-循环语句","2.7.2 循环语句",[22971,52125,52127],{"id":52126},"_2721-断点演示","2.7.2.1 断点演示",[19,52129,52130],{},[2585,52131],{"alt":35,"src":52132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22971,52134,52136],{"id":52135},"_2722-while循环","2.7.2.2 while循环",[19,52138,52139],{},[2585,52140],{"alt":35,"src":52141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52143,52144],{},[2585,52145],{"alt":35,"src":52146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22971,52148,52150],{"id":52149},"_2723-for循环","2.7.2.3 for循环",[19,52152,52153],{},[2585,52154],{"alt":35,"src":52155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52157,52158],{},"for(;;) {",[19,52160,2206],{},[19,52162,52163],{},"表示无限循环",[19,52165,52166],{},[2585,52167],{"alt":35,"src":52168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22971,52170,52172],{"id":52171},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52174,52175],{},[2585,52176],{"alt":35,"src":52177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52179,52181],{"id":52180},"_28-数组","2.8 数组",[476,52183,52185],{"id":52184},"_281-基础认识","2.8.1 基础认识",[19,52187,52188],{},[2585,52189],{"alt":35,"src":52190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,52192,52193],{},[2585,52194],{"alt":35,"src":52195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,52197,52198],{},[2585,52199],{"alt":35,"src":52200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,52202,52203],{},[2585,52204],{"alt":35,"src":52205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[476,52207,52209],{"id":52208},"_282-操作数组","2.8.2 操作数组",[19,52211,52212],{},[2585,52213],{"alt":35,"src":52214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[328,52216,52217],{},[331,52218,52219],{},"添加元素",[19,52221,52222],{},[2585,52223],{"alt":35,"src":52224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,52226,52227],{},"console.log(arr.push('green'))",[19,52229,52230],{},"输出结果：为新数组的长度",[19,52232,52233],{},[2585,52234],{"alt":35,"src":52235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,52237,52238],{},"push用的非常多，一定要记住",[328,52240,52241],{},[331,52242,52243],{},"删除元素",[19,52245,52246],{},[2585,52247],{"alt":35,"src":52248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,52250,52251],{},[2585,52252],{"alt":35,"src":52253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,52255,52256],{},[2585,52257],{"alt":35,"src":52258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[476,52260,52262],{"id":52261},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[30,52264,52266],{"className":51608,"code":52265,"language":51610,"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",[26,52267,52268,52283,52299,52303,52312,52330,52354,52376,52390,52398,52405,52417,52428,52432,52436,52443,52455,52470,52483,52502,52519,52534,52546,52558,52570,52574,52578,52589,52599,52611,52623,52635,52646,52650,52654,52666,52670,52684,52688,52692,52703,52717,52729,52743,52747,52756,52765,52769,52778,52782,52791,52796,52801,52814,52842,52847,52852,52877,52882,52886,52891,52896,52911,52915,52920,52950,52962,52978,52994,53008,53013,53020,53024,53029,53042,53050,53058,53062],{"__ignoreMap":35},[39,52269,52270,52273,52277,52280],{"class":41,"line":42},[39,52271,52272],{"class":53},"\u003C!",[39,52274,52276],{"class":52275},"s9eBZ","DOCTYPE",[39,52278,52279],{"class":49}," html",[39,52281,52282],{"class":53},">\n",[39,52284,52285,52287,52289,52292,52294,52297],{"class":41,"line":92},[39,52286,2170],{"class":53},[39,52288,51610],{"class":52275},[39,52290,52291],{"class":49}," lang",[39,52293,1117],{"class":53},[39,52295,52296],{"class":237},"\"en\"",[39,52298,52282],{"class":53},[39,52300,52301],{"class":41,"line":112},[39,52302,122],{"emptyLinePlaceholder":121},[39,52304,52305,52307,52310],{"class":41,"line":118},[39,52306,2170],{"class":53},[39,52308,52309],{"class":52275},"head",[39,52311,52282],{"class":53},[39,52313,52314,52317,52320,52323,52325,52328],{"class":41,"line":125},[39,52315,52316],{"class":53},"    \u003C",[39,52318,52319],{"class":52275},"meta",[39,52321,52322],{"class":49}," charset",[39,52324,1117],{"class":53},[39,52326,52327],{"class":237},"\"UTF-8\"",[39,52329,52282],{"class":53},[39,52331,52332,52334,52336,52339,52341,52344,52347,52349,52352],{"class":41,"line":132},[39,52333,52316],{"class":53},[39,52335,52319],{"class":52275},[39,52337,52338],{"class":49}," http-equiv",[39,52340,1117],{"class":53},[39,52342,52343],{"class":237},"\"X-UA-Compatible\"",[39,52345,52346],{"class":49}," content",[39,52348,1117],{"class":53},[39,52350,52351],{"class":237},"\"IE=edge\"",[39,52353,52282],{"class":53},[39,52355,52356,52358,52360,52362,52364,52367,52369,52371,52374],{"class":41,"line":138},[39,52357,52316],{"class":53},[39,52359,52319],{"class":52275},[39,52361,15893],{"class":49},[39,52363,1117],{"class":53},[39,52365,52366],{"class":237},"\"viewport\"",[39,52368,52346],{"class":49},[39,52370,1117],{"class":53},[39,52372,52373],{"class":237},"\"width=device-width, initial-scale=1.0\"",[39,52375,52282],{"class":53},[39,52377,52378,52380,52383,52386,52388],{"class":41,"line":169},[39,52379,52316],{"class":53},[39,52381,52382],{"class":52275},"title",[39,52384,52385],{"class":53},">Document\u003C\u002F",[39,52387,52382],{"class":52275},[39,52389,52282],{"class":53},[39,52391,52392,52394,52396],{"class":41,"line":190},[39,52393,52316],{"class":53},[39,52395,1192],{"class":52275},[39,52397,52282],{"class":53},[39,52399,52400,52403],{"class":41,"line":202},[39,52401,52402],{"class":52275},"        *",[39,52404,16545],{"class":53},[39,52406,52407,52410,52413,52415],{"class":41,"line":207},[39,52408,52409],{"class":74},"            margin",[39,52411,52412],{"class":53},": ",[39,52414,1457],{"class":74},[39,52416,318],{"class":53},[39,52418,52419,52422,52424,52426],{"class":41,"line":212},[39,52420,52421],{"class":74},"            padding",[39,52423,52412],{"class":53},[39,52425,1457],{"class":74},[39,52427,318],{"class":53},[39,52429,52430],{"class":41,"line":223},[39,52431,3622],{"class":53},[39,52433,52434],{"class":41,"line":228},[39,52435,122],{"emptyLinePlaceholder":121},[39,52437,52438,52441],{"class":41,"line":263},[39,52439,52440],{"class":49},"        .box",[39,52442,16545],{"class":53},[39,52444,52445,52448,52450,52453],{"class":41,"line":287},[39,52446,52447],{"class":74},"            display",[39,52449,52412],{"class":53},[39,52451,52452],{"class":74},"flex",[39,52454,318],{"class":53},[39,52456,52457,52460,52462,52465,52468],{"class":41,"line":292},[39,52458,52459],{"class":74},"            width",[39,52461,52412],{"class":53},[39,52463,52464],{"class":74},"700",[39,52466,52467],{"class":45},"px",[39,52469,318],{"class":53},[39,52471,52472,52475,52477,52479,52481],{"class":41,"line":305},[39,52473,52474],{"class":74},"            height",[39,52476,52412],{"class":53},[39,52478,5056],{"class":74},[39,52480,52467],{"class":45},[39,52482,318],{"class":53},[39,52484,52485,52488,52490,52492,52494,52497,52500],{"class":41,"line":310},[39,52486,52487],{"class":74},"            border-left",[39,52489,52412],{"class":53},[39,52491,1483],{"class":74},[39,52493,52467],{"class":45},[39,52495,52496],{"class":74}," solid",[39,52498,52499],{"class":74}," pink",[39,52501,318],{"class":53},[39,52503,52504,52507,52509,52511,52513,52515,52517],{"class":41,"line":321},[39,52505,52506],{"class":74},"            border-bottom",[39,52508,52412],{"class":53},[39,52510,1483],{"class":74},[39,52512,52467],{"class":45},[39,52514,52496],{"class":74},[39,52516,52499],{"class":74},[39,52518,318],{"class":53},[39,52520,52521,52523,52525,52527,52529,52532],{"class":41,"line":713},[39,52522,52409],{"class":74},[39,52524,52412],{"class":53},[39,52526,1917],{"class":74},[39,52528,52467],{"class":45},[39,52530,52531],{"class":74}," auto",[39,52533,318],{"class":53},[39,52535,52536,52539,52541,52544],{"class":41,"line":718},[39,52537,52538],{"class":74},"            justify-content",[39,52540,52412],{"class":53},[39,52542,52543],{"class":74},"space-around",[39,52545,318],{"class":53},[39,52547,52548,52551,52553,52556],{"class":41,"line":723},[39,52549,52550],{"class":74},"            align-items",[39,52552,52412],{"class":53},[39,52554,52555],{"class":74},"flex-end",[39,52557,318],{"class":53},[39,52559,52560,52563,52565,52568],{"class":41,"line":729},[39,52561,52562],{"class":74},"            text-align",[39,52564,52412],{"class":53},[39,52566,52567],{"class":74},"center",[39,52569,318],{"class":53},[39,52571,52572],{"class":41,"line":735},[39,52573,3622],{"class":53},[39,52575,52576],{"class":41,"line":741},[39,52577,122],{"emptyLinePlaceholder":121},[39,52579,52580,52582,52584,52587],{"class":41,"line":747},[39,52581,52440],{"class":49},[39,52583,2220],{"class":45},[39,52585,52586],{"class":52275},"div",[39,52588,16545],{"class":53},[39,52590,52591,52593,52595,52597],{"class":41,"line":753},[39,52592,52447],{"class":74},[39,52594,52412],{"class":53},[39,52596,52452],{"class":74},[39,52598,318],{"class":53},[39,52600,52601,52603,52605,52607,52609],{"class":41,"line":758},[39,52602,52459],{"class":74},[39,52604,52412],{"class":53},[39,52606,1917],{"class":74},[39,52608,52467],{"class":45},[39,52610,318],{"class":53},[39,52612,52613,52616,52618,52621],{"class":41,"line":763},[39,52614,52615],{"class":74},"            background-color",[39,52617,52412],{"class":53},[39,52619,52620],{"class":74},"pink",[39,52622,318],{"class":53},[39,52624,52625,52628,52630,52633],{"class":41,"line":772},[39,52626,52627],{"class":74},"            flex-direction",[39,52629,52412],{"class":53},[39,52631,52632],{"class":74},"column",[39,52634,318],{"class":53},[39,52636,52637,52639,52641,52644],{"class":41,"line":777},[39,52638,52538],{"class":74},[39,52640,52412],{"class":53},[39,52642,52643],{"class":74},"space-between",[39,52645,318],{"class":53},[39,52647,52648],{"class":41,"line":785},[39,52649,3622],{"class":53},[39,52651,52652],{"class":41,"line":796},[39,52653,122],{"emptyLinePlaceholder":121},[39,52655,52656,52658,52661,52664],{"class":41,"line":808},[39,52657,52440],{"class":49},[39,52659,52660],{"class":52275}," div",[39,52662,52663],{"class":52275}," span",[39,52665,16545],{"class":53},[39,52667,52668],{"class":41,"line":823},[39,52669,122],{"emptyLinePlaceholder":121},[39,52671,52672,52675,52677,52680,52682],{"class":41,"line":839},[39,52673,52674],{"class":74},"            margin-top",[39,52676,52412],{"class":53},[39,52678,52679],{"class":74},"-20",[39,52681,52467],{"class":45},[39,52683,318],{"class":53},[39,52685,52686],{"class":41,"line":845},[39,52687,3622],{"class":53},[39,52689,52690],{"class":41,"line":856},[39,52691,122],{"emptyLinePlaceholder":121},[39,52693,52694,52696,52698,52701],{"class":41,"line":861},[39,52695,52440],{"class":49},[39,52697,52660],{"class":52275},[39,52699,52700],{"class":52275}," h4",[39,52702,16545],{"class":53},[39,52704,52705,52708,52710,52713,52715],{"class":41,"line":870},[39,52706,52707],{"class":74},"            margin-bottom",[39,52709,52412],{"class":53},[39,52711,52712],{"class":74},"-35",[39,52714,52467],{"class":45},[39,52716,318],{"class":53},[39,52718,52719,52721,52723,52725,52727],{"class":41,"line":9084},[39,52720,52459],{"class":74},[39,52722,52412],{"class":53},[39,52724,1620],{"class":74},[39,52726,52467],{"class":45},[39,52728,318],{"class":53},[39,52730,52731,52734,52736,52739,52741],{"class":41,"line":9090},[39,52732,52733],{"class":74},"            margin-left",[39,52735,52412],{"class":53},[39,52737,52738],{"class":74},"-10",[39,52740,52467],{"class":45},[39,52742,318],{"class":53},[39,52744,52745],{"class":41,"line":9102},[39,52746,3622],{"class":53},[39,52748,52749,52752,52754],{"class":41,"line":9114},[39,52750,52751],{"class":53},"    \u003C\u002F",[39,52753,1192],{"class":52275},[39,52755,52282],{"class":53},[39,52757,52758,52761,52763],{"class":41,"line":9126},[39,52759,52760],{"class":53},"\u003C\u002F",[39,52762,52309],{"class":52275},[39,52764,52282],{"class":53},[39,52766,52767],{"class":41,"line":10784},[39,52768,122],{"emptyLinePlaceholder":121},[39,52770,52771,52773,52776],{"class":41,"line":10809},[39,52772,2170],{"class":53},[39,52774,52775],{"class":52275},"body",[39,52777,52282],{"class":53},[39,52779,52780],{"class":41,"line":10832},[39,52781,122],{"emptyLinePlaceholder":121},[39,52783,52784,52786,52789],{"class":41,"line":10856},[39,52785,52316],{"class":53},[39,52787,52788],{"class":52275},"script",[39,52790,52282],{"class":53},[39,52792,52793],{"class":41,"line":10861},[39,52794,52795],{"class":128},"        \u002F\u002F 1. 四次弹框效果\n",[39,52797,52798],{"class":41,"line":10866},[39,52799,52800],{"class":128},"        \u002F\u002F 声明一个新的数组\n",[39,52802,52803,52806,52809,52811],{"class":41,"line":10871},[39,52804,52805],{"class":45},"        let",[39,52807,52808],{"class":53}," arr ",[39,52810,1117],{"class":45},[39,52812,52813],{"class":53}," []\n",[39,52815,52816,52818,52820,52823,52825,52827,52829,52831,52833,52836,52838,52840],{"class":41,"line":10880},[39,52817,4486],{"class":45},[39,52819,2772],{"class":53},[39,52821,52822],{"class":45},"let",[39,52824,10506],{"class":53},[39,52826,1117],{"class":45},[39,52828,26093],{"class":74},[39,52830,10513],{"class":53},[39,52832,2709],{"class":45},[39,52834,52835],{"class":74}," 4",[39,52837,4297],{"class":53},[39,52839,3389],{"class":45},[39,52841,89],{"class":53},[39,52843,52844],{"class":41,"line":10885},[39,52845,52846],{"class":128},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[39,52848,52849],{"class":41,"line":10891},[39,52850,52851],{"class":128},"            \u002F\u002F arr.push(num)\n",[39,52853,52854,52857,52860,52862,52865,52867,52870,52872,52875],{"class":41,"line":10912},[39,52855,52856],{"class":53},"            arr.",[39,52858,52859],{"class":49},"push",[39,52861,54],{"class":53},[39,52863,52864],{"class":49},"prompt",[39,52866,54],{"class":53},[39,52868,52869],{"class":237},"`请输入第${",[39,52871,1704],{"class":53},[39,52873,52874],{"class":237},"}季度的数据:`",[39,52876,31472],{"class":53},[39,52878,52879],{"class":41,"line":10918},[39,52880,52881],{"class":128},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[39,52883,52884],{"class":41,"line":10932},[39,52885,3622],{"class":53},[39,52887,52888],{"class":41,"line":10938},[39,52889,52890],{"class":128},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[39,52892,52893],{"class":41,"line":10965},[39,52894,52895],{"class":128},"        \u002F\u002F 盒子开头\n",[39,52897,52898,52901,52904,52906,52909],{"class":41,"line":10974},[39,52899,52900],{"class":53},"        document.",[39,52902,52903],{"class":49},"write",[39,52905,54],{"class":53},[39,52907,52908],{"class":237},"` \u003Cdiv class=\"box\">`",[39,52910,574],{"class":53},[39,52912,52913],{"class":41,"line":10980},[39,52914,122],{"emptyLinePlaceholder":121},[39,52916,52917],{"class":41,"line":10988},[39,52918,52919],{"class":128},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[39,52921,52922,52924,52926,52928,52930,52932,52934,52936,52938,52941,52944,52946,52948],{"class":41,"line":10993},[39,52923,4486],{"class":45},[39,52925,2772],{"class":53},[39,52927,52822],{"class":45},[39,52929,10506],{"class":53},[39,52931,1117],{"class":45},[39,52933,315],{"class":74},[39,52935,10513],{"class":53},[39,52937,2170],{"class":45},[39,52939,52940],{"class":53}," arr.",[39,52942,52943],{"class":74},"length",[39,52945,4297],{"class":53},[39,52947,3389],{"class":45},[39,52949,89],{"class":53},[39,52951,52952,52955,52957,52959],{"class":41,"line":17577},[39,52953,52954],{"class":53},"            document.",[39,52956,52903],{"class":49},[39,52958,54],{"class":53},[39,52960,52961],{"class":237},"`\n",[39,52963,52964,52967,52969,52971,52973,52975],{"class":41,"line":17583},[39,52965,52966],{"class":237},"              \u003Cdiv style=\"height: ${",[39,52968,4963],{"class":53},[39,52970,2150],{"class":237},[39,52972,1704],{"class":53},[39,52974,2200],{"class":237},[39,52976,52977],{"class":237},"}px;\">\n",[39,52979,52980,52983,52985,52987,52989,52991],{"class":41,"line":17606},[39,52981,52982],{"class":237},"                \u003Cspan>${",[39,52984,4963],{"class":53},[39,52986,2150],{"class":237},[39,52988,1704],{"class":53},[39,52990,2200],{"class":237},[39,52992,52993],{"class":237},"}\u003C\u002Fspan>\n",[39,52995,52996,52999,53001,53003,53005],{"class":41,"line":17612},[39,52997,52998],{"class":237},"                \u003Ch4>第${",[39,53000,1704],{"class":53},[39,53002,46541],{"class":45},[39,53004,26093],{"class":74},[39,53006,53007],{"class":237},"}季度\u003C\u002Fh4>\n",[39,53009,53010],{"class":41,"line":17635},[39,53011,53012],{"class":237},"              \u003C\u002Fdiv>          \n",[39,53014,53015,53018],{"class":41,"line":17649},[39,53016,53017],{"class":237},"            `",[39,53019,574],{"class":53},[39,53021,53022],{"class":41,"line":17669},[39,53023,3622],{"class":53},[39,53025,53026],{"class":41,"line":17675},[39,53027,53028],{"class":128},"        \u002F\u002F 盒子结尾\n",[39,53030,53031,53033,53035,53037,53040],{"class":41,"line":17686},[39,53032,52900],{"class":53},[39,53034,52903],{"class":49},[39,53036,54],{"class":53},[39,53038,53039],{"class":237},"` \u003C\u002Fdiv>`",[39,53041,574],{"class":53},[39,53043,53044,53046,53048],{"class":41,"line":17709},[39,53045,52751],{"class":53},[39,53047,52788],{"class":52275},[39,53049,52282],{"class":53},[39,53051,53052,53054,53056],{"class":41,"line":17731},[39,53053,52760],{"class":53},[39,53055,52775],{"class":52275},[39,53057,52282],{"class":53},[39,53059,53060],{"class":41,"line":17736},[39,53061,122],{"emptyLinePlaceholder":121},[39,53063,53064,53066,53068],{"class":41,"line":17742},[39,53065,52760],{"class":53},[39,53067,51610],{"class":52275},[39,53069,52282],{"class":53},[476,53071,53073],{"id":53072},"_284-冒泡排序","2.8.4 冒泡排序",[30,53075,53077],{"className":51608,"code":53076,"language":51610,"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",[26,53078,53079,53089,53103,53107,53115,53130,53150,53162,53170,53174,53182,53190,53222,53255,53292,53297,53316,53321,53334,53349,53365,53369,53374,53378,53388,53397,53405,53409],{"__ignoreMap":35},[39,53080,53081,53083,53085,53087],{"class":41,"line":42},[39,53082,52272],{"class":53},[39,53084,52276],{"class":52275},[39,53086,52279],{"class":49},[39,53088,52282],{"class":53},[39,53090,53091,53093,53095,53097,53099,53101],{"class":41,"line":92},[39,53092,2170],{"class":53},[39,53094,51610],{"class":52275},[39,53096,52291],{"class":49},[39,53098,1117],{"class":53},[39,53100,52296],{"class":237},[39,53102,52282],{"class":53},[39,53104,53105],{"class":41,"line":112},[39,53106,122],{"emptyLinePlaceholder":121},[39,53108,53109,53111,53113],{"class":41,"line":118},[39,53110,2170],{"class":53},[39,53112,52309],{"class":52275},[39,53114,52282],{"class":53},[39,53116,53117,53120,53122,53124,53126,53128],{"class":41,"line":125},[39,53118,53119],{"class":53},"  \u003C",[39,53121,52319],{"class":52275},[39,53123,52322],{"class":49},[39,53125,1117],{"class":53},[39,53127,52327],{"class":237},[39,53129,52282],{"class":53},[39,53131,53132,53134,53136,53138,53140,53142,53144,53146,53148],{"class":41,"line":132},[39,53133,53119],{"class":53},[39,53135,52319],{"class":52275},[39,53137,15893],{"class":49},[39,53139,1117],{"class":53},[39,53141,52366],{"class":237},[39,53143,52346],{"class":49},[39,53145,1117],{"class":53},[39,53147,52373],{"class":237},[39,53149,52282],{"class":53},[39,53151,53152,53154,53156,53158,53160],{"class":41,"line":138},[39,53153,53119],{"class":53},[39,53155,52382],{"class":52275},[39,53157,52385],{"class":53},[39,53159,52382],{"class":52275},[39,53161,52282],{"class":53},[39,53163,53164,53166,53168],{"class":41,"line":169},[39,53165,52760],{"class":53},[39,53167,52309],{"class":52275},[39,53169,52282],{"class":53},[39,53171,53172],{"class":41,"line":190},[39,53173,122],{"emptyLinePlaceholder":121},[39,53175,53176,53178,53180],{"class":41,"line":202},[39,53177,2170],{"class":53},[39,53179,52775],{"class":52275},[39,53181,52282],{"class":53},[39,53183,53184,53186,53188],{"class":41,"line":207},[39,53185,53119],{"class":53},[39,53187,52788],{"class":52275},[39,53189,52282],{"class":53},[39,53191,53192,53195,53197,53199,53202,53204,53206,53208,53210,53212,53214,53216,53218,53220],{"class":41,"line":212},[39,53193,53194],{"class":45},"    let",[39,53196,52808],{"class":53},[39,53198,1117],{"class":45},[39,53200,53201],{"class":53}," [",[39,53203,1583],{"class":74},[39,53205,63],{"class":53},[39,53207,1558],{"class":74},[39,53209,63],{"class":53},[39,53211,1339],{"class":74},[39,53213,63],{"class":53},[39,53215,1345],{"class":74},[39,53217,63],{"class":53},[39,53219,1483],{"class":74},[39,53221,34221],{"class":53},[39,53223,53224,53226,53228,53230,53232,53234,53236,53238,53240,53242,53244,53247,53249,53251,53253],{"class":41,"line":223},[39,53225,4284],{"class":45},[39,53227,2772],{"class":53},[39,53229,52822],{"class":45},[39,53231,10506],{"class":53},[39,53233,1117],{"class":45},[39,53235,315],{"class":74},[39,53237,10513],{"class":53},[39,53239,2170],{"class":45},[39,53241,52940],{"class":53},[39,53243,52943],{"class":74},[39,53245,53246],{"class":45}," -",[39,53248,26093],{"class":74},[39,53250,4297],{"class":53},[39,53252,3389],{"class":45},[39,53254,89],{"class":53},[39,53256,53257,53260,53262,53264,53266,53268,53270,53272,53274,53276,53278,53280,53282,53284,53286,53288,53290],{"class":41,"line":228},[39,53258,53259],{"class":45},"      for",[39,53261,2772],{"class":53},[39,53263,52822],{"class":45},[39,53265,10568],{"class":53},[39,53267,1117],{"class":45},[39,53269,315],{"class":74},[39,53271,10575],{"class":53},[39,53273,2170],{"class":45},[39,53275,52940],{"class":53},[39,53277,52943],{"class":74},[39,53279,53246],{"class":45},[39,53281,10506],{"class":53},[39,53283,1793],{"class":45},[39,53285,26093],{"class":74},[39,53287,10582],{"class":53},[39,53289,3389],{"class":45},[39,53291,89],{"class":53},[39,53293,53294],{"class":41,"line":263},[39,53295,53296],{"class":128},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[39,53298,53299,53301,53304,53306,53309,53311,53313],{"class":41,"line":287},[39,53300,3590],{"class":45},[39,53302,53303],{"class":53}," (arr[j] ",[39,53305,2220],{"class":45},[39,53307,53308],{"class":53}," arr[j ",[39,53310,101],{"class":45},[39,53312,26093],{"class":74},[39,53314,53315],{"class":53},"]) {\n",[39,53317,53318],{"class":41,"line":292},[39,53319,53320],{"class":128},"          \u002F\u002F 交换两个变量\n",[39,53322,53323,53326,53329,53331],{"class":41,"line":305},[39,53324,53325],{"class":45},"          let",[39,53327,53328],{"class":53}," tmp ",[39,53330,1117],{"class":45},[39,53332,53333],{"class":53}," arr[j]\n",[39,53335,53336,53339,53341,53343,53345,53347],{"class":41,"line":310},[39,53337,53338],{"class":53},"          arr[j] ",[39,53340,1117],{"class":45},[39,53342,53308],{"class":53},[39,53344,101],{"class":45},[39,53346,26093],{"class":74},[39,53348,34221],{"class":53},[39,53350,53351,53354,53356,53358,53360,53362],{"class":41,"line":321},[39,53352,53353],{"class":53},"          arr[j ",[39,53355,101],{"class":45},[39,53357,26093],{"class":74},[39,53359,5524],{"class":53},[39,53361,1117],{"class":45},[39,53363,53364],{"class":53}," tmp\n",[39,53366,53367],{"class":41,"line":713},[39,53368,3622],{"class":53},[39,53370,53371],{"class":41,"line":718},[39,53372,53373],{"class":53},"      }\n",[39,53375,53376],{"class":41,"line":723},[39,53377,3284],{"class":53},[39,53379,53380,53383,53385],{"class":41,"line":729},[39,53381,53382],{"class":53},"    document.",[39,53384,52903],{"class":49},[39,53386,53387],{"class":53},"(arr)\n",[39,53389,53390,53393,53395],{"class":41,"line":735},[39,53391,53392],{"class":53},"  \u003C\u002F",[39,53394,52788],{"class":52275},[39,53396,52282],{"class":53},[39,53398,53399,53401,53403],{"class":41,"line":741},[39,53400,52760],{"class":53},[39,53402,52775],{"class":52275},[39,53404,52282],{"class":53},[39,53406,53407],{"class":41,"line":747},[39,53408,122],{"emptyLinePlaceholder":121},[39,53410,53411,53413,53415],{"class":41,"line":753},[39,53412,52760],{"class":53},[39,53414,51610],{"class":52275},[39,53416,52282],{"class":53},[19,53418,53419],{},[2585,53420],{"alt":35,"src":53421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,53423,53424],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,53426,53427],{},"let arr = [4, 2, 5, 1, 3]",[19,53429,53430],{},"\u002F\u002F 1.升序排列写法",[19,53432,53433],{},"arr.sort(function (a, b) {",[19,53435,53436],{},"return a - b",[19,53438,53439],{},"})",[19,53441,53442],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,53444,53445],{},"\u002F\u002F 降序排列写法",[19,53447,53433],{},[19,53449,53450],{},"return b - a",[19,53452,53439],{},[19,53454,53455],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53457,53459],{"id":53458},"_29-函数","2.9 函数",[19,53461,53462],{},[2585,53463],{"alt":35,"src":53464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,53466,53467],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,53469,53470],{},"函数的声明用function",[19,53472,53473],{},"函数里边可以嵌套函数",[476,53475,53477],{"id":53476},"_291-函数传参","2.9.1 函数传参",[19,53479,53480],{},[2585,53481],{"alt":35,"src":53482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,53484,53485],{},[2585,53486],{"alt":35,"src":53487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[489,53489,53490,53493,53496,53499,53502,53505],{},[331,53491,53492],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[331,53494,53495],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[331,53497,53498],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[331,53500,53501],{},"开发中尽量保持形参和实参个数一致",[331,53503,53504],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[331,53506,53507],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53509,53510],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[476,53512,53514],{"id":53513},"_292-函数的返回值","2.9.2 函数的返回值",[19,53516,53517],{},[2585,53518],{"alt":35,"src":53519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53521,53522],{},[2585,53523],{"alt":35,"src":53524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[489,53526,53527,53530,53533,53536,53539],{},[331,53528,53529],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[331,53531,53532],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[331,53534,53535],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[331,53537,53538],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[331,53540,53541],{},"断点调试:进入函数内部看执行过程F11",[476,53543,53545],{"id":53544},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[30,53547,53549],{"className":51608,"code":53548,"language":51610,"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",[26,53550,53551,53556,53561,53565,53570],{"__ignoreMap":35},[39,53552,53553],{"class":41,"line":42},[39,53554,53555],{"class":53},"    function fn(a, b) {\n",[39,53557,53558],{"class":41,"line":92},[39,53559,53560],{"class":53},"      console.log(a + b);\n",[39,53562,53563],{"class":41,"line":112},[39,53564,3284],{"class":53},[39,53566,53567],{"class":41,"line":118},[39,53568,53569],{"class":53},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[39,53571,53572],{"class":41,"line":125},[39,53573,53574],{"class":53},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[476,53576,53578],{"id":53577},"_294-作用域","2.9.4 作用域",[489,53580,53581,53587,53592,53595,53598],{},[331,53582,53583,53584],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[350,53585,53586],{},"作用域",[331,53588,53589],{},[350,53590,53591],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[331,53593,53594],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[331,53596,53597],{},"函数内部可以直接所使用全局变量",[331,53599,53600],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53602,15606],{},[30,53604,53606],{"className":51608,"code":53605,"language":51610,"meta":35,"style":35},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[26,53607,53608,53613,53618,53622,53627,53632,53637],{"__ignoreMap":35},[39,53609,53610],{"class":41,"line":42},[39,53611,53612],{"class":53},"    function fun() {\n",[39,53614,53615],{"class":41,"line":92},[39,53616,53617],{"class":53},"      num = 10\n",[39,53619,53620],{"class":41,"line":112},[39,53621,3284],{"class":53},[39,53623,53624],{"class":41,"line":118},[39,53625,53626],{"class":53},"    fun()\n",[39,53628,53629],{"class":41,"line":125},[39,53630,53631],{"class":53},"    console.log(num)\n",[39,53633,53634],{"class":41,"line":132},[39,53635,53636],{"class":53},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[39,53638,53639],{"class":41,"line":138},[39,53640,53641],{"class":53},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[489,53643,53644,53647],{},[331,53645,53646],{},"函数内部的形参可以看做是局部变量",[331,53648,53649],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,53651,53652,53653],{},"变量访问原则： ",[350,53654,53655],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[476,53657,53659],{"id":53658},"_295-匿名函数","2.9.5 匿名函数",[19,53661,53662],{},"函数可以分为具名函数和匿名函数",[19,53664,53665],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[328,53667,53668],{},[331,53669,53670],{},"函数表达式",[19,53672,53673],{},[2585,53674],{"alt":35,"src":53675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,53677,53678],{},"里边也可以写参数",[19,53680,53681],{},"具名函数调用位置可以随意调整；",[19,53683,53684],{},"匿名函数函数表达式形式只能在声明后才可以使用",[328,53686,53687],{"start":92},[331,53688,53689],{},"立即执行函数",[19,53691,53692],{},[2585,53693],{"alt":35,"src":53694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,53696,53697],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,53699,53700],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53702,53703],{},"(function () {})();",[19,53705,53706],{},"不要落下最后的;",[19,53708,53709],{},"立即执行函数必须要加;",[19,53711,53712],{},"分号写前写后都没问题",[19,53714,53715],{},"写前：",[19,53717,53718],{},"(function() {})()",[19,53720,53721],{},";(function () {})();",[19,53723,53724],{},"写后:",[19,53726,53727],{},"(function() {})();",[19,53729,53703],{},[19,53731,53732],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,53734,53735],{},"还有一种写法：",[19,53737,53738],{},"(function(){}());",[19,53740,53741],{},"或者:",[19,53743,53744],{},"!function(){}();",[19,53746,53747],{},"立即执行函数有时候也是可以加名字的：",[19,53749,53750],{},"(function flexible(window,document) {}(window,document));",[19,53752,53753],{},"省一些调用方法",[476,53755,53757],{"id":53756},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,53759,53760],{},[2585,53761],{"alt":35,"src":53762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,53764,53765],{},"这样就不用非得给x,y初始化了",[19,53767,53768],{},[2585,53769],{"alt":35,"src":53770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,53772,53773],{},"代码执行时先看左边",[19,53775,53776],{},"例如：console.log(false && 3+5)",[19,53778,53779],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53781,53782],{},"&&都是真时，就返回最后一个真值",[19,53784,53785],{},"console.log(11 && 22)",[19,53787,53788],{},"输出22",[19,53790,53791],{},"逻辑与：遇真则真",[19,53793,15606],{},[19,53795,53796],{},"let age=1",[19,53798,53799],{},"console.log(11 || age++)",[19,53801,53802],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53804,53805],{},"console.log(11 || 22)",[19,53807,53808],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53810,53811],{},"||如果都是假的话，就取最后一个假的值了",[476,53813,53815],{"id":53814},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53817,53818],{},"显示转换：",[19,53820,53821,53824,53825],{},[350,53822,53823],{},"记忆","： ",[350,53826,53827],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53829,53830],{},"空字符串为假，其他字符串全为真",[19,53832,53833],{},[2585,53834],{"alt":35,"src":53835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53837,53838],{},"隐式转换：",[19,53840,53841],{},[2585,53842],{"alt":35,"src":53843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53845,53846],{},"隐式转换:",[19,53848,53849],{},"null+3=3",[19,53851,53852],{},"undefined+3=NaN",[19,53854,53855],{},"null==undefined 输出true,他两个都当0看",[19,53857,53858],{},"null===undefined 输出false",[19,53860,53861],{},"undefined做任何操作都是NaN",[19,53863,53864],{},"NaN不等于NaN，NaN表示计算错误",[14,53866,53868],{"id":53867},"_210-对象","2.10 对象",[476,53870,53872],{"id":53871},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53874,53875],{},"对象也是一种数据类型，里边的数据是无序的",[19,53877,53878],{},"对象由属性和方法组成",[19,53880,53881],{},[2585,53882],{"alt":35,"src":53883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53885,53886],{},[2585,53887],{"alt":35,"src":53888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53890,53891],{},[2585,53892],{"alt":35,"src":53893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[476,53895,53897],{"id":53896},"_2102-对象属性","2.10.2 对象属性",[19,53899,53900],{},[2585,53901],{"alt":35,"src":53902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[328,53904,53905],{},[331,53906,53907],{},"查询对象",[19,53909,53910],{},"对象名.属性 goods.uname",[19,53912,53913],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53915,53916],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53918,53919],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53921,53922],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[328,53924,53925],{"start":92},[331,53926,53927],{},"重新赋值",[19,53929,53930],{},"对象名.属性=新值",[328,53932,53933],{"start":112},[331,53934,53935],{},"增加新数据",[19,53937,53930],{},[328,53939,53940],{"start":118},[331,53941,53942],{},"删除对象中的属性",[19,53944,53945],{},"delete 对象名.属性",[476,53947,53949],{"id":53948},"_2103-对象方法","2.10.3 对象方法",[19,53951,53952],{},[2585,53953],{"alt":35,"src":53954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53956,53957],{},"后边跟的是匿名函数",[19,53959,53960],{},"对象外面的叫函数；对象内部的叫方法",[19,53962,53963],{},[2585,53964],{"alt":35,"src":53965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[476,53967,53969],{"id":53968},"_2104-遍历对象","2.10.4 遍历对象",[19,53971,53972],{},"理解为加括号的python字典遍历",[19,53974,53975],{},[2585,53976],{"alt":35,"src":53977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53979,53980],{},"k是字符串类型",[19,53982,53983],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[30,53985,53987],{"className":51608,"code":53986,"language":51610,"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",[26,53988,53989,53994,53999,54004,54009],{"__ignoreMap":35},[39,53990,53991],{"class":41,"line":42},[39,53992,53993],{"class":53},"   let arr = [1, 2, 3]\n",[39,53995,53996],{"class":41,"line":92},[39,53997,53998],{"class":53},"    for (let k in arr) {\n",[39,54000,54001],{"class":41,"line":112},[39,54002,54003],{"class":53},"      console.log(k)\n",[39,54005,54006],{"class":41,"line":118},[39,54007,54008],{"class":53},"      console.log(arr[k])\n",[39,54010,54011],{"class":41,"line":125},[39,54012,3284],{"class":53},[19,54014,54015],{},[2585,54016],{"alt":35,"src":54017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54019,54020],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54022,54023],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54025,54026],{},"for in 得到的k是属性名",[52788,54028,54029],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[19,54031,54032],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[476,54034,54036],{"id":54035},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54038,54039],{},"数组中放对象信息",[30,54041,54045],{"className":54042,"code":54043,"language":54044,"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",[26,54046,54047,54055,54060,54065,54070,54075,54080,54085,54090,54095,54100,54105,54110,54114,54118],{"__ignoreMap":35},[39,54048,54049,54051,54053],{"class":41,"line":42},[39,54050,2170],{"class":53},[39,54052,52788],{"class":52275},[39,54054,52282],{"class":53},[39,54056,54057],{"class":41,"line":92},[39,54058,54059],{"class":53},"    let students = [\n",[39,54061,54062],{"class":41,"line":112},[39,54063,54064],{"class":53},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[39,54066,54067],{"class":41,"line":118},[39,54068,54069],{"class":53},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[39,54071,54072],{"class":41,"line":125},[39,54073,54074],{"class":53},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[39,54076,54077],{"class":41,"line":132},[39,54078,54079],{"class":53},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[39,54081,54082],{"class":41,"line":138},[39,54083,54084],{"class":53},"    ]\n",[39,54086,54087],{"class":41,"line":169},[39,54088,54089],{"class":53},"    for (let i = 0; i \u003C students.length; i++) {\n",[39,54091,54092],{"class":41,"line":190},[39,54093,54094],{"class":53},"      for (let k in students[i]) {\n",[39,54096,54097],{"class":41,"line":202},[39,54098,54099],{"class":53},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[39,54101,54102],{"class":41,"line":207},[39,54103,54104],{"class":53},"        \u002F\u002F输出每个人的名字：\n",[39,54106,54107],{"class":41,"line":212},[39,54108,54109],{"class":53},"        \u002F\u002Fconsole.log(students[i].name)\n",[39,54111,54112],{"class":41,"line":223},[39,54113,53373],{"class":53},[39,54115,54116],{"class":41,"line":228},[39,54117,3284],{"class":53},[39,54119,54120,54122,54124],{"class":41,"line":263},[39,54121,53392],{"class":53},[39,54123,52788],{"class":52275},[39,54125,52282],{"class":53},[476,54127,54129],{"id":54128},"_2106-内置对象","2.10.6 内置对象",[19,54131,54132],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[328,54134,54135],{},[331,54136,54137],{},"数学对象Math",[19,54139,54140],{},[2585,54141],{"alt":35,"src":54142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54144,54145],{},[922,54146,54149],{"href":54147,"rel":54148},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24839],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54151,54152],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54154,54155],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54157,54158],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54160,54161],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54163,54164],{},"null属于对象数据类型",[328,54166,54167],{"start":92},[331,54168,54169],{},"生成任意范围随机数",[19,54171,54172],{},[2585,54173],{"alt":35,"src":54174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54176,54177],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54179,54180],{},"乘以几就取不到几",[19,54182,54183],{},"取数组中的随机元素：",[19,54185,54186],{},"let arr = ['red', 'green', 'blue']",[19,54188,54189],{},"let random = Math.floor(Math.random() * arr.length)",[19,54191,54192],{},"console.log(arr[random])",[19,54194,54195],{},"这个函数得到的是全闭区间",[19,54197,54198],{},"function getRandom(N, M) {",[19,54200,54201],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,54203,2206],{},[19,54205,54206],{},"console.log(getRandom(4, 8))",[476,54208,54210],{"id":54209},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,54212,54213],{},[2585,54214],{"alt":35,"src":54215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,54217,54218],{},[2585,54219],{"alt":35,"src":54220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,54222,54223],{},[2585,54224],{"alt":35,"src":54225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,54227,54228],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,54230,54231],{},[2585,54232],{"alt":35,"src":54233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,54235,54236],{},[2585,54237],{"alt":35,"src":54238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,54240,54241],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,54243,54244],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,54246,54247],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1192,54249,54250],{},"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":92,"depth":92,"links":54252},[54253,54261,54262,54263,54264,54265,54272,54276,54282,54291],{"id":51443,"depth":92,"text":51444,"children":54254},[54255,54256,54257,54258,54259,54260],{"id":51447,"depth":112,"text":51448},{"id":51464,"depth":112,"text":51465},{"id":51504,"depth":112,"text":51505},{"id":51516,"depth":112,"text":51517},{"id":51525,"depth":112,"text":51526},{"id":51573,"depth":112,"text":51574},{"id":51583,"depth":92,"text":51584},{"id":51671,"depth":92,"text":51672},{"id":51694,"depth":92,"text":51695},{"id":51706,"depth":92,"text":51707},{"id":51893,"depth":92,"text":51894,"children":54266},[54267,54268,54269,54270,54271],{"id":51897,"depth":112,"text":51898},{"id":51906,"depth":112,"text":51907},{"id":51934,"depth":112,"text":51935},{"id":51970,"depth":112,"text":51971},{"id":51995,"depth":112,"text":51996},{"id":52007,"depth":92,"text":52008,"children":54273},[54274,54275],{"id":52028,"depth":112,"text":52029},{"id":52122,"depth":112,"text":52123},{"id":52180,"depth":92,"text":52181,"children":54277},[54278,54279,54280,54281],{"id":52184,"depth":112,"text":52185},{"id":52208,"depth":112,"text":52209},{"id":52261,"depth":112,"text":52262},{"id":53072,"depth":112,"text":53073},{"id":53458,"depth":92,"text":53459,"children":54283},[54284,54285,54286,54287,54288,54289,54290],{"id":53476,"depth":112,"text":53477},{"id":53513,"depth":112,"text":53514},{"id":53544,"depth":112,"text":53545},{"id":53577,"depth":112,"text":53578},{"id":53658,"depth":112,"text":53659},{"id":53756,"depth":112,"text":53757},{"id":53814,"depth":112,"text":53815},{"id":53867,"depth":92,"text":53868,"children":54292},[54293,54294,54295,54296,54297,54298,54299],{"id":53871,"depth":112,"text":53872},{"id":53896,"depth":112,"text":53897},{"id":53948,"depth":112,"text":53949},{"id":53968,"depth":112,"text":53969},{"id":54035,"depth":112,"text":54036},{"id":54128,"depth":112,"text":54129},{"id":54209,"depth":112,"text":54210},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51435,"description":24350},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54306,"title":54307,"body":54308,"description":24350,"extension":1203,"meta":77648,"navigation":121,"path":77649,"seo":77650,"stem":77651,"__hash__":77652},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54309,"toc":77588},[54310,54313,54316,54319,54324,54327,54330,54333,54337,54341,54347,54352,54360,54367,54370,54374,54379,54384,54389,54392,54395,54406,54409,54413,54416,54419,54424,54429,54434,54437,54440,54532,54535,54540,54543,54548,54551,54554,54559,54562,54567,54571,54574,54588,54592,54597,54600,54603,54607,54612,54615,54619,54623,54628,54632,54637,54640,54643,54646,54649,54652,54655,54660,54665,54693,54696,54699,54702,54707,54710,54713,54716,54719,54723,54752,54756,54761,54766,54769,54772,54775,54780,54895,54900,54905,55066,55071,55074,55078,55083,55088,55091,55094,55097,55100,55103,55106,55109,55112,55115,55118,55121,55124,55127,55130,55132,55135,55138,55141,55146,55150,55547,55550,55556,55560,55565,56847,56852,56855,56858,56861,56866,58062,58066,58072,58077,58080,58085,58090,58094,58098,58103,58106,58111,58114,58117,58121,59029,59032,59036,59257,59260,59263,59266,59492,59495,59719,59722,59726,59731,59734,59737,59965,59968,60001,60004,60008,60013,60017,60020,60023,60026,60029,60032,60035,60038,60043,61323,61327,61330,62423,62427,62430,62433,62436,62439,62443,62446,62449,62451,62459,63940,63944,63947,63950,63953,64162,64165,64169,64173,64178,64183,64186,64189,64194,64198,64203,64206,64315,64319,64324,64329,64332,64335,64339,64344,64349,64354,64357,64360,64371,64374,64379,64384,64387,64390,64463,64467,64472,64475,64477,64488,64492,64497,65823,65826,65829,65832,65834,65837,65840,65843,65846,65849,65852,65855,65858,65861,65864,65867,65870,65872,65874,65877,65881,66975,66978,66981,66997,67011,67014,67019,67025,67030,67034,67038,67043,67047,67052,67494,67499,67502,67506,67511,67514,67517,67521,67526,67530,67535,67540,67544,67549,67554,67557,67562,67567,67571,67576,67581,67685,67688,67692,67697,68063,68066,68069,68072,68075,68078,68081,68084,68087,69383,69387,69392,69397,69400,69403,69406,69409,69411,69416,69421,69424,69428,69433,69438,69443,69446,69449,69452,69455,69458,69463,69466,69470,69475,69480,69484,69489,69492,69497,69500,69503,69506,69509,69512,69517,69520,69523,69526,69529,69533,69538,69541,69545,69550,69553,69556,69560,69589,69592,69596,69600,69605,69609,69614,69617,69620,69623,69626,69629,69632,69635,69638,69641,69644,69647,69650,69653,69656,69660,69665,69670,69673,69677,69681,69686,69689,69693,69696,69699,69704,69709,69714,69719,69724,69727,69730,69735,69740,69744,69749,69752,69757,69760,69763,69766,69769,69774,69777,69786,69790,69795,69798,69801,69805,69808,69813,69817,69820,69826,69832,69836,69862,69865,71426,71429,71925,71928,71933,71938,71943,71947,71952,71957,71962,71966,71971,71974,71977,71980,71983,71987,71990,71995,71998,72003,72007,72012,72015,72020,72025,72030,72033,72036,72041,72046,72049,72052,72056,72059,72064,72067,72072,72075,72080,72085,72090,72093,72098,72163,72166,72177,72181,72186,72358,72362,72367,72370,72373,72376,72380,72391,72395,72398,72403,72408,72411,72414,72417,72420,72423,72425,72428,72431,72434,72439,72442,72447,72450,72454,72457,72460,72474,72478,72481,72536,72541,72544,72547,72552,72555,72559,72564,72694,72698,72703,72708,72789,72794,72798,72801,72806,72811,72817,72820,72823,72826,72830,72835,72838,72849,72853,72870,75917,75921,75924,75927,75930,75951,75955,75958,75966,75969,75974,75977,75980,75985,75990,75994,76015,76019,76024,76027,76030,76033,76036,76040,76045,76048,76052,76057,76060,76065,76068,76073,76076,76081,77284,77288,77293,77296,77301,77585],[10,54311,54307],{"id":54312},"_3web-apis",[19,54314,54315],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,54317,54318],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,54320,54321],{},[2585,54322],{"alt":35,"src":54323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,54325,54326],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,54328,54329],{},"建议数组和对象使用 const 来声明",[19,54331,54332],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54334,54336],{"id":54335},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[476,54338,54340],{"id":54339},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,54342,54343,54346],{},[26,54344,54345],{},"document"," = HTML 文件解析后的对象化表示；",[19,54348,54349,54351],{},[26,54350,54345],{}," ≠ HTML 文件本身",[19,54353,54354,54359],{},[350,54355,54356],{},[26,54357,54358],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,54361,54362,54366],{},[350,54363,54364],{},[26,54365,54345],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,54368,54369],{},"document实际上为window.document的简写",[476,54371,54373],{"id":54372},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,54375,54376],{},[2585,54377],{"alt":35,"src":54378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,54380,54381],{},[2585,54382],{"alt":35,"src":54383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,54385,54386],{},[2585,54387],{"alt":35,"src":54388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,54390,54391],{},"console.dir()",[19,54393,54394],{},"dir用来打印对象",[489,54396,54397,54400,54403],{},[331,54398,54399],{},"任何一个标签，都是一个对象",[331,54401,54402],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[331,54404,54405],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,54407,54408],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[476,54410,54412],{"id":54411},"_312-获取dom对象","3.1.2 获取DoM对象",[19,54414,54415],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,54417,54418],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,54420,54421],{},[350,54422,54423],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[328,54425,54426],{},[331,54427,54428],{},"利用CSS选择器来获取标签元素",[19,54430,54431],{},[2585,54432],{"alt":35,"src":54433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,54435,54436],{},"里边的选择器必须必须加引号！！！",[19,54438,54439],{},"只选择第一个元素",[30,54441,54443],{"className":54042,"code":54442,"language":54044,"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",[26,54444,54445,54453,54474,54493,54501,54506,54511,54516,54524],{"__ignoreMap":35},[39,54446,54447,54449,54451],{"class":41,"line":42},[39,54448,2170],{"class":53},[39,54450,52775],{"class":52275},[39,54452,52282],{"class":53},[39,54454,54455,54457,54459,54462,54464,54467,54470,54472],{"class":41,"line":92},[39,54456,53119],{"class":53},[39,54458,52586],{"class":52275},[39,54460,54461],{"class":49}," class",[39,54463,1117],{"class":53},[39,54465,54466],{"class":237},"\"box\"",[39,54468,54469],{"class":53},">123\u003C\u002F",[39,54471,52586],{"class":52275},[39,54473,52282],{"class":53},[39,54475,54476,54478,54480,54482,54484,54486,54489,54491],{"class":41,"line":112},[39,54477,53119],{"class":53},[39,54479,52586],{"class":52275},[39,54481,54461],{"class":49},[39,54483,1117],{"class":53},[39,54485,54466],{"class":237},[39,54487,54488],{"class":53},">456\u003C\u002F",[39,54490,52586],{"class":52275},[39,54492,52282],{"class":53},[39,54494,54495,54497,54499],{"class":41,"line":118},[39,54496,53119],{"class":53},[39,54498,52788],{"class":52275},[39,54500,52282],{"class":53},[39,54502,54503],{"class":41,"line":125},[39,54504,54505],{"class":53},"    \u002F\u002F 1.获取匹配的第一个元素\n",[39,54507,54508],{"class":41,"line":132},[39,54509,54510],{"class":53},"    const box = document.querySelector('div')\n",[39,54512,54513],{"class":41,"line":138},[39,54514,54515],{"class":53},"    console.dir(box)\n",[39,54517,54518,54520,54522],{"class":41,"line":169},[39,54519,53392],{"class":53},[39,54521,52788],{"class":52275},[39,54523,52282],{"class":53},[39,54525,54526,54528,54530],{"class":41,"line":190},[39,54527,52760],{"class":53},[39,54529,52775],{"class":52275},[39,54531,52282],{"class":53},[19,54533,54534],{},"只选123，不选456",[19,54536,54537],{},[2585,54538],{"alt":35,"src":54539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54541,54542],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54544,54545],{},[2585,54546],{"alt":35,"src":54547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54549,54550],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54552,54553],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[328,54555,54556],{"start":92},[331,54557,54558],{},"其他方法来获取标签元素",[19,54560,54561],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54563,54564],{},[2585,54565],{"alt":35,"src":54566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[476,54568,54570],{"id":54569},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54572,54573],{},"设置修改DOM元素内容有两种方式：",[489,54575,54576,54579,54582,54585],{},[331,54577,54578],{},"元素.innerText=''",[331,54580,54581],{},"元素.innerHTML=''",[331,54583,54584],{},"不写字符串输出数字也是可以的",[331,54586,54587],{},"元素.innerHtml=1",[22971,54589,54591],{"id":54590},"_3131-innertext","3.1.3.1 innerText",[19,54593,54594],{},[2585,54595],{"alt":35,"src":54596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54598,54599],{},"思路：实现了修改盒子中的内容！",[19,54601,54602],{},"它只显示纯文本，不解析标签",[22971,54604,54606],{"id":54605},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54608,54609],{},[2585,54610],{"alt":35,"src":54611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54613,54614],{},"相比于innerText，他的强大之处在于可以解析标签",[476,54616,54618],{"id":54617},"_314-操作元素属性","3.1.4 操作元素属性",[22971,54620,54622],{"id":54621},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54624,54625],{},[2585,54626],{"alt":35,"src":54627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22971,54629,54631],{"id":54630},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54633,54634],{},[2585,54635],{"alt":35,"src":54636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54638,54639],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54641,54642],{},"div.style.backgroundColor = 'hotpink'",[19,54644,54645],{},"如果按照css的写法，-表示减，就会出错",[19,54647,54648],{},"body元素不需要再获取，直接用就行！！！！！！",[19,54650,54651],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,54653,54654],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,54656,54657],{},[2585,54658],{"alt":35,"src":54659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,54661,54662],{},[2585,54663],{"alt":35,"src":54664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[328,54666,54667,54670,54673,54676,54679,54682],{},[331,54668,54669],{},"className这个方式就是修改很多样式的时候来使用的！",[331,54671,54672],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[331,54674,54675],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[331,54677,54678],{},"className为属性名，如果还用class的话就导致与关键字冲突",[331,54680,54681],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[331,54683,54684,54685,54690],{},"解析标签的时候就变为了",[52586,54686],{"className":54687},[54688,54689],"nav","box",[54691,54692],"br",{},[19,54694,54695],{},"例子：",[52586,54697],{"className":54698},[54688],[52788,54700,54701],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54703,54704],{},[2585,54705],{"alt":35,"src":54706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54708,54709],{},"追加和删除类名用classList",[19,54711,54712],{},"常用于类似于开关的操作",[19,54714,54715],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54717,54718],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22971,54720,54722],{"id":54721},"_3143-牢记点","3.1.4.3 牢记点",[328,54724,54725,54728,54731,54734,54737,54740,54743,54746,54749],{},[331,54726,54727],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[331,54729,54730],{},"使用style属性操作css时不要忘记引号",[331,54732,54733],{},"使用className或者classList时也不要忘记引号",[331,54735,54736],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[331,54738,54739],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[331,54741,54742],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[331,54744,54745],{},"若： let arr=['1','2',3] arr[0]=1",[331,54747,54748],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[331,54750,54751],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[476,54753,54755],{"id":54754},"_315-操作表单元素","3.1.5 操作表单元素",[328,54757,54758],{},[331,54759,54760],{},"天生的属性",[19,54762,54763],{},[2585,54764],{"alt":35,"src":54765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,54767,54768],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,54770,54771],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,54773,54774],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54776,54777],{},[2585,54778],{"alt":35,"src":54779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[30,54781,54783],{"className":51608,"code":54782,"language":51610,"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",[26,54784,54785,54790,54822,54827,54832,54837,54842,54846,54851,54856,54873,54885,54890],{"__ignoreMap":35},[39,54786,54787],{"class":41,"line":42},[39,54788,54789],{"class":53},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[39,54791,54792,54794,54797,54800,54802,54805,54807,54809,54811,54813,54815,54817,54820],{"class":41,"line":92},[39,54793,2170],{"class":53},[39,54795,54796],{"class":52275},"input",[39,54798,54799],{"class":49}," type",[39,54801,1117],{"class":53},[39,54803,54804],{"class":237},"\"checkbox\"",[39,54806,15893],{"class":49},[39,54808,1117],{"class":53},[39,54810,8726],{"class":237},[39,54812,15932],{"class":49},[39,54814,1117],{"class":53},[39,54816,8726],{"class":237},[39,54818,54819],{"class":49}," checked",[39,54821,52282],{"class":53},[39,54823,54824],{"class":41,"line":112},[39,54825,54826],{"class":53},"不选的话：\n",[39,54828,54829],{"class":41,"line":118},[39,54830,54831],{"class":53},"const input = document.querySelector('input')\n",[39,54833,54834],{"class":41,"line":125},[39,54835,54836],{"class":53},"input.checked=false\n",[39,54838,54839],{"class":41,"line":132},[39,54840,54841],{"class":53},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[39,54843,54844],{"class":41,"line":138},[39,54845,122],{"emptyLinePlaceholder":121},[39,54847,54848],{"class":41,"line":169},[39,54849,54850],{"class":53},"禁用按钮：\n",[39,54852,54853],{"class":41,"line":190},[39,54854,54855],{"class":53},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[39,54857,54858,54860,54863,54866,54869,54871],{"class":41,"line":202},[39,54859,2170],{"class":53},[39,54861,54862],{"class":52275},"button",[39,54864,54865],{"class":49}," disabled",[39,54867,54868],{"class":53},">点击\u003C\u002F",[39,54870,54862],{"class":52275},[39,54872,52282],{"class":53},[39,54874,54875,54877,54879,54881,54883],{"class":41,"line":207},[39,54876,2170],{"class":53},[39,54878,54862],{"class":52275},[39,54880,54868],{"class":53},[39,54882,54862],{"class":52275},[39,54884,52282],{"class":53},[39,54886,54887],{"class":41,"line":212},[39,54888,54889],{"class":53},"const bt = document.querySelector('button')\n",[39,54891,54892],{"class":41,"line":223},[39,54893,54894],{"class":53},"bt.disabled = false\n",[328,54896,54897],{"start":92},[331,54898,54899],{},"自定义属性",[19,54901,54902],{},[2585,54903],{"alt":35,"src":54904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[30,54906,54908],{"className":54042,"code":54907,"language":54044,"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",[26,54909,54910,54918,54946,54965,54984,55003,55022,55030,55035,55040,55045,55050,55058],{"__ignoreMap":35},[39,54911,54912,54914,54916],{"class":41,"line":42},[39,54913,2170],{"class":53},[39,54915,52775],{"class":52275},[39,54917,52282],{"class":53},[39,54919,54920,54922,54924,54927,54929,54931,54934,54936,54939,54942,54944],{"class":41,"line":92},[39,54921,53119],{"class":53},[39,54923,52586],{"class":52275},[39,54925,54926],{"class":49}," data-id",[39,54928,1117],{"class":53},[39,54930,4761],{"class":237},[39,54932,54933],{"class":49}," data-spm",[39,54935,1117],{"class":53},[39,54937,54938],{"class":237},"\"我不知道\"",[39,54940,54941],{"class":53},">1\u003C\u002F",[39,54943,52586],{"class":52275},[39,54945,52282],{"class":53},[39,54947,54948,54950,54952,54954,54956,54958,54961,54963],{"class":41,"line":112},[39,54949,53119],{"class":53},[39,54951,52586],{"class":52275},[39,54953,54926],{"class":49},[39,54955,1117],{"class":53},[39,54957,4784],{"class":237},[39,54959,54960],{"class":53},">2\u003C\u002F",[39,54962,52586],{"class":52275},[39,54964,52282],{"class":53},[39,54966,54967,54969,54971,54973,54975,54977,54980,54982],{"class":41,"line":118},[39,54968,53119],{"class":53},[39,54970,52586],{"class":52275},[39,54972,54926],{"class":49},[39,54974,1117],{"class":53},[39,54976,4797],{"class":237},[39,54978,54979],{"class":53},">3\u003C\u002F",[39,54981,52586],{"class":52275},[39,54983,52282],{"class":53},[39,54985,54986,54988,54990,54992,54994,54996,54999,55001],{"class":41,"line":125},[39,54987,53119],{"class":53},[39,54989,52586],{"class":52275},[39,54991,54926],{"class":49},[39,54993,1117],{"class":53},[39,54995,4810],{"class":237},[39,54997,54998],{"class":53},">4\u003C\u002F",[39,55000,52586],{"class":52275},[39,55002,52282],{"class":53},[39,55004,55005,55007,55009,55011,55013,55015,55018,55020],{"class":41,"line":132},[39,55006,53119],{"class":53},[39,55008,52586],{"class":52275},[39,55010,54926],{"class":49},[39,55012,1117],{"class":53},[39,55014,4831],{"class":237},[39,55016,55017],{"class":53},">5\u003C\u002F",[39,55019,52586],{"class":52275},[39,55021,52282],{"class":53},[39,55023,55024,55026,55028],{"class":41,"line":138},[39,55025,53119],{"class":53},[39,55027,52788],{"class":52275},[39,55029,52282],{"class":53},[39,55031,55032],{"class":41,"line":169},[39,55033,55034],{"class":53},"    const one = document.querySelector('div')\n",[39,55036,55037],{"class":41,"line":190},[39,55038,55039],{"class":53},"    console.log(one.dataset)\n",[39,55041,55042],{"class":41,"line":202},[39,55043,55044],{"class":53},"    console.log(one.dataset.id)\n",[39,55046,55047],{"class":41,"line":207},[39,55048,55049],{"class":53},"    console.log(one.dataset.spm)\n",[39,55051,55052,55054,55056],{"class":41,"line":212},[39,55053,53392],{"class":53},[39,55055,52788],{"class":52275},[39,55057,52282],{"class":53},[39,55059,55060,55062,55064],{"class":41,"line":223},[39,55061,52760],{"class":53},[39,55063,52775],{"class":52275},[39,55065,52282],{"class":53},[19,55067,55068],{},[2585,55069],{"alt":35,"src":55070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55072,55073],{},"document.querySelector选择的是第一个对象（元素）",[476,55075,55077],{"id":55076},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55079,55080],{},[2585,55081],{"alt":35,"src":55082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55084,55085],{},[2585,55086],{"alt":35,"src":55087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55089,55090],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52788,55092,55093],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55095,55096],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52788,55098,55099],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[19,55101,55102],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55104,55105],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55107,55108],{},"单位为毫秒！！！",[19,55110,55111],{},"可以搭配匿名函数来用！！！",[19,55113,55114],{},"setInterval(function () {",[19,55116,55117],{},"alert('两秒执行一次')",[19,55119,55120],{},"}, 2000)",[19,55122,55123],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55125,55126],{},"function fn() {",[19,55128,55129],{},"document.write(1)",[19,55131,2206],{},[19,55133,55134],{},"setInterval(fn, 1000)",[19,55136,55137],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55139,55140],{},"setInterval('fn()', 1000)",[19,55142,55143],{},[2585,55144],{"alt":35,"src":55145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22971,55147,55149],{"id":55148},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[30,55151,55153],{"className":51608,"code":55152,"language":51610,"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",[26,55154,55155,55165,55179,55183,55191,55205,55225,55237,55245,55249,55257,55294,55299,55304,55309,55317,55325,55347,55355,55360,55382,55387,55392,55403,55408,55428,55436,55451,55466,55477,55482,55492,55502,55506,55515,55519,55527,55535,55539],{"__ignoreMap":35},[39,55156,55157,55159,55161,55163],{"class":41,"line":42},[39,55158,52272],{"class":53},[39,55160,52276],{"class":52275},[39,55162,52279],{"class":49},[39,55164,52282],{"class":53},[39,55166,55167,55169,55171,55173,55175,55177],{"class":41,"line":92},[39,55168,2170],{"class":53},[39,55170,51610],{"class":52275},[39,55172,52291],{"class":49},[39,55174,1117],{"class":53},[39,55176,52296],{"class":237},[39,55178,52282],{"class":53},[39,55180,55181],{"class":41,"line":112},[39,55182,122],{"emptyLinePlaceholder":121},[39,55184,55185,55187,55189],{"class":41,"line":118},[39,55186,2170],{"class":53},[39,55188,52309],{"class":52275},[39,55190,52282],{"class":53},[39,55192,55193,55195,55197,55199,55201,55203],{"class":41,"line":125},[39,55194,53119],{"class":53},[39,55196,52319],{"class":52275},[39,55198,52322],{"class":49},[39,55200,1117],{"class":53},[39,55202,52327],{"class":237},[39,55204,52282],{"class":53},[39,55206,55207,55209,55211,55213,55215,55217,55219,55221,55223],{"class":41,"line":132},[39,55208,53119],{"class":53},[39,55210,52319],{"class":52275},[39,55212,15893],{"class":49},[39,55214,1117],{"class":53},[39,55216,52366],{"class":237},[39,55218,52346],{"class":49},[39,55220,1117],{"class":53},[39,55222,52373],{"class":237},[39,55224,52282],{"class":53},[39,55226,55227,55229,55231,55233,55235],{"class":41,"line":138},[39,55228,53119],{"class":53},[39,55230,52382],{"class":52275},[39,55232,52385],{"class":53},[39,55234,52382],{"class":52275},[39,55236,52282],{"class":53},[39,55238,55239,55241,55243],{"class":41,"line":169},[39,55240,52760],{"class":53},[39,55242,52309],{"class":52275},[39,55244,52282],{"class":53},[39,55246,55247],{"class":41,"line":190},[39,55248,122],{"emptyLinePlaceholder":121},[39,55250,55251,55253,55255],{"class":41,"line":202},[39,55252,2170],{"class":53},[39,55254,52775],{"class":52275},[39,55256,52282],{"class":53},[39,55258,55259,55261,55264,55266,55268,55270,55272,55274,55276,55279,55281,55284,55287,55289,55292],{"class":41,"line":207},[39,55260,53119],{"class":53},[39,55262,55263],{"class":52275},"textarea",[39,55265,15893],{"class":49},[39,55267,1117],{"class":53},[39,55269,8726],{"class":237},[39,55271,15932],{"class":49},[39,55273,1117],{"class":53},[39,55275,8726],{"class":237},[39,55277,55278],{"class":49}," cols",[39,55280,1117],{"class":53},[39,55282,55283],{"class":237},"\"30\"",[39,55285,55286],{"class":49}," rows",[39,55288,1117],{"class":53},[39,55290,55291],{"class":237},"\"10\"",[39,55293,52282],{"class":53},[39,55295,55296],{"class":41,"line":212},[39,55297,55298],{"class":53},"        用户注册协议\n",[39,55300,55301],{"class":41,"line":223},[39,55302,55303],{"class":53},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[39,55305,55306],{"class":41,"line":228},[39,55307,55308],{"class":53},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[39,55310,55311,55313,55315],{"class":41,"line":263},[39,55312,52751],{"class":53},[39,55314,55263],{"class":52275},[39,55316,52282],{"class":53},[39,55318,55319,55321,55323],{"class":41,"line":287},[39,55320,53119],{"class":53},[39,55322,54691],{"class":52275},[39,55324,52282],{"class":53},[39,55326,55327,55329,55331,55333,55335,55338,55340,55343,55345],{"class":41,"line":292},[39,55328,53119],{"class":53},[39,55330,54862],{"class":52275},[39,55332,54461],{"class":49},[39,55334,1117],{"class":53},[39,55336,55337],{"class":237},"\"btn\"",[39,55339,54865],{"class":49},[39,55341,55342],{"class":53},">我已经阅读用户协议(5)\u003C\u002F",[39,55344,54862],{"class":52275},[39,55346,52282],{"class":53},[39,55348,55349,55351,55353],{"class":41,"line":305},[39,55350,53119],{"class":53},[39,55352,52788],{"class":52275},[39,55354,52282],{"class":53},[39,55356,55357],{"class":41,"line":310},[39,55358,55359],{"class":128},"    \u002F\u002F 1. 获取元素\n",[39,55361,55362,55364,55367,55369,55372,55375,55377,55380],{"class":41,"line":321},[39,55363,12283],{"class":45},[39,55365,55366],{"class":74}," btn",[39,55368,71],{"class":45},[39,55370,55371],{"class":53}," document.",[39,55373,55374],{"class":49},"querySelector",[39,55376,54],{"class":53},[39,55378,55379],{"class":237},"'.btn'",[39,55381,574],{"class":53},[39,55383,55384],{"class":41,"line":713},[39,55385,55386],{"class":128},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[39,55388,55389],{"class":41,"line":718},[39,55390,55391],{"class":128},"    \u002F\u002F 2. 倒计时\n",[39,55393,55394,55396,55398,55400],{"class":41,"line":723},[39,55395,53194],{"class":45},[39,55397,10506],{"class":53},[39,55399,1117],{"class":45},[39,55401,55402],{"class":74}," 5\n",[39,55404,55405],{"class":41,"line":729},[39,55406,55407],{"class":128},"    \u002F\u002F 2.1 开启定时器\n",[39,55409,55410,55412,55415,55417,55420,55422,55425],{"class":41,"line":735},[39,55411,53194],{"class":45},[39,55413,55414],{"class":53}," n ",[39,55416,1117],{"class":45},[39,55418,55419],{"class":49}," setInterval",[39,55421,54],{"class":53},[39,55423,55424],{"class":45},"function",[39,55426,55427],{"class":53}," () {\n",[39,55429,55430,55433],{"class":41,"line":741},[39,55431,55432],{"class":53},"      i",[39,55434,55435],{"class":45},"--\n",[39,55437,55438,55441,55443,55446,55448],{"class":41,"line":747},[39,55439,55440],{"class":53},"      btn.innerHTML ",[39,55442,1117],{"class":45},[39,55444,55445],{"class":237}," `我已经阅读用户协议(${",[39,55447,1704],{"class":53},[39,55449,55450],{"class":237},"})`\n",[39,55452,55453,55456,55459,55462,55464],{"class":41,"line":753},[39,55454,55455],{"class":45},"      if",[39,55457,55458],{"class":53}," (i ",[39,55460,55461],{"class":45},"===",[39,55463,315],{"class":74},[39,55465,89],{"class":53},[39,55467,55468,55471,55474],{"class":41,"line":758},[39,55469,55470],{"class":49},"        clearInterval",[39,55472,55473],{"class":53},"(n)  ",[39,55475,55476],{"class":128},"\u002F\u002F 关闭定时器\n",[39,55478,55479],{"class":41,"line":763},[39,55480,55481],{"class":128},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[39,55483,55484,55487,55489],{"class":41,"line":772},[39,55485,55486],{"class":53},"        btn.disabled ",[39,55488,1117],{"class":45},[39,55490,55491],{"class":74}," false\n",[39,55493,55494,55497,55499],{"class":41,"line":777},[39,55495,55496],{"class":53},"        btn.innerHTML ",[39,55498,1117],{"class":45},[39,55500,55501],{"class":237}," '同意'\n",[39,55503,55504],{"class":41,"line":785},[39,55505,53373],{"class":53},[39,55507,55508,55511,55513],{"class":41,"line":796},[39,55509,55510],{"class":53},"    }, ",[39,55512,7486],{"class":74},[39,55514,574],{"class":53},[39,55516,55517],{"class":41,"line":808},[39,55518,122],{"emptyLinePlaceholder":121},[39,55520,55521,55523,55525],{"class":41,"line":823},[39,55522,53392],{"class":53},[39,55524,52788],{"class":52275},[39,55526,52282],{"class":53},[39,55528,55529,55531,55533],{"class":41,"line":839},[39,55530,52760],{"class":53},[39,55532,52775],{"class":52275},[39,55534,52282],{"class":53},[39,55536,55537],{"class":41,"line":845},[39,55538,122],{"emptyLinePlaceholder":121},[39,55540,55541,55543,55545],{"class":41,"line":856},[39,55542,52760],{"class":53},[39,55544,51610],{"class":52275},[39,55546,52282],{"class":53},[19,55548,55549],{},"不要一直想着用死循环,避免死循环",[19,55551,55552,55555],{},[26,55553,55554],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22971,55557,55559],{"id":55558},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[328,55561,55562],{},[331,55563,55564],{},"法1",[30,55566,55568],{"className":51608,"code":55567,"language":51610,"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",[26,55569,55570,55580,55594,55598,55606,55620,55640,55652,55660,55666,55677,55688,55692,55696,55703,55715,55719,55723,55730,55742,55756,55769,55783,55787,55791,55798,55809,55820,55831,55843,55855,55867,55871,55875,55883,55893,55906,55918,55931,55935,55939,55946,55956,55968,55980,55991,56002,56012,56024,56036,56040,56044,56053,56065,56077,56105,56118,56122,56126,56133,56144,56148,56156,56164,56168,56176,56190,56205,56229,56237,56252,56265,56273,56294,56306,56318,56330,56342,56354,56366,56378,56387,56395,56403,56411,56423,56446,56465,56484,56503,56522,56541,56560,56580,56584,56604,56623,56643,56664,56675,56692,56702,56712,56722,56727,56732,56737,56742,56767,56780,56784,56807,56811,56819,56827,56835,56839],{"__ignoreMap":35},[39,55571,55572,55574,55576,55578],{"class":41,"line":42},[39,55573,52272],{"class":53},[39,55575,52276],{"class":52275},[39,55577,52279],{"class":49},[39,55579,52282],{"class":53},[39,55581,55582,55584,55586,55588,55590,55592],{"class":41,"line":92},[39,55583,2170],{"class":53},[39,55585,51610],{"class":52275},[39,55587,52291],{"class":49},[39,55589,1117],{"class":53},[39,55591,52296],{"class":237},[39,55593,52282],{"class":53},[39,55595,55596],{"class":41,"line":112},[39,55597,122],{"emptyLinePlaceholder":121},[39,55599,55600,55602,55604],{"class":41,"line":118},[39,55601,2170],{"class":53},[39,55603,52309],{"class":52275},[39,55605,52282],{"class":53},[39,55607,55608,55610,55612,55614,55616,55618],{"class":41,"line":125},[39,55609,53119],{"class":53},[39,55611,52319],{"class":52275},[39,55613,52322],{"class":49},[39,55615,1117],{"class":53},[39,55617,52327],{"class":237},[39,55619,52282],{"class":53},[39,55621,55622,55624,55626,55628,55630,55632,55634,55636,55638],{"class":41,"line":132},[39,55623,53119],{"class":53},[39,55625,52319],{"class":52275},[39,55627,15893],{"class":49},[39,55629,1117],{"class":53},[39,55631,52366],{"class":237},[39,55633,52346],{"class":49},[39,55635,1117],{"class":53},[39,55637,52373],{"class":237},[39,55639,52282],{"class":53},[39,55641,55642,55644,55646,55648,55650],{"class":41,"line":138},[39,55643,53119],{"class":53},[39,55645,52382],{"class":52275},[39,55647,52385],{"class":53},[39,55649,52382],{"class":52275},[39,55651,52282],{"class":53},[39,55653,55654,55656,55658],{"class":41,"line":169},[39,55655,53119],{"class":53},[39,55657,1192],{"class":52275},[39,55659,52282],{"class":53},[39,55661,55662,55664],{"class":41,"line":190},[39,55663,7479],{"class":52275},[39,55665,16545],{"class":53},[39,55667,55668,55671,55673,55675],{"class":41,"line":202},[39,55669,55670],{"class":74},"      padding",[39,55672,52412],{"class":53},[39,55674,1457],{"class":74},[39,55676,318],{"class":53},[39,55678,55679,55682,55684,55686],{"class":41,"line":207},[39,55680,55681],{"class":74},"      margin",[39,55683,52412],{"class":53},[39,55685,1457],{"class":74},[39,55687,318],{"class":53},[39,55689,55690],{"class":41,"line":212},[39,55691,3284],{"class":53},[39,55693,55694],{"class":41,"line":223},[39,55695,122],{"emptyLinePlaceholder":121},[39,55697,55698,55701],{"class":41,"line":228},[39,55699,55700],{"class":52275},"    li",[39,55702,16545],{"class":53},[39,55704,55705,55708,55710,55713],{"class":41,"line":263},[39,55706,55707],{"class":74},"      list-style",[39,55709,52412],{"class":53},[39,55711,55712],{"class":74},"none",[39,55714,318],{"class":53},[39,55716,55717],{"class":41,"line":287},[39,55718,3284],{"class":53},[39,55720,55721],{"class":41,"line":292},[39,55722,122],{"emptyLinePlaceholder":121},[39,55724,55725,55728],{"class":41,"line":305},[39,55726,55727],{"class":49},"    .box",[39,55729,16545],{"class":53},[39,55731,55732,55735,55737,55740],{"class":41,"line":310},[39,55733,55734],{"class":74},"      position",[39,55736,52412],{"class":53},[39,55738,55739],{"class":74},"relative",[39,55741,318],{"class":53},[39,55743,55744,55747,55749,55752,55754],{"class":41,"line":321},[39,55745,55746],{"class":74},"      width",[39,55748,52412],{"class":53},[39,55750,55751],{"class":74},"976",[39,55753,52467],{"class":45},[39,55755,318],{"class":53},[39,55757,55758,55761,55763,55765,55767],{"class":41,"line":713},[39,55759,55760],{"class":74},"      height",[39,55762,52412],{"class":53},[39,55764,2662],{"class":74},[39,55766,52467],{"class":45},[39,55768,318],{"class":53},[39,55770,55771,55773,55775,55777,55779,55781],{"class":41,"line":718},[39,55772,55681],{"class":74},[39,55774,52412],{"class":53},[39,55776,278],{"class":74},[39,55778,52467],{"class":45},[39,55780,52531],{"class":74},[39,55782,318],{"class":53},[39,55784,55785],{"class":41,"line":723},[39,55786,3284],{"class":53},[39,55788,55789],{"class":41,"line":729},[39,55790,122],{"emptyLinePlaceholder":121},[39,55792,55793,55796],{"class":41,"line":735},[39,55794,55795],{"class":49},"    .slider-footer",[39,55797,16545],{"class":53},[39,55799,55800,55802,55804,55807],{"class":41,"line":741},[39,55801,55734],{"class":74},[39,55803,52412],{"class":53},[39,55805,55806],{"class":74},"absolute",[39,55808,318],{"class":53},[39,55810,55811,55814,55816,55818],{"class":41,"line":747},[39,55812,55813],{"class":74},"      left",[39,55815,52412],{"class":53},[39,55817,1457],{"class":74},[39,55819,318],{"class":53},[39,55821,55822,55825,55827,55829],{"class":41,"line":753},[39,55823,55824],{"class":74},"      bottom",[39,55826,52412],{"class":53},[39,55828,1457],{"class":74},[39,55830,318],{"class":53},[39,55832,55833,55835,55837,55839,55841],{"class":41,"line":758},[39,55834,55746],{"class":74},[39,55836,52412],{"class":53},[39,55838,278],{"class":74},[39,55840,1592],{"class":45},[39,55842,318],{"class":53},[39,55844,55845,55847,55849,55851,55853],{"class":41,"line":763},[39,55846,55760],{"class":74},[39,55848,52412],{"class":53},[39,55850,1836],{"class":74},[39,55852,1592],{"class":45},[39,55854,318],{"class":53},[39,55856,55857,55860,55862,55865],{"class":41,"line":772},[39,55858,55859],{"class":74},"      background-color",[39,55861,52412],{"class":53},[39,55863,55864],{"class":74},"skyblue",[39,55866,318],{"class":53},[39,55868,55869],{"class":41,"line":777},[39,55870,3284],{"class":53},[39,55872,55873],{"class":41,"line":785},[39,55874,122],{"emptyLinePlaceholder":121},[39,55876,55877,55879,55881],{"class":41,"line":796},[39,55878,55795],{"class":49},[39,55880,7899],{"class":52275},[39,55882,16545],{"class":53},[39,55884,55885,55887,55889,55891],{"class":41,"line":808},[39,55886,55734],{"class":74},[39,55888,52412],{"class":53},[39,55890,55806],{"class":74},[39,55892,318],{"class":53},[39,55894,55895,55898,55900,55902,55904],{"class":41,"line":823},[39,55896,55897],{"class":74},"      font-size",[39,55899,52412],{"class":53},[39,55901,2161],{"class":74},[39,55903,52467],{"class":45},[39,55905,318],{"class":53},[39,55907,55908,55910,55912,55914,55916],{"class":41,"line":839},[39,55909,55813],{"class":74},[39,55911,52412],{"class":53},[39,55913,248],{"class":74},[39,55915,52467],{"class":45},[39,55917,318],{"class":53},[39,55919,55920,55923,55925,55927,55929],{"class":41,"line":845},[39,55921,55922],{"class":74},"      top",[39,55924,52412],{"class":53},[39,55926,1583],{"class":74},[39,55928,52467],{"class":45},[39,55930,318],{"class":53},[39,55932,55933],{"class":41,"line":856},[39,55934,3284],{"class":53},[39,55936,55937],{"class":41,"line":861},[39,55938,122],{"emptyLinePlaceholder":121},[39,55940,55941,55944],{"class":41,"line":870},[39,55942,55943],{"class":52275},"    ul",[39,55945,16545],{"class":53},[39,55947,55948,55950,55952,55954],{"class":41,"line":9084},[39,55949,55734],{"class":74},[39,55951,52412],{"class":53},[39,55953,55806],{"class":74},[39,55955,318],{"class":53},[39,55957,55958,55960,55962,55964,55966],{"class":41,"line":9090},[39,55959,55922],{"class":74},[39,55961,52412],{"class":53},[39,55963,2041],{"class":74},[39,55965,52467],{"class":45},[39,55967,318],{"class":53},[39,55969,55970,55972,55974,55976,55978],{"class":41,"line":9102},[39,55971,55813],{"class":74},[39,55973,52412],{"class":53},[39,55975,248],{"class":74},[39,55977,52467],{"class":45},[39,55979,318],{"class":53},[39,55981,55982,55985,55987,55989],{"class":41,"line":9114},[39,55983,55984],{"class":74},"      display",[39,55986,52412],{"class":53},[39,55988,52452],{"class":74},[39,55990,318],{"class":53},[39,55992,55993,55996,55998,56000],{"class":41,"line":9126},[39,55994,55995],{"class":74},"      justify-content",[39,55997,52412],{"class":53},[39,55999,52643],{"class":74},[39,56001,318],{"class":53},[39,56003,56004,56006,56008,56010],{"class":41,"line":10784},[39,56005,55734],{"class":74},[39,56007,52412],{"class":53},[39,56009,55806],{"class":74},[39,56011,318],{"class":53},[39,56013,56014,56016,56018,56020,56022],{"class":41,"line":10809},[39,56015,55746],{"class":74},[39,56017,52412],{"class":53},[39,56019,5075],{"class":74},[39,56021,52467],{"class":45},[39,56023,318],{"class":53},[39,56025,56026,56028,56030,56032,56034],{"class":41,"line":10832},[39,56027,55760],{"class":74},[39,56029,52412],{"class":53},[39,56031,248],{"class":74},[39,56033,52467],{"class":45},[39,56035,318],{"class":53},[39,56037,56038],{"class":41,"line":10856},[39,56039,3284],{"class":53},[39,56041,56042],{"class":41,"line":10861},[39,56043,122],{"emptyLinePlaceholder":121},[39,56045,56046,56048,56051],{"class":41,"line":10866},[39,56047,55943],{"class":52275},[39,56049,56050],{"class":52275}," li",[39,56052,16545],{"class":53},[39,56054,56055,56057,56059,56061,56063],{"class":41,"line":10871},[39,56056,55746],{"class":74},[39,56058,52412],{"class":53},[39,56060,248],{"class":74},[39,56062,52467],{"class":45},[39,56064,318],{"class":53},[39,56066,56067,56069,56071,56073,56075],{"class":41,"line":10880},[39,56068,55760],{"class":74},[39,56070,52412],{"class":53},[39,56072,248],{"class":74},[39,56074,52467],{"class":45},[39,56076,318],{"class":53},[39,56078,56079,56081,56083,56086,56088,56090,56092,56094,56096,56098,56100,56103],{"class":41,"line":10885},[39,56080,55859],{"class":74},[39,56082,52412],{"class":53},[39,56084,56085],{"class":74},"rgba",[39,56087,54],{"class":53},[39,56089,1457],{"class":74},[39,56091,63],{"class":53},[39,56093,1457],{"class":74},[39,56095,63],{"class":53},[39,56097,1457],{"class":74},[39,56099,63],{"class":53},[39,56101,56102],{"class":74},".4",[39,56104,166],{"class":53},[39,56106,56107,56110,56112,56114,56116],{"class":41,"line":10891},[39,56108,56109],{"class":74},"      border-radius",[39,56111,52412],{"class":53},[39,56113,423],{"class":74},[39,56115,52467],{"class":45},[39,56117,318],{"class":53},[39,56119,56120],{"class":41,"line":10912},[39,56121,3284],{"class":53},[39,56123,56124],{"class":41,"line":10918},[39,56125,122],{"emptyLinePlaceholder":121},[39,56127,56128,56131],{"class":41,"line":10932},[39,56129,56130],{"class":49},"    .activate",[39,56132,16545],{"class":53},[39,56134,56135,56137,56139,56142],{"class":41,"line":10938},[39,56136,55859],{"class":74},[39,56138,52412],{"class":53},[39,56140,56141],{"class":74},"#f7f7f7",[39,56143,318],{"class":53},[39,56145,56146],{"class":41,"line":10965},[39,56147,3284],{"class":53},[39,56149,56150,56152,56154],{"class":41,"line":10974},[39,56151,53392],{"class":53},[39,56153,1192],{"class":52275},[39,56155,52282],{"class":53},[39,56157,56158,56160,56162],{"class":41,"line":10980},[39,56159,52760],{"class":53},[39,56161,52309],{"class":52275},[39,56163,52282],{"class":53},[39,56165,56166],{"class":41,"line":10988},[39,56167,122],{"emptyLinePlaceholder":121},[39,56169,56170,56172,56174],{"class":41,"line":10993},[39,56171,2170],{"class":53},[39,56173,52775],{"class":52275},[39,56175,52282],{"class":53},[39,56177,56178,56180,56182,56184,56186,56188],{"class":41,"line":17577},[39,56179,53119],{"class":53},[39,56181,52586],{"class":52275},[39,56183,54461],{"class":49},[39,56185,1117],{"class":53},[39,56187,54466],{"class":237},[39,56189,52282],{"class":53},[39,56191,56192,56194,56196,56198,56200,56203],{"class":41,"line":17583},[39,56193,52316],{"class":53},[39,56195,52586],{"class":52275},[39,56197,54461],{"class":49},[39,56199,1117],{"class":53},[39,56201,56202],{"class":237},"\"slider-wrapper\"",[39,56204,52282],{"class":53},[39,56206,56207,56210,56212,56215,56217,56220,56223,56225,56227],{"class":41,"line":17606},[39,56208,56209],{"class":53},"      \u003C",[39,56211,2585],{"class":52275},[39,56213,56214],{"class":49}," src",[39,56216,1117],{"class":53},[39,56218,56219],{"class":237},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[39,56221,56222],{"class":49}," alt",[39,56224,1117],{"class":53},[39,56226,8726],{"class":237},[39,56228,52282],{"class":53},[39,56230,56231,56233,56235],{"class":41,"line":17612},[39,56232,52751],{"class":53},[39,56234,52586],{"class":52275},[39,56236,52282],{"class":53},[39,56238,56239,56241,56243,56245,56247,56250],{"class":41,"line":17635},[39,56240,52316],{"class":53},[39,56242,52586],{"class":52275},[39,56244,54461],{"class":49},[39,56246,1117],{"class":53},[39,56248,56249],{"class":237},"\"slider-footer\"",[39,56251,52282],{"class":53},[39,56253,56254,56256,56258,56261,56263],{"class":41,"line":17649},[39,56255,56209],{"class":53},[39,56257,19],{"class":52275},[39,56259,56260],{"class":53},">对人类来说会不会太超前了?\u003C\u002F",[39,56262,19],{"class":52275},[39,56264,52282],{"class":53},[39,56266,56267,56269,56271],{"class":41,"line":17669},[39,56268,56209],{"class":53},[39,56270,489],{"class":52275},[39,56272,52282],{"class":53},[39,56274,56275,56278,56280,56282,56284,56287,56290,56292],{"class":41,"line":17675},[39,56276,56277],{"class":53},"        \u003C",[39,56279,331],{"class":52275},[39,56281,54461],{"class":49},[39,56283,1117],{"class":53},[39,56285,56286],{"class":237},"\"activate\"",[39,56288,56289],{"class":53},">\u003C\u002F",[39,56291,331],{"class":52275},[39,56293,52282],{"class":53},[39,56295,56296,56298,56300,56302,56304],{"class":41,"line":17686},[39,56297,56277],{"class":53},[39,56299,331],{"class":52275},[39,56301,56289],{"class":53},[39,56303,331],{"class":52275},[39,56305,52282],{"class":53},[39,56307,56308,56310,56312,56314,56316],{"class":41,"line":17709},[39,56309,56277],{"class":53},[39,56311,331],{"class":52275},[39,56313,56289],{"class":53},[39,56315,331],{"class":52275},[39,56317,52282],{"class":53},[39,56319,56320,56322,56324,56326,56328],{"class":41,"line":17731},[39,56321,56277],{"class":53},[39,56323,331],{"class":52275},[39,56325,56289],{"class":53},[39,56327,331],{"class":52275},[39,56329,52282],{"class":53},[39,56331,56332,56334,56336,56338,56340],{"class":41,"line":17736},[39,56333,56277],{"class":53},[39,56335,331],{"class":52275},[39,56337,56289],{"class":53},[39,56339,331],{"class":52275},[39,56341,52282],{"class":53},[39,56343,56344,56346,56348,56350,56352],{"class":41,"line":17742},[39,56345,56277],{"class":53},[39,56347,331],{"class":52275},[39,56349,56289],{"class":53},[39,56351,331],{"class":52275},[39,56353,52282],{"class":53},[39,56355,56356,56358,56360,56362,56364],{"class":41,"line":17756},[39,56357,56277],{"class":53},[39,56359,331],{"class":52275},[39,56361,56289],{"class":53},[39,56363,331],{"class":52275},[39,56365,52282],{"class":53},[39,56367,56368,56370,56372,56374,56376],{"class":41,"line":17769},[39,56369,56277],{"class":53},[39,56371,331],{"class":52275},[39,56373,56289],{"class":53},[39,56375,331],{"class":52275},[39,56377,52282],{"class":53},[39,56379,56380,56383,56385],{"class":41,"line":17774},[39,56381,56382],{"class":53},"      \u003C\u002F",[39,56384,489],{"class":52275},[39,56386,52282],{"class":53},[39,56388,56389,56391,56393],{"class":41,"line":17788},[39,56390,52751],{"class":53},[39,56392,52586],{"class":52275},[39,56394,52282],{"class":53},[39,56396,56397,56399,56401],{"class":41,"line":17793},[39,56398,53392],{"class":53},[39,56400,52586],{"class":52275},[39,56402,52282],{"class":53},[39,56404,56405,56407,56409],{"class":41,"line":17799},[39,56406,53119],{"class":53},[39,56408,52788],{"class":52275},[39,56410,52282],{"class":53},[39,56412,56413,56415,56418,56420],{"class":41,"line":17804},[39,56414,12283],{"class":45},[39,56416,56417],{"class":74}," arrImage",[39,56419,71],{"class":45},[39,56421,56422],{"class":53}," [\n",[39,56424,56425,56428,56431,56434,56437,56440,56443],{"class":41,"line":17818},[39,56426,56427],{"class":53},"      { url: ",[39,56429,56430],{"class":237},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[39,56432,56433],{"class":53},", title: ",[39,56435,56436],{"class":237},"'对人类来说会不会太超前了?'",[39,56438,56439],{"class":53},", color: ",[39,56441,56442],{"class":237},"'rgba(100,67,68)'",[39,56444,56445],{"class":53}," },\n",[39,56447,56448,56450,56453,56455,56458,56460,56463],{"class":41,"line":17823},[39,56449,56427],{"class":53},[39,56451,56452],{"class":237},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[39,56454,56433],{"class":53},[39,56456,56457],{"class":237},"'开启剑与雪的黑暗传说!'",[39,56459,56439],{"class":53},[39,56461,56462],{"class":237},"'rgba(43,35,26)'",[39,56464,56445],{"class":53},[39,56466,56467,56469,56472,56474,56477,56479,56482],{"class":41,"line":17828},[39,56468,56427],{"class":53},[39,56470,56471],{"class":237},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[39,56473,56433],{"class":53},[39,56475,56476],{"class":237},"'真正的jo厨出现了!'",[39,56478,56439],{"class":53},[39,56480,56481],{"class":237},"'rgba(36,31,33)'",[39,56483,56445],{"class":53},[39,56485,56486,56488,56491,56493,56496,56498,56501],{"class":41,"line":17842},[39,56487,56427],{"class":53},[39,56489,56490],{"class":237},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[39,56492,56433],{"class":53},[39,56494,56495],{"class":237},"'李玉刚:让世界通过b站看到东方大国文化'",[39,56497,56439],{"class":53},[39,56499,56500],{"class":237},"'rgba(139,98,66)'",[39,56502,56445],{"class":53},[39,56504,56505,56507,56510,56512,56515,56517,56520],{"class":41,"line":17854},[39,56506,56427],{"class":53},[39,56508,56509],{"class":237},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[39,56511,56433],{"class":53},[39,56513,56514],{"class":237},"'快来分享你的寒假日常吧'",[39,56516,56439],{"class":53},[39,56518,56519],{"class":237},"'rgba(67,90,92)'",[39,56521,56445],{"class":53},[39,56523,56524,56526,56529,56531,56534,56536,56539],{"class":41,"line":17859},[39,56525,56427],{"class":53},[39,56527,56528],{"class":237},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[39,56530,56433],{"class":53},[39,56532,56533],{"class":237},"'哔哩哔哩小年YEAR'",[39,56535,56439],{"class":53},[39,56537,56538],{"class":237},"'rgba(166,131,143)'",[39,56540,56445],{"class":53},[39,56542,56543,56545,56548,56550,56553,56555,56558],{"class":41,"line":17872},[39,56544,56427],{"class":53},[39,56546,56547],{"class":237},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[39,56549,56433],{"class":53},[39,56551,56552],{"class":237},"'一站式解决你的电脑配置问题'",[39,56554,56439],{"class":53},[39,56556,56557],{"class":237},"'rgba(53,29,25)'",[39,56559,56445],{"class":53},[39,56561,56562,56564,56567,56569,56572,56574,56577],{"class":41,"line":17877},[39,56563,56427],{"class":53},[39,56565,56566],{"class":237},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[39,56568,56433],{"class":53},[39,56570,56571],{"class":237},"'谁不想和小猫咪贴贴呢?'",[39,56573,56439],{"class":53},[39,56575,56576],{"class":237},"'rgba(99,72,114)'",[39,56578,56579],{"class":53}," }\n",[39,56581,56582],{"class":41,"line":17882},[39,56583,54084],{"class":53},[39,56585,56586,56588,56591,56593,56595,56597,56599,56602],{"class":41,"line":17887},[39,56587,12283],{"class":45},[39,56589,56590],{"class":74}," img",[39,56592,71],{"class":45},[39,56594,55371],{"class":53},[39,56596,55374],{"class":49},[39,56598,54],{"class":53},[39,56600,56601],{"class":237},"'.slider-wrapper img'",[39,56603,574],{"class":53},[39,56605,56606,56608,56610,56612,56614,56616,56618,56621],{"class":41,"line":17900},[39,56607,12283],{"class":45},[39,56609,7899],{"class":74},[39,56611,71],{"class":45},[39,56613,55371],{"class":53},[39,56615,55374],{"class":49},[39,56617,54],{"class":53},[39,56619,56620],{"class":237},"'.slider-footer p'",[39,56622,574],{"class":53},[39,56624,56625,56627,56630,56632,56634,56636,56638,56641],{"class":41,"line":17905},[39,56626,12283],{"class":45},[39,56628,56629],{"class":74}," color",[39,56631,71],{"class":45},[39,56633,55371],{"class":53},[39,56635,55374],{"class":49},[39,56637,54],{"class":53},[39,56639,56640],{"class":237},"'.slider-footer'",[39,56642,574],{"class":53},[39,56644,56645,56647,56650,56652,56654,56657,56659,56662],{"class":41,"line":33608},[39,56646,12283],{"class":45},[39,56648,56649],{"class":74}," lis",[39,56651,71],{"class":45},[39,56653,55371],{"class":53},[39,56655,56656],{"class":49},"querySelectorAll",[39,56658,54],{"class":53},[39,56660,56661],{"class":237},"'.slider-footer ul li'",[39,56663,574],{"class":53},[39,56665,56666,56668,56670,56672],{"class":41,"line":33614},[39,56667,53194],{"class":45},[39,56669,10506],{"class":53},[39,56671,1117],{"class":45},[39,56673,56674],{"class":74}," 1\n",[39,56676,56677,56679,56682,56684,56686,56688,56690],{"class":41,"line":33620},[39,56678,53194],{"class":45},[39,56680,56681],{"class":53}," timer ",[39,56683,1117],{"class":45},[39,56685,55419],{"class":49},[39,56687,54],{"class":53},[39,56689,55424],{"class":45},[39,56691,55427],{"class":53},[39,56693,56694,56697,56699],{"class":41,"line":33626},[39,56695,56696],{"class":53},"      img.src ",[39,56698,1117],{"class":45},[39,56700,56701],{"class":53}," arrImage[i].url\n",[39,56703,56704,56707,56709],{"class":41,"line":33632},[39,56705,56706],{"class":53},"      p.innerHTML ",[39,56708,1117],{"class":45},[39,56710,56711],{"class":53}," arrImage[i].title\n",[39,56713,56714,56717,56719],{"class":41,"line":33643},[39,56715,56716],{"class":53},"      color.style.backgroundColor ",[39,56718,1117],{"class":45},[39,56720,56721],{"class":53}," arrImage[i].color\n",[39,56723,56724],{"class":41,"line":33649},[39,56725,56726],{"class":128},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[39,56728,56729],{"class":41,"line":33669},[39,56730,56731],{"class":128},"      \u002F\u002F li.classList.add('activate')\n",[39,56733,56734],{"class":41,"line":33675},[39,56735,56736],{"class":128},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[39,56738,56739],{"class":41,"line":33686},[39,56740,56741],{"class":128},"      \u002F\u002F lis[i].classList.remove('activate')\n",[39,56743,56744,56747,56749,56751,56754,56757,56760,56762,56765],{"class":41,"line":33692},[39,56745,56746],{"class":53},"      document.",[39,56748,55374],{"class":49},[39,56750,54],{"class":53},[39,56752,56753],{"class":237},"'.activate'",[39,56755,56756],{"class":53},")?.classList.",[39,56758,56759],{"class":49},"toggle",[39,56761,54],{"class":53},[39,56763,56764],{"class":237},"'activate'",[39,56766,574],{"class":53},[39,56768,56769,56772,56774,56776,56778],{"class":41,"line":33698},[39,56770,56771],{"class":53},"      lis[i].classList.",[39,56773,6413],{"class":49},[39,56775,54],{"class":53},[39,56777,56764],{"class":237},[39,56779,574],{"class":53},[39,56781,56782],{"class":41,"line":33704},[39,56783,122],{"emptyLinePlaceholder":121},[39,56785,56786,56789,56791,56793,56795,56797,56799,56801,56804],{"class":41,"line":33710},[39,56787,56788],{"class":53},"      i ",[39,56790,1117],{"class":45},[39,56792,55458],{"class":53},[39,56794,101],{"class":45},[39,56796,26093],{"class":74},[39,56798,255],{"class":53},[39,56800,1592],{"class":45},[39,56802,56803],{"class":53}," arrImage.",[39,56805,56806],{"class":74},"length\n",[39,56808,56809],{"class":41,"line":33716},[39,56810,122],{"emptyLinePlaceholder":121},[39,56812,56813,56815,56817],{"class":41,"line":33722},[39,56814,55510],{"class":53},[39,56816,7486],{"class":74},[39,56818,574],{"class":53},[39,56820,56821,56823,56825],{"class":41,"line":33728},[39,56822,53392],{"class":53},[39,56824,52788],{"class":52275},[39,56826,52282],{"class":53},[39,56828,56829,56831,56833],{"class":41,"line":33748},[39,56830,52760],{"class":53},[39,56832,52775],{"class":52275},[39,56834,52282],{"class":53},[39,56836,56837],{"class":41,"line":33754},[39,56838,122],{"emptyLinePlaceholder":121},[39,56840,56841,56843,56845],{"class":41,"line":33770},[39,56842,52760],{"class":53},[39,56844,51610],{"class":52275},[39,56846,52282],{"class":53},[19,56848,56849],{},[2585,56850],{"alt":35,"src":56851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56853,56854],{},"?.就是短路保护,确保输出正常进行",[19,56856,56857],{},"不要忘记取余%,有时候可以用",[19,56859,56860],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[328,56862,56863],{"start":92},[331,56864,56865],{},"法2",[30,56867,56869],{"className":51608,"code":56868,"language":51610,"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",[26,56870,56871,56881,56895,56899,56907,56921,56941,56953,56961,56967,56977,56987,56991,56995,57001,57011,57015,57019,57025,57035,57047,57059,57073,57077,57081,57087,57097,57107,57117,57129,57141,57151,57155,57159,57167,57177,57189,57201,57213,57217,57221,57227,57237,57249,57261,57271,57281,57291,57303,57315,57319,57323,57331,57343,57355,57381,57393,57397,57401,57407,57417,57421,57429,57437,57441,57449,57463,57477,57497,57505,57519,57531,57539,57557,57569,57581,57593,57605,57617,57629,57641,57649,57657,57665,57673,57684,57700,57716,57732,57748,57764,57780,57796,57812,57816,57821,57839,57857,57867,57872,57877,57888,57894,57909,57918,57922,57927,57936,57941,57950,57955,57960,57965,57988,58018,58022,58030,58034,58042,58050,58054],{"__ignoreMap":35},[39,56872,56873,56875,56877,56879],{"class":41,"line":42},[39,56874,52272],{"class":53},[39,56876,52276],{"class":52275},[39,56878,52279],{"class":49},[39,56880,52282],{"class":53},[39,56882,56883,56885,56887,56889,56891,56893],{"class":41,"line":92},[39,56884,2170],{"class":53},[39,56886,51610],{"class":52275},[39,56888,52291],{"class":49},[39,56890,1117],{"class":53},[39,56892,52296],{"class":237},[39,56894,52282],{"class":53},[39,56896,56897],{"class":41,"line":112},[39,56898,122],{"emptyLinePlaceholder":121},[39,56900,56901,56903,56905],{"class":41,"line":118},[39,56902,2170],{"class":53},[39,56904,52309],{"class":52275},[39,56906,52282],{"class":53},[39,56908,56909,56911,56913,56915,56917,56919],{"class":41,"line":125},[39,56910,53119],{"class":53},[39,56912,52319],{"class":52275},[39,56914,52322],{"class":49},[39,56916,1117],{"class":53},[39,56918,52327],{"class":237},[39,56920,52282],{"class":53},[39,56922,56923,56925,56927,56929,56931,56933,56935,56937,56939],{"class":41,"line":132},[39,56924,53119],{"class":53},[39,56926,52319],{"class":52275},[39,56928,15893],{"class":49},[39,56930,1117],{"class":53},[39,56932,52366],{"class":237},[39,56934,52346],{"class":49},[39,56936,1117],{"class":53},[39,56938,52373],{"class":237},[39,56940,52282],{"class":53},[39,56942,56943,56945,56947,56949,56951],{"class":41,"line":138},[39,56944,53119],{"class":53},[39,56946,52382],{"class":52275},[39,56948,52385],{"class":53},[39,56950,52382],{"class":52275},[39,56952,52282],{"class":53},[39,56954,56955,56957,56959],{"class":41,"line":169},[39,56956,53119],{"class":53},[39,56958,1192],{"class":52275},[39,56960,52282],{"class":53},[39,56962,56963,56965],{"class":41,"line":190},[39,56964,7479],{"class":52275},[39,56966,16545],{"class":53},[39,56968,56969,56971,56973,56975],{"class":41,"line":202},[39,56970,55670],{"class":74},[39,56972,52412],{"class":53},[39,56974,1457],{"class":74},[39,56976,318],{"class":53},[39,56978,56979,56981,56983,56985],{"class":41,"line":207},[39,56980,55681],{"class":74},[39,56982,52412],{"class":53},[39,56984,1457],{"class":74},[39,56986,318],{"class":53},[39,56988,56989],{"class":41,"line":212},[39,56990,3284],{"class":53},[39,56992,56993],{"class":41,"line":223},[39,56994,122],{"emptyLinePlaceholder":121},[39,56996,56997,56999],{"class":41,"line":228},[39,56998,55700],{"class":52275},[39,57000,16545],{"class":53},[39,57002,57003,57005,57007,57009],{"class":41,"line":263},[39,57004,55707],{"class":74},[39,57006,52412],{"class":53},[39,57008,55712],{"class":74},[39,57010,318],{"class":53},[39,57012,57013],{"class":41,"line":287},[39,57014,3284],{"class":53},[39,57016,57017],{"class":41,"line":292},[39,57018,122],{"emptyLinePlaceholder":121},[39,57020,57021,57023],{"class":41,"line":305},[39,57022,55727],{"class":49},[39,57024,16545],{"class":53},[39,57026,57027,57029,57031,57033],{"class":41,"line":310},[39,57028,55734],{"class":74},[39,57030,52412],{"class":53},[39,57032,55739],{"class":74},[39,57034,318],{"class":53},[39,57036,57037,57039,57041,57043,57045],{"class":41,"line":321},[39,57038,55746],{"class":74},[39,57040,52412],{"class":53},[39,57042,55751],{"class":74},[39,57044,52467],{"class":45},[39,57046,318],{"class":53},[39,57048,57049,57051,57053,57055,57057],{"class":41,"line":713},[39,57050,55760],{"class":74},[39,57052,52412],{"class":53},[39,57054,2662],{"class":74},[39,57056,52467],{"class":45},[39,57058,318],{"class":53},[39,57060,57061,57063,57065,57067,57069,57071],{"class":41,"line":718},[39,57062,55681],{"class":74},[39,57064,52412],{"class":53},[39,57066,278],{"class":74},[39,57068,52467],{"class":45},[39,57070,52531],{"class":74},[39,57072,318],{"class":53},[39,57074,57075],{"class":41,"line":723},[39,57076,3284],{"class":53},[39,57078,57079],{"class":41,"line":729},[39,57080,122],{"emptyLinePlaceholder":121},[39,57082,57083,57085],{"class":41,"line":735},[39,57084,55795],{"class":49},[39,57086,16545],{"class":53},[39,57088,57089,57091,57093,57095],{"class":41,"line":741},[39,57090,55734],{"class":74},[39,57092,52412],{"class":53},[39,57094,55806],{"class":74},[39,57096,318],{"class":53},[39,57098,57099,57101,57103,57105],{"class":41,"line":747},[39,57100,55813],{"class":74},[39,57102,52412],{"class":53},[39,57104,1457],{"class":74},[39,57106,318],{"class":53},[39,57108,57109,57111,57113,57115],{"class":41,"line":753},[39,57110,55824],{"class":74},[39,57112,52412],{"class":53},[39,57114,1457],{"class":74},[39,57116,318],{"class":53},[39,57118,57119,57121,57123,57125,57127],{"class":41,"line":758},[39,57120,55746],{"class":74},[39,57122,52412],{"class":53},[39,57124,278],{"class":74},[39,57126,1592],{"class":45},[39,57128,318],{"class":53},[39,57130,57131,57133,57135,57137,57139],{"class":41,"line":763},[39,57132,55760],{"class":74},[39,57134,52412],{"class":53},[39,57136,1836],{"class":74},[39,57138,1592],{"class":45},[39,57140,318],{"class":53},[39,57142,57143,57145,57147,57149],{"class":41,"line":772},[39,57144,55859],{"class":74},[39,57146,52412],{"class":53},[39,57148,55864],{"class":74},[39,57150,318],{"class":53},[39,57152,57153],{"class":41,"line":777},[39,57154,3284],{"class":53},[39,57156,57157],{"class":41,"line":785},[39,57158,122],{"emptyLinePlaceholder":121},[39,57160,57161,57163,57165],{"class":41,"line":796},[39,57162,55795],{"class":49},[39,57164,7899],{"class":52275},[39,57166,16545],{"class":53},[39,57168,57169,57171,57173,57175],{"class":41,"line":808},[39,57170,55734],{"class":74},[39,57172,52412],{"class":53},[39,57174,55806],{"class":74},[39,57176,318],{"class":53},[39,57178,57179,57181,57183,57185,57187],{"class":41,"line":823},[39,57180,55897],{"class":74},[39,57182,52412],{"class":53},[39,57184,2161],{"class":74},[39,57186,52467],{"class":45},[39,57188,318],{"class":53},[39,57190,57191,57193,57195,57197,57199],{"class":41,"line":839},[39,57192,55813],{"class":74},[39,57194,52412],{"class":53},[39,57196,248],{"class":74},[39,57198,52467],{"class":45},[39,57200,318],{"class":53},[39,57202,57203,57205,57207,57209,57211],{"class":41,"line":845},[39,57204,55922],{"class":74},[39,57206,52412],{"class":53},[39,57208,1583],{"class":74},[39,57210,52467],{"class":45},[39,57212,318],{"class":53},[39,57214,57215],{"class":41,"line":856},[39,57216,3284],{"class":53},[39,57218,57219],{"class":41,"line":861},[39,57220,122],{"emptyLinePlaceholder":121},[39,57222,57223,57225],{"class":41,"line":870},[39,57224,55943],{"class":52275},[39,57226,16545],{"class":53},[39,57228,57229,57231,57233,57235],{"class":41,"line":9084},[39,57230,55734],{"class":74},[39,57232,52412],{"class":53},[39,57234,55806],{"class":74},[39,57236,318],{"class":53},[39,57238,57239,57241,57243,57245,57247],{"class":41,"line":9090},[39,57240,55922],{"class":74},[39,57242,52412],{"class":53},[39,57244,2041],{"class":74},[39,57246,52467],{"class":45},[39,57248,318],{"class":53},[39,57250,57251,57253,57255,57257,57259],{"class":41,"line":9102},[39,57252,55813],{"class":74},[39,57254,52412],{"class":53},[39,57256,248],{"class":74},[39,57258,52467],{"class":45},[39,57260,318],{"class":53},[39,57262,57263,57265,57267,57269],{"class":41,"line":9114},[39,57264,55984],{"class":74},[39,57266,52412],{"class":53},[39,57268,52452],{"class":74},[39,57270,318],{"class":53},[39,57272,57273,57275,57277,57279],{"class":41,"line":9126},[39,57274,55995],{"class":74},[39,57276,52412],{"class":53},[39,57278,52643],{"class":74},[39,57280,318],{"class":53},[39,57282,57283,57285,57287,57289],{"class":41,"line":10784},[39,57284,55734],{"class":74},[39,57286,52412],{"class":53},[39,57288,55806],{"class":74},[39,57290,318],{"class":53},[39,57292,57293,57295,57297,57299,57301],{"class":41,"line":10809},[39,57294,55746],{"class":74},[39,57296,52412],{"class":53},[39,57298,5075],{"class":74},[39,57300,52467],{"class":45},[39,57302,318],{"class":53},[39,57304,57305,57307,57309,57311,57313],{"class":41,"line":10832},[39,57306,55760],{"class":74},[39,57308,52412],{"class":53},[39,57310,248],{"class":74},[39,57312,52467],{"class":45},[39,57314,318],{"class":53},[39,57316,57317],{"class":41,"line":10856},[39,57318,3284],{"class":53},[39,57320,57321],{"class":41,"line":10861},[39,57322,122],{"emptyLinePlaceholder":121},[39,57324,57325,57327,57329],{"class":41,"line":10866},[39,57326,55943],{"class":52275},[39,57328,56050],{"class":52275},[39,57330,16545],{"class":53},[39,57332,57333,57335,57337,57339,57341],{"class":41,"line":10871},[39,57334,55746],{"class":74},[39,57336,52412],{"class":53},[39,57338,248],{"class":74},[39,57340,52467],{"class":45},[39,57342,318],{"class":53},[39,57344,57345,57347,57349,57351,57353],{"class":41,"line":10880},[39,57346,55760],{"class":74},[39,57348,52412],{"class":53},[39,57350,248],{"class":74},[39,57352,52467],{"class":45},[39,57354,318],{"class":53},[39,57356,57357,57359,57361,57363,57365,57367,57369,57371,57373,57375,57377,57379],{"class":41,"line":10885},[39,57358,55859],{"class":74},[39,57360,52412],{"class":53},[39,57362,56085],{"class":74},[39,57364,54],{"class":53},[39,57366,1457],{"class":74},[39,57368,63],{"class":53},[39,57370,1457],{"class":74},[39,57372,63],{"class":53},[39,57374,1457],{"class":74},[39,57376,63],{"class":53},[39,57378,56102],{"class":74},[39,57380,166],{"class":53},[39,57382,57383,57385,57387,57389,57391],{"class":41,"line":10891},[39,57384,56109],{"class":74},[39,57386,52412],{"class":53},[39,57388,423],{"class":74},[39,57390,52467],{"class":45},[39,57392,318],{"class":53},[39,57394,57395],{"class":41,"line":10912},[39,57396,3284],{"class":53},[39,57398,57399],{"class":41,"line":10918},[39,57400,122],{"emptyLinePlaceholder":121},[39,57402,57403,57405],{"class":41,"line":10932},[39,57404,56130],{"class":49},[39,57406,16545],{"class":53},[39,57408,57409,57411,57413,57415],{"class":41,"line":10938},[39,57410,55859],{"class":74},[39,57412,52412],{"class":53},[39,57414,56141],{"class":74},[39,57416,318],{"class":53},[39,57418,57419],{"class":41,"line":10965},[39,57420,3284],{"class":53},[39,57422,57423,57425,57427],{"class":41,"line":10974},[39,57424,53392],{"class":53},[39,57426,1192],{"class":52275},[39,57428,52282],{"class":53},[39,57430,57431,57433,57435],{"class":41,"line":10980},[39,57432,52760],{"class":53},[39,57434,52309],{"class":52275},[39,57436,52282],{"class":53},[39,57438,57439],{"class":41,"line":10988},[39,57440,122],{"emptyLinePlaceholder":121},[39,57442,57443,57445,57447],{"class":41,"line":10993},[39,57444,2170],{"class":53},[39,57446,52775],{"class":52275},[39,57448,52282],{"class":53},[39,57450,57451,57453,57455,57457,57459,57461],{"class":41,"line":17577},[39,57452,53119],{"class":53},[39,57454,52586],{"class":52275},[39,57456,54461],{"class":49},[39,57458,1117],{"class":53},[39,57460,54466],{"class":237},[39,57462,52282],{"class":53},[39,57464,57465,57467,57469,57471,57473,57475],{"class":41,"line":17583},[39,57466,52316],{"class":53},[39,57468,52586],{"class":52275},[39,57470,54461],{"class":49},[39,57472,1117],{"class":53},[39,57474,56202],{"class":237},[39,57476,52282],{"class":53},[39,57478,57479,57481,57483,57485,57487,57489,57491,57493,57495],{"class":41,"line":17606},[39,57480,56209],{"class":53},[39,57482,2585],{"class":52275},[39,57484,56214],{"class":49},[39,57486,1117],{"class":53},[39,57488,56219],{"class":237},[39,57490,56222],{"class":49},[39,57492,1117],{"class":53},[39,57494,8726],{"class":237},[39,57496,52282],{"class":53},[39,57498,57499,57501,57503],{"class":41,"line":17612},[39,57500,52751],{"class":53},[39,57502,52586],{"class":52275},[39,57504,52282],{"class":53},[39,57506,57507,57509,57511,57513,57515,57517],{"class":41,"line":17635},[39,57508,52316],{"class":53},[39,57510,52586],{"class":52275},[39,57512,54461],{"class":49},[39,57514,1117],{"class":53},[39,57516,56249],{"class":237},[39,57518,52282],{"class":53},[39,57520,57521,57523,57525,57527,57529],{"class":41,"line":17649},[39,57522,56209],{"class":53},[39,57524,19],{"class":52275},[39,57526,56260],{"class":53},[39,57528,19],{"class":52275},[39,57530,52282],{"class":53},[39,57532,57533,57535,57537],{"class":41,"line":17669},[39,57534,56209],{"class":53},[39,57536,489],{"class":52275},[39,57538,52282],{"class":53},[39,57540,57541,57543,57545,57547,57549,57551,57553,57555],{"class":41,"line":17675},[39,57542,56277],{"class":53},[39,57544,331],{"class":52275},[39,57546,54461],{"class":49},[39,57548,1117],{"class":53},[39,57550,56286],{"class":237},[39,57552,56289],{"class":53},[39,57554,331],{"class":52275},[39,57556,52282],{"class":53},[39,57558,57559,57561,57563,57565,57567],{"class":41,"line":17686},[39,57560,56277],{"class":53},[39,57562,331],{"class":52275},[39,57564,56289],{"class":53},[39,57566,331],{"class":52275},[39,57568,52282],{"class":53},[39,57570,57571,57573,57575,57577,57579],{"class":41,"line":17709},[39,57572,56277],{"class":53},[39,57574,331],{"class":52275},[39,57576,56289],{"class":53},[39,57578,331],{"class":52275},[39,57580,52282],{"class":53},[39,57582,57583,57585,57587,57589,57591],{"class":41,"line":17731},[39,57584,56277],{"class":53},[39,57586,331],{"class":52275},[39,57588,56289],{"class":53},[39,57590,331],{"class":52275},[39,57592,52282],{"class":53},[39,57594,57595,57597,57599,57601,57603],{"class":41,"line":17736},[39,57596,56277],{"class":53},[39,57598,331],{"class":52275},[39,57600,56289],{"class":53},[39,57602,331],{"class":52275},[39,57604,52282],{"class":53},[39,57606,57607,57609,57611,57613,57615],{"class":41,"line":17742},[39,57608,56277],{"class":53},[39,57610,331],{"class":52275},[39,57612,56289],{"class":53},[39,57614,331],{"class":52275},[39,57616,52282],{"class":53},[39,57618,57619,57621,57623,57625,57627],{"class":41,"line":17756},[39,57620,56277],{"class":53},[39,57622,331],{"class":52275},[39,57624,56289],{"class":53},[39,57626,331],{"class":52275},[39,57628,52282],{"class":53},[39,57630,57631,57633,57635,57637,57639],{"class":41,"line":17769},[39,57632,56277],{"class":53},[39,57634,331],{"class":52275},[39,57636,56289],{"class":53},[39,57638,331],{"class":52275},[39,57640,52282],{"class":53},[39,57642,57643,57645,57647],{"class":41,"line":17774},[39,57644,56382],{"class":53},[39,57646,489],{"class":52275},[39,57648,52282],{"class":53},[39,57650,57651,57653,57655],{"class":41,"line":17788},[39,57652,52751],{"class":53},[39,57654,52586],{"class":52275},[39,57656,52282],{"class":53},[39,57658,57659,57661,57663],{"class":41,"line":17793},[39,57660,53392],{"class":53},[39,57662,52586],{"class":52275},[39,57664,52282],{"class":53},[39,57666,57667,57669,57671],{"class":41,"line":17799},[39,57668,53119],{"class":53},[39,57670,52788],{"class":52275},[39,57672,52282],{"class":53},[39,57674,57675,57677,57680,57682],{"class":41,"line":17804},[39,57676,12283],{"class":45},[39,57678,57679],{"class":74}," sliderData",[39,57681,71],{"class":45},[39,57683,56422],{"class":53},[39,57685,57686,57688,57690,57692,57694,57696,57698],{"class":41,"line":17818},[39,57687,56427],{"class":53},[39,57689,56430],{"class":237},[39,57691,56433],{"class":53},[39,57693,56436],{"class":237},[39,57695,56439],{"class":53},[39,57697,56442],{"class":237},[39,57699,56445],{"class":53},[39,57701,57702,57704,57706,57708,57710,57712,57714],{"class":41,"line":17823},[39,57703,56427],{"class":53},[39,57705,56452],{"class":237},[39,57707,56433],{"class":53},[39,57709,56457],{"class":237},[39,57711,56439],{"class":53},[39,57713,56462],{"class":237},[39,57715,56445],{"class":53},[39,57717,57718,57720,57722,57724,57726,57728,57730],{"class":41,"line":17828},[39,57719,56427],{"class":53},[39,57721,56471],{"class":237},[39,57723,56433],{"class":53},[39,57725,56476],{"class":237},[39,57727,56439],{"class":53},[39,57729,56481],{"class":237},[39,57731,56445],{"class":53},[39,57733,57734,57736,57738,57740,57742,57744,57746],{"class":41,"line":17842},[39,57735,56427],{"class":53},[39,57737,56490],{"class":237},[39,57739,56433],{"class":53},[39,57741,56495],{"class":237},[39,57743,56439],{"class":53},[39,57745,56500],{"class":237},[39,57747,56445],{"class":53},[39,57749,57750,57752,57754,57756,57758,57760,57762],{"class":41,"line":17854},[39,57751,56427],{"class":53},[39,57753,56509],{"class":237},[39,57755,56433],{"class":53},[39,57757,56514],{"class":237},[39,57759,56439],{"class":53},[39,57761,56519],{"class":237},[39,57763,56445],{"class":53},[39,57765,57766,57768,57770,57772,57774,57776,57778],{"class":41,"line":17859},[39,57767,56427],{"class":53},[39,57769,56528],{"class":237},[39,57771,56433],{"class":53},[39,57773,56533],{"class":237},[39,57775,56439],{"class":53},[39,57777,56538],{"class":237},[39,57779,56445],{"class":53},[39,57781,57782,57784,57786,57788,57790,57792,57794],{"class":41,"line":17872},[39,57783,56427],{"class":53},[39,57785,56547],{"class":237},[39,57787,56433],{"class":53},[39,57789,56552],{"class":237},[39,57791,56439],{"class":53},[39,57793,56557],{"class":237},[39,57795,56445],{"class":53},[39,57797,57798,57800,57802,57804,57806,57808,57810],{"class":41,"line":17877},[39,57799,56427],{"class":53},[39,57801,56566],{"class":237},[39,57803,56433],{"class":53},[39,57805,56571],{"class":237},[39,57807,56439],{"class":53},[39,57809,56576],{"class":237},[39,57811,56579],{"class":53},[39,57813,57814],{"class":41,"line":17882},[39,57815,54084],{"class":53},[39,57817,57818],{"class":41,"line":17887},[39,57819,57820],{"class":128},"    \u002F\u002F 1.获取元素\n",[39,57822,57823,57825,57827,57829,57831,57833,57835,57837],{"class":41,"line":17900},[39,57824,12283],{"class":45},[39,57826,56590],{"class":74},[39,57828,71],{"class":45},[39,57830,55371],{"class":53},[39,57832,55374],{"class":49},[39,57834,54],{"class":53},[39,57836,56601],{"class":237},[39,57838,574],{"class":53},[39,57840,57841,57843,57845,57847,57849,57851,57853,57855],{"class":41,"line":17905},[39,57842,12283],{"class":45},[39,57844,7899],{"class":74},[39,57846,71],{"class":45},[39,57848,55371],{"class":53},[39,57850,55374],{"class":49},[39,57852,54],{"class":53},[39,57854,56620],{"class":237},[39,57856,574],{"class":53},[39,57858,57859,57861,57863,57865],{"class":41,"line":33608},[39,57860,53194],{"class":45},[39,57862,10506],{"class":53},[39,57864,1117],{"class":45},[39,57866,48308],{"class":74},[39,57868,57869],{"class":41,"line":33614},[39,57870,57871],{"class":128},"    \u002F\u002F 2.开启定时器\n",[39,57873,57874],{"class":41,"line":33620},[39,57875,57876],{"class":128},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[39,57878,57879,57882,57884,57886],{"class":41,"line":33626},[39,57880,57881],{"class":49},"    setInterval",[39,57883,54],{"class":53},[39,57885,55424],{"class":45},[39,57887,55427],{"class":53},[39,57889,57890,57892],{"class":41,"line":33632},[39,57891,55432],{"class":53},[39,57893,3788],{"class":45},[39,57895,57896,57898,57900,57902,57905,57907],{"class":41,"line":33643},[39,57897,55455],{"class":45},[39,57899,55458],{"class":53},[39,57901,2820],{"class":45},[39,57903,57904],{"class":53}," sliderData.",[39,57906,52943],{"class":74},[39,57908,89],{"class":53},[39,57910,57911,57914,57916],{"class":41,"line":33649},[39,57912,57913],{"class":53},"        i ",[39,57915,1117],{"class":45},[39,57917,48308],{"class":74},[39,57919,57920],{"class":41,"line":33669},[39,57921,53373],{"class":53},[39,57923,57924],{"class":41,"line":33675},[39,57925,57926],{"class":128},"      \u002F\u002F 更换图片路径\n",[39,57928,57929,57931,57933],{"class":41,"line":33686},[39,57930,56696],{"class":53},[39,57932,1117],{"class":45},[39,57934,57935],{"class":53}," sliderData[i].url\n",[39,57937,57938],{"class":41,"line":33692},[39,57939,57940],{"class":128},"      \u002F\u002F 把文字写到p里面\n",[39,57942,57943,57945,57947],{"class":41,"line":33698},[39,57944,56706],{"class":53},[39,57946,1117],{"class":45},[39,57948,57949],{"class":53}," sliderData[i].title\n",[39,57951,57952],{"class":41,"line":33704},[39,57953,57954],{"class":128},"      \u002F\u002F 小圆点\n",[39,57956,57957],{"class":41,"line":33710},[39,57958,57959],{"class":128},"      \u002F\u002F 先删除以前的active\n",[39,57961,57962],{"class":41,"line":33716},[39,57963,57964],{"class":128},"      \u002F\u002F 只让当前li添加active\n",[39,57966,57967,57969,57971,57973,57976,57979,57982,57984,57986],{"class":41,"line":33722},[39,57968,56746],{"class":53},[39,57970,55374],{"class":49},[39,57972,54],{"class":53},[39,57974,57975],{"class":237},"'.slider-footer .activate'",[39,57977,57978],{"class":53},").classList.",[39,57980,57981],{"class":49},"remove",[39,57983,54],{"class":53},[39,57985,56764],{"class":237},[39,57987,574],{"class":53},[39,57989,57990,57992,57994,57996,57999,58001,58003,58005,58008,58010,58012,58014,58016],{"class":41,"line":33728},[39,57991,56746],{"class":53},[39,57993,55374],{"class":49},[39,57995,54],{"class":53},[39,57997,57998],{"class":237},"`.slider-footer ul li:nth-child(${",[39,58000,1704],{"class":53},[39,58002,46541],{"class":45},[39,58004,26093],{"class":74},[39,58006,58007],{"class":237},"})`",[39,58009,57978],{"class":53},[39,58011,6413],{"class":49},[39,58013,54],{"class":53},[39,58015,56764],{"class":237},[39,58017,574],{"class":53},[39,58019,58020],{"class":41,"line":33748},[39,58021,122],{"emptyLinePlaceholder":121},[39,58023,58024,58026,58028],{"class":41,"line":33754},[39,58025,55510],{"class":53},[39,58027,7486],{"class":74},[39,58029,574],{"class":53},[39,58031,58032],{"class":41,"line":33770},[39,58033,122],{"emptyLinePlaceholder":121},[39,58035,58036,58038,58040],{"class":41,"line":33776},[39,58037,53392],{"class":53},[39,58039,52788],{"class":52275},[39,58041,52282],{"class":53},[39,58043,58044,58046,58048],{"class":41,"line":33790},[39,58045,52760],{"class":53},[39,58047,52775],{"class":52275},[39,58049,52282],{"class":53},[39,58051,58052],{"class":41,"line":33796},[39,58053,122],{"emptyLinePlaceholder":121},[39,58055,58056,58058,58060],{"class":41,"line":33811},[39,58057,52760],{"class":53},[39,58059,51610],{"class":52275},[39,58061,52282],{"class":53},[476,58063,58065],{"id":58064},"_317-重要知识点","3.1.7 重要知识点",[19,58067,58068,58069],{},"浏览器在渲染文本时， ",[350,58070,58071],{},"没有空格或换行符就没有“断行点”",[19,58073,58074],{},[2585,58075],{"alt":35,"src":58076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58078,58079],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58081,58082],{},[2585,58083],{"alt":35,"src":58084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58086,58087],{},[2585,58088],{"alt":35,"src":58089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58091,58093],{"id":58092},"_32-dom事件基础","3.2 DOM事件基础",[476,58095,58097],{"id":58096},"_321-事件监听","3.2.1 事件监听",[19,58099,58100],{},[2585,58101],{"alt":35,"src":58102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58104,58105],{},"事件监听有响应的发生",[19,58107,58108],{},[2585,58109],{"alt":35,"src":58110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58112,58113],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58115,58116],{},"对于有名函数,要执行的函数名后边不要加()",[476,58118,58120],{"id":58119},"_322-随机点名案例","3.2.2 随机点名案例",[30,58122,58124],{"className":51608,"code":58123,"language":51610,"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",[26,58125,58126,58136,58150,58154,58162,58176,58196,58208,58216,58222,58232,58242,58246,58250,58257,58268,58272,58276,58282,58294,58308,58318,58330,58343,58347,58351,58358,58362,58375,58387,58399,58403,58407,58411,58418,58428,58432,58436,58445,58457,58469,58484,58488,58496,58504,58508,58516,58529,58543,58556,58576,58584,58599,58619,58639,58647,58651,58659,58664,58700,58720,58725,58744,58749,58760,58765,58776,58781,58800,58815,58820,58846,58856,58865,58870,58886,58891,58896,58901,58916,58920,58924,58929,58948,58965,58973,58978,58993,58997,59001,59009,59017,59021],{"__ignoreMap":35},[39,58127,58128,58130,58132,58134],{"class":41,"line":42},[39,58129,52272],{"class":53},[39,58131,52276],{"class":52275},[39,58133,52279],{"class":49},[39,58135,52282],{"class":53},[39,58137,58138,58140,58142,58144,58146,58148],{"class":41,"line":92},[39,58139,2170],{"class":53},[39,58141,51610],{"class":52275},[39,58143,52291],{"class":49},[39,58145,1117],{"class":53},[39,58147,52296],{"class":237},[39,58149,52282],{"class":53},[39,58151,58152],{"class":41,"line":112},[39,58153,122],{"emptyLinePlaceholder":121},[39,58155,58156,58158,58160],{"class":41,"line":118},[39,58157,2170],{"class":53},[39,58159,52309],{"class":52275},[39,58161,52282],{"class":53},[39,58163,58164,58166,58168,58170,58172,58174],{"class":41,"line":125},[39,58165,53119],{"class":53},[39,58167,52319],{"class":52275},[39,58169,52322],{"class":49},[39,58171,1117],{"class":53},[39,58173,52327],{"class":237},[39,58175,52282],{"class":53},[39,58177,58178,58180,58182,58184,58186,58188,58190,58192,58194],{"class":41,"line":132},[39,58179,53119],{"class":53},[39,58181,52319],{"class":52275},[39,58183,15893],{"class":49},[39,58185,1117],{"class":53},[39,58187,52366],{"class":237},[39,58189,52346],{"class":49},[39,58191,1117],{"class":53},[39,58193,52373],{"class":237},[39,58195,52282],{"class":53},[39,58197,58198,58200,58202,58204,58206],{"class":41,"line":138},[39,58199,53119],{"class":53},[39,58201,52382],{"class":52275},[39,58203,52385],{"class":53},[39,58205,52382],{"class":52275},[39,58207,52282],{"class":53},[39,58209,58210,58212,58214],{"class":41,"line":169},[39,58211,53119],{"class":53},[39,58213,1192],{"class":52275},[39,58215,52282],{"class":53},[39,58217,58218,58220],{"class":41,"line":190},[39,58219,7479],{"class":52275},[39,58221,16545],{"class":53},[39,58223,58224,58226,58228,58230],{"class":41,"line":202},[39,58225,55681],{"class":74},[39,58227,52412],{"class":53},[39,58229,1457],{"class":74},[39,58231,318],{"class":53},[39,58233,58234,58236,58238,58240],{"class":41,"line":207},[39,58235,55670],{"class":74},[39,58237,52412],{"class":53},[39,58239,1457],{"class":74},[39,58241,318],{"class":53},[39,58243,58244],{"class":41,"line":212},[39,58245,3284],{"class":53},[39,58247,58248],{"class":41,"line":223},[39,58249,122],{"emptyLinePlaceholder":121},[39,58251,58252,58255],{"class":41,"line":228},[39,58253,58254],{"class":52275},"    h2",[39,58256,16545],{"class":53},[39,58258,58259,58262,58264,58266],{"class":41,"line":263},[39,58260,58261],{"class":74},"      text-align",[39,58263,52412],{"class":53},[39,58265,52567],{"class":74},[39,58267,318],{"class":53},[39,58269,58270],{"class":41,"line":287},[39,58271,3284],{"class":53},[39,58273,58274],{"class":41,"line":292},[39,58275,122],{"emptyLinePlaceholder":121},[39,58277,58278,58280],{"class":41,"line":305},[39,58279,55727],{"class":49},[39,58281,16545],{"class":53},[39,58283,58284,58286,58288,58290,58292],{"class":41,"line":310},[39,58285,55746],{"class":74},[39,58287,52412],{"class":53},[39,58289,2662],{"class":74},[39,58291,52467],{"class":45},[39,58293,318],{"class":53},[39,58295,58296,58298,58300,58302,58304,58306],{"class":41,"line":321},[39,58297,55681],{"class":74},[39,58299,52412],{"class":53},[39,58301,1917],{"class":74},[39,58303,52467],{"class":45},[39,58305,52531],{"class":74},[39,58307,318],{"class":53},[39,58309,58310,58312,58314,58316],{"class":41,"line":713},[39,58311,55984],{"class":74},[39,58313,52412],{"class":53},[39,58315,52452],{"class":74},[39,58317,318],{"class":53},[39,58319,58320,58322,58324,58326,58328],{"class":41,"line":718},[39,58321,55897],{"class":74},[39,58323,52412],{"class":53},[39,58325,2085],{"class":74},[39,58327,52467],{"class":45},[39,58329,318],{"class":53},[39,58331,58332,58335,58337,58339,58341],{"class":41,"line":723},[39,58333,58334],{"class":74},"      line-height",[39,58336,52412],{"class":53},[39,58338,1664],{"class":74},[39,58340,52467],{"class":45},[39,58342,318],{"class":53},[39,58344,58345],{"class":41,"line":729},[39,58346,3284],{"class":53},[39,58348,58349],{"class":41,"line":735},[39,58350,122],{"emptyLinePlaceholder":121},[39,58352,58353,58356],{"class":41,"line":741},[39,58354,58355],{"class":49},"    .qs",[39,58357,16545],{"class":53},[39,58359,58360],{"class":41,"line":747},[39,58361,122],{"emptyLinePlaceholder":121},[39,58363,58364,58366,58368,58371,58373],{"class":41,"line":753},[39,58365,55746],{"class":74},[39,58367,52412],{"class":53},[39,58369,58370],{"class":74},"450",[39,58372,52467],{"class":45},[39,58374,318],{"class":53},[39,58376,58377,58379,58381,58383,58385],{"class":41,"line":758},[39,58378,55760],{"class":74},[39,58380,52412],{"class":53},[39,58382,1664],{"class":74},[39,58384,52467],{"class":45},[39,58386,318],{"class":53},[39,58388,58389,58392,58394,58397],{"class":41,"line":763},[39,58390,58391],{"class":74},"      color",[39,58393,52412],{"class":53},[39,58395,58396],{"class":74},"red",[39,58398,318],{"class":53},[39,58400,58401],{"class":41,"line":772},[39,58402,122],{"emptyLinePlaceholder":121},[39,58404,58405],{"class":41,"line":777},[39,58406,3284],{"class":53},[39,58408,58409],{"class":41,"line":785},[39,58410,122],{"emptyLinePlaceholder":121},[39,58412,58413,58416],{"class":41,"line":796},[39,58414,58415],{"class":49},"    .btns",[39,58417,16545],{"class":53},[39,58419,58420,58422,58424,58426],{"class":41,"line":808},[39,58421,58261],{"class":74},[39,58423,52412],{"class":53},[39,58425,52567],{"class":74},[39,58427,318],{"class":53},[39,58429,58430],{"class":41,"line":823},[39,58431,3284],{"class":53},[39,58433,58434],{"class":41,"line":839},[39,58435,122],{"emptyLinePlaceholder":121},[39,58437,58438,58440,58443],{"class":41,"line":845},[39,58439,58415],{"class":49},[39,58441,58442],{"class":52275}," button",[39,58444,16545],{"class":53},[39,58446,58447,58449,58451,58453,58455],{"class":41,"line":856},[39,58448,55746],{"class":74},[39,58450,52412],{"class":53},[39,58452,2077],{"class":74},[39,58454,52467],{"class":45},[39,58456,318],{"class":53},[39,58458,58459,58461,58463,58465,58467],{"class":41,"line":861},[39,58460,55760],{"class":74},[39,58462,52412],{"class":53},[39,58464,1538],{"class":74},[39,58466,52467],{"class":45},[39,58468,318],{"class":53},[39,58470,58471,58473,58475,58477,58480,58482],{"class":41,"line":870},[39,58472,55681],{"class":74},[39,58474,52412],{"class":53},[39,58476,1457],{"class":74},[39,58478,58479],{"class":74}," 50",[39,58481,52467],{"class":45},[39,58483,318],{"class":53},[39,58485,58486],{"class":41,"line":9084},[39,58487,3284],{"class":53},[39,58489,58490,58492,58494],{"class":41,"line":9090},[39,58491,53392],{"class":53},[39,58493,1192],{"class":52275},[39,58495,52282],{"class":53},[39,58497,58498,58500,58502],{"class":41,"line":9102},[39,58499,52760],{"class":53},[39,58501,52309],{"class":52275},[39,58503,52282],{"class":53},[39,58505,58506],{"class":41,"line":9114},[39,58507,122],{"emptyLinePlaceholder":121},[39,58509,58510,58512,58514],{"class":41,"line":9126},[39,58511,2170],{"class":53},[39,58513,52775],{"class":52275},[39,58515,52282],{"class":53},[39,58517,58518,58520,58522,58525,58527],{"class":41,"line":10784},[39,58519,53119],{"class":53},[39,58521,14],{"class":52275},[39,58523,58524],{"class":53},">随机点名\u003C\u002F",[39,58526,14],{"class":52275},[39,58528,52282],{"class":53},[39,58530,58531,58533,58535,58537,58539,58541],{"class":41,"line":10809},[39,58532,53119],{"class":53},[39,58534,52586],{"class":52275},[39,58536,54461],{"class":49},[39,58538,1117],{"class":53},[39,58540,54466],{"class":237},[39,58542,52282],{"class":53},[39,58544,58545,58547,58549,58552,58554],{"class":41,"line":10832},[39,58546,52316],{"class":53},[39,58548,39],{"class":52275},[39,58550,58551],{"class":53},">名字是：\u003C\u002F",[39,58553,39],{"class":52275},[39,58555,52282],{"class":53},[39,58557,58558,58560,58562,58564,58566,58569,58572,58574],{"class":41,"line":10856},[39,58559,52316],{"class":53},[39,58561,52586],{"class":52275},[39,58563,54461],{"class":49},[39,58565,1117],{"class":53},[39,58567,58568],{"class":237},"\"qs\"",[39,58570,58571],{"class":53},">这里显示姓名\u003C\u002F",[39,58573,52586],{"class":52275},[39,58575,52282],{"class":53},[39,58577,58578,58580,58582],{"class":41,"line":10861},[39,58579,53392],{"class":53},[39,58581,52586],{"class":52275},[39,58583,52282],{"class":53},[39,58585,58586,58588,58590,58592,58594,58597],{"class":41,"line":10866},[39,58587,53119],{"class":53},[39,58589,52586],{"class":52275},[39,58591,54461],{"class":49},[39,58593,1117],{"class":53},[39,58595,58596],{"class":237},"\"btns\"",[39,58598,52282],{"class":53},[39,58600,58601,58603,58605,58607,58609,58612,58615,58617],{"class":41,"line":10871},[39,58602,52316],{"class":53},[39,58604,54862],{"class":52275},[39,58606,54461],{"class":49},[39,58608,1117],{"class":53},[39,58610,58611],{"class":237},"\"start\"",[39,58613,58614],{"class":53},">开始\u003C\u002F",[39,58616,54862],{"class":52275},[39,58618,52282],{"class":53},[39,58620,58621,58623,58625,58627,58629,58632,58635,58637],{"class":41,"line":10880},[39,58622,52316],{"class":53},[39,58624,54862],{"class":52275},[39,58626,54461],{"class":49},[39,58628,1117],{"class":53},[39,58630,58631],{"class":237},"\"end\"",[39,58633,58634],{"class":53},">结束\u003C\u002F",[39,58636,54862],{"class":52275},[39,58638,52282],{"class":53},[39,58640,58641,58643,58645],{"class":41,"line":10885},[39,58642,53392],{"class":53},[39,58644,52586],{"class":52275},[39,58646,52282],{"class":53},[39,58648,58649],{"class":41,"line":10891},[39,58650,122],{"emptyLinePlaceholder":121},[39,58652,58653,58655,58657],{"class":41,"line":10912},[39,58654,53119],{"class":53},[39,58656,52788],{"class":52275},[39,58658,52282],{"class":53},[39,58660,58661],{"class":41,"line":10918},[39,58662,58663],{"class":128},"    \u002F\u002F 数据数组\n",[39,58665,58666,58668,58671,58673,58675,58678,58680,58683,58685,58688,58690,58693,58695,58698],{"class":41,"line":10932},[39,58667,12283],{"class":45},[39,58669,58670],{"class":74}," arr",[39,58672,71],{"class":45},[39,58674,53201],{"class":53},[39,58676,58677],{"class":237},"'马超'",[39,58679,63],{"class":53},[39,58681,58682],{"class":237},"'黄忠'",[39,58684,63],{"class":53},[39,58686,58687],{"class":237},"'赵云'",[39,58689,63],{"class":53},[39,58691,58692],{"class":237},"'关羽'",[39,58694,63],{"class":53},[39,58696,58697],{"class":237},"'张飞'",[39,58699,34221],{"class":53},[39,58701,58702,58704,58707,58709,58711,58713,58715,58718],{"class":41,"line":10938},[39,58703,12283],{"class":45},[39,58705,58706],{"class":74}," qs",[39,58708,71],{"class":45},[39,58710,55371],{"class":53},[39,58712,55374],{"class":49},[39,58714,54],{"class":53},[39,58716,58717],{"class":237},"'.qs'",[39,58719,574],{"class":53},[39,58721,58722],{"class":41,"line":10965},[39,58723,58724],{"class":128},"    \u002F\u002F 1.业务1.开始按钮模块\n",[39,58726,58727,58729,58731,58733,58735,58737,58739,58742],{"class":41,"line":10974},[39,58728,12283],{"class":45},[39,58730,5265],{"class":74},[39,58732,71],{"class":45},[39,58734,55371],{"class":53},[39,58736,55374],{"class":49},[39,58738,54],{"class":53},[39,58740,58741],{"class":237},"'.start'",[39,58743,574],{"class":53},[39,58745,58746],{"class":41,"line":10980},[39,58747,58748],{"class":128},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[39,58750,58751,58753,58756,58758],{"class":41,"line":10988},[39,58752,53194],{"class":45},[39,58754,58755],{"class":53}," timerId ",[39,58757,1117],{"class":45},[39,58759,48308],{"class":74},[39,58761,58762],{"class":41,"line":10993},[39,58763,58764],{"class":128},"    \u002F\u002F 随机号要全局变量\n",[39,58766,58767,58769,58772,58774],{"class":41,"line":17577},[39,58768,53194],{"class":45},[39,58770,58771],{"class":53}," random ",[39,58773,1117],{"class":45},[39,58775,48308],{"class":74},[39,58777,58778],{"class":41,"line":17583},[39,58779,58780],{"class":128},"    \u002F\u002F 1.1 添加点击事件\n",[39,58782,58783,58786,58789,58791,58794,58796,58798],{"class":41,"line":17606},[39,58784,58785],{"class":53},"    start.",[39,58787,58788],{"class":49},"addEventListener",[39,58790,54],{"class":53},[39,58792,58793],{"class":237},"'click'",[39,58795,63],{"class":53},[39,58797,55424],{"class":45},[39,58799,55427],{"class":53},[39,58801,58802,58805,58807,58809,58811,58813],{"class":41,"line":17612},[39,58803,58804],{"class":53},"      timerId ",[39,58806,1117],{"class":45},[39,58808,55419],{"class":49},[39,58810,54],{"class":53},[39,58812,55424],{"class":45},[39,58814,55427],{"class":53},[39,58816,58817],{"class":41,"line":17635},[39,58818,58819],{"class":128},"        \u002F\u002F 随机数\n",[39,58821,58822,58825,58827,58830,58833,58836,58838,58840,58842,58844],{"class":41,"line":17649},[39,58823,58824],{"class":53},"        random ",[39,58826,1117],{"class":45},[39,58828,58829],{"class":49}," parseInt",[39,58831,58832],{"class":53},"(Math.",[39,58834,58835],{"class":49},"random",[39,58837,14107],{"class":53},[39,58839,1717],{"class":45},[39,58841,52940],{"class":53},[39,58843,52943],{"class":74},[39,58845,574],{"class":53},[39,58847,58848,58851,58853],{"class":41,"line":17669},[39,58849,58850],{"class":53},"        qs.innerHTML ",[39,58852,1117],{"class":45},[39,58854,58855],{"class":53}," arr[random]\n",[39,58857,58858,58861,58863],{"class":41,"line":17675},[39,58859,58860],{"class":53},"      }, ",[39,58862,1538],{"class":74},[39,58864,574],{"class":53},[39,58866,58867],{"class":41,"line":17686},[39,58868,58869],{"class":128},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[39,58871,58872,58874,58877,58879,58882,58884],{"class":41,"line":17709},[39,58873,55455],{"class":45},[39,58875,58876],{"class":53}," (arr.",[39,58878,52943],{"class":74},[39,58880,58881],{"class":45}," ===",[39,58883,26093],{"class":74},[39,58885,89],{"class":53},[39,58887,58888],{"class":41,"line":17731},[39,58889,58890],{"class":128},"        \u002F\u002F start.disabled = true\n",[39,58892,58893],{"class":41,"line":17736},[39,58894,58895],{"class":128},"        \u002F\u002F end.disabled = true\n",[39,58897,58898],{"class":41,"line":17742},[39,58899,58900],{"class":128},"        \u002F\u002F 可以合起来写\n",[39,58902,58903,58906,58908,58911,58913],{"class":41,"line":17756},[39,58904,58905],{"class":53},"        start.disabled ",[39,58907,1117],{"class":45},[39,58909,58910],{"class":53}," end.disabled ",[39,58912,1117],{"class":45},[39,58914,58915],{"class":74}," true\n",[39,58917,58918],{"class":41,"line":17769},[39,58919,53373],{"class":53},[39,58921,58922],{"class":41,"line":17774},[39,58923,34436],{"class":53},[39,58925,58926],{"class":41,"line":17788},[39,58927,58928],{"class":128},"    \u002F\u002F 1.2 关闭按钮模块\n",[39,58930,58931,58933,58935,58937,58939,58941,58943,58946],{"class":41,"line":17793},[39,58932,12283],{"class":45},[39,58934,5281],{"class":74},[39,58936,71],{"class":45},[39,58938,55371],{"class":53},[39,58940,55374],{"class":49},[39,58942,54],{"class":53},[39,58944,58945],{"class":237},"'.end'",[39,58947,574],{"class":53},[39,58949,58950,58953,58955,58957,58959,58961,58963],{"class":41,"line":17799},[39,58951,58952],{"class":53},"    end.",[39,58954,58788],{"class":49},[39,58956,54],{"class":53},[39,58958,58793],{"class":237},[39,58960,63],{"class":53},[39,58962,55424],{"class":45},[39,58964,55427],{"class":53},[39,58966,58967,58970],{"class":41,"line":17804},[39,58968,58969],{"class":49},"      clearInterval",[39,58971,58972],{"class":53},"(timerId)\n",[39,58974,58975],{"class":41,"line":17818},[39,58976,58977],{"class":128},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[39,58979,58980,58983,58986,58989,58991],{"class":41,"line":17823},[39,58981,58982],{"class":53},"      arr.",[39,58984,58985],{"class":49},"splice",[39,58987,58988],{"class":53},"(random, ",[39,58990,1483],{"class":74},[39,58992,574],{"class":53},[39,58994,58995],{"class":41,"line":17828},[39,58996,34436],{"class":53},[39,58998,58999],{"class":41,"line":17842},[39,59000,122],{"emptyLinePlaceholder":121},[39,59002,59003,59005,59007],{"class":41,"line":17854},[39,59004,53392],{"class":53},[39,59006,52788],{"class":52275},[39,59008,52282],{"class":53},[39,59010,59011,59013,59015],{"class":41,"line":17859},[39,59012,52760],{"class":53},[39,59014,52775],{"class":52275},[39,59016,52282],{"class":53},[39,59018,59019],{"class":41,"line":17872},[39,59020,122],{"emptyLinePlaceholder":121},[39,59022,59023,59025,59027],{"class":41,"line":17877},[39,59024,52760],{"class":53},[39,59026,51610],{"class":52275},[39,59028,52282],{"class":53},[19,59030,59031],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[476,59033,59035],{"id":59034},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[30,59037,59039],{"className":51608,"code":59038,"language":51610,"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",[26,59040,59041,59051,59065,59069,59077,59091,59111,59123,59131,59135,59143,59155,59163,59182,59199,59215,59225,59229,59237,59245,59249],{"__ignoreMap":35},[39,59042,59043,59045,59047,59049],{"class":41,"line":42},[39,59044,52272],{"class":53},[39,59046,52276],{"class":52275},[39,59048,52279],{"class":49},[39,59050,52282],{"class":53},[39,59052,59053,59055,59057,59059,59061,59063],{"class":41,"line":92},[39,59054,2170],{"class":53},[39,59056,51610],{"class":52275},[39,59058,52291],{"class":49},[39,59060,1117],{"class":53},[39,59062,52296],{"class":237},[39,59064,52282],{"class":53},[39,59066,59067],{"class":41,"line":112},[39,59068,122],{"emptyLinePlaceholder":121},[39,59070,59071,59073,59075],{"class":41,"line":118},[39,59072,2170],{"class":53},[39,59074,52309],{"class":52275},[39,59076,52282],{"class":53},[39,59078,59079,59081,59083,59085,59087,59089],{"class":41,"line":125},[39,59080,53119],{"class":53},[39,59082,52319],{"class":52275},[39,59084,52322],{"class":49},[39,59086,1117],{"class":53},[39,59088,52327],{"class":237},[39,59090,52282],{"class":53},[39,59092,59093,59095,59097,59099,59101,59103,59105,59107,59109],{"class":41,"line":132},[39,59094,53119],{"class":53},[39,59096,52319],{"class":52275},[39,59098,15893],{"class":49},[39,59100,1117],{"class":53},[39,59102,52366],{"class":237},[39,59104,52346],{"class":49},[39,59106,1117],{"class":53},[39,59108,52373],{"class":237},[39,59110,52282],{"class":53},[39,59112,59113,59115,59117,59119,59121],{"class":41,"line":138},[39,59114,53119],{"class":53},[39,59116,52382],{"class":52275},[39,59118,52385],{"class":53},[39,59120,52382],{"class":52275},[39,59122,52282],{"class":53},[39,59124,59125,59127,59129],{"class":41,"line":169},[39,59126,52760],{"class":53},[39,59128,52309],{"class":52275},[39,59130,52282],{"class":53},[39,59132,59133],{"class":41,"line":190},[39,59134,122],{"emptyLinePlaceholder":121},[39,59136,59137,59139,59141],{"class":41,"line":202},[39,59138,2170],{"class":53},[39,59140,52775],{"class":52275},[39,59142,52282],{"class":53},[39,59144,59145,59147,59149,59151,59153],{"class":41,"line":207},[39,59146,53119],{"class":53},[39,59148,54862],{"class":52275},[39,59150,54868],{"class":53},[39,59152,54862],{"class":52275},[39,59154,52282],{"class":53},[39,59156,59157,59159,59161],{"class":41,"line":212},[39,59158,53119],{"class":53},[39,59160,52788],{"class":52275},[39,59162,52282],{"class":53},[39,59164,59165,59167,59169,59171,59173,59175,59177,59180],{"class":41,"line":223},[39,59166,12283],{"class":45},[39,59168,55366],{"class":74},[39,59170,71],{"class":45},[39,59172,55371],{"class":53},[39,59174,55374],{"class":49},[39,59176,54],{"class":53},[39,59178,59179],{"class":237},"'button'",[39,59181,574],{"class":53},[39,59183,59184,59187,59189,59191,59193,59195,59197],{"class":41,"line":228},[39,59185,59186],{"class":53},"    btn.",[39,59188,58788],{"class":49},[39,59190,54],{"class":53},[39,59192,58793],{"class":237},[39,59194,63],{"class":53},[39,59196,55424],{"class":45},[39,59198,55427],{"class":53},[39,59200,59201,59204,59206,59208,59211,59213],{"class":41,"line":263},[39,59202,59203],{"class":45},"      const",[39,59205,3337],{"class":74},[39,59207,71],{"class":45},[39,59209,59210],{"class":53}," Math.",[39,59212,58835],{"class":49},[39,59214,537],{"class":53},[39,59216,59217,59220,59223],{"class":41,"line":287},[39,59218,59219],{"class":53},"      console.",[39,59221,59222],{"class":49},"log",[39,59224,1285],{"class":53},[39,59226,59227],{"class":41,"line":292},[39,59228,34436],{"class":53},[39,59230,59231,59233,59235],{"class":41,"line":305},[39,59232,53392],{"class":53},[39,59234,52788],{"class":52275},[39,59236,52282],{"class":53},[39,59238,59239,59241,59243],{"class":41,"line":310},[39,59240,52760],{"class":53},[39,59242,52775],{"class":52275},[39,59244,52282],{"class":53},[39,59246,59247],{"class":41,"line":321},[39,59248,122],{"emptyLinePlaceholder":121},[39,59250,59251,59253,59255],{"class":41,"line":713},[39,59252,52760],{"class":53},[39,59254,51610],{"class":52275},[39,59256,52282],{"class":53},[19,59258,59259],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,59261,59262],{},"常量不可以重新赋值",[19,59264,59265],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[30,59267,59269],{"className":51608,"code":59268,"language":51610,"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",[26,59270,59271,59281,59295,59299,59307,59321,59341,59353,59361,59365,59373,59385,59393,59404,59422,59438,59452,59460,59464,59472,59480,59484],{"__ignoreMap":35},[39,59272,59273,59275,59277,59279],{"class":41,"line":42},[39,59274,52272],{"class":53},[39,59276,52276],{"class":52275},[39,59278,52279],{"class":49},[39,59280,52282],{"class":53},[39,59282,59283,59285,59287,59289,59291,59293],{"class":41,"line":92},[39,59284,2170],{"class":53},[39,59286,51610],{"class":52275},[39,59288,52291],{"class":49},[39,59290,1117],{"class":53},[39,59292,52296],{"class":237},[39,59294,52282],{"class":53},[39,59296,59297],{"class":41,"line":112},[39,59298,122],{"emptyLinePlaceholder":121},[39,59300,59301,59303,59305],{"class":41,"line":118},[39,59302,2170],{"class":53},[39,59304,52309],{"class":52275},[39,59306,52282],{"class":53},[39,59308,59309,59311,59313,59315,59317,59319],{"class":41,"line":125},[39,59310,53119],{"class":53},[39,59312,52319],{"class":52275},[39,59314,52322],{"class":49},[39,59316,1117],{"class":53},[39,59318,52327],{"class":237},[39,59320,52282],{"class":53},[39,59322,59323,59325,59327,59329,59331,59333,59335,59337,59339],{"class":41,"line":132},[39,59324,53119],{"class":53},[39,59326,52319],{"class":52275},[39,59328,15893],{"class":49},[39,59330,1117],{"class":53},[39,59332,52366],{"class":237},[39,59334,52346],{"class":49},[39,59336,1117],{"class":53},[39,59338,52373],{"class":237},[39,59340,52282],{"class":53},[39,59342,59343,59345,59347,59349,59351],{"class":41,"line":138},[39,59344,53119],{"class":53},[39,59346,52382],{"class":52275},[39,59348,52385],{"class":53},[39,59350,52382],{"class":52275},[39,59352,52282],{"class":53},[39,59354,59355,59357,59359],{"class":41,"line":169},[39,59356,52760],{"class":53},[39,59358,52309],{"class":52275},[39,59360,52282],{"class":53},[39,59362,59363],{"class":41,"line":190},[39,59364,122],{"emptyLinePlaceholder":121},[39,59366,59367,59369,59371],{"class":41,"line":202},[39,59368,2170],{"class":53},[39,59370,52775],{"class":52275},[39,59372,52282],{"class":53},[39,59374,59375,59377,59379,59381,59383],{"class":41,"line":207},[39,59376,53119],{"class":53},[39,59378,54862],{"class":52275},[39,59380,54868],{"class":53},[39,59382,54862],{"class":52275},[39,59384,52282],{"class":53},[39,59386,59387,59389,59391],{"class":41,"line":212},[39,59388,53119],{"class":53},[39,59390,52788],{"class":52275},[39,59392,52282],{"class":53},[39,59394,59395,59397,59399,59401],{"class":41,"line":223},[39,59396,12283],{"class":45},[39,59398,3337],{"class":74},[39,59400,71],{"class":45},[39,59402,59403],{"class":74}," 10\n",[39,59405,59406,59408,59410,59412,59414,59416,59418,59420],{"class":41,"line":228},[39,59407,12283],{"class":45},[39,59409,55366],{"class":74},[39,59411,71],{"class":45},[39,59413,55371],{"class":53},[39,59415,55374],{"class":49},[39,59417,54],{"class":53},[39,59419,59179],{"class":237},[39,59421,574],{"class":53},[39,59423,59424,59426,59428,59430,59432,59434,59436],{"class":41,"line":263},[39,59425,59186],{"class":53},[39,59427,58788],{"class":49},[39,59429,54],{"class":53},[39,59431,58793],{"class":237},[39,59433,63],{"class":53},[39,59435,55424],{"class":45},[39,59437,55427],{"class":53},[39,59439,59440,59442,59444,59446,59448,59450],{"class":41,"line":287},[39,59441,59203],{"class":45},[39,59443,3337],{"class":74},[39,59445,71],{"class":45},[39,59447,59210],{"class":53},[39,59449,58835],{"class":49},[39,59451,537],{"class":53},[39,59453,59454,59456,59458],{"class":41,"line":292},[39,59455,59219],{"class":53},[39,59457,59222],{"class":49},[39,59459,1285],{"class":53},[39,59461,59462],{"class":41,"line":305},[39,59463,34436],{"class":53},[39,59465,59466,59468,59470],{"class":41,"line":310},[39,59467,53392],{"class":53},[39,59469,52788],{"class":52275},[39,59471,52282],{"class":53},[39,59473,59474,59476,59478],{"class":41,"line":321},[39,59475,52760],{"class":53},[39,59477,52775],{"class":52275},[39,59479,52282],{"class":53},[39,59481,59482],{"class":41,"line":713},[39,59483,122],{"emptyLinePlaceholder":121},[39,59485,59486,59488,59490],{"class":41,"line":718},[39,59487,52760],{"class":53},[39,59489,51610],{"class":52275},[39,59491,52282],{"class":53},[19,59493,59494],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[30,59496,59498],{"className":51608,"code":59497,"language":51610,"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",[26,59499,59500,59510,59524,59528,59536,59550,59570,59582,59590,59594,59602,59614,59622,59632,59650,59666,59679,59687,59691,59699,59707,59711],{"__ignoreMap":35},[39,59501,59502,59504,59506,59508],{"class":41,"line":42},[39,59503,52272],{"class":53},[39,59505,52276],{"class":52275},[39,59507,52279],{"class":49},[39,59509,52282],{"class":53},[39,59511,59512,59514,59516,59518,59520,59522],{"class":41,"line":92},[39,59513,2170],{"class":53},[39,59515,51610],{"class":52275},[39,59517,52291],{"class":49},[39,59519,1117],{"class":53},[39,59521,52296],{"class":237},[39,59523,52282],{"class":53},[39,59525,59526],{"class":41,"line":112},[39,59527,122],{"emptyLinePlaceholder":121},[39,59529,59530,59532,59534],{"class":41,"line":118},[39,59531,2170],{"class":53},[39,59533,52309],{"class":52275},[39,59535,52282],{"class":53},[39,59537,59538,59540,59542,59544,59546,59548],{"class":41,"line":125},[39,59539,53119],{"class":53},[39,59541,52319],{"class":52275},[39,59543,52322],{"class":49},[39,59545,1117],{"class":53},[39,59547,52327],{"class":237},[39,59549,52282],{"class":53},[39,59551,59552,59554,59556,59558,59560,59562,59564,59566,59568],{"class":41,"line":132},[39,59553,53119],{"class":53},[39,59555,52319],{"class":52275},[39,59557,15893],{"class":49},[39,59559,1117],{"class":53},[39,59561,52366],{"class":237},[39,59563,52346],{"class":49},[39,59565,1117],{"class":53},[39,59567,52373],{"class":237},[39,59569,52282],{"class":53},[39,59571,59572,59574,59576,59578,59580],{"class":41,"line":138},[39,59573,53119],{"class":53},[39,59575,52382],{"class":52275},[39,59577,52385],{"class":53},[39,59579,52382],{"class":52275},[39,59581,52282],{"class":53},[39,59583,59584,59586,59588],{"class":41,"line":169},[39,59585,52760],{"class":53},[39,59587,52309],{"class":52275},[39,59589,52282],{"class":53},[39,59591,59592],{"class":41,"line":190},[39,59593,122],{"emptyLinePlaceholder":121},[39,59595,59596,59598,59600],{"class":41,"line":202},[39,59597,2170],{"class":53},[39,59599,52775],{"class":52275},[39,59601,52282],{"class":53},[39,59603,59604,59606,59608,59610,59612],{"class":41,"line":207},[39,59605,53119],{"class":53},[39,59607,54862],{"class":52275},[39,59609,54868],{"class":53},[39,59611,54862],{"class":52275},[39,59613,52282],{"class":53},[39,59615,59616,59618,59620],{"class":41,"line":212},[39,59617,53119],{"class":53},[39,59619,52788],{"class":52275},[39,59621,52282],{"class":53},[39,59623,59624,59626,59628,59630],{"class":41,"line":223},[39,59625,12283],{"class":45},[39,59627,3337],{"class":74},[39,59629,71],{"class":45},[39,59631,59403],{"class":74},[39,59633,59634,59636,59638,59640,59642,59644,59646,59648],{"class":41,"line":228},[39,59635,12283],{"class":45},[39,59637,55366],{"class":74},[39,59639,71],{"class":45},[39,59641,55371],{"class":53},[39,59643,55374],{"class":49},[39,59645,54],{"class":53},[39,59647,59179],{"class":237},[39,59649,574],{"class":53},[39,59651,59652,59654,59656,59658,59660,59662,59664],{"class":41,"line":263},[39,59653,59186],{"class":53},[39,59655,58788],{"class":49},[39,59657,54],{"class":53},[39,59659,58793],{"class":237},[39,59661,63],{"class":53},[39,59663,55424],{"class":45},[39,59665,55427],{"class":53},[39,59667,59668,59671,59673,59675,59677],{"class":41,"line":287},[39,59669,59670],{"class":53},"      num ",[39,59672,1117],{"class":45},[39,59674,59210],{"class":53},[39,59676,58835],{"class":49},[39,59678,537],{"class":53},[39,59680,59681,59683,59685],{"class":41,"line":292},[39,59682,59219],{"class":53},[39,59684,59222],{"class":49},[39,59686,1285],{"class":53},[39,59688,59689],{"class":41,"line":305},[39,59690,34436],{"class":53},[39,59692,59693,59695,59697],{"class":41,"line":310},[39,59694,53392],{"class":53},[39,59696,52788],{"class":52275},[39,59698,52282],{"class":53},[39,59700,59701,59703,59705],{"class":41,"line":321},[39,59702,52760],{"class":53},[39,59704,52775],{"class":52275},[39,59706,52282],{"class":53},[39,59708,59709],{"class":41,"line":713},[39,59710,122],{"emptyLinePlaceholder":121},[39,59712,59713,59715,59717],{"class":41,"line":718},[39,59714,52760],{"class":53},[39,59716,51610],{"class":52275},[39,59718,52282],{"class":53},[19,59720,59721],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[476,59723,59725],{"id":59724},"_324-事件监听版本","3.2.4 事件监听版本",[19,59727,59728],{},[2585,59729],{"alt":35,"src":59730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59732,59733],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59735,59736],{},"这种方式会覆盖前边的事件监听:",[30,59738,59740],{"className":51608,"code":59739,"language":51610,"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",[26,59741,59742,59752,59766,59770,59778,59792,59812,59824,59832,59836,59844,59856,59864,59882,59896,59907,59911,59923,59933,59937,59945,59953,59957],{"__ignoreMap":35},[39,59743,59744,59746,59748,59750],{"class":41,"line":42},[39,59745,52272],{"class":53},[39,59747,52276],{"class":52275},[39,59749,52279],{"class":49},[39,59751,52282],{"class":53},[39,59753,59754,59756,59758,59760,59762,59764],{"class":41,"line":92},[39,59755,2170],{"class":53},[39,59757,51610],{"class":52275},[39,59759,52291],{"class":49},[39,59761,1117],{"class":53},[39,59763,52296],{"class":237},[39,59765,52282],{"class":53},[39,59767,59768],{"class":41,"line":112},[39,59769,122],{"emptyLinePlaceholder":121},[39,59771,59772,59774,59776],{"class":41,"line":118},[39,59773,2170],{"class":53},[39,59775,52309],{"class":52275},[39,59777,52282],{"class":53},[39,59779,59780,59782,59784,59786,59788,59790],{"class":41,"line":125},[39,59781,53119],{"class":53},[39,59783,52319],{"class":52275},[39,59785,52322],{"class":49},[39,59787,1117],{"class":53},[39,59789,52327],{"class":237},[39,59791,52282],{"class":53},[39,59793,59794,59796,59798,59800,59802,59804,59806,59808,59810],{"class":41,"line":132},[39,59795,53119],{"class":53},[39,59797,52319],{"class":52275},[39,59799,15893],{"class":49},[39,59801,1117],{"class":53},[39,59803,52366],{"class":237},[39,59805,52346],{"class":49},[39,59807,1117],{"class":53},[39,59809,52373],{"class":237},[39,59811,52282],{"class":53},[39,59813,59814,59816,59818,59820,59822],{"class":41,"line":138},[39,59815,53119],{"class":53},[39,59817,52382],{"class":52275},[39,59819,52385],{"class":53},[39,59821,52382],{"class":52275},[39,59823,52282],{"class":53},[39,59825,59826,59828,59830],{"class":41,"line":169},[39,59827,52760],{"class":53},[39,59829,52309],{"class":52275},[39,59831,52282],{"class":53},[39,59833,59834],{"class":41,"line":190},[39,59835,122],{"emptyLinePlaceholder":121},[39,59837,59838,59840,59842],{"class":41,"line":202},[39,59839,2170],{"class":53},[39,59841,52775],{"class":52275},[39,59843,52282],{"class":53},[39,59845,59846,59848,59850,59852,59854],{"class":41,"line":207},[39,59847,53119],{"class":53},[39,59849,54862],{"class":52275},[39,59851,54868],{"class":53},[39,59853,54862],{"class":52275},[39,59855,52282],{"class":53},[39,59857,59858,59860,59862],{"class":41,"line":212},[39,59859,53119],{"class":53},[39,59861,52788],{"class":52275},[39,59863,52282],{"class":53},[39,59865,59866,59868,59870,59872,59874,59876,59878,59880],{"class":41,"line":223},[39,59867,12283],{"class":45},[39,59869,55366],{"class":74},[39,59871,71],{"class":45},[39,59873,55371],{"class":53},[39,59875,55374],{"class":49},[39,59877,54],{"class":53},[39,59879,59179],{"class":237},[39,59881,574],{"class":53},[39,59883,59884,59886,59889,59891,59894],{"class":41,"line":228},[39,59885,59186],{"class":53},[39,59887,59888],{"class":49},"onclick",[39,59890,71],{"class":45},[39,59892,59893],{"class":45}," function",[39,59895,55427],{"class":53},[39,59897,59898,59901,59903,59905],{"class":41,"line":263},[39,59899,59900],{"class":49},"      alert",[39,59902,54],{"class":53},[39,59904,1734],{"class":74},[39,59906,574],{"class":53},[39,59908,59909],{"class":41,"line":287},[39,59910,3284],{"class":53},[39,59912,59913,59915,59917,59919,59921],{"class":41,"line":292},[39,59914,59186],{"class":53},[39,59916,59888],{"class":49},[39,59918,71],{"class":45},[39,59920,59893],{"class":45},[39,59922,55427],{"class":53},[39,59924,59925,59927,59929,59931],{"class":41,"line":305},[39,59926,59900],{"class":49},[39,59928,54],{"class":53},[39,59930,2010],{"class":74},[39,59932,574],{"class":53},[39,59934,59935],{"class":41,"line":310},[39,59936,3284],{"class":53},[39,59938,59939,59941,59943],{"class":41,"line":321},[39,59940,53392],{"class":53},[39,59942,52788],{"class":52275},[39,59944,52282],{"class":53},[39,59946,59947,59949,59951],{"class":41,"line":713},[39,59948,52760],{"class":53},[39,59950,52775],{"class":52275},[39,59952,52282],{"class":53},[39,59954,59955],{"class":41,"line":718},[39,59956,122],{"emptyLinePlaceholder":121},[39,59958,59959,59961,59963],{"class":41,"line":723},[39,59960,52760],{"class":53},[39,59962,51610],{"class":52275},[39,59964,52282],{"class":53},[19,59966,59967],{},"只要点击就输出结果为22,前边11被覆盖了",[30,59969,59971],{"className":51608,"code":59970,"language":51610,"meta":35,"style":35},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[26,59972,59973,59978,59983,59987,59992,59997],{"__ignoreMap":35},[39,59974,59975],{"class":41,"line":42},[39,59976,59977],{"class":53},"  btn.addEventListener('click', function () {\n",[39,59979,59980],{"class":41,"line":92},[39,59981,59982],{"class":53},"      alert(11)\n",[39,59984,59985],{"class":41,"line":112},[39,59986,34436],{"class":53},[39,59988,59989],{"class":41,"line":118},[39,59990,59991],{"class":53},"    btn.addEventListener('click', function () {\n",[39,59993,59994],{"class":41,"line":125},[39,59995,59996],{"class":53},"      alert(22)\n",[39,59998,59999],{"class":41,"line":132},[39,60000,34436],{"class":53},[19,60002,60003],{},"点击第一次输出11,第二次点击为22",[476,60005,60007],{"id":60006},"_325-事件类型","3.2.5 事件类型",[19,60009,60010],{},[2585,60011],{"alt":35,"src":60012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22971,60014,60016],{"id":60015},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60018,60019],{},"补充知识:",[19,60021,60022],{},"轮播图自动播放模块,可以使用",[19,60024,60025],{},"let timerId = setInterval(function () {",[19,60027,60028],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60030,60031],{},"用js方法模拟进行点击事件,click必须加()",[19,60033,60034],{},"next.click()",[19,60036,60037],{},"}, 1000)",[19,60039,60040],{},[2585,60041],{"alt":35,"src":60042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[30,60044,60046],{"className":54042,"code":60045,"language":54044,"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",[26,60047,60048,60052,60062,60076,60080,60088,60103,60123,60143,60156,60164,60169,60174,60178,60182,60187,60192,60197,60202,60206,60210,60215,60220,60225,60229,60233,60238,60242,60247,60252,60256,60260,60265,60270,60275,60280,60285,60289,60293,60298,60303,60308,60313,60318,60322,60326,60331,60336,60341,60346,60351,60356,60361,60366,60371,60376,60380,60384,60389,60394,60398,60402,60407,60412,60416,60421,60426,60430,60434,60439,60443,60448,60453,60457,60462,60466,60470,60475,60480,60485,60490,60495,60500,60505,60509,60513,60517,60522,60527,60532,60537,60541,60549,60557,60561,60569,60584,60598,60619,60627,60641,60654,60669,60688,60700,60712,60724,60736,60748,60760,60772,60780,60795,60819,60843,60851,60859,60867,60875,60880,60885,60890,60895,60900,60905,60910,60915,60920,60925,60929,60934,60939,60944,60949,60954,60959,60964,60969,60974,60978,60983,60988,60993,60998,61003,61008,61013,61018,61023,61028,61033,61038,61042,61046,61051,61056,61061,61065,61070,61075,61080,61085,61090,61094,61099,61103,61107,61111,61115,61119,61123,61128,61133,61138,61143,61148,61153,61158,61163,61168,61172,61176,61181,61186,61191,61196,61201,61205,61210,61215,61220,61225,61230,61235,61239,61243,61248,61252,61257,61261,61266,61271,61276,61281,61286,61291,61295,61303,61311,61315],{"__ignoreMap":35},[39,60049,60050],{"class":41,"line":42},[39,60051,122],{"emptyLinePlaceholder":121},[39,60053,60054,60056,60058,60060],{"class":41,"line":92},[39,60055,52272],{"class":53},[39,60057,52276],{"class":45},[39,60059,52279],{"class":74},[39,60061,52282],{"class":53},[39,60063,60064,60066,60068,60070,60072,60074],{"class":41,"line":112},[39,60065,2170],{"class":53},[39,60067,51610],{"class":52275},[39,60069,52291],{"class":49},[39,60071,1117],{"class":53},[39,60073,52296],{"class":237},[39,60075,52282],{"class":53},[39,60077,60078],{"class":41,"line":118},[39,60079,122],{"emptyLinePlaceholder":121},[39,60081,60082,60084,60086],{"class":41,"line":125},[39,60083,2170],{"class":53},[39,60085,52309],{"class":52275},[39,60087,52282],{"class":53},[39,60089,60090,60092,60094,60096,60098,60100],{"class":41,"line":132},[39,60091,53119],{"class":53},[39,60093,52319],{"class":52275},[39,60095,52322],{"class":49},[39,60097,1117],{"class":53},[39,60099,52327],{"class":237},[39,60101,60102],{"class":53}," \u002F>\n",[39,60104,60105,60107,60109,60111,60113,60115,60117,60119,60121],{"class":41,"line":138},[39,60106,53119],{"class":53},[39,60108,52319],{"class":52275},[39,60110,52338],{"class":49},[39,60112,1117],{"class":53},[39,60114,52343],{"class":237},[39,60116,52346],{"class":49},[39,60118,1117],{"class":53},[39,60120,52351],{"class":237},[39,60122,60102],{"class":53},[39,60124,60125,60127,60129,60131,60133,60135,60137,60139,60141],{"class":41,"line":169},[39,60126,53119],{"class":53},[39,60128,52319],{"class":52275},[39,60130,15893],{"class":49},[39,60132,1117],{"class":53},[39,60134,52366],{"class":237},[39,60136,52346],{"class":49},[39,60138,1117],{"class":53},[39,60140,52373],{"class":237},[39,60142,60102],{"class":53},[39,60144,60145,60147,60149,60152,60154],{"class":41,"line":190},[39,60146,53119],{"class":53},[39,60148,52382],{"class":52275},[39,60150,60151],{"class":53},">轮播图点击切换\u003C\u002F",[39,60153,52382],{"class":52275},[39,60155,52282],{"class":53},[39,60157,60158,60160,60162],{"class":41,"line":202},[39,60159,53119],{"class":53},[39,60161,1192],{"class":52275},[39,60163,52282],{"class":53},[39,60165,60166],{"class":41,"line":207},[39,60167,60168],{"class":53},"    * {\n",[39,60170,60171],{"class":41,"line":212},[39,60172,60173],{"class":53},"      box-sizing: border-box;\n",[39,60175,60176],{"class":41,"line":223},[39,60177,3284],{"class":53},[39,60179,60180],{"class":41,"line":228},[39,60181,122],{"emptyLinePlaceholder":121},[39,60183,60184],{"class":41,"line":263},[39,60185,60186],{"class":53},"    .slider {\n",[39,60188,60189],{"class":41,"line":287},[39,60190,60191],{"class":53},"      width: 560px;\n",[39,60193,60194],{"class":41,"line":292},[39,60195,60196],{"class":53},"      height: 400px;\n",[39,60198,60199],{"class":41,"line":305},[39,60200,60201],{"class":53},"      overflow: hidden;\n",[39,60203,60204],{"class":41,"line":310},[39,60205,3284],{"class":53},[39,60207,60208],{"class":41,"line":321},[39,60209,122],{"emptyLinePlaceholder":121},[39,60211,60212],{"class":41,"line":713},[39,60213,60214],{"class":53},"    .slider-wrapper {\n",[39,60216,60217],{"class":41,"line":718},[39,60218,60219],{"class":53},"      width: 100%;\n",[39,60221,60222],{"class":41,"line":723},[39,60223,60224],{"class":53},"      height: 320px;\n",[39,60226,60227],{"class":41,"line":729},[39,60228,3284],{"class":53},[39,60230,60231],{"class":41,"line":735},[39,60232,122],{"emptyLinePlaceholder":121},[39,60234,60235],{"class":41,"line":741},[39,60236,60237],{"class":53},"    .slider-wrapper img {\n",[39,60239,60240],{"class":41,"line":747},[39,60241,60219],{"class":53},[39,60243,60244],{"class":41,"line":753},[39,60245,60246],{"class":53},"      height: 100%;\n",[39,60248,60249],{"class":41,"line":758},[39,60250,60251],{"class":53},"      display: block;\n",[39,60253,60254],{"class":41,"line":763},[39,60255,3284],{"class":53},[39,60257,60258],{"class":41,"line":772},[39,60259,122],{"emptyLinePlaceholder":121},[39,60261,60262],{"class":41,"line":777},[39,60263,60264],{"class":53},"    .slider-footer {\n",[39,60266,60267],{"class":41,"line":785},[39,60268,60269],{"class":53},"      height: 80px;\n",[39,60271,60272],{"class":41,"line":796},[39,60273,60274],{"class":53},"      background-color: rgb(100, 67, 68);\n",[39,60276,60277],{"class":41,"line":808},[39,60278,60279],{"class":53},"      padding: 12px 12px 0 12px;\n",[39,60281,60282],{"class":41,"line":823},[39,60283,60284],{"class":53},"      position: relative;\n",[39,60286,60287],{"class":41,"line":839},[39,60288,3284],{"class":53},[39,60290,60291],{"class":41,"line":845},[39,60292,122],{"emptyLinePlaceholder":121},[39,60294,60295],{"class":41,"line":856},[39,60296,60297],{"class":53},"    .slider-footer .toggle {\n",[39,60299,60300],{"class":41,"line":861},[39,60301,60302],{"class":53},"      position: absolute;\n",[39,60304,60305],{"class":41,"line":870},[39,60306,60307],{"class":53},"      right: 0;\n",[39,60309,60310],{"class":41,"line":9084},[39,60311,60312],{"class":53},"      top: 12px;\n",[39,60314,60315],{"class":41,"line":9090},[39,60316,60317],{"class":53},"      display: flex;\n",[39,60319,60320],{"class":41,"line":9102},[39,60321,3284],{"class":53},[39,60323,60324],{"class":41,"line":9114},[39,60325,122],{"emptyLinePlaceholder":121},[39,60327,60328],{"class":41,"line":9126},[39,60329,60330],{"class":53},"    .slider-footer .toggle button {\n",[39,60332,60333],{"class":41,"line":10784},[39,60334,60335],{"class":53},"      margin-right: 12px;\n",[39,60337,60338],{"class":41,"line":10809},[39,60339,60340],{"class":53},"      width: 28px;\n",[39,60342,60343],{"class":41,"line":10832},[39,60344,60345],{"class":53},"      height: 28px;\n",[39,60347,60348],{"class":41,"line":10856},[39,60349,60350],{"class":53},"      appearance: none;\n",[39,60352,60353],{"class":41,"line":10861},[39,60354,60355],{"class":53},"      border: none;\n",[39,60357,60358],{"class":41,"line":10866},[39,60359,60360],{"class":53},"      background: rgba(255, 255, 255, 0.1);\n",[39,60362,60363],{"class":41,"line":10871},[39,60364,60365],{"class":53},"      color: #fff;\n",[39,60367,60368],{"class":41,"line":10880},[39,60369,60370],{"class":53},"      border-radius: 4px;\n",[39,60372,60373],{"class":41,"line":10885},[39,60374,60375],{"class":53},"      cursor: pointer;\n",[39,60377,60378],{"class":41,"line":10891},[39,60379,3284],{"class":53},[39,60381,60382],{"class":41,"line":10912},[39,60383,122],{"emptyLinePlaceholder":121},[39,60385,60386],{"class":41,"line":10918},[39,60387,60388],{"class":53},"    .slider-footer .toggle button:hover {\n",[39,60390,60391],{"class":41,"line":10932},[39,60392,60393],{"class":53},"      background: rgba(255, 255, 255, 0.2);\n",[39,60395,60396],{"class":41,"line":10938},[39,60397,3284],{"class":53},[39,60399,60400],{"class":41,"line":10965},[39,60401,122],{"emptyLinePlaceholder":121},[39,60403,60404],{"class":41,"line":10974},[39,60405,60406],{"class":53},"    .slider-footer p {\n",[39,60408,60409],{"class":41,"line":10980},[39,60410,60411],{"class":53},"      margin: 0;\n",[39,60413,60414],{"class":41,"line":10988},[39,60415,60365],{"class":53},[39,60417,60418],{"class":41,"line":10993},[39,60419,60420],{"class":53},"      font-size: 18px;\n",[39,60422,60423],{"class":41,"line":17577},[39,60424,60425],{"class":53},"      margin-bottom: 10px;\n",[39,60427,60428],{"class":41,"line":17583},[39,60429,3284],{"class":53},[39,60431,60432],{"class":41,"line":17606},[39,60433,122],{"emptyLinePlaceholder":121},[39,60435,60436],{"class":41,"line":17612},[39,60437,60438],{"class":53},"    .slider-indicator {\n",[39,60440,60441],{"class":41,"line":17635},[39,60442,60411],{"class":53},[39,60444,60445],{"class":41,"line":17649},[39,60446,60447],{"class":53},"      padding: 0;\n",[39,60449,60450],{"class":41,"line":17669},[39,60451,60452],{"class":53},"      list-style: none;\n",[39,60454,60455],{"class":41,"line":17675},[39,60456,60317],{"class":53},[39,60458,60459],{"class":41,"line":17686},[39,60460,60461],{"class":53},"      align-items: center;\n",[39,60463,60464],{"class":41,"line":17709},[39,60465,3284],{"class":53},[39,60467,60468],{"class":41,"line":17731},[39,60469,122],{"emptyLinePlaceholder":121},[39,60471,60472],{"class":41,"line":17736},[39,60473,60474],{"class":53},"    .slider-indicator li {\n",[39,60476,60477],{"class":41,"line":17742},[39,60478,60479],{"class":53},"      width: 8px;\n",[39,60481,60482],{"class":41,"line":17756},[39,60483,60484],{"class":53},"      height: 8px;\n",[39,60486,60487],{"class":41,"line":17769},[39,60488,60489],{"class":53},"      margin: 4px;\n",[39,60491,60492],{"class":41,"line":17774},[39,60493,60494],{"class":53},"      border-radius: 50%;\n",[39,60496,60497],{"class":41,"line":17788},[39,60498,60499],{"class":53},"      background: #fff;\n",[39,60501,60502],{"class":41,"line":17793},[39,60503,60504],{"class":53},"      opacity: 0.4;\n",[39,60506,60507],{"class":41,"line":17799},[39,60508,60375],{"class":53},[39,60510,60511],{"class":41,"line":17804},[39,60512,3284],{"class":53},[39,60514,60515],{"class":41,"line":17818},[39,60516,122],{"emptyLinePlaceholder":121},[39,60518,60519],{"class":41,"line":17823},[39,60520,60521],{"class":53},"    .slider-indicator li.active {\n",[39,60523,60524],{"class":41,"line":17828},[39,60525,60526],{"class":53},"      width: 12px;\n",[39,60528,60529],{"class":41,"line":17842},[39,60530,60531],{"class":53},"      height: 12px;\n",[39,60533,60534],{"class":41,"line":17854},[39,60535,60536],{"class":53},"      opacity: 1;\n",[39,60538,60539],{"class":41,"line":17859},[39,60540,3284],{"class":53},[39,60542,60543,60545,60547],{"class":41,"line":17872},[39,60544,53392],{"class":53},[39,60546,1192],{"class":52275},[39,60548,52282],{"class":53},[39,60550,60551,60553,60555],{"class":41,"line":17877},[39,60552,52760],{"class":53},[39,60554,52309],{"class":52275},[39,60556,52282],{"class":53},[39,60558,60559],{"class":41,"line":17882},[39,60560,122],{"emptyLinePlaceholder":121},[39,60562,60563,60565,60567],{"class":41,"line":17887},[39,60564,2170],{"class":53},[39,60566,52775],{"class":52275},[39,60568,52282],{"class":53},[39,60570,60571,60573,60575,60577,60579,60582],{"class":41,"line":17900},[39,60572,53119],{"class":53},[39,60574,52586],{"class":52275},[39,60576,54461],{"class":49},[39,60578,1117],{"class":53},[39,60580,60581],{"class":237},"\"slider\"",[39,60583,52282],{"class":53},[39,60585,60586,60588,60590,60592,60594,60596],{"class":41,"line":17905},[39,60587,52316],{"class":53},[39,60589,52586],{"class":52275},[39,60591,54461],{"class":49},[39,60593,1117],{"class":53},[39,60595,56202],{"class":237},[39,60597,52282],{"class":53},[39,60599,60600,60602,60604,60606,60608,60611,60613,60615,60617],{"class":41,"line":33608},[39,60601,56209],{"class":53},[39,60603,2585],{"class":52275},[39,60605,56214],{"class":49},[39,60607,1117],{"class":53},[39,60609,60610],{"class":237},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[39,60612,56222],{"class":49},[39,60614,1117],{"class":53},[39,60616,8726],{"class":237},[39,60618,60102],{"class":53},[39,60620,60621,60623,60625],{"class":41,"line":33614},[39,60622,52751],{"class":53},[39,60624,52586],{"class":52275},[39,60626,52282],{"class":53},[39,60628,60629,60631,60633,60635,60637,60639],{"class":41,"line":33620},[39,60630,52316],{"class":53},[39,60632,52586],{"class":52275},[39,60634,54461],{"class":49},[39,60636,1117],{"class":53},[39,60638,56249],{"class":237},[39,60640,52282],{"class":53},[39,60642,60643,60645,60647,60650,60652],{"class":41,"line":33626},[39,60644,56209],{"class":53},[39,60646,19],{"class":52275},[39,60648,60649],{"class":53},">对人类来说会不会太超前了？\u003C\u002F",[39,60651,19],{"class":52275},[39,60653,52282],{"class":53},[39,60655,60656,60658,60660,60662,60664,60667],{"class":41,"line":33632},[39,60657,56209],{"class":53},[39,60659,489],{"class":52275},[39,60661,54461],{"class":49},[39,60663,1117],{"class":53},[39,60665,60666],{"class":237},"\"slider-indicator\"",[39,60668,52282],{"class":53},[39,60670,60671,60673,60675,60677,60679,60682,60684,60686],{"class":41,"line":33643},[39,60672,56277],{"class":53},[39,60674,331],{"class":52275},[39,60676,54461],{"class":49},[39,60678,1117],{"class":53},[39,60680,60681],{"class":237},"\"active\"",[39,60683,56289],{"class":53},[39,60685,331],{"class":52275},[39,60687,52282],{"class":53},[39,60689,60690,60692,60694,60696,60698],{"class":41,"line":33649},[39,60691,56277],{"class":53},[39,60693,331],{"class":52275},[39,60695,56289],{"class":53},[39,60697,331],{"class":52275},[39,60699,52282],{"class":53},[39,60701,60702,60704,60706,60708,60710],{"class":41,"line":33669},[39,60703,56277],{"class":53},[39,60705,331],{"class":52275},[39,60707,56289],{"class":53},[39,60709,331],{"class":52275},[39,60711,52282],{"class":53},[39,60713,60714,60716,60718,60720,60722],{"class":41,"line":33675},[39,60715,56277],{"class":53},[39,60717,331],{"class":52275},[39,60719,56289],{"class":53},[39,60721,331],{"class":52275},[39,60723,52282],{"class":53},[39,60725,60726,60728,60730,60732,60734],{"class":41,"line":33686},[39,60727,56277],{"class":53},[39,60729,331],{"class":52275},[39,60731,56289],{"class":53},[39,60733,331],{"class":52275},[39,60735,52282],{"class":53},[39,60737,60738,60740,60742,60744,60746],{"class":41,"line":33692},[39,60739,56277],{"class":53},[39,60741,331],{"class":52275},[39,60743,56289],{"class":53},[39,60745,331],{"class":52275},[39,60747,52282],{"class":53},[39,60749,60750,60752,60754,60756,60758],{"class":41,"line":33698},[39,60751,56277],{"class":53},[39,60753,331],{"class":52275},[39,60755,56289],{"class":53},[39,60757,331],{"class":52275},[39,60759,52282],{"class":53},[39,60761,60762,60764,60766,60768,60770],{"class":41,"line":33704},[39,60763,56277],{"class":53},[39,60765,331],{"class":52275},[39,60767,56289],{"class":53},[39,60769,331],{"class":52275},[39,60771,52282],{"class":53},[39,60773,60774,60776,60778],{"class":41,"line":33710},[39,60775,56382],{"class":53},[39,60777,489],{"class":52275},[39,60779,52282],{"class":53},[39,60781,60782,60784,60786,60788,60790,60793],{"class":41,"line":33716},[39,60783,56209],{"class":53},[39,60785,52586],{"class":52275},[39,60787,54461],{"class":49},[39,60789,1117],{"class":53},[39,60791,60792],{"class":237},"\"toggle\"",[39,60794,52282],{"class":53},[39,60796,60797,60799,60801,60803,60805,60808,60810,60813,60815,60817],{"class":41,"line":33722},[39,60798,56277],{"class":53},[39,60800,54862],{"class":52275},[39,60802,54461],{"class":49},[39,60804,1117],{"class":53},[39,60806,60807],{"class":237},"\"prev\"",[39,60809,2220],{"class":53},[39,60811,60812],{"class":74},"&lt;",[39,60814,52760],{"class":53},[39,60816,54862],{"class":52275},[39,60818,52282],{"class":53},[39,60820,60821,60823,60825,60827,60829,60832,60834,60837,60839,60841],{"class":41,"line":33728},[39,60822,56277],{"class":53},[39,60824,54862],{"class":52275},[39,60826,54461],{"class":49},[39,60828,1117],{"class":53},[39,60830,60831],{"class":237},"\"next\"",[39,60833,2220],{"class":53},[39,60835,60836],{"class":74},"&gt;",[39,60838,52760],{"class":53},[39,60840,54862],{"class":52275},[39,60842,52282],{"class":53},[39,60844,60845,60847,60849],{"class":41,"line":33748},[39,60846,56382],{"class":53},[39,60848,52586],{"class":52275},[39,60850,52282],{"class":53},[39,60852,60853,60855,60857],{"class":41,"line":33754},[39,60854,52751],{"class":53},[39,60856,52586],{"class":52275},[39,60858,52282],{"class":53},[39,60860,60861,60863,60865],{"class":41,"line":33770},[39,60862,53392],{"class":53},[39,60864,52586],{"class":52275},[39,60866,52282],{"class":53},[39,60868,60869,60871,60873],{"class":41,"line":33776},[39,60870,53119],{"class":53},[39,60872,52788],{"class":52275},[39,60874,52282],{"class":53},[39,60876,60877],{"class":41,"line":33790},[39,60878,60879],{"class":53},"    \u002F\u002F 1. 初始数据\n",[39,60881,60882],{"class":41,"line":33796},[39,60883,60884],{"class":53},"    const data = [\n",[39,60886,60887],{"class":41,"line":33811},[39,60888,60889],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[39,60891,60892],{"class":41,"line":33817},[39,60893,60894],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[39,60896,60897],{"class":41,"line":33826},[39,60898,60899],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[39,60901,60902],{"class":41,"line":33832},[39,60903,60904],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[39,60906,60907],{"class":41,"line":33841},[39,60908,60909],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[39,60911,60912],{"class":41,"line":33847},[39,60913,60914],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[39,60916,60917],{"class":41,"line":33853},[39,60918,60919],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[39,60921,60922],{"class":41,"line":33862},[39,60923,60924],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[39,60926,60927],{"class":41,"line":33868},[39,60928,54084],{"class":53},[39,60930,60931],{"class":41,"line":33879},[39,60932,60933],{"class":53},"    \u002F\u002F 获取元素\n",[39,60935,60936],{"class":41,"line":33885},[39,60937,60938],{"class":53},"    const img = document.querySelector('.slider-wrapper img')\n",[39,60940,60941],{"class":41,"line":33904},[39,60942,60943],{"class":53},"    const p = document.querySelector('.slider-footer p')\n",[39,60945,60946],{"class":41,"line":33910},[39,60947,60948],{"class":53},"    const footer = document.querySelector('.slider-footer')\n",[39,60950,60951],{"class":41,"line":33921},[39,60952,60953],{"class":53},"    \u002F\u002F 1. 右按钮业务\n",[39,60955,60956],{"class":41,"line":33927},[39,60957,60958],{"class":53},"    \u002F\u002F 1.1 获取右侧按钮 \n",[39,60960,60961],{"class":41,"line":33947},[39,60962,60963],{"class":53},"    const next = document.querySelector('.next')\n",[39,60965,60966],{"class":41,"line":33963},[39,60967,60968],{"class":53},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[39,60970,60971],{"class":41,"line":33969},[39,60972,60973],{"class":53},"    \u002F\u002F 1.2 注册点击事件\n",[39,60975,60976],{"class":41,"line":33983},[39,60977,122],{"emptyLinePlaceholder":121},[39,60979,60980],{"class":41,"line":33989},[39,60981,60982],{"class":53},"    next.addEventListener('click', function () {\n",[39,60984,60985],{"class":41,"line":33995},[39,60986,60987],{"class":53},"      \u002F\u002F console.log(11)\n",[39,60989,60990],{"class":41,"line":34006},[39,60991,60992],{"class":53},"      i++\n",[39,60994,60995],{"class":41,"line":34012},[39,60996,60997],{"class":53},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[39,60999,61000],{"class":41,"line":34018},[39,61001,61002],{"class":53},"      \u002F\u002F if (i >= 8) {\n",[39,61004,61005],{"class":41,"line":34028},[39,61006,61007],{"class":53},"      \u002F\u002F   i = 0\n",[39,61009,61010],{"class":41,"line":34034},[39,61011,61012],{"class":53},"      \u002F\u002F }\n",[39,61014,61015],{"class":41,"line":34045},[39,61016,61017],{"class":53},"      i = i >= data.length ? 0 : i\n",[39,61019,61020],{"class":41,"line":34051},[39,61021,61022],{"class":53},"      \u002F\u002F 1.3 得到对应的对象\n",[39,61024,61025],{"class":41,"line":34061},[39,61026,61027],{"class":53},"      \u002F\u002F console.log(data[i])\n",[39,61029,61030],{"class":41,"line":34066},[39,61031,61032],{"class":53},"      \u002F\u002F 调用函数\n",[39,61034,61035],{"class":41,"line":34072},[39,61036,61037],{"class":53},"      toggle()\n",[39,61039,61040],{"class":41,"line":34121},[39,61041,34436],{"class":53},[39,61043,61044],{"class":41,"line":34168},[39,61045,122],{"emptyLinePlaceholder":121},[39,61047,61048],{"class":41,"line":34173},[39,61049,61050],{"class":53},"    \u002F\u002F 2. 左侧按钮业务\n",[39,61052,61053],{"class":41,"line":34179},[39,61054,61055],{"class":53},"    \u002F\u002F 2.1 获取左侧按钮 \n",[39,61057,61058],{"class":41,"line":34198},[39,61059,61060],{"class":53},"    const prev = document.querySelector('.prev')\n",[39,61062,61063],{"class":41,"line":34204},[39,61064,60973],{"class":53},[39,61066,61067],{"class":41,"line":34224},[39,61068,61069],{"class":53},"    prev.addEventListener('click', function () {\n",[39,61071,61072],{"class":41,"line":34230},[39,61073,61074],{"class":53},"      i--\n",[39,61076,61077],{"class":41,"line":34236},[39,61078,61079],{"class":53},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[39,61081,61082],{"class":41,"line":34246},[39,61083,61084],{"class":53},"      \u002F\u002F if (i \u003C 0) {\n",[39,61086,61087],{"class":41,"line":34251},[39,61088,61089],{"class":53},"      \u002F\u002F   i = 7\n",[39,61091,61092],{"class":41,"line":34257},[39,61093,61012],{"class":53},[39,61095,61096],{"class":41,"line":34273},[39,61097,61098],{"class":53},"      i = i \u003C 0 ? data.length - 1 : i\n",[39,61100,61101],{"class":41,"line":34318},[39,61102,61022],{"class":53},[39,61104,61105],{"class":41,"line":34324},[39,61106,61027],{"class":53},[39,61108,61109],{"class":41,"line":34330},[39,61110,61032],{"class":53},[39,61112,61113],{"class":41,"line":34336},[39,61114,61037],{"class":53},[39,61116,61117],{"class":41,"line":34347},[39,61118,34436],{"class":53},[39,61120,61121],{"class":41,"line":34353},[39,61122,122],{"emptyLinePlaceholder":121},[39,61124,61125],{"class":41,"line":34359},[39,61126,61127],{"class":53},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[39,61129,61130],{"class":41,"line":34365},[39,61131,61132],{"class":53},"    function toggle() {\n",[39,61134,61135],{"class":41,"line":34383},[39,61136,61137],{"class":53},"      \u002F\u002F 1.4 渲染对应的数据\n",[39,61139,61140],{"class":41,"line":34397},[39,61141,61142],{"class":53},"      img.src = data[i].url\n",[39,61144,61145],{"class":41,"line":34406},[39,61146,61147],{"class":53},"      p.innerHTML = data[i].title\n",[39,61149,61150],{"class":41,"line":34415},[39,61151,61152],{"class":53},"      footer.style.backgroundColor = data[i].color\n",[39,61154,61155],{"class":41,"line":34424},[39,61156,61157],{"class":53},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[39,61159,61160],{"class":41,"line":34433},[39,61161,61162],{"class":53},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[39,61164,61165],{"class":41,"line":34439},[39,61166,61167],{"class":53},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[39,61169,61170],{"class":41,"line":34445},[39,61171,3284],{"class":53},[39,61173,61174],{"class":41,"line":34453},[39,61175,122],{"emptyLinePlaceholder":121},[39,61177,61178],{"class":41,"line":34458},[39,61179,61180],{"class":53},"    \u002F\u002F 3. 自动播放模块\n",[39,61182,61183],{"class":41,"line":34464},[39,61184,61185],{"class":53},"    let timerId = setInterval(function () {\n",[39,61187,61188],{"class":41,"line":34475},[39,61189,61190],{"class":53},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[39,61192,61193],{"class":41,"line":34481},[39,61194,61195],{"class":53},"      next.click()\n",[39,61197,61198],{"class":41,"line":34501},[39,61199,61200],{"class":53},"    }, 1000)\n",[39,61202,61203],{"class":41,"line":34507},[39,61204,122],{"emptyLinePlaceholder":121},[39,61206,61207],{"class":41,"line":34513},[39,61208,61209],{"class":53},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[39,61211,61212],{"class":41,"line":34519},[39,61213,61214],{"class":53},"    const slider = document.querySelector('.slider')\n",[39,61216,61217],{"class":41,"line":34536},[39,61218,61219],{"class":53},"    \u002F\u002F 注册事件\n",[39,61221,61222],{"class":41,"line":34542},[39,61223,61224],{"class":53},"    slider.addEventListener('mouseenter', function () {\n",[39,61226,61227],{"class":41,"line":34548},[39,61228,61229],{"class":53},"      \u002F\u002F 停止定时器\n",[39,61231,61232],{"class":41,"line":34554},[39,61233,61234],{"class":53},"      clearInterval(timerId)\n",[39,61236,61237],{"class":41,"line":34560},[39,61238,34436],{"class":53},[39,61240,61241],{"class":41,"line":34566},[39,61242,122],{"emptyLinePlaceholder":121},[39,61244,61245],{"class":41,"line":34593},[39,61246,61247],{"class":53},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[39,61249,61250],{"class":41,"line":34617},[39,61251,61219],{"class":53},[39,61253,61254],{"class":41,"line":34623},[39,61255,61256],{"class":53},"    slider.addEventListener('mouseleave', function () {\n",[39,61258,61259],{"class":41,"line":34629},[39,61260,61229],{"class":53},[39,61262,61263],{"class":41,"line":34635},[39,61264,61265],{"class":53},"      if (timerId) clearInterval(timerId)\n",[39,61267,61268],{"class":41,"line":34646},[39,61269,61270],{"class":53},"      \u002F\u002F 开启定时器\n",[39,61272,61273],{"class":41,"line":34657},[39,61274,61275],{"class":53},"      timerId = setInterval(function () {\n",[39,61277,61278],{"class":41,"line":34663},[39,61279,61280],{"class":53},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[39,61282,61283],{"class":41,"line":34680},[39,61284,61285],{"class":53},"        next.click()\n",[39,61287,61288],{"class":41,"line":34703},[39,61289,61290],{"class":53},"      }, 1000)\n",[39,61292,61293],{"class":41,"line":34726},[39,61294,34436],{"class":53},[39,61296,61297,61299,61301],{"class":41,"line":34732},[39,61298,53392],{"class":53},[39,61300,52788],{"class":52275},[39,61302,52282],{"class":53},[39,61304,61305,61307,61309],{"class":41,"line":34737},[39,61306,52760],{"class":53},[39,61308,52775],{"class":52275},[39,61310,52282],{"class":53},[39,61312,61313],{"class":41,"line":34746},[39,61314,122],{"emptyLinePlaceholder":121},[39,61316,61317,61319,61321],{"class":41,"line":34756},[39,61318,52760],{"class":53},[39,61320,51610],{"class":52275},[39,61322,52282],{"class":53},[22971,61324,61326],{"id":61325},"_3252-焦点事件","3.2.5.2 焦点事件",[19,61328,61329],{},"小米搜索框案例：",[30,61331,61333],{"className":51608,"code":61332,"language":51610,"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",[26,61334,61335,61345,61359,61363,61371,61385,61405,61425,61437,61445,61451,61461,61471,61483,61487,61491,61498,61502,61513,61517,61521,61528,61539,61552,61566,61570,61574,61583,61595,61607,61621,61634,61647,61665,61676,61680,61684,61693,61710,61714,61718,61725,61735,61745,61756,61769,61781,61797,61808,61820,61824,61828,61836,61847,61864,61876,61888,61899,61903,61907,61918,61929,61933,61941,61945,61953,61957,61965,61980,62003,62018,62049,62076,62103,62130,62157,62184,62211,62220,62228,62236,62241,62261,62281,62286,62291,62309,62314,62324,62329,62343,62348,62353,62370,62379,62391,62395,62403,62411,62415],{"__ignoreMap":35},[39,61336,61337,61339,61341,61343],{"class":41,"line":42},[39,61338,52272],{"class":53},[39,61340,52276],{"class":52275},[39,61342,52279],{"class":49},[39,61344,52282],{"class":53},[39,61346,61347,61349,61351,61353,61355,61357],{"class":41,"line":92},[39,61348,2170],{"class":53},[39,61350,51610],{"class":52275},[39,61352,52291],{"class":49},[39,61354,1117],{"class":53},[39,61356,52296],{"class":237},[39,61358,52282],{"class":53},[39,61360,61361],{"class":41,"line":112},[39,61362,122],{"emptyLinePlaceholder":121},[39,61364,61365,61367,61369],{"class":41,"line":118},[39,61366,2170],{"class":53},[39,61368,52309],{"class":52275},[39,61370,52282],{"class":53},[39,61372,61373,61375,61377,61379,61381,61383],{"class":41,"line":125},[39,61374,52316],{"class":53},[39,61376,52319],{"class":52275},[39,61378,52322],{"class":49},[39,61380,1117],{"class":53},[39,61382,52327],{"class":237},[39,61384,52282],{"class":53},[39,61386,61387,61389,61391,61393,61395,61397,61399,61401,61403],{"class":41,"line":132},[39,61388,52316],{"class":53},[39,61390,52319],{"class":52275},[39,61392,52338],{"class":49},[39,61394,1117],{"class":53},[39,61396,52343],{"class":237},[39,61398,52346],{"class":49},[39,61400,1117],{"class":53},[39,61402,52351],{"class":237},[39,61404,52282],{"class":53},[39,61406,61407,61409,61411,61413,61415,61417,61419,61421,61423],{"class":41,"line":138},[39,61408,52316],{"class":53},[39,61410,52319],{"class":52275},[39,61412,15893],{"class":49},[39,61414,1117],{"class":53},[39,61416,52366],{"class":237},[39,61418,52346],{"class":49},[39,61420,1117],{"class":53},[39,61422,52373],{"class":237},[39,61424,52282],{"class":53},[39,61426,61427,61429,61431,61433,61435],{"class":41,"line":169},[39,61428,52316],{"class":53},[39,61430,52382],{"class":52275},[39,61432,52385],{"class":53},[39,61434,52382],{"class":52275},[39,61436,52282],{"class":53},[39,61438,61439,61441,61443],{"class":41,"line":190},[39,61440,52316],{"class":53},[39,61442,1192],{"class":52275},[39,61444,52282],{"class":53},[39,61446,61447,61449],{"class":41,"line":202},[39,61448,52402],{"class":52275},[39,61450,16545],{"class":53},[39,61452,61453,61455,61457,61459],{"class":41,"line":207},[39,61454,52409],{"class":74},[39,61456,52412],{"class":53},[39,61458,1457],{"class":74},[39,61460,318],{"class":53},[39,61462,61463,61465,61467,61469],{"class":41,"line":212},[39,61464,52421],{"class":74},[39,61466,52412],{"class":53},[39,61468,1457],{"class":74},[39,61470,318],{"class":53},[39,61472,61473,61476,61478,61481],{"class":41,"line":223},[39,61474,61475],{"class":74},"            box-sizing",[39,61477,52412],{"class":53},[39,61479,61480],{"class":74},"border-box",[39,61482,318],{"class":53},[39,61484,61485],{"class":41,"line":228},[39,61486,3622],{"class":53},[39,61488,61489],{"class":41,"line":263},[39,61490,122],{"emptyLinePlaceholder":121},[39,61492,61493,61496],{"class":41,"line":287},[39,61494,61495],{"class":52275},"        ul",[39,61497,16545],{"class":53},[39,61499,61500],{"class":41,"line":292},[39,61501,122],{"emptyLinePlaceholder":121},[39,61503,61504,61507,61509,61511],{"class":41,"line":305},[39,61505,61506],{"class":74},"            list-style",[39,61508,52412],{"class":53},[39,61510,55712],{"class":74},[39,61512,318],{"class":53},[39,61514,61515],{"class":41,"line":310},[39,61516,3622],{"class":53},[39,61518,61519],{"class":41,"line":321},[39,61520,122],{"emptyLinePlaceholder":121},[39,61522,61523,61526],{"class":41,"line":713},[39,61524,61525],{"class":49},"        .mi",[39,61527,16545],{"class":53},[39,61529,61530,61533,61535,61537],{"class":41,"line":718},[39,61531,61532],{"class":74},"            position",[39,61534,52412],{"class":53},[39,61536,55739],{"class":74},[39,61538,318],{"class":53},[39,61540,61541,61543,61545,61548,61550],{"class":41,"line":723},[39,61542,52459],{"class":74},[39,61544,52412],{"class":53},[39,61546,61547],{"class":74},"223",[39,61549,52467],{"class":45},[39,61551,318],{"class":53},[39,61553,61554,61556,61558,61560,61562,61564],{"class":41,"line":729},[39,61555,52409],{"class":74},[39,61557,52412],{"class":53},[39,61559,278],{"class":74},[39,61561,52467],{"class":45},[39,61563,52531],{"class":74},[39,61565,318],{"class":53},[39,61567,61568],{"class":41,"line":735},[39,61569,3622],{"class":53},[39,61571,61572],{"class":41,"line":741},[39,61573,122],{"emptyLinePlaceholder":121},[39,61575,61576,61578,61581],{"class":41,"line":747},[39,61577,61525],{"class":49},[39,61579,61580],{"class":52275}," input",[39,61582,16545],{"class":53},[39,61584,61585,61587,61589,61591,61593],{"class":41,"line":753},[39,61586,52459],{"class":74},[39,61588,52412],{"class":53},[39,61590,61547],{"class":74},[39,61592,52467],{"class":45},[39,61594,318],{"class":53},[39,61596,61597,61599,61601,61603,61605],{"class":41,"line":758},[39,61598,52474],{"class":74},[39,61600,52412],{"class":53},[39,61602,1868],{"class":74},[39,61604,52467],{"class":45},[39,61606,318],{"class":53},[39,61608,61609,61611,61613,61615,61617,61619],{"class":41,"line":763},[39,61610,52421],{"class":74},[39,61612,52412],{"class":53},[39,61614,1457],{"class":74},[39,61616,75],{"class":74},[39,61618,52467],{"class":45},[39,61620,318],{"class":53},[39,61622,61623,61626,61628,61630,61632],{"class":41,"line":772},[39,61624,61625],{"class":74},"            font-size",[39,61627,52412],{"class":53},[39,61629,1810],{"class":74},[39,61631,52467],{"class":45},[39,61633,318],{"class":53},[39,61635,61636,61639,61641,61643,61645],{"class":41,"line":777},[39,61637,61638],{"class":74},"            line-height",[39,61640,52412],{"class":53},[39,61642,1868],{"class":74},[39,61644,52467],{"class":45},[39,61646,318],{"class":53},[39,61648,61649,61652,61654,61656,61658,61660,61663],{"class":41,"line":785},[39,61650,61651],{"class":74},"            border",[39,61653,52412],{"class":53},[39,61655,1483],{"class":74},[39,61657,52467],{"class":45},[39,61659,52496],{"class":74},[39,61661,61662],{"class":74}," #e0e0e0",[39,61664,318],{"class":53},[39,61666,61667,61670,61672,61674],{"class":41,"line":796},[39,61668,61669],{"class":74},"            outline",[39,61671,52412],{"class":53},[39,61673,55712],{"class":74},[39,61675,318],{"class":53},[39,61677,61678],{"class":41,"line":808},[39,61679,3622],{"class":53},[39,61681,61682],{"class":41,"line":823},[39,61683,122],{"emptyLinePlaceholder":121},[39,61685,61686,61688,61691],{"class":41,"line":839},[39,61687,61525],{"class":49},[39,61689,61690],{"class":49}," .search",[39,61692,16545],{"class":53},[39,61694,61695,61697,61699,61701,61703,61705,61708],{"class":41,"line":845},[39,61696,61651],{"class":74},[39,61698,52412],{"class":53},[39,61700,1483],{"class":74},[39,61702,52467],{"class":45},[39,61704,52496],{"class":74},[39,61706,61707],{"class":74}," #ff6700",[39,61709,318],{"class":53},[39,61711,61712],{"class":41,"line":856},[39,61713,3622],{"class":53},[39,61715,61716],{"class":41,"line":861},[39,61717,122],{"emptyLinePlaceholder":121},[39,61719,61720,61723],{"class":41,"line":870},[39,61721,61722],{"class":49},"        .result-list",[39,61724,16545],{"class":53},[39,61726,61727,61729,61731,61733],{"class":41,"line":9084},[39,61728,52447],{"class":74},[39,61730,52412],{"class":53},[39,61732,55712],{"class":74},[39,61734,318],{"class":53},[39,61736,61737,61739,61741,61743],{"class":41,"line":9090},[39,61738,61532],{"class":74},[39,61740,52412],{"class":53},[39,61742,55806],{"class":74},[39,61744,318],{"class":53},[39,61746,61747,61750,61752,61754],{"class":41,"line":9102},[39,61748,61749],{"class":74},"            left",[39,61751,52412],{"class":53},[39,61753,1457],{"class":74},[39,61755,318],{"class":53},[39,61757,61758,61761,61763,61765,61767],{"class":41,"line":9114},[39,61759,61760],{"class":74},"            top",[39,61762,52412],{"class":53},[39,61764,1868],{"class":74},[39,61766,52467],{"class":45},[39,61768,318],{"class":53},[39,61770,61771,61773,61775,61777,61779],{"class":41,"line":9126},[39,61772,52459],{"class":74},[39,61774,52412],{"class":53},[39,61776,61547],{"class":74},[39,61778,52467],{"class":45},[39,61780,318],{"class":53},[39,61782,61783,61785,61787,61789,61791,61793,61795],{"class":41,"line":10784},[39,61784,61651],{"class":74},[39,61786,52412],{"class":53},[39,61788,1483],{"class":74},[39,61790,52467],{"class":45},[39,61792,52496],{"class":74},[39,61794,61707],{"class":74},[39,61796,318],{"class":53},[39,61798,61799,61802,61804,61806],{"class":41,"line":10809},[39,61800,61801],{"class":74},"            border-top",[39,61803,52412],{"class":53},[39,61805,1457],{"class":74},[39,61807,318],{"class":53},[39,61809,61810,61813,61815,61818],{"class":41,"line":10832},[39,61811,61812],{"class":74},"            background",[39,61814,52412],{"class":53},[39,61816,61817],{"class":74},"#fff",[39,61819,318],{"class":53},[39,61821,61822],{"class":41,"line":10856},[39,61823,3622],{"class":53},[39,61825,61826],{"class":41,"line":10861},[39,61827,122],{"emptyLinePlaceholder":121},[39,61829,61830,61832,61834],{"class":41,"line":10866},[39,61831,61722],{"class":49},[39,61833,60],{"class":52275},[39,61835,16545],{"class":53},[39,61837,61838,61840,61842,61845],{"class":41,"line":10871},[39,61839,52447],{"class":74},[39,61841,52412],{"class":53},[39,61843,61844],{"class":74},"block",[39,61846,318],{"class":53},[39,61848,61849,61851,61853,61855,61857,61860,61862],{"class":41,"line":10880},[39,61850,52421],{"class":74},[39,61852,52412],{"class":53},[39,61854,1608],{"class":74},[39,61856,52467],{"class":45},[39,61858,61859],{"class":74}," 15",[39,61861,52467],{"class":45},[39,61863,318],{"class":53},[39,61865,61866,61868,61870,61872,61874],{"class":41,"line":10885},[39,61867,61625],{"class":74},[39,61869,52412],{"class":53},[39,61871,1759],{"class":74},[39,61873,52467],{"class":45},[39,61875,318],{"class":53},[39,61877,61878,61881,61883,61886],{"class":41,"line":10891},[39,61879,61880],{"class":74},"            color",[39,61882,52412],{"class":53},[39,61884,61885],{"class":74},"#424242",[39,61887,318],{"class":53},[39,61889,61890,61893,61895,61897],{"class":41,"line":10912},[39,61891,61892],{"class":74},"            text-decoration",[39,61894,52412],{"class":53},[39,61896,55712],{"class":74},[39,61898,318],{"class":53},[39,61900,61901],{"class":41,"line":10918},[39,61902,3622],{"class":53},[39,61904,61905],{"class":41,"line":10932},[39,61906,122],{"emptyLinePlaceholder":121},[39,61908,61909,61911,61913,61916],{"class":41,"line":10938},[39,61910,61722],{"class":49},[39,61912,60],{"class":52275},[39,61914,61915],{"class":49},":hover",[39,61917,16545],{"class":53},[39,61919,61920,61922,61924,61927],{"class":41,"line":10965},[39,61921,52615],{"class":74},[39,61923,52412],{"class":53},[39,61925,61926],{"class":74},"#eee",[39,61928,318],{"class":53},[39,61930,61931],{"class":41,"line":10974},[39,61932,3622],{"class":53},[39,61934,61935,61937,61939],{"class":41,"line":10980},[39,61936,52751],{"class":53},[39,61938,1192],{"class":52275},[39,61940,52282],{"class":53},[39,61942,61943],{"class":41,"line":10988},[39,61944,122],{"emptyLinePlaceholder":121},[39,61946,61947,61949,61951],{"class":41,"line":10993},[39,61948,52760],{"class":53},[39,61950,52309],{"class":52275},[39,61952,52282],{"class":53},[39,61954,61955],{"class":41,"line":17577},[39,61956,122],{"emptyLinePlaceholder":121},[39,61958,61959,61961,61963],{"class":41,"line":17583},[39,61960,2170],{"class":53},[39,61962,52775],{"class":52275},[39,61964,52282],{"class":53},[39,61966,61967,61969,61971,61973,61975,61978],{"class":41,"line":17606},[39,61968,52316],{"class":53},[39,61970,52586],{"class":52275},[39,61972,54461],{"class":49},[39,61974,1117],{"class":53},[39,61976,61977],{"class":237},"\"mi\"",[39,61979,52282],{"class":53},[39,61981,61982,61984,61986,61988,61990,61993,61996,61998,62001],{"class":41,"line":17612},[39,61983,56277],{"class":53},[39,61985,54796],{"class":52275},[39,61987,54799],{"class":49},[39,61989,1117],{"class":53},[39,61991,61992],{"class":237},"\"search\"",[39,61994,61995],{"class":49}," placeholder",[39,61997,1117],{"class":53},[39,61999,62000],{"class":237},"\"小米笔记本\"",[39,62002,52282],{"class":53},[39,62004,62005,62007,62009,62011,62013,62016],{"class":41,"line":17635},[39,62006,56277],{"class":53},[39,62008,489],{"class":52275},[39,62010,54461],{"class":49},[39,62012,1117],{"class":53},[39,62014,62015],{"class":237},"\"result-list\"",[39,62017,52282],{"class":53},[39,62019,62020,62023,62025,62028,62030,62033,62035,62038,62041,62043,62045,62047],{"class":41,"line":17649},[39,62021,62022],{"class":53},"            \u003C",[39,62024,331],{"class":52275},[39,62026,62027],{"class":53},">\u003C",[39,62029,922],{"class":52275},[39,62031,62032],{"class":49}," href",[39,62034,1117],{"class":53},[39,62036,62037],{"class":237},"\"#\"",[39,62039,62040],{"class":53},">全部商品\u003C\u002F",[39,62042,922],{"class":52275},[39,62044,56289],{"class":53},[39,62046,331],{"class":52275},[39,62048,52282],{"class":53},[39,62050,62051,62053,62055,62057,62059,62061,62063,62065,62068,62070,62072,62074],{"class":41,"line":17669},[39,62052,62022],{"class":53},[39,62054,331],{"class":52275},[39,62056,62027],{"class":53},[39,62058,922],{"class":52275},[39,62060,62032],{"class":49},[39,62062,1117],{"class":53},[39,62064,62037],{"class":237},[39,62066,62067],{"class":53},">小米11\u003C\u002F",[39,62069,922],{"class":52275},[39,62071,56289],{"class":53},[39,62073,331],{"class":52275},[39,62075,52282],{"class":53},[39,62077,62078,62080,62082,62084,62086,62088,62090,62092,62095,62097,62099,62101],{"class":41,"line":17675},[39,62079,62022],{"class":53},[39,62081,331],{"class":52275},[39,62083,62027],{"class":53},[39,62085,922],{"class":52275},[39,62087,62032],{"class":49},[39,62089,1117],{"class":53},[39,62091,62037],{"class":237},[39,62093,62094],{"class":53},">小米10S\u003C\u002F",[39,62096,922],{"class":52275},[39,62098,56289],{"class":53},[39,62100,331],{"class":52275},[39,62102,52282],{"class":53},[39,62104,62105,62107,62109,62111,62113,62115,62117,62119,62122,62124,62126,62128],{"class":41,"line":17686},[39,62106,62022],{"class":53},[39,62108,331],{"class":52275},[39,62110,62027],{"class":53},[39,62112,922],{"class":52275},[39,62114,62032],{"class":49},[39,62116,1117],{"class":53},[39,62118,62037],{"class":237},[39,62120,62121],{"class":53},">小米笔记本\u003C\u002F",[39,62123,922],{"class":52275},[39,62125,56289],{"class":53},[39,62127,331],{"class":52275},[39,62129,52282],{"class":53},[39,62131,62132,62134,62136,62138,62140,62142,62144,62146,62149,62151,62153,62155],{"class":41,"line":17709},[39,62133,62022],{"class":53},[39,62135,331],{"class":52275},[39,62137,62027],{"class":53},[39,62139,922],{"class":52275},[39,62141,62032],{"class":49},[39,62143,1117],{"class":53},[39,62145,62037],{"class":237},[39,62147,62148],{"class":53},">小米手机\u003C\u002F",[39,62150,922],{"class":52275},[39,62152,56289],{"class":53},[39,62154,331],{"class":52275},[39,62156,52282],{"class":53},[39,62158,62159,62161,62163,62165,62167,62169,62171,62173,62176,62178,62180,62182],{"class":41,"line":17731},[39,62160,62022],{"class":53},[39,62162,331],{"class":52275},[39,62164,62027],{"class":53},[39,62166,922],{"class":52275},[39,62168,62032],{"class":49},[39,62170,1117],{"class":53},[39,62172,62037],{"class":237},[39,62174,62175],{"class":53},">黑鲨4\u003C\u002F",[39,62177,922],{"class":52275},[39,62179,56289],{"class":53},[39,62181,331],{"class":52275},[39,62183,52282],{"class":53},[39,62185,62186,62188,62190,62192,62194,62196,62198,62200,62203,62205,62207,62209],{"class":41,"line":17736},[39,62187,62022],{"class":53},[39,62189,331],{"class":52275},[39,62191,62027],{"class":53},[39,62193,922],{"class":52275},[39,62195,62032],{"class":49},[39,62197,1117],{"class":53},[39,62199,62037],{"class":237},[39,62201,62202],{"class":53},">空调\u003C\u002F",[39,62204,922],{"class":52275},[39,62206,56289],{"class":53},[39,62208,331],{"class":52275},[39,62210,52282],{"class":53},[39,62212,62213,62216,62218],{"class":41,"line":17742},[39,62214,62215],{"class":53},"        \u003C\u002F",[39,62217,489],{"class":52275},[39,62219,52282],{"class":53},[39,62221,62222,62224,62226],{"class":41,"line":17756},[39,62223,52751],{"class":53},[39,62225,52586],{"class":52275},[39,62227,52282],{"class":53},[39,62229,62230,62232,62234],{"class":41,"line":17769},[39,62231,52316],{"class":53},[39,62233,52788],{"class":52275},[39,62235,52282],{"class":53},[39,62237,62238],{"class":41,"line":17774},[39,62239,62240],{"class":128},"        \u002F\u002F 1. 获取元素\n",[39,62242,62243,62246,62248,62250,62252,62254,62256,62259],{"class":41,"line":17788},[39,62244,62245],{"class":45},"        const",[39,62247,61580],{"class":74},[39,62249,71],{"class":45},[39,62251,55371],{"class":53},[39,62253,55374],{"class":49},[39,62255,54],{"class":53},[39,62257,62258],{"class":237},"'[type=search]'",[39,62260,574],{"class":53},[39,62262,62263,62265,62268,62270,62272,62274,62276,62279],{"class":41,"line":17793},[39,62264,62245],{"class":45},[39,62266,62267],{"class":74}," ul",[39,62269,71],{"class":45},[39,62271,55371],{"class":53},[39,62273,55374],{"class":49},[39,62275,54],{"class":53},[39,62277,62278],{"class":237},"'.result-list'",[39,62280,574],{"class":53},[39,62282,62283],{"class":41,"line":17799},[39,62284,62285],{"class":128},"        \u002F\u002F console.log(input)\n",[39,62287,62288],{"class":41,"line":17804},[39,62289,62290],{"class":128},"        \u002F\u002F 2. 监听事件 获得焦点\n",[39,62292,62293,62296,62298,62300,62303,62305,62307],{"class":41,"line":17818},[39,62294,62295],{"class":53},"        input.",[39,62297,58788],{"class":49},[39,62299,54],{"class":53},[39,62301,62302],{"class":237},"'focus'",[39,62304,63],{"class":53},[39,62306,55424],{"class":45},[39,62308,55427],{"class":53},[39,62310,62311],{"class":41,"line":17823},[39,62312,62313],{"class":128},"            \u002F\u002F ul显示\n",[39,62315,62316,62319,62321],{"class":41,"line":17828},[39,62317,62318],{"class":53},"            ul.style.display ",[39,62320,1117],{"class":45},[39,62322,62323],{"class":237}," 'block'\n",[39,62325,62326],{"class":41,"line":17842},[39,62327,62328],{"class":128},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[39,62330,62331,62334,62336,62338,62341],{"class":41,"line":17854},[39,62332,62333],{"class":53},"            input.classList.",[39,62335,6413],{"class":49},[39,62337,54],{"class":53},[39,62339,62340],{"class":237},"'search'",[39,62342,574],{"class":53},[39,62344,62345],{"class":41,"line":17859},[39,62346,62347],{"class":53},"        })\n",[39,62349,62350],{"class":41,"line":17872},[39,62351,62352],{"class":128},"        \u002F\u002F 3. 监听事件 失去焦点\n",[39,62354,62355,62357,62359,62361,62364,62366,62368],{"class":41,"line":17877},[39,62356,62295],{"class":53},[39,62358,58788],{"class":49},[39,62360,54],{"class":53},[39,62362,62363],{"class":237},"'blur'",[39,62365,63],{"class":53},[39,62367,55424],{"class":45},[39,62369,55427],{"class":53},[39,62371,62372,62374,62376],{"class":41,"line":17882},[39,62373,62318],{"class":53},[39,62375,1117],{"class":45},[39,62377,62378],{"class":237}," 'none'\n",[39,62380,62381,62383,62385,62387,62389],{"class":41,"line":17887},[39,62382,62333],{"class":53},[39,62384,57981],{"class":49},[39,62386,54],{"class":53},[39,62388,62340],{"class":237},[39,62390,574],{"class":53},[39,62392,62393],{"class":41,"line":17900},[39,62394,62347],{"class":53},[39,62396,62397,62399,62401],{"class":41,"line":17905},[39,62398,52751],{"class":53},[39,62400,52788],{"class":52275},[39,62402,52282],{"class":53},[39,62404,62405,62407,62409],{"class":41,"line":33608},[39,62406,52760],{"class":53},[39,62408,52775],{"class":52275},[39,62410,52282],{"class":53},[39,62412,62413],{"class":41,"line":33614},[39,62414,122],{"emptyLinePlaceholder":121},[39,62416,62417,62419,62421],{"class":41,"line":33620},[39,62418,52760],{"class":53},[39,62420,51610],{"class":52275},[39,62422,52282],{"class":53},[22971,62424,62426],{"id":62425},"_3253-键盘事件","3.2.5.3 键盘事件",[19,62428,62429],{},"评论字数统计案例",[19,62431,62432],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,62434,62435],{},"牢记focus伪类选择器",[52319,62437],{"charSet":62438},"UTF-8",[52319,62440],{"name":62441,"content":62442},"viewport","width=device-width, initial-scale=1.0",[52382,62444,62445],{},"Document",[1192,62447,62448],{},"\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",[54796,62450],{"type":6267},[489,62452,62453,62456],{},[331,62454,62455],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[331,62457,62458],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[30,62460,62462],{"className":51608,"code":62461,"language":51610,"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",[26,62463,62464,62474,62488,62492,62500,62514,62534,62554,62567,62575,62582,62595,62609,62619,62629,62633,62637,62644,62656,62668,62680,62692,62721,62734,62738,62742,62751,62762,62774,62785,62796,62808,62819,62831,62847,62859,62863,62867,62878,62889,62899,62911,62915,62919,62927,62938,62948,62959,62971,62984,62996,63008,63012,63016,63025,63037,63048,63061,63072,63086,63090,63094,63101,63113,63125,63135,63139,63143,63152,63164,63174,63178,63182,63193,63203,63222,63235,63239,63243,63253,63263,63267,63271,63282,63293,63305,63317,63321,63325,63336,63347,63361,63365,63369,63380,63390,63402,63406,63414,63422,63426,63434,63449,63468,63508,63521,63529,63543,63563,63571,63586,63609,63627,63642,63662,63682,63702,63710,63718,63726,63734,63754,63774,63779,63796,63805,63809,63814,63830,63838,63842,63847,63864,63869,63894,63898,63902,63907,63912,63920,63928,63932],{"__ignoreMap":35},[39,62465,62466,62468,62470,62472],{"class":41,"line":42},[39,62467,52272],{"class":53},[39,62469,52276],{"class":52275},[39,62471,52279],{"class":49},[39,62473,52282],{"class":53},[39,62475,62476,62478,62480,62482,62484,62486],{"class":41,"line":92},[39,62477,2170],{"class":53},[39,62479,51610],{"class":52275},[39,62481,52291],{"class":49},[39,62483,1117],{"class":53},[39,62485,52296],{"class":237},[39,62487,52282],{"class":53},[39,62489,62490],{"class":41,"line":112},[39,62491,122],{"emptyLinePlaceholder":121},[39,62493,62494,62496,62498],{"class":41,"line":118},[39,62495,2170],{"class":53},[39,62497,52309],{"class":52275},[39,62499,52282],{"class":53},[39,62501,62502,62504,62506,62508,62510,62512],{"class":41,"line":125},[39,62503,53119],{"class":53},[39,62505,52319],{"class":52275},[39,62507,52322],{"class":49},[39,62509,1117],{"class":53},[39,62511,52327],{"class":237},[39,62513,52282],{"class":53},[39,62515,62516,62518,62520,62522,62524,62526,62528,62530,62532],{"class":41,"line":132},[39,62517,53119],{"class":53},[39,62519,52319],{"class":52275},[39,62521,52338],{"class":49},[39,62523,1117],{"class":53},[39,62525,52343],{"class":237},[39,62527,52346],{"class":49},[39,62529,1117],{"class":53},[39,62531,52351],{"class":237},[39,62533,52282],{"class":53},[39,62535,62536,62538,62540,62542,62544,62546,62548,62550,62552],{"class":41,"line":138},[39,62537,53119],{"class":53},[39,62539,52319],{"class":52275},[39,62541,15893],{"class":49},[39,62543,1117],{"class":53},[39,62545,52366],{"class":237},[39,62547,52346],{"class":49},[39,62549,1117],{"class":53},[39,62551,52373],{"class":237},[39,62553,52282],{"class":53},[39,62555,62556,62558,62560,62563,62565],{"class":41,"line":169},[39,62557,53119],{"class":53},[39,62559,52382],{"class":52275},[39,62561,62562],{"class":53},">评论回车发布\u003C\u002F",[39,62564,52382],{"class":52275},[39,62566,52282],{"class":53},[39,62568,62569,62571,62573],{"class":41,"line":190},[39,62570,53119],{"class":53},[39,62572,1192],{"class":52275},[39,62574,52282],{"class":53},[39,62576,62577,62580],{"class":41,"line":202},[39,62578,62579],{"class":49},"    .wrapper",[39,62581,16545],{"class":53},[39,62583,62584,62587,62589,62591,62593],{"class":41,"line":207},[39,62585,62586],{"class":74},"      min-width",[39,62588,52412],{"class":53},[39,62590,5070],{"class":74},[39,62592,52467],{"class":45},[39,62594,318],{"class":53},[39,62596,62597,62600,62602,62605,62607],{"class":41,"line":212},[39,62598,62599],{"class":74},"      max-width",[39,62601,52412],{"class":53},[39,62603,62604],{"class":74},"800",[39,62606,52467],{"class":45},[39,62608,318],{"class":53},[39,62610,62611,62613,62615,62617],{"class":41,"line":223},[39,62612,55984],{"class":74},[39,62614,52412],{"class":53},[39,62616,52452],{"class":74},[39,62618,318],{"class":53},[39,62620,62621,62623,62625,62627],{"class":41,"line":228},[39,62622,55995],{"class":74},[39,62624,52412],{"class":53},[39,62626,52555],{"class":74},[39,62628,318],{"class":53},[39,62630,62631],{"class":41,"line":263},[39,62632,3284],{"class":53},[39,62634,62635],{"class":41,"line":287},[39,62636,122],{"emptyLinePlaceholder":121},[39,62638,62639,62642],{"class":41,"line":292},[39,62640,62641],{"class":49},"    .avatar",[39,62643,16545],{"class":53},[39,62645,62646,62648,62650,62652,62654],{"class":41,"line":305},[39,62647,55746],{"class":74},[39,62649,52412],{"class":53},[39,62651,1868],{"class":74},[39,62653,52467],{"class":45},[39,62655,318],{"class":53},[39,62657,62658,62660,62662,62664,62666],{"class":41,"line":310},[39,62659,55760],{"class":74},[39,62661,52412],{"class":53},[39,62663,1868],{"class":74},[39,62665,52467],{"class":45},[39,62667,318],{"class":53},[39,62669,62670,62672,62674,62676,62678],{"class":41,"line":321},[39,62671,56109],{"class":74},[39,62673,52412],{"class":53},[39,62675,1917],{"class":74},[39,62677,1592],{"class":45},[39,62679,318],{"class":53},[39,62681,62682,62685,62687,62690],{"class":41,"line":713},[39,62683,62684],{"class":74},"      overflow",[39,62686,52412],{"class":53},[39,62688,62689],{"class":74},"hidden",[39,62691,318],{"class":53},[39,62693,62694,62697,62699,62702,62704,62707,62709,62712,62714,62716,62719],{"class":41,"line":718},[39,62695,62696],{"class":74},"      background",[39,62698,52412],{"class":53},[39,62700,62701],{"class":74},"url",[39,62703,54],{"class":53},[39,62705,62706],{"class":59},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[39,62708,255],{"class":53},[39,62710,62711],{"class":74},"no-repeat",[39,62713,18117],{"class":74},[39,62715,25953],{"class":53},[39,62717,62718],{"class":74},"cover",[39,62720,318],{"class":53},[39,62722,62723,62726,62728,62730,62732],{"class":41,"line":723},[39,62724,62725],{"class":74},"      margin-right",[39,62727,52412],{"class":53},[39,62729,248],{"class":74},[39,62731,52467],{"class":45},[39,62733,318],{"class":53},[39,62735,62736],{"class":41,"line":729},[39,62737,3284],{"class":53},[39,62739,62740],{"class":41,"line":735},[39,62741,122],{"emptyLinePlaceholder":121},[39,62743,62744,62746,62749],{"class":41,"line":741},[39,62745,62579],{"class":49},[39,62747,62748],{"class":52275}," textarea",[39,62750,16545],{"class":53},[39,62752,62753,62756,62758,62760],{"class":41,"line":747},[39,62754,62755],{"class":74},"      outline",[39,62757,52412],{"class":53},[39,62759,55712],{"class":74},[39,62761,318],{"class":53},[39,62763,62764,62767,62769,62772],{"class":41,"line":753},[39,62765,62766],{"class":74},"      border-color",[39,62768,52412],{"class":53},[39,62770,62771],{"class":74},"transparent",[39,62773,318],{"class":53},[39,62775,62776,62779,62781,62783],{"class":41,"line":758},[39,62777,62778],{"class":74},"      resize",[39,62780,52412],{"class":53},[39,62782,55712],{"class":74},[39,62784,318],{"class":53},[39,62786,62787,62789,62791,62794],{"class":41,"line":763},[39,62788,62696],{"class":74},[39,62790,52412],{"class":53},[39,62792,62793],{"class":74},"#f5f5f5",[39,62795,318],{"class":53},[39,62797,62798,62800,62802,62804,62806],{"class":41,"line":772},[39,62799,56109],{"class":74},[39,62801,52412],{"class":53},[39,62803,1558],{"class":74},[39,62805,52467],{"class":45},[39,62807,318],{"class":53},[39,62809,62810,62813,62815,62817],{"class":41,"line":777},[39,62811,62812],{"class":74},"      flex",[39,62814,52412],{"class":53},[39,62816,1483],{"class":74},[39,62818,318],{"class":53},[39,62820,62821,62823,62825,62827,62829],{"class":41,"line":785},[39,62822,55670],{"class":74},[39,62824,52412],{"class":53},[39,62826,423],{"class":74},[39,62828,52467],{"class":45},[39,62830,318],{"class":53},[39,62832,62833,62836,62838,62840,62843,62845],{"class":41,"line":796},[39,62834,62835],{"class":74},"      transition",[39,62837,52412],{"class":53},[39,62839,29096],{"class":74},[39,62841,62842],{"class":74}," 0.5",[39,62844,1956],{"class":45},[39,62846,318],{"class":53},[39,62848,62849,62851,62853,62855,62857],{"class":41,"line":808},[39,62850,55760],{"class":74},[39,62852,52412],{"class":53},[39,62854,2211],{"class":74},[39,62856,52467],{"class":45},[39,62858,318],{"class":53},[39,62860,62861],{"class":41,"line":823},[39,62862,3284],{"class":53},[39,62864,62865],{"class":41,"line":839},[39,62866,122],{"emptyLinePlaceholder":121},[39,62868,62869,62871,62873,62876],{"class":41,"line":845},[39,62870,62579],{"class":49},[39,62872,62748],{"class":52275},[39,62874,62875],{"class":49},":focus",[39,62877,16545],{"class":53},[39,62879,62880,62882,62884,62887],{"class":41,"line":856},[39,62881,62766],{"class":74},[39,62883,52412],{"class":53},[39,62885,62886],{"class":74},"#e4e4e4",[39,62888,318],{"class":53},[39,62890,62891,62893,62895,62897],{"class":41,"line":861},[39,62892,62696],{"class":74},[39,62894,52412],{"class":53},[39,62896,61817],{"class":74},[39,62898,318],{"class":53},[39,62900,62901,62903,62905,62907,62909],{"class":41,"line":870},[39,62902,55760],{"class":74},[39,62904,52412],{"class":53},[39,62906,1917],{"class":74},[39,62908,52467],{"class":45},[39,62910,318],{"class":53},[39,62912,62913],{"class":41,"line":9084},[39,62914,3284],{"class":53},[39,62916,62917],{"class":41,"line":9090},[39,62918,122],{"emptyLinePlaceholder":121},[39,62920,62921,62923,62925],{"class":41,"line":9102},[39,62922,62579],{"class":49},[39,62924,58442],{"class":52275},[39,62926,16545],{"class":53},[39,62928,62929,62931,62933,62936],{"class":41,"line":9114},[39,62930,62696],{"class":74},[39,62932,52412],{"class":53},[39,62934,62935],{"class":74},"#00aeec",[39,62937,318],{"class":53},[39,62939,62940,62942,62944,62946],{"class":41,"line":9126},[39,62941,58391],{"class":74},[39,62943,52412],{"class":53},[39,62945,61817],{"class":74},[39,62947,318],{"class":53},[39,62949,62950,62953,62955,62957],{"class":41,"line":10784},[39,62951,62952],{"class":74},"      border",[39,62954,52412],{"class":53},[39,62956,55712],{"class":74},[39,62958,318],{"class":53},[39,62960,62961,62963,62965,62967,62969],{"class":41,"line":10809},[39,62962,56109],{"class":74},[39,62964,52412],{"class":53},[39,62966,1558],{"class":74},[39,62968,52467],{"class":45},[39,62970,318],{"class":53},[39,62972,62973,62976,62978,62980,62982],{"class":41,"line":10832},[39,62974,62975],{"class":74},"      margin-left",[39,62977,52412],{"class":53},[39,62979,423],{"class":74},[39,62981,52467],{"class":45},[39,62983,318],{"class":53},[39,62985,62986,62988,62990,62992,62994],{"class":41,"line":10856},[39,62987,55746],{"class":74},[39,62989,52412],{"class":53},[39,62991,1620],{"class":74},[39,62993,52467],{"class":45},[39,62995,318],{"class":53},[39,62997,62998,63001,63003,63006],{"class":41,"line":10861},[39,62999,63000],{"class":74},"      cursor",[39,63002,52412],{"class":53},[39,63004,63005],{"class":74},"pointer",[39,63007,318],{"class":53},[39,63009,63010],{"class":41,"line":10866},[39,63011,3284],{"class":53},[39,63013,63014],{"class":41,"line":10871},[39,63015,122],{"emptyLinePlaceholder":121},[39,63017,63018,63020,63023],{"class":41,"line":10880},[39,63019,62579],{"class":49},[39,63021,63022],{"class":49}," .total",[39,63024,16545],{"class":53},[39,63026,63027,63029,63031,63033,63035],{"class":41,"line":10885},[39,63028,62725],{"class":74},[39,63030,52412],{"class":53},[39,63032,1873],{"class":74},[39,63034,52467],{"class":45},[39,63036,318],{"class":53},[39,63038,63039,63041,63043,63046],{"class":41,"line":10891},[39,63040,58391],{"class":74},[39,63042,52412],{"class":53},[39,63044,63045],{"class":74},"#999",[39,63047,318],{"class":53},[39,63049,63050,63053,63055,63057,63059],{"class":41,"line":10912},[39,63051,63052],{"class":74},"      margin-top",[39,63054,52412],{"class":53},[39,63056,1583],{"class":74},[39,63058,52467],{"class":45},[39,63060,318],{"class":53},[39,63062,63063,63066,63068,63070],{"class":41,"line":10918},[39,63064,63065],{"class":74},"      opacity",[39,63067,52412],{"class":53},[39,63069,1457],{"class":74},[39,63071,318],{"class":53},[39,63073,63074,63076,63078,63080,63082,63084],{"class":41,"line":10932},[39,63075,62835],{"class":74},[39,63077,52412],{"class":53},[39,63079,29096],{"class":74},[39,63081,62842],{"class":74},[39,63083,1956],{"class":45},[39,63085,318],{"class":53},[39,63087,63088],{"class":41,"line":10938},[39,63089,3284],{"class":53},[39,63091,63092],{"class":41,"line":10965},[39,63093,122],{"emptyLinePlaceholder":121},[39,63095,63096,63099],{"class":41,"line":10974},[39,63097,63098],{"class":49},"    .list",[39,63100,16545],{"class":53},[39,63102,63103,63105,63107,63109,63111],{"class":41,"line":10980},[39,63104,62586],{"class":74},[39,63106,52412],{"class":53},[39,63108,5070],{"class":74},[39,63110,52467],{"class":45},[39,63112,318],{"class":53},[39,63114,63115,63117,63119,63121,63123],{"class":41,"line":10988},[39,63116,62599],{"class":74},[39,63118,52412],{"class":53},[39,63120,62604],{"class":74},[39,63122,52467],{"class":45},[39,63124,318],{"class":53},[39,63126,63127,63129,63131,63133],{"class":41,"line":10993},[39,63128,55984],{"class":74},[39,63130,52412],{"class":53},[39,63132,52452],{"class":74},[39,63134,318],{"class":53},[39,63136,63137],{"class":41,"line":17577},[39,63138,3284],{"class":53},[39,63140,63141],{"class":41,"line":17583},[39,63142,122],{"emptyLinePlaceholder":121},[39,63144,63145,63147,63150],{"class":41,"line":17606},[39,63146,63098],{"class":49},[39,63148,63149],{"class":49}," .item",[39,63151,16545],{"class":53},[39,63153,63154,63156,63158,63160,63162],{"class":41,"line":17612},[39,63155,55746],{"class":74},[39,63157,52412],{"class":53},[39,63159,278],{"class":74},[39,63161,1592],{"class":45},[39,63163,318],{"class":53},[39,63165,63166,63168,63170,63172],{"class":41,"line":17635},[39,63167,55984],{"class":74},[39,63169,52412],{"class":53},[39,63171,52452],{"class":74},[39,63173,318],{"class":53},[39,63175,63176],{"class":41,"line":17649},[39,63177,3284],{"class":53},[39,63179,63180],{"class":41,"line":17669},[39,63181,122],{"emptyLinePlaceholder":121},[39,63183,63184,63186,63188,63191],{"class":41,"line":17675},[39,63185,63098],{"class":49},[39,63187,63149],{"class":49},[39,63189,63190],{"class":49}," .info",[39,63192,16545],{"class":53},[39,63194,63195,63197,63199,63201],{"class":41,"line":17686},[39,63196,62812],{"class":74},[39,63198,52412],{"class":53},[39,63200,1483],{"class":74},[39,63202,318],{"class":53},[39,63204,63205,63208,63210,63212,63214,63217,63220],{"class":41,"line":17709},[39,63206,63207],{"class":74},"      border-bottom",[39,63209,52412],{"class":53},[39,63211,1483],{"class":74},[39,63213,52467],{"class":45},[39,63215,63216],{"class":74}," dashed",[39,63218,63219],{"class":74}," #e4e4e4",[39,63221,318],{"class":53},[39,63223,63224,63227,63229,63231,63233],{"class":41,"line":17731},[39,63225,63226],{"class":74},"      padding-bottom",[39,63228,52412],{"class":53},[39,63230,423],{"class":74},[39,63232,52467],{"class":45},[39,63234,318],{"class":53},[39,63236,63237],{"class":41,"line":17736},[39,63238,3284],{"class":53},[39,63240,63241],{"class":41,"line":17742},[39,63242,122],{"emptyLinePlaceholder":121},[39,63244,63245,63247,63249,63251],{"class":41,"line":17756},[39,63246,63098],{"class":49},[39,63248,63149],{"class":49},[39,63250,7899],{"class":52275},[39,63252,16545],{"class":53},[39,63254,63255,63257,63259,63261],{"class":41,"line":17769},[39,63256,55681],{"class":74},[39,63258,52412],{"class":53},[39,63260,1457],{"class":74},[39,63262,318],{"class":53},[39,63264,63265],{"class":41,"line":17774},[39,63266,3284],{"class":53},[39,63268,63269],{"class":41,"line":17788},[39,63270,122],{"emptyLinePlaceholder":121},[39,63272,63273,63275,63277,63280],{"class":41,"line":17793},[39,63274,63098],{"class":49},[39,63276,63149],{"class":49},[39,63278,63279],{"class":49}," .name",[39,63281,16545],{"class":53},[39,63283,63284,63286,63288,63291],{"class":41,"line":17799},[39,63285,58391],{"class":74},[39,63287,52412],{"class":53},[39,63289,63290],{"class":74},"#FB7299",[39,63292,318],{"class":53},[39,63294,63295,63297,63299,63301,63303],{"class":41,"line":17804},[39,63296,55897],{"class":74},[39,63298,52412],{"class":53},[39,63300,1810],{"class":74},[39,63302,52467],{"class":45},[39,63304,318],{"class":53},[39,63306,63307,63310,63312,63315],{"class":41,"line":17818},[39,63308,63309],{"class":74},"      font-weight",[39,63311,52412],{"class":53},[39,63313,63314],{"class":74},"bold",[39,63316,318],{"class":53},[39,63318,63319],{"class":41,"line":17823},[39,63320,3284],{"class":53},[39,63322,63323],{"class":41,"line":17828},[39,63324,122],{"emptyLinePlaceholder":121},[39,63326,63327,63329,63331,63334],{"class":41,"line":17842},[39,63328,63098],{"class":49},[39,63330,63149],{"class":49},[39,63332,63333],{"class":49}," .text",[39,63335,16545],{"class":53},[39,63337,63338,63340,63342,63345],{"class":41,"line":17854},[39,63339,58391],{"class":74},[39,63341,52412],{"class":53},[39,63343,63344],{"class":74},"#333",[39,63346,318],{"class":53},[39,63348,63349,63351,63353,63355,63357,63359],{"class":41,"line":17859},[39,63350,55670],{"class":74},[39,63352,52412],{"class":53},[39,63354,423],{"class":74},[39,63356,52467],{"class":45},[39,63358,315],{"class":74},[39,63360,318],{"class":53},[39,63362,63363],{"class":41,"line":17872},[39,63364,3284],{"class":53},[39,63366,63367],{"class":41,"line":17877},[39,63368,122],{"emptyLinePlaceholder":121},[39,63370,63371,63373,63375,63378],{"class":41,"line":17882},[39,63372,63098],{"class":49},[39,63374,63149],{"class":49},[39,63376,63377],{"class":49}," .time",[39,63379,16545],{"class":53},[39,63381,63382,63384,63386,63388],{"class":41,"line":17887},[39,63383,58391],{"class":74},[39,63385,52412],{"class":53},[39,63387,63045],{"class":74},[39,63389,318],{"class":53},[39,63391,63392,63394,63396,63398,63400],{"class":41,"line":17900},[39,63393,55897],{"class":74},[39,63395,52412],{"class":53},[39,63397,1759],{"class":74},[39,63399,52467],{"class":45},[39,63401,318],{"class":53},[39,63403,63404],{"class":41,"line":17905},[39,63405,3284],{"class":53},[39,63407,63408,63410,63412],{"class":41,"line":33608},[39,63409,53392],{"class":53},[39,63411,1192],{"class":52275},[39,63413,52282],{"class":53},[39,63415,63416,63418,63420],{"class":41,"line":33614},[39,63417,52760],{"class":53},[39,63419,52309],{"class":52275},[39,63421,52282],{"class":53},[39,63423,63424],{"class":41,"line":33620},[39,63425,122],{"emptyLinePlaceholder":121},[39,63427,63428,63430,63432],{"class":41,"line":33626},[39,63429,2170],{"class":53},[39,63431,52775],{"class":52275},[39,63433,52282],{"class":53},[39,63435,63436,63438,63440,63442,63444,63447],{"class":41,"line":33632},[39,63437,53119],{"class":53},[39,63439,52586],{"class":52275},[39,63441,54461],{"class":49},[39,63443,1117],{"class":53},[39,63445,63446],{"class":237},"\"wrapper\"",[39,63448,52282],{"class":53},[39,63450,63451,63453,63455,63457,63459,63462,63464,63466],{"class":41,"line":33643},[39,63452,52316],{"class":53},[39,63454,1704],{"class":52275},[39,63456,54461],{"class":49},[39,63458,1117],{"class":53},[39,63460,63461],{"class":237},"\"avatar\"",[39,63463,56289],{"class":53},[39,63465,1704],{"class":52275},[39,63467,52282],{"class":53},[39,63469,63470,63472,63474,63476,63478,63481,63483,63485,63488,63490,63492,63494,63497,63499,63502,63504,63506],{"class":41,"line":33649},[39,63471,52316],{"class":53},[39,63473,55263],{"class":52275},[39,63475,15932],{"class":49},[39,63477,1117],{"class":53},[39,63479,63480],{"class":237},"\"tx\"",[39,63482,61995],{"class":49},[39,63484,1117],{"class":53},[39,63486,63487],{"class":237},"\"发一条友善的评论\"",[39,63489,55286],{"class":49},[39,63491,1117],{"class":53},[39,63493,4784],{"class":237},[39,63495,63496],{"class":49}," maxlength",[39,63498,1117],{"class":53},[39,63500,63501],{"class":237},"\"200\"",[39,63503,56289],{"class":53},[39,63505,55263],{"class":52275},[39,63507,52282],{"class":53},[39,63509,63510,63512,63514,63517,63519],{"class":41,"line":33669},[39,63511,52316],{"class":53},[39,63513,54862],{"class":52275},[39,63515,63516],{"class":53},">发布\u003C\u002F",[39,63518,54862],{"class":52275},[39,63520,52282],{"class":53},[39,63522,63523,63525,63527],{"class":41,"line":33675},[39,63524,53392],{"class":53},[39,63526,52586],{"class":52275},[39,63528,52282],{"class":53},[39,63530,63531,63533,63535,63537,63539,63541],{"class":41,"line":33686},[39,63532,53119],{"class":53},[39,63534,52586],{"class":52275},[39,63536,54461],{"class":49},[39,63538,1117],{"class":53},[39,63540,63446],{"class":237},[39,63542,52282],{"class":53},[39,63544,63545,63547,63549,63551,63553,63556,63559,63561],{"class":41,"line":33692},[39,63546,52316],{"class":53},[39,63548,39],{"class":52275},[39,63550,54461],{"class":49},[39,63552,1117],{"class":53},[39,63554,63555],{"class":237},"\"total\"",[39,63557,63558],{"class":53},">0\u002F200字\u003C\u002F",[39,63560,39],{"class":52275},[39,63562,52282],{"class":53},[39,63564,63565,63567,63569],{"class":41,"line":33698},[39,63566,53392],{"class":53},[39,63568,52586],{"class":52275},[39,63570,52282],{"class":53},[39,63572,63573,63575,63577,63579,63581,63584],{"class":41,"line":33704},[39,63574,53119],{"class":53},[39,63576,52586],{"class":52275},[39,63578,54461],{"class":49},[39,63580,1117],{"class":53},[39,63582,63583],{"class":237},"\"list\"",[39,63585,52282],{"class":53},[39,63587,63588,63590,63592,63594,63596,63599,63602,63604,63607],{"class":41,"line":33710},[39,63589,52316],{"class":53},[39,63591,52586],{"class":52275},[39,63593,54461],{"class":49},[39,63595,1117],{"class":53},[39,63597,63598],{"class":237},"\"item\"",[39,63600,63601],{"class":49}," style",[39,63603,1117],{"class":53},[39,63605,63606],{"class":237},"\"display: none;\"",[39,63608,52282],{"class":53},[39,63610,63611,63613,63615,63617,63619,63621,63623,63625],{"class":41,"line":33716},[39,63612,56209],{"class":53},[39,63614,1704],{"class":52275},[39,63616,54461],{"class":49},[39,63618,1117],{"class":53},[39,63620,63461],{"class":237},[39,63622,56289],{"class":53},[39,63624,1704],{"class":52275},[39,63626,52282],{"class":53},[39,63628,63629,63631,63633,63635,63637,63640],{"class":41,"line":33722},[39,63630,56209],{"class":53},[39,63632,52586],{"class":52275},[39,63634,54461],{"class":49},[39,63636,1117],{"class":53},[39,63638,63639],{"class":237},"\"info\"",[39,63641,52282],{"class":53},[39,63643,63644,63646,63648,63650,63652,63655,63658,63660],{"class":41,"line":33728},[39,63645,56277],{"class":53},[39,63647,19],{"class":52275},[39,63649,54461],{"class":49},[39,63651,1117],{"class":53},[39,63653,63654],{"class":237},"\"name\"",[39,63656,63657],{"class":53},">清风徐来\u003C\u002F",[39,63659,19],{"class":52275},[39,63661,52282],{"class":53},[39,63663,63664,63666,63668,63670,63672,63675,63678,63680],{"class":41,"line":33748},[39,63665,56277],{"class":53},[39,63667,19],{"class":52275},[39,63669,54461],{"class":49},[39,63671,1117],{"class":53},[39,63673,63674],{"class":237},"\"text\"",[39,63676,63677],{"class":53},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[39,63679,19],{"class":52275},[39,63681,52282],{"class":53},[39,63683,63684,63686,63688,63690,63692,63695,63698,63700],{"class":41,"line":33754},[39,63685,56277],{"class":53},[39,63687,19],{"class":52275},[39,63689,54461],{"class":49},[39,63691,1117],{"class":53},[39,63693,63694],{"class":237},"\"time\"",[39,63696,63697],{"class":53},">2022-10-10 20:29:21\u003C\u002F",[39,63699,19],{"class":52275},[39,63701,52282],{"class":53},[39,63703,63704,63706,63708],{"class":41,"line":33770},[39,63705,56382],{"class":53},[39,63707,52586],{"class":52275},[39,63709,52282],{"class":53},[39,63711,63712,63714,63716],{"class":41,"line":33776},[39,63713,52751],{"class":53},[39,63715,52586],{"class":52275},[39,63717,52282],{"class":53},[39,63719,63720,63722,63724],{"class":41,"line":33790},[39,63721,53392],{"class":53},[39,63723,52586],{"class":52275},[39,63725,52282],{"class":53},[39,63727,63728,63730,63732],{"class":41,"line":33796},[39,63729,53119],{"class":53},[39,63731,52788],{"class":52275},[39,63733,52282],{"class":53},[39,63735,63736,63738,63741,63743,63745,63747,63749,63752],{"class":41,"line":33811},[39,63737,12283],{"class":45},[39,63739,63740],{"class":74}," tx",[39,63742,71],{"class":45},[39,63744,55371],{"class":53},[39,63746,55374],{"class":49},[39,63748,54],{"class":53},[39,63750,63751],{"class":237},"'#tx'",[39,63753,574],{"class":53},[39,63755,63756,63758,63761,63763,63765,63767,63769,63772],{"class":41,"line":33817},[39,63757,12283],{"class":45},[39,63759,63760],{"class":74}," total",[39,63762,71],{"class":45},[39,63764,55371],{"class":53},[39,63766,55374],{"class":49},[39,63768,54],{"class":53},[39,63770,63771],{"class":237},"'.total'",[39,63773,574],{"class":53},[39,63775,63776],{"class":41,"line":33826},[39,63777,63778],{"class":128},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[39,63780,63781,63784,63786,63788,63790,63792,63794],{"class":41,"line":33832},[39,63782,63783],{"class":53},"    tx.",[39,63785,58788],{"class":49},[39,63787,54],{"class":53},[39,63789,62302],{"class":237},[39,63791,63],{"class":53},[39,63793,55424],{"class":45},[39,63795,55427],{"class":53},[39,63797,63798,63801,63803],{"class":41,"line":33841},[39,63799,63800],{"class":53},"      total.style.opacity ",[39,63802,1117],{"class":45},[39,63804,56674],{"class":74},[39,63806,63807],{"class":41,"line":33847},[39,63808,34436],{"class":53},[39,63810,63811],{"class":41,"line":33853},[39,63812,63813],{"class":128},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[39,63815,63816,63818,63820,63822,63824,63826,63828],{"class":41,"line":33862},[39,63817,63783],{"class":53},[39,63819,58788],{"class":49},[39,63821,54],{"class":53},[39,63823,62363],{"class":237},[39,63825,63],{"class":53},[39,63827,55424],{"class":45},[39,63829,55427],{"class":53},[39,63831,63832,63834,63836],{"class":41,"line":33868},[39,63833,63800],{"class":53},[39,63835,1117],{"class":45},[39,63837,48308],{"class":74},[39,63839,63840],{"class":41,"line":33879},[39,63841,34436],{"class":53},[39,63843,63844],{"class":41,"line":33885},[39,63845,63846],{"class":128},"    \u002F\u002F 3. 检测用户输入\n",[39,63848,63849,63851,63853,63855,63858,63860,63862],{"class":41,"line":33904},[39,63850,63783],{"class":53},[39,63852,58788],{"class":49},[39,63854,54],{"class":53},[39,63856,63857],{"class":237},"'input'",[39,63859,63],{"class":53},[39,63861,55424],{"class":45},[39,63863,55427],{"class":53},[39,63865,63866],{"class":41,"line":33910},[39,63867,63868],{"class":128},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[39,63870,63871,63874,63876,63879,63882,63884,63887,63889,63891],{"class":41,"line":33921},[39,63872,63873],{"class":53},"      total.innerHTML ",[39,63875,1117],{"class":45},[39,63877,63878],{"class":237}," `${",[39,63880,63881],{"class":53},"tx",[39,63883,1819],{"class":237},[39,63885,63886],{"class":53},"value",[39,63888,1819],{"class":237},[39,63890,52943],{"class":74},[39,63892,63893],{"class":237},"}\u002F200字`\n",[39,63895,63896],{"class":41,"line":33927},[39,63897,34436],{"class":53},[39,63899,63900],{"class":41,"line":33947},[39,63901,122],{"emptyLinePlaceholder":121},[39,63903,63904],{"class":41,"line":33963},[39,63905,63906],{"class":128},"    \u002F\u002F const str = 'andy'\n",[39,63908,63909],{"class":41,"line":33969},[39,63910,63911],{"class":128},"    \u002F\u002F console.log(str.length)\n",[39,63913,63914,63916,63918],{"class":41,"line":33983},[39,63915,53392],{"class":53},[39,63917,52788],{"class":52275},[39,63919,52282],{"class":53},[39,63921,63922,63924,63926],{"class":41,"line":33989},[39,63923,52760],{"class":53},[39,63925,52775],{"class":52275},[39,63927,52282],{"class":53},[39,63929,63930],{"class":41,"line":33995},[39,63931,122],{"emptyLinePlaceholder":121},[39,63933,63934,63936,63938],{"class":41,"line":34006},[39,63935,52760],{"class":53},[39,63937,51610],{"class":52275},[39,63939,52282],{"class":53},[22971,63941,63943],{"id":63942},"_3254-change事件","3.2.5.4 change事件",[19,63945,63946],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63948,63949],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63951,63952],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[30,63954,63956],{"className":51608,"code":63955,"language":51610,"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",[26,63957,63958,63968,63982,63986,63994,64008,64028,64040,64048,64052,64060,64074,64082,64100,64118,64130,64134,64142,64150,64154],{"__ignoreMap":35},[39,63959,63960,63962,63964,63966],{"class":41,"line":42},[39,63961,52272],{"class":53},[39,63963,52276],{"class":52275},[39,63965,52279],{"class":49},[39,63967,52282],{"class":53},[39,63969,63970,63972,63974,63976,63978,63980],{"class":41,"line":92},[39,63971,2170],{"class":53},[39,63973,51610],{"class":52275},[39,63975,52291],{"class":49},[39,63977,1117],{"class":53},[39,63979,52296],{"class":237},[39,63981,52282],{"class":53},[39,63983,63984],{"class":41,"line":112},[39,63985,122],{"emptyLinePlaceholder":121},[39,63987,63988,63990,63992],{"class":41,"line":118},[39,63989,2170],{"class":53},[39,63991,52309],{"class":52275},[39,63993,52282],{"class":53},[39,63995,63996,63998,64000,64002,64004,64006],{"class":41,"line":125},[39,63997,53119],{"class":53},[39,63999,52319],{"class":52275},[39,64001,52322],{"class":49},[39,64003,1117],{"class":53},[39,64005,52327],{"class":237},[39,64007,52282],{"class":53},[39,64009,64010,64012,64014,64016,64018,64020,64022,64024,64026],{"class":41,"line":132},[39,64011,53119],{"class":53},[39,64013,52319],{"class":52275},[39,64015,15893],{"class":49},[39,64017,1117],{"class":53},[39,64019,52366],{"class":237},[39,64021,52346],{"class":49},[39,64023,1117],{"class":53},[39,64025,52373],{"class":237},[39,64027,52282],{"class":53},[39,64029,64030,64032,64034,64036,64038],{"class":41,"line":138},[39,64031,53119],{"class":53},[39,64033,52382],{"class":52275},[39,64035,52385],{"class":53},[39,64037,52382],{"class":52275},[39,64039,52282],{"class":53},[39,64041,64042,64044,64046],{"class":41,"line":169},[39,64043,52760],{"class":53},[39,64045,52309],{"class":52275},[39,64047,52282],{"class":53},[39,64049,64050],{"class":41,"line":190},[39,64051,122],{"emptyLinePlaceholder":121},[39,64053,64054,64056,64058],{"class":41,"line":202},[39,64055,2170],{"class":53},[39,64057,52775],{"class":52275},[39,64059,52282],{"class":53},[39,64061,64062,64064,64066,64068,64070,64072],{"class":41,"line":207},[39,64063,53119],{"class":53},[39,64065,54796],{"class":52275},[39,64067,54799],{"class":49},[39,64069,1117],{"class":53},[39,64071,63674],{"class":237},[39,64073,52282],{"class":53},[39,64075,64076,64078,64080],{"class":41,"line":212},[39,64077,53119],{"class":53},[39,64079,52788],{"class":52275},[39,64081,52282],{"class":53},[39,64083,64084,64086,64088,64090,64092,64094,64096,64098],{"class":41,"line":223},[39,64085,12283],{"class":45},[39,64087,61580],{"class":74},[39,64089,71],{"class":45},[39,64091,55371],{"class":53},[39,64093,55374],{"class":49},[39,64095,54],{"class":53},[39,64097,63857],{"class":237},[39,64099,574],{"class":53},[39,64101,64102,64105,64107,64109,64112,64114,64116],{"class":41,"line":228},[39,64103,64104],{"class":53},"    input.",[39,64106,58788],{"class":49},[39,64108,54],{"class":53},[39,64110,64111],{"class":237},"'change'",[39,64113,63],{"class":53},[39,64115,55424],{"class":45},[39,64117,55427],{"class":53},[39,64119,64120,64122,64124,64126,64128],{"class":41,"line":263},[39,64121,59219],{"class":53},[39,64123,59222],{"class":49},[39,64125,54],{"class":53},[39,64127,1854],{"class":74},[39,64129,574],{"class":53},[39,64131,64132],{"class":41,"line":287},[39,64133,34436],{"class":53},[39,64135,64136,64138,64140],{"class":41,"line":292},[39,64137,53392],{"class":53},[39,64139,52788],{"class":52275},[39,64141,52282],{"class":53},[39,64143,64144,64146,64148],{"class":41,"line":305},[39,64145,52760],{"class":53},[39,64147,52775],{"class":52275},[39,64149,52282],{"class":53},[39,64151,64152],{"class":41,"line":310},[39,64153,122],{"emptyLinePlaceholder":121},[39,64155,64156,64158,64160],{"class":41,"line":321},[39,64157,52760],{"class":53},[39,64159,51610],{"class":52275},[39,64161,52282],{"class":53},[19,64163,64164],{},"总结：内容发生改变才回去触发",[476,64166,64168],{"id":64167},"_326-事件对象","3.2.6 事件对象",[22971,64170,64172],{"id":64171},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64174,64175],{},[2585,64176],{"alt":35,"src":64177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64179,64180],{},[2585,64181],{"alt":35,"src":64182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64184,64185],{},"点击一次，就输出了事件对象，它是个对象",[19,64187,64188],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64190,64191],{},[2585,64192],{"alt":35,"src":64193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22971,64195,64197],{"id":64196},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,64199,64200],{},[2585,64201],{"alt":35,"src":64202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,64204,64205],{},"实现按特殊字符才是实现打印输出效果：",[30,64207,64209],{"className":54042,"code":64208,"language":54044,"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",[26,64210,64211,64219,64224,64238,64246,64251,64256,64261,64266,64271,64276,64281,64286,64291,64295,64299,64307],{"__ignoreMap":35},[39,64212,64213,64215,64217],{"class":41,"line":42},[39,64214,2170],{"class":53},[39,64216,52775],{"class":52275},[39,64218,52282],{"class":53},[39,64220,64221],{"class":41,"line":92},[39,64222,64223],{"class":128},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[39,64225,64226,64228,64230,64232,64234,64236],{"class":41,"line":112},[39,64227,53119],{"class":53},[39,64229,54796],{"class":52275},[39,64231,54799],{"class":49},[39,64233,1117],{"class":53},[39,64235,63674],{"class":237},[39,64237,52282],{"class":53},[39,64239,64240,64242,64244],{"class":41,"line":118},[39,64241,53119],{"class":53},[39,64243,52788],{"class":52275},[39,64245,52282],{"class":53},[39,64247,64248],{"class":41,"line":125},[39,64249,64250],{"class":53},"    \u002F\u002F const btn = document.querySelector('button')\n",[39,64252,64253],{"class":41,"line":132},[39,64254,64255],{"class":53},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[39,64257,64258],{"class":41,"line":138},[39,64259,64260],{"class":53},"    \u002F\u002F   console.log(e);\n",[39,64262,64263],{"class":41,"line":169},[39,64264,64265],{"class":53},"    \u002F\u002F })\n",[39,64267,64268],{"class":41,"line":190},[39,64269,64270],{"class":53},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[39,64272,64273],{"class":41,"line":202},[39,64274,64275],{"class":53},"    const input = document.querySelector('input')\n",[39,64277,64278],{"class":41,"line":207},[39,64279,64280],{"class":53},"    input.addEventListener('keyup', function (e) {\n",[39,64282,64283],{"class":41,"line":212},[39,64284,64285],{"class":53},"      if (e.key === 'Enter') {\n",[39,64287,64288],{"class":41,"line":223},[39,64289,64290],{"class":53},"        console.log('我按下了回车键')\n",[39,64292,64293],{"class":41,"line":228},[39,64294,53373],{"class":53},[39,64296,64297],{"class":41,"line":263},[39,64298,34436],{"class":53},[39,64300,64301,64303,64305],{"class":41,"line":287},[39,64302,53392],{"class":53},[39,64304,52788],{"class":52275},[39,64306,52282],{"class":53},[39,64308,64309,64311,64313],{"class":41,"line":292},[39,64310,52760],{"class":53},[39,64312,52775],{"class":52275},[39,64314,52282],{"class":53},[22971,64316,64318],{"id":64317},"_3263-trim方法","3.2.6.3 trim方法",[19,64320,64321],{},[2585,64322],{"alt":35,"src":64323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,64325,64326],{},[2585,64327],{"alt":35,"src":64328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,64330,64331],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,64333,64334],{},"str.trim()",[476,64336,64338],{"id":64337},"_327-环境对象","3.2.7 环境对象",[19,64340,64341],{},[2585,64342],{"alt":35,"src":64343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,64345,64346],{},[2585,64347],{"alt":35,"src":64348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,64350,64351],{},[2585,64352],{"alt":35,"src":64353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,64355,64356],{},"实际函数调用是window.fn()",[19,64358,64359],{},"普通函数里面this指向的是window",[489,64361,64362,64365,64368],{},[331,64363,64364],{},"在普通函数下，this指向的是window",[331,64366,64367],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[331,64369,64370],{},"箭头函数没有this",[19,64372,64373],{},"粗略记法就是：谁调用，this就指向谁",[19,64375,64376],{},[2585,64377],{"alt":35,"src":64378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,64380,64381],{},[2585,64382],{"alt":35,"src":64383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,64385,64386],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,64388,64389],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[30,64391,64393],{"className":54042,"code":64392,"language":54044,"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",[26,64394,64395,64403,64415,64423,64428,64433,64438,64443,64447,64455],{"__ignoreMap":35},[39,64396,64397,64399,64401],{"class":41,"line":42},[39,64398,2170],{"class":53},[39,64400,52775],{"class":52275},[39,64402,52282],{"class":53},[39,64404,64405,64407,64409,64411,64413],{"class":41,"line":92},[39,64406,53119],{"class":53},[39,64408,54862],{"class":52275},[39,64410,54868],{"class":53},[39,64412,54862],{"class":52275},[39,64414,52282],{"class":53},[39,64416,64417,64419,64421],{"class":41,"line":112},[39,64418,53119],{"class":53},[39,64420,52788],{"class":52275},[39,64422,52282],{"class":53},[39,64424,64425],{"class":41,"line":118},[39,64426,64427],{"class":53},"    const button = document.querySelector('button')\n",[39,64429,64430],{"class":41,"line":125},[39,64431,64432],{"class":53},"    button.addEventListener('click', function () {\n",[39,64434,64435],{"class":41,"line":132},[39,64436,64437],{"class":53},"      \u002F\u002F console.log(this);\n",[39,64439,64440],{"class":41,"line":138},[39,64441,64442],{"class":53},"      this.style.color = 'pink'\n",[39,64444,64445],{"class":41,"line":169},[39,64446,34436],{"class":53},[39,64448,64449,64451,64453],{"class":41,"line":190},[39,64450,53392],{"class":53},[39,64452,52788],{"class":52275},[39,64454,52282],{"class":53},[39,64456,64457,64459,64461],{"class":41,"line":202},[39,64458,52760],{"class":53},[39,64460,52775],{"class":52275},[39,64462,52282],{"class":53},[476,64464,64466],{"id":64465},"_328-回调函数","3.2.8 回调函数",[19,64468,64469],{},[2585,64470],{"alt":35,"src":64471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,64473,64474],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,64476,326],{},[489,64478,64479,64482,64485],{},[331,64480,64481],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[331,64483,64484],{},"回调函数本质还是函数，只不过把它当成参数使用",[331,64486,64487],{},"使用匿名函数做为回调函数比较常见",[476,64489,64491],{"id":64490},"_329-tab栏切换","3.2.9 tab栏切换",[19,64493,64494],{},[2585,64495],{"alt":35,"src":64496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[30,64498,64500],{"className":51608,"code":64499,"language":51610,"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",[26,64501,64502,64512,64526,64530,64538,64552,64572,64592,64605,64613,64619,64629,64639,64643,64647,64654,64667,64680,64692,64708,64712,64716,64723,64735,64747,64759,64769,64779,64783,64787,64796,64808,64819,64831,64835,64839,64847,64857,64867,64877,64881,64885,64895,64909,64921,64925,64929,64941,64952,64969,64979,64983,64987,65002,65013,65023,65027,65031,65038,65053,65057,65061,65069,65079,65083,65087,65096,65106,65110,65118,65126,65130,65138,65153,65168,65181,65189,65223,65250,65277,65304,65331,65339,65347,65362,65399,65434,65469,65504,65539,65547,65555,65563,65568,65573,65593,65598,65627,65632,65637,65655,65660,65665,65670,65692,65697,65713,65717,65722,65727,65748,65753,65782,65786,65791,65795,65803,65811,65815],{"__ignoreMap":35},[39,64503,64504,64506,64508,64510],{"class":41,"line":42},[39,64505,52272],{"class":53},[39,64507,52276],{"class":52275},[39,64509,52279],{"class":49},[39,64511,52282],{"class":53},[39,64513,64514,64516,64518,64520,64522,64524],{"class":41,"line":92},[39,64515,2170],{"class":53},[39,64517,51610],{"class":52275},[39,64519,52291],{"class":49},[39,64521,1117],{"class":53},[39,64523,52296],{"class":237},[39,64525,52282],{"class":53},[39,64527,64528],{"class":41,"line":112},[39,64529,122],{"emptyLinePlaceholder":121},[39,64531,64532,64534,64536],{"class":41,"line":118},[39,64533,2170],{"class":53},[39,64535,52309],{"class":52275},[39,64537,52282],{"class":53},[39,64539,64540,64542,64544,64546,64548,64550],{"class":41,"line":125},[39,64541,53119],{"class":53},[39,64543,52319],{"class":52275},[39,64545,52322],{"class":49},[39,64547,1117],{"class":53},[39,64549,52327],{"class":237},[39,64551,60102],{"class":53},[39,64553,64554,64556,64558,64560,64562,64564,64566,64568,64570],{"class":41,"line":132},[39,64555,53119],{"class":53},[39,64557,52319],{"class":52275},[39,64559,52338],{"class":49},[39,64561,1117],{"class":53},[39,64563,52343],{"class":237},[39,64565,52346],{"class":49},[39,64567,1117],{"class":53},[39,64569,52351],{"class":237},[39,64571,60102],{"class":53},[39,64573,64574,64576,64578,64580,64582,64584,64586,64588,64590],{"class":41,"line":138},[39,64575,53119],{"class":53},[39,64577,52319],{"class":52275},[39,64579,15893],{"class":49},[39,64581,1117],{"class":53},[39,64583,52366],{"class":237},[39,64585,52346],{"class":49},[39,64587,1117],{"class":53},[39,64589,52373],{"class":237},[39,64591,60102],{"class":53},[39,64593,64594,64596,64598,64601,64603],{"class":41,"line":169},[39,64595,53119],{"class":53},[39,64597,52382],{"class":52275},[39,64599,64600],{"class":53},">tab栏切换\u003C\u002F",[39,64602,52382],{"class":52275},[39,64604,52282],{"class":53},[39,64606,64607,64609,64611],{"class":41,"line":190},[39,64608,53119],{"class":53},[39,64610,1192],{"class":52275},[39,64612,52282],{"class":53},[39,64614,64615,64617],{"class":41,"line":202},[39,64616,7479],{"class":52275},[39,64618,16545],{"class":53},[39,64620,64621,64623,64625,64627],{"class":41,"line":207},[39,64622,55681],{"class":74},[39,64624,52412],{"class":53},[39,64626,1457],{"class":74},[39,64628,318],{"class":53},[39,64630,64631,64633,64635,64637],{"class":41,"line":212},[39,64632,55670],{"class":74},[39,64634,52412],{"class":53},[39,64636,1457],{"class":74},[39,64638,318],{"class":53},[39,64640,64641],{"class":41,"line":223},[39,64642,3284],{"class":53},[39,64644,64645],{"class":41,"line":228},[39,64646,122],{"emptyLinePlaceholder":121},[39,64648,64649,64652],{"class":41,"line":263},[39,64650,64651],{"class":49},"    .tab",[39,64653,16545],{"class":53},[39,64655,64656,64658,64660,64663,64665],{"class":41,"line":287},[39,64657,55746],{"class":74},[39,64659,52412],{"class":53},[39,64661,64662],{"class":74},"590",[39,64664,52467],{"class":45},[39,64666,318],{"class":53},[39,64668,64669,64671,64673,64676,64678],{"class":41,"line":292},[39,64670,55760],{"class":74},[39,64672,52412],{"class":53},[39,64674,64675],{"class":74},"340",[39,64677,52467],{"class":45},[39,64679,318],{"class":53},[39,64681,64682,64684,64686,64688,64690],{"class":41,"line":305},[39,64683,55681],{"class":74},[39,64685,52412],{"class":53},[39,64687,248],{"class":74},[39,64689,52467],{"class":45},[39,64691,318],{"class":53},[39,64693,64694,64696,64698,64700,64702,64704,64706],{"class":41,"line":310},[39,64695,62952],{"class":74},[39,64697,52412],{"class":53},[39,64699,1483],{"class":74},[39,64701,52467],{"class":45},[39,64703,52496],{"class":74},[39,64705,63219],{"class":74},[39,64707,318],{"class":53},[39,64709,64710],{"class":41,"line":321},[39,64711,3284],{"class":53},[39,64713,64714],{"class":41,"line":713},[39,64715,122],{"emptyLinePlaceholder":121},[39,64717,64718,64721],{"class":41,"line":718},[39,64719,64720],{"class":49},"    .tab-nav",[39,64722,16545],{"class":53},[39,64724,64725,64727,64729,64731,64733],{"class":41,"line":723},[39,64726,55746],{"class":74},[39,64728,52412],{"class":53},[39,64730,278],{"class":74},[39,64732,1592],{"class":45},[39,64734,318],{"class":53},[39,64736,64737,64739,64741,64743,64745],{"class":41,"line":729},[39,64738,55760],{"class":74},[39,64740,52412],{"class":53},[39,64742,2167],{"class":74},[39,64744,52467],{"class":45},[39,64746,318],{"class":53},[39,64748,64749,64751,64753,64755,64757],{"class":41,"line":735},[39,64750,58334],{"class":74},[39,64752,52412],{"class":53},[39,64754,2167],{"class":74},[39,64756,52467],{"class":45},[39,64758,318],{"class":53},[39,64760,64761,64763,64765,64767],{"class":41,"line":741},[39,64762,55984],{"class":74},[39,64764,52412],{"class":53},[39,64766,52452],{"class":74},[39,64768,318],{"class":53},[39,64770,64771,64773,64775,64777],{"class":41,"line":747},[39,64772,55995],{"class":74},[39,64774,52412],{"class":53},[39,64776,52643],{"class":74},[39,64778,318],{"class":53},[39,64780,64781],{"class":41,"line":753},[39,64782,3284],{"class":53},[39,64784,64785],{"class":41,"line":758},[39,64786,122],{"emptyLinePlaceholder":121},[39,64788,64789,64791,64794],{"class":41,"line":763},[39,64790,64720],{"class":49},[39,64792,64793],{"class":52275}," h3",[39,64795,16545],{"class":53},[39,64797,64798,64800,64802,64804,64806],{"class":41,"line":772},[39,64799,55897],{"class":74},[39,64801,52412],{"class":53},[39,64803,2060],{"class":74},[39,64805,52467],{"class":45},[39,64807,318],{"class":53},[39,64809,64810,64812,64814,64817],{"class":41,"line":777},[39,64811,63309],{"class":74},[39,64813,52412],{"class":53},[39,64815,64816],{"class":74},"normal",[39,64818,318],{"class":53},[39,64820,64821,64823,64825,64827,64829],{"class":41,"line":785},[39,64822,62975],{"class":74},[39,64824,52412],{"class":53},[39,64826,248],{"class":74},[39,64828,52467],{"class":45},[39,64830,318],{"class":53},[39,64832,64833],{"class":41,"line":796},[39,64834,3284],{"class":53},[39,64836,64837],{"class":41,"line":808},[39,64838,122],{"emptyLinePlaceholder":121},[39,64840,64841,64843,64845],{"class":41,"line":823},[39,64842,64720],{"class":49},[39,64844,62267],{"class":52275},[39,64846,16545],{"class":53},[39,64848,64849,64851,64853,64855],{"class":41,"line":839},[39,64850,55707],{"class":74},[39,64852,52412],{"class":53},[39,64854,55712],{"class":74},[39,64856,318],{"class":53},[39,64858,64859,64861,64863,64865],{"class":41,"line":845},[39,64860,55984],{"class":74},[39,64862,52412],{"class":53},[39,64864,52452],{"class":74},[39,64866,318],{"class":53},[39,64868,64869,64871,64873,64875],{"class":41,"line":856},[39,64870,55995],{"class":74},[39,64872,52412],{"class":53},[39,64874,52555],{"class":74},[39,64876,318],{"class":53},[39,64878,64879],{"class":41,"line":861},[39,64880,3284],{"class":53},[39,64882,64883],{"class":41,"line":870},[39,64884,122],{"emptyLinePlaceholder":121},[39,64886,64887,64889,64891,64893],{"class":41,"line":9084},[39,64888,64720],{"class":49},[39,64890,62267],{"class":52275},[39,64892,56050],{"class":52275},[39,64894,16545],{"class":53},[39,64896,64897,64899,64901,64903,64905,64907],{"class":41,"line":9090},[39,64898,55681],{"class":74},[39,64900,52412],{"class":53},[39,64902,1457],{"class":74},[39,64904,10018],{"class":74},[39,64906,52467],{"class":45},[39,64908,318],{"class":53},[39,64910,64911,64913,64915,64917,64919],{"class":41,"line":9102},[39,64912,55897],{"class":74},[39,64914,52412],{"class":53},[39,64916,1810],{"class":74},[39,64918,52467],{"class":45},[39,64920,318],{"class":53},[39,64922,64923],{"class":41,"line":9114},[39,64924,3284],{"class":53},[39,64926,64927],{"class":41,"line":9126},[39,64928,122],{"emptyLinePlaceholder":121},[39,64930,64931,64933,64935,64937,64939],{"class":41,"line":10784},[39,64932,64720],{"class":49},[39,64934,62267],{"class":52275},[39,64936,56050],{"class":52275},[39,64938,60],{"class":52275},[39,64940,16545],{"class":53},[39,64942,64943,64946,64948,64950],{"class":41,"line":10809},[39,64944,64945],{"class":74},"      text-decoration",[39,64947,52412],{"class":53},[39,64949,55712],{"class":74},[39,64951,318],{"class":53},[39,64953,64954,64956,64958,64960,64962,64964,64967],{"class":41,"line":10832},[39,64955,63207],{"class":74},[39,64957,52412],{"class":53},[39,64959,1345],{"class":74},[39,64961,52467],{"class":45},[39,64963,52496],{"class":74},[39,64965,64966],{"class":74}," transparent",[39,64968,318],{"class":53},[39,64970,64971,64973,64975,64977],{"class":41,"line":10856},[39,64972,58391],{"class":74},[39,64974,52412],{"class":53},[39,64976,63344],{"class":74},[39,64978,318],{"class":53},[39,64980,64981],{"class":41,"line":10861},[39,64982,3284],{"class":53},[39,64984,64985],{"class":41,"line":10866},[39,64986,122],{"emptyLinePlaceholder":121},[39,64988,64989,64991,64993,64995,64997,65000],{"class":41,"line":10871},[39,64990,64720],{"class":49},[39,64992,62267],{"class":52275},[39,64994,56050],{"class":52275},[39,64996,60],{"class":52275},[39,64998,64999],{"class":49},".active",[39,65001,16545],{"class":53},[39,65003,65004,65006,65008,65011],{"class":41,"line":10880},[39,65005,62766],{"class":74},[39,65007,52412],{"class":53},[39,65009,65010],{"class":74},"#e1251b",[39,65012,318],{"class":53},[39,65014,65015,65017,65019,65021],{"class":41,"line":10885},[39,65016,58391],{"class":74},[39,65018,52412],{"class":53},[39,65020,65010],{"class":74},[39,65022,318],{"class":53},[39,65024,65025],{"class":41,"line":10891},[39,65026,3284],{"class":53},[39,65028,65029],{"class":41,"line":10912},[39,65030,122],{"emptyLinePlaceholder":121},[39,65032,65033,65036],{"class":41,"line":10918},[39,65034,65035],{"class":49},"    .tab-content",[39,65037,16545],{"class":53},[39,65039,65040,65042,65044,65046,65049,65051],{"class":41,"line":10932},[39,65041,55670],{"class":74},[39,65043,52412],{"class":53},[39,65045,1457],{"class":74},[39,65047,65048],{"class":74}," 16",[39,65050,52467],{"class":45},[39,65052,318],{"class":53},[39,65054,65055],{"class":41,"line":10938},[39,65056,3284],{"class":53},[39,65058,65059],{"class":41,"line":10965},[39,65060,122],{"emptyLinePlaceholder":121},[39,65062,65063,65065,65067],{"class":41,"line":10974},[39,65064,65035],{"class":49},[39,65066,63149],{"class":49},[39,65068,16545],{"class":53},[39,65070,65071,65073,65075,65077],{"class":41,"line":10980},[39,65072,55984],{"class":74},[39,65074,52412],{"class":53},[39,65076,55712],{"class":74},[39,65078,318],{"class":53},[39,65080,65081],{"class":41,"line":10988},[39,65082,3284],{"class":53},[39,65084,65085],{"class":41,"line":10993},[39,65086,122],{"emptyLinePlaceholder":121},[39,65088,65089,65091,65094],{"class":41,"line":17577},[39,65090,65035],{"class":49},[39,65092,65093],{"class":49}," .item.active",[39,65095,16545],{"class":53},[39,65097,65098,65100,65102,65104],{"class":41,"line":17583},[39,65099,55984],{"class":74},[39,65101,52412],{"class":53},[39,65103,61844],{"class":74},[39,65105,318],{"class":53},[39,65107,65108],{"class":41,"line":17606},[39,65109,3284],{"class":53},[39,65111,65112,65114,65116],{"class":41,"line":17612},[39,65113,53392],{"class":53},[39,65115,1192],{"class":52275},[39,65117,52282],{"class":53},[39,65119,65120,65122,65124],{"class":41,"line":17635},[39,65121,52760],{"class":53},[39,65123,52309],{"class":52275},[39,65125,52282],{"class":53},[39,65127,65128],{"class":41,"line":17649},[39,65129,122],{"emptyLinePlaceholder":121},[39,65131,65132,65134,65136],{"class":41,"line":17669},[39,65133,2170],{"class":53},[39,65135,52775],{"class":52275},[39,65137,52282],{"class":53},[39,65139,65140,65142,65144,65146,65148,65151],{"class":41,"line":17675},[39,65141,53119],{"class":53},[39,65143,52586],{"class":52275},[39,65145,54461],{"class":49},[39,65147,1117],{"class":53},[39,65149,65150],{"class":237},"\"tab\"",[39,65152,52282],{"class":53},[39,65154,65155,65157,65159,65161,65163,65166],{"class":41,"line":17686},[39,65156,52316],{"class":53},[39,65158,52586],{"class":52275},[39,65160,54461],{"class":49},[39,65162,1117],{"class":53},[39,65164,65165],{"class":237},"\"tab-nav\"",[39,65167,52282],{"class":53},[39,65169,65170,65172,65174,65177,65179],{"class":41,"line":17709},[39,65171,56209],{"class":53},[39,65173,476],{"class":52275},[39,65175,65176],{"class":53},">每日特价\u003C\u002F",[39,65178,476],{"class":52275},[39,65180,52282],{"class":53},[39,65182,65183,65185,65187],{"class":41,"line":17731},[39,65184,56209],{"class":53},[39,65186,489],{"class":52275},[39,65188,52282],{"class":53},[39,65190,65191,65193,65195,65197,65199,65201,65203,65205,65207,65209,65212,65215,65217,65219,65221],{"class":41,"line":17736},[39,65192,56277],{"class":53},[39,65194,331],{"class":52275},[39,65196,62027],{"class":53},[39,65198,922],{"class":52275},[39,65200,54461],{"class":49},[39,65202,1117],{"class":53},[39,65204,60681],{"class":237},[39,65206,62032],{"class":49},[39,65208,1117],{"class":53},[39,65210,65211],{"class":237},"\"javascript:;\"",[39,65213,65214],{"class":53},">精选\u003C\u002F",[39,65216,922],{"class":52275},[39,65218,56289],{"class":53},[39,65220,331],{"class":52275},[39,65222,52282],{"class":53},[39,65224,65225,65227,65229,65231,65233,65235,65237,65239,65242,65244,65246,65248],{"class":41,"line":17742},[39,65226,56277],{"class":53},[39,65228,331],{"class":52275},[39,65230,62027],{"class":53},[39,65232,922],{"class":52275},[39,65234,62032],{"class":49},[39,65236,1117],{"class":53},[39,65238,65211],{"class":237},[39,65240,65241],{"class":53},">美食\u003C\u002F",[39,65243,922],{"class":52275},[39,65245,56289],{"class":53},[39,65247,331],{"class":52275},[39,65249,52282],{"class":53},[39,65251,65252,65254,65256,65258,65260,65262,65264,65266,65269,65271,65273,65275],{"class":41,"line":17756},[39,65253,56277],{"class":53},[39,65255,331],{"class":52275},[39,65257,62027],{"class":53},[39,65259,922],{"class":52275},[39,65261,62032],{"class":49},[39,65263,1117],{"class":53},[39,65265,65211],{"class":237},[39,65267,65268],{"class":53},">百货\u003C\u002F",[39,65270,922],{"class":52275},[39,65272,56289],{"class":53},[39,65274,331],{"class":52275},[39,65276,52282],{"class":53},[39,65278,65279,65281,65283,65285,65287,65289,65291,65293,65296,65298,65300,65302],{"class":41,"line":17769},[39,65280,56277],{"class":53},[39,65282,331],{"class":52275},[39,65284,62027],{"class":53},[39,65286,922],{"class":52275},[39,65288,62032],{"class":49},[39,65290,1117],{"class":53},[39,65292,65211],{"class":237},[39,65294,65295],{"class":53},">个护\u003C\u002F",[39,65297,922],{"class":52275},[39,65299,56289],{"class":53},[39,65301,331],{"class":52275},[39,65303,52282],{"class":53},[39,65305,65306,65308,65310,65312,65314,65316,65318,65320,65323,65325,65327,65329],{"class":41,"line":17774},[39,65307,56277],{"class":53},[39,65309,331],{"class":52275},[39,65311,62027],{"class":53},[39,65313,922],{"class":52275},[39,65315,62032],{"class":49},[39,65317,1117],{"class":53},[39,65319,65211],{"class":237},[39,65321,65322],{"class":53},">预告\u003C\u002F",[39,65324,922],{"class":52275},[39,65326,56289],{"class":53},[39,65328,331],{"class":52275},[39,65330,52282],{"class":53},[39,65332,65333,65335,65337],{"class":41,"line":17788},[39,65334,56382],{"class":53},[39,65336,489],{"class":52275},[39,65338,52282],{"class":53},[39,65340,65341,65343,65345],{"class":41,"line":17793},[39,65342,52751],{"class":53},[39,65344,52586],{"class":52275},[39,65346,52282],{"class":53},[39,65348,65349,65351,65353,65355,65357,65360],{"class":41,"line":17799},[39,65350,52316],{"class":53},[39,65352,52586],{"class":52275},[39,65354,54461],{"class":49},[39,65356,1117],{"class":53},[39,65358,65359],{"class":237},"\"tab-content\"",[39,65361,52282],{"class":53},[39,65363,65364,65366,65368,65370,65372,65375,65377,65379,65381,65383,65386,65388,65390,65392,65395,65397],{"class":41,"line":17804},[39,65365,56209],{"class":53},[39,65367,52586],{"class":52275},[39,65369,54461],{"class":49},[39,65371,1117],{"class":53},[39,65373,65374],{"class":237},"\"item active\"",[39,65376,62027],{"class":53},[39,65378,2585],{"class":52275},[39,65380,56214],{"class":49},[39,65382,1117],{"class":53},[39,65384,65385],{"class":237},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[39,65387,56222],{"class":49},[39,65389,1117],{"class":53},[39,65391,8726],{"class":237},[39,65393,65394],{"class":53}," \u002F>\u003C\u002F",[39,65396,52586],{"class":52275},[39,65398,52282],{"class":53},[39,65400,65401,65403,65405,65407,65409,65411,65413,65415,65417,65419,65422,65424,65426,65428,65430,65432],{"class":41,"line":17818},[39,65402,56209],{"class":53},[39,65404,52586],{"class":52275},[39,65406,54461],{"class":49},[39,65408,1117],{"class":53},[39,65410,63598],{"class":237},[39,65412,62027],{"class":53},[39,65414,2585],{"class":52275},[39,65416,56214],{"class":49},[39,65418,1117],{"class":53},[39,65420,65421],{"class":237},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[39,65423,56222],{"class":49},[39,65425,1117],{"class":53},[39,65427,8726],{"class":237},[39,65429,65394],{"class":53},[39,65431,52586],{"class":52275},[39,65433,52282],{"class":53},[39,65435,65436,65438,65440,65442,65444,65446,65448,65450,65452,65454,65457,65459,65461,65463,65465,65467],{"class":41,"line":17823},[39,65437,56209],{"class":53},[39,65439,52586],{"class":52275},[39,65441,54461],{"class":49},[39,65443,1117],{"class":53},[39,65445,63598],{"class":237},[39,65447,62027],{"class":53},[39,65449,2585],{"class":52275},[39,65451,56214],{"class":49},[39,65453,1117],{"class":53},[39,65455,65456],{"class":237},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[39,65458,56222],{"class":49},[39,65460,1117],{"class":53},[39,65462,8726],{"class":237},[39,65464,65394],{"class":53},[39,65466,52586],{"class":52275},[39,65468,52282],{"class":53},[39,65470,65471,65473,65475,65477,65479,65481,65483,65485,65487,65489,65492,65494,65496,65498,65500,65502],{"class":41,"line":17828},[39,65472,56209],{"class":53},[39,65474,52586],{"class":52275},[39,65476,54461],{"class":49},[39,65478,1117],{"class":53},[39,65480,63598],{"class":237},[39,65482,62027],{"class":53},[39,65484,2585],{"class":52275},[39,65486,56214],{"class":49},[39,65488,1117],{"class":53},[39,65490,65491],{"class":237},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[39,65493,56222],{"class":49},[39,65495,1117],{"class":53},[39,65497,8726],{"class":237},[39,65499,65394],{"class":53},[39,65501,52586],{"class":52275},[39,65503,52282],{"class":53},[39,65505,65506,65508,65510,65512,65514,65516,65518,65520,65522,65524,65527,65529,65531,65533,65535,65537],{"class":41,"line":17842},[39,65507,56209],{"class":53},[39,65509,52586],{"class":52275},[39,65511,54461],{"class":49},[39,65513,1117],{"class":53},[39,65515,63598],{"class":237},[39,65517,62027],{"class":53},[39,65519,2585],{"class":52275},[39,65521,56214],{"class":49},[39,65523,1117],{"class":53},[39,65525,65526],{"class":237},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[39,65528,56222],{"class":49},[39,65530,1117],{"class":53},[39,65532,8726],{"class":237},[39,65534,65394],{"class":53},[39,65536,52586],{"class":52275},[39,65538,52282],{"class":53},[39,65540,65541,65543,65545],{"class":41,"line":17854},[39,65542,52751],{"class":53},[39,65544,52586],{"class":52275},[39,65546,52282],{"class":53},[39,65548,65549,65551,65553],{"class":41,"line":17859},[39,65550,53392],{"class":53},[39,65552,52586],{"class":52275},[39,65554,52282],{"class":53},[39,65556,65557,65559,65561],{"class":41,"line":17872},[39,65558,53119],{"class":53},[39,65560,52788],{"class":52275},[39,65562,52282],{"class":53},[39,65564,65565],{"class":41,"line":17877},[39,65566,65567],{"class":128},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[39,65569,65570],{"class":41,"line":17882},[39,65571,65572],{"class":128},"    \u002F\u002F 1.1 获取 a 元素 \n",[39,65574,65575,65577,65580,65582,65584,65586,65588,65591],{"class":41,"line":17887},[39,65576,12283],{"class":45},[39,65578,65579],{"class":74}," as",[39,65581,71],{"class":45},[39,65583,55371],{"class":53},[39,65585,56656],{"class":49},[39,65587,54],{"class":53},[39,65589,65590],{"class":237},"'.tab-nav a'",[39,65592,574],{"class":53},[39,65594,65595],{"class":41,"line":17900},[39,65596,65597],{"class":128},"    \u002F\u002F console.log(as) \n",[39,65599,65600,65602,65604,65606,65608,65610,65612,65614,65616,65619,65621,65623,65625],{"class":41,"line":17905},[39,65601,4284],{"class":45},[39,65603,2772],{"class":53},[39,65605,52822],{"class":45},[39,65607,10506],{"class":53},[39,65609,1117],{"class":45},[39,65611,315],{"class":74},[39,65613,10513],{"class":53},[39,65615,2170],{"class":45},[39,65617,65618],{"class":53}," as.",[39,65620,52943],{"class":74},[39,65622,4297],{"class":53},[39,65624,3389],{"class":45},[39,65626,89],{"class":53},[39,65628,65629],{"class":41,"line":33608},[39,65630,65631],{"class":128},"      \u002F\u002F console.log(as[i])\n",[39,65633,65634],{"class":41,"line":33614},[39,65635,65636],{"class":128},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[39,65638,65639,65642,65644,65646,65649,65651,65653],{"class":41,"line":33620},[39,65640,65641],{"class":53},"      as[i].",[39,65643,58788],{"class":49},[39,65645,54],{"class":53},[39,65647,65648],{"class":237},"'mouseenter'",[39,65650,63],{"class":53},[39,65652,55424],{"class":45},[39,65654,55427],{"class":53},[39,65656,65657],{"class":41,"line":33626},[39,65658,65659],{"class":128},"        \u002F\u002F console.log('鼠标经过')\n",[39,65661,65662],{"class":41,"line":33632},[39,65663,65664],{"class":128},"        \u002F\u002F 排他思想  \n",[39,65666,65667],{"class":41,"line":33643},[39,65668,65669],{"class":128},"        \u002F\u002F 干掉别人 移除类active\n",[39,65671,65672,65674,65676,65678,65681,65683,65685,65687,65690],{"class":41,"line":33649},[39,65673,52900],{"class":53},[39,65675,55374],{"class":49},[39,65677,54],{"class":53},[39,65679,65680],{"class":237},"'.tab-nav .active'",[39,65682,57978],{"class":53},[39,65684,57981],{"class":49},[39,65686,54],{"class":53},[39,65688,65689],{"class":237},"'active'",[39,65691,574],{"class":53},[39,65693,65694],{"class":41,"line":33669},[39,65695,65696],{"class":128},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[39,65698,65699,65702,65705,65707,65709,65711],{"class":41,"line":33675},[39,65700,65701],{"class":74},"        this",[39,65703,65704],{"class":53},".classList.",[39,65706,6413],{"class":49},[39,65708,54],{"class":53},[39,65710,65689],{"class":237},[39,65712,574],{"class":53},[39,65714,65715],{"class":41,"line":33686},[39,65716,122],{"emptyLinePlaceholder":121},[39,65718,65719],{"class":41,"line":33692},[39,65720,65721],{"class":128},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[39,65723,65724],{"class":41,"line":33698},[39,65725,65726],{"class":128},"        \u002F\u002F 干掉别人\n",[39,65728,65729,65731,65733,65735,65738,65740,65742,65744,65746],{"class":41,"line":33704},[39,65730,52900],{"class":53},[39,65732,55374],{"class":49},[39,65734,54],{"class":53},[39,65736,65737],{"class":237},"'.tab-content .active'",[39,65739,57978],{"class":53},[39,65741,57981],{"class":49},[39,65743,54],{"class":53},[39,65745,65689],{"class":237},[39,65747,574],{"class":53},[39,65749,65750],{"class":41,"line":33710},[39,65751,65752],{"class":128},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[39,65754,65755,65757,65759,65761,65764,65766,65768,65770,65772,65774,65776,65778,65780],{"class":41,"line":33716},[39,65756,52900],{"class":53},[39,65758,55374],{"class":49},[39,65760,54],{"class":53},[39,65762,65763],{"class":237},"`.tab-content .item:nth-child(${",[39,65765,1704],{"class":53},[39,65767,46541],{"class":45},[39,65769,26093],{"class":74},[39,65771,58007],{"class":237},[39,65773,57978],{"class":53},[39,65775,6413],{"class":49},[39,65777,54],{"class":53},[39,65779,65689],{"class":237},[39,65781,574],{"class":53},[39,65783,65784],{"class":41,"line":33722},[39,65785,122],{"emptyLinePlaceholder":121},[39,65787,65788],{"class":41,"line":33728},[39,65789,65790],{"class":53},"      })\n",[39,65792,65793],{"class":41,"line":33748},[39,65794,3284],{"class":53},[39,65796,65797,65799,65801],{"class":41,"line":33754},[39,65798,53392],{"class":53},[39,65800,52788],{"class":52275},[39,65802,52282],{"class":53},[39,65804,65805,65807,65809],{"class":41,"line":33770},[39,65806,52760],{"class":53},[39,65808,52775],{"class":52275},[39,65810,52282],{"class":53},[39,65812,65813],{"class":41,"line":33776},[39,65814,122],{"emptyLinePlaceholder":121},[39,65816,65817,65819,65821],{"class":41,"line":33790},[39,65818,52760],{"class":53},[39,65820,51610],{"class":52275},[39,65822,52282],{"class":53},[19,65824,65825],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65827,65828],{},"在监听事件中，this指向的就是他的调用者",[19,65830,65831],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65833,54695],{},[19,65835,65836],{},"(function () {",[19,65838,65839],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65841,65842],{},"list.addEventListener('click', function (e) {",[19,65844,65845],{},"if (e.target.tagName === 'A') {",[19,65847,65848],{},"\u002F\u002F 排他思想",[19,65850,65851],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65853,65854],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65856,65857],{},"\u002F\u002F console.log(old);",[19,65859,65860],{},"\u002F\u002F 判断",[19,65862,65863],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65865,65866],{},"if (old) old.classList.remove('active')",[19,65868,65869],{},"e.target.classList.add('active')",[19,65871,2206],{},[19,65873,53439],{},[19,65875,65876],{},"})();",[476,65878,65880],{"id":65879},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[30,65882,65884],{"className":51608,"code":65883,"language":51610,"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",[26,65885,65886,65896,65900,65908,65912,65926,65940,65952,65960,65966,65976,65986,65990,65994,66001,66013,66024,66041,66054,66068,66078,66082,66086,66093,66104,66122,66132,66144,66148,66152,66159,66176,66187,66199,66203,66207,66214,66226,66230,66238,66246,66250,66258,66266,66274,66289,66333,66341,66354,66367,66380,66388,66396,66404,66432,66440,66452,66465,66478,66486,66494,66502,66528,66536,66549,66561,66574,66582,66590,66598,66624,66632,66645,66657,66670,66678,66686,66694,66699,66719,66724,66744,66749,66766,66771,66779,66784,66813,66826,66830,66834,66839,66843,66871,66876,66893,66898,66903,66908,66913,66939,66943,66947,66955,66963,66967],{"__ignoreMap":35},[39,65887,65888,65890,65892,65894],{"class":41,"line":42},[39,65889,52272],{"class":53},[39,65891,52276],{"class":52275},[39,65893,52279],{"class":49},[39,65895,52282],{"class":53},[39,65897,65898],{"class":41,"line":92},[39,65899,122],{"emptyLinePlaceholder":121},[39,65901,65902,65904,65906],{"class":41,"line":112},[39,65903,2170],{"class":53},[39,65905,51610],{"class":52275},[39,65907,52282],{"class":53},[39,65909,65910],{"class":41,"line":118},[39,65911,122],{"emptyLinePlaceholder":121},[39,65913,65914,65916,65918,65920,65922,65924],{"class":41,"line":125},[39,65915,2170],{"class":53},[39,65917,52309],{"class":52275},[39,65919,52291],{"class":49},[39,65921,1117],{"class":53},[39,65923,52296],{"class":237},[39,65925,52282],{"class":53},[39,65927,65928,65930,65932,65934,65936,65938],{"class":41,"line":132},[39,65929,53119],{"class":53},[39,65931,52319],{"class":52275},[39,65933,52322],{"class":49},[39,65935,1117],{"class":53},[39,65937,52327],{"class":237},[39,65939,52282],{"class":53},[39,65941,65942,65944,65946,65948,65950],{"class":41,"line":138},[39,65943,53119],{"class":53},[39,65945,52382],{"class":52275},[39,65947,56289],{"class":53},[39,65949,52382],{"class":52275},[39,65951,52282],{"class":53},[39,65953,65954,65956,65958],{"class":41,"line":169},[39,65955,53119],{"class":53},[39,65957,1192],{"class":52275},[39,65959,52282],{"class":53},[39,65961,65962,65964],{"class":41,"line":190},[39,65963,7479],{"class":52275},[39,65965,16545],{"class":53},[39,65967,65968,65970,65972,65974],{"class":41,"line":202},[39,65969,55681],{"class":74},[39,65971,52412],{"class":53},[39,65973,1457],{"class":74},[39,65975,318],{"class":53},[39,65977,65978,65980,65982,65984],{"class":41,"line":207},[39,65979,55670],{"class":74},[39,65981,52412],{"class":53},[39,65983,1457],{"class":74},[39,65985,318],{"class":53},[39,65987,65988],{"class":41,"line":212},[39,65989,3284],{"class":53},[39,65991,65992],{"class":41,"line":223},[39,65993,122],{"emptyLinePlaceholder":121},[39,65995,65996,65999],{"class":41,"line":228},[39,65997,65998],{"class":52275},"    table",[39,66000,16545],{"class":53},[39,66002,66003,66006,66008,66011],{"class":41,"line":263},[39,66004,66005],{"class":74},"      border-collapse",[39,66007,52412],{"class":53},[39,66009,66010],{"class":74},"collapse",[39,66012,318],{"class":53},[39,66014,66015,66018,66020,66022],{"class":41,"line":287},[39,66016,66017],{"class":74},"      border-spacing",[39,66019,52412],{"class":53},[39,66021,1457],{"class":74},[39,66023,318],{"class":53},[39,66025,66026,66028,66030,66032,66034,66036,66039],{"class":41,"line":292},[39,66027,62952],{"class":74},[39,66029,52412],{"class":53},[39,66031,1483],{"class":74},[39,66033,52467],{"class":45},[39,66035,52496],{"class":74},[39,66037,66038],{"class":74}," #c0c0c0",[39,66040,318],{"class":53},[39,66042,66043,66045,66047,66050,66052],{"class":41,"line":305},[39,66044,55746],{"class":74},[39,66046,52412],{"class":53},[39,66048,66049],{"class":74},"500",[39,66051,52467],{"class":45},[39,66053,318],{"class":53},[39,66055,66056,66058,66060,66062,66064,66066],{"class":41,"line":310},[39,66057,55681],{"class":74},[39,66059,52412],{"class":53},[39,66061,278],{"class":74},[39,66063,52467],{"class":45},[39,66065,52531],{"class":74},[39,66067,318],{"class":53},[39,66069,66070,66072,66074,66076],{"class":41,"line":321},[39,66071,58261],{"class":74},[39,66073,52412],{"class":53},[39,66075,52567],{"class":74},[39,66077,318],{"class":53},[39,66079,66080],{"class":41,"line":713},[39,66081,3284],{"class":53},[39,66083,66084],{"class":41,"line":718},[39,66085,122],{"emptyLinePlaceholder":121},[39,66087,66088,66091],{"class":41,"line":723},[39,66089,66090],{"class":52275},"    th",[39,66092,16545],{"class":53},[39,66094,66095,66097,66099,66102],{"class":41,"line":729},[39,66096,55859],{"class":74},[39,66098,52412],{"class":53},[39,66100,66101],{"class":74},"#09c",[39,66103,318],{"class":53},[39,66105,66106,66109,66111,66113,66115,66117,66120],{"class":41,"line":735},[39,66107,66108],{"class":74},"      font",[39,66110,52412],{"class":53},[39,66112,63314],{"class":74},[39,66114,65048],{"class":74},[39,66116,52467],{"class":45},[39,66118,66119],{"class":237}," \"微软雅黑\"",[39,66121,318],{"class":53},[39,66123,66124,66126,66128,66130],{"class":41,"line":741},[39,66125,58391],{"class":74},[39,66127,52412],{"class":53},[39,66129,61817],{"class":74},[39,66131,318],{"class":53},[39,66133,66134,66136,66138,66140,66142],{"class":41,"line":747},[39,66135,55760],{"class":74},[39,66137,52412],{"class":53},[39,66139,2060],{"class":74},[39,66141,52467],{"class":45},[39,66143,318],{"class":53},[39,66145,66146],{"class":41,"line":753},[39,66147,3284],{"class":53},[39,66149,66150],{"class":41,"line":758},[39,66151,122],{"emptyLinePlaceholder":121},[39,66153,66154,66157],{"class":41,"line":763},[39,66155,66156],{"class":52275},"    td",[39,66158,16545],{"class":53},[39,66160,66161,66163,66165,66167,66169,66171,66174],{"class":41,"line":772},[39,66162,62952],{"class":74},[39,66164,52412],{"class":53},[39,66166,1483],{"class":74},[39,66168,52467],{"class":45},[39,66170,52496],{"class":74},[39,66172,66173],{"class":74}," #d0d0d0",[39,66175,318],{"class":53},[39,66177,66178,66180,66182,66185],{"class":41,"line":777},[39,66179,58391],{"class":74},[39,66181,52412],{"class":53},[39,66183,66184],{"class":74},"#404060",[39,66186,318],{"class":53},[39,66188,66189,66191,66193,66195,66197],{"class":41,"line":785},[39,66190,55670],{"class":74},[39,66192,52412],{"class":53},[39,66194,423],{"class":74},[39,66196,52467],{"class":45},[39,66198,318],{"class":53},[39,66200,66201],{"class":41,"line":796},[39,66202,3284],{"class":53},[39,66204,66205],{"class":41,"line":808},[39,66206,122],{"emptyLinePlaceholder":121},[39,66208,66209,66212],{"class":41,"line":823},[39,66210,66211],{"class":49},"    .allCheck",[39,66213,16545],{"class":53},[39,66215,66216,66218,66220,66222,66224],{"class":41,"line":839},[39,66217,55746],{"class":74},[39,66219,52412],{"class":53},[39,66221,1873],{"class":74},[39,66223,52467],{"class":45},[39,66225,318],{"class":53},[39,66227,66228],{"class":41,"line":845},[39,66229,3284],{"class":53},[39,66231,66232,66234,66236],{"class":41,"line":856},[39,66233,53392],{"class":53},[39,66235,1192],{"class":52275},[39,66237,52282],{"class":53},[39,66239,66240,66242,66244],{"class":41,"line":861},[39,66241,52760],{"class":53},[39,66243,52309],{"class":52275},[39,66245,52282],{"class":53},[39,66247,66248],{"class":41,"line":870},[39,66249,122],{"emptyLinePlaceholder":121},[39,66251,66252,66254,66256],{"class":41,"line":9084},[39,66253,2170],{"class":53},[39,66255,52775],{"class":52275},[39,66257,52282],{"class":53},[39,66259,66260,66262,66264],{"class":41,"line":9090},[39,66261,53119],{"class":53},[39,66263,1404],{"class":52275},[39,66265,52282],{"class":53},[39,66267,66268,66270,66272],{"class":41,"line":9102},[39,66269,52316],{"class":53},[39,66271,1410],{"class":52275},[39,66273,52282],{"class":53},[39,66275,66276,66278,66280,66282,66284,66287],{"class":41,"line":9114},[39,66277,56209],{"class":53},[39,66279,1413],{"class":52275},[39,66281,54461],{"class":49},[39,66283,1117],{"class":53},[39,66285,66286],{"class":237},"\"allCheck\"",[39,66288,52282],{"class":53},[39,66290,66291,66293,66295,66297,66299,66301,66303,66305,66307,66309,66311,66314,66317,66319,66321,66323,66326,66329,66331],{"class":41,"line":9126},[39,66292,56277],{"class":53},[39,66294,54796],{"class":52275},[39,66296,54799],{"class":49},[39,66298,1117],{"class":53},[39,66300,54804],{"class":237},[39,66302,15893],{"class":49},[39,66304,1117],{"class":53},[39,66306,8726],{"class":237},[39,66308,15932],{"class":49},[39,66310,1117],{"class":53},[39,66312,66313],{"class":237},"\"checkAll\"",[39,66315,66316],{"class":53},"> \u003C",[39,66318,39],{"class":52275},[39,66320,54461],{"class":49},[39,66322,1117],{"class":53},[39,66324,66325],{"class":237},"\"all\"",[39,66327,66328],{"class":53},">全选\u003C\u002F",[39,66330,39],{"class":52275},[39,66332,52282],{"class":53},[39,66334,66335,66337,66339],{"class":41,"line":10784},[39,66336,56382],{"class":53},[39,66338,1413],{"class":52275},[39,66340,52282],{"class":53},[39,66342,66343,66345,66347,66350,66352],{"class":41,"line":10809},[39,66344,56209],{"class":53},[39,66346,1413],{"class":52275},[39,66348,66349],{"class":53},">商品\u003C\u002F",[39,66351,1413],{"class":52275},[39,66353,52282],{"class":53},[39,66355,66356,66358,66360,66363,66365],{"class":41,"line":10832},[39,66357,56209],{"class":53},[39,66359,1413],{"class":52275},[39,66361,66362],{"class":53},">商家\u003C\u002F",[39,66364,1413],{"class":52275},[39,66366,52282],{"class":53},[39,66368,66369,66371,66373,66376,66378],{"class":41,"line":10856},[39,66370,56209],{"class":53},[39,66372,1413],{"class":52275},[39,66374,66375],{"class":53},">价格\u003C\u002F",[39,66377,1413],{"class":52275},[39,66379,52282],{"class":53},[39,66381,66382,66384,66386],{"class":41,"line":10861},[39,66383,52751],{"class":53},[39,66385,1410],{"class":52275},[39,66387,52282],{"class":53},[39,66389,66390,66392,66394],{"class":41,"line":10866},[39,66391,52316],{"class":53},[39,66393,1410],{"class":52275},[39,66395,52282],{"class":53},[39,66397,66398,66400,66402],{"class":41,"line":10871},[39,66399,56209],{"class":53},[39,66401,1455],{"class":52275},[39,66403,52282],{"class":53},[39,66405,66406,66408,66410,66412,66414,66416,66418,66420,66423,66425,66427,66430],{"class":41,"line":10880},[39,66407,56277],{"class":53},[39,66409,54796],{"class":52275},[39,66411,54799],{"class":49},[39,66413,1117],{"class":53},[39,66415,54804],{"class":237},[39,66417,15893],{"class":49},[39,66419,1117],{"class":53},[39,66421,66422],{"class":237},"\"check\"",[39,66424,54461],{"class":49},[39,66426,1117],{"class":53},[39,66428,66429],{"class":237},"\"ck\"",[39,66431,52282],{"class":53},[39,66433,66434,66436,66438],{"class":41,"line":10885},[39,66435,56382],{"class":53},[39,66437,1455],{"class":52275},[39,66439,52282],{"class":53},[39,66441,66442,66444,66446,66448,66450],{"class":41,"line":10891},[39,66443,56209],{"class":53},[39,66445,1455],{"class":52275},[39,66447,62148],{"class":53},[39,66449,1455],{"class":52275},[39,66451,52282],{"class":53},[39,66453,66454,66456,66458,66461,66463],{"class":41,"line":10912},[39,66455,56209],{"class":53},[39,66457,1455],{"class":52275},[39,66459,66460],{"class":53},">小米\u003C\u002F",[39,66462,1455],{"class":52275},[39,66464,52282],{"class":53},[39,66466,66467,66469,66471,66474,66476],{"class":41,"line":10918},[39,66468,56209],{"class":53},[39,66470,1455],{"class":52275},[39,66472,66473],{"class":53},">￥1999\u003C\u002F",[39,66475,1455],{"class":52275},[39,66477,52282],{"class":53},[39,66479,66480,66482,66484],{"class":41,"line":10932},[39,66481,52751],{"class":53},[39,66483,1410],{"class":52275},[39,66485,52282],{"class":53},[39,66487,66488,66490,66492],{"class":41,"line":10938},[39,66489,52316],{"class":53},[39,66491,1410],{"class":52275},[39,66493,52282],{"class":53},[39,66495,66496,66498,66500],{"class":41,"line":10965},[39,66497,56209],{"class":53},[39,66499,1455],{"class":52275},[39,66501,52282],{"class":53},[39,66503,66504,66506,66508,66510,66512,66514,66516,66518,66520,66522,66524,66526],{"class":41,"line":10974},[39,66505,56277],{"class":53},[39,66507,54796],{"class":52275},[39,66509,54799],{"class":49},[39,66511,1117],{"class":53},[39,66513,54804],{"class":237},[39,66515,15893],{"class":49},[39,66517,1117],{"class":53},[39,66519,66422],{"class":237},[39,66521,54461],{"class":49},[39,66523,1117],{"class":53},[39,66525,66429],{"class":237},[39,66527,52282],{"class":53},[39,66529,66530,66532,66534],{"class":41,"line":10980},[39,66531,56382],{"class":53},[39,66533,1455],{"class":52275},[39,66535,52282],{"class":53},[39,66537,66538,66540,66542,66545,66547],{"class":41,"line":10988},[39,66539,56209],{"class":53},[39,66541,1455],{"class":52275},[39,66543,66544],{"class":53},">小米净水器\u003C\u002F",[39,66546,1455],{"class":52275},[39,66548,52282],{"class":53},[39,66550,66551,66553,66555,66557,66559],{"class":41,"line":10993},[39,66552,56209],{"class":53},[39,66554,1455],{"class":52275},[39,66556,66460],{"class":53},[39,66558,1455],{"class":52275},[39,66560,52282],{"class":53},[39,66562,66563,66565,66567,66570,66572],{"class":41,"line":17577},[39,66564,56209],{"class":53},[39,66566,1455],{"class":52275},[39,66568,66569],{"class":53},">￥4999\u003C\u002F",[39,66571,1455],{"class":52275},[39,66573,52282],{"class":53},[39,66575,66576,66578,66580],{"class":41,"line":17583},[39,66577,52751],{"class":53},[39,66579,1410],{"class":52275},[39,66581,52282],{"class":53},[39,66583,66584,66586,66588],{"class":41,"line":17606},[39,66585,52316],{"class":53},[39,66587,1410],{"class":52275},[39,66589,52282],{"class":53},[39,66591,66592,66594,66596],{"class":41,"line":17612},[39,66593,56209],{"class":53},[39,66595,1455],{"class":52275},[39,66597,52282],{"class":53},[39,66599,66600,66602,66604,66606,66608,66610,66612,66614,66616,66618,66620,66622],{"class":41,"line":17635},[39,66601,56277],{"class":53},[39,66603,54796],{"class":52275},[39,66605,54799],{"class":49},[39,66607,1117],{"class":53},[39,66609,54804],{"class":237},[39,66611,15893],{"class":49},[39,66613,1117],{"class":53},[39,66615,66422],{"class":237},[39,66617,54461],{"class":49},[39,66619,1117],{"class":53},[39,66621,66429],{"class":237},[39,66623,52282],{"class":53},[39,66625,66626,66628,66630],{"class":41,"line":17649},[39,66627,56382],{"class":53},[39,66629,1455],{"class":52275},[39,66631,52282],{"class":53},[39,66633,66634,66636,66638,66641,66643],{"class":41,"line":17669},[39,66635,56209],{"class":53},[39,66637,1455],{"class":52275},[39,66639,66640],{"class":53},">小米电视\u003C\u002F",[39,66642,1455],{"class":52275},[39,66644,52282],{"class":53},[39,66646,66647,66649,66651,66653,66655],{"class":41,"line":17675},[39,66648,56209],{"class":53},[39,66650,1455],{"class":52275},[39,66652,66460],{"class":53},[39,66654,1455],{"class":52275},[39,66656,52282],{"class":53},[39,66658,66659,66661,66663,66666,66668],{"class":41,"line":17686},[39,66660,56209],{"class":53},[39,66662,1455],{"class":52275},[39,66664,66665],{"class":53},">￥5999\u003C\u002F",[39,66667,1455],{"class":52275},[39,66669,52282],{"class":53},[39,66671,66672,66674,66676],{"class":41,"line":17709},[39,66673,52751],{"class":53},[39,66675,1410],{"class":52275},[39,66677,52282],{"class":53},[39,66679,66680,66682,66684],{"class":41,"line":17731},[39,66681,53392],{"class":53},[39,66683,1404],{"class":52275},[39,66685,52282],{"class":53},[39,66687,66688,66690,66692],{"class":41,"line":17736},[39,66689,53119],{"class":53},[39,66691,52788],{"class":52275},[39,66693,52282],{"class":53},[39,66695,66696],{"class":41,"line":17742},[39,66697,66698],{"class":128},"    \u002F\u002F 1. 获取大复选框\n",[39,66700,66701,66703,66706,66708,66710,66712,66714,66717],{"class":41,"line":17756},[39,66702,12283],{"class":45},[39,66704,66705],{"class":74}," checkAll",[39,66707,71],{"class":45},[39,66709,55371],{"class":53},[39,66711,55374],{"class":49},[39,66713,54],{"class":53},[39,66715,66716],{"class":237},"'#checkAll'",[39,66718,574],{"class":53},[39,66720,66721],{"class":41,"line":17769},[39,66722,66723],{"class":128},"    \u002F\u002F 2. 获取所有的小复选框\n",[39,66725,66726,66728,66731,66733,66735,66737,66739,66742],{"class":41,"line":17774},[39,66727,12283],{"class":45},[39,66729,66730],{"class":74}," cks",[39,66732,71],{"class":45},[39,66734,55371],{"class":53},[39,66736,56656],{"class":49},[39,66738,54],{"class":53},[39,66740,66741],{"class":237},"'.ck'",[39,66743,574],{"class":53},[39,66745,66746],{"class":41,"line":17788},[39,66747,66748],{"class":128},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[39,66750,66751,66754,66756,66758,66760,66762,66764],{"class":41,"line":17793},[39,66752,66753],{"class":53},"    checkAll.",[39,66755,58788],{"class":49},[39,66757,54],{"class":53},[39,66759,58793],{"class":237},[39,66761,63],{"class":53},[39,66763,55424],{"class":45},[39,66765,55427],{"class":53},[39,66767,66768],{"class":41,"line":17799},[39,66769,66770],{"class":128},"      \u002F\u002F 得到当前大复选框的选中状态\n",[39,66772,66773,66776],{"class":41,"line":17804},[39,66774,66775],{"class":128},"      \u002F\u002F console.log(checkAll.checked)",[39,66777,66778],{"class":128},"  \u002F\u002F 得到 是 true 或者是 false\n",[39,66780,66781],{"class":41,"line":17818},[39,66782,66783],{"class":128},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[39,66785,66786,66788,66790,66792,66794,66796,66798,66800,66802,66805,66807,66809,66811],{"class":41,"line":17823},[39,66787,53259],{"class":45},[39,66789,2772],{"class":53},[39,66791,52822],{"class":45},[39,66793,10506],{"class":53},[39,66795,1117],{"class":45},[39,66797,315],{"class":74},[39,66799,10513],{"class":53},[39,66801,2170],{"class":45},[39,66803,66804],{"class":53}," cks.",[39,66806,52943],{"class":74},[39,66808,4297],{"class":53},[39,66810,3389],{"class":45},[39,66812,89],{"class":53},[39,66814,66815,66818,66820,66823],{"class":41,"line":17828},[39,66816,66817],{"class":53},"        cks[i].checked ",[39,66819,1117],{"class":45},[39,66821,66822],{"class":74}," this",[39,66824,66825],{"class":53},".checked\n",[39,66827,66828],{"class":41,"line":17842},[39,66829,53373],{"class":53},[39,66831,66832],{"class":41,"line":17854},[39,66833,34436],{"class":53},[39,66835,66836],{"class":41,"line":17859},[39,66837,66838],{"class":128},"    \u002F\u002F 5. 小复选框控制大复选框\n",[39,66840,66841],{"class":41,"line":17872},[39,66842,122],{"emptyLinePlaceholder":121},[39,66844,66845,66847,66849,66851,66853,66855,66857,66859,66861,66863,66865,66867,66869],{"class":41,"line":17877},[39,66846,4284],{"class":45},[39,66848,2772],{"class":53},[39,66850,52822],{"class":45},[39,66852,10506],{"class":53},[39,66854,1117],{"class":45},[39,66856,315],{"class":74},[39,66858,10513],{"class":53},[39,66860,2170],{"class":45},[39,66862,66804],{"class":53},[39,66864,52943],{"class":74},[39,66866,4297],{"class":53},[39,66868,3389],{"class":45},[39,66870,89],{"class":53},[39,66872,66873],{"class":41,"line":17882},[39,66874,66875],{"class":128},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[39,66877,66878,66881,66883,66885,66887,66889,66891],{"class":41,"line":17887},[39,66879,66880],{"class":53},"      cks[i].",[39,66882,58788],{"class":49},[39,66884,54],{"class":53},[39,66886,58793],{"class":237},[39,66888,63],{"class":53},[39,66890,55424],{"class":45},[39,66892,55427],{"class":53},[39,66894,66895],{"class":41,"line":17900},[39,66896,66897],{"class":128},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[39,66899,66900],{"class":41,"line":17905},[39,66901,66902],{"class":128},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[39,66904,66905],{"class":41,"line":33608},[39,66906,66907],{"class":128},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[39,66909,66910],{"class":41,"line":33614},[39,66911,66912],{"class":128},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[39,66914,66915,66918,66920,66922,66924,66926,66929,66931,66933,66935,66937],{"class":41,"line":33620},[39,66916,66917],{"class":53},"        checkAll.checked ",[39,66919,1117],{"class":45},[39,66921,55371],{"class":53},[39,66923,56656],{"class":49},[39,66925,54],{"class":53},[39,66927,66928],{"class":237},"'.ck:checked'",[39,66930,31801],{"class":53},[39,66932,52943],{"class":74},[39,66934,58881],{"class":45},[39,66936,66804],{"class":53},[39,66938,56806],{"class":74},[39,66940,66941],{"class":41,"line":33626},[39,66942,65790],{"class":53},[39,66944,66945],{"class":41,"line":33632},[39,66946,3284],{"class":53},[39,66948,66949,66951,66953],{"class":41,"line":33643},[39,66950,53392],{"class":53},[39,66952,52788],{"class":52275},[39,66954,52282],{"class":53},[39,66956,66957,66959,66961],{"class":41,"line":33649},[39,66958,52760],{"class":53},[39,66960,52775],{"class":52275},[39,66962,52282],{"class":53},[39,66964,66965],{"class":41,"line":33669},[39,66966,122],{"emptyLinePlaceholder":121},[39,66968,66969,66971,66973],{"class":41,"line":33675},[39,66970,52760],{"class":53},[39,66972,51610],{"class":52275},[39,66974,52282],{"class":53},[19,66976,66977],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66979,66980],{},"用好之间比较得到的布尔值！！！",[19,66982,66983,66984,66987,66988,2772,66991,1845,66993,66996],{},"在 JS 里访问的时候，",[26,66985,66986],{},"checkbox.checked"," 是一个 ",[350,66989,66990],{},"布尔值",[26,66992,2487],{},[26,66994,66995],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66998,66999,67000,67003,67004],{},"HTML 的 ",[26,67001,67002],{},"checked=\"checked\""," 只是 ",[350,67005,67006,67007,67010],{},"初始值；JS 的 ",[26,67008,67009],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67012,67013],{},"：checked是一个伪类选择器",[19,67015,67016],{},[2585,67017],{"alt":35,"src":67018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67020,67021,67024],{},[67022,67023],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67026,67027],{},[2585,67028],{"alt":35,"src":67029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67031,67033],{"id":67032},"_33-dom事件进阶","3.3 DOM事件进阶",[476,67035,67037],{"id":67036},"_331-事件流","3.3.1 事件流",[19,67039,67040],{},[2585,67041],{"alt":35,"src":67042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22971,67044,67046],{"id":67045},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67048,67049],{},[2585,67050],{"alt":35,"src":67051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[30,67053,67055],{"className":51608,"code":67054,"language":51610,"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",[26,67056,67057,67067,67081,67085,67093,67107,67127,67139,67147,67154,67166,67178,67188,67192,67196,67203,67215,67227,67237,67241,67249,67257,67261,67269,67284,67303,67311,67319,67339,67359,67375,67386,67394,67411,67422,67430,67447,67458,67466,67474,67482,67486],{"__ignoreMap":35},[39,67058,67059,67061,67063,67065],{"class":41,"line":42},[39,67060,52272],{"class":53},[39,67062,52276],{"class":52275},[39,67064,52279],{"class":49},[39,67066,52282],{"class":53},[39,67068,67069,67071,67073,67075,67077,67079],{"class":41,"line":92},[39,67070,2170],{"class":53},[39,67072,51610],{"class":52275},[39,67074,52291],{"class":49},[39,67076,1117],{"class":53},[39,67078,52296],{"class":237},[39,67080,52282],{"class":53},[39,67082,67083],{"class":41,"line":112},[39,67084,122],{"emptyLinePlaceholder":121},[39,67086,67087,67089,67091],{"class":41,"line":118},[39,67088,2170],{"class":53},[39,67090,52309],{"class":52275},[39,67092,52282],{"class":53},[39,67094,67095,67097,67099,67101,67103,67105],{"class":41,"line":125},[39,67096,53119],{"class":53},[39,67098,52319],{"class":52275},[39,67100,52322],{"class":49},[39,67102,1117],{"class":53},[39,67104,52327],{"class":237},[39,67106,52282],{"class":53},[39,67108,67109,67111,67113,67115,67117,67119,67121,67123,67125],{"class":41,"line":132},[39,67110,53119],{"class":53},[39,67112,52319],{"class":52275},[39,67114,15893],{"class":49},[39,67116,1117],{"class":53},[39,67118,52366],{"class":237},[39,67120,52346],{"class":49},[39,67122,1117],{"class":53},[39,67124,52373],{"class":237},[39,67126,52282],{"class":53},[39,67128,67129,67131,67133,67135,67137],{"class":41,"line":138},[39,67130,53119],{"class":53},[39,67132,52382],{"class":52275},[39,67134,52385],{"class":53},[39,67136,52382],{"class":52275},[39,67138,52282],{"class":53},[39,67140,67141,67143,67145],{"class":41,"line":169},[39,67142,53119],{"class":53},[39,67144,1192],{"class":52275},[39,67146,52282],{"class":53},[39,67148,67149,67152],{"class":41,"line":190},[39,67150,67151],{"class":49},"    .father",[39,67153,16545],{"class":53},[39,67155,67156,67158,67160,67162,67164],{"class":41,"line":202},[39,67157,55746],{"class":74},[39,67159,52412],{"class":53},[39,67161,66049],{"class":74},[39,67163,52467],{"class":45},[39,67165,318],{"class":53},[39,67167,67168,67170,67172,67174,67176],{"class":41,"line":207},[39,67169,55760],{"class":74},[39,67171,52412],{"class":53},[39,67173,66049],{"class":74},[39,67175,52467],{"class":45},[39,67177,318],{"class":53},[39,67179,67180,67182,67184,67186],{"class":41,"line":212},[39,67181,55859],{"class":74},[39,67183,52412],{"class":53},[39,67185,52620],{"class":74},[39,67187,318],{"class":53},[39,67189,67190],{"class":41,"line":223},[39,67191,3284],{"class":53},[39,67193,67194],{"class":41,"line":228},[39,67195,122],{"emptyLinePlaceholder":121},[39,67197,67198,67201],{"class":41,"line":263},[39,67199,67200],{"class":49},"    .son",[39,67202,16545],{"class":53},[39,67204,67205,67207,67209,67211,67213],{"class":41,"line":287},[39,67206,55746],{"class":74},[39,67208,52412],{"class":53},[39,67210,2832],{"class":74},[39,67212,52467],{"class":45},[39,67214,318],{"class":53},[39,67216,67217,67219,67221,67223,67225],{"class":41,"line":292},[39,67218,55760],{"class":74},[39,67220,52412],{"class":53},[39,67222,2832],{"class":74},[39,67224,52467],{"class":45},[39,67226,318],{"class":53},[39,67228,67229,67231,67233,67235],{"class":41,"line":305},[39,67230,55859],{"class":74},[39,67232,52412],{"class":53},[39,67234,55864],{"class":74},[39,67236,318],{"class":53},[39,67238,67239],{"class":41,"line":310},[39,67240,3284],{"class":53},[39,67242,67243,67245,67247],{"class":41,"line":321},[39,67244,53392],{"class":53},[39,67246,1192],{"class":52275},[39,67248,52282],{"class":53},[39,67250,67251,67253,67255],{"class":41,"line":713},[39,67252,52760],{"class":53},[39,67254,52309],{"class":52275},[39,67256,52282],{"class":53},[39,67258,67259],{"class":41,"line":718},[39,67260,122],{"emptyLinePlaceholder":121},[39,67262,67263,67265,67267],{"class":41,"line":723},[39,67264,2170],{"class":53},[39,67266,52775],{"class":52275},[39,67268,52282],{"class":53},[39,67270,67271,67273,67275,67277,67279,67282],{"class":41,"line":729},[39,67272,53119],{"class":53},[39,67274,52586],{"class":52275},[39,67276,54461],{"class":49},[39,67278,1117],{"class":53},[39,67280,67281],{"class":237},"\"father\"",[39,67283,52282],{"class":53},[39,67285,67286,67288,67290,67292,67294,67297,67299,67301],{"class":41,"line":735},[39,67287,52316],{"class":53},[39,67289,52586],{"class":52275},[39,67291,54461],{"class":49},[39,67293,1117],{"class":53},[39,67295,67296],{"class":237},"\"son\"",[39,67298,56289],{"class":53},[39,67300,52586],{"class":52275},[39,67302,52282],{"class":53},[39,67304,67305,67307,67309],{"class":41,"line":741},[39,67306,53392],{"class":53},[39,67308,52586],{"class":52275},[39,67310,52282],{"class":53},[39,67312,67313,67315,67317],{"class":41,"line":747},[39,67314,53119],{"class":53},[39,67316,52788],{"class":52275},[39,67318,52282],{"class":53},[39,67320,67321,67323,67326,67328,67330,67332,67334,67337],{"class":41,"line":753},[39,67322,12283],{"class":45},[39,67324,67325],{"class":74}," fa",[39,67327,71],{"class":45},[39,67329,55371],{"class":53},[39,67331,55374],{"class":49},[39,67333,54],{"class":53},[39,67335,67336],{"class":237},"'.father'",[39,67338,574],{"class":53},[39,67340,67341,67343,67346,67348,67350,67352,67354,67357],{"class":41,"line":758},[39,67342,12283],{"class":45},[39,67344,67345],{"class":74}," son",[39,67347,71],{"class":45},[39,67349,55371],{"class":53},[39,67351,55374],{"class":49},[39,67353,54],{"class":53},[39,67355,67356],{"class":237},"'.son'",[39,67358,574],{"class":53},[39,67360,67361,67363,67365,67367,67369,67371,67373],{"class":41,"line":763},[39,67362,53382],{"class":53},[39,67364,58788],{"class":49},[39,67366,54],{"class":53},[39,67368,58793],{"class":237},[39,67370,63],{"class":53},[39,67372,55424],{"class":45},[39,67374,55427],{"class":53},[39,67376,67377,67379,67381,67384],{"class":41,"line":772},[39,67378,59900],{"class":49},[39,67380,54],{"class":53},[39,67382,67383],{"class":237},"'woshiu1'",[39,67385,574],{"class":53},[39,67387,67388,67390,67392],{"class":41,"line":777},[39,67389,55510],{"class":53},[39,67391,2487],{"class":74},[39,67393,574],{"class":53},[39,67395,67396,67399,67401,67403,67405,67407,67409],{"class":41,"line":785},[39,67397,67398],{"class":53},"    fa.",[39,67400,58788],{"class":49},[39,67402,54],{"class":53},[39,67404,58793],{"class":237},[39,67406,63],{"class":53},[39,67408,55424],{"class":45},[39,67410,55427],{"class":53},[39,67412,67413,67415,67417,67420],{"class":41,"line":796},[39,67414,59900],{"class":49},[39,67416,54],{"class":53},[39,67418,67419],{"class":237},"'1'",[39,67421,574],{"class":53},[39,67423,67424,67426,67428],{"class":41,"line":808},[39,67425,55510],{"class":53},[39,67427,2487],{"class":74},[39,67429,574],{"class":53},[39,67431,67432,67435,67437,67439,67441,67443,67445],{"class":41,"line":823},[39,67433,67434],{"class":53},"    son.",[39,67436,58788],{"class":49},[39,67438,54],{"class":53},[39,67440,58793],{"class":237},[39,67442,63],{"class":53},[39,67444,55424],{"class":45},[39,67446,55427],{"class":53},[39,67448,67449,67451,67453,67456],{"class":41,"line":839},[39,67450,59900],{"class":49},[39,67452,54],{"class":53},[39,67454,67455],{"class":237},"'2'",[39,67457,574],{"class":53},[39,67459,67460,67462,67464],{"class":41,"line":845},[39,67461,55510],{"class":53},[39,67463,2487],{"class":74},[39,67465,574],{"class":53},[39,67467,67468,67470,67472],{"class":41,"line":856},[39,67469,53392],{"class":53},[39,67471,52788],{"class":52275},[39,67473,52282],{"class":53},[39,67475,67476,67478,67480],{"class":41,"line":861},[39,67477,52760],{"class":53},[39,67479,52775],{"class":52275},[39,67481,52282],{"class":53},[39,67483,67484],{"class":41,"line":870},[39,67485,122],{"emptyLinePlaceholder":121},[39,67487,67488,67490,67492],{"class":41,"line":9084},[39,67489,52760],{"class":53},[39,67491,51610],{"class":52275},[39,67493,52282],{"class":53},[19,67495,67496],{},[2585,67497],{"alt":35,"src":67498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67500,67501],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22971,67503,67505],{"id":67504},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67507,67508],{},[2585,67509],{"alt":35,"src":67510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67512,67513],{},"反着来",[19,67515,67516],{},"注意是同名事件，比如都是‘click’",[22971,67518,67520],{"id":67519},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67522,67523],{},[2585,67524],{"alt":35,"src":67525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22971,67527,67529],{"id":67528},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67531,67532],{},[2585,67533],{"alt":35,"src":67534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67536,67537],{},[2585,67538],{"alt":35,"src":67539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22971,67541,67543],{"id":67542},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[328,67545,67546],{},[331,67547,67548],{},"事件类型的区别",[19,67550,67551],{},[2585,67552],{"alt":35,"src":67553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67555,67556],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[328,67558,67559],{"start":92},[331,67560,67561],{},"注册事件的区别",[19,67563,67564],{},[2585,67565],{"alt":35,"src":67566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22971,67568,67570],{"id":67569},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67572,67573],{},[2585,67574],{"alt":35,"src":67575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67577,67578],{},[2585,67579],{"alt":35,"src":67580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[30,67582,67584],{"className":54042,"code":67583,"language":54044,"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",[26,67585,67586,67594,67611,67634,67642,67647,67652,67657,67661,67669,67677],{"__ignoreMap":35},[39,67587,67588,67590,67592],{"class":41,"line":42},[39,67589,2170],{"class":53},[39,67591,52775],{"class":52275},[39,67593,52282],{"class":53},[39,67595,67596,67598,67601,67604,67606,67609],{"class":41,"line":92},[39,67597,53119],{"class":53},[39,67599,67600],{"class":52275},"form",[39,67602,67603],{"class":49}," action",[39,67605,1117],{"class":53},[39,67607,67608],{"class":237},"\"http:\u002F\u002Fwww.itcast.cn\"",[39,67610,52282],{"class":53},[39,67612,67613,67615,67617,67619,67621,67624,67627,67629,67632],{"class":41,"line":112},[39,67614,52316],{"class":53},[39,67616,54796],{"class":52275},[39,67618,54799],{"class":49},[39,67620,1117],{"class":53},[39,67622,67623],{"class":237},"\"submit\"",[39,67625,67626],{"class":49}," value",[39,67628,1117],{"class":53},[39,67630,67631],{"class":237},"\"免费注册\"",[39,67633,52282],{"class":53},[39,67635,67636,67638,67640],{"class":41,"line":118},[39,67637,52316],{"class":53},[39,67639,52788],{"class":52275},[39,67641,52282],{"class":53},[39,67643,67644],{"class":41,"line":125},[39,67645,67646],{"class":53},"      const form = document.querySelector('form')\n",[39,67648,67649],{"class":41,"line":132},[39,67650,67651],{"class":53},"      form.addEventListener('submit', function (e) {\n",[39,67653,67654],{"class":41,"line":138},[39,67655,67656],{"class":53},"        e.preventDefault()\n",[39,67658,67659],{"class":41,"line":169},[39,67660,65790],{"class":53},[39,67662,67663,67665,67667],{"class":41,"line":190},[39,67664,52751],{"class":53},[39,67666,52788],{"class":52275},[39,67668,52282],{"class":53},[39,67670,67671,67673,67675],{"class":41,"line":202},[39,67672,53392],{"class":53},[39,67674,67600],{"class":52275},[39,67676,52282],{"class":53},[39,67678,67679,67681,67683],{"class":41,"line":207},[39,67680,52760],{"class":53},[39,67682,52775],{"class":52275},[39,67684,52282],{"class":53},[19,67686,67687],{},"点击不在跳转！！！",[476,67689,67691],{"id":67690},"_332-事件委托","3.3.2 事件委托",[19,67693,67694],{},[2585,67695],{"alt":35,"src":67696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[30,67698,67700],{"className":51608,"code":67699,"language":51610,"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",[26,67701,67702,67712,67726,67730,67738,67752,67772,67784,67792,67796,67804,67812,67824,67836,67848,67860,67872,67885,67893,67901,67906,67925,67946,67951,67956,67961,67966,67975,67979,67989,67993,67998,68003,68017,68027,68031,68035,68043,68051,68055],{"__ignoreMap":35},[39,67703,67704,67706,67708,67710],{"class":41,"line":42},[39,67705,52272],{"class":53},[39,67707,52276],{"class":52275},[39,67709,52279],{"class":49},[39,67711,52282],{"class":53},[39,67713,67714,67716,67718,67720,67722,67724],{"class":41,"line":92},[39,67715,2170],{"class":53},[39,67717,51610],{"class":52275},[39,67719,52291],{"class":49},[39,67721,1117],{"class":53},[39,67723,52296],{"class":237},[39,67725,52282],{"class":53},[39,67727,67728],{"class":41,"line":112},[39,67729,122],{"emptyLinePlaceholder":121},[39,67731,67732,67734,67736],{"class":41,"line":118},[39,67733,2170],{"class":53},[39,67735,52309],{"class":52275},[39,67737,52282],{"class":53},[39,67739,67740,67742,67744,67746,67748,67750],{"class":41,"line":125},[39,67741,53119],{"class":53},[39,67743,52319],{"class":52275},[39,67745,52322],{"class":49},[39,67747,1117],{"class":53},[39,67749,52327],{"class":237},[39,67751,52282],{"class":53},[39,67753,67754,67756,67758,67760,67762,67764,67766,67768,67770],{"class":41,"line":132},[39,67755,53119],{"class":53},[39,67757,52319],{"class":52275},[39,67759,15893],{"class":49},[39,67761,1117],{"class":53},[39,67763,52366],{"class":237},[39,67765,52346],{"class":49},[39,67767,1117],{"class":53},[39,67769,52373],{"class":237},[39,67771,52282],{"class":53},[39,67773,67774,67776,67778,67780,67782],{"class":41,"line":138},[39,67775,53119],{"class":53},[39,67777,52382],{"class":52275},[39,67779,52385],{"class":53},[39,67781,52382],{"class":52275},[39,67783,52282],{"class":53},[39,67785,67786,67788,67790],{"class":41,"line":169},[39,67787,52760],{"class":53},[39,67789,52309],{"class":52275},[39,67791,52282],{"class":53},[39,67793,67794],{"class":41,"line":190},[39,67795,122],{"emptyLinePlaceholder":121},[39,67797,67798,67800,67802],{"class":41,"line":202},[39,67799,2170],{"class":53},[39,67801,52775],{"class":52275},[39,67803,52282],{"class":53},[39,67805,67806,67808,67810],{"class":41,"line":207},[39,67807,53119],{"class":53},[39,67809,489],{"class":52275},[39,67811,52282],{"class":53},[39,67813,67814,67816,67818,67820,67822],{"class":41,"line":212},[39,67815,52316],{"class":53},[39,67817,331],{"class":52275},[39,67819,54941],{"class":53},[39,67821,331],{"class":52275},[39,67823,52282],{"class":53},[39,67825,67826,67828,67830,67832,67834],{"class":41,"line":223},[39,67827,52316],{"class":53},[39,67829,331],{"class":52275},[39,67831,54960],{"class":53},[39,67833,331],{"class":52275},[39,67835,52282],{"class":53},[39,67837,67838,67840,67842,67844,67846],{"class":41,"line":228},[39,67839,52316],{"class":53},[39,67841,331],{"class":52275},[39,67843,54979],{"class":53},[39,67845,331],{"class":52275},[39,67847,52282],{"class":53},[39,67849,67850,67852,67854,67856,67858],{"class":41,"line":263},[39,67851,52316],{"class":53},[39,67853,331],{"class":52275},[39,67855,54998],{"class":53},[39,67857,331],{"class":52275},[39,67859,52282],{"class":53},[39,67861,67862,67864,67866,67868,67870],{"class":41,"line":287},[39,67863,52316],{"class":53},[39,67865,331],{"class":52275},[39,67867,55017],{"class":53},[39,67869,331],{"class":52275},[39,67871,52282],{"class":53},[39,67873,67874,67876,67878,67881,67883],{"class":41,"line":292},[39,67875,52316],{"class":53},[39,67877,19],{"class":52275},[39,67879,67880],{"class":53},">我不需要变色\u003C\u002F",[39,67882,19],{"class":52275},[39,67884,52282],{"class":53},[39,67886,67887,67889,67891],{"class":41,"line":305},[39,67888,53392],{"class":53},[39,67890,489],{"class":52275},[39,67892,52282],{"class":53},[39,67894,67895,67897,67899],{"class":41,"line":310},[39,67896,53119],{"class":53},[39,67898,52788],{"class":52275},[39,67900,52282],{"class":53},[39,67902,67903],{"class":41,"line":321},[39,67904,67905],{"class":128},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[39,67907,67908,67910,67912,67914,67916,67918,67920,67923],{"class":41,"line":713},[39,67909,12283],{"class":45},[39,67911,62267],{"class":74},[39,67913,71],{"class":45},[39,67915,55371],{"class":53},[39,67917,55374],{"class":49},[39,67919,54],{"class":53},[39,67921,67922],{"class":237},"'ul'",[39,67924,574],{"class":53},[39,67926,67927,67930,67932,67934,67936,67938,67940,67942,67944],{"class":41,"line":718},[39,67928,67929],{"class":53},"    ul.",[39,67931,58788],{"class":49},[39,67933,54],{"class":53},[39,67935,58793],{"class":237},[39,67937,63],{"class":53},[39,67939,55424],{"class":45},[39,67941,2772],{"class":53},[39,67943,1342],{"class":59},[39,67945,89],{"class":53},[39,67947,67948],{"class":41,"line":723},[39,67949,67950],{"class":128},"      \u002F\u002F alert(1)\n",[39,67952,67953],{"class":41,"line":729},[39,67954,67955],{"class":128},"      \u002F\u002F e.target就是我们点击的对象\n",[39,67957,67958],{"class":41,"line":735},[39,67959,67960],{"class":128},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[39,67962,67963],{"class":41,"line":741},[39,67964,67965],{"class":128},"      \u002F\u002F e.target.style.color = 'red'\n",[39,67967,67968,67970,67972],{"class":41,"line":747},[39,67969,59219],{"class":53},[39,67971,59222],{"class":49},[39,67973,67974],{"class":53},"(e)\n",[39,67976,67977],{"class":41,"line":753},[39,67978,122],{"emptyLinePlaceholder":121},[39,67980,67981,67983,67986],{"class":41,"line":758},[39,67982,59219],{"class":53},[39,67984,67985],{"class":49},"dir",[39,67987,67988],{"class":53},"(e.target)\n",[39,67990,67991],{"class":41,"line":763},[39,67992,122],{"emptyLinePlaceholder":121},[39,67994,67995],{"class":41,"line":772},[39,67996,67997],{"class":128},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[39,67999,68000],{"class":41,"line":777},[39,68001,68002],{"class":128},"      \u002F\u002F 通过tagName来进行判断\n",[39,68004,68005,68007,68010,68012,68015],{"class":41,"line":785},[39,68006,55455],{"class":45},[39,68008,68009],{"class":53}," (e.target.tagName ",[39,68011,55461],{"class":45},[39,68013,68014],{"class":237}," 'LI'",[39,68016,89],{"class":53},[39,68018,68019,68022,68024],{"class":41,"line":796},[39,68020,68021],{"class":53},"        e.target.style.color ",[39,68023,1117],{"class":45},[39,68025,68026],{"class":237}," 'red'\n",[39,68028,68029],{"class":41,"line":808},[39,68030,53373],{"class":53},[39,68032,68033],{"class":41,"line":823},[39,68034,34436],{"class":53},[39,68036,68037,68039,68041],{"class":41,"line":839},[39,68038,53392],{"class":53},[39,68040,52788],{"class":52275},[39,68042,52282],{"class":53},[39,68044,68045,68047,68049],{"class":41,"line":845},[39,68046,52760],{"class":53},[39,68048,52775],{"class":52275},[39,68050,52282],{"class":53},[39,68052,68053],{"class":41,"line":856},[39,68054,122],{"emptyLinePlaceholder":121},[39,68056,68057,68059,68061],{"class":41,"line":861},[39,68058,52760],{"class":53},[39,68060,51610],{"class":52275},[39,68062,52282],{"class":53},[19,68064,68065],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68067,68068],{},"if(e.target.ragName==='P') {}",[19,68070,68071],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68073,68074],{},"通过事件委托的方式实现tab栏切换改造：",[19,68076,68077],{},"一定要记住自定义属性！！！！！！",[19,68079,68080],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68082,68083],{},"id是自定义的属性名",[19,68085,68086],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[30,68088,68090],{"className":51608,"code":68089,"language":51610,"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",[26,68091,68092,68102,68116,68120,68128,68142,68162,68182,68194,68202,68208,68218,68228,68232,68236,68242,68254,68266,68278,68294,68298,68302,68308,68320,68332,68344,68354,68364,68368,68372,68380,68392,68402,68414,68418,68422,68430,68440,68450,68460,68464,68468,68478,68492,68504,68508,68512,68524,68534,68550,68560,68564,68568,68582,68592,68602,68606,68610,68616,68630,68634,68638,68646,68656,68660,68664,68673,68683,68687,68695,68703,68707,68715,68729,68743,68755,68763,68802,68834,68866,68898,68930,68938,68946,68960,68994,69028,69062,69096,69130,69138,69146,69154,69159,69164,69183,69188,69208,69216,69221,69234,69255,69268,69272,69277,69282,69295,69315,69343,69347,69351,69355,69363,69371,69375],{"__ignoreMap":35},[39,68093,68094,68096,68098,68100],{"class":41,"line":42},[39,68095,52272],{"class":53},[39,68097,52276],{"class":52275},[39,68099,52279],{"class":49},[39,68101,52282],{"class":53},[39,68103,68104,68106,68108,68110,68112,68114],{"class":41,"line":92},[39,68105,2170],{"class":53},[39,68107,51610],{"class":52275},[39,68109,52291],{"class":49},[39,68111,1117],{"class":53},[39,68113,52296],{"class":237},[39,68115,52282],{"class":53},[39,68117,68118],{"class":41,"line":112},[39,68119,122],{"emptyLinePlaceholder":121},[39,68121,68122,68124,68126],{"class":41,"line":118},[39,68123,2170],{"class":53},[39,68125,52309],{"class":52275},[39,68127,52282],{"class":53},[39,68129,68130,68132,68134,68136,68138,68140],{"class":41,"line":125},[39,68131,53119],{"class":53},[39,68133,52319],{"class":52275},[39,68135,52322],{"class":49},[39,68137,1117],{"class":53},[39,68139,52327],{"class":237},[39,68141,60102],{"class":53},[39,68143,68144,68146,68148,68150,68152,68154,68156,68158,68160],{"class":41,"line":132},[39,68145,53119],{"class":53},[39,68147,52319],{"class":52275},[39,68149,52338],{"class":49},[39,68151,1117],{"class":53},[39,68153,52343],{"class":237},[39,68155,52346],{"class":49},[39,68157,1117],{"class":53},[39,68159,52351],{"class":237},[39,68161,60102],{"class":53},[39,68163,68164,68166,68168,68170,68172,68174,68176,68178,68180],{"class":41,"line":138},[39,68165,53119],{"class":53},[39,68167,52319],{"class":52275},[39,68169,15893],{"class":49},[39,68171,1117],{"class":53},[39,68173,52366],{"class":237},[39,68175,52346],{"class":49},[39,68177,1117],{"class":53},[39,68179,52373],{"class":237},[39,68181,60102],{"class":53},[39,68183,68184,68186,68188,68190,68192],{"class":41,"line":169},[39,68185,53119],{"class":53},[39,68187,52382],{"class":52275},[39,68189,64600],{"class":53},[39,68191,52382],{"class":52275},[39,68193,52282],{"class":53},[39,68195,68196,68198,68200],{"class":41,"line":190},[39,68197,53119],{"class":53},[39,68199,1192],{"class":52275},[39,68201,52282],{"class":53},[39,68203,68204,68206],{"class":41,"line":202},[39,68205,7479],{"class":52275},[39,68207,16545],{"class":53},[39,68209,68210,68212,68214,68216],{"class":41,"line":207},[39,68211,55681],{"class":74},[39,68213,52412],{"class":53},[39,68215,1457],{"class":74},[39,68217,318],{"class":53},[39,68219,68220,68222,68224,68226],{"class":41,"line":212},[39,68221,55670],{"class":74},[39,68223,52412],{"class":53},[39,68225,1457],{"class":74},[39,68227,318],{"class":53},[39,68229,68230],{"class":41,"line":223},[39,68231,3284],{"class":53},[39,68233,68234],{"class":41,"line":228},[39,68235,122],{"emptyLinePlaceholder":121},[39,68237,68238,68240],{"class":41,"line":263},[39,68239,64651],{"class":49},[39,68241,16545],{"class":53},[39,68243,68244,68246,68248,68250,68252],{"class":41,"line":287},[39,68245,55746],{"class":74},[39,68247,52412],{"class":53},[39,68249,64662],{"class":74},[39,68251,52467],{"class":45},[39,68253,318],{"class":53},[39,68255,68256,68258,68260,68262,68264],{"class":41,"line":292},[39,68257,55760],{"class":74},[39,68259,52412],{"class":53},[39,68261,64675],{"class":74},[39,68263,52467],{"class":45},[39,68265,318],{"class":53},[39,68267,68268,68270,68272,68274,68276],{"class":41,"line":305},[39,68269,55681],{"class":74},[39,68271,52412],{"class":53},[39,68273,248],{"class":74},[39,68275,52467],{"class":45},[39,68277,318],{"class":53},[39,68279,68280,68282,68284,68286,68288,68290,68292],{"class":41,"line":310},[39,68281,62952],{"class":74},[39,68283,52412],{"class":53},[39,68285,1483],{"class":74},[39,68287,52467],{"class":45},[39,68289,52496],{"class":74},[39,68291,63219],{"class":74},[39,68293,318],{"class":53},[39,68295,68296],{"class":41,"line":321},[39,68297,3284],{"class":53},[39,68299,68300],{"class":41,"line":713},[39,68301,122],{"emptyLinePlaceholder":121},[39,68303,68304,68306],{"class":41,"line":718},[39,68305,64720],{"class":49},[39,68307,16545],{"class":53},[39,68309,68310,68312,68314,68316,68318],{"class":41,"line":723},[39,68311,55746],{"class":74},[39,68313,52412],{"class":53},[39,68315,278],{"class":74},[39,68317,1592],{"class":45},[39,68319,318],{"class":53},[39,68321,68322,68324,68326,68328,68330],{"class":41,"line":729},[39,68323,55760],{"class":74},[39,68325,52412],{"class":53},[39,68327,2167],{"class":74},[39,68329,52467],{"class":45},[39,68331,318],{"class":53},[39,68333,68334,68336,68338,68340,68342],{"class":41,"line":735},[39,68335,58334],{"class":74},[39,68337,52412],{"class":53},[39,68339,2167],{"class":74},[39,68341,52467],{"class":45},[39,68343,318],{"class":53},[39,68345,68346,68348,68350,68352],{"class":41,"line":741},[39,68347,55984],{"class":74},[39,68349,52412],{"class":53},[39,68351,52452],{"class":74},[39,68353,318],{"class":53},[39,68355,68356,68358,68360,68362],{"class":41,"line":747},[39,68357,55995],{"class":74},[39,68359,52412],{"class":53},[39,68361,52643],{"class":74},[39,68363,318],{"class":53},[39,68365,68366],{"class":41,"line":753},[39,68367,3284],{"class":53},[39,68369,68370],{"class":41,"line":758},[39,68371,122],{"emptyLinePlaceholder":121},[39,68373,68374,68376,68378],{"class":41,"line":763},[39,68375,64720],{"class":49},[39,68377,64793],{"class":52275},[39,68379,16545],{"class":53},[39,68381,68382,68384,68386,68388,68390],{"class":41,"line":772},[39,68383,55897],{"class":74},[39,68385,52412],{"class":53},[39,68387,2060],{"class":74},[39,68389,52467],{"class":45},[39,68391,318],{"class":53},[39,68393,68394,68396,68398,68400],{"class":41,"line":777},[39,68395,63309],{"class":74},[39,68397,52412],{"class":53},[39,68399,64816],{"class":74},[39,68401,318],{"class":53},[39,68403,68404,68406,68408,68410,68412],{"class":41,"line":785},[39,68405,62975],{"class":74},[39,68407,52412],{"class":53},[39,68409,248],{"class":74},[39,68411,52467],{"class":45},[39,68413,318],{"class":53},[39,68415,68416],{"class":41,"line":796},[39,68417,3284],{"class":53},[39,68419,68420],{"class":41,"line":808},[39,68421,122],{"emptyLinePlaceholder":121},[39,68423,68424,68426,68428],{"class":41,"line":823},[39,68425,64720],{"class":49},[39,68427,62267],{"class":52275},[39,68429,16545],{"class":53},[39,68431,68432,68434,68436,68438],{"class":41,"line":839},[39,68433,55707],{"class":74},[39,68435,52412],{"class":53},[39,68437,55712],{"class":74},[39,68439,318],{"class":53},[39,68441,68442,68444,68446,68448],{"class":41,"line":845},[39,68443,55984],{"class":74},[39,68445,52412],{"class":53},[39,68447,52452],{"class":74},[39,68449,318],{"class":53},[39,68451,68452,68454,68456,68458],{"class":41,"line":856},[39,68453,55995],{"class":74},[39,68455,52412],{"class":53},[39,68457,52555],{"class":74},[39,68459,318],{"class":53},[39,68461,68462],{"class":41,"line":861},[39,68463,3284],{"class":53},[39,68465,68466],{"class":41,"line":870},[39,68467,122],{"emptyLinePlaceholder":121},[39,68469,68470,68472,68474,68476],{"class":41,"line":9084},[39,68471,64720],{"class":49},[39,68473,62267],{"class":52275},[39,68475,56050],{"class":52275},[39,68477,16545],{"class":53},[39,68479,68480,68482,68484,68486,68488,68490],{"class":41,"line":9090},[39,68481,55681],{"class":74},[39,68483,52412],{"class":53},[39,68485,1457],{"class":74},[39,68487,10018],{"class":74},[39,68489,52467],{"class":45},[39,68491,318],{"class":53},[39,68493,68494,68496,68498,68500,68502],{"class":41,"line":9102},[39,68495,55897],{"class":74},[39,68497,52412],{"class":53},[39,68499,1810],{"class":74},[39,68501,52467],{"class":45},[39,68503,318],{"class":53},[39,68505,68506],{"class":41,"line":9114},[39,68507,3284],{"class":53},[39,68509,68510],{"class":41,"line":9126},[39,68511,122],{"emptyLinePlaceholder":121},[39,68513,68514,68516,68518,68520,68522],{"class":41,"line":10784},[39,68515,64720],{"class":49},[39,68517,62267],{"class":52275},[39,68519,56050],{"class":52275},[39,68521,60],{"class":52275},[39,68523,16545],{"class":53},[39,68525,68526,68528,68530,68532],{"class":41,"line":10809},[39,68527,64945],{"class":74},[39,68529,52412],{"class":53},[39,68531,55712],{"class":74},[39,68533,318],{"class":53},[39,68535,68536,68538,68540,68542,68544,68546,68548],{"class":41,"line":10832},[39,68537,63207],{"class":74},[39,68539,52412],{"class":53},[39,68541,1345],{"class":74},[39,68543,52467],{"class":45},[39,68545,52496],{"class":74},[39,68547,64966],{"class":74},[39,68549,318],{"class":53},[39,68551,68552,68554,68556,68558],{"class":41,"line":10856},[39,68553,58391],{"class":74},[39,68555,52412],{"class":53},[39,68557,63344],{"class":74},[39,68559,318],{"class":53},[39,68561,68562],{"class":41,"line":10861},[39,68563,3284],{"class":53},[39,68565,68566],{"class":41,"line":10866},[39,68567,122],{"emptyLinePlaceholder":121},[39,68569,68570,68572,68574,68576,68578,68580],{"class":41,"line":10871},[39,68571,64720],{"class":49},[39,68573,62267],{"class":52275},[39,68575,56050],{"class":52275},[39,68577,60],{"class":52275},[39,68579,64999],{"class":49},[39,68581,16545],{"class":53},[39,68583,68584,68586,68588,68590],{"class":41,"line":10880},[39,68585,62766],{"class":74},[39,68587,52412],{"class":53},[39,68589,65010],{"class":74},[39,68591,318],{"class":53},[39,68593,68594,68596,68598,68600],{"class":41,"line":10885},[39,68595,58391],{"class":74},[39,68597,52412],{"class":53},[39,68599,65010],{"class":74},[39,68601,318],{"class":53},[39,68603,68604],{"class":41,"line":10891},[39,68605,3284],{"class":53},[39,68607,68608],{"class":41,"line":10912},[39,68609,122],{"emptyLinePlaceholder":121},[39,68611,68612,68614],{"class":41,"line":10918},[39,68613,65035],{"class":49},[39,68615,16545],{"class":53},[39,68617,68618,68620,68622,68624,68626,68628],{"class":41,"line":10932},[39,68619,55670],{"class":74},[39,68621,52412],{"class":53},[39,68623,1457],{"class":74},[39,68625,65048],{"class":74},[39,68627,52467],{"class":45},[39,68629,318],{"class":53},[39,68631,68632],{"class":41,"line":10938},[39,68633,3284],{"class":53},[39,68635,68636],{"class":41,"line":10965},[39,68637,122],{"emptyLinePlaceholder":121},[39,68639,68640,68642,68644],{"class":41,"line":10974},[39,68641,65035],{"class":49},[39,68643,63149],{"class":49},[39,68645,16545],{"class":53},[39,68647,68648,68650,68652,68654],{"class":41,"line":10980},[39,68649,55984],{"class":74},[39,68651,52412],{"class":53},[39,68653,55712],{"class":74},[39,68655,318],{"class":53},[39,68657,68658],{"class":41,"line":10988},[39,68659,3284],{"class":53},[39,68661,68662],{"class":41,"line":10993},[39,68663,122],{"emptyLinePlaceholder":121},[39,68665,68666,68668,68671],{"class":41,"line":17577},[39,68667,65035],{"class":49},[39,68669,68670],{"class":49}," .active",[39,68672,16545],{"class":53},[39,68674,68675,68677,68679,68681],{"class":41,"line":17583},[39,68676,55984],{"class":74},[39,68678,52412],{"class":53},[39,68680,61844],{"class":74},[39,68682,318],{"class":53},[39,68684,68685],{"class":41,"line":17606},[39,68686,3284],{"class":53},[39,68688,68689,68691,68693],{"class":41,"line":17612},[39,68690,53392],{"class":53},[39,68692,1192],{"class":52275},[39,68694,52282],{"class":53},[39,68696,68697,68699,68701],{"class":41,"line":17635},[39,68698,52760],{"class":53},[39,68700,52309],{"class":52275},[39,68702,52282],{"class":53},[39,68704,68705],{"class":41,"line":17649},[39,68706,122],{"emptyLinePlaceholder":121},[39,68708,68709,68711,68713],{"class":41,"line":17669},[39,68710,2170],{"class":53},[39,68712,52775],{"class":52275},[39,68714,52282],{"class":53},[39,68716,68717,68719,68721,68723,68725,68727],{"class":41,"line":17675},[39,68718,53119],{"class":53},[39,68720,52586],{"class":52275},[39,68722,54461],{"class":49},[39,68724,1117],{"class":53},[39,68726,65150],{"class":237},[39,68728,52282],{"class":53},[39,68730,68731,68733,68735,68737,68739,68741],{"class":41,"line":17686},[39,68732,52316],{"class":53},[39,68734,52586],{"class":52275},[39,68736,54461],{"class":49},[39,68738,1117],{"class":53},[39,68740,65165],{"class":237},[39,68742,52282],{"class":53},[39,68744,68745,68747,68749,68751,68753],{"class":41,"line":17709},[39,68746,56209],{"class":53},[39,68748,476],{"class":52275},[39,68750,65176],{"class":53},[39,68752,476],{"class":52275},[39,68754,52282],{"class":53},[39,68756,68757,68759,68761],{"class":41,"line":17731},[39,68758,56209],{"class":53},[39,68760,489],{"class":52275},[39,68762,52282],{"class":53},[39,68764,68765,68767,68769,68771,68773,68775,68777,68779,68781,68783,68785,68787,68789,68792,68794,68796,68798,68800],{"class":41,"line":17736},[39,68766,56277],{"class":53},[39,68768,331],{"class":52275},[39,68770,62027],{"class":53},[39,68772,922],{"class":52275},[39,68774,54461],{"class":49},[39,68776,1117],{"class":53},[39,68778,60681],{"class":237},[39,68780,62032],{"class":49},[39,68782,1117],{"class":53},[39,68784,65211],{"class":237},[39,68786,54926],{"class":49},[39,68788,1117],{"class":53},[39,68790,68791],{"class":237},"\"0\"",[39,68793,65214],{"class":53},[39,68795,922],{"class":52275},[39,68797,56289],{"class":53},[39,68799,331],{"class":52275},[39,68801,52282],{"class":53},[39,68803,68804,68806,68808,68810,68812,68814,68816,68818,68820,68822,68824,68826,68828,68830,68832],{"class":41,"line":17742},[39,68805,56277],{"class":53},[39,68807,331],{"class":52275},[39,68809,62027],{"class":53},[39,68811,922],{"class":52275},[39,68813,62032],{"class":49},[39,68815,1117],{"class":53},[39,68817,65211],{"class":237},[39,68819,54926],{"class":49},[39,68821,1117],{"class":53},[39,68823,4761],{"class":237},[39,68825,65241],{"class":53},[39,68827,922],{"class":52275},[39,68829,56289],{"class":53},[39,68831,331],{"class":52275},[39,68833,52282],{"class":53},[39,68835,68836,68838,68840,68842,68844,68846,68848,68850,68852,68854,68856,68858,68860,68862,68864],{"class":41,"line":17756},[39,68837,56277],{"class":53},[39,68839,331],{"class":52275},[39,68841,62027],{"class":53},[39,68843,922],{"class":52275},[39,68845,62032],{"class":49},[39,68847,1117],{"class":53},[39,68849,65211],{"class":237},[39,68851,54926],{"class":49},[39,68853,1117],{"class":53},[39,68855,4784],{"class":237},[39,68857,65268],{"class":53},[39,68859,922],{"class":52275},[39,68861,56289],{"class":53},[39,68863,331],{"class":52275},[39,68865,52282],{"class":53},[39,68867,68868,68870,68872,68874,68876,68878,68880,68882,68884,68886,68888,68890,68892,68894,68896],{"class":41,"line":17769},[39,68869,56277],{"class":53},[39,68871,331],{"class":52275},[39,68873,62027],{"class":53},[39,68875,922],{"class":52275},[39,68877,62032],{"class":49},[39,68879,1117],{"class":53},[39,68881,65211],{"class":237},[39,68883,54926],{"class":49},[39,68885,1117],{"class":53},[39,68887,4797],{"class":237},[39,68889,65295],{"class":53},[39,68891,922],{"class":52275},[39,68893,56289],{"class":53},[39,68895,331],{"class":52275},[39,68897,52282],{"class":53},[39,68899,68900,68902,68904,68906,68908,68910,68912,68914,68916,68918,68920,68922,68924,68926,68928],{"class":41,"line":17774},[39,68901,56277],{"class":53},[39,68903,331],{"class":52275},[39,68905,62027],{"class":53},[39,68907,922],{"class":52275},[39,68909,62032],{"class":49},[39,68911,1117],{"class":53},[39,68913,65211],{"class":237},[39,68915,54926],{"class":49},[39,68917,1117],{"class":53},[39,68919,4810],{"class":237},[39,68921,65322],{"class":53},[39,68923,922],{"class":52275},[39,68925,56289],{"class":53},[39,68927,331],{"class":52275},[39,68929,52282],{"class":53},[39,68931,68932,68934,68936],{"class":41,"line":17788},[39,68933,56382],{"class":53},[39,68935,489],{"class":52275},[39,68937,52282],{"class":53},[39,68939,68940,68942,68944],{"class":41,"line":17793},[39,68941,52751],{"class":53},[39,68943,52586],{"class":52275},[39,68945,52282],{"class":53},[39,68947,68948,68950,68952,68954,68956,68958],{"class":41,"line":17799},[39,68949,52316],{"class":53},[39,68951,52586],{"class":52275},[39,68953,54461],{"class":49},[39,68955,1117],{"class":53},[39,68957,65359],{"class":237},[39,68959,52282],{"class":53},[39,68961,68962,68964,68966,68968,68970,68972,68974,68976,68978,68980,68982,68984,68986,68988,68990,68992],{"class":41,"line":17804},[39,68963,56209],{"class":53},[39,68965,52586],{"class":52275},[39,68967,54461],{"class":49},[39,68969,1117],{"class":53},[39,68971,65374],{"class":237},[39,68973,62027],{"class":53},[39,68975,2585],{"class":52275},[39,68977,56214],{"class":49},[39,68979,1117],{"class":53},[39,68981,65385],{"class":237},[39,68983,56222],{"class":49},[39,68985,1117],{"class":53},[39,68987,8726],{"class":237},[39,68989,65394],{"class":53},[39,68991,52586],{"class":52275},[39,68993,52282],{"class":53},[39,68995,68996,68998,69000,69002,69004,69006,69008,69010,69012,69014,69016,69018,69020,69022,69024,69026],{"class":41,"line":17818},[39,68997,56209],{"class":53},[39,68999,52586],{"class":52275},[39,69001,54461],{"class":49},[39,69003,1117],{"class":53},[39,69005,63598],{"class":237},[39,69007,62027],{"class":53},[39,69009,2585],{"class":52275},[39,69011,56214],{"class":49},[39,69013,1117],{"class":53},[39,69015,65421],{"class":237},[39,69017,56222],{"class":49},[39,69019,1117],{"class":53},[39,69021,8726],{"class":237},[39,69023,65394],{"class":53},[39,69025,52586],{"class":52275},[39,69027,52282],{"class":53},[39,69029,69030,69032,69034,69036,69038,69040,69042,69044,69046,69048,69050,69052,69054,69056,69058,69060],{"class":41,"line":17823},[39,69031,56209],{"class":53},[39,69033,52586],{"class":52275},[39,69035,54461],{"class":49},[39,69037,1117],{"class":53},[39,69039,63598],{"class":237},[39,69041,62027],{"class":53},[39,69043,2585],{"class":52275},[39,69045,56214],{"class":49},[39,69047,1117],{"class":53},[39,69049,65456],{"class":237},[39,69051,56222],{"class":49},[39,69053,1117],{"class":53},[39,69055,8726],{"class":237},[39,69057,65394],{"class":53},[39,69059,52586],{"class":52275},[39,69061,52282],{"class":53},[39,69063,69064,69066,69068,69070,69072,69074,69076,69078,69080,69082,69084,69086,69088,69090,69092,69094],{"class":41,"line":17828},[39,69065,56209],{"class":53},[39,69067,52586],{"class":52275},[39,69069,54461],{"class":49},[39,69071,1117],{"class":53},[39,69073,63598],{"class":237},[39,69075,62027],{"class":53},[39,69077,2585],{"class":52275},[39,69079,56214],{"class":49},[39,69081,1117],{"class":53},[39,69083,65491],{"class":237},[39,69085,56222],{"class":49},[39,69087,1117],{"class":53},[39,69089,8726],{"class":237},[39,69091,65394],{"class":53},[39,69093,52586],{"class":52275},[39,69095,52282],{"class":53},[39,69097,69098,69100,69102,69104,69106,69108,69110,69112,69114,69116,69118,69120,69122,69124,69126,69128],{"class":41,"line":17842},[39,69099,56209],{"class":53},[39,69101,52586],{"class":52275},[39,69103,54461],{"class":49},[39,69105,1117],{"class":53},[39,69107,63598],{"class":237},[39,69109,62027],{"class":53},[39,69111,2585],{"class":52275},[39,69113,56214],{"class":49},[39,69115,1117],{"class":53},[39,69117,65526],{"class":237},[39,69119,56222],{"class":49},[39,69121,1117],{"class":53},[39,69123,8726],{"class":237},[39,69125,65394],{"class":53},[39,69127,52586],{"class":52275},[39,69129,52282],{"class":53},[39,69131,69132,69134,69136],{"class":41,"line":17854},[39,69133,52751],{"class":53},[39,69135,52586],{"class":52275},[39,69137,52282],{"class":53},[39,69139,69140,69142,69144],{"class":41,"line":17859},[39,69141,53392],{"class":53},[39,69143,52586],{"class":52275},[39,69145,52282],{"class":53},[39,69147,69148,69150,69152],{"class":41,"line":17872},[39,69149,53119],{"class":53},[39,69151,52788],{"class":52275},[39,69153,52282],{"class":53},[39,69155,69156],{"class":41,"line":17877},[39,69157,69158],{"class":128},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[39,69160,69161],{"class":41,"line":17882},[39,69162,69163],{"class":128},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[39,69165,69166,69168,69170,69172,69174,69176,69178,69181],{"class":41,"line":17887},[39,69167,12283],{"class":45},[39,69169,62267],{"class":74},[39,69171,71],{"class":45},[39,69173,55371],{"class":53},[39,69175,55374],{"class":49},[39,69177,54],{"class":53},[39,69179,69180],{"class":237},"'.tab-nav ul'",[39,69182,574],{"class":53},[39,69184,69185],{"class":41,"line":17900},[39,69186,69187],{"class":128},"    \u002F\u002F 2.添加事件\n",[39,69189,69190,69192,69194,69196,69198,69200,69202,69204,69206],{"class":41,"line":17905},[39,69191,67929],{"class":53},[39,69193,58788],{"class":49},[39,69195,54],{"class":53},[39,69197,58793],{"class":237},[39,69199,63],{"class":53},[39,69201,55424],{"class":45},[39,69203,2772],{"class":53},[39,69205,1342],{"class":59},[39,69207,89],{"class":53},[39,69209,69210,69212,69214],{"class":41,"line":33608},[39,69211,59219],{"class":53},[39,69213,67985],{"class":49},[39,69215,67988],{"class":53},[39,69217,69218],{"class":41,"line":33614},[39,69219,69220],{"class":128},"      \u002F\u002Fe.targer是我们点击的对象\n",[39,69222,69223,69225,69227,69229,69232],{"class":41,"line":33620},[39,69224,55455],{"class":45},[39,69226,68009],{"class":53},[39,69228,55461],{"class":45},[39,69230,69231],{"class":237}," 'A'",[39,69233,89],{"class":53},[39,69235,69236,69238,69240,69242,69245,69247,69249,69251,69253],{"class":41,"line":33626},[39,69237,52900],{"class":53},[39,69239,55374],{"class":49},[39,69241,54],{"class":53},[39,69243,69244],{"class":237},"'.active'",[39,69246,57978],{"class":53},[39,69248,57981],{"class":49},[39,69250,54],{"class":53},[39,69252,65689],{"class":237},[39,69254,574],{"class":53},[39,69256,69257,69260,69262,69264,69266],{"class":41,"line":33632},[39,69258,69259],{"class":53},"        e.target.classList.",[39,69261,6413],{"class":49},[39,69263,54],{"class":53},[39,69265,65689],{"class":237},[39,69267,574],{"class":53},[39,69269,69270],{"class":41,"line":33643},[39,69271,122],{"emptyLinePlaceholder":121},[39,69273,69274],{"class":41,"line":33649},[39,69275,69276],{"class":128},"        \u002F\u002F 下面大盒子模块\n",[39,69278,69279],{"class":41,"line":33669},[39,69280,69281],{"class":128},"        \u002F\u002F console.log(e.target.dataset.id)\n",[39,69283,69284,69286,69288,69290,69292],{"class":41,"line":33675},[39,69285,62245],{"class":45},[39,69287,4115],{"class":74},[39,69289,71],{"class":45},[39,69291,46541],{"class":45},[39,69293,69294],{"class":53},"e.target.dataset.id\n",[39,69296,69297,69299,69301,69303,69305,69307,69309,69311,69313],{"class":41,"line":33686},[39,69298,52900],{"class":53},[39,69300,55374],{"class":49},[39,69302,54],{"class":53},[39,69304,65737],{"class":237},[39,69306,57978],{"class":53},[39,69308,57981],{"class":49},[39,69310,54],{"class":53},[39,69312,65689],{"class":237},[39,69314,574],{"class":53},[39,69316,69317,69319,69321,69323,69325,69327,69329,69331,69333,69335,69337,69339,69341],{"class":41,"line":33692},[39,69318,52900],{"class":53},[39,69320,55374],{"class":49},[39,69322,54],{"class":53},[39,69324,65763],{"class":237},[39,69326,1704],{"class":53},[39,69328,46541],{"class":45},[39,69330,26093],{"class":74},[39,69332,58007],{"class":237},[39,69334,57978],{"class":53},[39,69336,6413],{"class":49},[39,69338,54],{"class":53},[39,69340,65689],{"class":237},[39,69342,574],{"class":53},[39,69344,69345],{"class":41,"line":33698},[39,69346,122],{"emptyLinePlaceholder":121},[39,69348,69349],{"class":41,"line":33704},[39,69350,53373],{"class":53},[39,69352,69353],{"class":41,"line":33710},[39,69354,34436],{"class":53},[39,69356,69357,69359,69361],{"class":41,"line":33716},[39,69358,53392],{"class":53},[39,69360,52788],{"class":52275},[39,69362,52282],{"class":53},[39,69364,69365,69367,69369],{"class":41,"line":33722},[39,69366,52760],{"class":53},[39,69368,52775],{"class":52275},[39,69370,52282],{"class":53},[39,69372,69373],{"class":41,"line":33728},[39,69374,122],{"emptyLinePlaceholder":121},[39,69376,69377,69379,69381],{"class":41,"line":33748},[39,69378,52760],{"class":53},[39,69380,51610],{"class":52275},[39,69382,52282],{"class":53},[476,69384,69386],{"id":69385},"_333-页面加载事件","3.3.3 页面加载事件",[328,69388,69389],{},[331,69390,69391],{},"load",[19,69393,69394],{},[2585,69395],{"alt":35,"src":69396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,69398,69399],{},"window代表整个窗口，比document还要大",[19,69401,69402],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,69404,69405],{},"img.addEventListener('load', function () {",[19,69407,69408],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,69410,53439],{},[328,69412,69413],{"start":92},[331,69414,69415],{},"DOMContentLoaded",[19,69417,69418],{},[2585,69419],{"alt":35,"src":69420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,69422,69423],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[476,69425,69427],{"id":69426},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,69429,69430],{},[2585,69431],{"alt":35,"src":69432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,69434,69435],{},[2585,69436],{"alt":35,"src":69437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,69439,69440],{},[2585,69441],{"alt":35,"src":69442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,69444,69445],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,69447,69448],{},"获得的是数字型数据，不带单位",[19,69450,69451],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,69453,69454],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,69456,69457],{},"它是通过document.documentElement来获取",[19,69459,69460],{},[2585,69461],{"alt":35,"src":69462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,69464,69465],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[476,69467,69469],{"id":69468},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,69471,69472],{},[2585,69473],{"alt":35,"src":69474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,69476,69477],{},[2585,69478],{"alt":35,"src":69479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[476,69481,69483],{"id":69482},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,69485,69486],{},[2585,69487],{"alt":35,"src":69488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,69490,69491],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,69493,69494],{},[2585,69495],{"alt":35,"src":69496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69498,69499],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69501,69502],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69504,69505],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69507,69508],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69510,69511],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69513,69514],{},[2585,69515],{"alt":35,"src":69516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69518,69519],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69521,69522],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69524,69525],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69527,69528],{},"e.pageX-box.getBoundingClientRect()",[476,69530,69532],{"id":69531},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69534,69535],{},[2585,69536],{"alt":35,"src":69537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69539,69540],{},"这个是相对于视口来说的，它是个方法，不是属性值",[476,69542,69544],{"id":69543},"_338-总结","3.3.8 总结",[19,69546,69547],{},[2585,69548],{"alt":35,"src":69549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69551,69552],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69554,69555],{},"修改盒子的宽高只能通过width和height来实现",[476,69557,69559],{"id":69558},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[30,69561,69563],{"className":51608,"code":69562,"language":51610,"meta":35,"style":35},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[26,69564,69565,69570,69575,69580,69585],{"__ignoreMap":35},[39,69566,69567],{"class":41,"line":42},[39,69568,69569],{"class":53},"\u002F* 页面滑动 *\u002F\n",[39,69571,69572],{"class":41,"line":92},[39,69573,69574],{"class":53},"html {\n",[39,69576,69577],{"class":41,"line":112},[39,69578,69579],{"class":53},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[39,69581,69582],{"class":41,"line":118},[39,69583,69584],{"class":53},"  scroll-behavior: smooth;\n",[39,69586,69587],{"class":41,"line":125},[39,69588,115],{"class":53},[19,69590,69591],{},"默认是auto",[476,69593,69595],{"id":69594},"_3310-日期对象","3.3.10 日期对象",[22971,69597,69599],{"id":69598},"_33101-实例化","3.3.10.1 实例化",[19,69601,69602],{},[2585,69603],{"alt":35,"src":69604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22971,69606,69608],{"id":69607},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69610,69611],{},[2585,69612],{"alt":35,"src":69613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69615,69616],{},"月份+1",[19,69618,69619],{},"老外认为第一天为0，星期天",[19,69621,69622],{},"方法使用的时候必须要跟括号",[19,69624,69625],{},"快速获得日期",[19,69627,69628],{},"\u002F\u002F 得到年月日",[19,69630,69631],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69633,69634],{},"\u002F\u002F 得到当地日期",[19,69636,69637],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69639,69640],{},"\u002F\u002F 得到当地时间",[19,69642,69643],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,69645,69646],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,69648,69649],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52788,69651,69652],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[19,69654,69655],{},"学会去封装函数！",[22971,69657,69659],{"id":69658},"_33103-时间戳","3.3.10.3 时间戳",[19,69661,69662],{},[2585,69663],{"alt":35,"src":69664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,69666,69667],{},[2585,69668],{"alt":35,"src":69669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,69671,69672],{},"三种方法记住一个就可以",[476,69674,69676],{"id":69675},"_3311-节点操作","3.3.11 节点操作",[22971,69678,69680],{"id":69679},"_33111-dom节点","3.3.11.1 DOM节点",[19,69682,69683],{},[2585,69684],{"alt":35,"src":69685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,69687,69688],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22971,69690,69692],{"id":69691},"_33112-查找节点","3.3.11.2 查找节点",[19,69694,69695],{},"前边的document.querySelector()是获取的元素",[19,69697,69698],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,69700,69701],{},[2585,69702],{"alt":35,"src":69703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[328,69705,69706],{},[331,69707,69708],{},"父节点",[19,69710,69711],{},[2585,69712],{"alt":35,"src":69713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[328,69715,69716],{"start":92},[331,69717,69718],{},"子节点",[19,69720,69721],{},[2585,69722],{"alt":35,"src":69723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69725,69726],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69728,69729],{},"children获得的是伪数组，是亲儿子",[328,69731,69732],{"start":112},[331,69733,69734],{},"兄弟节点",[19,69736,69737],{},[2585,69738],{"alt":35,"src":69739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22971,69741,69743],{"id":69742},"_33113-增加节点","3.3.11.3 增加节点",[19,69745,69746],{},[2585,69747],{"alt":35,"src":69748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,69750,69751],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,69753,69754],{},[2585,69755],{"alt":35,"src":69756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,69758,69759],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,69761,69762],{},"下面是写法的部分展示，就按照下边的格式来写",[19,69764,69765],{},"例：",[52788,69767,69768],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[19,69770,69771],{},[2585,69772],{"alt":35,"src":69773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69775,69776],{},"false只克隆标签，里边的内容不会克隆过来",[30,69778,69780],{"className":51608,"code":69779,"language":51610,"meta":35,"style":35},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[26,69781,69782],{"__ignoreMap":35},[39,69783,69784],{"class":41,"line":42},[39,69785,69779],{"class":53},[22971,69787,69789],{"id":69788},"_33114-删除节点","3.3.11.4 删除节点",[19,69791,69792],{},[2585,69793],{"alt":35,"src":69794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69796,69797],{},"父亲删儿子",[19,69799,69800],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[476,69802,69804],{"id":69803},"_3312-m端事件","3.3.12 M端事件",[19,69806,69807],{},"M端就是移动端",[19,69809,69810],{},[2585,69811],{"alt":35,"src":69812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[476,69814,69816],{"id":69815},"_3313-插件","3.3.13 插件",[19,69818,69819],{},"要熟悉官网！！！",[19,69821,69822],{},[922,69823,69824],{"href":69824,"rel":69825},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24839],[19,69827,69828],{},[922,69829,69830],{"href":69830,"rel":69831},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24839],[476,69833,69835],{"id":69834},"_3314-学生信息表","3.3.14 学生信息表",[328,69837,69838,69841,69844,69847,69850,69853,69856,69859],{},[331,69839,69840],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[331,69842,69843],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[331,69845,69846],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[331,69848,69849],{},"用好表单元素自带的属性，value,name等",[331,69851,69852],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[331,69854,69855],{},"不要忘记事件对象",[331,69857,69858],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[331,69860,69861],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69863,69864],{},"结构：",[30,69866,69868],{"className":51608,"code":69867,"language":51610,"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",[26,69869,69870,69880,69894,69898,69906,69920,69940,69961,69974,69998,70006,70010,70018,70031,70052,70080,70108,70113,70135,70155,70174,70182,70210,70232,70252,70272,70292,70312,70332,70340,70360,70368,70372,70385,70393,70401,70409,70422,70435,70448,70461,70474,70487,70500,70508,70516,70524,70529,70534,70539,70544,70549,70554,70559,70564,70569,70574,70579,70584,70589,70597,70605,70613,70617,70637,70656,70676,70696,70716,70736,70740,70745,70765,70770,70780,70785,70790,70810,70832,70837,70847,70851,70855,70860,70865,70894,70908,70923,70927,70931,70935,70940,70951,70964,70969,70974,70979,70984,70989,70993,70998,71003,71012,71017,71022,71034,71039,71046,71050,71055,71065,71070,71080,71085,71113,71134,71144,71164,71182,71199,71216,71233,71250,71254,71264,71269,71274,71279,71290,71294,71298,71302,71307,71312,71333,71345,71350,71355,71360,71374,71379,71386,71390,71394,71402,71406,71414,71418],{"__ignoreMap":35},[39,69871,69872,69874,69876,69878],{"class":41,"line":42},[39,69873,52272],{"class":53},[39,69875,52276],{"class":52275},[39,69877,52279],{"class":49},[39,69879,52282],{"class":53},[39,69881,69882,69884,69886,69888,69890,69892],{"class":41,"line":92},[39,69883,2170],{"class":53},[39,69885,51610],{"class":52275},[39,69887,52291],{"class":49},[39,69889,1117],{"class":53},[39,69891,52296],{"class":237},[39,69893,52282],{"class":53},[39,69895,69896],{"class":41,"line":112},[39,69897,122],{"emptyLinePlaceholder":121},[39,69899,69900,69902,69904],{"class":41,"line":118},[39,69901,2170],{"class":53},[39,69903,52309],{"class":52275},[39,69905,52282],{"class":53},[39,69907,69908,69910,69912,69914,69916,69918],{"class":41,"line":125},[39,69909,53119],{"class":53},[39,69911,52319],{"class":52275},[39,69913,52322],{"class":49},[39,69915,1117],{"class":53},[39,69917,52327],{"class":237},[39,69919,60102],{"class":53},[39,69921,69922,69924,69926,69928,69930,69932,69934,69936,69938],{"class":41,"line":132},[39,69923,53119],{"class":53},[39,69925,52319],{"class":52275},[39,69927,15893],{"class":49},[39,69929,1117],{"class":53},[39,69931,52366],{"class":237},[39,69933,52346],{"class":49},[39,69935,1117],{"class":53},[39,69937,52373],{"class":237},[39,69939,60102],{"class":53},[39,69941,69942,69944,69946,69948,69950,69952,69954,69956,69959],{"class":41,"line":138},[39,69943,53119],{"class":53},[39,69945,52319],{"class":52275},[39,69947,52338],{"class":49},[39,69949,1117],{"class":53},[39,69951,52343],{"class":237},[39,69953,52346],{"class":49},[39,69955,1117],{"class":53},[39,69957,69958],{"class":237},"\"ie=edge\"",[39,69960,60102],{"class":53},[39,69962,69963,69965,69967,69970,69972],{"class":41,"line":169},[39,69964,53119],{"class":53},[39,69966,52382],{"class":52275},[39,69968,69969],{"class":53},">学生信息管理\u003C\u002F",[39,69971,52382],{"class":52275},[39,69973,52282],{"class":53},[39,69975,69976,69978,69981,69984,69986,69989,69991,69993,69996],{"class":41,"line":190},[39,69977,53119],{"class":53},[39,69979,69980],{"class":52275},"link",[39,69982,69983],{"class":49}," rel",[39,69985,1117],{"class":53},[39,69987,69988],{"class":237},"\"stylesheet\"",[39,69990,62032],{"class":49},[39,69992,1117],{"class":53},[39,69994,69995],{"class":237},"\"css\u002Findex.css\"",[39,69997,60102],{"class":53},[39,69999,70000,70002,70004],{"class":41,"line":202},[39,70001,52760],{"class":53},[39,70003,52309],{"class":52275},[39,70005,52282],{"class":53},[39,70007,70008],{"class":41,"line":207},[39,70009,122],{"emptyLinePlaceholder":121},[39,70011,70012,70014,70016],{"class":41,"line":212},[39,70013,2170],{"class":53},[39,70015,52775],{"class":52275},[39,70017,52282],{"class":53},[39,70019,70020,70022,70024,70027,70029],{"class":41,"line":223},[39,70021,53119],{"class":53},[39,70023,10],{"class":52275},[39,70025,70026],{"class":53},">新增学员\u003C\u002F",[39,70028,10],{"class":52275},[39,70030,52282],{"class":53},[39,70032,70033,70035,70037,70039,70041,70043,70046,70048,70050],{"class":41,"line":228},[39,70034,53119],{"class":53},[39,70036,67600],{"class":52275},[39,70038,54461],{"class":49},[39,70040,1117],{"class":53},[39,70042,63639],{"class":237},[39,70044,70045],{"class":49}," autocomplete",[39,70047,1117],{"class":53},[39,70049,32751],{"class":237},[39,70051,52282],{"class":53},[39,70053,70054,70057,70059,70061,70063,70065,70067,70069,70072,70074,70076,70078],{"class":41,"line":263},[39,70055,70056],{"class":53},"    姓名：\u003C",[39,70058,54796],{"class":52275},[39,70060,54799],{"class":49},[39,70062,1117],{"class":53},[39,70064,63674],{"class":237},[39,70066,54461],{"class":49},[39,70068,1117],{"class":53},[39,70070,70071],{"class":237},"\"uname\"",[39,70073,15893],{"class":49},[39,70075,1117],{"class":53},[39,70077,70071],{"class":237},[39,70079,60102],{"class":53},[39,70081,70082,70085,70087,70089,70091,70093,70095,70097,70100,70102,70104,70106],{"class":41,"line":287},[39,70083,70084],{"class":53},"    年龄：\u003C",[39,70086,54796],{"class":52275},[39,70088,54799],{"class":49},[39,70090,1117],{"class":53},[39,70092,63674],{"class":237},[39,70094,54461],{"class":49},[39,70096,1117],{"class":53},[39,70098,70099],{"class":237},"\"age\"",[39,70101,15893],{"class":49},[39,70103,1117],{"class":53},[39,70105,70099],{"class":237},[39,70107,60102],{"class":53},[39,70109,70110],{"class":41,"line":292},[39,70111,70112],{"class":53},"    性别:\n",[39,70114,70115,70117,70120,70122,70124,70127,70129,70131,70133],{"class":41,"line":305},[39,70116,52316],{"class":53},[39,70118,70119],{"class":52275},"select",[39,70121,15893],{"class":49},[39,70123,1117],{"class":53},[39,70125,70126],{"class":237},"\"gender\"",[39,70128,54461],{"class":49},[39,70130,1117],{"class":53},[39,70132,70126],{"class":237},[39,70134,52282],{"class":53},[39,70136,70137,70139,70142,70144,70146,70148,70151,70153],{"class":41,"line":310},[39,70138,56209],{"class":53},[39,70140,70141],{"class":52275},"option",[39,70143,67626],{"class":49},[39,70145,1117],{"class":53},[39,70147,11027],{"class":237},[39,70149,70150],{"class":53},">男\u003C\u002F",[39,70152,70141],{"class":52275},[39,70154,52282],{"class":53},[39,70156,70157,70159,70161,70163,70165,70167,70170,70172],{"class":41,"line":321},[39,70158,56209],{"class":53},[39,70160,70141],{"class":52275},[39,70162,67626],{"class":49},[39,70164,1117],{"class":53},[39,70166,11096],{"class":237},[39,70168,70169],{"class":53},">女\u003C\u002F",[39,70171,70141],{"class":52275},[39,70173,52282],{"class":53},[39,70175,70176,70178,70180],{"class":41,"line":713},[39,70177,52751],{"class":53},[39,70179,70119],{"class":52275},[39,70181,52282],{"class":53},[39,70183,70184,70187,70189,70191,70193,70195,70197,70199,70202,70204,70206,70208],{"class":41,"line":718},[39,70185,70186],{"class":53},"    薪资：\u003C",[39,70188,54796],{"class":52275},[39,70190,54799],{"class":49},[39,70192,1117],{"class":53},[39,70194,63674],{"class":237},[39,70196,54461],{"class":49},[39,70198,1117],{"class":53},[39,70200,70201],{"class":237},"\"salary\"",[39,70203,15893],{"class":49},[39,70205,1117],{"class":53},[39,70207,70201],{"class":237},[39,70209,60102],{"class":53},[39,70211,70212,70215,70217,70219,70221,70224,70226,70228,70230],{"class":41,"line":723},[39,70213,70214],{"class":53},"    就业城市：\u003C",[39,70216,70119],{"class":52275},[39,70218,15893],{"class":49},[39,70220,1117],{"class":53},[39,70222,70223],{"class":237},"\"city\"",[39,70225,54461],{"class":49},[39,70227,1117],{"class":53},[39,70229,70223],{"class":237},[39,70231,52282],{"class":53},[39,70233,70234,70236,70238,70240,70242,70245,70248,70250],{"class":41,"line":729},[39,70235,56209],{"class":53},[39,70237,70141],{"class":52275},[39,70239,67626],{"class":49},[39,70241,1117],{"class":53},[39,70243,70244],{"class":237},"\"北京\"",[39,70246,70247],{"class":53},">北京\u003C\u002F",[39,70249,70141],{"class":52275},[39,70251,52282],{"class":53},[39,70253,70254,70256,70258,70260,70262,70265,70268,70270],{"class":41,"line":735},[39,70255,56209],{"class":53},[39,70257,70141],{"class":52275},[39,70259,67626],{"class":49},[39,70261,1117],{"class":53},[39,70263,70264],{"class":237},"\"上海\"",[39,70266,70267],{"class":53},">上海\u003C\u002F",[39,70269,70141],{"class":52275},[39,70271,52282],{"class":53},[39,70273,70274,70276,70278,70280,70282,70285,70288,70290],{"class":41,"line":741},[39,70275,56209],{"class":53},[39,70277,70141],{"class":52275},[39,70279,67626],{"class":49},[39,70281,1117],{"class":53},[39,70283,70284],{"class":237},"\"广州\"",[39,70286,70287],{"class":53},">广州\u003C\u002F",[39,70289,70141],{"class":52275},[39,70291,52282],{"class":53},[39,70293,70294,70296,70298,70300,70302,70305,70308,70310],{"class":41,"line":747},[39,70295,56209],{"class":53},[39,70297,70141],{"class":52275},[39,70299,67626],{"class":49},[39,70301,1117],{"class":53},[39,70303,70304],{"class":237},"\"深圳\"",[39,70306,70307],{"class":53},">深圳\u003C\u002F",[39,70309,70141],{"class":52275},[39,70311,52282],{"class":53},[39,70313,70314,70316,70318,70320,70322,70325,70328,70330],{"class":41,"line":753},[39,70315,56209],{"class":53},[39,70317,70141],{"class":52275},[39,70319,67626],{"class":49},[39,70321,1117],{"class":53},[39,70323,70324],{"class":237},"\"曹县\"",[39,70326,70327],{"class":53},">曹县\u003C\u002F",[39,70329,70141],{"class":52275},[39,70331,52282],{"class":53},[39,70333,70334,70336,70338],{"class":41,"line":758},[39,70335,52751],{"class":53},[39,70337,70119],{"class":52275},[39,70339,52282],{"class":53},[39,70341,70342,70344,70346,70348,70350,70353,70356,70358],{"class":41,"line":763},[39,70343,52316],{"class":53},[39,70345,54862],{"class":52275},[39,70347,54461],{"class":49},[39,70349,1117],{"class":53},[39,70351,70352],{"class":237},"\"add\"",[39,70354,70355],{"class":53},">录入\u003C\u002F",[39,70357,54862],{"class":52275},[39,70359,52282],{"class":53},[39,70361,70362,70364,70366],{"class":41,"line":772},[39,70363,53392],{"class":53},[39,70365,67600],{"class":52275},[39,70367,52282],{"class":53},[39,70369,70370],{"class":41,"line":777},[39,70371,122],{"emptyLinePlaceholder":121},[39,70373,70374,70376,70378,70381,70383],{"class":41,"line":785},[39,70375,53119],{"class":53},[39,70377,10],{"class":52275},[39,70379,70380],{"class":53},">就业榜\u003C\u002F",[39,70382,10],{"class":52275},[39,70384,52282],{"class":53},[39,70386,70387,70389,70391],{"class":41,"line":796},[39,70388,53119],{"class":53},[39,70390,1404],{"class":52275},[39,70392,52282],{"class":53},[39,70394,70395,70397,70399],{"class":41,"line":808},[39,70396,52316],{"class":53},[39,70398,1407],{"class":52275},[39,70400,52282],{"class":53},[39,70402,70403,70405,70407],{"class":41,"line":823},[39,70404,56209],{"class":53},[39,70406,1410],{"class":52275},[39,70408,52282],{"class":53},[39,70410,70411,70413,70415,70418,70420],{"class":41,"line":839},[39,70412,56277],{"class":53},[39,70414,1413],{"class":52275},[39,70416,70417],{"class":53},">序号\u003C\u002F",[39,70419,1413],{"class":52275},[39,70421,52282],{"class":53},[39,70423,70424,70426,70428,70431,70433],{"class":41,"line":845},[39,70425,56277],{"class":53},[39,70427,1413],{"class":52275},[39,70429,70430],{"class":53},">姓名\u003C\u002F",[39,70432,1413],{"class":52275},[39,70434,52282],{"class":53},[39,70436,70437,70439,70441,70444,70446],{"class":41,"line":856},[39,70438,56277],{"class":53},[39,70440,1413],{"class":52275},[39,70442,70443],{"class":53},">年龄\u003C\u002F",[39,70445,1413],{"class":52275},[39,70447,52282],{"class":53},[39,70449,70450,70452,70454,70457,70459],{"class":41,"line":861},[39,70451,56277],{"class":53},[39,70453,1413],{"class":52275},[39,70455,70456],{"class":53},">性别\u003C\u002F",[39,70458,1413],{"class":52275},[39,70460,52282],{"class":53},[39,70462,70463,70465,70467,70470,70472],{"class":41,"line":870},[39,70464,56277],{"class":53},[39,70466,1413],{"class":52275},[39,70468,70469],{"class":53},">薪资\u003C\u002F",[39,70471,1413],{"class":52275},[39,70473,52282],{"class":53},[39,70475,70476,70478,70480,70483,70485],{"class":41,"line":9084},[39,70477,56277],{"class":53},[39,70479,1413],{"class":52275},[39,70481,70482],{"class":53},">就业城市\u003C\u002F",[39,70484,1413],{"class":52275},[39,70486,52282],{"class":53},[39,70488,70489,70491,70493,70496,70498],{"class":41,"line":9090},[39,70490,56277],{"class":53},[39,70492,1413],{"class":52275},[39,70494,70495],{"class":53},">操作\u003C\u002F",[39,70497,1413],{"class":52275},[39,70499,52282],{"class":53},[39,70501,70502,70504,70506],{"class":41,"line":9102},[39,70503,56382],{"class":53},[39,70505,1410],{"class":52275},[39,70507,52282],{"class":53},[39,70509,70510,70512,70514],{"class":41,"line":9114},[39,70511,52751],{"class":53},[39,70513,1407],{"class":52275},[39,70515,52282],{"class":53},[39,70517,70518,70520,70522],{"class":41,"line":9126},[39,70519,52316],{"class":53},[39,70521,1450],{"class":52275},[39,70523,52282],{"class":53},[39,70525,70526],{"class":41,"line":10784},[39,70527,70528],{"class":128},"      \u003C!-- \n",[39,70530,70531],{"class":41,"line":10809},[39,70532,70533],{"class":128},"        \u003Ctr>\n",[39,70535,70536],{"class":41,"line":10832},[39,70537,70538],{"class":128},"          \u003Ctd>1001\u003C\u002Ftd>\n",[39,70540,70541],{"class":41,"line":10856},[39,70542,70543],{"class":128},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[39,70545,70546],{"class":41,"line":10861},[39,70547,70548],{"class":128},"          \u003Ctd>19\u003C\u002Ftd>\n",[39,70550,70551],{"class":41,"line":10866},[39,70552,70553],{"class":128},"          \u003Ctd>男\u003C\u002Ftd>\n",[39,70555,70556],{"class":41,"line":10871},[39,70557,70558],{"class":128},"          \u003Ctd>15000\u003C\u002Ftd>\n",[39,70560,70561],{"class":41,"line":10880},[39,70562,70563],{"class":128},"          \u003Ctd>上海\u003C\u002Ftd>\n",[39,70565,70566],{"class":41,"line":10885},[39,70567,70568],{"class":128},"          \u003Ctd>\n",[39,70570,70571],{"class":41,"line":10891},[39,70572,70573],{"class":128},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[39,70575,70576],{"class":41,"line":10912},[39,70577,70578],{"class":128},"          \u003C\u002Ftd>\n",[39,70580,70581],{"class":41,"line":10918},[39,70582,70583],{"class":128},"        \u003C\u002Ftr> \n",[39,70585,70586],{"class":41,"line":10932},[39,70587,70588],{"class":128},"        -->\n",[39,70590,70591,70593,70595],{"class":41,"line":10938},[39,70592,52751],{"class":53},[39,70594,1450],{"class":52275},[39,70596,52282],{"class":53},[39,70598,70599,70601,70603],{"class":41,"line":10965},[39,70600,53392],{"class":53},[39,70602,1404],{"class":52275},[39,70604,52282],{"class":53},[39,70606,70607,70609,70611],{"class":41,"line":10974},[39,70608,53119],{"class":53},[39,70610,52788],{"class":52275},[39,70612,52282],{"class":53},[39,70614,70615],{"class":41,"line":10980},[39,70616,60933],{"class":128},[39,70618,70619,70621,70624,70626,70628,70630,70632,70635],{"class":41,"line":10988},[39,70620,12283],{"class":45},[39,70622,70623],{"class":74}," uname",[39,70625,71],{"class":45},[39,70627,55371],{"class":53},[39,70629,55374],{"class":49},[39,70631,54],{"class":53},[39,70633,70634],{"class":237},"'.uname'",[39,70636,574],{"class":53},[39,70638,70639,70641,70643,70645,70647,70649,70651,70654],{"class":41,"line":10993},[39,70640,12283],{"class":45},[39,70642,16662],{"class":74},[39,70644,71],{"class":45},[39,70646,55371],{"class":53},[39,70648,55374],{"class":49},[39,70650,54],{"class":53},[39,70652,70653],{"class":237},"'.age'",[39,70655,574],{"class":53},[39,70657,70658,70660,70663,70665,70667,70669,70671,70674],{"class":41,"line":17577},[39,70659,12283],{"class":45},[39,70661,70662],{"class":74}," gender",[39,70664,71],{"class":45},[39,70666,55371],{"class":53},[39,70668,55374],{"class":49},[39,70670,54],{"class":53},[39,70672,70673],{"class":237},"'.gender'",[39,70675,574],{"class":53},[39,70677,70678,70680,70683,70685,70687,70689,70691,70694],{"class":41,"line":17583},[39,70679,12283],{"class":45},[39,70681,70682],{"class":74}," salary",[39,70684,71],{"class":45},[39,70686,55371],{"class":53},[39,70688,55374],{"class":49},[39,70690,54],{"class":53},[39,70692,70693],{"class":237},"'.salary'",[39,70695,574],{"class":53},[39,70697,70698,70700,70703,70705,70707,70709,70711,70714],{"class":41,"line":17606},[39,70699,12283],{"class":45},[39,70701,70702],{"class":74}," city",[39,70704,71],{"class":45},[39,70706,55371],{"class":53},[39,70708,55374],{"class":49},[39,70710,54],{"class":53},[39,70712,70713],{"class":237},"'.city'",[39,70715,574],{"class":53},[39,70717,70718,70720,70723,70725,70727,70729,70731,70734],{"class":41,"line":17612},[39,70719,12283],{"class":45},[39,70721,70722],{"class":74}," tbody",[39,70724,71],{"class":45},[39,70726,55371],{"class":53},[39,70728,55374],{"class":49},[39,70730,54],{"class":53},[39,70732,70733],{"class":237},"'tbody'",[39,70735,574],{"class":53},[39,70737,70738],{"class":41,"line":17635},[39,70739,122],{"emptyLinePlaceholder":121},[39,70741,70742],{"class":41,"line":17649},[39,70743,70744],{"class":128},"    \u002F\u002F 获取所有带有name属性的元素\n",[39,70746,70747,70749,70752,70754,70756,70758,70760,70763],{"class":41,"line":17669},[39,70748,12283],{"class":45},[39,70750,70751],{"class":74}," items",[39,70753,71],{"class":45},[39,70755,55371],{"class":53},[39,70757,56656],{"class":49},[39,70759,54],{"class":53},[39,70761,70762],{"class":237},"'[name]'",[39,70764,574],{"class":53},[39,70766,70767],{"class":41,"line":17675},[39,70768,70769],{"class":128},"    \u002F\u002F 声明一个空的数组\n",[39,70771,70772,70774,70776,70778],{"class":41,"line":17686},[39,70773,12283],{"class":45},[39,70775,58670],{"class":74},[39,70777,71],{"class":45},[39,70779,52813],{"class":53},[39,70781,70782],{"class":41,"line":17709},[39,70783,70784],{"class":128},"    \u002F\u002F 1.录入模块\n",[39,70786,70787],{"class":41,"line":17731},[39,70788,70789],{"class":128},"    \u002F\u002F 1.1这是一个表单提交事件\n",[39,70791,70792,70794,70797,70799,70801,70803,70805,70808],{"class":41,"line":17736},[39,70793,12283],{"class":45},[39,70795,70796],{"class":74}," info",[39,70798,71],{"class":45},[39,70800,55371],{"class":53},[39,70802,55374],{"class":49},[39,70804,54],{"class":53},[39,70806,70807],{"class":237},"'.info'",[39,70809,574],{"class":53},[39,70811,70812,70815,70817,70819,70822,70824,70826,70828,70830],{"class":41,"line":17742},[39,70813,70814],{"class":53},"    info.",[39,70816,58788],{"class":49},[39,70818,54],{"class":53},[39,70820,70821],{"class":237},"'submit'",[39,70823,63],{"class":53},[39,70825,55424],{"class":45},[39,70827,2772],{"class":53},[39,70829,1342],{"class":59},[39,70831,89],{"class":53},[39,70833,70834],{"class":41,"line":17756},[39,70835,70836],{"class":128},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[39,70838,70839,70842,70845],{"class":41,"line":17769},[39,70840,70841],{"class":53},"      e.",[39,70843,70844],{"class":49},"preventDefault",[39,70846,537],{"class":53},[39,70848,70849],{"class":41,"line":17774},[39,70850,60987],{"class":128},[39,70852,70853],{"class":41,"line":17788},[39,70854,122],{"emptyLinePlaceholder":121},[39,70856,70857],{"class":41,"line":17793},[39,70858,70859],{"class":128},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[39,70861,70862],{"class":41,"line":17799},[39,70863,70864],{"class":128},"      \u002F\u002F 先遍历循环\n",[39,70866,70867,70869,70871,70873,70875,70877,70879,70881,70883,70886,70888,70890,70892],{"class":41,"line":17804},[39,70868,53259],{"class":45},[39,70870,2772],{"class":53},[39,70872,52822],{"class":45},[39,70874,10506],{"class":53},[39,70876,1117],{"class":45},[39,70878,315],{"class":74},[39,70880,10513],{"class":53},[39,70882,2170],{"class":45},[39,70884,70885],{"class":53}," items.",[39,70887,52943],{"class":74},[39,70889,4297],{"class":53},[39,70891,3389],{"class":45},[39,70893,89],{"class":53},[39,70895,70896,70898,70901,70903,70906],{"class":41,"line":17818},[39,70897,3590],{"class":45},[39,70899,70900],{"class":53}," (items[i].value ",[39,70902,55461],{"class":45},[39,70904,70905],{"class":237}," ''",[39,70907,89],{"class":53},[39,70909,70910,70913,70916,70918,70921],{"class":41,"line":17823},[39,70911,70912],{"class":45},"          return",[39,70914,70915],{"class":49}," alert",[39,70917,54],{"class":53},[39,70919,70920],{"class":237},"'输入内容不能为空'",[39,70922,574],{"class":53},[39,70924,70925],{"class":41,"line":17828},[39,70926,3622],{"class":53},[39,70928,70929],{"class":41,"line":17842},[39,70930,53373],{"class":53},[39,70932,70933],{"class":41,"line":17854},[39,70934,122],{"emptyLinePlaceholder":121},[39,70936,70937],{"class":41,"line":17859},[39,70938,70939],{"class":128},"      \u002F\u002F 创建新的对象\n",[39,70941,70942,70944,70947,70949],{"class":41,"line":17872},[39,70943,59203],{"class":45},[39,70945,70946],{"class":74}," obj",[39,70948,71],{"class":45},[39,70950,16545],{"class":53},[39,70952,70953,70956,70958,70960,70962],{"class":41,"line":17877},[39,70954,70955],{"class":53},"        stuID: arr.",[39,70957,52943],{"class":74},[39,70959,46541],{"class":45},[39,70961,26093],{"class":74},[39,70963,32441],{"class":53},[39,70965,70966],{"class":41,"line":17882},[39,70967,70968],{"class":53},"        uname: uname.value,\n",[39,70970,70971],{"class":41,"line":17887},[39,70972,70973],{"class":53},"        age: age.value,\n",[39,70975,70976],{"class":41,"line":17900},[39,70977,70978],{"class":53},"        gender: gender.value,\n",[39,70980,70981],{"class":41,"line":17905},[39,70982,70983],{"class":53},"        salary: salary.value,\n",[39,70985,70986],{"class":41,"line":33608},[39,70987,70988],{"class":53},"        city: city.value\n",[39,70990,70991],{"class":41,"line":33614},[39,70992,53373],{"class":53},[39,70994,70995],{"class":41,"line":33620},[39,70996,70997],{"class":128},"      \u002F\u002F console.log(obj);\n",[39,70999,71000],{"class":41,"line":33626},[39,71001,71002],{"class":128},"      \u002F\u002F 追加到数组里面\n",[39,71004,71005,71007,71009],{"class":41,"line":33632},[39,71006,58982],{"class":53},[39,71008,52859],{"class":49},[39,71010,71011],{"class":53},"(obj)\n",[39,71013,71014],{"class":41,"line":33643},[39,71015,71016],{"class":128},"      \u002F\u002F console.log(arr);\n",[39,71018,71019],{"class":41,"line":33649},[39,71020,71021],{"class":128},"      \u002F\u002F 清空表单  reset重置表单\n",[39,71023,71024,71027,71029,71032],{"class":41,"line":33669},[39,71025,71026],{"class":74},"      this",[39,71028,1819],{"class":53},[39,71030,71031],{"class":49},"reset",[39,71033,537],{"class":53},[39,71035,71036],{"class":41,"line":33675},[39,71037,71038],{"class":128},"      \u002F\u002F 调用渲染函数\n",[39,71040,71041,71044],{"class":41,"line":33686},[39,71042,71043],{"class":49},"      render",[39,71045,537],{"class":53},[39,71047,71048],{"class":41,"line":33692},[39,71049,34436],{"class":53},[39,71051,71052],{"class":41,"line":33698},[39,71053,71054],{"class":128},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[39,71056,71057,71060,71063],{"class":41,"line":33704},[39,71058,71059],{"class":45},"    function",[39,71061,71062],{"class":49}," render",[39,71064,220],{"class":53},[39,71066,71067],{"class":41,"line":33710},[39,71068,71069],{"class":128},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[39,71071,71072,71075,71077],{"class":41,"line":33716},[39,71073,71074],{"class":53},"      tbody.innerHTML ",[39,71076,1117],{"class":45},[39,71078,71079],{"class":237}," ''\n",[39,71081,71082],{"class":41,"line":33722},[39,71083,71084],{"class":128},"      \u002F\u002F 遍历数组\n",[39,71086,71087,71089,71091,71093,71095,71097,71099,71101,71103,71105,71107,71109,71111],{"class":41,"line":33728},[39,71088,53259],{"class":45},[39,71090,2772],{"class":53},[39,71092,52822],{"class":45},[39,71094,10506],{"class":53},[39,71096,1117],{"class":45},[39,71098,315],{"class":74},[39,71100,10513],{"class":53},[39,71102,2170],{"class":45},[39,71104,52940],{"class":53},[39,71106,52943],{"class":74},[39,71108,4297],{"class":53},[39,71110,3389],{"class":45},[39,71112,89],{"class":53},[39,71114,71115,71117,71120,71122,71124,71127,71129,71132],{"class":41,"line":33748},[39,71116,62245],{"class":45},[39,71118,71119],{"class":74}," tr",[39,71121,71],{"class":45},[39,71123,55371],{"class":53},[39,71125,71126],{"class":49},"createElement",[39,71128,54],{"class":53},[39,71130,71131],{"class":237},"'tr'",[39,71133,574],{"class":53},[39,71135,71136,71139,71141],{"class":41,"line":33754},[39,71137,71138],{"class":53},"        tr.innerHTML ",[39,71140,1117],{"class":45},[39,71142,71143],{"class":237}," `\n",[39,71145,71146,71149,71151,71153,71155,71158,71161],{"class":41,"line":33770},[39,71147,71148],{"class":237},"        \u003Ctd>${",[39,71150,4963],{"class":53},[39,71152,2150],{"class":237},[39,71154,1704],{"class":53},[39,71156,71157],{"class":237},"].",[39,71159,71160],{"class":53},"stuID",[39,71162,71163],{"class":237},"}\u003C\u002Ftd>\n",[39,71165,71166,71169,71171,71173,71175,71177,71180],{"class":41,"line":33776},[39,71167,71168],{"class":237},"          \u003Ctd>${",[39,71170,4963],{"class":53},[39,71172,2150],{"class":237},[39,71174,1704],{"class":53},[39,71176,71157],{"class":237},[39,71178,71179],{"class":53},"uname",[39,71181,71163],{"class":237},[39,71183,71184,71186,71188,71190,71192,71194,71197],{"class":41,"line":33790},[39,71185,71168],{"class":237},[39,71187,4963],{"class":53},[39,71189,2150],{"class":237},[39,71191,1704],{"class":53},[39,71193,71157],{"class":237},[39,71195,71196],{"class":53},"age",[39,71198,71163],{"class":237},[39,71200,71201,71203,71205,71207,71209,71211,71214],{"class":41,"line":33796},[39,71202,71168],{"class":237},[39,71204,4963],{"class":53},[39,71206,2150],{"class":237},[39,71208,1704],{"class":53},[39,71210,71157],{"class":237},[39,71212,71213],{"class":53},"gender",[39,71215,71163],{"class":237},[39,71217,71218,71220,71222,71224,71226,71228,71231],{"class":41,"line":33811},[39,71219,71168],{"class":237},[39,71221,4963],{"class":53},[39,71223,2150],{"class":237},[39,71225,1704],{"class":53},[39,71227,71157],{"class":237},[39,71229,71230],{"class":53},"salary",[39,71232,71163],{"class":237},[39,71234,71235,71237,71239,71241,71243,71245,71248],{"class":41,"line":33817},[39,71236,71168],{"class":237},[39,71238,4963],{"class":53},[39,71240,2150],{"class":237},[39,71242,1704],{"class":53},[39,71244,71157],{"class":237},[39,71246,71247],{"class":53},"city",[39,71249,71163],{"class":237},[39,71251,71252],{"class":41,"line":33826},[39,71253,70568],{"class":237},[39,71255,71256,71259,71261],{"class":41,"line":33832},[39,71257,71258],{"class":237},"            \u003Ca href=\"javascript:\" data-id=${",[39,71260,1704],{"class":53},[39,71262,71263],{"class":237},"}>删除\u003C\u002Fa>\n",[39,71265,71266],{"class":41,"line":33841},[39,71267,71268],{"class":237},"          \u003C\u002Ftd> \n",[39,71270,71271],{"class":41,"line":33847},[39,71272,71273],{"class":237},"          `\n",[39,71275,71276],{"class":41,"line":33853},[39,71277,71278],{"class":128},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[39,71280,71281,71284,71287],{"class":41,"line":33862},[39,71282,71283],{"class":53},"        tbody.",[39,71285,71286],{"class":49},"appendChild",[39,71288,71289],{"class":53},"(tr)\n",[39,71291,71292],{"class":41,"line":33868},[39,71293,53373],{"class":53},[39,71295,71296],{"class":41,"line":33879},[39,71297,3284],{"class":53},[39,71299,71300],{"class":41,"line":33885},[39,71301,122],{"emptyLinePlaceholder":121},[39,71303,71304],{"class":41,"line":33904},[39,71305,71306],{"class":128},"    \u002F\u002F 3.删除委托\n",[39,71308,71309],{"class":41,"line":33910},[39,71310,71311],{"class":128},"    \u002F\u002F 3.1 事件委托 tbody\n",[39,71313,71314,71317,71319,71321,71323,71325,71327,71329,71331],{"class":41,"line":33921},[39,71315,71316],{"class":53},"    tbody.",[39,71318,58788],{"class":49},[39,71320,54],{"class":53},[39,71322,58793],{"class":237},[39,71324,63],{"class":53},[39,71326,55424],{"class":45},[39,71328,2772],{"class":53},[39,71330,1342],{"class":59},[39,71332,89],{"class":53},[39,71334,71335,71337,71339,71341,71343],{"class":41,"line":33927},[39,71336,55455],{"class":45},[39,71338,68009],{"class":53},[39,71340,55461],{"class":45},[39,71342,69231],{"class":237},[39,71344,89],{"class":53},[39,71346,71347],{"class":41,"line":33947},[39,71348,71349],{"class":128},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[39,71351,71352],{"class":41,"line":33963},[39,71353,71354],{"class":128},"        \u002F\u002F console.log(e.target.dataset.id);\n",[39,71356,71357],{"class":41,"line":33969},[39,71358,71359],{"class":128},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[39,71361,71362,71365,71367,71370,71372],{"class":41,"line":33983},[39,71363,71364],{"class":53},"        arr.",[39,71366,58985],{"class":49},[39,71368,71369],{"class":53},"(e.target.dataset.id, ",[39,71371,1483],{"class":74},[39,71373,574],{"class":53},[39,71375,71376],{"class":41,"line":33989},[39,71377,71378],{"class":128},"        \u002F\u002F 重新渲染一次\n",[39,71380,71381,71384],{"class":41,"line":33995},[39,71382,71383],{"class":49},"        render",[39,71385,537],{"class":53},[39,71387,71388],{"class":41,"line":34006},[39,71389,53373],{"class":53},[39,71391,71392],{"class":41,"line":34012},[39,71393,34436],{"class":53},[39,71395,71396,71398,71400],{"class":41,"line":34018},[39,71397,53392],{"class":53},[39,71399,52788],{"class":52275},[39,71401,52282],{"class":53},[39,71403,71404],{"class":41,"line":34028},[39,71405,122],{"emptyLinePlaceholder":121},[39,71407,71408,71410,71412],{"class":41,"line":34034},[39,71409,52760],{"class":53},[39,71411,52775],{"class":52275},[39,71413,52282],{"class":53},[39,71415,71416],{"class":41,"line":34045},[39,71417,122],{"emptyLinePlaceholder":121},[39,71419,71420,71422,71424],{"class":41,"line":34051},[39,71421,52760],{"class":53},[39,71423,51610],{"class":52275},[39,71425,52282],{"class":53},[19,71427,71428],{},"样式：",[30,71430,71434],{"className":71431,"code":71432,"language":71433,"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",[26,71435,71436,71441,71451,71460,71464,71468,71473,71483,71488,71492,71497,71507,71512,71521,71525,71529,71534,71539,71549,71559,71564,71568,71573,71582,71592,71597,71607,71617,71621,71626,71634,71638,71643,71648,71653,71661,71670,71674,71679,71688,71692,71697,71706,71710,71715,71724,71733,71741,71745,71750,71759,71769,71778,71788,71794,71803,71813,71823,71827,71832,71841,71849,71859,71867,71876,71885,71895,71903,71907,71912,71921],{"__ignoreMap":35},[39,71437,71438],{"class":41,"line":42},[39,71439,71440],{"class":53},"* {\n",[39,71442,71443,71446,71448],{"class":41,"line":92},[39,71444,71445],{"class":52275},"  margin",[39,71447,52412],{"class":53},[39,71449,71450],{"class":237},"0;\n",[39,71452,71453,71456,71458],{"class":41,"line":112},[39,71454,71455],{"class":237},"  padding",[39,71457,52412],{"class":53},[39,71459,71450],{"class":237},[39,71461,71462],{"class":41,"line":118},[39,71463,115],{"class":53},[39,71465,71466],{"class":41,"line":125},[39,71467,122],{"emptyLinePlaceholder":121},[39,71469,71470],{"class":41,"line":132},[39,71471,71472],{"class":237},"a {\n",[39,71474,71475,71478,71480],{"class":41,"line":138},[39,71476,71477],{"class":52275},"  text-decoration",[39,71479,52412],{"class":53},[39,71481,71482],{"class":237},"none;\n",[39,71484,71485],{"class":41,"line":169},[39,71486,71487],{"class":237},"  color:#721c24;\n",[39,71489,71490],{"class":41,"line":190},[39,71491,115],{"class":53},[39,71493,71494],{"class":41,"line":202},[39,71495,71496],{"class":237},"h1 {\n",[39,71498,71499,71502,71504],{"class":41,"line":207},[39,71500,71501],{"class":52275},"  text-align",[39,71503,52412],{"class":53},[39,71505,71506],{"class":237},"center;\n",[39,71508,71509],{"class":41,"line":212},[39,71510,71511],{"class":237},"  color:#333;\n",[39,71513,71514,71516,71518],{"class":41,"line":223},[39,71515,71445],{"class":52275},[39,71517,52412],{"class":53},[39,71519,71520],{"class":237},"20px 0;\n",[39,71522,71523],{"class":41,"line":228},[39,71524,3760],{"class":53},[39,71526,71527],{"class":41,"line":263},[39,71528,115],{"class":53},[39,71530,71531],{"class":41,"line":287},[39,71532,71533],{"class":237},"table {\n",[39,71535,71536],{"class":41,"line":292},[39,71537,71538],{"class":237},"  margin:0 auto;\n",[39,71540,71541,71544,71546],{"class":41,"line":305},[39,71542,71543],{"class":52275},"  width",[39,71545,52412],{"class":53},[39,71547,71548],{"class":237},"800px;\n",[39,71550,71551,71554,71556],{"class":41,"line":310},[39,71552,71553],{"class":52275},"  border-collapse",[39,71555,52412],{"class":53},[39,71557,71558],{"class":237},"collapse;\n",[39,71560,71561],{"class":41,"line":321},[39,71562,71563],{"class":237},"  color:#004085;\n",[39,71565,71566],{"class":41,"line":713},[39,71567,115],{"class":53},[39,71569,71570],{"class":41,"line":718},[39,71571,71572],{"class":237},"th {\n",[39,71574,71575,71577,71579],{"class":41,"line":723},[39,71576,71455],{"class":52275},[39,71578,52412],{"class":53},[39,71580,71581],{"class":237},"10px;\n",[39,71583,71584,71587,71589],{"class":41,"line":729},[39,71585,71586],{"class":52275},"  background",[39,71588,52412],{"class":53},[39,71590,71591],{"class":128},"#cfe5ff;\n",[39,71593,71594],{"class":41,"line":735},[39,71595,71596],{"class":53},"  \n",[39,71598,71599,71602,71604],{"class":41,"line":741},[39,71600,71601],{"class":52275},"  font-size",[39,71603,52412],{"class":53},[39,71605,71606],{"class":237},"20px;\n",[39,71608,71609,71612,71614],{"class":41,"line":747},[39,71610,71611],{"class":52275},"  font-weight",[39,71613,52412],{"class":53},[39,71615,71616],{"class":237},"400;\n",[39,71618,71619],{"class":41,"line":753},[39,71620,115],{"class":53},[39,71622,71623],{"class":41,"line":758},[39,71624,71625],{"class":237},"td,th {\n",[39,71627,71628,71631],{"class":41,"line":763},[39,71629,71630],{"class":237},"  border:1px solid",[39,71632,71633],{"class":128}," #b8daff;\n",[39,71635,71636],{"class":41,"line":772},[39,71637,115],{"class":53},[39,71639,71640],{"class":41,"line":777},[39,71641,71642],{"class":237},"td {\n",[39,71644,71645],{"class":41,"line":785},[39,71646,71647],{"class":237},"  padding:10px;\n",[39,71649,71650],{"class":41,"line":796},[39,71651,71652],{"class":237},"  color:#666;\n",[39,71654,71655,71657,71659],{"class":41,"line":808},[39,71656,71501],{"class":52275},[39,71658,52412],{"class":53},[39,71660,71506],{"class":237},[39,71662,71663,71665,71667],{"class":41,"line":823},[39,71664,71601],{"class":52275},[39,71666,52412],{"class":53},[39,71668,71669],{"class":237},"16px;\n",[39,71671,71672],{"class":41,"line":839},[39,71673,115],{"class":53},[39,71675,71676],{"class":41,"line":845},[39,71677,71678],{"class":237},"tbody tr {\n",[39,71680,71681,71683,71685],{"class":41,"line":856},[39,71682,71586],{"class":52275},[39,71684,52412],{"class":53},[39,71686,71687],{"class":128},"#fff;\n",[39,71689,71690],{"class":41,"line":861},[39,71691,115],{"class":53},[39,71693,71694],{"class":41,"line":870},[39,71695,71696],{"class":237},"tbody tr:hover {\n",[39,71698,71699,71701,71703],{"class":41,"line":9084},[39,71700,71586],{"class":52275},[39,71702,52412],{"class":53},[39,71704,71705],{"class":128},"#e1ecf8;\n",[39,71707,71708],{"class":41,"line":9090},[39,71709,115],{"class":53},[39,71711,71712],{"class":41,"line":9102},[39,71713,71714],{"class":237},".info {\n",[39,71716,71717,71719,71721],{"class":41,"line":9114},[39,71718,71543],{"class":52275},[39,71720,52412],{"class":53},[39,71722,71723],{"class":237},"900px;\n",[39,71725,71726,71728,71730],{"class":41,"line":9126},[39,71727,71445],{"class":52275},[39,71729,52412],{"class":53},[39,71731,71732],{"class":237},"50px auto;\n",[39,71734,71735,71737,71739],{"class":41,"line":10784},[39,71736,71501],{"class":52275},[39,71738,52412],{"class":53},[39,71740,71506],{"class":237},[39,71742,71743],{"class":41,"line":10809},[39,71744,115],{"class":53},[39,71746,71747],{"class":41,"line":10832},[39,71748,71749],{"class":237},".info  input, .info select {\n",[39,71751,71752,71754,71756],{"class":41,"line":10856},[39,71753,71543],{"class":52275},[39,71755,52412],{"class":53},[39,71757,71758],{"class":237},"80px;\n",[39,71760,71761,71764,71766],{"class":41,"line":10861},[39,71762,71763],{"class":52275},"  height",[39,71765,52412],{"class":53},[39,71767,71768],{"class":237},"27px;\n",[39,71770,71771,71774,71776],{"class":41,"line":10866},[39,71772,71773],{"class":52275},"  outline",[39,71775,52412],{"class":53},[39,71777,71482],{"class":237},[39,71779,71780,71783,71785],{"class":41,"line":10871},[39,71781,71782],{"class":52275},"  border-radius",[39,71784,52412],{"class":53},[39,71786,71787],{"class":237},"5px;\n",[39,71789,71790,71792],{"class":41,"line":10880},[39,71791,71630],{"class":237},[39,71793,71633],{"class":128},[39,71795,71796,71799,71801],{"class":41,"line":10885},[39,71797,71798],{"class":52275},"  padding-left",[39,71800,52412],{"class":53},[39,71802,71787],{"class":237},[39,71804,71805,71808,71810],{"class":41,"line":10891},[39,71806,71807],{"class":52275},"  box-sizing",[39,71809,52412],{"class":53},[39,71811,71812],{"class":237},"border-box;\n",[39,71814,71815,71818,71820],{"class":41,"line":10912},[39,71816,71817],{"class":52275},"  margin-right",[39,71819,52412],{"class":53},[39,71821,71822],{"class":237},"15px;\n",[39,71824,71825],{"class":41,"line":10918},[39,71826,115],{"class":53},[39,71828,71829],{"class":41,"line":10932},[39,71830,71831],{"class":237},".info button {\n",[39,71833,71834,71836,71838],{"class":41,"line":10938},[39,71835,71543],{"class":52275},[39,71837,52412],{"class":53},[39,71839,71840],{"class":237},"60px;\n",[39,71842,71843,71845,71847],{"class":41,"line":10965},[39,71844,71763],{"class":52275},[39,71846,52412],{"class":53},[39,71848,71768],{"class":237},[39,71850,71851,71854,71856],{"class":41,"line":10974},[39,71852,71853],{"class":52275},"  background-color",[39,71855,52412],{"class":53},[39,71857,71858],{"class":128},"#004085;\n",[39,71860,71861,71863,71865],{"class":41,"line":10980},[39,71862,71773],{"class":52275},[39,71864,52412],{"class":53},[39,71866,71482],{"class":237},[39,71868,71869,71872,71874],{"class":41,"line":10988},[39,71870,71871],{"class":52275},"  border",[39,71873,52412],{"class":53},[39,71875,71450],{"class":237},[39,71877,71878,71881,71883],{"class":41,"line":10993},[39,71879,71880],{"class":52275},"  color",[39,71882,52412],{"class":53},[39,71884,71687],{"class":128},[39,71886,71887,71890,71892],{"class":41,"line":17577},[39,71888,71889],{"class":52275},"  cursor",[39,71891,52412],{"class":53},[39,71893,71894],{"class":237},"pointer;\n",[39,71896,71897,71899,71901],{"class":41,"line":17583},[39,71898,71782],{"class":52275},[39,71900,52412],{"class":53},[39,71902,71787],{"class":237},[39,71904,71905],{"class":41,"line":17606},[39,71906,115],{"class":53},[39,71908,71909],{"class":41,"line":17612},[39,71910,71911],{"class":237},".info .age {\n",[39,71913,71914,71916,71918],{"class":41,"line":17635},[39,71915,71543],{"class":52275},[39,71917,52412],{"class":53},[39,71919,71920],{"class":237},"50px;\n",[39,71922,71923],{"class":41,"line":17649},[39,71924,115],{"class":53},[19,71926,71927],{},"思路：",[19,71929,71930],{},[2585,71931],{"alt":35,"src":71932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71934,71935],{},[2585,71936],{"alt":35,"src":71937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71939,71940],{},[2585,71941],{"alt":35,"src":71942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[476,71944,71946],{"id":71945},"_3315-重绘回流","3.3.15 重绘回流",[19,71948,71949],{},[2585,71950],{"alt":35,"src":71951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71953,71954],{},[2585,71955],{"alt":35,"src":71956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71958,71959],{},[2585,71960],{"alt":35,"src":71961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71963,71965],{"id":71964},"_34-bom","3.4 BOM",[19,71967,71968],{},[2585,71969],{"alt":35,"src":71970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71972,71973],{},"平时写的document省略了window而已，实际上是window.document",[19,71975,71976],{},"函数也是这样，调用的时候实际为window.fn()",[19,71978,71979],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71981,71982],{},"window大部分情况下可以省略",[476,71984,71986],{"id":71985},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71988,71989],{},"只执行一次",[19,71991,71992],{},[2585,71993],{"alt":35,"src":71994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71996,71997],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71999,72000],{},[2585,72001],{"alt":35,"src":72002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[476,72004,72006],{"id":72005},"_342-js执行机制","3.4.2 JS执行机制",[19,72008,72009],{},[2585,72010],{"alt":35,"src":72011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72013,72014],{},"两个的结果都是1111 3333 2222",[19,72016,72017],{},[2585,72018],{"alt":35,"src":72019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72021,72022],{},[2585,72023],{"alt":35,"src":72024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72026,72027],{},[2585,72028],{"alt":35,"src":72029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72031,72032],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72034,72035],{},"工作流程：",[19,72037,72038],{},[2585,72039],{"alt":35,"src":72040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72042,72043],{},[2585,72044],{"alt":35,"src":72045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72047,72048],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72050,72051],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[476,72053,72055],{"id":72054},"_343-location对象","3.4.3 location对象",[19,72057,72058],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72060,72061],{},[2585,72062],{"alt":35,"src":72063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72065,72066],{},"href可以跳转页面",[328,72068,72069],{},[331,72070,72071],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72073,72074],{},"search得到提交信息之后网站后边的地址",[19,72076,72077],{},[2585,72078],{"alt":35,"src":72079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72081,72082],{},[2585,72083],{"alt":35,"src":72084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[328,72086,72087],{"start":92},[331,72088,72089],{},"hash:这个获取单页面应用#后边的地址",[19,72091,72092],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72094,72095],{},[2585,72096],{"alt":35,"src":72097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[30,72099,72101],{"className":54042,"code":72100,"language":54044,"meta":35,"style":35},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[26,72102,72103,72123,72143],{"__ignoreMap":35},[39,72104,72105,72107,72109,72111,72113,72116,72119,72121],{"class":41,"line":42},[39,72106,53119],{"class":53},[39,72108,922],{"class":52275},[39,72110,62032],{"class":49},[39,72112,1117],{"class":53},[39,72114,72115],{"class":237},"\"#\u002Fmy\"",[39,72117,72118],{"class":53},">我的\u003C\u002F",[39,72120,922],{"class":52275},[39,72122,52282],{"class":53},[39,72124,72125,72127,72129,72131,72133,72136,72139,72141],{"class":41,"line":92},[39,72126,53119],{"class":53},[39,72128,922],{"class":52275},[39,72130,62032],{"class":49},[39,72132,1117],{"class":53},[39,72134,72135],{"class":237},"\"#\u002Ffriend\"",[39,72137,72138],{"class":53},">关注\u003C\u002F",[39,72140,922],{"class":52275},[39,72142,52282],{"class":53},[39,72144,72145,72147,72149,72151,72153,72156,72159,72161],{"class":41,"line":112},[39,72146,53119],{"class":53},[39,72148,922],{"class":52275},[39,72150,62032],{"class":49},[39,72152,1117],{"class":53},[39,72154,72155],{"class":237},"\"#\u002Fdownload\"",[39,72157,72158],{"class":53},">下载\u003C\u002F",[39,72160,922],{"class":52275},[39,72162,52282],{"class":53},[19,72164,72165],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[328,72167,72168],{"start":112},[331,72169,72170,72171,72173,72174,72176],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54691,72172],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54691,72175],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[476,72178,72180],{"id":72179},"_345-navigator对象","3.4.5 navigator对象",[19,72182,72183],{},[2585,72184],{"alt":35,"src":72185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[30,72187,72191],{"className":72188,"code":72189,"language":72190,"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",[26,72192,72193,72198,72209,72221,72226,72277,72318,72323,72336,72348,72353],{"__ignoreMap":35},[39,72194,72195],{"class":41,"line":42},[39,72196,72197],{"class":128},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[39,72199,72200,72202,72204,72206],{"class":41,"line":92},[39,72201,1492],{"class":45},[39,72203,54],{"class":53},[39,72205,55424],{"class":45},[39,72207,72208],{"class":53}," () { \n",[39,72210,72211,72213,72216,72218],{"class":41,"line":112},[39,72212,960],{"class":45},[39,72214,72215],{"class":74}," userAgent",[39,72217,71],{"class":45},[39,72219,72220],{"class":53}," navigator.userAgent \n",[39,72222,72223],{"class":41,"line":118},[39,72224,72225],{"class":128},"\u002F\u002F 验证是否为Android或iPhone \n",[39,72227,72228,72230,72233,72235,72238,72241,72243,72245,72248,72250,72253,72257,72259,72261,72263,72266,72268,72270,72272,72274],{"class":41,"line":125},[39,72229,960],{"class":45},[39,72231,72232],{"class":74}," android",[39,72234,71],{"class":45},[39,72236,72237],{"class":53}," userAgent.",[39,72239,72240],{"class":49},"match",[39,72242,54],{"class":53},[39,72244,1845],{"class":237},[39,72246,72247],{"class":48952},"(Android);",[39,72249,2246],{"class":45},[39,72251,72252],{"class":74},"[\\s",[39,72254,72256],{"class":72255},"snhLl","\\\u002F",[39,72258,2200],{"class":74},[39,72260,101],{"class":45},[39,72262,54],{"class":48952},[39,72264,72265],{"class":74},"[\\d.]",[39,72267,101],{"class":45},[39,72269,1692],{"class":48952},[39,72271,2246],{"class":45},[39,72273,1845],{"class":237},[39,72275,72276],{"class":53},") \n",[39,72278,72279,72281,72284,72286,72288,72290,72292,72294,72297,72300,72303,72305,72307,72310,72312,72314,72316],{"class":41,"line":132},[39,72280,960],{"class":45},[39,72282,72283],{"class":74}," iphone",[39,72285,71],{"class":45},[39,72287,72237],{"class":53},[39,72289,72240],{"class":49},[39,72291,54],{"class":53},[39,72293,1845],{"class":237},[39,72295,72296],{"class":48952},"(iPhone",[39,72298,72299],{"class":74},"\\s",[39,72301,72302],{"class":48952},"OS)",[39,72304,72299],{"class":74},[39,72306,54],{"class":48952},[39,72308,72309],{"class":74},"[\\d_]",[39,72311,101],{"class":45},[39,72313,1692],{"class":48952},[39,72315,1845],{"class":237},[39,72317,72276],{"class":53},[39,72319,72320],{"class":41,"line":138},[39,72321,72322],{"class":128},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[39,72324,72325,72327,72330,72333],{"class":41,"line":169},[39,72326,2654],{"class":45},[39,72328,72329],{"class":53}," (android ",[39,72331,72332],{"class":45},"||",[39,72334,72335],{"class":53}," iphone) { \n",[39,72337,72338,72341,72343,72346],{"class":41,"line":190},[39,72339,72340],{"class":53},"location.href ",[39,72342,1117],{"class":45},[39,72344,72345],{"class":237}," 'http:\u002F\u002Fm.itcast.cn'",[39,72347,3760],{"class":53},[39,72349,72350],{"class":41,"line":202},[39,72351,72352],{"class":53},"} \n",[39,72354,72355],{"class":41,"line":207},[39,72356,72357],{"class":53},"})()\n",[476,72359,72361],{"id":72360},"_346-histroy对象","3.4.6 histroy对象",[19,72363,72364],{},[2585,72365],{"alt":35,"src":72366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,72368,72369],{},"浏览器地址的前进与后退!!!",[19,72371,72372],{},"history.back() 等效于 history.go(-1)",[19,72374,72375],{},"history.forward() 等效于 history.go(1)",[14,72377,72379],{"id":72378},"_35-本地存储","3.5 本地存储",[328,72381,72382,72385,72388],{},[331,72383,72384],{},"数据存储在用户浏览器中",[331,72386,72387],{},"设置、读取方便、甚至页面刷新不丢失数据",[331,72389,72390],{},"容量较大，sessionStorage和localStorage约 5M 左右",[476,72392,72394],{"id":72393},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,72396,72397],{},"只能存储字符串",[19,72399,72400],{},[2585,72401],{"alt":35,"src":72402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,72404,72405],{},[2585,72406],{"alt":35,"src":72407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,72409,72410],{},"键值对要加引号,不然就会当变量来看了",[19,72412,72413],{},"localStorage.setItem('uname', 'pink')",[19,72415,72416],{},"刷新之后信息不再丢失",[19,72418,72419],{},"操作key,value会跟着变",[19,72421,72422],{},"删除只删除键就可以,即名字",[19,72424,72413],{},[19,72426,72427],{},"改:",[19,72429,72430],{},"localStorage.setItem('uname','red')",[19,72432,72433],{},"有这个键就是改,没有这个键就是改",[19,72435,72436],{},[2585,72437],{"alt":35,"src":72438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,72440,72441],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,72443,72444],{},[2585,72445],{"alt":35,"src":72446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,72448,72449],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[476,72451,72453],{"id":72452},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,72455,72456],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,72458,72459],{},"特性:",[328,72461,72462,72465,72468,72471],{},[331,72463,72464],{},"生命周期为关闭浏览器窗口",[331,72466,72467],{},"在同一个窗口(页面)下数据可以共享",[331,72469,72470],{},"以键值对的形式存储使用",[331,72472,72473],{},"用法跟localStorage 基本相同",[476,72475,72477],{"id":72476},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,72479,72480],{},"本地只能存储字符串,无法直接存储复杂数据类型",[30,72482,72484],{"className":54042,"code":72483,"language":54044,"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",[26,72485,72486,72494,72499,72504,72509,72514,72518,72523,72528],{"__ignoreMap":35},[39,72487,72488,72490,72492],{"class":41,"line":42},[39,72489,2170],{"class":53},[39,72491,52788],{"class":52275},[39,72493,52282],{"class":53},[39,72495,72496],{"class":41,"line":92},[39,72497,72498],{"class":53},"    const obj = {\n",[39,72500,72501],{"class":41,"line":112},[39,72502,72503],{"class":53},"      uname: 'pink老师',\n",[39,72505,72506],{"class":41,"line":118},[39,72507,72508],{"class":53},"      age: 18,\n",[39,72510,72511],{"class":41,"line":125},[39,72512,72513],{"class":53},"      gender: '女'\n",[39,72515,72516],{"class":41,"line":132},[39,72517,3284],{"class":53},[39,72519,72520],{"class":41,"line":138},[39,72521,72522],{"class":53},"    \u002F\u002F 存储复杂数据类型\n",[39,72524,72525],{"class":41,"line":169},[39,72526,72527],{"class":53},"    localStorage.setItem('obj', obj)\n",[39,72529,72530,72532,72534],{"class":41,"line":190},[39,72531,53392],{"class":53},[39,72533,52788],{"class":52275},[39,72535,52282],{"class":53},[19,72537,72538],{},[2585,72539],{"alt":35,"src":72540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72542,72543],{},"如果获取一下数据:",[19,72545,72546],{},"log(localStorage.getItem('obj'))",[19,72548,72549],{},[2585,72550],{"alt":35,"src":72551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72553,72554],{},"发现直接存对象是使用不了的!!!",[22971,72556,72558],{"id":72557},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72560,72561],{},[2585,72562],{"alt":35,"src":72563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[30,72565,72567],{"className":51608,"code":72566,"language":51610,"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",[26,72568,72569,72577,72587,72597,72606,72614,72618,72622,72648,72667,72675,72679,72684,72689],{"__ignoreMap":35},[39,72570,72571,72573,72575],{"class":41,"line":42},[39,72572,2170],{"class":53},[39,72574,52788],{"class":52275},[39,72576,52282],{"class":53},[39,72578,72579,72581,72583,72585],{"class":41,"line":92},[39,72580,12283],{"class":45},[39,72582,70946],{"class":74},[39,72584,71],{"class":45},[39,72586,16545],{"class":53},[39,72588,72589,72592,72595],{"class":41,"line":112},[39,72590,72591],{"class":53},"      uname: ",[39,72593,72594],{"class":237},"'pink老师'",[39,72596,32441],{"class":53},[39,72598,72599,72602,72604],{"class":41,"line":118},[39,72600,72601],{"class":53},"      age: ",[39,72603,1911],{"class":74},[39,72605,32441],{"class":53},[39,72607,72608,72611],{"class":41,"line":125},[39,72609,72610],{"class":53},"      gender: ",[39,72612,72613],{"class":237},"'女'\n",[39,72615,72616],{"class":41,"line":132},[39,72617,3284],{"class":53},[39,72619,72620],{"class":41,"line":138},[39,72621,72522],{"class":128},[39,72623,72624,72627,72630,72632,72635,72637,72640,72642,72645],{"class":41,"line":169},[39,72625,72626],{"class":53},"  localStorage.",[39,72628,72629],{"class":49},"setItem",[39,72631,54],{"class":53},[39,72633,72634],{"class":237},"'obj'",[39,72636,63],{"class":53},[39,72638,72639],{"class":74},"JSON",[39,72641,1819],{"class":53},[39,72643,72644],{"class":49},"stringify",[39,72646,72647],{"class":53},"(obj))\n",[39,72649,72650,72653,72655,72658,72661,72663,72665],{"class":41,"line":190},[39,72651,72652],{"class":53},"  console.",[39,72654,59222],{"class":49},[39,72656,72657],{"class":53},"(localStorage.",[39,72659,72660],{"class":49},"getItem",[39,72662,54],{"class":53},[39,72664,72634],{"class":237},[39,72666,31472],{"class":53},[39,72668,72669,72671,72673],{"class":41,"line":202},[39,72670,53392],{"class":53},[39,72672,52788],{"class":52275},[39,72674,52282],{"class":53},[39,72676,72677],{"class":41,"line":207},[39,72678,71596],{"class":53},[39,72680,72681],{"class":41,"line":212},[39,72682,72683],{"class":53},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[39,72685,72686],{"class":41,"line":223},[39,72687,72688],{"class":53},"  类型是字符串的\n",[39,72690,72691],{"class":41,"line":228},[39,72692,72693],{"class":53},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22971,72695,72697],{"id":72696},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,72699,72700],{},[2585,72701],{"alt":35,"src":72702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72704,72705],{},[2585,72706],{"alt":35,"src":72707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[30,72709,72711],{"className":54042,"code":72710,"language":54044,"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",[26,72712,72713,72721,72725,72729,72733,72737,72741,72746,72751,72756,72761,72766,72771,72776,72781],{"__ignoreMap":35},[39,72714,72715,72717,72719],{"class":41,"line":42},[39,72716,53119],{"class":53},[39,72718,52788],{"class":52275},[39,72720,52282],{"class":53},[39,72722,72723],{"class":41,"line":92},[39,72724,72498],{"class":53},[39,72726,72727],{"class":41,"line":112},[39,72728,72503],{"class":53},[39,72730,72731],{"class":41,"line":118},[39,72732,72508],{"class":53},[39,72734,72735],{"class":41,"line":125},[39,72736,72513],{"class":53},[39,72738,72739],{"class":41,"line":132},[39,72740,3284],{"class":53},[39,72742,72743],{"class":41,"line":138},[39,72744,72745],{"class":53},"    \u002F\u002F 1.存储复杂数据类型\n",[39,72747,72748],{"class":41,"line":169},[39,72749,72750],{"class":53},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[39,72752,72753],{"class":41,"line":190},[39,72754,72755],{"class":53},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[39,72757,72758],{"class":41,"line":202},[39,72759,72760],{"class":53},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[39,72762,72763],{"class":41,"line":207},[39,72764,72765],{"class":53},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[39,72767,72768],{"class":41,"line":212},[39,72769,72770],{"class":53},"    \u002F\u002F 取\n",[39,72772,72773],{"class":41,"line":223},[39,72774,72775],{"class":53},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[39,72777,72778],{"class":41,"line":228},[39,72779,72780],{"class":53},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[39,72782,72783,72785,72787],{"class":41,"line":263},[39,72784,53392],{"class":53},[39,72786,52788],{"class":52275},[39,72788,52282],{"class":53},[19,72790,72791],{},[2585,72792],{"alt":35,"src":72793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[476,72795,72797],{"id":72796},"_356-数组map方法","3.5.6 数组map方法",[19,72799,72800],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72802,72803],{},[2585,72804],{"alt":35,"src":72805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72807,72808],{},[2585,72809],{"alt":35,"src":72810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72812,72813,72816],{},[350,72814,72815],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72818,72819],{},"map有返回值，但是forEach没有返回值",[19,72821,72822],{},"map是个方法。用的时候要加 ()",[19,72824,72825],{},"map返回的是一个数组",[476,72827,72829],{"id":72828},"_357-数组中join方法","3.5.7 数组中join方法",[19,72831,72832],{},[2585,72833],{"alt":35,"src":72834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72836,72837],{},"类似于python中拼接字符串一样！",[328,72839,72840,72843,72846],{},[331,72841,72842],{},"小括号为空则逗号分开",[331,72844,72845],{},"小括号为空字符串 ''，则元素之间没有分隔符",[331,72847,72848],{},"小括号用啥符号就用进行分割",[476,72850,72852],{"id":72851},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[328,72854,72855,72858,72861,72864,72867],{},[331,72856,72857],{},"记住本地时间获取快速方式：new Date().toDateString()",[331,72859,72860],{},"尽量减少DOM操作，用好map+join的渲染方式",[331,72862,72863],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[331,72865,72866],{},"return可以实现函数的结束",[331,72868,72869],{},"禁止跳转是 preventDefault() 不要忘记",[30,72871,72873],{"className":51608,"code":72872,"language":51610,"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",[26,72874,72875,72885,72899,72903,72911,72925,72945,72957,72965,72971,72981,72991,72995,72999,73005,73015,73027,73031,73035,73042,73054,73068,73078,73082,73086,73093,73100,73107,73119,73131,73141,73153,73157,73161,73168,73175,73187,73199,73209,73221,73251,73255,73259,73266,73278,73290,73314,73324,73334,73338,73342,73350,73361,73373,73385,73397,73414,73426,73438,73442,73446,73453,73465,73477,73489,73500,73518,73531,73543,73567,73578,73582,73586,73594,73604,73608,73612,73618,73630,73641,73651,73655,73659,73665,73687,73691,73695,73701,73707,73719,73729,73741,73771,73784,73801,73805,73809,73820,73842,73852,73856,73860,73873,73883,73895,73907,73919,73931,73941,73951,73961,73972,73985,73989,73997,74005,74009,74017,74030,74050,74083,74116,74149,74175,74193,74211,74219,74245,74263,74281,74299,74317,74335,74343,74351,74369,74377,74406,74414,74422,74430,74443,74455,74467,74479,74491,74503,74516,74528,74536,74544,74552,74557,74562,74566,74570,74574,74578,74582,74586,74591,74596,74601,74606,74614,74622,74630,74635,74640,74645,74650,74655,74660,74665,74670,74675,74680,74685,74690,74695,74700,74704,74709,74714,74724,74733,74737,74742,74751,74767,74809,74849,74888,74953,74961,74965,74970,74988,74996,75001,75006,75036,75042,75047,75060,75072,75084,75096,75108,75120,75132,75136,75146,75150,75155,75160,75164,75173,75177,75182,75187,75206,75211,75231,75235,75240,75244,75249,75267,75285,75303,75322,75341,75360,75365,75371,75392,75398,75407,75413,75419,75425,75452,75465,75470,75480,75486,75492,75498,75504,75509,75515,75521,75527,75533,75566,75571,75576,75581,75586,75592,75598,75604,75615,75620,75626,75633,75647,75653,75677,75682,75687,75693,75699,75720,75726,75739,75745,75751,75757,75763,75768,75774,75780,75786,75804,75818,75824,75832,75838,75860,75865,75870,75875,75880,75885,75894,75903,75908],{"__ignoreMap":35},[39,72876,72877,72879,72881,72883],{"class":41,"line":42},[39,72878,52272],{"class":53},[39,72880,52276],{"class":52275},[39,72882,52279],{"class":49},[39,72884,52282],{"class":53},[39,72886,72887,72889,72891,72893,72895,72897],{"class":41,"line":92},[39,72888,2170],{"class":53},[39,72890,51610],{"class":52275},[39,72892,52291],{"class":49},[39,72894,1117],{"class":53},[39,72896,52296],{"class":237},[39,72898,52282],{"class":53},[39,72900,72901],{"class":41,"line":112},[39,72902,122],{"emptyLinePlaceholder":121},[39,72904,72905,72907,72909],{"class":41,"line":118},[39,72906,2170],{"class":53},[39,72908,52309],{"class":52275},[39,72910,52282],{"class":53},[39,72912,72913,72915,72917,72919,72921,72923],{"class":41,"line":125},[39,72914,53119],{"class":53},[39,72916,52319],{"class":52275},[39,72918,52322],{"class":49},[39,72920,1117],{"class":53},[39,72922,52327],{"class":237},[39,72924,52282],{"class":53},[39,72926,72927,72929,72931,72933,72935,72937,72939,72941,72943],{"class":41,"line":132},[39,72928,53119],{"class":53},[39,72930,52319],{"class":52275},[39,72932,15893],{"class":49},[39,72934,1117],{"class":53},[39,72936,52366],{"class":237},[39,72938,52346],{"class":49},[39,72940,1117],{"class":53},[39,72942,52373],{"class":237},[39,72944,52282],{"class":53},[39,72946,72947,72949,72951,72953,72955],{"class":41,"line":138},[39,72948,53119],{"class":53},[39,72950,52382],{"class":52275},[39,72952,52385],{"class":53},[39,72954,52382],{"class":52275},[39,72956,52282],{"class":53},[39,72958,72959,72961,72963],{"class":41,"line":169},[39,72960,53119],{"class":53},[39,72962,1192],{"class":52275},[39,72964,52282],{"class":53},[39,72966,72967,72969],{"class":41,"line":190},[39,72968,7479],{"class":52275},[39,72970,16545],{"class":53},[39,72972,72973,72975,72977,72979],{"class":41,"line":202},[39,72974,55670],{"class":74},[39,72976,52412],{"class":53},[39,72978,1457],{"class":74},[39,72980,318],{"class":53},[39,72982,72983,72985,72987,72989],{"class":41,"line":207},[39,72984,55681],{"class":74},[39,72986,52412],{"class":53},[39,72988,1457],{"class":74},[39,72990,318],{"class":53},[39,72992,72993],{"class":41,"line":212},[39,72994,3284],{"class":53},[39,72996,72997],{"class":41,"line":223},[39,72998,122],{"emptyLinePlaceholder":121},[39,73000,73001,73003],{"class":41,"line":228},[39,73002,58254],{"class":52275},[39,73004,16545],{"class":53},[39,73006,73007,73009,73011,73013],{"class":41,"line":263},[39,73008,58261],{"class":74},[39,73010,52412],{"class":53},[39,73012,52567],{"class":74},[39,73014,318],{"class":53},[39,73016,73017,73019,73021,73023,73025],{"class":41,"line":287},[39,73018,63052],{"class":74},[39,73020,52412],{"class":53},[39,73022,248],{"class":74},[39,73024,52467],{"class":45},[39,73026,318],{"class":53},[39,73028,73029],{"class":41,"line":292},[39,73030,3284],{"class":53},[39,73032,73033],{"class":41,"line":305},[39,73034,122],{"emptyLinePlaceholder":121},[39,73036,73037,73040],{"class":41,"line":310},[39,73038,73039],{"class":49},"    .info",[39,73041,16545],{"class":53},[39,73043,73044,73046,73048,73050,73052],{"class":41,"line":321},[39,73045,55746],{"class":74},[39,73047,52412],{"class":53},[39,73049,52464],{"class":74},[39,73051,52467],{"class":45},[39,73053,318],{"class":53},[39,73055,73056,73058,73060,73062,73064,73066],{"class":41,"line":713},[39,73057,55681],{"class":74},[39,73059,52412],{"class":53},[39,73061,423],{"class":74},[39,73063,52467],{"class":45},[39,73065,52531],{"class":74},[39,73067,318],{"class":53},[39,73069,73070,73072,73074,73076],{"class":41,"line":718},[39,73071,58261],{"class":74},[39,73073,52412],{"class":53},[39,73075,52567],{"class":74},[39,73077,318],{"class":53},[39,73079,73080],{"class":41,"line":723},[39,73081,3284],{"class":53},[39,73083,73084],{"class":41,"line":729},[39,73085,122],{"emptyLinePlaceholder":121},[39,73087,73088,73091],{"class":41,"line":735},[39,73089,73090],{"class":49},"    .uname",[39,73092,32441],{"class":53},[39,73094,73095,73098],{"class":41,"line":741},[39,73096,73097],{"class":49},"    .age",[39,73099,32441],{"class":53},[39,73101,73102,73105],{"class":41,"line":747},[39,73103,73104],{"class":49},"    .salary",[39,73106,16545],{"class":53},[39,73108,73109,73111,73113,73115,73117],{"class":41,"line":753},[39,73110,55746],{"class":74},[39,73112,52412],{"class":53},[39,73114,278],{"class":74},[39,73116,52467],{"class":45},[39,73118,318],{"class":53},[39,73120,73121,73123,73125,73127,73129],{"class":41,"line":758},[39,73122,55760],{"class":74},[39,73124,52412],{"class":53},[39,73126,248],{"class":74},[39,73128,52467],{"class":45},[39,73130,318],{"class":53},[39,73132,73133,73135,73137,73139],{"class":41,"line":763},[39,73134,62755],{"class":74},[39,73136,52412],{"class":53},[39,73138,55712],{"class":74},[39,73140,318],{"class":53},[39,73142,73143,73145,73147,73149,73151],{"class":41,"line":772},[39,73144,62725],{"class":74},[39,73146,52412],{"class":53},[39,73148,1836],{"class":74},[39,73150,52467],{"class":45},[39,73152,318],{"class":53},[39,73154,73155],{"class":41,"line":777},[39,73156,3284],{"class":53},[39,73158,73159],{"class":41,"line":785},[39,73160,122],{"emptyLinePlaceholder":121},[39,73162,73163,73166],{"class":41,"line":796},[39,73164,73165],{"class":49},"    .gender",[39,73167,32441],{"class":53},[39,73169,73170,73173],{"class":41,"line":808},[39,73171,73172],{"class":49},"    .city",[39,73174,16545],{"class":53},[39,73176,73177,73179,73181,73183,73185],{"class":41,"line":823},[39,73178,55746],{"class":74},[39,73180,52412],{"class":53},[39,73182,278],{"class":74},[39,73184,52467],{"class":45},[39,73186,318],{"class":53},[39,73188,73189,73191,73193,73195,73197],{"class":41,"line":839},[39,73190,55760],{"class":74},[39,73192,52412],{"class":53},[39,73194,2085],{"class":74},[39,73196,52467],{"class":45},[39,73198,318],{"class":53},[39,73200,73201,73203,73205,73207],{"class":41,"line":845},[39,73202,62755],{"class":74},[39,73204,52412],{"class":53},[39,73206,55712],{"class":74},[39,73208,318],{"class":53},[39,73210,73211,73213,73215,73217,73219],{"class":41,"line":856},[39,73212,62725],{"class":74},[39,73214,52412],{"class":53},[39,73216,1836],{"class":74},[39,73218,52467],{"class":45},[39,73220,318],{"class":53},[39,73222,73223,73225,73227,73229,73231,73233,73236,73238,73240,73242,73245,73247,73249],{"class":41,"line":861},[39,73224,62952],{"class":74},[39,73226,52412],{"class":53},[39,73228,1483],{"class":74},[39,73230,52467],{"class":45},[39,73232,52496],{"class":74},[39,73234,73235],{"class":74}," rgb",[39,73237,54],{"class":53},[39,73239,2832],{"class":74},[39,73241,63],{"class":53},[39,73243,73244],{"class":74},"197",[39,73246,63],{"class":53},[39,73248,73244],{"class":74},[39,73250,166],{"class":53},[39,73252,73253],{"class":41,"line":870},[39,73254,3284],{"class":53},[39,73256,73257],{"class":41,"line":9084},[39,73258,122],{"emptyLinePlaceholder":121},[39,73260,73261,73264],{"class":41,"line":9090},[39,73262,73263],{"class":52275},"    button",[39,73265,16545],{"class":53},[39,73267,73268,73270,73272,73274,73276],{"class":41,"line":9102},[39,73269,55760],{"class":74},[39,73271,52412],{"class":53},[39,73273,2085],{"class":74},[39,73275,52467],{"class":45},[39,73277,318],{"class":53},[39,73279,73280,73282,73284,73286,73288],{"class":41,"line":9114},[39,73281,55746],{"class":74},[39,73283,52412],{"class":53},[39,73285,1745],{"class":74},[39,73287,52467],{"class":45},[39,73289,318],{"class":53},[39,73291,73292,73294,73296,73299,73301,73303,73305,73308,73310,73312],{"class":41,"line":9126},[39,73293,55859],{"class":74},[39,73295,52412],{"class":53},[39,73297,73298],{"class":74},"rgb",[39,73300,54],{"class":53},[39,73302,2229],{"class":74},[39,73304,63],{"class":53},[39,73306,73307],{"class":74},"187",[39,73309,63],{"class":53},[39,73311,1564],{"class":74},[39,73313,166],{"class":53},[39,73315,73316,73318,73320,73322],{"class":41,"line":10784},[39,73317,58391],{"class":74},[39,73319,52412],{"class":53},[39,73321,61817],{"class":74},[39,73323,318],{"class":53},[39,73325,73326,73328,73330,73332],{"class":41,"line":10809},[39,73327,62952],{"class":74},[39,73329,52412],{"class":53},[39,73331,1457],{"class":74},[39,73333,318],{"class":53},[39,73335,73336],{"class":41,"line":10832},[39,73337,3284],{"class":53},[39,73339,73340],{"class":41,"line":10856},[39,73341,122],{"emptyLinePlaceholder":121},[39,73343,73344,73346,73348],{"class":41,"line":10861},[39,73345,73263],{"class":52275},[39,73347,52663],{"class":52275},[39,73349,16545],{"class":53},[39,73351,73352,73354,73356,73359],{"class":41,"line":10866},[39,73353,55984],{"class":74},[39,73355,52412],{"class":53},[39,73357,73358],{"class":74},"inline-block",[39,73360,318],{"class":53},[39,73362,73363,73365,73367,73369,73371],{"class":41,"line":10871},[39,73364,55746],{"class":74},[39,73366,52412],{"class":53},[39,73368,423],{"class":74},[39,73370,52467],{"class":45},[39,73372,318],{"class":53},[39,73374,73375,73377,73379,73381,73383],{"class":41,"line":10880},[39,73376,55760],{"class":74},[39,73378,52412],{"class":53},[39,73380,423],{"class":74},[39,73382,52467],{"class":45},[39,73384,318],{"class":53},[39,73386,73387,73389,73391,73393,73395],{"class":41,"line":10885},[39,73388,58334],{"class":74},[39,73390,52412],{"class":53},[39,73392,1734],{"class":74},[39,73394,52467],{"class":45},[39,73396,318],{"class":53},[39,73398,73399,73401,73403,73405,73407,73409,73412],{"class":41,"line":10891},[39,73400,62952],{"class":74},[39,73402,52412],{"class":53},[39,73404,1483],{"class":74},[39,73406,52467],{"class":45},[39,73408,52496],{"class":74},[39,73410,73411],{"class":74}," #fff",[39,73413,318],{"class":53},[39,73415,73416,73418,73420,73422,73424],{"class":41,"line":10912},[39,73417,56109],{"class":74},[39,73419,52412],{"class":53},[39,73421,1583],{"class":74},[39,73423,52467],{"class":45},[39,73425,318],{"class":53},[39,73427,73428,73430,73432,73434,73436],{"class":41,"line":10918},[39,73429,62725],{"class":74},[39,73431,52412],{"class":53},[39,73433,1483],{"class":74},[39,73435,52467],{"class":45},[39,73437,318],{"class":53},[39,73439,73440],{"class":41,"line":10932},[39,73441,3284],{"class":53},[39,73443,73444],{"class":41,"line":10938},[39,73445,122],{"emptyLinePlaceholder":121},[39,73447,73448,73451],{"class":41,"line":10965},[39,73449,73450],{"class":49},"    .total",[39,73452,16545],{"class":53},[39,73454,73455,73457,73459,73461,73463],{"class":41,"line":10974},[39,73456,55746],{"class":74},[39,73458,52412],{"class":53},[39,73460,62604],{"class":74},[39,73462,52467],{"class":45},[39,73464,318],{"class":53},[39,73466,73467,73469,73471,73473,73475],{"class":41,"line":10980},[39,73468,55760],{"class":74},[39,73470,52412],{"class":53},[39,73472,1664],{"class":74},[39,73474,52467],{"class":45},[39,73476,318],{"class":53},[39,73478,73479,73481,73483,73485,73487],{"class":41,"line":10988},[39,73480,58334],{"class":74},[39,73482,52412],{"class":53},[39,73484,1664],{"class":74},[39,73486,52467],{"class":45},[39,73488,318],{"class":53},[39,73490,73491,73493,73495,73498],{"class":41,"line":10993},[39,73492,58261],{"class":74},[39,73494,52412],{"class":53},[39,73496,73497],{"class":74},"right",[39,73499,318],{"class":53},[39,73501,73502,73504,73506,73508,73510,73512,73514,73516],{"class":41,"line":17577},[39,73503,55681],{"class":74},[39,73505,52412],{"class":53},[39,73507,1664],{"class":74},[39,73509,52467],{"class":45},[39,73511,52531],{"class":74},[39,73513,75],{"class":74},[39,73515,52467],{"class":45},[39,73517,318],{"class":53},[39,73519,73520,73523,73525,73527,73529],{"class":41,"line":17583},[39,73521,73522],{"class":74},"      padding-right",[39,73524,52412],{"class":53},[39,73526,423],{"class":74},[39,73528,52467],{"class":45},[39,73530,318],{"class":53},[39,73532,73533,73535,73537,73539,73541],{"class":41,"line":17606},[39,73534,55897],{"class":74},[39,73536,52412],{"class":53},[39,73538,1784],{"class":74},[39,73540,52467],{"class":45},[39,73542,318],{"class":53},[39,73544,73545,73547,73549,73551,73553,73556,73558,73561,73563,73565],{"class":41,"line":17612},[39,73546,55859],{"class":74},[39,73548,52412],{"class":53},[39,73550,73298],{"class":74},[39,73552,54],{"class":53},[39,73554,73555],{"class":74},"237",[39,73557,63],{"class":53},[39,73559,73560],{"class":74},"235",[39,73562,63],{"class":53},[39,73564,73560],{"class":74},[39,73566,166],{"class":53},[39,73568,73569,73572,73574,73576],{"class":41,"line":17635},[39,73570,73571],{"class":74},"      box-sizing",[39,73573,52412],{"class":53},[39,73575,61480],{"class":74},[39,73577,318],{"class":53},[39,73579,73580],{"class":41,"line":17649},[39,73581,3284],{"class":53},[39,73583,73584],{"class":41,"line":17669},[39,73585,122],{"emptyLinePlaceholder":121},[39,73587,73588,73590,73592],{"class":41,"line":17675},[39,73589,73450],{"class":49},[39,73591,52663],{"class":52275},[39,73593,16545],{"class":53},[39,73595,73596,73598,73600,73602],{"class":41,"line":17686},[39,73597,58391],{"class":74},[39,73599,52412],{"class":53},[39,73601,58396],{"class":74},[39,73603,318],{"class":53},[39,73605,73606],{"class":41,"line":17709},[39,73607,3284],{"class":53},[39,73609,73610],{"class":41,"line":17731},[39,73611,122],{"emptyLinePlaceholder":121},[39,73613,73614,73616],{"class":41,"line":17736},[39,73615,65998],{"class":52275},[39,73617,16545],{"class":53},[39,73619,73620,73622,73624,73626,73628],{"class":41,"line":17742},[39,73621,55746],{"class":74},[39,73623,52412],{"class":53},[39,73625,62604],{"class":74},[39,73627,52467],{"class":45},[39,73629,318],{"class":53},[39,73631,73632,73634,73636,73639],{"class":41,"line":17756},[39,73633,55681],{"class":74},[39,73635,52412],{"class":53},[39,73637,73638],{"class":74},"auto",[39,73640,318],{"class":53},[39,73642,73643,73645,73647,73649],{"class":41,"line":17769},[39,73644,66005],{"class":74},[39,73646,52412],{"class":53},[39,73648,66010],{"class":74},[39,73650,318],{"class":53},[39,73652,73653],{"class":41,"line":17774},[39,73654,3284],{"class":53},[39,73656,73657],{"class":41,"line":17788},[39,73658,122],{"emptyLinePlaceholder":121},[39,73660,73661,73663],{"class":41,"line":17793},[39,73662,66090],{"class":52275},[39,73664,16545],{"class":53},[39,73666,73667,73669,73671,73673,73675,73677,73679,73681,73683,73685],{"class":41,"line":17799},[39,73668,55859],{"class":74},[39,73670,52412],{"class":53},[39,73672,73298],{"class":74},[39,73674,54],{"class":53},[39,73676,73555],{"class":74},[39,73678,63],{"class":53},[39,73680,73560],{"class":74},[39,73682,63],{"class":53},[39,73684,73560],{"class":74},[39,73686,166],{"class":53},[39,73688,73689],{"class":41,"line":17804},[39,73690,3284],{"class":53},[39,73692,73693],{"class":41,"line":17818},[39,73694,122],{"emptyLinePlaceholder":121},[39,73696,73697,73699],{"class":41,"line":17823},[39,73698,66090],{"class":52275},[39,73700,32441],{"class":53},[39,73702,73703,73705],{"class":41,"line":17828},[39,73704,66156],{"class":52275},[39,73706,16545],{"class":53},[39,73708,73709,73711,73713,73715,73717],{"class":41,"line":17842},[39,73710,55760],{"class":74},[39,73712,52412],{"class":53},[39,73714,1538],{"class":74},[39,73716,52467],{"class":45},[39,73718,318],{"class":53},[39,73720,73721,73723,73725,73727],{"class":41,"line":17854},[39,73722,58261],{"class":74},[39,73724,52412],{"class":53},[39,73726,24710],{"class":74},[39,73728,318],{"class":53},[39,73730,73731,73733,73735,73737,73739],{"class":41,"line":17859},[39,73732,55897],{"class":74},[39,73734,52412],{"class":53},[39,73736,1810],{"class":74},[39,73738,52467],{"class":45},[39,73740,318],{"class":53},[39,73742,73743,73745,73747,73749,73751,73753,73755,73757,73760,73762,73765,73767,73769],{"class":41,"line":17872},[39,73744,62952],{"class":74},[39,73746,52412],{"class":53},[39,73748,1483],{"class":74},[39,73750,52467],{"class":45},[39,73752,52496],{"class":74},[39,73754,73235],{"class":74},[39,73756,54],{"class":53},[39,73758,73759],{"class":74},"228",[39,73761,63],{"class":53},[39,73763,73764],{"class":74},"225",[39,73766,63],{"class":53},[39,73768,73764],{"class":74},[39,73770,166],{"class":53},[39,73772,73773,73776,73778,73780,73782],{"class":41,"line":17877},[39,73774,73775],{"class":74},"      padding-left",[39,73777,52412],{"class":53},[39,73779,1583],{"class":74},[39,73781,52467],{"class":45},[39,73783,318],{"class":53},[39,73785,73786,73788,73790,73792,73795,73797,73799],{"class":41,"line":17882},[39,73787,62835],{"class":74},[39,73789,52412],{"class":53},[39,73791,29096],{"class":74},[39,73793,73794],{"class":74}," linear",[39,73796,62842],{"class":74},[39,73798,1956],{"class":45},[39,73800,318],{"class":53},[39,73802,73803],{"class":41,"line":17887},[39,73804,3284],{"class":53},[39,73806,73807],{"class":41,"line":17900},[39,73808,122],{"emptyLinePlaceholder":121},[39,73810,73811,73814,73816,73818],{"class":41,"line":17905},[39,73812,73813],{"class":52275},"    tbody",[39,73815,71119],{"class":52275},[39,73817,61915],{"class":49},[39,73819,16545],{"class":53},[39,73821,73822,73824,73826,73828,73830,73832,73834,73836,73838,73840],{"class":41,"line":33608},[39,73823,55859],{"class":74},[39,73825,52412],{"class":53},[39,73827,73298],{"class":74},[39,73829,54],{"class":53},[39,73831,73555],{"class":74},[39,73833,63],{"class":53},[39,73835,73560],{"class":74},[39,73837,63],{"class":53},[39,73839,73560],{"class":74},[39,73841,166],{"class":53},[39,73843,73844,73846,73848,73850],{"class":41,"line":33614},[39,73845,63000],{"class":74},[39,73847,52412],{"class":53},[39,73849,63005],{"class":74},[39,73851,318],{"class":53},[39,73853,73854],{"class":41,"line":33620},[39,73855,3284],{"class":53},[39,73857,73858],{"class":41,"line":33626},[39,73859,122],{"emptyLinePlaceholder":121},[39,73861,73862,73864,73866,73869,73871],{"class":41,"line":33632},[39,73863,73813],{"class":52275},[39,73865,71119],{"class":52275},[39,73867,73868],{"class":52275}," td",[39,73870,60],{"class":52275},[39,73872,16545],{"class":53},[39,73874,73875,73877,73879,73881],{"class":41,"line":33643},[39,73876,55984],{"class":74},[39,73878,52412],{"class":53},[39,73880,61844],{"class":74},[39,73882,318],{"class":53},[39,73884,73885,73887,73889,73891,73893],{"class":41,"line":33649},[39,73886,55746],{"class":74},[39,73888,52412],{"class":53},[39,73890,2167],{"class":74},[39,73892,52467],{"class":45},[39,73894,318],{"class":53},[39,73896,73897,73899,73901,73903,73905],{"class":41,"line":33669},[39,73898,55760],{"class":74},[39,73900,52412],{"class":53},[39,73902,2085],{"class":74},[39,73904,52467],{"class":45},[39,73906,318],{"class":53},[39,73908,73909,73911,73913,73915,73917],{"class":41,"line":33675},[39,73910,58334],{"class":74},[39,73912,52412],{"class":53},[39,73914,2085],{"class":74},[39,73916,52467],{"class":45},[39,73918,318],{"class":53},[39,73920,73921,73923,73925,73927,73929],{"class":41,"line":33686},[39,73922,63052],{"class":74},[39,73924,52412],{"class":53},[39,73926,1345],{"class":74},[39,73928,52467],{"class":45},[39,73930,318],{"class":53},[39,73932,73933,73935,73937,73939],{"class":41,"line":33692},[39,73934,58391],{"class":74},[39,73936,52412],{"class":53},[39,73938,61817],{"class":74},[39,73940,318],{"class":53},[39,73942,73943,73945,73947,73949],{"class":41,"line":33698},[39,73944,58261],{"class":74},[39,73946,52412],{"class":53},[39,73948,52567],{"class":74},[39,73950,318],{"class":53},[39,73952,73953,73955,73957,73959],{"class":41,"line":33704},[39,73954,64945],{"class":74},[39,73956,52412],{"class":53},[39,73958,55712],{"class":74},[39,73960,318],{"class":53},[39,73962,73963,73965,73967,73970],{"class":41,"line":33710},[39,73964,55859],{"class":74},[39,73966,52412],{"class":53},[39,73968,73969],{"class":74},"orange",[39,73971,318],{"class":53},[39,73973,73974,73976,73978,73981,73983],{"class":41,"line":33716},[39,73975,56109],{"class":74},[39,73977,52412],{"class":53},[39,73979,73980],{"class":74},"12.5",[39,73982,52467],{"class":45},[39,73984,318],{"class":53},[39,73986,73987],{"class":41,"line":33722},[39,73988,3284],{"class":53},[39,73990,73991,73993,73995],{"class":41,"line":33728},[39,73992,53392],{"class":53},[39,73994,1192],{"class":52275},[39,73996,52282],{"class":53},[39,73998,73999,74001,74003],{"class":41,"line":33748},[39,74000,52760],{"class":53},[39,74002,52309],{"class":52275},[39,74004,52282],{"class":53},[39,74006,74007],{"class":41,"line":33754},[39,74008,122],{"emptyLinePlaceholder":121},[39,74010,74011,74013,74015],{"class":41,"line":33770},[39,74012,2170],{"class":53},[39,74014,52775],{"class":52275},[39,74016,52282],{"class":53},[39,74018,74019,74021,74023,74026,74028],{"class":41,"line":33776},[39,74020,53119],{"class":53},[39,74022,14],{"class":52275},[39,74024,74025],{"class":53},">学生就业统计表\u003C\u002F",[39,74027,14],{"class":52275},[39,74029,52282],{"class":53},[39,74031,74032,74034,74036,74038,74040,74042,74044,74046,74048],{"class":41,"line":33790},[39,74033,53119],{"class":53},[39,74035,67600],{"class":52275},[39,74037,54461],{"class":49},[39,74039,1117],{"class":53},[39,74041,63639],{"class":237},[39,74043,70045],{"class":49},[39,74045,1117],{"class":53},[39,74047,32751],{"class":237},[39,74049,52282],{"class":53},[39,74051,74052,74054,74056,74058,74060,74062,74064,74066,74068,74070,74072,74075,74077,74079,74081],{"class":41,"line":33796},[39,74053,52316],{"class":53},[39,74055,54796],{"class":52275},[39,74057,54799],{"class":49},[39,74059,1117],{"class":53},[39,74061,63674],{"class":237},[39,74063,15893],{"class":49},[39,74065,1117],{"class":53},[39,74067,70071],{"class":237},[39,74069,61995],{"class":49},[39,74071,1117],{"class":53},[39,74073,74074],{"class":237},"\"姓名\"",[39,74076,54461],{"class":49},[39,74078,1117],{"class":53},[39,74080,70071],{"class":237},[39,74082,52282],{"class":53},[39,74084,74085,74087,74089,74091,74093,74095,74097,74099,74101,74103,74105,74108,74110,74112,74114],{"class":41,"line":33811},[39,74086,52316],{"class":53},[39,74088,54796],{"class":52275},[39,74090,54799],{"class":49},[39,74092,1117],{"class":53},[39,74094,63674],{"class":237},[39,74096,15893],{"class":49},[39,74098,1117],{"class":53},[39,74100,70099],{"class":237},[39,74102,61995],{"class":49},[39,74104,1117],{"class":53},[39,74106,74107],{"class":237},"\"年龄\"",[39,74109,54461],{"class":49},[39,74111,1117],{"class":53},[39,74113,70099],{"class":237},[39,74115,52282],{"class":53},[39,74117,74118,74120,74122,74124,74126,74128,74130,74132,74134,74136,74138,74141,74143,74145,74147],{"class":41,"line":33817},[39,74119,52316],{"class":53},[39,74121,54796],{"class":52275},[39,74123,54799],{"class":49},[39,74125,1117],{"class":53},[39,74127,63674],{"class":237},[39,74129,15893],{"class":49},[39,74131,1117],{"class":53},[39,74133,70201],{"class":237},[39,74135,61995],{"class":49},[39,74137,1117],{"class":53},[39,74139,74140],{"class":237},"\"薪资\"",[39,74142,54461],{"class":49},[39,74144,1117],{"class":53},[39,74146,70201],{"class":237},[39,74148,52282],{"class":53},[39,74150,74151,74153,74155,74157,74159,74161,74163,74165,74167,74169,74171,74173],{"class":41,"line":33826},[39,74152,52316],{"class":53},[39,74154,70119],{"class":52275},[39,74156,15893],{"class":49},[39,74158,1117],{"class":53},[39,74160,70126],{"class":237},[39,74162,15932],{"class":49},[39,74164,1117],{"class":53},[39,74166,8726],{"class":237},[39,74168,54461],{"class":49},[39,74170,1117],{"class":53},[39,74172,70126],{"class":237},[39,74174,52282],{"class":53},[39,74176,74177,74179,74181,74183,74185,74187,74189,74191],{"class":41,"line":33832},[39,74178,56209],{"class":53},[39,74180,70141],{"class":52275},[39,74182,67626],{"class":49},[39,74184,1117],{"class":53},[39,74186,11027],{"class":237},[39,74188,70150],{"class":53},[39,74190,70141],{"class":52275},[39,74192,52282],{"class":53},[39,74194,74195,74197,74199,74201,74203,74205,74207,74209],{"class":41,"line":33841},[39,74196,56209],{"class":53},[39,74198,70141],{"class":52275},[39,74200,67626],{"class":49},[39,74202,1117],{"class":53},[39,74204,11096],{"class":237},[39,74206,70169],{"class":53},[39,74208,70141],{"class":52275},[39,74210,52282],{"class":53},[39,74212,74213,74215,74217],{"class":41,"line":33847},[39,74214,52751],{"class":53},[39,74216,70119],{"class":52275},[39,74218,52282],{"class":53},[39,74220,74221,74223,74225,74227,74229,74231,74233,74235,74237,74239,74241,74243],{"class":41,"line":33853},[39,74222,52316],{"class":53},[39,74224,70119],{"class":52275},[39,74226,15893],{"class":49},[39,74228,1117],{"class":53},[39,74230,70223],{"class":237},[39,74232,15932],{"class":49},[39,74234,1117],{"class":53},[39,74236,8726],{"class":237},[39,74238,54461],{"class":49},[39,74240,1117],{"class":53},[39,74242,70223],{"class":237},[39,74244,52282],{"class":53},[39,74246,74247,74249,74251,74253,74255,74257,74259,74261],{"class":41,"line":33862},[39,74248,56209],{"class":53},[39,74250,70141],{"class":52275},[39,74252,67626],{"class":49},[39,74254,1117],{"class":53},[39,74256,70244],{"class":237},[39,74258,70247],{"class":53},[39,74260,70141],{"class":52275},[39,74262,52282],{"class":53},[39,74264,74265,74267,74269,74271,74273,74275,74277,74279],{"class":41,"line":33868},[39,74266,56209],{"class":53},[39,74268,70141],{"class":52275},[39,74270,67626],{"class":49},[39,74272,1117],{"class":53},[39,74274,70264],{"class":237},[39,74276,70267],{"class":53},[39,74278,70141],{"class":52275},[39,74280,52282],{"class":53},[39,74282,74283,74285,74287,74289,74291,74293,74295,74297],{"class":41,"line":33879},[39,74284,56209],{"class":53},[39,74286,70141],{"class":52275},[39,74288,67626],{"class":49},[39,74290,1117],{"class":53},[39,74292,70284],{"class":237},[39,74294,70287],{"class":53},[39,74296,70141],{"class":52275},[39,74298,52282],{"class":53},[39,74300,74301,74303,74305,74307,74309,74311,74313,74315],{"class":41,"line":33885},[39,74302,56209],{"class":53},[39,74304,70141],{"class":52275},[39,74306,67626],{"class":49},[39,74308,1117],{"class":53},[39,74310,70304],{"class":237},[39,74312,70307],{"class":53},[39,74314,70141],{"class":52275},[39,74316,52282],{"class":53},[39,74318,74319,74321,74323,74325,74327,74329,74331,74333],{"class":41,"line":33904},[39,74320,56209],{"class":53},[39,74322,70141],{"class":52275},[39,74324,67626],{"class":49},[39,74326,1117],{"class":53},[39,74328,70324],{"class":237},[39,74330,70327],{"class":53},[39,74332,70141],{"class":52275},[39,74334,52282],{"class":53},[39,74336,74337,74339,74341],{"class":41,"line":33910},[39,74338,52751],{"class":53},[39,74340,70119],{"class":52275},[39,74342,52282],{"class":53},[39,74344,74345,74347,74349],{"class":41,"line":33921},[39,74346,52316],{"class":53},[39,74348,54862],{"class":52275},[39,74350,52282],{"class":53},[39,74352,74353,74355,74357,74360,74362,74365,74367],{"class":41,"line":33927},[39,74354,56209],{"class":53},[39,74356,39],{"class":52275},[39,74358,74359],{"class":53},">+\u003C\u002F",[39,74361,39],{"class":52275},[39,74363,74364],{"class":53},">添加\u003C\u002F",[39,74366,54862],{"class":52275},[39,74368,52282],{"class":53},[39,74370,74371,74373,74375],{"class":41,"line":33947},[39,74372,53392],{"class":53},[39,74374,67600],{"class":52275},[39,74376,52282],{"class":53},[39,74378,74379,74381,74383,74385,74387,74389,74392,74394,74397,74399,74402,74404],{"class":41,"line":33963},[39,74380,53119],{"class":53},[39,74382,52586],{"class":52275},[39,74384,54461],{"class":49},[39,74386,1117],{"class":53},[39,74388,63555],{"class":237},[39,74390,74391],{"class":53},">共有数据 \u003C",[39,74393,39],{"class":52275},[39,74395,74396],{"class":53},">0\u003C\u002F",[39,74398,39],{"class":52275},[39,74400,74401],{"class":53},"> 条\u003C\u002F",[39,74403,52586],{"class":52275},[39,74405,52282],{"class":53},[39,74407,74408,74410,74412],{"class":41,"line":33969},[39,74409,53119],{"class":53},[39,74411,1404],{"class":52275},[39,74413,52282],{"class":53},[39,74415,74416,74418,74420],{"class":41,"line":33983},[39,74417,52316],{"class":53},[39,74419,1407],{"class":52275},[39,74421,52282],{"class":53},[39,74423,74424,74426,74428],{"class":41,"line":33989},[39,74425,56209],{"class":53},[39,74427,1410],{"class":52275},[39,74429,52282],{"class":53},[39,74431,74432,74434,74436,74439,74441],{"class":41,"line":33995},[39,74433,56277],{"class":53},[39,74435,1413],{"class":52275},[39,74437,74438],{"class":53},">ID\u003C\u002F",[39,74440,1413],{"class":52275},[39,74442,52282],{"class":53},[39,74444,74445,74447,74449,74451,74453],{"class":41,"line":34006},[39,74446,56277],{"class":53},[39,74448,1413],{"class":52275},[39,74450,70430],{"class":53},[39,74452,1413],{"class":52275},[39,74454,52282],{"class":53},[39,74456,74457,74459,74461,74463,74465],{"class":41,"line":34012},[39,74458,56277],{"class":53},[39,74460,1413],{"class":52275},[39,74462,70443],{"class":53},[39,74464,1413],{"class":52275},[39,74466,52282],{"class":53},[39,74468,74469,74471,74473,74475,74477],{"class":41,"line":34018},[39,74470,56277],{"class":53},[39,74472,1413],{"class":52275},[39,74474,70456],{"class":53},[39,74476,1413],{"class":52275},[39,74478,52282],{"class":53},[39,74480,74481,74483,74485,74487,74489],{"class":41,"line":34028},[39,74482,56277],{"class":53},[39,74484,1413],{"class":52275},[39,74486,70469],{"class":53},[39,74488,1413],{"class":52275},[39,74490,52282],{"class":53},[39,74492,74493,74495,74497,74499,74501],{"class":41,"line":34034},[39,74494,56277],{"class":53},[39,74496,1413],{"class":52275},[39,74498,70482],{"class":53},[39,74500,1413],{"class":52275},[39,74502,52282],{"class":53},[39,74504,74505,74507,74509,74512,74514],{"class":41,"line":34045},[39,74506,56277],{"class":53},[39,74508,1413],{"class":52275},[39,74510,74511],{"class":53},">录入时间\u003C\u002F",[39,74513,1413],{"class":52275},[39,74515,52282],{"class":53},[39,74517,74518,74520,74522,74524,74526],{"class":41,"line":34051},[39,74519,56277],{"class":53},[39,74521,1413],{"class":52275},[39,74523,70495],{"class":53},[39,74525,1413],{"class":52275},[39,74527,52282],{"class":53},[39,74529,74530,74532,74534],{"class":41,"line":34061},[39,74531,56382],{"class":53},[39,74533,1410],{"class":52275},[39,74535,52282],{"class":53},[39,74537,74538,74540,74542],{"class":41,"line":34066},[39,74539,52751],{"class":53},[39,74541,1407],{"class":52275},[39,74543,52282],{"class":53},[39,74545,74546,74548,74550],{"class":41,"line":34072},[39,74547,52316],{"class":53},[39,74549,1450],{"class":52275},[39,74551,52282],{"class":53},[39,74553,74554],{"class":41,"line":34121},[39,74555,74556],{"class":128},"      \u003C!-- \u003Ctr>\n",[39,74558,74559],{"class":41,"line":34168},[39,74560,74561],{"class":128},"        \u003Ctd>1\u003C\u002Ftd>\n",[39,74563,74564],{"class":41,"line":34173},[39,74565,74561],{"class":128},[39,74567,74568],{"class":41,"line":34179},[39,74569,74561],{"class":128},[39,74571,74572],{"class":41,"line":34198},[39,74573,74561],{"class":128},[39,74575,74576],{"class":41,"line":34204},[39,74577,74561],{"class":128},[39,74579,74580],{"class":41,"line":34224},[39,74581,74561],{"class":128},[39,74583,74584],{"class":41,"line":34230},[39,74585,74561],{"class":128},[39,74587,74588],{"class":41,"line":34236},[39,74589,74590],{"class":128},"        \u003Ctd>\n",[39,74592,74593],{"class":41,"line":34246},[39,74594,74595],{"class":128},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[39,74597,74598],{"class":41,"line":34251},[39,74599,74600],{"class":128},"        \u003C\u002Ftd>\n",[39,74602,74603],{"class":41,"line":34257},[39,74604,74605],{"class":128},"      \u003C\u002Ftr> -->\n",[39,74607,74608,74610,74612],{"class":41,"line":34273},[39,74609,52751],{"class":53},[39,74611,1450],{"class":52275},[39,74613,52282],{"class":53},[39,74615,74616,74618,74620],{"class":41,"line":34318},[39,74617,53392],{"class":53},[39,74619,1404],{"class":52275},[39,74621,52282],{"class":53},[39,74623,74624,74626,74628],{"class":41,"line":34324},[39,74625,53119],{"class":53},[39,74627,52788],{"class":52275},[39,74629,52282],{"class":53},[39,74631,74632],{"class":41,"line":34330},[39,74633,74634],{"class":128},"    \u002F\u002F const initData = [{\n",[39,74636,74637],{"class":41,"line":34336},[39,74638,74639],{"class":128},"    \u002F\u002F   unameId: 1,\n",[39,74641,74642],{"class":41,"line":34347},[39,74643,74644],{"class":128},"    \u002F\u002F   uname: '华晨宇',\n",[39,74646,74647],{"class":41,"line":34353},[39,74648,74649],{"class":128},"    \u002F\u002F   age: 22,\n",[39,74651,74652],{"class":41,"line":34359},[39,74653,74654],{"class":128},"    \u002F\u002F   salary: 12000,\n",[39,74656,74657],{"class":41,"line":34365},[39,74658,74659],{"class":128},"    \u002F\u002F   gender: '男',\n",[39,74661,74662],{"class":41,"line":34383},[39,74663,74664],{"class":128},"    \u002F\u002F   city: '北京',\n",[39,74666,74667],{"class":41,"line":34397},[39,74668,74669],{"class":128},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[39,74671,74672],{"class":41,"line":34406},[39,74673,74674],{"class":128},"    \u002F\u002F }]\n",[39,74676,74677],{"class":41,"line":34415},[39,74678,74679],{"class":128},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[39,74681,74682],{"class":41,"line":34424},[39,74683,74684],{"class":128},"    \u002F\u002F 1.渲染业务\n",[39,74686,74687],{"class":41,"line":34433},[39,74688,74689],{"class":128},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[39,74691,74692],{"class":41,"line":34439},[39,74693,74694],{"class":128},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[39,74696,74697],{"class":41,"line":34445},[39,74698,74699],{"class":128},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[39,74701,74702],{"class":41,"line":34453},[39,74703,122],{"emptyLinePlaceholder":121},[39,74705,74706],{"class":41,"line":34458},[39,74707,74708],{"class":128},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[39,74710,74711],{"class":41,"line":34464},[39,74712,74713],{"class":128},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[39,74715,74716,74718,74720,74722],{"class":41,"line":34475},[39,74717,12283],{"class":45},[39,74719,58670],{"class":74},[39,74721,71],{"class":45},[39,74723,52813],{"class":53},[39,74725,74726,74729,74731],{"class":41,"line":34481},[39,74727,74728],{"class":53},"    console.",[39,74730,59222],{"class":49},[39,74732,53387],{"class":53},[39,74734,74735],{"class":41,"line":34501},[39,74736,122],{"emptyLinePlaceholder":121},[39,74738,74739],{"class":41,"line":34507},[39,74740,74741],{"class":128},"    \u002F\u002F 时间函数\n",[39,74743,74744,74746,74749],{"class":41,"line":34513},[39,74745,71059],{"class":45},[39,74747,74748],{"class":49}," getTime",[39,74750,220],{"class":53},[39,74752,74753,74755,74758,74760,74762,74765],{"class":41,"line":34519},[39,74754,59203],{"class":45},[39,74756,74757],{"class":74}," date",[39,74759,71],{"class":45},[39,74761,12638],{"class":45},[39,74763,74764],{"class":49}," Date",[39,74766,537],{"class":53},[39,74768,74769,74771,74773,74775,74778,74781,74783,74785,74787,74790,74793,74795,74797,74799,74801,74803,74805,74807],{"class":41,"line":34536},[39,74770,59203],{"class":45},[39,74772,17064],{"class":74},[39,74774,71],{"class":45},[39,74776,74777],{"class":53}," date.",[39,74779,74780],{"class":49},"getHours",[39,74782,14107],{"class":53},[39,74784,2170],{"class":45},[39,74786,75],{"class":74},[39,74788,74789],{"class":45}," ?",[39,74791,74792],{"class":237}," '0'",[39,74794,46541],{"class":45},[39,74796,74777],{"class":53},[39,74798,74780],{"class":49},[39,74800,14107],{"class":53},[39,74802,2119],{"class":45},[39,74804,74777],{"class":53},[39,74806,74780],{"class":49},[39,74808,537],{"class":53},[39,74810,74811,74813,74816,74818,74820,74823,74825,74827,74829,74831,74833,74835,74837,74839,74841,74843,74845,74847],{"class":41,"line":34542},[39,74812,59203],{"class":45},[39,74814,74815],{"class":74}," m",[39,74817,71],{"class":45},[39,74819,74777],{"class":53},[39,74821,74822],{"class":49},"getMinutes",[39,74824,14107],{"class":53},[39,74826,2170],{"class":45},[39,74828,75],{"class":74},[39,74830,74789],{"class":45},[39,74832,74792],{"class":237},[39,74834,46541],{"class":45},[39,74836,74777],{"class":53},[39,74838,74822],{"class":49},[39,74840,14107],{"class":53},[39,74842,2119],{"class":45},[39,74844,74777],{"class":53},[39,74846,74822],{"class":49},[39,74848,537],{"class":53},[39,74850,74851,74853,74855,74857,74859,74862,74864,74866,74868,74870,74872,74874,74876,74878,74880,74882,74884,74886],{"class":41,"line":34548},[39,74852,59203],{"class":45},[39,74854,9497],{"class":74},[39,74856,71],{"class":45},[39,74858,74777],{"class":53},[39,74860,74861],{"class":49},"getSeconds",[39,74863,14107],{"class":53},[39,74865,2170],{"class":45},[39,74867,75],{"class":74},[39,74869,74789],{"class":45},[39,74871,74792],{"class":237},[39,74873,46541],{"class":45},[39,74875,74777],{"class":53},[39,74877,74861],{"class":49},[39,74879,14107],{"class":53},[39,74881,2119],{"class":45},[39,74883,74777],{"class":53},[39,74885,74861],{"class":49},[39,74887,537],{"class":53},[39,74889,74890,74892,74895,74897,74899,74902,74904,74907,74909,74912,74914,74916,74919,74921,74923,74925,74927,74929,74931,74934,74936,74939,74941,74944,74946,74948,74950],{"class":41,"line":34554},[39,74891,59203],{"class":45},[39,74893,74894],{"class":74}," str",[39,74896,71],{"class":45},[39,74898,63878],{"class":237},[39,74900,74901],{"class":53},"date",[39,74903,1819],{"class":237},[39,74905,74906],{"class":49},"getFullYear",[39,74908,3520],{"class":237},[39,74910,74911],{"class":237},"}\u002F${",[39,74913,74901],{"class":53},[39,74915,1819],{"class":237},[39,74917,74918],{"class":49},"getMonth",[39,74920,14107],{"class":237},[39,74922,101],{"class":45},[39,74924,26093],{"class":74},[39,74926,74911],{"class":237},[39,74928,74901],{"class":53},[39,74930,1819],{"class":237},[39,74932,74933],{"class":49},"getDate",[39,74935,3520],{"class":237},[39,74937,74938],{"class":237},"} ${",[39,74940,1678],{"class":53},[39,74942,74943],{"class":237},"}:${",[39,74945,1805],{"class":53},[39,74947,74943],{"class":237},[39,74949,1956],{"class":53},[39,74951,74952],{"class":237},"}`\n",[39,74954,74955,74958],{"class":41,"line":34560},[39,74956,74957],{"class":45},"      return",[39,74959,74960],{"class":53}," str\n",[39,74962,74963],{"class":41,"line":34566},[39,74964,3284],{"class":53},[39,74966,74967],{"class":41,"line":34593},[39,74968,74969],{"class":128},"    \u002F\u002F 渲染函数\n",[39,74971,74972,74974,74976,74978,74980,74982,74984,74986],{"class":41,"line":34617},[39,74973,12283],{"class":45},[39,74975,70722],{"class":74},[39,74977,71],{"class":45},[39,74979,55371],{"class":53},[39,74981,55374],{"class":49},[39,74983,54],{"class":53},[39,74985,70733],{"class":237},[39,74987,574],{"class":53},[39,74989,74990,74992,74994],{"class":41,"line":34623},[39,74991,71059],{"class":45},[39,74993,71062],{"class":49},[39,74995,220],{"class":53},[39,74997,74998],{"class":41,"line":34629},[39,74999,75000],{"class":128},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[39,75002,75003],{"class":41,"line":34635},[39,75004,75005],{"class":128},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[39,75007,75008,75010,75013,75015,75017,75020,75022,75024,75026,75029,75031,75034],{"class":41,"line":34646},[39,75009,59203],{"class":45},[39,75011,75012],{"class":74}," trArr",[39,75014,71],{"class":45},[39,75016,52940],{"class":53},[39,75018,75019],{"class":49},"map",[39,75021,54],{"class":53},[39,75023,55424],{"class":45},[39,75025,2772],{"class":53},[39,75027,75028],{"class":59},"ele",[39,75030,63],{"class":53},[39,75032,75033],{"class":59},"index",[39,75035,89],{"class":53},[39,75037,75038,75040],{"class":41,"line":34657},[39,75039,15725],{"class":45},[39,75041,71143],{"class":237},[39,75043,75044],{"class":41,"line":34663},[39,75045,75046],{"class":237},"      \u003Ctr>\n",[39,75048,75049,75051,75053,75055,75058],{"class":41,"line":34680},[39,75050,71148],{"class":237},[39,75052,75028],{"class":53},[39,75054,1819],{"class":237},[39,75056,75057],{"class":53},"unameId",[39,75059,71163],{"class":237},[39,75061,75062,75064,75066,75068,75070],{"class":41,"line":34703},[39,75063,71148],{"class":237},[39,75065,75028],{"class":53},[39,75067,1819],{"class":237},[39,75069,71179],{"class":53},[39,75071,71163],{"class":237},[39,75073,75074,75076,75078,75080,75082],{"class":41,"line":34726},[39,75075,71148],{"class":237},[39,75077,75028],{"class":53},[39,75079,1819],{"class":237},[39,75081,71196],{"class":53},[39,75083,71163],{"class":237},[39,75085,75086,75088,75090,75092,75094],{"class":41,"line":34732},[39,75087,71148],{"class":237},[39,75089,75028],{"class":53},[39,75091,1819],{"class":237},[39,75093,71213],{"class":53},[39,75095,71163],{"class":237},[39,75097,75098,75100,75102,75104,75106],{"class":41,"line":34737},[39,75099,71148],{"class":237},[39,75101,75028],{"class":53},[39,75103,1819],{"class":237},[39,75105,71230],{"class":53},[39,75107,71163],{"class":237},[39,75109,75110,75112,75114,75116,75118],{"class":41,"line":34746},[39,75111,71148],{"class":237},[39,75113,75028],{"class":53},[39,75115,1819],{"class":237},[39,75117,71247],{"class":53},[39,75119,71163],{"class":237},[39,75121,75122,75124,75126,75128,75130],{"class":41,"line":34756},[39,75123,71148],{"class":237},[39,75125,75028],{"class":53},[39,75127,1819],{"class":237},[39,75129,3481],{"class":53},[39,75131,71163],{"class":237},[39,75133,75134],{"class":41,"line":34762},[39,75135,74590],{"class":237},[39,75137,75138,75141,75143],{"class":41,"line":34767},[39,75139,75140],{"class":237},"          \u003Ca href=\"#\" data-id=\"${",[39,75142,75033],{"class":53},[39,75144,75145],{"class":237},"}\">删除\u003C\u002Fa>\n",[39,75147,75148],{"class":41,"line":34773},[39,75149,74600],{"class":237},[39,75151,75152],{"class":41,"line":34786},[39,75153,75154],{"class":237},"      \u003C\u002Ftr>\n",[39,75156,75157],{"class":41,"line":34792},[39,75158,75159],{"class":237},"  `\n",[39,75161,75162],{"class":41,"line":34803},[39,75163,65790],{"class":53},[39,75165,75166,75168,75170],{"class":41,"line":34814},[39,75167,59219],{"class":53},[39,75169,59222],{"class":49},[39,75171,75172],{"class":53},"(trArr)\n",[39,75174,75175],{"class":41,"line":34833},[39,75176,122],{"emptyLinePlaceholder":121},[39,75178,75179],{"class":41,"line":50493},[39,75180,75181],{"class":128},"      \u002F\u002F (2) 把数组转换为字符串join\n",[39,75183,75184],{"class":41,"line":50498},[39,75185,75186],{"class":128},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[39,75188,75189,75191,75193,75196,75199,75201,75204],{"class":41,"line":50507},[39,75190,71074],{"class":53},[39,75192,1117],{"class":45},[39,75194,75195],{"class":53}," trArr.",[39,75197,75198],{"class":49},"join",[39,75200,54],{"class":53},[39,75202,75203],{"class":237},"''",[39,75205,574],{"class":53},[39,75207,75208],{"class":41,"line":50516},[39,75209,75210],{"class":128},"      \u002F\u002F 显示共有几条\n",[39,75212,75213,75215,75217,75219,75222,75225,75227,75229],{"class":41,"line":50521},[39,75214,56746],{"class":53},[39,75216,55374],{"class":49},[39,75218,54],{"class":53},[39,75220,75221],{"class":237},"'.total span'",[39,75223,75224],{"class":53},").innerHTML ",[39,75226,1117],{"class":45},[39,75228,52940],{"class":53},[39,75230,56806],{"class":74},[39,75232,75233],{"class":41,"line":50526},[39,75234,3284],{"class":53},[39,75236,75237],{"class":41,"line":50531},[39,75238,75239],{"class":128},"    \u002F\u002F render()\n",[39,75241,75242],{"class":41,"line":50544},[39,75243,122],{"emptyLinePlaceholder":121},[39,75245,75246],{"class":41,"line":50549},[39,75247,75248],{"class":128},"    \u002F\u002F 获取DOM对象\n",[39,75250,75251,75253,75255,75257,75259,75261,75263,75265],{"class":41,"line":50558},[39,75252,12283],{"class":45},[39,75254,70796],{"class":74},[39,75256,71],{"class":45},[39,75258,55371],{"class":53},[39,75260,55374],{"class":49},[39,75262,54],{"class":53},[39,75264,70807],{"class":237},[39,75266,574],{"class":53},[39,75268,75269,75271,75273,75275,75277,75279,75281,75283],{"class":41,"line":50567},[39,75270,12283],{"class":45},[39,75272,70623],{"class":74},[39,75274,71],{"class":45},[39,75276,55371],{"class":53},[39,75278,55374],{"class":49},[39,75280,54],{"class":53},[39,75282,70634],{"class":237},[39,75284,574],{"class":53},[39,75286,75287,75289,75291,75293,75295,75297,75299,75301],{"class":41,"line":50584},[39,75288,12283],{"class":45},[39,75290,16662],{"class":74},[39,75292,71],{"class":45},[39,75294,55371],{"class":53},[39,75296,55374],{"class":49},[39,75298,54],{"class":53},[39,75300,70653],{"class":237},[39,75302,574],{"class":53},[39,75304,75306,75308,75310,75312,75314,75316,75318,75320],{"class":41,"line":75305},231,[39,75307,12283],{"class":45},[39,75309,70682],{"class":74},[39,75311,71],{"class":45},[39,75313,55371],{"class":53},[39,75315,55374],{"class":49},[39,75317,54],{"class":53},[39,75319,70693],{"class":237},[39,75321,574],{"class":53},[39,75323,75325,75327,75329,75331,75333,75335,75337,75339],{"class":41,"line":75324},232,[39,75326,12283],{"class":45},[39,75328,70662],{"class":74},[39,75330,71],{"class":45},[39,75332,55371],{"class":53},[39,75334,55374],{"class":49},[39,75336,54],{"class":53},[39,75338,70673],{"class":237},[39,75340,574],{"class":53},[39,75342,75344,75346,75348,75350,75352,75354,75356,75358],{"class":41,"line":75343},233,[39,75345,12283],{"class":45},[39,75347,70702],{"class":74},[39,75349,71],{"class":45},[39,75351,55371],{"class":53},[39,75353,55374],{"class":49},[39,75355,54],{"class":53},[39,75357,70713],{"class":237},[39,75359,574],{"class":53},[39,75361,75363],{"class":41,"line":75362},234,[39,75364,122],{"emptyLinePlaceholder":121},[39,75366,75368],{"class":41,"line":75367},235,[39,75369,75370],{"class":128},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[39,75372,75374,75376,75378,75380,75382,75384,75386,75388,75390],{"class":41,"line":75373},236,[39,75375,70814],{"class":53},[39,75377,58788],{"class":49},[39,75379,54],{"class":53},[39,75381,70821],{"class":237},[39,75383,63],{"class":53},[39,75385,55424],{"class":45},[39,75387,2772],{"class":53},[39,75389,1342],{"class":59},[39,75391,89],{"class":53},[39,75393,75395],{"class":41,"line":75394},237,[39,75396,75397],{"class":128},"      \u002F\u002F 禁止浏览器跳转\n",[39,75399,75401,75403,75405],{"class":41,"line":75400},238,[39,75402,70841],{"class":53},[39,75404,70844],{"class":49},[39,75406,537],{"class":53},[39,75408,75410],{"class":41,"line":75409},239,[39,75411,75412],{"class":128},"      \u002F\u002F 非空判断\n",[39,75414,75416],{"class":41,"line":75415},240,[39,75417,75418],{"class":128},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[39,75420,75422],{"class":41,"line":75421},241,[39,75423,75424],{"class":128},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[39,75426,75428,75430,75432,75434,75437,75439,75442,75445,75447,75449],{"class":41,"line":75427},242,[39,75429,55455],{"class":45},[39,75431,2772],{"class":53},[39,75433,1492],{"class":45},[39,75435,75436],{"class":53},"uname.value ",[39,75438,72332],{"class":45},[39,75440,75441],{"class":45}," !",[39,75443,75444],{"class":53},"age.value ",[39,75446,72332],{"class":45},[39,75448,75441],{"class":45},[39,75450,75451],{"class":53},"salary.value) {\n",[39,75453,75455,75457,75459,75461,75463],{"class":41,"line":75454},243,[39,75456,15725],{"class":45},[39,75458,70915],{"class":49},[39,75460,54],{"class":53},[39,75462,70920],{"class":237},[39,75464,574],{"class":53},[39,75466,75468],{"class":41,"line":75467},244,[39,75469,53373],{"class":53},[39,75471,75473,75475,75477],{"class":41,"line":75472},245,[39,75474,58982],{"class":53},[39,75476,52859],{"class":49},[39,75478,75479],{"class":53},"({\n",[39,75481,75483],{"class":41,"line":75482},246,[39,75484,75485],{"class":128},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[39,75487,75489],{"class":41,"line":75488},247,[39,75490,75491],{"class":128},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[39,75493,75495],{"class":41,"line":75494},248,[39,75496,75497],{"class":128},"        \u002F\u002F 对象的序号应为数组长度+1\n",[39,75499,75501],{"class":41,"line":75500},249,[39,75502,75503],{"class":128},"        \u002F\u002F unameId: arr.length + 1,\n",[39,75505,75507],{"class":41,"line":75506},250,[39,75508,122],{"emptyLinePlaceholder":121},[39,75510,75512],{"class":41,"line":75511},251,[39,75513,75514],{"class":128},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[39,75516,75518],{"class":41,"line":75517},252,[39,75519,75520],{"class":128},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[39,75522,75524],{"class":41,"line":75523},253,[39,75525,75526],{"class":128},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[39,75528,75530],{"class":41,"line":75529},254,[39,75531,75532],{"class":128},"        \u002F\u002F 0当假看\n",[39,75534,75536,75539,75541,75543,75546,75548,75550,75552,75555,75557,75559,75562,75564],{"class":41,"line":75535},255,[39,75537,75538],{"class":53},"        unameId: arr.",[39,75540,52943],{"class":74},[39,75542,74789],{"class":45},[39,75544,75545],{"class":53}," arr[arr.",[39,75547,52943],{"class":74},[39,75549,53246],{"class":45},[39,75551,26093],{"class":74},[39,75553,75554],{"class":53},"].unameId ",[39,75556,101],{"class":45},[39,75558,26093],{"class":74},[39,75560,75561],{"class":45}," :",[39,75563,26093],{"class":74},[39,75565,32441],{"class":53},[39,75567,75569],{"class":41,"line":75568},256,[39,75570,70968],{"class":53},[39,75572,75574],{"class":41,"line":75573},257,[39,75575,70973],{"class":53},[39,75577,75579],{"class":41,"line":75578},258,[39,75580,70983],{"class":53},[39,75582,75584],{"class":41,"line":75583},259,[39,75585,70978],{"class":53},[39,75587,75589],{"class":41,"line":75588},260,[39,75590,75591],{"class":53},"        city: city.value,\n",[39,75593,75595],{"class":41,"line":75594},261,[39,75596,75597],{"class":128},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[39,75599,75601],{"class":41,"line":75600},262,[39,75602,75603],{"class":128},"        \u002F\u002F time: new Date().toDateString()\n",[39,75605,75607,75610,75613],{"class":41,"line":75606},263,[39,75608,75609],{"class":53},"        time: ",[39,75611,75612],{"class":49},"getTime",[39,75614,537],{"class":53},[39,75616,75618],{"class":41,"line":75617},264,[39,75619,65790],{"class":53},[39,75621,75623],{"class":41,"line":75622},265,[39,75624,75625],{"class":128},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[39,75627,75629,75631],{"class":41,"line":75628},266,[39,75630,71043],{"class":49},[39,75632,537],{"class":53},[39,75634,75636,75638,75640,75642,75644],{"class":41,"line":75635},267,[39,75637,71026],{"class":74},[39,75639,1819],{"class":53},[39,75641,71031],{"class":49},[39,75643,14107],{"class":53},[39,75645,75646],{"class":128},"\u002F\u002F重置表单\n",[39,75648,75650],{"class":41,"line":75649},268,[39,75651,75652],{"class":128},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[39,75654,75656,75659,75661,75663,75666,75668,75670,75672,75674],{"class":41,"line":75655},269,[39,75657,75658],{"class":53},"      localStorage.",[39,75660,72629],{"class":49},[39,75662,54],{"class":53},[39,75664,75665],{"class":237},"'data'",[39,75667,63],{"class":53},[39,75669,72639],{"class":74},[39,75671,1819],{"class":53},[39,75673,72644],{"class":49},[39,75675,75676],{"class":53},"(arr))\n",[39,75678,75680],{"class":41,"line":75679},270,[39,75681,34436],{"class":53},[39,75683,75685],{"class":41,"line":75684},271,[39,75686,122],{"emptyLinePlaceholder":121},[39,75688,75690],{"class":41,"line":75689},272,[39,75691,75692],{"class":128},"    \u002F\u002F 3.删除业务\n",[39,75694,75696],{"class":41,"line":75695},273,[39,75697,75698],{"class":128},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[39,75700,75702,75704,75706,75708,75710,75712,75714,75716,75718],{"class":41,"line":75701},274,[39,75703,71316],{"class":53},[39,75705,58788],{"class":49},[39,75707,54],{"class":53},[39,75709,58793],{"class":237},[39,75711,63],{"class":53},[39,75713,55424],{"class":45},[39,75715,2772],{"class":53},[39,75717,1342],{"class":59},[39,75719,89],{"class":53},[39,75721,75723],{"class":41,"line":75722},275,[39,75724,75725],{"class":128},"      \u002F\u002F 判断是否点击的是删除按钮\n",[39,75727,75729,75731,75733,75735,75737],{"class":41,"line":75728},276,[39,75730,55455],{"class":45},[39,75732,68009],{"class":53},[39,75734,55461],{"class":45},[39,75736,69231],{"class":237},[39,75738,89],{"class":53},[39,75740,75742],{"class":41,"line":75741},277,[39,75743,75744],{"class":128},"        \u002F\u002F alert(1)\n",[39,75746,75748],{"class":41,"line":75747},278,[39,75749,75750],{"class":128},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[39,75752,75754],{"class":41,"line":75753},279,[39,75755,75756],{"class":128},"        \u002F\u002F console.log(e.target)\n",[39,75758,75760],{"class":41,"line":75759},280,[39,75761,75762],{"class":128},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[39,75764,75766],{"class":41,"line":75765},281,[39,75767,122],{"emptyLinePlaceholder":121},[39,75769,75771],{"class":41,"line":75770},282,[39,75772,75773],{"class":128},"        \u002F\u002F 确认框，确然是否真的要删除\n",[39,75775,75777],{"class":41,"line":75776},283,[39,75778,75779],{"class":128},"        \u002F\u002F confirm()为确认框\n",[39,75781,75783],{"class":41,"line":75782},284,[39,75784,75785],{"class":128},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[39,75787,75789,75791,75793,75796,75798,75801],{"class":41,"line":75788},285,[39,75790,3590],{"class":45},[39,75792,2772],{"class":53},[39,75794,75795],{"class":49},"confirm",[39,75797,54],{"class":53},[39,75799,75800],{"class":237},"'您确定要删除这条数据吗？'",[39,75802,75803],{"class":53},")) {\n",[39,75805,75807,75810,75812,75814,75816],{"class":41,"line":75806},286,[39,75808,75809],{"class":53},"          arr.",[39,75811,58985],{"class":49},[39,75813,71369],{"class":53},[39,75815,1483],{"class":74},[39,75817,574],{"class":53},[39,75819,75821],{"class":41,"line":75820},287,[39,75822,75823],{"class":128},"          \u002F\u002F 3.4 重新渲染页面\n",[39,75825,75827,75830],{"class":41,"line":75826},288,[39,75828,75829],{"class":49},"          render",[39,75831,537],{"class":53},[39,75833,75835],{"class":41,"line":75834},289,[39,75836,75837],{"class":128},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[39,75839,75841,75844,75846,75848,75850,75852,75854,75856,75858],{"class":41,"line":75840},290,[39,75842,75843],{"class":53},"          localStorage.",[39,75845,72629],{"class":49},[39,75847,54],{"class":53},[39,75849,75665],{"class":237},[39,75851,63],{"class":53},[39,75853,72639],{"class":74},[39,75855,1819],{"class":53},[39,75857,72644],{"class":49},[39,75859,75676],{"class":53},[39,75861,75863],{"class":41,"line":75862},291,[39,75864,3622],{"class":53},[39,75866,75868],{"class":41,"line":75867},292,[39,75869,53373],{"class":53},[39,75871,75873],{"class":41,"line":75872},293,[39,75874,122],{"emptyLinePlaceholder":121},[39,75876,75878],{"class":41,"line":75877},294,[39,75879,34436],{"class":53},[39,75881,75883],{"class":41,"line":75882},295,[39,75884,122],{"emptyLinePlaceholder":121},[39,75886,75888,75890,75892],{"class":41,"line":75887},296,[39,75889,53392],{"class":53},[39,75891,52788],{"class":52275},[39,75893,52282],{"class":53},[39,75895,75897,75899,75901],{"class":41,"line":75896},297,[39,75898,52760],{"class":53},[39,75900,52775],{"class":52275},[39,75902,52282],{"class":53},[39,75904,75906],{"class":41,"line":75905},298,[39,75907,122],{"emptyLinePlaceholder":121},[39,75909,75911,75913,75915],{"class":41,"line":75910},299,[39,75912,52760],{"class":53},[39,75914,51610],{"class":52275},[39,75916,52282],{"class":53},[14,75918,75920],{"id":75919},"_36-正则表达式","3.6 正则表达式",[19,75922,75923],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75925,75926],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75928,75929],{},"正则表达式的作用：",[489,75931,75932,75939,75945],{},[331,75933,75934,75935,75938],{},"表单验证（ ",[350,75936,75937],{},"匹配"," ）",[331,75940,75941,75942,75938],{},"过滤敏感词（ ",[350,75943,75944],{},"替换",[331,75946,75947,75948,75938],{},"字符串中提取我们想要的部分（ ",[350,75949,75950],{},"提取",[476,75952,75954],{"id":75953},"_361-语法","3.6.1 语法",[19,75956,75957],{},"正则表达式使用步骤：",[328,75959,75960,75963],{},[331,75961,75962],{},"定义规则",[331,75964,75965],{},"查找是否匹配",[19,75967,75968],{},"正则表达式里边不需要写引号",[19,75970,75971],{},[2585,75972],{"alt":35,"src":75973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75975,75976],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75978,75979],{},"reg.test(str)",[19,75981,75982],{},[2585,75983],{"alt":35,"src":75984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75986,75987],{},[2585,75988],{"alt":35,"src":75989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[476,75991,75993],{"id":75992},"_362-元字符","3.6.2 元字符",[328,75995,75996,75999,76002,76005,76012],{},[331,75997,75998],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[331,76000,76001],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[331,76003,76004],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[331,76006,76007,76008],{},"正则验证工具：",[922,76009,76010],{"href":76010,"rel":76011},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24839],[331,76013,76014],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22971,76016,76018],{"id":76017},"_3621-边界符","3.6.2.1 边界符",[19,76020,76021],{},[2585,76022],{"alt":35,"src":76023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76025,76026],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76028,76029],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76031,76032],{},"只匹配一次",[19,76034,76035],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22971,76037,76039],{"id":76038},"_3622-量词","3.6.2.2 量词",[19,76041,76042],{},[2585,76043],{"alt":35,"src":76044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76046,76047],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22971,76049,76051],{"id":76050},"_3623-元字符","3.6.2.3 元字符",[19,76053,76054],{},[2585,76055],{"alt":35,"src":76056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76058,76059],{},"匹配的是a或b或c []只选一个",[19,76061,76062],{},[2585,76063],{"alt":35,"src":76064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76066,76067],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76069,76070],{},[2585,76071],{"alt":35,"src":76072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76074,76075],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76077,76078],{},[2585,76079],{"alt":35,"src":76080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[30,76082,76084],{"className":51608,"code":76083,"language":51610,"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",[26,76085,76086,76096,76110,76114,76122,76136,76156,76168,76176,76180,76188,76196,76201,76232,76259,76287,76291,76296,76324,76355,76360,76365,76396,76428,76460,76464,76469,76500,76530,76560,76564,76569,76600,76631,76661,76691,76695,76700,76733,76737,76742,76773,76804,76808,76813,76844,76874,76905,76909,76914,76946,76977,77008,77035,77066,77098,77131,77162,77193,77225,77256,77264,77272,77276],{"__ignoreMap":35},[39,76087,76088,76090,76092,76094],{"class":41,"line":42},[39,76089,52272],{"class":53},[39,76091,52276],{"class":52275},[39,76093,52279],{"class":49},[39,76095,52282],{"class":53},[39,76097,76098,76100,76102,76104,76106,76108],{"class":41,"line":92},[39,76099,2170],{"class":53},[39,76101,51610],{"class":52275},[39,76103,52291],{"class":49},[39,76105,1117],{"class":53},[39,76107,52296],{"class":237},[39,76109,52282],{"class":53},[39,76111,76112],{"class":41,"line":112},[39,76113,122],{"emptyLinePlaceholder":121},[39,76115,76116,76118,76120],{"class":41,"line":118},[39,76117,2170],{"class":53},[39,76119,52309],{"class":52275},[39,76121,52282],{"class":53},[39,76123,76124,76126,76128,76130,76132,76134],{"class":41,"line":125},[39,76125,53119],{"class":53},[39,76127,52319],{"class":52275},[39,76129,52322],{"class":49},[39,76131,1117],{"class":53},[39,76133,52327],{"class":237},[39,76135,52282],{"class":53},[39,76137,76138,76140,76142,76144,76146,76148,76150,76152,76154],{"class":41,"line":132},[39,76139,53119],{"class":53},[39,76141,52319],{"class":52275},[39,76143,15893],{"class":49},[39,76145,1117],{"class":53},[39,76147,52366],{"class":237},[39,76149,52346],{"class":49},[39,76151,1117],{"class":53},[39,76153,52373],{"class":237},[39,76155,52282],{"class":53},[39,76157,76158,76160,76162,76164,76166],{"class":41,"line":138},[39,76159,53119],{"class":53},[39,76161,52382],{"class":52275},[39,76163,52385],{"class":53},[39,76165,52382],{"class":52275},[39,76167,52282],{"class":53},[39,76169,76170,76172,76174],{"class":41,"line":169},[39,76171,52760],{"class":53},[39,76173,52309],{"class":52275},[39,76175,52282],{"class":53},[39,76177,76178],{"class":41,"line":190},[39,76179,122],{"emptyLinePlaceholder":121},[39,76181,76182,76184,76186],{"class":41,"line":202},[39,76183,2170],{"class":53},[39,76185,52775],{"class":52275},[39,76187,52282],{"class":53},[39,76189,76190,76192,76194],{"class":41,"line":207},[39,76191,53119],{"class":53},[39,76193,52788],{"class":52275},[39,76195,52282],{"class":53},[39,76197,76198],{"class":41,"line":212},[39,76199,76200],{"class":128},"    \u002F\u002F 元字符中\n",[39,76202,76203,76205,76207,76209,76211,76214,76216,76218,76221,76223,76226,76229],{"class":41,"line":223},[39,76204,74728],{"class":53},[39,76206,59222],{"class":49},[39,76208,54],{"class":53},[39,76210,1845],{"class":237},[39,76212,76213],{"class":48952},"哈",[39,76215,1845],{"class":237},[39,76217,1819],{"class":53},[39,76219,76220],{"class":49},"test",[39,76222,54],{"class":53},[39,76224,76225],{"class":237},"'哈'",[39,76227,76228],{"class":53},"))  ",[39,76230,76231],{"class":128},"\u002F\u002Ftrue\n",[39,76233,76234,76236,76238,76240,76242,76244,76246,76248,76250,76252,76255,76257],{"class":41,"line":228},[39,76235,74728],{"class":53},[39,76237,59222],{"class":49},[39,76239,54],{"class":53},[39,76241,1845],{"class":237},[39,76243,76213],{"class":48952},[39,76245,1845],{"class":237},[39,76247,1819],{"class":53},[39,76249,76220],{"class":49},[39,76251,54],{"class":53},[39,76253,76254],{"class":237},"'哈哈'",[39,76256,76228],{"class":53},[39,76258,76231],{"class":128},[39,76260,76261,76263,76265,76267,76269,76271,76273,76275,76277,76279,76282,76285],{"class":41,"line":263},[39,76262,74728],{"class":53},[39,76264,59222],{"class":49},[39,76266,54],{"class":53},[39,76268,1845],{"class":237},[39,76270,76213],{"class":48952},[39,76272,1845],{"class":237},[39,76274,1819],{"class":53},[39,76276,76220],{"class":49},[39,76278,54],{"class":53},[39,76280,76281],{"class":237},"'二哈'",[39,76283,76284],{"class":53},"))   ",[39,76286,76231],{"class":128},[39,76288,76289],{"class":41,"line":287},[39,76290,122],{"emptyLinePlaceholder":121},[39,76292,76293],{"class":41,"line":292},[39,76294,76295],{"class":128},"    \u002F\u002F 1.边界符\n",[39,76297,76298,76300,76302,76304,76306,76308,76310,76312,76314,76316,76318,76320,76322],{"class":41,"line":305},[39,76299,74728],{"class":53},[39,76301,59222],{"class":49},[39,76303,54],{"class":53},[39,76305,1845],{"class":237},[39,76307,2226],{"class":45},[39,76309,76213],{"class":48952},[39,76311,1845],{"class":237},[39,76313,1819],{"class":53},[39,76315,76220],{"class":49},[39,76317,54],{"class":53},[39,76319,76225],{"class":237},[39,76321,76228],{"class":53},[39,76323,76231],{"class":128},[39,76325,76326,76328,76330,76332,76334,76336,76338,76340,76342,76344,76346,76348,76350,76352],{"class":41,"line":310},[39,76327,74728],{"class":53},[39,76329,59222],{"class":49},[39,76331,54],{"class":53},[39,76333,1845],{"class":237},[39,76335,2226],{"class":45},[39,76337,76213],{"class":48952},[39,76339,1567],{"class":45},[39,76341,1845],{"class":237},[39,76343,1819],{"class":53},[39,76345,76220],{"class":49},[39,76347,54],{"class":53},[39,76349,76254],{"class":237},[39,76351,76228],{"class":53},[39,76353,76354],{"class":128},"\u002F\u002Ffalse\n",[39,76356,76357],{"class":41,"line":321},[39,76358,76359],{"class":128},"    \u002F\u002F 2.量词\n",[39,76361,76362],{"class":41,"line":713},[39,76363,76364],{"class":128},"    \u002F\u002F 量词 * 类似于 >= 0\n",[39,76366,76367,76369,76371,76373,76375,76377,76379,76382,76384,76386,76388,76390,76392,76394],{"class":41,"line":718},[39,76368,74728],{"class":53},[39,76370,59222],{"class":49},[39,76372,54],{"class":53},[39,76374,1845],{"class":237},[39,76376,2226],{"class":45},[39,76378,76213],{"class":48952},[39,76380,76381],{"class":45},"*$",[39,76383,1845],{"class":237},[39,76385,1819],{"class":53},[39,76387,76220],{"class":49},[39,76389,54],{"class":53},[39,76391,76254],{"class":237},[39,76393,76228],{"class":53},[39,76395,76231],{"class":128},[39,76397,76398,76400,76402,76404,76406,76408,76410,76412,76414,76416,76418,76420,76423,76425],{"class":41,"line":723},[39,76399,74728],{"class":53},[39,76401,59222],{"class":49},[39,76403,54],{"class":53},[39,76405,1845],{"class":237},[39,76407,2226],{"class":45},[39,76409,76213],{"class":48952},[39,76411,76381],{"class":45},[39,76413,1845],{"class":237},[39,76415,1819],{"class":53},[39,76417,76220],{"class":49},[39,76419,54],{"class":53},[39,76421,76422],{"class":237},"'二哈好傻'",[39,76424,76228],{"class":53},[39,76426,76427],{"class":128},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[39,76429,76430,76432,76434,76436,76438,76440,76442,76444,76446,76448,76450,76452,76455,76457],{"class":41,"line":729},[39,76431,74728],{"class":53},[39,76433,59222],{"class":49},[39,76435,54],{"class":53},[39,76437,1845],{"class":237},[39,76439,2226],{"class":45},[39,76441,76213],{"class":48952},[39,76443,76381],{"class":45},[39,76445,1845],{"class":237},[39,76447,1819],{"class":53},[39,76449,76220],{"class":49},[39,76451,54],{"class":53},[39,76453,76454],{"class":237},"'哈好哈'",[39,76456,76284],{"class":53},[39,76458,76459],{"class":128},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[39,76461,76462],{"class":41,"line":735},[39,76463,122],{"emptyLinePlaceholder":121},[39,76465,76466],{"class":41,"line":741},[39,76467,76468],{"class":128},"    \u002F\u002F +类似于>=1\n",[39,76470,76471,76473,76475,76477,76479,76481,76483,76486,76488,76490,76492,76494,76496,76498],{"class":41,"line":747},[39,76472,74728],{"class":53},[39,76474,59222],{"class":49},[39,76476,54],{"class":53},[39,76478,1845],{"class":237},[39,76480,2226],{"class":45},[39,76482,76213],{"class":48952},[39,76484,76485],{"class":45},"+$",[39,76487,1845],{"class":237},[39,76489,1819],{"class":53},[39,76491,76220],{"class":49},[39,76493,54],{"class":53},[39,76495,76254],{"class":237},[39,76497,76228],{"class":53},[39,76499,76231],{"class":128},[39,76501,76502,76504,76506,76508,76510,76512,76514,76516,76518,76520,76522,76524,76526,76528],{"class":41,"line":753},[39,76503,74728],{"class":53},[39,76505,59222],{"class":49},[39,76507,54],{"class":53},[39,76509,1845],{"class":237},[39,76511,2226],{"class":45},[39,76513,76213],{"class":48952},[39,76515,76485],{"class":45},[39,76517,1845],{"class":237},[39,76519,1819],{"class":53},[39,76521,76220],{"class":49},[39,76523,54],{"class":53},[39,76525,76422],{"class":237},[39,76527,76228],{"class":53},[39,76529,76427],{"class":128},[39,76531,76532,76534,76536,76538,76540,76542,76544,76546,76548,76550,76552,76554,76556,76558],{"class":41,"line":758},[39,76533,74728],{"class":53},[39,76535,59222],{"class":49},[39,76537,54],{"class":53},[39,76539,1845],{"class":237},[39,76541,2226],{"class":45},[39,76543,76213],{"class":48952},[39,76545,76485],{"class":45},[39,76547,1845],{"class":237},[39,76549,1819],{"class":53},[39,76551,76220],{"class":49},[39,76553,54],{"class":53},[39,76555,76454],{"class":237},[39,76557,76284],{"class":53},[39,76559,76354],{"class":128},[39,76561,76562],{"class":41,"line":763},[39,76563,122],{"emptyLinePlaceholder":121},[39,76565,76566],{"class":41,"line":772},[39,76567,76568],{"class":128},"    \u002F\u002F ?类似于0次或一次\n",[39,76570,76571,76573,76575,76577,76579,76581,76584,76586,76588,76590,76592,76594,76596,76598],{"class":41,"line":777},[39,76572,74728],{"class":53},[39,76574,59222],{"class":49},[39,76576,54],{"class":53},[39,76578,1845],{"class":237},[39,76580,2226],{"class":45},[39,76582,76583],{"class":48952},"哈？",[39,76585,1567],{"class":45},[39,76587,1845],{"class":237},[39,76589,1819],{"class":53},[39,76591,76220],{"class":49},[39,76593,54],{"class":53},[39,76595,75203],{"class":237},[39,76597,76284],{"class":53},[39,76599,76231],{"class":128},[39,76601,76602,76604,76606,76608,76610,76612,76614,76617,76619,76621,76623,76625,76627,76629],{"class":41,"line":785},[39,76603,74728],{"class":53},[39,76605,59222],{"class":49},[39,76607,54],{"class":53},[39,76609,1845],{"class":237},[39,76611,2226],{"class":45},[39,76613,76213],{"class":48952},[39,76615,76616],{"class":45},"?$",[39,76618,1845],{"class":237},[39,76620,1819],{"class":53},[39,76622,76220],{"class":49},[39,76624,54],{"class":53},[39,76626,76254],{"class":237},[39,76628,76228],{"class":53},[39,76630,76354],{"class":128},[39,76632,76633,76635,76637,76639,76641,76643,76645,76647,76649,76651,76653,76655,76657,76659],{"class":41,"line":796},[39,76634,74728],{"class":53},[39,76636,59222],{"class":49},[39,76638,54],{"class":53},[39,76640,1845],{"class":237},[39,76642,2226],{"class":45},[39,76644,76213],{"class":48952},[39,76646,76616],{"class":45},[39,76648,1845],{"class":237},[39,76650,1819],{"class":53},[39,76652,76220],{"class":49},[39,76654,54],{"class":53},[39,76656,76422],{"class":237},[39,76658,76228],{"class":53},[39,76660,76427],{"class":128},[39,76662,76663,76665,76667,76669,76671,76673,76675,76677,76679,76681,76683,76685,76687,76689],{"class":41,"line":808},[39,76664,74728],{"class":53},[39,76666,59222],{"class":49},[39,76668,54],{"class":53},[39,76670,1845],{"class":237},[39,76672,2226],{"class":45},[39,76674,76213],{"class":48952},[39,76676,76616],{"class":45},[39,76678,1845],{"class":237},[39,76680,1819],{"class":53},[39,76682,76220],{"class":49},[39,76684,54],{"class":53},[39,76686,76454],{"class":237},[39,76688,76228],{"class":53},[39,76690,76354],{"class":128},[39,76692,76693],{"class":41,"line":823},[39,76694,122],{"emptyLinePlaceholder":121},[39,76696,76697],{"class":41,"line":839},[39,76698,76699],{"class":128},"    \u002F\u002F {n}写几，就必须出现几次\n",[39,76701,76702,76704,76706,76708,76710,76712,76714,76717,76719,76721,76723,76725,76728,76731],{"class":41,"line":845},[39,76703,74728],{"class":53},[39,76705,59222],{"class":49},[39,76707,54],{"class":53},[39,76709,1845],{"class":237},[39,76711,2226],{"class":45},[39,76713,76213],{"class":48952},[39,76715,76716],{"class":45},"{4}$",[39,76718,1845],{"class":237},[39,76720,1819],{"class":53},[39,76722,76220],{"class":49},[39,76724,54],{"class":53},[39,76726,76727],{"class":237},"'哈哈哈哈'",[39,76729,76730],{"class":53},")) ",[39,76732,76231],{"class":128},[39,76734,76735],{"class":41,"line":856},[39,76736,122],{"emptyLinePlaceholder":121},[39,76738,76739],{"class":41,"line":861},[39,76740,76741],{"class":128},"    \u002F\u002F {n,}大于等于n次\n",[39,76743,76744,76746,76748,76750,76752,76754,76756,76759,76761,76763,76765,76767,76769,76771],{"class":41,"line":870},[39,76745,74728],{"class":53},[39,76747,59222],{"class":49},[39,76749,54],{"class":53},[39,76751,1845],{"class":237},[39,76753,2226],{"class":45},[39,76755,76213],{"class":48952},[39,76757,76758],{"class":45},"{4,}$",[39,76760,1845],{"class":237},[39,76762,1819],{"class":53},[39,76764,76220],{"class":49},[39,76766,54],{"class":53},[39,76768,76727],{"class":237},[39,76770,76730],{"class":53},[39,76772,76231],{"class":128},[39,76774,76775,76777,76779,76781,76783,76785,76787,76789,76791,76793,76795,76797,76800,76802],{"class":41,"line":9084},[39,76776,74728],{"class":53},[39,76778,59222],{"class":49},[39,76780,54],{"class":53},[39,76782,1845],{"class":237},[39,76784,2226],{"class":45},[39,76786,76213],{"class":48952},[39,76788,76758],{"class":45},[39,76790,1845],{"class":237},[39,76792,1819],{"class":53},[39,76794,76220],{"class":49},[39,76796,54],{"class":53},[39,76798,76799],{"class":237},"'哈哈哈哈哈'",[39,76801,76730],{"class":53},[39,76803,76231],{"class":128},[39,76805,76806],{"class":41,"line":9090},[39,76807,122],{"emptyLinePlaceholder":121},[39,76809,76810],{"class":41,"line":9102},[39,76811,76812],{"class":128},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[39,76814,76815,76817,76819,76821,76823,76825,76827,76830,76832,76834,76836,76838,76840,76842],{"class":41,"line":9114},[39,76816,74728],{"class":53},[39,76818,59222],{"class":49},[39,76820,54],{"class":53},[39,76822,1845],{"class":237},[39,76824,2226],{"class":45},[39,76826,76213],{"class":48952},[39,76828,76829],{"class":45},"{4,6}$",[39,76831,1845],{"class":237},[39,76833,1819],{"class":53},[39,76835,76220],{"class":49},[39,76837,54],{"class":53},[39,76839,76727],{"class":237},[39,76841,76730],{"class":53},[39,76843,76231],{"class":128},[39,76845,76846,76848,76850,76852,76854,76856,76858,76860,76862,76864,76866,76868,76870,76872],{"class":41,"line":9126},[39,76847,74728],{"class":53},[39,76849,59222],{"class":49},[39,76851,54],{"class":53},[39,76853,1845],{"class":237},[39,76855,2226],{"class":45},[39,76857,76213],{"class":48952},[39,76859,76829],{"class":45},[39,76861,1845],{"class":237},[39,76863,1819],{"class":53},[39,76865,76220],{"class":49},[39,76867,54],{"class":53},[39,76869,76799],{"class":237},[39,76871,76730],{"class":53},[39,76873,76231],{"class":128},[39,76875,76876,76878,76880,76882,76884,76886,76888,76890,76892,76894,76896,76898,76901,76903],{"class":41,"line":10784},[39,76877,74728],{"class":53},[39,76879,59222],{"class":49},[39,76881,54],{"class":53},[39,76883,1845],{"class":237},[39,76885,2226],{"class":45},[39,76887,76213],{"class":48952},[39,76889,76829],{"class":45},[39,76891,1845],{"class":237},[39,76893,1819],{"class":53},[39,76895,76220],{"class":49},[39,76897,54],{"class":53},[39,76899,76900],{"class":237},"'哈哈哈哈哈哈哈'",[39,76902,76730],{"class":53},[39,76904,76354],{"class":128},[39,76906,76907],{"class":41,"line":10809},[39,76908,122],{"emptyLinePlaceholder":121},[39,76910,76911],{"class":41,"line":10832},[39,76912,76913],{"class":128},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[39,76915,76916,76918,76920,76922,76924,76926,76929,76931,76933,76935,76937,76939,76942,76944],{"class":41,"line":10856},[39,76917,74728],{"class":53},[39,76919,59222],{"class":49},[39,76921,54],{"class":53},[39,76923,1845],{"class":237},[39,76925,2226],{"class":45},[39,76927,76928],{"class":74},"[abc]",[39,76930,1567],{"class":45},[39,76932,1845],{"class":237},[39,76934,1819],{"class":53},[39,76936,76220],{"class":49},[39,76938,54],{"class":53},[39,76940,76941],{"class":237},"'a'",[39,76943,76228],{"class":53},[39,76945,76231],{"class":128},[39,76947,76948,76950,76952,76954,76956,76958,76960,76962,76964,76966,76968,76970,76973,76975],{"class":41,"line":10861},[39,76949,74728],{"class":53},[39,76951,59222],{"class":49},[39,76953,54],{"class":53},[39,76955,1845],{"class":237},[39,76957,2226],{"class":45},[39,76959,76928],{"class":74},[39,76961,1567],{"class":45},[39,76963,1845],{"class":237},[39,76965,1819],{"class":53},[39,76967,76220],{"class":49},[39,76969,54],{"class":53},[39,76971,76972],{"class":237},"'b'",[39,76974,76228],{"class":53},[39,76976,76231],{"class":128},[39,76978,76979,76981,76983,76985,76987,76989,76991,76993,76995,76997,76999,77001,77004,77006],{"class":41,"line":10866},[39,76980,74728],{"class":53},[39,76982,59222],{"class":49},[39,76984,54],{"class":53},[39,76986,1845],{"class":237},[39,76988,2226],{"class":45},[39,76990,76928],{"class":74},[39,76992,1567],{"class":45},[39,76994,1845],{"class":237},[39,76996,1819],{"class":53},[39,76998,76220],{"class":49},[39,77000,54],{"class":53},[39,77002,77003],{"class":237},"'c'",[39,77005,76228],{"class":53},[39,77007,76231],{"class":128},[39,77009,77010,77012,77014,77016,77018,77020,77022,77024,77026,77028,77031,77033],{"class":41,"line":10871},[39,77011,74728],{"class":53},[39,77013,59222],{"class":49},[39,77015,54],{"class":53},[39,77017,1845],{"class":237},[39,77019,76928],{"class":74},[39,77021,1845],{"class":237},[39,77023,1819],{"class":53},[39,77025,76220],{"class":49},[39,77027,54],{"class":53},[39,77029,77030],{"class":237},"'ab'",[39,77032,76228],{"class":53},[39,77034,76231],{"class":128},[39,77036,77037,77039,77041,77043,77045,77047,77049,77051,77053,77055,77057,77059,77061,77063],{"class":41,"line":10880},[39,77038,74728],{"class":53},[39,77040,59222],{"class":49},[39,77042,54],{"class":53},[39,77044,1845],{"class":237},[39,77046,2226],{"class":45},[39,77048,76928],{"class":74},[39,77050,1567],{"class":45},[39,77052,1845],{"class":237},[39,77054,1819],{"class":53},[39,77056,76220],{"class":49},[39,77058,54],{"class":53},[39,77060,77030],{"class":237},[39,77062,76228],{"class":53},[39,77064,77065],{"class":128},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[39,77067,77068,77070,77072,77074,77076,77078,77080,77083,77085,77087,77089,77091,77093,77095],{"class":41,"line":10885},[39,77069,74728],{"class":53},[39,77071,59222],{"class":49},[39,77073,54],{"class":53},[39,77075,1845],{"class":237},[39,77077,2226],{"class":45},[39,77079,76928],{"class":74},[39,77081,77082],{"class":45},"{2}$",[39,77084,1845],{"class":237},[39,77086,1819],{"class":53},[39,77088,76220],{"class":49},[39,77090,54],{"class":53},[39,77092,77030],{"class":237},[39,77094,76228],{"class":53},[39,77096,77097],{"class":128},"\u002F\u002Ftrue   可以选两个\n",[39,77099,77100,77102,77104,77106,77108,77110,77113,77115,77117,77119,77121,77123,77126,77128],{"class":41,"line":10891},[39,77101,74728],{"class":53},[39,77103,59222],{"class":49},[39,77105,54],{"class":53},[39,77107,1845],{"class":237},[39,77109,2226],{"class":45},[39,77111,77112],{"class":74},"[a-z]",[39,77114,1567],{"class":45},[39,77116,1845],{"class":237},[39,77118,1819],{"class":53},[39,77120,76220],{"class":49},[39,77122,54],{"class":53},[39,77124,77125],{"class":237},"'p'",[39,77127,76284],{"class":53},[39,77129,77130],{"class":128},"\u002F\u002Ftrue   依然只能选一个\n",[39,77132,77133,77135,77137,77139,77141,77143,77146,77148,77150,77152,77154,77156,77158,77160],{"class":41,"line":10912},[39,77134,74728],{"class":53},[39,77136,59222],{"class":49},[39,77138,54],{"class":53},[39,77140,1845],{"class":237},[39,77142,2226],{"class":45},[39,77144,77145],{"class":74},"[A-Z]",[39,77147,1567],{"class":45},[39,77149,1845],{"class":237},[39,77151,1819],{"class":53},[39,77153,76220],{"class":49},[39,77155,54],{"class":53},[39,77157,77125],{"class":237},[39,77159,76284],{"class":53},[39,77161,76354],{"class":128},[39,77163,77164,77166,77168,77170,77172,77174,77176,77178,77180,77182,77184,77186,77189,77191],{"class":41,"line":10918},[39,77165,74728],{"class":53},[39,77167,59222],{"class":49},[39,77169,54],{"class":53},[39,77171,1845],{"class":237},[39,77173,2226],{"class":45},[39,77175,77145],{"class":74},[39,77177,1567],{"class":45},[39,77179,1845],{"class":237},[39,77181,1819],{"class":53},[39,77183,76220],{"class":49},[39,77185,54],{"class":53},[39,77187,77188],{"class":237},"'P'",[39,77190,76284],{"class":53},[39,77192,76231],{"class":128},[39,77194,77195,77197,77199,77201,77203,77205,77208,77210,77212,77214,77216,77218,77221,77223],{"class":41,"line":10932},[39,77196,74728],{"class":53},[39,77198,59222],{"class":49},[39,77200,54],{"class":53},[39,77202,1845],{"class":237},[39,77204,2226],{"class":45},[39,77206,77207],{"class":74},"[0-9]",[39,77209,1567],{"class":45},[39,77211,1845],{"class":237},[39,77213,1819],{"class":53},[39,77215,76220],{"class":49},[39,77217,54],{"class":53},[39,77219,77220],{"class":237},"'0'",[39,77222,76284],{"class":53},[39,77224,76231],{"class":128},[39,77226,77227,77229,77231,77233,77235,77237,77240,77242,77244,77246,77248,77250,77252,77254],{"class":41,"line":10938},[39,77228,74728],{"class":53},[39,77230,59222],{"class":49},[39,77232,54],{"class":53},[39,77234,1845],{"class":237},[39,77236,2226],{"class":45},[39,77238,77239],{"class":74},"[a-zA-Z0-9]",[39,77241,1567],{"class":45},[39,77243,1845],{"class":237},[39,77245,1819],{"class":53},[39,77247,76220],{"class":49},[39,77249,54],{"class":53},[39,77251,77125],{"class":237},[39,77253,76228],{"class":53},[39,77255,76231],{"class":128},[39,77257,77258,77260,77262],{"class":41,"line":10965},[39,77259,53392],{"class":53},[39,77261,52788],{"class":52275},[39,77263,52282],{"class":53},[39,77265,77266,77268,77270],{"class":41,"line":10974},[39,77267,52760],{"class":53},[39,77269,52775],{"class":52275},[39,77271,52282],{"class":53},[39,77273,77274],{"class":41,"line":10980},[39,77275,122],{"emptyLinePlaceholder":121},[39,77277,77278,77280,77282],{"class":41,"line":10988},[39,77279,52760],{"class":53},[39,77281,51610],{"class":52275},[39,77283,52282],{"class":53},[22971,77285,77287],{"id":77286},"_3624-修饰符","3.6.2.4 修饰符",[19,77289,77290],{},[2585,77291],{"alt":35,"src":77292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,77294,77295],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,77297,77298],{},[2585,77299],{"alt":35,"src":77300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[30,77302,77304],{"className":51608,"code":77303,"language":51610,"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",[26,77305,77306,77316,77330,77338,77352,77372,77384,77392,77400,77408,77440,77471,77476,77508,77519,77552,77561,77569,77577],{"__ignoreMap":35},[39,77307,77308,77310,77312,77314],{"class":41,"line":42},[39,77309,52272],{"class":53},[39,77311,52276],{"class":52275},[39,77313,52279],{"class":49},[39,77315,52282],{"class":53},[39,77317,77318,77320,77322,77324,77326,77328],{"class":41,"line":92},[39,77319,2170],{"class":53},[39,77321,51610],{"class":52275},[39,77323,52291],{"class":49},[39,77325,1117],{"class":53},[39,77327,52296],{"class":237},[39,77329,52282],{"class":53},[39,77331,77332,77334,77336],{"class":41,"line":112},[39,77333,2170],{"class":53},[39,77335,52309],{"class":52275},[39,77337,52282],{"class":53},[39,77339,77340,77342,77344,77346,77348,77350],{"class":41,"line":118},[39,77341,53119],{"class":53},[39,77343,52319],{"class":52275},[39,77345,52322],{"class":49},[39,77347,1117],{"class":53},[39,77349,52327],{"class":237},[39,77351,52282],{"class":53},[39,77353,77354,77356,77358,77360,77362,77364,77366,77368,77370],{"class":41,"line":125},[39,77355,53119],{"class":53},[39,77357,52319],{"class":52275},[39,77359,15893],{"class":49},[39,77361,1117],{"class":53},[39,77363,52366],{"class":237},[39,77365,52346],{"class":49},[39,77367,1117],{"class":53},[39,77369,52373],{"class":237},[39,77371,52282],{"class":53},[39,77373,77374,77376,77378,77380,77382],{"class":41,"line":132},[39,77375,53119],{"class":53},[39,77377,52382],{"class":52275},[39,77379,52385],{"class":53},[39,77381,52382],{"class":52275},[39,77383,52282],{"class":53},[39,77385,77386,77388,77390],{"class":41,"line":138},[39,77387,52760],{"class":53},[39,77389,52309],{"class":52275},[39,77391,52282],{"class":53},[39,77393,77394,77396,77398],{"class":41,"line":169},[39,77395,2170],{"class":53},[39,77397,52775],{"class":52275},[39,77399,52282],{"class":53},[39,77401,77402,77404,77406],{"class":41,"line":190},[39,77403,53119],{"class":53},[39,77405,52788],{"class":52275},[39,77407,52282],{"class":53},[39,77409,77410,77412,77414,77416,77418,77420,77423,77425,77427,77429,77431,77433,77436,77438],{"class":41,"line":202},[39,77411,74728],{"class":53},[39,77413,59222],{"class":49},[39,77415,54],{"class":53},[39,77417,1845],{"class":237},[39,77419,2226],{"class":45},[39,77421,77422],{"class":48952},"java",[39,77424,1567],{"class":45},[39,77426,1845],{"class":237},[39,77428,1819],{"class":53},[39,77430,76220],{"class":49},[39,77432,54],{"class":53},[39,77434,77435],{"class":237},"'java'",[39,77437,76730],{"class":53},[39,77439,76231],{"class":128},[39,77441,77442,77444,77446,77448,77450,77452,77454,77456,77458,77460,77462,77464,77467,77469],{"class":41,"line":207},[39,77443,74728],{"class":53},[39,77445,59222],{"class":49},[39,77447,54],{"class":53},[39,77449,1845],{"class":237},[39,77451,2226],{"class":45},[39,77453,77422],{"class":48952},[39,77455,1567],{"class":45},[39,77457,1845],{"class":237},[39,77459,1819],{"class":53},[39,77461,76220],{"class":49},[39,77463,54],{"class":53},[39,77465,77466],{"class":237},"'Java'",[39,77468,76730],{"class":53},[39,77470,76354],{"class":128},[39,77472,77473],{"class":41,"line":212},[39,77474,77475],{"class":128},"    \u002F\u002F 不区分大小写、\n",[39,77477,77478,77480,77482,77484,77486,77488,77490,77492,77494,77496,77498,77500,77502,77504,77506],{"class":41,"line":223},[39,77479,74728],{"class":53},[39,77481,59222],{"class":49},[39,77483,54],{"class":53},[39,77485,1845],{"class":237},[39,77487,2226],{"class":45},[39,77489,77422],{"class":48952},[39,77491,1567],{"class":45},[39,77493,1845],{"class":237},[39,77495,1704],{"class":45},[39,77497,1819],{"class":53},[39,77499,76220],{"class":49},[39,77501,54],{"class":53},[39,77503,77466],{"class":237},[39,77505,76730],{"class":53},[39,77507,76231],{"class":128},[39,77509,77510,77512,77514,77516],{"class":41,"line":228},[39,77511,12283],{"class":45},[39,77513,74894],{"class":74},[39,77515,71],{"class":45},[39,77517,77518],{"class":237}," 'java是一门编程语言，学完java工资很高'\n",[39,77520,77521,77523,77526,77528,77531,77534,77536,77538,77540,77542,77545,77547,77550],{"class":41,"line":263},[39,77522,12283],{"class":45},[39,77524,77525],{"class":74}," result",[39,77527,71],{"class":45},[39,77529,77530],{"class":53}," str.",[39,77532,77533],{"class":49},"replace",[39,77535,54],{"class":53},[39,77537,1845],{"class":237},[39,77539,77422],{"class":48952},[39,77541,1845],{"class":237},[39,77543,77544],{"class":45},"ig",[39,77546,63],{"class":53},[39,77548,77549],{"class":237},"'前端'",[39,77551,574],{"class":53},[39,77553,77554,77556,77558],{"class":41,"line":287},[39,77555,74728],{"class":53},[39,77557,59222],{"class":49},[39,77559,77560],{"class":53},"(result)\n",[39,77562,77563,77565,77567],{"class":41,"line":292},[39,77564,53392],{"class":53},[39,77566,52788],{"class":52275},[39,77568,52282],{"class":53},[39,77570,77571,77573,77575],{"class":41,"line":305},[39,77572,52760],{"class":53},[39,77574,52775],{"class":52275},[39,77576,52282],{"class":53},[39,77578,77579,77581,77583],{"class":41,"line":310},[39,77580,52760],{"class":53},[39,77582,51610],{"class":52275},[39,77584,52282],{"class":53},[1192,77586,77587],{},"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":92,"depth":92,"links":77589},[77590,77600,77612,77629,77636,77644],{"id":54335,"depth":92,"text":54336,"children":77591},[77592,77593,77594,77595,77596,77597,77598,77599],{"id":54339,"depth":112,"text":54340},{"id":54372,"depth":112,"text":54373},{"id":54411,"depth":112,"text":54412},{"id":54569,"depth":112,"text":54570},{"id":54617,"depth":112,"text":54618},{"id":54754,"depth":112,"text":54755},{"id":55076,"depth":112,"text":55077},{"id":58064,"depth":112,"text":58065},{"id":58092,"depth":92,"text":58093,"children":77601},[77602,77603,77604,77605,77606,77607,77608,77609,77610,77611],{"id":58096,"depth":112,"text":58097},{"id":58119,"depth":112,"text":58120},{"id":59034,"depth":112,"text":59035},{"id":59724,"depth":112,"text":59725},{"id":60006,"depth":112,"text":60007},{"id":64167,"depth":112,"text":64168},{"id":64337,"depth":112,"text":64338},{"id":64465,"depth":112,"text":64466},{"id":64490,"depth":112,"text":64491},{"id":65879,"depth":112,"text":65880},{"id":67032,"depth":92,"text":67033,"children":77613},[77614,77615,77616,77617,77618,77619,77620,77621,77622,77623,77624,77625,77626,77627,77628],{"id":67036,"depth":112,"text":67037},{"id":67690,"depth":112,"text":67691},{"id":69385,"depth":112,"text":69386},{"id":69426,"depth":112,"text":69427},{"id":69468,"depth":112,"text":69469},{"id":69482,"depth":112,"text":69483},{"id":69531,"depth":112,"text":69532},{"id":69543,"depth":112,"text":69544},{"id":69558,"depth":112,"text":69559},{"id":69594,"depth":112,"text":69595},{"id":69675,"depth":112,"text":69676},{"id":69803,"depth":112,"text":69804},{"id":69815,"depth":112,"text":69816},{"id":69834,"depth":112,"text":69835},{"id":71945,"depth":112,"text":71946},{"id":71964,"depth":92,"text":71965,"children":77630},[77631,77632,77633,77634,77635],{"id":71985,"depth":112,"text":71986},{"id":72005,"depth":112,"text":72006},{"id":72054,"depth":112,"text":72055},{"id":72179,"depth":112,"text":72180},{"id":72360,"depth":112,"text":72361},{"id":72378,"depth":92,"text":72379,"children":77637},[77638,77639,77640,77641,77642,77643],{"id":72393,"depth":112,"text":72394},{"id":72452,"depth":112,"text":72453},{"id":72476,"depth":112,"text":72477},{"id":72796,"depth":112,"text":72797},{"id":72828,"depth":112,"text":72829},{"id":72851,"depth":112,"text":72852},{"id":75919,"depth":92,"text":75920,"children":77645},[77646,77647],{"id":75953,"depth":112,"text":75954},{"id":75992,"depth":112,"text":75993},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54307,"description":24350},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77654,"title":77655,"body":77656,"description":24350,"extension":1203,"meta":93793,"navigation":121,"path":93794,"seo":93795,"stem":93796,"__hash__":93797},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77657,"toc":93729},[77658,77661,77664,77668,77672,77677,77682,77693,77697,77702,77705,77709,77712,77717,77721,77725,77728,77733,77736,77740,77743,77751,77754,77758,77763,77768,77771,77775,77780,77785,77788,77792,77797,77800,77805,77808,77813,77816,77821,77826,77829,77832,77836,77841,77846,77849,77853,77857,77860,77863,77866,77870,77874,77879,77884,77887,77891,77896,77901,77904,77907,77910,77913,77916,77919,77922,77925,77928,77933,77937,77942,77947,77950,77953,77956,77959,77962,77965,77968,77971,77975,77979,77982,77985,77988,77993,77995,77998,78001,78004,78007,78010,78013,78016,78019,78022,78025,78028,78031,78034,78039,78044,78049,78052,78056,78059,78064,78068,78070,78081,78086,78187,78190,78193,78196,78199,78202,78205,78208,78211,78213,78216,78219,78222,78225,78228,78230,78233,78236,78239,78242,78245,78248,78250,78253,78255,78257,78260,78264,78268,78271,78274,78277,78280,78283,78286,78289,78292,78295,78300,78420,78423,78426,78431,78434,78437,78440,78443,78448,78451,78454,78457,78460,78465,78468,78568,78633,78707,78711,78714,78717,78721,78724,78738,78767,78770,78773,78776,78779,78782,78785,78788,78790,78793,78796,78799,78802,78806,78811,78815,78820,78895,78898,79081,79084,79087,79090,79093,79096,79098,79101,79104,79107,79110,79113,79116,79118,79122,79125,79130,79133,79136,79139,79142,79144,79149,79152,79155,79158,79161,79163,79168,79171,79174,79176,79178,79181,79185,79188,79191,79196,79199,79202,79205,79255,79260,79264,79269,79272,79341,79344,79353,79357,79362,79365,79368,79376,79379,79396,81198,81202,81206,81211,81214,81218,81224,81230,81382,81387,81392,81395,81398,81401,81404,81407,81410,81413,81416,81419,81422,81425,81428,81433,81437,81440,81451,81455,81460,81463,81466,81469,81472,81475,81477,81480,81483,81486,81489,81491,81508,81511,81515,81518,81523,81528,81531,81534,81538,81541,81544,81553,81556,81560,81563,81568,81573,81640,81644,81647,81650,81655,81660,81746,81751,81755,81758,81761,81776,81779,81784,81788,81793,81902,81905,81916,82066,82070,82075,82184,82188,82193,82198,82203,82206,82213,82233,82269,82433,82438,82441,82446,82453,82456,82459,82462,82521,82577,82633,82637,82642,82957,82960,82964,82967,82972,83081,83086,83090,83095,83099,83170,83174,83176,83179,83182,83220,83496,83500,83517,83583,83617,83621,83624,83629,83658,83665,83674,83679,83694,83699,83708,83711,83848,83852,83914,83918,83923,84168,84172,84177,84180,84183,84186,84189,84193,84198,85779,85783,85787,85793,85796,85801,85805,85808,85813,85816,85827,85831,85836,85840,85845,85850,85853,85858,85862,85866,85869,85874,85879,85882,85885,85888,86010,86015,86117,86120,86123,86127,86132,86304,86309,86313,86316,86321,86387,86392,86395,86526,86529,86534,86537,86540,86631,86636,86639,86642,86645,86648,86653,86658,86661,86666,86671,86676,86680,86683,86686,86691,86696,86701,86706,86760,86763,86766,86771,86774,86777,86782,86787,86792,86796,86801,86815,86820,86823,86828,86832,86837,86842,86847,86852,86857,86862,86867,86872,86875,86879,86884,86887,86890,86893,86898,86903,86906,86909,86913,86916,86919,86924,86929,86934,86939,86942,86947,86952,87013,87018,87021,87026,88267,88272,88276,88280,88285,88288,88293,88298,88301,88306,88308,88313,88317,88320,88323,88334,88338,88343,88348,88403,88408,88413,88418,88629,88634,88638,88643,88646,88648,88651,88654,89101,89106,89113,89119,89122,89125,89389,89394,89398,89663,89668,89672,89677,89682,89687,89692,90023,90026,90031,90036,90039,90043,90047,90052,90057,90062,90067,90072,90077,90081,90084,90089,90094,90097,90171,90176,90181,90186,90188,90191,90561,90566,90571,90576,90579,90582,90684,90689,90694,90797,90801,90806,90810,90814,90819,90824,90827,90832,90835,90838,91231,91236,91239,91242,91245,91248,91768,91772,91777,91782,91787,91790,91795,91798,91801,92183,92188,92190,92192,92195,92198,92710,92714,92775,92778,92781,92784,92788,92791,92796,92801,93726],[10,77659,77655],{"id":77660},"_4js进阶",[19,77662,77663],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77665,77667],{"id":77666},"_41-作用域","4.1 作用域",[476,77669,77671],{"id":77670},"_411-局部作用域","4.1.1 局部作用域",[19,77673,77674],{},[2585,77675],{"alt":35,"src":77676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,77678,77679],{},[2585,77680],{"alt":35,"src":77681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[489,77683,77684,77687,77690],{},[331,77685,77686],{},"函数作用域在函数内部",[331,77688,77689],{},"块级作用域在{}",[331,77691,77692],{},"对象的那个{}不是作用域，不是块作用域",[476,77694,77696],{"id":77695},"_412-全局作用域","4.1.2 全局作用域",[19,77698,77699],{},[2585,77700],{"alt":35,"src":77701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77703,77704],{},"window.a=10不要这样写",[476,77706,77708],{"id":77707},"_413-作用域链","4.1.3 作用域链",[19,77710,77711],{},"变量查找机制",[19,77713,77714],{},[2585,77715],{"alt":35,"src":77716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77718,77720],{"id":77719},"_42-垃圾回收机制","4.2 垃圾回收机制",[476,77722,77724],{"id":77723},"_421-大体介绍","4.2.1 大体介绍",[19,77726,77727],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77729,77730],{},[2585,77731],{"alt":35,"src":77732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77734,77735],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[476,77737,77739],{"id":77738},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77741,77742],{},"堆栈空间分配区别：",[328,77744,77745,77748],{},[331,77746,77747],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[331,77749,77750],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,77752,77753],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22971,77755,77757],{"id":77756},"_4221-引用计数","4.2.2.1 引用计数",[19,77759,77760],{},[2585,77761],{"alt":35,"src":77762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,77764,77765],{},[2585,77766],{"alt":35,"src":77767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,77769,77770],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22971,77772,77774],{"id":77773},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77776,77777],{},[2585,77778],{"alt":35,"src":77779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77781,77782],{},[2585,77783],{"alt":35,"src":77784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77786,77787],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77789,77791],{"id":77790},"_43-闭包","4.3 闭包",[19,77793,77794],{},[2585,77795],{"alt":35,"src":77796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77798,77799],{},"闭包：内层函数+外层函数的变量",[19,77801,77802],{},[2585,77803],{"alt":35,"src":77804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77806,77807],{},"closure就是闭包",[19,77809,77810],{},[2585,77811],{"alt":35,"src":77812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77814,77815],{},"内层函数必须包含外层函数的变量才是闭包",[19,77817,77818],{},[2585,77819],{"alt":35,"src":77820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77822,77823],{},[2585,77824],{"alt":35,"src":77825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77827,77828],{},"闭包可能会引起内存泄漏",[19,77830,77831],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77833,77835],{"id":77834},"_44-变量提升","4.4 变量提升",[19,77837,77838],{},[2585,77839],{"alt":35,"src":77840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77842,77843],{},[2585,77844],{"alt":35,"src":77845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77847,77848],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77850,77852],{"id":77851},"_45-函数进阶","4.5 函数进阶",[476,77854,77856],{"id":77855},"_451-函数提升","4.5.1 函数提升",[19,77858,77859],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77861,77862],{},"只提升函数声明，不提升函数调用",[52788,77864,77865],{},"\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",[476,77867,77869],{"id":77868},"_452-函数参数","4.5.2 函数参数",[22971,77871,77873],{"id":77872},"_4521-动态参数","4.5.2.1 动态参数",[19,77875,77876],{},[2585,77877],{"alt":35,"src":77878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77880,77881],{},[2585,77882],{"alt":35,"src":77883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77885,77886],{},"箭头函数里边没有arguments",[22971,77888,77890],{"id":77889},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77892,77893],{},[2585,77894],{"alt":35,"src":77895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77897,77898],{},[2585,77899],{"alt":35,"src":77900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77902,77903],{},"剩余参数使用的时候不需要写...",[19,77905,77906],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77908,77909],{},"  function getSum(a,b,...arr) {",[19,77911,77912],{},"  console.log(11)",[19,77914,77915],{},"  }",[19,77917,77918],{},"  getSum(1,2,3,4)",[19,77920,77921],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77923,77924],{},"  getSum(1,2)",[19,77926,77927],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77929,77930],{},[2585,77931],{"alt":35,"src":77932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22971,77934,77936],{"id":77935},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77938,77939],{},[2585,77940],{"alt":35,"src":77941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77943,77944],{},[2585,77945],{"alt":35,"src":77946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77948,77949],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77951,77952],{},"展开运算符可以用于数组之间的合并：",[19,77954,77955],{},"const arr1 = [1, 2, 3]",[19,77957,77958],{},"const arr2 = [3, 4, 5]",[19,77960,77961],{},"const arr = [...arr1, ...arr2]",[19,77963,77964],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77966,77967],{},"剩余参数：函数参数使用，得到真数组",[19,77969,77970],{},"展开运算符：数组中使用，数组展开",[476,77972,77974],{"id":77973},"_453-箭头函数","4.5.3 箭头函数",[22971,77976,77978],{"id":77977},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77980,77981],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77983,77984],{},"它不是万能的！！！",[19,77986,77987],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77989,77990],{},[2585,77991],{"alt":35,"src":77992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77994,1301],{},[19,77996,77997],{},"① 只有一个形参的时候，可以省略小括号：",[19,77999,78000],{},"const fn=x=>{console.log(x)}",[19,78002,78003],{},"② 只有一行代码时可以省略大括号：",[19,78005,78006],{},"const fn=x=>console.log(11)",[19,78008,78009],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78011,78012],{},"const fn=x=>x+x",[19,78014,78015],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78017,78018],{},"⑤ 阻止表单默认提交：",[19,78020,78021],{},"const form = document.querySelector('form')",[19,78023,78024],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78026,78027],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78029,78030],{},"const fn=uname=>({uname:uname})",[19,78032,78033],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78035,78036],{},[2585,78037],{"alt":35,"src":78038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78040,78041],{},[2585,78042],{"alt":35,"src":78043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78045,78046],{},[2585,78047],{"alt":35,"src":78048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78050,78051],{},"一定不要忘记用()，有()就理解为自带return",[22971,78053,78055],{"id":78054},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78057,78058],{},"箭头函数是没有动态参数的arguments",[19,78060,78061],{},[2585,78062],{"alt":35,"src":78063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22971,78065,78067],{"id":78066},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78069,326],{},[328,78071,78072,78075,78078],{},[331,78073,78074],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[331,78076,78077],{},"事件回调函数使用箭头函数时，this 为全局的 window",[331,78079,78080],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78082,78083],{},[2585,78084],{"alt":35,"src":78085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[30,78087,78089],{"className":54042,"code":78088,"language":54044,"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",[26,78090,78091,78099,78104,78109,78114,78119,78124,78128,78133,78137,78141,78146,78151,78156,78160,78164,78169,78174,78179],{"__ignoreMap":35},[39,78092,78093,78095,78097],{"class":41,"line":42},[39,78094,53119],{"class":53},[39,78096,52788],{"class":52275},[39,78098,52282],{"class":53},[39,78100,78101],{"class":41,"line":92},[39,78102,78103],{"class":53},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[39,78105,78106],{"class":41,"line":112},[39,78107,78108],{"class":53},"    console.log(this) \u002F\u002F指向window\n",[39,78110,78111],{"class":41,"line":118},[39,78112,78113],{"class":53},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[39,78115,78116],{"class":41,"line":125},[39,78117,78118],{"class":53},"    function fn() {\n",[39,78120,78121],{"class":41,"line":132},[39,78122,78123],{"class":53},"      console.log(this)  \u002F\u002F指向window\n",[39,78125,78126],{"class":41,"line":138},[39,78127,3284],{"class":53},[39,78129,78130],{"class":41,"line":169},[39,78131,78132],{"class":53},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[39,78134,78135],{"class":41,"line":190},[39,78136,122],{"emptyLinePlaceholder":121},[39,78138,78139],{"class":41,"line":202},[39,78140,72498],{"class":53},[39,78142,78143],{"class":41,"line":207},[39,78144,78145],{"class":53},"      name: 'andy',\n",[39,78147,78148],{"class":41,"line":212},[39,78149,78150],{"class":53},"      sayHai: function () {\n",[39,78152,78153],{"class":41,"line":223},[39,78154,78155],{"class":53},"        console.log(this)\n",[39,78157,78158],{"class":41,"line":228},[39,78159,53373],{"class":53},[39,78161,78162],{"class":41,"line":263},[39,78163,3284],{"class":53},[39,78165,78166],{"class":41,"line":287},[39,78167,78168],{"class":53},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[39,78170,78171],{"class":41,"line":292},[39,78172,78173],{"class":53},"    \u002F\u002F 2.箭头函数的this\n",[39,78175,78176],{"class":41,"line":305},[39,78177,78178],{"class":53},"    const fn = () => console.log(this)\n",[39,78180,78181,78183,78185],{"class":41,"line":310},[39,78182,53392],{"class":53},[39,78184,52788],{"class":52275},[39,78186,52282],{"class":53},[19,78188,78189],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78191,78192],{},"const fn = () => console.log(this)",[19,78194,78195],{},"fn() \u002F\u002F指向window",[19,78197,78198],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,78200,78201],{},"①",[19,78203,78204],{},"const obj = {",[19,78206,78207],{},"uname: 'pink老师',",[19,78209,78210],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,78212,2206],{},[19,78214,78215],{},"调用对象里边的函数",[19,78217,78218],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,78220,78221],{},"obj.sayHai()",[19,78223,78224],{},"②",[19,78226,78227],{},"const obj1 = {",[19,78229,78207],{},[19,78231,78232],{},"sayHai: function () {",[19,78234,78235],{},"let i = 10",[19,78237,78238],{},"const count = () => {",[19,78240,78241],{},"console.log(this)",[19,78243,78244],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,78246,78247],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,78249,2206],{},[19,78251,78252],{},"count()",[19,78254,2206],{},[19,78256,2206],{},[19,78258,78259],{},"obj1.sayHai()",[14,78261,78263],{"id":78262},"_46-解构赋值","4.6 解构赋值",[476,78265,78267],{"id":78266},"_461-数组解构","4.6.1 数组解构",[19,78269,78270],{},"以前要是使用数组中的值的话：",[19,78272,78273],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,78275,78276],{},"const arr=[100,60,80]",[19,78278,78279],{},"const max=arr[0]",[19,78281,78282],{},"const min=arr[1]",[19,78284,78285],{},"const avg=arr[2]",[19,78287,78288],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,78290,78291],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,78293,78294],{},"这个写法就类似于上边的那种用很多const的方法",[19,78296,78297],{},[2585,78298],{"alt":35,"src":78299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[30,78301,78303],{"className":51608,"code":78302,"language":51610,"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",[26,78304,78305,78310,78315,78320,78325,78330,78334,78338,78343,78347,78352,78357,78361,78366,78371,78382,78392,78397,78402,78407,78411,78415],{"__ignoreMap":35},[39,78306,78307],{"class":41,"line":42},[39,78308,78309],{"class":53},"①变量之间交换值:\n",[39,78311,78312],{"class":41,"line":92},[39,78313,78314],{"class":53},"let a=1\n",[39,78316,78317],{"class":41,"line":112},[39,78318,78319],{"class":53},"let b=2;\n",[39,78321,78322],{"class":41,"line":118},[39,78323,78324],{"class":53},"必须加这行代码，不然就会报错\n",[39,78326,78327],{"class":41,"line":125},[39,78328,78329],{"class":53},"[b,a]=[a,b]\n",[39,78331,78332],{"class":41,"line":132},[39,78333,122],{"emptyLinePlaceholder":121},[39,78335,78336],{"class":41,"line":138},[39,78337,122],{"emptyLinePlaceholder":121},[39,78339,78340],{"class":41,"line":169},[39,78341,78342],{"class":53},"可以写成下面的方式：\n",[39,78344,78345],{"class":41,"line":190},[39,78346,78314],{"class":53},[39,78348,78349],{"class":41,"line":202},[39,78350,78351],{"class":53},"let b=2\n",[39,78353,78354],{"class":41,"line":207},[39,78355,78356],{"class":53},";[b,a]=[a,b]\n",[39,78358,78359],{"class":41,"line":212},[39,78360,122],{"emptyLinePlaceholder":121},[39,78362,78363],{"class":41,"line":223},[39,78364,78365],{"class":53},"②排序\n",[39,78367,78368],{"class":41,"line":228},[39,78369,78370],{"class":53},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[39,78372,78373,78376,78379],{"class":41,"line":263},[39,78374,78375],{"class":53},"for (let i = 0; i ",[39,78377,2170],{"class":78378},"s7hpK",[39,78380,78381],{"class":53}," arr1.length; i++) {\n",[39,78383,78384,78387,78389],{"class":41,"line":287},[39,78385,78386],{"class":53},"   for (let j = 0; j ",[39,78388,2170],{"class":78378},[39,78390,78391],{"class":53}," arr1.length - 1; j++) {\n",[39,78393,78394],{"class":41,"line":292},[39,78395,78396],{"class":53},"      if (arr1[j] > arr1[j + 1]) {\n",[39,78398,78399],{"class":41,"line":305},[39,78400,78401],{"class":53},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[39,78403,78404],{"class":41,"line":310},[39,78405,78406],{"class":53},"       }\n",[39,78408,78409],{"class":41,"line":321},[39,78410,5390],{"class":53},[39,78412,78413],{"class":41,"line":713},[39,78414,115],{"class":53},[39,78416,78417],{"class":41,"line":718},[39,78418,78419],{"class":53},"console.log(arr1)\n",[19,78421,78422],{},"数组解构的细节：",[19,78424,78425],{},"①变量多，单元值少",[19,78427,78428],{},[2585,78429],{"alt":35,"src":78430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,78432,78433],{},"防止出现undefined的方法：",[19,78435,78436],{},"const [a=0,b=0] =[1]",[19,78438,78439],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,78441,78442],{},"②变量少，单元值多",[19,78444,78445],{},[2585,78446],{"alt":35,"src":78447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,78449,78450],{},"此时可以使用剩余参数来接收多余的值",[19,78452,78453],{},"const [a,b,...c]=[1,2,3,4]",[19,78455,78456],{},"console.log(c) 输出[3,4]",[19,78458,78459],{},"③可以按需导入，忽略某些返回值",[19,78461,78462],{},[2585,78463],{"alt":35,"src":78464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,78466,78467],{},"④支持多维数组的结构",[30,78469,78473],{"className":78470,"code":78471,"language":78472,"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",[26,78474,78475,78503,78519,78534,78549],{"__ignoreMap":35},[39,78476,78477,78479,78481,78483,78485,78487,78489,78491,78494,78496,78498,78500],{"class":41,"line":42},[39,78478,960],{"class":45},[39,78480,52808],{"class":53},[39,78482,1117],{"class":45},[39,78484,53201],{"class":53},[39,78486,1483],{"class":74},[39,78488,63],{"class":53},[39,78490,1345],{"class":74},[39,78492,78493],{"class":53},", [",[39,78495,1339],{"class":74},[39,78497,63],{"class":53},[39,78499,1558],{"class":74},[39,78501,78502],{"class":53},"]]\n",[39,78504,78505,78508,78510,78512,78514,78516],{"class":41,"line":92},[39,78506,78507],{"class":53},"console.",[39,78509,59222],{"class":49},[39,78511,4934],{"class":53},[39,78513,1457],{"class":74},[39,78515,5297],{"class":53},[39,78517,78518],{"class":128},"  \u002F\u002F1\n",[39,78520,78521,78523,78525,78527,78529,78531],{"class":41,"line":112},[39,78522,78507],{"class":53},[39,78524,59222],{"class":49},[39,78526,4934],{"class":53},[39,78528,1483],{"class":74},[39,78530,5297],{"class":53},[39,78532,78533],{"class":128},"  \u002F\u002F2\n",[39,78535,78536,78538,78540,78542,78544,78546],{"class":41,"line":118},[39,78537,78507],{"class":53},[39,78539,59222],{"class":49},[39,78541,4934],{"class":53},[39,78543,1345],{"class":74},[39,78545,5297],{"class":53},[39,78547,78548],{"class":128},"  \u002F\u002F[3,4]\n",[39,78550,78551,78553,78555,78557,78559,78561,78563,78565],{"class":41,"line":125},[39,78552,78507],{"class":53},[39,78554,59222],{"class":49},[39,78556,4934],{"class":53},[39,78558,1345],{"class":74},[39,78560,5982],{"class":53},[39,78562,1457],{"class":74},[39,78564,5297],{"class":53},[39,78566,78567],{"class":128},"  \u002F\u002F3\n",[30,78569,78571],{"className":78470,"code":78570,"language":78472,"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",[26,78572,78573,78600,78611,78622],{"__ignoreMap":35},[39,78574,78575,78577,78580,78582,78584,78586,78588,78590,78592,78594,78596,78598],{"class":41,"line":42},[39,78576,960],{"class":45},[39,78578,78579],{"class":53}," [a, b, c] ",[39,78581,1117],{"class":45},[39,78583,53201],{"class":53},[39,78585,1483],{"class":74},[39,78587,63],{"class":53},[39,78589,1345],{"class":74},[39,78591,78493],{"class":53},[39,78593,1339],{"class":74},[39,78595,63],{"class":53},[39,78597,1558],{"class":74},[39,78599,78502],{"class":53},[39,78601,78602,78604,78606,78609],{"class":41,"line":92},[39,78603,78507],{"class":53},[39,78605,59222],{"class":49},[39,78607,78608],{"class":53},"(a)",[39,78610,78518],{"class":128},[39,78612,78613,78615,78617,78620],{"class":41,"line":112},[39,78614,78507],{"class":53},[39,78616,59222],{"class":49},[39,78618,78619],{"class":53},"(b)",[39,78621,78533],{"class":128},[39,78623,78624,78626,78628,78631],{"class":41,"line":118},[39,78625,78507],{"class":53},[39,78627,59222],{"class":49},[39,78629,78630],{"class":53},"(c)",[39,78632,78548],{"class":128},[30,78634,78636],{"className":78470,"code":78635,"language":78472,"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",[26,78637,78638,78665,78675,78685,78695],{"__ignoreMap":35},[39,78639,78640,78642,78645,78647,78649,78651,78653,78655,78657,78659,78661,78663],{"class":41,"line":42},[39,78641,960],{"class":45},[39,78643,78644],{"class":53}," [a, b, [c, d]] ",[39,78646,1117],{"class":45},[39,78648,53201],{"class":53},[39,78650,1483],{"class":74},[39,78652,63],{"class":53},[39,78654,1345],{"class":74},[39,78656,78493],{"class":53},[39,78658,1339],{"class":74},[39,78660,63],{"class":53},[39,78662,1558],{"class":74},[39,78664,78502],{"class":53},[39,78666,78667,78669,78671,78673],{"class":41,"line":92},[39,78668,78507],{"class":53},[39,78670,59222],{"class":49},[39,78672,78608],{"class":53},[39,78674,78518],{"class":128},[39,78676,78677,78679,78681,78683],{"class":41,"line":112},[39,78678,78507],{"class":53},[39,78680,59222],{"class":49},[39,78682,78619],{"class":53},[39,78684,78533],{"class":128},[39,78686,78687,78689,78691,78693],{"class":41,"line":118},[39,78688,78507],{"class":53},[39,78690,59222],{"class":49},[39,78692,78630],{"class":53},[39,78694,78567],{"class":128},[39,78696,78697,78699,78701,78704],{"class":41,"line":125},[39,78698,78507],{"class":53},[39,78700,59222],{"class":49},[39,78702,78703],{"class":53},"(d)",[39,78705,78706],{"class":128},"  \u002F\u002F4\n",[476,78708,78710],{"id":78709},"_462-对象解构","4.6.2 对象解构",[19,78712,78713],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78715,78716],{},"用的非常非常多！！！！！！",[22971,78718,78720],{"id":78719},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78722,78723],{},"基本语法：",[328,78725,78726,78729,78732,78735],{},[331,78727,78728],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[331,78730,78731],{},"对象属性的值将被赋值给与属性名相同的变量",[331,78733,78734],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[331,78736,78737],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[30,78739,78741],{"className":51608,"code":78740,"language":51610,"meta":35,"style":35},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[26,78742,78743,78748,78753,78758,78762],{"__ignoreMap":35},[39,78744,78745],{"class":41,"line":42},[39,78746,78747],{"class":53},"const obj = {\n",[39,78749,78750],{"class":41,"line":92},[39,78751,78752],{"class":53},"   uname: 'pink老师',\n",[39,78754,78755],{"class":41,"line":112},[39,78756,78757],{"class":53},"   age: 18,\n",[39,78759,78760],{"class":41,"line":118},[39,78761,115],{"class":53},[39,78763,78764],{"class":41,"line":125},[39,78765,78766],{"class":53},"const { uname, age } = obj\n",[19,78768,78769],{},"上方代码这样写等价于：",[19,78771,78772],{},"const uname等价于obj.uname",[19,78774,78775],{},"变量名可以重新改名：",[19,78777,78778],{},"const uname='red老师'",[19,78780,78781],{},"const user={",[19,78783,78784],{},"  uname:'pink老师',",[19,78786,78787],{},"  age:18",[19,78789,2206],{},[19,78791,78792],{},"const {uname,age}=user",[19,78794,78795],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78797,78798],{},"const {旧变量名：新变量名}=对象",[19,78800,78801],{},"const {uname:username,age}=user",[22971,78803,78805],{"id":78804},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78807,78808],{},[2585,78809],{"alt":35,"src":78810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22971,78812,78814],{"id":78813},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78816,78817],{},[2585,78818],{"alt":35,"src":78819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[30,78821,78823],{"className":54042,"code":78822,"language":54044,"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",[26,78824,78825,78833,78838,78843,78848,78853,78858,78863,78868,78873,78877,78882,78887],{"__ignoreMap":35},[39,78826,78827,78829,78831],{"class":41,"line":42},[39,78828,53119],{"class":53},[39,78830,52788],{"class":52275},[39,78832,52282],{"class":53},[39,78834,78835],{"class":41,"line":92},[39,78836,78837],{"class":53},"    const pig = {\n",[39,78839,78840],{"class":41,"line":112},[39,78841,78842],{"class":53},"      name: '佩奇',\n",[39,78844,78845],{"class":41,"line":118},[39,78846,78847],{"class":53},"      family: {\n",[39,78849,78850],{"class":41,"line":125},[39,78851,78852],{"class":53},"        mother: '猪妈妈',\n",[39,78854,78855],{"class":41,"line":132},[39,78856,78857],{"class":53},"        father: '猪爸爸',\n",[39,78859,78860],{"class":41,"line":138},[39,78861,78862],{"class":53},"        sister: '乔治'\n",[39,78864,78865],{"class":41,"line":169},[39,78866,78867],{"class":53},"      },\n",[39,78869,78870],{"class":41,"line":190},[39,78871,78872],{"class":53},"      age: 6\n",[39,78874,78875],{"class":41,"line":202},[39,78876,3284],{"class":53},[39,78878,78879],{"class":41,"line":207},[39,78880,78881],{"class":53},"    \u002F\u002F 多级对象解构\n",[39,78883,78884],{"class":41,"line":212},[39,78885,78886],{"class":53},"    const { name, family: { mother, father, sister }, age } = pig\n",[39,78888,78889,78891,78893],{"class":41,"line":223},[39,78890,53392],{"class":53},[39,78892,52788],{"class":52275},[39,78894,52282],{"class":53},[19,78896,78897],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[30,78899,78902],{"className":78900,"code":78901,"language":77422,"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",[26,78903,78904,78909,78920,78932,78944,78953,78957,78968,78980,78990,78995,78999,79009,79020,79029,79033,79037,79048,79059,79068,79072,79077],{"__ignoreMap":35},[39,78905,78906],{"class":41,"line":42},[39,78907,78908],{"class":128},"    \u002F\u002F 这是后台传递过来的数据\n",[39,78910,78911,78913,78916,78918],{"class":41,"line":92},[39,78912,12283],{"class":45},[39,78914,78915],{"class":53}," msg ",[39,78917,1117],{"class":45},[39,78919,16545],{"class":53},[39,78921,78922,78925,78927,78930],{"class":41,"line":112},[39,78923,78924],{"class":237},"      \"code\"",[39,78926,2119],{"class":45},[39,78928,78929],{"class":74}," 200",[39,78931,32441],{"class":53},[39,78933,78934,78937,78939,78942],{"class":41,"line":118},[39,78935,78936],{"class":237},"      \"msg\"",[39,78938,2119],{"class":45},[39,78940,78941],{"class":237}," \"获取新闻列表成功\"",[39,78943,32441],{"class":53},[39,78945,78946,78949,78951],{"class":41,"line":125},[39,78947,78948],{"class":237},"      \"data\"",[39,78950,2119],{"class":45},[39,78952,56422],{"class":53},[39,78954,78955],{"class":41,"line":132},[39,78956,3603],{"class":53},[39,78958,78959,78962,78964,78966],{"class":41,"line":138},[39,78960,78961],{"class":237},"          \"id\"",[39,78963,2119],{"class":45},[39,78965,26093],{"class":74},[39,78967,32441],{"class":53},[39,78969,78970,78973,78975,78978],{"class":41,"line":169},[39,78971,78972],{"class":237},"          \"title\"",[39,78974,2119],{"class":45},[39,78976,78977],{"class":237}," \"5G商用自己，三大运用商收入下降\"",[39,78979,32441],{"class":53},[39,78981,78982,78985,78987],{"class":41,"line":190},[39,78983,78984],{"class":237},"          \"count\"",[39,78986,2119],{"class":45},[39,78988,78989],{"class":74}," 58\n",[39,78991,78992],{"class":41,"line":202},[39,78993,78994],{"class":53},"        },\n",[39,78996,78997],{"class":41,"line":207},[39,78998,3603],{"class":53},[39,79000,79001,79003,79005,79007],{"class":41,"line":212},[39,79002,78961],{"class":237},[39,79004,2119],{"class":45},[39,79006,15728],{"class":74},[39,79008,32441],{"class":53},[39,79010,79011,79013,79015,79018],{"class":41,"line":223},[39,79012,78972],{"class":237},[39,79014,2119],{"class":45},[39,79016,79017],{"class":237}," \"国际媒体头条速览\"",[39,79019,32441],{"class":53},[39,79021,79022,79024,79026],{"class":41,"line":228},[39,79023,78984],{"class":237},[39,79025,2119],{"class":45},[39,79027,79028],{"class":74}," 56\n",[39,79030,79031],{"class":41,"line":263},[39,79032,78994],{"class":53},[39,79034,79035],{"class":41,"line":287},[39,79036,3603],{"class":53},[39,79038,79039,79041,79043,79046],{"class":41,"line":292},[39,79040,78961],{"class":237},[39,79042,2119],{"class":45},[39,79044,79045],{"class":74}," 3",[39,79047,32441],{"class":53},[39,79049,79050,79052,79054,79057],{"class":41,"line":305},[39,79051,78972],{"class":237},[39,79053,2119],{"class":45},[39,79055,79056],{"class":237}," \"乌克兰和俄罗斯持续冲突\"",[39,79058,32441],{"class":53},[39,79060,79061,79063,79065],{"class":41,"line":310},[39,79062,78984],{"class":237},[39,79064,2119],{"class":45},[39,79066,79067],{"class":74}," 1669\n",[39,79069,79070],{"class":41,"line":321},[39,79071,78994],{"class":53},[39,79073,79074],{"class":41,"line":713},[39,79075,79076],{"class":53},"      ]\n",[39,79078,79079],{"class":41,"line":718},[39,79080,3284],{"class":53},[19,79082,79083],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79085,79086],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79088,79089],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,79091,79092],{},"function({data}) {",[19,79094,79095],{},"console.log(data)",[19,79097,2206],{},[19,79099,79100],{},"render(msg)",[19,79102,79103],{},"实参传递给形参的时候解构了",[19,79105,79106],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79108,79109],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79111,79112],{},"function render({data:mydata}) {",[19,79114,79115],{},"  console.log(data)",[19,79117,2206],{},[476,79119,79121],{"id":79120},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79123,79124],{},"有两种情况：一个是数组结构，一个是立即执行函数",[328,79126,79127],{},[331,79128,79129],{},"如果对一个数组进行遍历，有两种方式：",[19,79131,79132],{},"①法1",[19,79134,79135],{},"const arr=[1,2,3]",[19,79137,79138],{},"arr.map(function(item,index) {",[19,79140,79141],{},"  console.log(item)",[19,79143,53439],{},[19,79145,79146],{},[2585,79147],{"alt":35,"src":79148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79150,79151],{},"②法2",[19,79153,79154],{},"const str='pink'",[19,79156,79157],{},"[1,2,3].map(function(item,index) {",[19,79159,79160],{},"console.log(item)",[19,79162,53439],{},[19,79164,79165],{},[2585,79166],{"alt":35,"src":79167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79169,79170],{},"此时会报错",[19,79172,79173],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79175,79160],{},[19,79177,53439],{},[19,79179,79180],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79182,79184],{"id":79183},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79186,79187],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79189,79190],{},"可以理解为加强版的for循环",[19,79192,79193],{},[2585,79194],{"alt":35,"src":79195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,79197,79198],{},"里边不写return，不返回数组，只遍历不返回",[19,79200,79201],{},"map是返回数组",[19,79203,79204],{},"forEach主要用于遍历数组对象",[30,79206,79208],{"className":54042,"code":79207,"language":54044,"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",[26,79209,79210,79218,79223,79228,79233,79238,79242,79247],{"__ignoreMap":35},[39,79211,79212,79214,79216],{"class":41,"line":42},[39,79213,53119],{"class":53},[39,79215,52788],{"class":52275},[39,79217,52282],{"class":53},[39,79219,79220],{"class":41,"line":92},[39,79221,79222],{"class":53},"    const arr = ['red', 'green', 'pink']\n",[39,79224,79225],{"class":41,"line":112},[39,79226,79227],{"class":53},"    const result = arr.forEach(function (item, index) {\n",[39,79229,79230],{"class":41,"line":118},[39,79231,79232],{"class":53},"      console.log(item)\n",[39,79234,79235],{"class":41,"line":125},[39,79236,79237],{"class":53},"      console.log(index)\n",[39,79239,79240],{"class":41,"line":132},[39,79241,34436],{"class":53},[39,79243,79244],{"class":41,"line":138},[39,79245,79246],{"class":53},"    console.log(result)\n",[39,79248,79249,79251,79253],{"class":41,"line":169},[39,79250,53392],{"class":53},[39,79252,52788],{"class":52275},[39,79254,52282],{"class":53},[19,79256,79257],{},[2585,79258],{"alt":35,"src":79259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79261,79263],{"id":79262},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,79265,79266],{},[2585,79267],{"alt":35,"src":79268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,79270,79271],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[30,79273,79275],{"className":54042,"code":79274,"language":54044,"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",[26,79276,79277,79285,79293,79298,79303,79307,79311,79316,79320,79325,79333],{"__ignoreMap":35},[39,79278,79279,79281,79283],{"class":41,"line":42},[39,79280,2170],{"class":53},[39,79282,52775],{"class":52275},[39,79284,52282],{"class":53},[39,79286,79287,79289,79291],{"class":41,"line":92},[39,79288,53119],{"class":53},[39,79290,52788],{"class":52275},[39,79292,52282],{"class":53},[39,79294,79295],{"class":41,"line":112},[39,79296,79297],{"class":53},"    const arr = [10, 20, 30]\n",[39,79299,79300],{"class":41,"line":118},[39,79301,79302],{"class":53},"    const newArr = arr.filter(function (item, index) {\n",[39,79304,79305],{"class":41,"line":125},[39,79306,79232],{"class":53},[39,79308,79309],{"class":41,"line":132},[39,79310,79237],{"class":53},[39,79312,79313],{"class":41,"line":138},[39,79314,79315],{"class":53},"      return item >= 20\n",[39,79317,79318],{"class":41,"line":169},[39,79319,34436],{"class":53},[39,79321,79322],{"class":41,"line":190},[39,79323,79324],{"class":53},"    console.log(newArr)\n",[39,79326,79327,79329,79331],{"class":41,"line":202},[39,79328,53392],{"class":53},[39,79330,52788],{"class":52275},[39,79332,52282],{"class":53},[39,79334,79335,79337,79339],{"class":41,"line":207},[39,79336,52760],{"class":53},[39,79338,52775],{"class":52275},[39,79340,52282],{"class":53},[19,79342,79343],{},"这个也可以写成箭头函数：",[30,79345,79347],{"className":51608,"code":79346,"language":51610,"meta":35,"style":35},"const newArr = arr.filter(item => item >= 20)\n",[26,79348,79349],{"__ignoreMap":35},[39,79350,79351],{"class":41,"line":42},[39,79352,79346],{"class":53},[14,79354,79356],{"id":79355},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,79358,79359],{},[2585,79360],{"alt":35,"src":79361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,79363,79364],{},"步骤：",[19,79366,79367],{},"①：渲染页面模块",[489,79369,79370,79373],{},[331,79371,79372],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[331,79374,79375],{},"用forEach+字符串的形式",[19,79377,79378],{},"②：点击不同需求，显示不同页面内容",[489,79380,79381,79384,79387,79390,79393],{},[331,79382,79383],{},"点击采取事件委托方式 .filter",[331,79385,79386],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[331,79388,79389],{},"筛选条件是根据点击的 data-index 来判断",[331,79391,79392],{},"可以使用对象解构，把事件对象解构",[331,79394,79395],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[30,79397,79399],{"className":51608,"code":79398,"language":51610,"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",[26,79400,79401,79411,79425,79429,79437,79451,79471,79483,79491,79497,79507,79517,79527,79531,79535,79541,79554,79566,79576,79588,79592,79596,79603,79616,79628,79645,79663,79676,79680,79684,79696,79706,79710,79714,79721,79762,79789,79799,79803,79807,79815,79827,79831,79835,79843,79855,79867,79878,79882,79886,79895,79907,79918,79922,79926,79935,79947,79959,79963,79967,79974,79984,79996,80008,80023,80027,80031,80039,80055,80065,80075,80085,80097,80101,80105,80115,80126,80136,80140,80148,80156,80160,80168,80183,80209,80234,80259,80278,80286,80300,80305,80310,80315,80320,80325,80333,80341,80346,80357,80362,80372,80382,80392,80402,80406,80410,80419,80428,80437,80446,80450,80454,80463,80472,80481,80490,80494,80498,80507,80516,80525,80534,80538,80542,80551,80560,80569,80578,80582,80586,80595,80604,80613,80622,80626,80630,80639,80648,80657,80666,80670,80674,80683,80692,80700,80709,80713,80717,80721,80726,80738,80743,80755,80759,80776,80804,80813,80818,80828,80838,80847,80852,80857,80861,80866,80883,80887,80892,80900,80905,80932,80937,80957,80962,80974,80979,80984,80989,81000,81014,81051,81069,81102,81119,81143,81147,81152,81158,81162,81166,81170,81178,81186,81190],{"__ignoreMap":35},[39,79402,79403,79405,79407,79409],{"class":41,"line":42},[39,79404,52272],{"class":53},[39,79406,52276],{"class":52275},[39,79408,52279],{"class":49},[39,79410,52282],{"class":53},[39,79412,79413,79415,79417,79419,79421,79423],{"class":41,"line":92},[39,79414,2170],{"class":53},[39,79416,51610],{"class":52275},[39,79418,52291],{"class":49},[39,79420,1117],{"class":53},[39,79422,52296],{"class":237},[39,79424,52282],{"class":53},[39,79426,79427],{"class":41,"line":112},[39,79428,122],{"emptyLinePlaceholder":121},[39,79430,79431,79433,79435],{"class":41,"line":118},[39,79432,2170],{"class":53},[39,79434,52309],{"class":52275},[39,79436,52282],{"class":53},[39,79438,79439,79441,79443,79445,79447,79449],{"class":41,"line":125},[39,79440,53119],{"class":53},[39,79442,52319],{"class":52275},[39,79444,52322],{"class":49},[39,79446,1117],{"class":53},[39,79448,52327],{"class":237},[39,79450,52282],{"class":53},[39,79452,79453,79455,79457,79459,79461,79463,79465,79467,79469],{"class":41,"line":132},[39,79454,53119],{"class":53},[39,79456,52319],{"class":52275},[39,79458,15893],{"class":49},[39,79460,1117],{"class":53},[39,79462,52366],{"class":237},[39,79464,52346],{"class":49},[39,79466,1117],{"class":53},[39,79468,52373],{"class":237},[39,79470,52282],{"class":53},[39,79472,79473,79475,79477,79479,79481],{"class":41,"line":138},[39,79474,53119],{"class":53},[39,79476,52382],{"class":52275},[39,79478,52385],{"class":53},[39,79480,52382],{"class":52275},[39,79482,52282],{"class":53},[39,79484,79485,79487,79489],{"class":41,"line":169},[39,79486,53119],{"class":53},[39,79488,1192],{"class":52275},[39,79490,52282],{"class":53},[39,79492,79493,79495],{"class":41,"line":190},[39,79494,7479],{"class":52275},[39,79496,16545],{"class":53},[39,79498,79499,79501,79503,79505],{"class":41,"line":202},[39,79500,55670],{"class":74},[39,79502,52412],{"class":53},[39,79504,1457],{"class":74},[39,79506,318],{"class":53},[39,79508,79509,79511,79513,79515],{"class":41,"line":207},[39,79510,55681],{"class":74},[39,79512,52412],{"class":53},[39,79514,1457],{"class":74},[39,79516,318],{"class":53},[39,79518,79519,79521,79523,79525],{"class":41,"line":212},[39,79520,73571],{"class":74},[39,79522,52412],{"class":53},[39,79524,61480],{"class":74},[39,79526,318],{"class":53},[39,79528,79529],{"class":41,"line":223},[39,79530,3284],{"class":53},[39,79532,79533],{"class":41,"line":228},[39,79534,122],{"emptyLinePlaceholder":121},[39,79536,79537,79539],{"class":41,"line":263},[39,79538,63098],{"class":49},[39,79540,16545],{"class":53},[39,79542,79543,79545,79547,79550,79552],{"class":41,"line":287},[39,79544,55746],{"class":74},[39,79546,52412],{"class":53},[39,79548,79549],{"class":74},"990",[39,79551,52467],{"class":45},[39,79553,318],{"class":53},[39,79555,79556,79558,79560,79562,79564],{"class":41,"line":292},[39,79557,55681],{"class":74},[39,79559,52412],{"class":53},[39,79561,1457],{"class":74},[39,79563,52531],{"class":74},[39,79565,318],{"class":53},[39,79567,79568,79570,79572,79574],{"class":41,"line":305},[39,79569,55984],{"class":74},[39,79571,52412],{"class":53},[39,79573,52452],{"class":74},[39,79575,318],{"class":53},[39,79577,79578,79581,79583,79586],{"class":41,"line":310},[39,79579,79580],{"class":74},"      flex-wrap",[39,79582,52412],{"class":53},[39,79584,79585],{"class":74},"wrap",[39,79587,318],{"class":53},[39,79589,79590],{"class":41,"line":321},[39,79591,3284],{"class":53},[39,79593,79594],{"class":41,"line":713},[39,79595,122],{"emptyLinePlaceholder":121},[39,79597,79598,79601],{"class":41,"line":718},[39,79599,79600],{"class":49},"    .item",[39,79602,16545],{"class":53},[39,79604,79605,79607,79609,79612,79614],{"class":41,"line":723},[39,79606,55746],{"class":74},[39,79608,52412],{"class":53},[39,79610,79611],{"class":74},"240",[39,79613,52467],{"class":45},[39,79615,318],{"class":53},[39,79617,79618,79620,79622,79624,79626],{"class":41,"line":729},[39,79619,62975],{"class":74},[39,79621,52412],{"class":53},[39,79623,423],{"class":74},[39,79625,52467],{"class":45},[39,79627,318],{"class":53},[39,79629,79630,79632,79634,79636,79638,79641,79643],{"class":41,"line":735},[39,79631,55670],{"class":74},[39,79633,52412],{"class":53},[39,79635,248],{"class":74},[39,79637,52467],{"class":45},[39,79639,79640],{"class":74}," 30",[39,79642,52467],{"class":45},[39,79644,318],{"class":53},[39,79646,79647,79649,79651,79653,79656,79659,79661],{"class":41,"line":741},[39,79648,62835],{"class":74},[39,79650,52412],{"class":53},[39,79652,29096],{"class":74},[39,79654,79655],{"class":74}," ease",[39,79657,79658],{"class":74}," .5",[39,79660,1956],{"class":45},[39,79662,318],{"class":53},[39,79664,79665,79668,79670,79672,79674],{"class":41,"line":747},[39,79666,79667],{"class":74},"      margin-bottom",[39,79669,52412],{"class":53},[39,79671,248],{"class":74},[39,79673,52467],{"class":45},[39,79675,318],{"class":53},[39,79677,79678],{"class":41,"line":753},[39,79679,3284],{"class":53},[39,79681,79682],{"class":41,"line":758},[39,79683,122],{"emptyLinePlaceholder":121},[39,79685,79686,79689,79691,79694],{"class":41,"line":763},[39,79687,79688],{"class":49},"    .item:nth-child",[39,79690,54],{"class":53},[39,79692,79693],{"class":74},"4n",[39,79695,89],{"class":53},[39,79697,79698,79700,79702,79704],{"class":41,"line":772},[39,79699,62975],{"class":74},[39,79701,52412],{"class":53},[39,79703,1457],{"class":74},[39,79705,318],{"class":53},[39,79707,79708],{"class":41,"line":777},[39,79709,3284],{"class":53},[39,79711,79712],{"class":41,"line":785},[39,79713,122],{"emptyLinePlaceholder":121},[39,79715,79716,79719],{"class":41,"line":796},[39,79717,79718],{"class":49},"    .item:hover",[39,79720,16545],{"class":53},[39,79722,79723,79726,79728,79730,79732,79734,79736,79738,79740,79743,79745,79747,79749,79751,79753,79755,79757,79760],{"class":41,"line":808},[39,79724,79725],{"class":74},"      box-shadow",[39,79727,52412],{"class":53},[39,79729,1457],{"class":74},[39,79731,52467],{"class":45},[39,79733,315],{"class":74},[39,79735,52467],{"class":45},[39,79737,3245],{"class":74},[39,79739,52467],{"class":45},[39,79741,79742],{"class":74}," rgba",[39,79744,54],{"class":53},[39,79746,1457],{"class":74},[39,79748,63],{"class":53},[39,79750,1457],{"class":74},[39,79752,63],{"class":53},[39,79754,1457],{"class":74},[39,79756,63],{"class":53},[39,79758,79759],{"class":74},".2",[39,79761,166],{"class":53},[39,79763,79764,79767,79769,79772,79774,79776,79778,79781,79783,79785,79787],{"class":41,"line":823},[39,79765,79766],{"class":74},"      transform",[39,79768,52412],{"class":53},[39,79770,79771],{"class":74},"translate3d",[39,79773,54],{"class":53},[39,79775,1457],{"class":74},[39,79777,63],{"class":53},[39,79779,79780],{"class":74},"-4",[39,79782,52467],{"class":45},[39,79784,63],{"class":53},[39,79786,1457],{"class":74},[39,79788,166],{"class":53},[39,79790,79791,79793,79795,79797],{"class":41,"line":839},[39,79792,63000],{"class":74},[39,79794,52412],{"class":53},[39,79796,63005],{"class":74},[39,79798,318],{"class":53},[39,79800,79801],{"class":41,"line":845},[39,79802,3284],{"class":53},[39,79804,79805],{"class":41,"line":856},[39,79806,122],{"emptyLinePlaceholder":121},[39,79808,79809,79811,79813],{"class":41,"line":861},[39,79810,79600],{"class":49},[39,79812,56590],{"class":52275},[39,79814,16545],{"class":53},[39,79816,79817,79819,79821,79823,79825],{"class":41,"line":870},[39,79818,55746],{"class":74},[39,79820,52412],{"class":53},[39,79822,278],{"class":74},[39,79824,1592],{"class":45},[39,79826,318],{"class":53},[39,79828,79829],{"class":41,"line":9084},[39,79830,3284],{"class":53},[39,79832,79833],{"class":41,"line":9090},[39,79834,122],{"emptyLinePlaceholder":121},[39,79836,79837,79839,79841],{"class":41,"line":9102},[39,79838,79600],{"class":49},[39,79840,63279],{"class":49},[39,79842,16545],{"class":53},[39,79844,79845,79847,79849,79851,79853],{"class":41,"line":9114},[39,79846,55897],{"class":74},[39,79848,52412],{"class":53},[39,79850,1911],{"class":74},[39,79852,52467],{"class":45},[39,79854,318],{"class":53},[39,79856,79857,79859,79861,79863,79865],{"class":41,"line":9126},[39,79858,79667],{"class":74},[39,79860,52412],{"class":53},[39,79862,423],{"class":74},[39,79864,52467],{"class":45},[39,79866,318],{"class":53},[39,79868,79869,79871,79873,79876],{"class":41,"line":10784},[39,79870,58391],{"class":74},[39,79872,52412],{"class":53},[39,79874,79875],{"class":74},"#666",[39,79877,318],{"class":53},[39,79879,79880],{"class":41,"line":10809},[39,79881,3284],{"class":53},[39,79883,79884],{"class":41,"line":10832},[39,79885,122],{"emptyLinePlaceholder":121},[39,79887,79888,79890,79893],{"class":41,"line":10856},[39,79889,79600],{"class":49},[39,79891,79892],{"class":49}," .price",[39,79894,16545],{"class":53},[39,79896,79897,79899,79901,79903,79905],{"class":41,"line":10861},[39,79898,55897],{"class":74},[39,79900,52412],{"class":53},[39,79902,2010],{"class":74},[39,79904,52467],{"class":45},[39,79906,318],{"class":53},[39,79908,79909,79911,79913,79916],{"class":41,"line":10866},[39,79910,58391],{"class":74},[39,79912,52412],{"class":53},[39,79914,79915],{"class":74},"firebrick",[39,79917,318],{"class":53},[39,79919,79920],{"class":41,"line":10871},[39,79921,3284],{"class":53},[39,79923,79924],{"class":41,"line":10880},[39,79925,122],{"emptyLinePlaceholder":121},[39,79927,79928,79930,79933],{"class":41,"line":10885},[39,79929,79600],{"class":49},[39,79931,79932],{"class":49}," .price::before",[39,79934,16545],{"class":53},[39,79936,79937,79940,79942,79945],{"class":41,"line":10891},[39,79938,79939],{"class":74},"      content",[39,79941,52412],{"class":53},[39,79943,79944],{"class":237},"'￥'",[39,79946,318],{"class":53},[39,79948,79949,79951,79953,79955,79957],{"class":41,"line":10912},[39,79950,55897],{"class":74},[39,79952,52412],{"class":53},[39,79954,1810],{"class":74},[39,79956,52467],{"class":45},[39,79958,318],{"class":53},[39,79960,79961],{"class":41,"line":10918},[39,79962,3284],{"class":53},[39,79964,79965],{"class":41,"line":10932},[39,79966,122],{"emptyLinePlaceholder":121},[39,79968,79969,79972],{"class":41,"line":10938},[39,79970,79971],{"class":49},"    .filter",[39,79973,16545],{"class":53},[39,79975,79976,79978,79980,79982],{"class":41,"line":10965},[39,79977,55984],{"class":74},[39,79979,52412],{"class":53},[39,79981,52452],{"class":74},[39,79983,318],{"class":53},[39,79985,79986,79988,79990,79992,79994],{"class":41,"line":10974},[39,79987,55746],{"class":74},[39,79989,52412],{"class":53},[39,79991,79549],{"class":74},[39,79993,52467],{"class":45},[39,79995,318],{"class":53},[39,79997,79998,80000,80002,80004,80006],{"class":41,"line":10980},[39,79999,55681],{"class":74},[39,80001,52412],{"class":53},[39,80003,1457],{"class":74},[39,80005,52531],{"class":74},[39,80007,318],{"class":53},[39,80009,80010,80012,80014,80016,80018,80020],{"class":41,"line":10988},[39,80011,55670],{"class":74},[39,80013,52412],{"class":53},[39,80015,1917],{"class":74},[39,80017,52467],{"class":45},[39,80019,79640],{"class":74},[39,80021,80022],{"class":45},"px\n",[39,80024,80025],{"class":41,"line":10993},[39,80026,3284],{"class":53},[39,80028,80029],{"class":41,"line":17577},[39,80030,122],{"emptyLinePlaceholder":121},[39,80032,80033,80035,80037],{"class":41,"line":17583},[39,80034,79971],{"class":49},[39,80036,60],{"class":52275},[39,80038,16545],{"class":53},[39,80040,80041,80043,80045,80047,80049,80051,80053],{"class":41,"line":17606},[39,80042,55670],{"class":74},[39,80044,52412],{"class":53},[39,80046,423],{"class":74},[39,80048,52467],{"class":45},[39,80050,10018],{"class":74},[39,80052,52467],{"class":45},[39,80054,318],{"class":53},[39,80056,80057,80059,80061,80063],{"class":41,"line":17612},[39,80058,62696],{"class":74},[39,80060,52412],{"class":53},[39,80062,62793],{"class":74},[39,80064,318],{"class":53},[39,80066,80067,80069,80071,80073],{"class":41,"line":17635},[39,80068,58391],{"class":74},[39,80070,52412],{"class":53},[39,80072,79875],{"class":74},[39,80074,318],{"class":53},[39,80076,80077,80079,80081,80083],{"class":41,"line":17649},[39,80078,64945],{"class":74},[39,80080,52412],{"class":53},[39,80082,55712],{"class":74},[39,80084,318],{"class":53},[39,80086,80087,80089,80091,80093,80095],{"class":41,"line":17669},[39,80088,62725],{"class":74},[39,80090,52412],{"class":53},[39,80092,248],{"class":74},[39,80094,52467],{"class":45},[39,80096,318],{"class":53},[39,80098,80099],{"class":41,"line":17675},[39,80100,3284],{"class":53},[39,80102,80103],{"class":41,"line":17686},[39,80104,122],{"emptyLinePlaceholder":121},[39,80106,80107,80109,80111,80113],{"class":41,"line":17709},[39,80108,79971],{"class":49},[39,80110,60],{"class":52275},[39,80112,62875],{"class":49},[39,80114,16545],{"class":53},[39,80116,80117,80119,80121,80124],{"class":41,"line":17731},[39,80118,55859],{"class":74},[39,80120,52412],{"class":53},[39,80122,80123],{"class":74},"#05943c",[39,80125,318],{"class":53},[39,80127,80128,80130,80132,80134],{"class":41,"line":17736},[39,80129,58391],{"class":74},[39,80131,52412],{"class":53},[39,80133,61817],{"class":74},[39,80135,318],{"class":53},[39,80137,80138],{"class":41,"line":17742},[39,80139,3284],{"class":53},[39,80141,80142,80144,80146],{"class":41,"line":17756},[39,80143,53392],{"class":53},[39,80145,1192],{"class":52275},[39,80147,52282],{"class":53},[39,80149,80150,80152,80154],{"class":41,"line":17769},[39,80151,52760],{"class":53},[39,80153,52309],{"class":52275},[39,80155,52282],{"class":53},[39,80157,80158],{"class":41,"line":17774},[39,80159,122],{"emptyLinePlaceholder":121},[39,80161,80162,80164,80166],{"class":41,"line":17788},[39,80163,2170],{"class":53},[39,80165,52775],{"class":52275},[39,80167,52282],{"class":53},[39,80169,80170,80172,80174,80176,80178,80181],{"class":41,"line":17793},[39,80171,53119],{"class":53},[39,80173,52586],{"class":52275},[39,80175,54461],{"class":49},[39,80177,1117],{"class":53},[39,80179,80180],{"class":237},"\"filter\"",[39,80182,52282],{"class":53},[39,80184,80185,80187,80189,80191,80193,80195,80198,80200,80202,80205,80207],{"class":41,"line":17799},[39,80186,52316],{"class":53},[39,80188,922],{"class":52275},[39,80190,62032],{"class":49},[39,80192,1117],{"class":53},[39,80194,62037],{"class":237},[39,80196,80197],{"class":49}," data-index",[39,80199,1117],{"class":53},[39,80201,4761],{"class":237},[39,80203,80204],{"class":53},">0-100元\u003C\u002F",[39,80206,922],{"class":52275},[39,80208,52282],{"class":53},[39,80210,80211,80213,80215,80217,80219,80221,80223,80225,80227,80230,80232],{"class":41,"line":17804},[39,80212,52316],{"class":53},[39,80214,922],{"class":52275},[39,80216,62032],{"class":49},[39,80218,1117],{"class":53},[39,80220,62037],{"class":237},[39,80222,80197],{"class":49},[39,80224,1117],{"class":53},[39,80226,4784],{"class":237},[39,80228,80229],{"class":53},">100-300元\u003C\u002F",[39,80231,922],{"class":52275},[39,80233,52282],{"class":53},[39,80235,80236,80238,80240,80242,80244,80246,80248,80250,80252,80255,80257],{"class":41,"line":17818},[39,80237,52316],{"class":53},[39,80239,922],{"class":52275},[39,80241,62032],{"class":49},[39,80243,1117],{"class":53},[39,80245,62037],{"class":237},[39,80247,80197],{"class":49},[39,80249,1117],{"class":53},[39,80251,4797],{"class":237},[39,80253,80254],{"class":53},">300元以上\u003C\u002F",[39,80256,922],{"class":52275},[39,80258,52282],{"class":53},[39,80260,80261,80263,80265,80267,80269,80271,80274,80276],{"class":41,"line":17823},[39,80262,52316],{"class":53},[39,80264,922],{"class":52275},[39,80266,62032],{"class":49},[39,80268,1117],{"class":53},[39,80270,62037],{"class":237},[39,80272,80273],{"class":53},">全部区间\u003C\u002F",[39,80275,922],{"class":52275},[39,80277,52282],{"class":53},[39,80279,80280,80282,80284],{"class":41,"line":17828},[39,80281,53392],{"class":53},[39,80283,52586],{"class":52275},[39,80285,52282],{"class":53},[39,80287,80288,80290,80292,80294,80296,80298],{"class":41,"line":17842},[39,80289,53119],{"class":53},[39,80291,52586],{"class":52275},[39,80293,54461],{"class":49},[39,80295,1117],{"class":53},[39,80297,63583],{"class":237},[39,80299,52282],{"class":53},[39,80301,80302],{"class":41,"line":17854},[39,80303,80304],{"class":128},"    \u003C!-- \u003Cdiv class=\"item\">\n",[39,80306,80307],{"class":41,"line":17859},[39,80308,80309],{"class":128},"      \u003Cimg src=\"\" alt=\"\">\n",[39,80311,80312],{"class":41,"line":17872},[39,80313,80314],{"class":128},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[39,80316,80317],{"class":41,"line":17877},[39,80318,80319],{"class":128},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[39,80321,80322],{"class":41,"line":17882},[39,80323,80324],{"class":128},"    \u003C\u002Fdiv> -->\n",[39,80326,80327,80329,80331],{"class":41,"line":17887},[39,80328,53392],{"class":53},[39,80330,52586],{"class":52275},[39,80332,52282],{"class":53},[39,80334,80335,80337,80339],{"class":41,"line":17900},[39,80336,53119],{"class":53},[39,80338,52788],{"class":52275},[39,80340,52282],{"class":53},[39,80342,80343],{"class":41,"line":17905},[39,80344,80345],{"class":128},"    \u002F\u002F 2. 初始化数据\n",[39,80347,80348,80350,80353,80355],{"class":41,"line":33608},[39,80349,12283],{"class":45},[39,80351,80352],{"class":74}," goodsList",[39,80354,71],{"class":45},[39,80356,56422],{"class":53},[39,80358,80359],{"class":41,"line":33614},[39,80360,80361],{"class":53},"      {\n",[39,80363,80364,80367,80370],{"class":41,"line":33620},[39,80365,80366],{"class":53},"        id: ",[39,80368,80369],{"class":237},"'4001172'",[39,80371,32441],{"class":53},[39,80373,80374,80377,80380],{"class":41,"line":33626},[39,80375,80376],{"class":53},"        name: ",[39,80378,80379],{"class":237},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[39,80381,32441],{"class":53},[39,80383,80384,80387,80390],{"class":41,"line":33632},[39,80385,80386],{"class":53},"        price: ",[39,80388,80389],{"class":237},"'289.00'",[39,80391,32441],{"class":53},[39,80393,80394,80397,80400],{"class":41,"line":33643},[39,80395,80396],{"class":53},"        picture: ",[39,80398,80399],{"class":237},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[39,80401,32441],{"class":53},[39,80403,80404],{"class":41,"line":33649},[39,80405,78867],{"class":53},[39,80407,80408],{"class":41,"line":33669},[39,80409,80361],{"class":53},[39,80411,80412,80414,80417],{"class":41,"line":33675},[39,80413,80366],{"class":53},[39,80415,80416],{"class":237},"'4001594'",[39,80418,32441],{"class":53},[39,80420,80421,80423,80426],{"class":41,"line":33686},[39,80422,80376],{"class":53},[39,80424,80425],{"class":237},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[39,80427,32441],{"class":53},[39,80429,80430,80432,80435],{"class":41,"line":33692},[39,80431,80386],{"class":53},[39,80433,80434],{"class":237},"'288.00'",[39,80436,32441],{"class":53},[39,80438,80439,80441,80444],{"class":41,"line":33698},[39,80440,80396],{"class":53},[39,80442,80443],{"class":237},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[39,80445,32441],{"class":53},[39,80447,80448],{"class":41,"line":33704},[39,80449,78867],{"class":53},[39,80451,80452],{"class":41,"line":33710},[39,80453,80361],{"class":53},[39,80455,80456,80458,80461],{"class":41,"line":33716},[39,80457,80366],{"class":53},[39,80459,80460],{"class":237},"'4001009'",[39,80462,32441],{"class":53},[39,80464,80465,80467,80470],{"class":41,"line":33722},[39,80466,80376],{"class":53},[39,80468,80469],{"class":237},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[39,80471,32441],{"class":53},[39,80473,80474,80476,80479],{"class":41,"line":33728},[39,80475,80386],{"class":53},[39,80477,80478],{"class":237},"'109.00'",[39,80480,32441],{"class":53},[39,80482,80483,80485,80488],{"class":41,"line":33748},[39,80484,80396],{"class":53},[39,80486,80487],{"class":237},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[39,80489,32441],{"class":53},[39,80491,80492],{"class":41,"line":33754},[39,80493,78867],{"class":53},[39,80495,80496],{"class":41,"line":33770},[39,80497,80361],{"class":53},[39,80499,80500,80502,80505],{"class":41,"line":33776},[39,80501,80366],{"class":53},[39,80503,80504],{"class":237},"'4001874'",[39,80506,32441],{"class":53},[39,80508,80509,80511,80514],{"class":41,"line":33790},[39,80510,80376],{"class":53},[39,80512,80513],{"class":237},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[39,80515,32441],{"class":53},[39,80517,80518,80520,80523],{"class":41,"line":33796},[39,80519,80386],{"class":53},[39,80521,80522],{"class":237},"'488.00'",[39,80524,32441],{"class":53},[39,80526,80527,80529,80532],{"class":41,"line":33811},[39,80528,80396],{"class":53},[39,80530,80531],{"class":237},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[39,80533,32441],{"class":53},[39,80535,80536],{"class":41,"line":33817},[39,80537,78867],{"class":53},[39,80539,80540],{"class":41,"line":33826},[39,80541,80361],{"class":53},[39,80543,80544,80546,80549],{"class":41,"line":33832},[39,80545,80366],{"class":53},[39,80547,80548],{"class":237},"'4001649'",[39,80550,32441],{"class":53},[39,80552,80553,80555,80558],{"class":41,"line":33841},[39,80554,80376],{"class":53},[39,80556,80557],{"class":237},"'大师监制龙泉青瓷茶叶罐'",[39,80559,32441],{"class":53},[39,80561,80562,80564,80567],{"class":41,"line":33847},[39,80563,80386],{"class":53},[39,80565,80566],{"class":237},"'139.00'",[39,80568,32441],{"class":53},[39,80570,80571,80573,80576],{"class":41,"line":33853},[39,80572,80396],{"class":53},[39,80574,80575],{"class":237},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[39,80577,32441],{"class":53},[39,80579,80580],{"class":41,"line":33862},[39,80581,78867],{"class":53},[39,80583,80584],{"class":41,"line":33868},[39,80585,80361],{"class":53},[39,80587,80588,80590,80593],{"class":41,"line":33879},[39,80589,80366],{"class":53},[39,80591,80592],{"class":237},"'3997185'",[39,80594,32441],{"class":53},[39,80596,80597,80599,80602],{"class":41,"line":33885},[39,80598,80376],{"class":53},[39,80600,80601],{"class":237},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[39,80603,32441],{"class":53},[39,80605,80606,80608,80611],{"class":41,"line":33904},[39,80607,80386],{"class":53},[39,80609,80610],{"class":237},"'108.00'",[39,80612,32441],{"class":53},[39,80614,80615,80617,80620],{"class":41,"line":33910},[39,80616,80396],{"class":53},[39,80618,80619],{"class":237},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[39,80621,32441],{"class":53},[39,80623,80624],{"class":41,"line":33921},[39,80625,78867],{"class":53},[39,80627,80628],{"class":41,"line":33927},[39,80629,80361],{"class":53},[39,80631,80632,80634,80637],{"class":41,"line":33947},[39,80633,80366],{"class":53},[39,80635,80636],{"class":237},"'3997403'",[39,80638,32441],{"class":53},[39,80640,80641,80643,80646],{"class":41,"line":33963},[39,80642,80376],{"class":53},[39,80644,80645],{"class":237},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[39,80647,32441],{"class":53},[39,80649,80650,80652,80655],{"class":41,"line":33969},[39,80651,80386],{"class":53},[39,80653,80654],{"class":237},"'100.00'",[39,80656,32441],{"class":53},[39,80658,80659,80661,80664],{"class":41,"line":33983},[39,80660,80396],{"class":53},[39,80662,80663],{"class":237},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[39,80665,32441],{"class":53},[39,80667,80668],{"class":41,"line":33989},[39,80669,78867],{"class":53},[39,80671,80672],{"class":41,"line":33995},[39,80673,80361],{"class":53},[39,80675,80676,80678,80681],{"class":41,"line":34006},[39,80677,80366],{"class":53},[39,80679,80680],{"class":237},"'3998274'",[39,80682,32441],{"class":53},[39,80684,80685,80687,80690],{"class":41,"line":34012},[39,80686,80376],{"class":53},[39,80688,80689],{"class":237},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[39,80691,32441],{"class":53},[39,80693,80694,80696,80698],{"class":41,"line":34018},[39,80695,80386],{"class":53},[39,80697,80566],{"class":237},[39,80699,32441],{"class":53},[39,80701,80702,80704,80707],{"class":41,"line":34028},[39,80703,80396],{"class":53},[39,80705,80706],{"class":237},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[39,80708,32441],{"class":53},[39,80710,80711],{"class":41,"line":34034},[39,80712,78867],{"class":53},[39,80714,80715],{"class":41,"line":34045},[39,80716,54084],{"class":53},[39,80718,80719],{"class":41,"line":34051},[39,80720,122],{"emptyLinePlaceholder":121},[39,80722,80723],{"class":41,"line":34061},[39,80724,80725],{"class":128},"    \u002F\u002F 1.渲染函数\n",[39,80727,80728,80730,80732,80734,80736],{"class":41,"line":34066},[39,80729,71059],{"class":45},[39,80731,71062],{"class":49},[39,80733,54],{"class":53},[39,80735,4963],{"class":59},[39,80737,89],{"class":53},[39,80739,80740],{"class":41,"line":34072},[39,80741,80742],{"class":128},"      \u002F\u002F 声明空字符串\n",[39,80744,80745,80748,80751,80753],{"class":41,"line":34121},[39,80746,80747],{"class":45},"      let",[39,80749,80750],{"class":53}," str ",[39,80752,1117],{"class":45},[39,80754,71079],{"class":237},[39,80756,80757],{"class":41,"line":34168},[39,80758,71084],{"class":128},[39,80760,80761,80763,80766,80768,80771,80774],{"class":41,"line":34173},[39,80762,58982],{"class":53},[39,80764,80765],{"class":49},"forEach",[39,80767,54],{"class":53},[39,80769,80770],{"class":59},"item",[39,80772,80773],{"class":45}," =>",[39,80775,16545],{"class":53},[39,80777,80778,80780,80783,80786,80788,80791,80793,80796,80799,80801],{"class":41,"line":34179},[39,80779,62245],{"class":45},[39,80781,80782],{"class":53}," { ",[39,80784,80785],{"class":74},"name",[39,80787,63],{"class":53},[39,80789,80790],{"class":74},"price",[39,80792,63],{"class":53},[39,80794,80795],{"class":74},"picture",[39,80797,80798],{"class":53}," } ",[39,80800,1117],{"class":45},[39,80802,80803],{"class":53}," item\n",[39,80805,80806,80809,80811],{"class":41,"line":34198},[39,80807,80808],{"class":53},"        str ",[39,80810,10545],{"class":45},[39,80812,71143],{"class":237},[39,80814,80815],{"class":41,"line":34204},[39,80816,80817],{"class":237},"          \u003Cdiv class=\"item\">\n",[39,80819,80820,80823,80825],{"class":41,"line":34224},[39,80821,80822],{"class":237},"            \u003Cimg src=\"${",[39,80824,80795],{"class":53},[39,80826,80827],{"class":237},"}\" alt=\"\">\n",[39,80829,80830,80833,80835],{"class":41,"line":34230},[39,80831,80832],{"class":237},"            \u003Cp class=\"name\">${",[39,80834,80785],{"class":53},[39,80836,80837],{"class":237},"}\u003C\u002Fp>\n",[39,80839,80840,80843,80845],{"class":41,"line":34236},[39,80841,80842],{"class":237},"            \u003Cp class=\"price\">${",[39,80844,80790],{"class":53},[39,80846,80837],{"class":237},[39,80848,80849],{"class":41,"line":34246},[39,80850,80851],{"class":237},"          \u003C\u002Fdiv>\n",[39,80853,80854],{"class":41,"line":34251},[39,80855,80856],{"class":237},"        `\n",[39,80858,80859],{"class":41,"line":34257},[39,80860,65790],{"class":53},[39,80862,80863],{"class":41,"line":34273},[39,80864,80865],{"class":128},"      \u002F\u002F 追加给List\n",[39,80867,80868,80870,80872,80874,80877,80879,80881],{"class":41,"line":34318},[39,80869,56746],{"class":53},[39,80871,55374],{"class":49},[39,80873,54],{"class":53},[39,80875,80876],{"class":237},"'.list'",[39,80878,75224],{"class":53},[39,80880,1117],{"class":45},[39,80882,74960],{"class":53},[39,80884,80885],{"class":41,"line":34324},[39,80886,3284],{"class":53},[39,80888,80889],{"class":41,"line":34330},[39,80890,80891],{"class":128},"    \u002F\u002F 页面一打开就需要渲染\n",[39,80893,80894,80897],{"class":41,"line":34336},[39,80895,80896],{"class":49},"    render",[39,80898,80899],{"class":53},"(goodsList)\n",[39,80901,80902],{"class":41,"line":34347},[39,80903,80904],{"class":128},"    \u002F\u002F 2.过滤筛选\n",[39,80906,80907,80909,80911,80913,80916,80918,80920,80922,80924,80926,80928,80930],{"class":41,"line":34353},[39,80908,53382],{"class":53},[39,80910,55374],{"class":49},[39,80912,54],{"class":53},[39,80914,80915],{"class":237},"'.filter'",[39,80917,31801],{"class":53},[39,80919,58788],{"class":49},[39,80921,54],{"class":53},[39,80923,58793],{"class":237},[39,80925,63],{"class":53},[39,80927,1342],{"class":59},[39,80929,80773],{"class":45},[39,80931,16545],{"class":53},[39,80933,80934],{"class":41,"line":34359},[39,80935,80936],{"class":128},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[39,80938,80939,80941,80943,80946,80948,80950,80952,80954],{"class":41,"line":34365},[39,80940,59203],{"class":45},[39,80942,80782],{"class":53},[39,80944,80945],{"class":74},"tagName",[39,80947,63],{"class":53},[39,80949,32512],{"class":74},[39,80951,80798],{"class":53},[39,80953,1117],{"class":45},[39,80955,80956],{"class":53}," e.target\n",[39,80958,80959],{"class":41,"line":34383},[39,80960,80961],{"class":128},"      \u002F\u002F 判断\n",[39,80963,80964,80966,80968,80970,80972],{"class":41,"line":34397},[39,80965,55455],{"class":45},[39,80967,68009],{"class":53},[39,80969,55461],{"class":45},[39,80971,69231],{"class":237},[39,80973,89],{"class":53},[39,80975,80976],{"class":41,"line":34406},[39,80977,80978],{"class":128},"        \u002F\u002F console.log(11)\n",[39,80980,80981],{"class":41,"line":34415},[39,80982,80983],{"class":128},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[39,80985,80986],{"class":41,"line":34424},[39,80987,80988],{"class":128},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[39,80990,80991,80993,80995,80997],{"class":41,"line":34433},[39,80992,52805],{"class":45},[39,80994,52808],{"class":53},[39,80996,1117],{"class":45},[39,80998,80999],{"class":53}," goodsList\n",[39,81001,81002,81004,81007,81009,81012],{"class":41,"line":34439},[39,81003,3590],{"class":45},[39,81005,81006],{"class":53}," (dataset.index ",[39,81008,55461],{"class":45},[39,81010,81011],{"class":237}," '1'",[39,81013,89],{"class":53},[39,81015,81016,81019,81021,81024,81027,81029,81031,81033,81036,81038,81040,81043,81045,81047,81049],{"class":41,"line":34445},[39,81017,81018],{"class":53},"          arr ",[39,81020,1117],{"class":45},[39,81022,81023],{"class":53}," goodsList.",[39,81025,81026],{"class":49},"filter",[39,81028,54],{"class":53},[39,81030,80770],{"class":59},[39,81032,80773],{"class":45},[39,81034,81035],{"class":53}," item.price ",[39,81037,2820],{"class":45},[39,81039,315],{"class":74},[39,81041,81042],{"class":45}," &&",[39,81044,81035],{"class":53},[39,81046,2709],{"class":45},[39,81048,6831],{"class":74},[39,81050,574],{"class":53},[39,81052,81053,81056,81058,81060,81062,81064,81067],{"class":41,"line":34453},[39,81054,81055],{"class":53},"        } ",[39,81057,2811],{"class":45},[39,81059,2814],{"class":45},[39,81061,81006],{"class":53},[39,81063,55461],{"class":45},[39,81065,81066],{"class":237}," '2'",[39,81068,89],{"class":53},[39,81070,81071,81073,81075,81077,81079,81081,81083,81085,81087,81089,81091,81093,81095,81097,81100],{"class":41,"line":34458},[39,81072,81018],{"class":53},[39,81074,1117],{"class":45},[39,81076,81023],{"class":53},[39,81078,81026],{"class":49},[39,81080,54],{"class":53},[39,81082,80770],{"class":59},[39,81084,80773],{"class":45},[39,81086,81035],{"class":53},[39,81088,2820],{"class":45},[39,81090,6831],{"class":74},[39,81092,81042],{"class":45},[39,81094,81035],{"class":53},[39,81096,2709],{"class":45},[39,81098,81099],{"class":74}," 300",[39,81101,574],{"class":53},[39,81103,81104,81106,81108,81110,81112,81114,81117],{"class":41,"line":34464},[39,81105,81055],{"class":53},[39,81107,2811],{"class":45},[39,81109,2814],{"class":45},[39,81111,81006],{"class":53},[39,81113,55461],{"class":45},[39,81115,81116],{"class":237}," '3'",[39,81118,89],{"class":53},[39,81120,81121,81123,81125,81127,81129,81131,81133,81135,81137,81139,81141],{"class":41,"line":34475},[39,81122,81018],{"class":53},[39,81124,1117],{"class":45},[39,81126,81023],{"class":53},[39,81128,81026],{"class":49},[39,81130,54],{"class":53},[39,81132,80770],{"class":59},[39,81134,80773],{"class":45},[39,81136,81035],{"class":53},[39,81138,2820],{"class":45},[39,81140,81099],{"class":74},[39,81142,574],{"class":53},[39,81144,81145],{"class":41,"line":34481},[39,81146,3622],{"class":53},[39,81148,81149],{"class":41,"line":34501},[39,81150,81151],{"class":128},"        \u002F\u002F 渲染函数\n",[39,81153,81154,81156],{"class":41,"line":34507},[39,81155,71383],{"class":49},[39,81157,53387],{"class":53},[39,81159,81160],{"class":41,"line":34513},[39,81161,53373],{"class":53},[39,81163,81164],{"class":41,"line":34519},[39,81165,122],{"emptyLinePlaceholder":121},[39,81167,81168],{"class":41,"line":34536},[39,81169,34436],{"class":53},[39,81171,81172,81174,81176],{"class":41,"line":34542},[39,81173,53392],{"class":53},[39,81175,52788],{"class":52275},[39,81177,52282],{"class":53},[39,81179,81180,81182,81184],{"class":41,"line":34548},[39,81181,52760],{"class":53},[39,81183,52775],{"class":52275},[39,81185,52282],{"class":53},[39,81187,81188],{"class":41,"line":34554},[39,81189,122],{"emptyLinePlaceholder":121},[39,81191,81192,81194,81196],{"class":41,"line":34560},[39,81193,52760],{"class":53},[39,81195,51610],{"class":52275},[39,81197,52282],{"class":53},[14,81199,81201],{"id":81200},"_410-深入了解对象","4.10 深入了解对象",[476,81203,81205],{"id":81204},"_4101-创建对象","4.10.1 创建对象",[19,81207,81208],{},[2585,81209],{"alt":35,"src":81210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,81212,81213],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[476,81215,81217],{"id":81216},"_4102-构造函数","4.10.2 构造函数",[19,81219,81220,81223],{},[350,81221,81222],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,81225,81226,81229],{},[350,81227,81228],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[30,81231,81233],{"className":51608,"code":81232,"language":51610,"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",[26,81234,81235,81243,81248,81269,81282,81294,81306,81310,81315,81342,81347,81374],{"__ignoreMap":35},[39,81236,81237,81239,81241],{"class":41,"line":42},[39,81238,2170],{"class":53},[39,81240,52788],{"class":52275},[39,81242,52282],{"class":53},[39,81244,81245],{"class":41,"line":92},[39,81246,81247],{"class":128},"\u002F\u002F例：\n",[39,81249,81250,81252,81255,81257,81259,81261,81263,81265,81267],{"class":41,"line":112},[39,81251,55424],{"class":45},[39,81253,81254],{"class":49}," Pig",[39,81256,54],{"class":53},[39,81258,80785],{"class":59},[39,81260,426],{"class":53},[39,81262,71196],{"class":59},[39,81264,426],{"class":53},[39,81266,71213],{"class":59},[39,81268,89],{"class":53},[39,81270,81271,81274,81277,81279],{"class":41,"line":118},[39,81272,81273],{"class":74},"    this",[39,81275,81276],{"class":53},".name",[39,81278,1117],{"class":45},[39,81280,81281],{"class":53},"name\n",[39,81283,81284,81286,81289,81291],{"class":41,"line":125},[39,81285,81273],{"class":74},[39,81287,81288],{"class":53},".age",[39,81290,1117],{"class":45},[39,81292,81293],{"class":53},"age\n",[39,81295,81296,81298,81301,81303],{"class":41,"line":132},[39,81297,81273],{"class":74},[39,81299,81300],{"class":53},".gender",[39,81302,1117],{"class":45},[39,81304,81305],{"class":53},"gender    \n",[39,81307,81308],{"class":41,"line":138},[39,81309,115],{"class":53},[39,81311,81312],{"class":41,"line":169},[39,81313,81314],{"class":128},"\u002F\u002F创建佩奇对象\n",[39,81316,81317,81319,81322,81324,81326,81328,81331,81333,81335,81337,81340],{"class":41,"line":190},[39,81318,960],{"class":45},[39,81320,81321],{"class":74}," Peppa",[39,81323,12777],{"class":45},[39,81325,81254],{"class":49},[39,81327,54],{"class":53},[39,81329,81330],{"class":237},"'佩奇'",[39,81332,426],{"class":53},[39,81334,1608],{"class":74},[39,81336,426],{"class":53},[39,81338,81339],{"class":237},"'女'",[39,81341,574],{"class":53},[39,81343,81344],{"class":41,"line":202},[39,81345,81346],{"class":128},"\u002F\u002F创建乔治对象\n",[39,81348,81349,81351,81354,81356,81358,81360,81363,81365,81367,81369,81372],{"class":41,"line":207},[39,81350,960],{"class":45},[39,81352,81353],{"class":74}," George",[39,81355,12777],{"class":45},[39,81357,81254],{"class":49},[39,81359,54],{"class":53},[39,81361,81362],{"class":237},"'乔治'",[39,81364,426],{"class":53},[39,81366,1339],{"class":74},[39,81368,426],{"class":53},[39,81370,81371],{"class":237},"'男'",[39,81373,574],{"class":53},[39,81375,81376,81378,81380],{"class":41,"line":212},[39,81377,52760],{"class":53},[39,81379,52788],{"class":52275},[39,81381,52282],{"class":53},[19,81383,81384],{},[2585,81385],{"alt":35,"src":81386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,81388,81389],{},[2585,81390],{"alt":35,"src":81391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,81393,81394],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,81396,81397],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,81399,81400],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,81402,81403],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,81405,81406],{},"这里用等号是因为：对象.属性=值",[19,81408,81409],{},"①利用对象字面量创建对象",[19,81411,81412],{},"const o={",[19,81414,81415],{},"name:'pink'",[19,81417,81418],{},"} ②利用new Object创建对象",[19,81420,81421],{},"const o=new Object({name:'pink'})",[19,81423,81424],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,81426,81427],{},"构造函数创建对象的执行过程：",[19,81429,81430],{},[2585,81431],{"alt":35,"src":81432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[476,81434,81436],{"id":81435},"_4103-实例成员","4.10.3 实例成员",[19,81438,81439],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[328,81441,81442,81445,81448],{},[331,81443,81444],{},"实例对象的属性和方法即为实例成员",[331,81446,81447],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[331,81449,81450],{},"构造函数创建的实例对象彼此独立互不影响",[476,81452,81454],{"id":81453},"_4104-静态成员","4.10.4 静态成员",[19,81456,81457],{},[2585,81458],{"alt":35,"src":81459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,81461,81462],{},"静态成员有Date.now() Math.PI Math.random()",[19,81464,81465],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,81467,81468],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,81470,81471],{},"function Pig(name) n {",[19,81473,81474],{},"this.name=name",[19,81476,2206],{},[19,81478,81479],{},"Pig.eyes=2",[19,81481,81482],{},"Pig.sayHai=function () { console.log(this) }",[19,81484,81485],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,81487,81488],{},"console.log(Pig.eyes) \u002F\u002F2",[19,81490,326],{},[328,81492,81493,81496,81499,81502,81505],{},[331,81494,81495],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[331,81497,81498],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[331,81500,81501],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[331,81503,81504],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[331,81506,81507],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81509,81510],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[476,81512,81514],{"id":81513},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81516,81517],{},"内置构造函数包含：",[19,81519,81520],{},[2585,81521],{"alt":35,"src":81522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81524,81525],{},[2585,81526],{"alt":35,"src":81527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81529,81530],{},"这些基本数据类型，js对他们进行了包装",[52788,81532,81533],{},"\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",[22971,81535,81537],{"id":81536},"_41051-object","4.10.5.1 Object",[19,81539,81540],{},"Object 是内置的构造函数，用于创建普通对象",[19,81542,81543],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[30,81545,81547],{"className":51608,"code":81546,"language":51610,"meta":35,"style":35},"const user=new Object({name:'小明',age:15})\n",[26,81548,81549],{"__ignoreMap":35},[39,81550,81551],{"class":41,"line":42},[39,81552,81546],{"class":53},[19,81554,81555],{},"三个常用的静态方法：",[23883,81557,81559],{"id":81558},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81561,81562],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81564,81565],{},[2585,81566],{"alt":35,"src":81567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81569,81570],{},[2585,81571],{"alt":35,"src":81572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[30,81574,81576],{"className":54042,"code":81575,"language":54044,"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",[26,81577,81578,81586,81594,81599,81604,81609,81614,81619,81624,81632],{"__ignoreMap":35},[39,81579,81580,81582,81584],{"class":41,"line":42},[39,81581,2170],{"class":53},[39,81583,52775],{"class":52275},[39,81585,52282],{"class":53},[39,81587,81588,81590,81592],{"class":41,"line":92},[39,81589,53119],{"class":53},[39,81591,52788],{"class":52275},[39,81593,52282],{"class":53},[39,81595,81596],{"class":41,"line":112},[39,81597,81598],{"class":53},"    const o = { name: 'pink', age: 6 }\n",[39,81600,81601],{"class":41,"line":118},[39,81602,81603],{"class":53},"    \u002F\u002F 获得所有属性名\n",[39,81605,81606],{"class":41,"line":125},[39,81607,81608],{"class":53},"    const arr = Object.keys(o)\n",[39,81610,81611],{"class":41,"line":132},[39,81612,81613],{"class":53},"    console.log(arr)\n",[39,81615,81616],{"class":41,"line":138},[39,81617,81618],{"class":53},"    \u002F\u002F 获得所有属性值\n",[39,81620,81621],{"class":41,"line":169},[39,81622,81623],{"class":53},"    console.log(Object.values(o))\n",[39,81625,81626,81628,81630],{"class":41,"line":190},[39,81627,53392],{"class":53},[39,81629,52788],{"class":52275},[39,81631,52282],{"class":53},[39,81633,81634,81636,81638],{"class":41,"line":202},[39,81635,52760],{"class":53},[39,81637,52775],{"class":52275},[39,81639,52282],{"class":53},[23883,81641,81643],{"id":81642},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,81645,81646],{},"Object.assign(oo,o)",[19,81648,81649],{},"后的东西添加给前 是追加",[19,81651,81652],{},[2585,81653],{"alt":35,"src":81654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,81656,81657],{},[2585,81658],{"alt":35,"src":81659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[30,81661,81663],{"className":54042,"code":81662,"language":54044,"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",[26,81664,81665,81673,81681,81685,81689,81693,81697,81701,81705,81710,81715,81720,81725,81730,81738],{"__ignoreMap":35},[39,81666,81667,81669,81671],{"class":41,"line":42},[39,81668,2170],{"class":53},[39,81670,52775],{"class":52275},[39,81672,52282],{"class":53},[39,81674,81675,81677,81679],{"class":41,"line":92},[39,81676,53119],{"class":53},[39,81678,52788],{"class":52275},[39,81680,52282],{"class":53},[39,81682,81683],{"class":41,"line":112},[39,81684,81598],{"class":53},[39,81686,81687],{"class":41,"line":118},[39,81688,81603],{"class":53},[39,81690,81691],{"class":41,"line":125},[39,81692,81608],{"class":53},[39,81694,81695],{"class":41,"line":132},[39,81696,81613],{"class":53},[39,81698,81699],{"class":41,"line":138},[39,81700,81618],{"class":53},[39,81702,81703],{"class":41,"line":169},[39,81704,81623],{"class":53},[39,81706,81707],{"class":41,"line":190},[39,81708,81709],{"class":53},"    const oo = {}\n",[39,81711,81712],{"class":41,"line":202},[39,81713,81714],{"class":53},"    Object.assign(oo, o)\n",[39,81716,81717],{"class":41,"line":207},[39,81718,81719],{"class":53},"    console.log(oo)\n",[39,81721,81722],{"class":41,"line":212},[39,81723,81724],{"class":53},"    Object.assign(o, { gender: '女' })\n",[39,81726,81727],{"class":41,"line":223},[39,81728,81729],{"class":53},"    console.log(o)\n",[39,81731,81732,81734,81736],{"class":41,"line":228},[39,81733,53392],{"class":53},[39,81735,52788],{"class":52275},[39,81737,52282],{"class":53},[39,81739,81740,81742,81744],{"class":41,"line":263},[39,81741,52760],{"class":53},[39,81743,52775],{"class":52275},[39,81745,52282],{"class":53},[19,81747,81748],{},[2585,81749],{"alt":35,"src":81750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22971,81752,81754],{"id":81753},"_41052-array","4.10.5.2 Array",[19,81756,81757],{},"Array 是内置的构造函数，用于创建数组",[19,81759,81760],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[30,81762,81764],{"className":51608,"code":81763,"language":51610,"meta":35,"style":35},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[26,81765,81766,81771],{"__ignoreMap":35},[39,81767,81768],{"class":41,"line":42},[39,81769,81770],{"class":53},"const arr=new Array(3,5)\n",[39,81772,81773],{"class":41,"line":92},[39,81774,81775],{"class":53},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81777,81778],{},"Array的实例方法，这个方法是实例成员",[19,81780,81781],{},[2585,81782],{"alt":35,"src":81783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23883,81785,81787],{"id":81786},"_410521-reduce","4.10.5.2.1 reduce",[19,81789,81790],{},[2585,81791],{"alt":35,"src":81792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[30,81794,81796],{"className":54042,"code":81795,"language":54044,"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",[26,81797,81798,81806,81814,81819,81824,81829,81834,81838,81843,81848,81853,81857,81862,81867,81871,81876,81881,81886,81894],{"__ignoreMap":35},[39,81799,81800,81802,81804],{"class":41,"line":42},[39,81801,2170],{"class":53},[39,81803,52775],{"class":52275},[39,81805,52282],{"class":53},[39,81807,81808,81810,81812],{"class":41,"line":92},[39,81809,53119],{"class":53},[39,81811,52788],{"class":52275},[39,81813,52282],{"class":53},[39,81815,81816],{"class":41,"line":112},[39,81817,81818],{"class":53},"    const arr = [1, 5, 8]\n",[39,81820,81821],{"class":41,"line":118},[39,81822,81823],{"class":53},"    \u002F\u002F 1.没有初始值\n",[39,81825,81826],{"class":41,"line":125},[39,81827,81828],{"class":53},"    const total = arr.reduce(function (prev, current) {\n",[39,81830,81831],{"class":41,"line":132},[39,81832,81833],{"class":53},"      return prev + current\n",[39,81835,81836],{"class":41,"line":138},[39,81837,34436],{"class":53},[39,81839,81840],{"class":41,"line":169},[39,81841,81842],{"class":53},"    console.log(total)   \u002F\u002F14\n",[39,81844,81845],{"class":41,"line":190},[39,81846,81847],{"class":53},"    \u002F\u002F 2.有初始值\n",[39,81849,81850],{"class":41,"line":202},[39,81851,81852],{"class":53},"    const total1 = arr.reduce(function (prev, current) {\n",[39,81854,81855],{"class":41,"line":207},[39,81856,81833],{"class":53},[39,81858,81859],{"class":41,"line":212},[39,81860,81861],{"class":53},"    }, 10)\n",[39,81863,81864],{"class":41,"line":223},[39,81865,81866],{"class":53},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[39,81868,81869],{"class":41,"line":228},[39,81870,122],{"emptyLinePlaceholder":121},[39,81872,81873],{"class":41,"line":263},[39,81874,81875],{"class":53},"    \u002F\u002F 3.箭头函数写法\n",[39,81877,81878],{"class":41,"line":287},[39,81879,81880],{"class":53},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[39,81882,81883],{"class":41,"line":292},[39,81884,81885],{"class":53},"    console.log(total2)   \u002F\u002F24\n",[39,81887,81888,81890,81892],{"class":41,"line":305},[39,81889,53392],{"class":53},[39,81891,52788],{"class":52275},[39,81893,52282],{"class":53},[39,81895,81896,81898,81900],{"class":41,"line":310},[39,81897,52760],{"class":53},[39,81899,52775],{"class":52275},[39,81901,52282],{"class":53},[19,81903,81904],{},"执行过程：",[328,81906,81907,81910,81913],{},[331,81908,81909],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[331,81911,81912],{},"每一次循环，把返回值给作为下一次循环的上一次值",[331,81914,81915],{},"如果有起始值，则起始值作为上一次值",[30,81917,81919],{"className":54042,"code":81918,"language":54044,"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",[26,81920,81921,81929,81937,81941,81945,81949,81953,81957,81961,81966,81971,81976,81981,81986,81990,81994,81998,82002,82006,82010,82015,82019,82024,82028,82033,82038,82042,82046,82050,82058],{"__ignoreMap":35},[39,81922,81923,81925,81927],{"class":41,"line":42},[39,81924,2170],{"class":53},[39,81926,52775],{"class":52275},[39,81928,52282],{"class":53},[39,81930,81931,81933,81935],{"class":41,"line":92},[39,81932,53119],{"class":53},[39,81934,52788],{"class":52275},[39,81936,52282],{"class":53},[39,81938,81939],{"class":41,"line":112},[39,81940,81818],{"class":53},[39,81942,81943],{"class":41,"line":118},[39,81944,81823],{"class":53},[39,81946,81947],{"class":41,"line":125},[39,81948,81828],{"class":53},[39,81950,81951],{"class":41,"line":132},[39,81952,81833],{"class":53},[39,81954,81955],{"class":41,"line":138},[39,81956,34436],{"class":53},[39,81958,81959],{"class":41,"line":169},[39,81960,81842],{"class":53},[39,81962,81963],{"class":41,"line":190},[39,81964,81965],{"class":53},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[39,81967,81968],{"class":41,"line":202},[39,81969,81970],{"class":53},"    \u002F\u002F     1              5                    6\n",[39,81972,81973],{"class":41,"line":207},[39,81974,81975],{"class":53},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[39,81977,81978],{"class":41,"line":212},[39,81979,81980],{"class":53},"    \u002F\u002F     6              8                    14\n",[39,81982,81983],{"class":41,"line":223},[39,81984,81985],{"class":53},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[39,81987,81988],{"class":41,"line":228},[39,81989,81847],{"class":53},[39,81991,81992],{"class":41,"line":263},[39,81993,81852],{"class":53},[39,81995,81996],{"class":41,"line":287},[39,81997,81833],{"class":53},[39,81999,82000],{"class":41,"line":292},[39,82001,81861],{"class":53},[39,82003,82004],{"class":41,"line":305},[39,82005,81866],{"class":53},[39,82007,82008],{"class":41,"line":310},[39,82009,81965],{"class":53},[39,82011,82012],{"class":41,"line":321},[39,82013,82014],{"class":53},"    \u002F\u002F     10             1                     11\n",[39,82016,82017],{"class":41,"line":713},[39,82018,81975],{"class":53},[39,82020,82021],{"class":41,"line":718},[39,82022,82023],{"class":53},"    \u002F\u002F     11             5                    16\n",[39,82025,82026],{"class":41,"line":723},[39,82027,81975],{"class":53},[39,82029,82030],{"class":41,"line":729},[39,82031,82032],{"class":53},"    \u002F\u002F     16             8                    24\n",[39,82034,82035],{"class":41,"line":735},[39,82036,82037],{"class":53},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[39,82039,82040],{"class":41,"line":741},[39,82041,81875],{"class":53},[39,82043,82044],{"class":41,"line":747},[39,82045,81880],{"class":53},[39,82047,82048],{"class":41,"line":753},[39,82049,81885],{"class":53},[39,82051,82052,82054,82056],{"class":41,"line":758},[39,82053,53392],{"class":53},[39,82055,52788],{"class":52275},[39,82057,52282],{"class":53},[39,82059,82060,82062,82064],{"class":41,"line":763},[39,82061,52760],{"class":53},[39,82063,52775],{"class":52275},[39,82065,52282],{"class":53},[23883,82067,82069],{"id":82068},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82071,82072],{},[2585,82073],{"alt":35,"src":82074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[30,82076,82078],{"className":54042,"code":82077,"language":54044,"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",[26,82079,82080,82088,82096,82101,82106,82111,82116,82120,82125,82130,82135,82140,82145,82150,82154,82159,82163,82168,82176],{"__ignoreMap":35},[39,82081,82082,82084,82086],{"class":41,"line":42},[39,82083,2170],{"class":53},[39,82085,52775],{"class":52275},[39,82087,52282],{"class":53},[39,82089,82090,82092,82094],{"class":41,"line":92},[39,82091,53119],{"class":53},[39,82093,52788],{"class":52275},[39,82095,52282],{"class":53},[39,82097,82098],{"class":41,"line":112},[39,82099,82100],{"class":53},"    const arr = [\n",[39,82102,82103],{"class":41,"line":118},[39,82104,82105],{"class":53},"      { name: '张三', salary: 10000 },\n",[39,82107,82108],{"class":41,"line":125},[39,82109,82110],{"class":53},"      { name: '李四', salary: 10000 },\n",[39,82112,82113],{"class":41,"line":132},[39,82114,82115],{"class":53},"      { name: '王五', salary: 10000 }\n",[39,82117,82118],{"class":41,"line":138},[39,82119,54084],{"class":53},[39,82121,82122],{"class":41,"line":169},[39,82123,82124],{"class":53},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[39,82126,82127],{"class":41,"line":190},[39,82128,82129],{"class":53},"    \u002F\u002F prev是累计值\n",[39,82131,82132],{"class":41,"line":202},[39,82133,82134],{"class":53},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[39,82136,82137],{"class":41,"line":207},[39,82138,82139],{"class":53},"    console.log(total)\n",[39,82141,82142],{"class":41,"line":212},[39,82143,82144],{"class":53},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[39,82146,82147],{"class":41,"line":223},[39,82148,82149],{"class":53},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[39,82151,82152],{"class":41,"line":228},[39,82153,82144],{"class":53},[39,82155,82156],{"class":41,"line":263},[39,82157,82158],{"class":53},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[39,82160,82161],{"class":41,"line":287},[39,82162,82144],{"class":53},[39,82164,82165],{"class":41,"line":292},[39,82166,82167],{"class":53},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[39,82169,82170,82172,82174],{"class":41,"line":305},[39,82171,53392],{"class":53},[39,82173,52788],{"class":52275},[39,82175,52282],{"class":53},[39,82177,82178,82180,82182],{"class":41,"line":310},[39,82179,52760],{"class":53},[39,82181,52775],{"class":52275},[39,82183,52282],{"class":53},[23883,82185,82187],{"id":82186},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82189,82190],{},[2585,82191],{"alt":35,"src":82192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82194,82195],{},[2585,82196],{"alt":35,"src":82197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[328,82199,82200],{},[331,82201,82202],{},"find()",[19,82204,82205],{},"循环查找，找到第一个就ok",[19,82207,82208],{},[922,82209,82212],{"href":82210,"rel":82211},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24839],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[30,82214,82216],{"className":51608,"code":82215,"language":51610,"meta":35,"style":35},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[26,82217,82218,82223,82228],{"__ignoreMap":35},[39,82219,82220],{"class":41,"line":42},[39,82221,82222],{"class":53},"const array1 = [5, 12, 8, 130, 44]\n",[39,82224,82225],{"class":41,"line":92},[39,82226,82227],{"class":53},"const found = array1.find((element) => element > 10)\n",[39,82229,82230],{"class":41,"line":112},[39,82231,82232],{"class":53},"console.log(found)  \u002F\u002F12\n",[19,82234,82235,82237,82238,82243,82244,82247,82248,82250,82251,82256,82257,82259,82260,82262,82263,82265,82266],{},[26,82236,82202],{}," 方法是一个",[922,82239,82242],{"href":82240,"rel":82241},"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",[24839],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[26,82245,82246],{},"callbackFn"," 函数，直到 ",[26,82249,82246],{}," 返回一个",[922,82252,82255],{"href":82253,"rel":82254},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24839],"真值","。然后 ",[26,82258,82202],{}," 返回该元素并停止迭代数组。如果 ",[26,82261,82246],{}," 从未返回真值，则 ",[26,82264,82202],{}," 返回 ",[26,82267,82268],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[30,82270,82272],{"className":54042,"code":82271,"language":54044,"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",[26,82273,82274,82282,82290,82295,82300,82305,82309,82314,82319,82323,82328,82333,82337,82341,82346,82351,82355,82359,82364,82369,82374,82379,82384,82388,82393,82398,82403,82408,82412,82417,82425],{"__ignoreMap":35},[39,82275,82276,82278,82280],{"class":41,"line":42},[39,82277,2170],{"class":53},[39,82279,52775],{"class":52275},[39,82281,52282],{"class":53},[39,82283,82284,82286,82288],{"class":41,"line":92},[39,82285,53119],{"class":53},[39,82287,52788],{"class":52275},[39,82289,52282],{"class":53},[39,82291,82292],{"class":41,"line":112},[39,82293,82294],{"class":53},"    const arr = ['red', 'blue', 'green']\n",[39,82296,82297],{"class":41,"line":118},[39,82298,82299],{"class":53},"    const found = arr.find(item => item === 'pink')\n",[39,82301,82302],{"class":41,"line":125},[39,82303,82304],{"class":53},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[39,82306,82307],{"class":41,"line":132},[39,82308,122],{"emptyLinePlaceholder":121},[39,82310,82311],{"class":41,"line":138},[39,82312,82313],{"class":53},"    \u002F\u002F 使用场景，用于查找数据\n",[39,82315,82316],{"class":41,"line":169},[39,82317,82318],{"class":53},"    const arr1 = [\n",[39,82320,82321],{"class":41,"line":190},[39,82322,80361],{"class":53},[39,82324,82325],{"class":41,"line":202},[39,82326,82327],{"class":53},"        name: '小米',\n",[39,82329,82330],{"class":41,"line":207},[39,82331,82332],{"class":53},"        price: 1999\n",[39,82334,82335],{"class":41,"line":212},[39,82336,78867],{"class":53},[39,82338,82339],{"class":41,"line":223},[39,82340,80361],{"class":53},[39,82342,82343],{"class":41,"line":228},[39,82344,82345],{"class":53},"        name: '华为',\n",[39,82347,82348],{"class":41,"line":263},[39,82349,82350],{"class":53},"        price: 3999\n",[39,82352,82353],{"class":41,"line":287},[39,82354,53373],{"class":53},[39,82356,82357],{"class":41,"line":292},[39,82358,54084],{"class":53},[39,82360,82361],{"class":41,"line":305},[39,82362,82363],{"class":53},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[39,82365,82366],{"class":41,"line":310},[39,82367,82368],{"class":53},"    \u002F\u002F const found1 = arr1.find(item => {\n",[39,82370,82371],{"class":41,"line":321},[39,82372,82373],{"class":53},"    \u002F\u002F   if (item.name === '小米') {\n",[39,82375,82376],{"class":41,"line":713},[39,82377,82378],{"class":53},"    \u002F\u002F     return item\n",[39,82380,82381],{"class":41,"line":718},[39,82382,82383],{"class":53},"    \u002F\u002F   }\n",[39,82385,82386],{"class":41,"line":723},[39,82387,64265],{"class":53},[39,82389,82390],{"class":41,"line":729},[39,82391,82392],{"class":53},"    \u002F\u002F 另一种写法\n",[39,82394,82395],{"class":41,"line":735},[39,82396,82397],{"class":53},"    const found1 = arr1.find(item => {\n",[39,82399,82400],{"class":41,"line":741},[39,82401,82402],{"class":53},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[39,82404,82405],{"class":41,"line":747},[39,82406,82407],{"class":53},"      return item.name = '小米'\n",[39,82409,82410],{"class":41,"line":753},[39,82411,34436],{"class":53},[39,82413,82414],{"class":41,"line":758},[39,82415,82416],{"class":53},"    console.log(found1)\n",[39,82418,82419,82421,82423],{"class":41,"line":763},[39,82420,53392],{"class":53},[39,82422,52788],{"class":52275},[39,82424,52282],{"class":53},[39,82426,82427,82429,82431],{"class":41,"line":772},[39,82428,52760],{"class":53},[39,82430,52775],{"class":52275},[39,82432,52282],{"class":53},[19,82434,82435],{},[2585,82436],{"alt":35,"src":82437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,82439,82440],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[328,82442,82443],{"start":92},[331,82444,82445],{},"every()返回的是布尔值",[19,82447,82448],{},[922,82449,82452],{"href":82450,"rel":82451},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24839],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,82454,82455],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,82457,82458],{},"some是只有有一个就没问题",[19,82460,82461],{},"every是必须全是才行",[30,82463,82467],{"className":82464,"code":82465,"language":82466,"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",[26,82468,82469,82485,82499,82503,82512],{"__ignoreMap":35},[39,82470,82471,82473,82476,82478,82480,82483],{"class":41,"line":42},[39,82472,55424],{"class":45},[39,82474,82475],{"class":53}," isBigEnough(element, ",[39,82477,75033],{"class":45},[39,82479,63],{"class":53},[39,82481,82482],{"class":45},"array",[39,82484,89],{"class":53},[39,82486,82487,82490,82493,82495,82497],{"class":41,"line":92},[39,82488,82489],{"class":45},"  return",[39,82491,82492],{"class":53}," element ",[39,82494,2820],{"class":45},[39,82496,75],{"class":74},[39,82498,318],{"class":53},[39,82500,82501],{"class":41,"line":112},[39,82502,115],{"class":53},[39,82504,82505,82508,82510],{"class":41,"line":118},[39,82506,82507],{"class":53},"[12, 5, 8, 130, 44].every(isBigEnough); ",[39,82509,34304],{"class":45},[39,82511,55491],{"class":53},[39,82513,82514,82517,82519],{"class":41,"line":125},[39,82515,82516],{"class":53},"[12, 54, 18, 130, 44].every(isBigEnough); ",[39,82518,34304],{"class":45},[39,82520,58915],{"class":53},[30,82522,82524],{"className":54042,"code":82523,"language":54044,"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",[26,82525,82526,82534,82542,82547,82551,82556,82561,82569],{"__ignoreMap":35},[39,82527,82528,82530,82532],{"class":41,"line":42},[39,82529,2170],{"class":53},[39,82531,52775],{"class":52275},[39,82533,52282],{"class":53},[39,82535,82536,82538,82540],{"class":41,"line":92},[39,82537,53119],{"class":53},[39,82539,52788],{"class":52275},[39,82541,52282],{"class":53},[39,82543,82544],{"class":41,"line":112},[39,82545,82546],{"class":53},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[39,82548,82549],{"class":41,"line":118},[39,82550,79297],{"class":53},[39,82552,82553],{"class":41,"line":125},[39,82554,82555],{"class":53},"    const flag = arr.every(item => item >= 10)\n",[39,82557,82558],{"class":41,"line":132},[39,82559,82560],{"class":53},"    console.log(flag)    \u002F\u002Ftrue\n",[39,82562,82563,82565,82567],{"class":41,"line":138},[39,82564,53392],{"class":53},[39,82566,52788],{"class":52275},[39,82568,52282],{"class":53},[39,82570,82571,82573,82575],{"class":41,"line":169},[39,82572,52760],{"class":53},[39,82574,52775],{"class":52275},[39,82576,52282],{"class":53},[30,82578,82580],{"className":54042,"code":82579,"language":54044,"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",[26,82581,82582,82590,82598,82602,82607,82612,82617,82625],{"__ignoreMap":35},[39,82583,82584,82586,82588],{"class":41,"line":42},[39,82585,2170],{"class":53},[39,82587,52775],{"class":52275},[39,82589,52282],{"class":53},[39,82591,82592,82594,82596],{"class":41,"line":92},[39,82593,53119],{"class":53},[39,82595,52788],{"class":52275},[39,82597,52282],{"class":53},[39,82599,82600],{"class":41,"line":112},[39,82601,82546],{"class":53},[39,82603,82604],{"class":41,"line":118},[39,82605,82606],{"class":53},"    const arr = [10, 0, 5]\n",[39,82608,82609],{"class":41,"line":125},[39,82610,82611],{"class":53},"    const flag = arr.some(item => item >= 10)\n",[39,82613,82614],{"class":41,"line":132},[39,82615,82616],{"class":53},"    console.log(flag)   \u002F\u002Ftrue\n",[39,82618,82619,82621,82623],{"class":41,"line":138},[39,82620,53392],{"class":53},[39,82622,52788],{"class":52275},[39,82624,52282],{"class":53},[39,82626,82627,82629,82631],{"class":41,"line":169},[39,82628,52760],{"class":53},[39,82630,52775],{"class":52275},[39,82632,52282],{"class":53},[23883,82634,82636],{"id":82635},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82638,82639],{},[2585,82640],{"alt":35,"src":82641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[30,82643,82645],{"className":51608,"code":82644,"language":51610,"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",[26,82646,82647,82657,82671,82675,82683,82697,82717,82729,82737,82744,82756,82768,82780,82792,82802,82812,82816,82824,82832,82836,82844,82856,82864,82886,82891,82896,82929,82937,82945,82949],{"__ignoreMap":35},[39,82648,82649,82651,82653,82655],{"class":41,"line":42},[39,82650,52272],{"class":53},[39,82652,52276],{"class":52275},[39,82654,52279],{"class":49},[39,82656,52282],{"class":53},[39,82658,82659,82661,82663,82665,82667,82669],{"class":41,"line":92},[39,82660,2170],{"class":53},[39,82662,51610],{"class":52275},[39,82664,52291],{"class":49},[39,82666,1117],{"class":53},[39,82668,52296],{"class":237},[39,82670,52282],{"class":53},[39,82672,82673],{"class":41,"line":112},[39,82674,122],{"emptyLinePlaceholder":121},[39,82676,82677,82679,82681],{"class":41,"line":118},[39,82678,2170],{"class":53},[39,82680,52309],{"class":52275},[39,82682,52282],{"class":53},[39,82684,82685,82687,82689,82691,82693,82695],{"class":41,"line":125},[39,82686,53119],{"class":53},[39,82688,52319],{"class":52275},[39,82690,52322],{"class":49},[39,82692,1117],{"class":53},[39,82694,52327],{"class":237},[39,82696,52282],{"class":53},[39,82698,82699,82701,82703,82705,82707,82709,82711,82713,82715],{"class":41,"line":132},[39,82700,53119],{"class":53},[39,82702,52319],{"class":52275},[39,82704,15893],{"class":49},[39,82706,1117],{"class":53},[39,82708,52366],{"class":237},[39,82710,52346],{"class":49},[39,82712,1117],{"class":53},[39,82714,52373],{"class":237},[39,82716,52282],{"class":53},[39,82718,82719,82721,82723,82725,82727],{"class":41,"line":138},[39,82720,53119],{"class":53},[39,82722,52382],{"class":52275},[39,82724,52385],{"class":53},[39,82726,52382],{"class":52275},[39,82728,52282],{"class":53},[39,82730,82731,82733,82735],{"class":41,"line":169},[39,82732,53119],{"class":53},[39,82734,1192],{"class":52275},[39,82736,52282],{"class":53},[39,82738,82739,82742],{"class":41,"line":190},[39,82740,82741],{"class":52275},"    div",[39,82743,16545],{"class":53},[39,82745,82746,82748,82750,82752,82754],{"class":41,"line":202},[39,82747,55746],{"class":74},[39,82749,52412],{"class":53},[39,82751,2832],{"class":74},[39,82753,52467],{"class":45},[39,82755,318],{"class":53},[39,82757,82758,82760,82762,82764,82766],{"class":41,"line":207},[39,82759,55760],{"class":74},[39,82761,52412],{"class":53},[39,82763,1664],{"class":74},[39,82765,52467],{"class":45},[39,82767,318],{"class":53},[39,82769,82770,82772,82774,82776,82778],{"class":41,"line":212},[39,82771,58334],{"class":74},[39,82773,52412],{"class":53},[39,82775,1664],{"class":74},[39,82777,52467],{"class":45},[39,82779,318],{"class":53},[39,82781,82782,82784,82786,82788,82790],{"class":41,"line":223},[39,82783,66108],{"class":74},[39,82785,52412],{"class":53},[39,82787,1759],{"class":74},[39,82789,52467],{"class":45},[39,82791,318],{"class":53},[39,82793,82794,82796,82798,82800],{"class":41,"line":228},[39,82795,58261],{"class":74},[39,82797,52412],{"class":53},[39,82799,52567],{"class":74},[39,82801,318],{"class":53},[39,82803,82804,82806,82808,82810],{"class":41,"line":263},[39,82805,55859],{"class":74},[39,82807,52412],{"class":53},[39,82809,52620],{"class":74},[39,82811,318],{"class":53},[39,82813,82814],{"class":41,"line":287},[39,82815,3284],{"class":53},[39,82817,82818,82820,82822],{"class":41,"line":292},[39,82819,53392],{"class":53},[39,82821,1192],{"class":52275},[39,82823,52282],{"class":53},[39,82825,82826,82828,82830],{"class":41,"line":305},[39,82827,52760],{"class":53},[39,82829,52309],{"class":52275},[39,82831,52282],{"class":53},[39,82833,82834],{"class":41,"line":310},[39,82835,122],{"emptyLinePlaceholder":121},[39,82837,82838,82840,82842],{"class":41,"line":321},[39,82839,2170],{"class":53},[39,82841,52775],{"class":52275},[39,82843,52282],{"class":53},[39,82845,82846,82848,82850,82852,82854],{"class":41,"line":713},[39,82847,53119],{"class":53},[39,82849,52586],{"class":52275},[39,82851,56289],{"class":53},[39,82853,52586],{"class":52275},[39,82855,52282],{"class":53},[39,82857,82858,82860,82862],{"class":41,"line":718},[39,82859,53119],{"class":53},[39,82861,52788],{"class":52275},[39,82863,52282],{"class":53},[39,82865,82866,82868,82871,82873,82876,82879,82881,82884],{"class":41,"line":723},[39,82867,12283],{"class":45},[39,82869,82870],{"class":74}," spec",[39,82872,71],{"class":45},[39,82874,82875],{"class":53}," { size: ",[39,82877,82878],{"class":237},"'40cm*40cm'",[39,82880,56439],{"class":53},[39,82882,82883],{"class":237},"'黑色'",[39,82885,56579],{"class":53},[39,82887,82888],{"class":41,"line":729},[39,82889,82890],{"class":128},"    \u002F\u002F const arr = Object.values(spec)\n",[39,82892,82893],{"class":41,"line":735},[39,82894,82895],{"class":128},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[39,82897,82898,82900,82902,82904,82907,82909,82911,82914,82917,82920,82922,82924,82927],{"class":41,"line":741},[39,82899,53382],{"class":53},[39,82901,55374],{"class":49},[39,82903,54],{"class":53},[39,82905,82906],{"class":237},"'div'",[39,82908,75224],{"class":53},[39,82910,1117],{"class":45},[39,82912,82913],{"class":53}," Object.",[39,82915,82916],{"class":49},"values",[39,82918,82919],{"class":53},"(spec).",[39,82921,75198],{"class":49},[39,82923,54],{"class":53},[39,82925,82926],{"class":237},"'\u002F'",[39,82928,574],{"class":53},[39,82930,82931,82933,82935],{"class":41,"line":747},[39,82932,53392],{"class":53},[39,82934,52788],{"class":52275},[39,82936,52282],{"class":53},[39,82938,82939,82941,82943],{"class":41,"line":753},[39,82940,52760],{"class":53},[39,82942,52775],{"class":52275},[39,82944,52282],{"class":53},[39,82946,82947],{"class":41,"line":758},[39,82948,122],{"emptyLinePlaceholder":121},[39,82950,82951,82953,82955],{"class":41,"line":763},[39,82952,52760],{"class":53},[39,82954,51610],{"class":52275},[39,82956,52282],{"class":53},[19,82958,82959],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23883,82961,82963],{"id":82962},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82965,82966],{},"静态方法，将伪数组转换为真数组",[19,82968,82969],{},[2585,82970],{"alt":35,"src":82971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[30,82973,82975],{"className":54042,"code":82974,"language":54044,"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",[26,82976,82977,82985,82993,83005,83017,83029,83037,83045,83050,83055,83060,83065,83073],{"__ignoreMap":35},[39,82978,82979,82981,82983],{"class":41,"line":42},[39,82980,2170],{"class":53},[39,82982,52775],{"class":52275},[39,82984,52282],{"class":53},[39,82986,82987,82989,82991],{"class":41,"line":92},[39,82988,53119],{"class":53},[39,82990,489],{"class":52275},[39,82992,52282],{"class":53},[39,82994,82995,82997,82999,83001,83003],{"class":41,"line":112},[39,82996,52316],{"class":53},[39,82998,331],{"class":52275},[39,83000,56289],{"class":53},[39,83002,331],{"class":52275},[39,83004,52282],{"class":53},[39,83006,83007,83009,83011,83013,83015],{"class":41,"line":118},[39,83008,52316],{"class":53},[39,83010,331],{"class":52275},[39,83012,56289],{"class":53},[39,83014,331],{"class":52275},[39,83016,52282],{"class":53},[39,83018,83019,83021,83023,83025,83027],{"class":41,"line":125},[39,83020,52316],{"class":53},[39,83022,331],{"class":52275},[39,83024,56289],{"class":53},[39,83026,331],{"class":52275},[39,83028,52282],{"class":53},[39,83030,83031,83033,83035],{"class":41,"line":132},[39,83032,53392],{"class":53},[39,83034,489],{"class":52275},[39,83036,52282],{"class":53},[39,83038,83039,83041,83043],{"class":41,"line":138},[39,83040,53119],{"class":53},[39,83042,52788],{"class":52275},[39,83044,52282],{"class":53},[39,83046,83047],{"class":41,"line":169},[39,83048,83049],{"class":53},"    const lis = document.querySelectorAll('li')\n",[39,83051,83052],{"class":41,"line":190},[39,83053,83054],{"class":53},"    const liss = Array.from(lis)\n",[39,83056,83057],{"class":41,"line":202},[39,83058,83059],{"class":53},"    liss.pop()\n",[39,83061,83062],{"class":41,"line":207},[39,83063,83064],{"class":53},"    console.log(liss)\n",[39,83066,83067,83069,83071],{"class":41,"line":212},[39,83068,53392],{"class":53},[39,83070,52788],{"class":52275},[39,83072,52282],{"class":53},[39,83074,83075,83077,83079],{"class":41,"line":223},[39,83076,52760],{"class":53},[39,83078,52775],{"class":52275},[39,83080,52282],{"class":53},[19,83082,83083],{},[2585,83084],{"alt":35,"src":83085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22971,83087,83089],{"id":83088},"_41053-string","4.10.5.3 String",[19,83091,83092],{},[2585,83093],{"alt":35,"src":83094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23883,83096,83098],{"id":83097},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[30,83100,83102],{"className":54042,"code":83101,"language":54044,"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",[26,83103,83104,83112,83120,83125,83130,83135,83139,83144,83149,83154,83162],{"__ignoreMap":35},[39,83105,83106,83108,83110],{"class":41,"line":42},[39,83107,2170],{"class":53},[39,83109,52775],{"class":52275},[39,83111,52282],{"class":53},[39,83113,83114,83116,83118],{"class":41,"line":92},[39,83115,53119],{"class":53},[39,83117,52788],{"class":52275},[39,83119,52282],{"class":53},[39,83121,83122],{"class":41,"line":112},[39,83123,83124],{"class":53},"    \u002F\u002F 把字符串转化为数组\n",[39,83126,83127],{"class":41,"line":118},[39,83128,83129],{"class":53},"    const str = 'pink,red'\n",[39,83131,83132],{"class":41,"line":125},[39,83133,83134],{"class":53},"    const arr = str.split(',')\n",[39,83136,83137],{"class":41,"line":132},[39,83138,81613],{"class":53},[39,83140,83141],{"class":41,"line":138},[39,83142,83143],{"class":53},"    const str1 = '2025-8-25'\n",[39,83145,83146],{"class":41,"line":169},[39,83147,83148],{"class":53},"    const arr1 = str1.split('-')\n",[39,83150,83151],{"class":41,"line":190},[39,83152,83153],{"class":53},"    console.log(arr1)\n",[39,83155,83156,83158,83160],{"class":41,"line":202},[39,83157,53392],{"class":53},[39,83159,52788],{"class":52275},[39,83161,52282],{"class":53},[39,83163,83164,83166,83168],{"class":41,"line":207},[39,83165,52760],{"class":53},[39,83167,52775],{"class":52275},[39,83169,52282],{"class":53},[23883,83171,83173],{"id":83172},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83175,24],{},[19,83177,83178],{},"substring(indexStart)",[19,83180,83181],{},"substring(indexStart, indexEnd)",[489,83183,83184,83195,83207,83217],{},[331,83185,83186,83187,83190,83191,83194],{},"如果省略了 ",[26,83188,83189],{},"indexEnd","，则 ",[26,83192,83193],{},"substring()"," 提取字符直到字符串的末尾",[331,83196,83197,83198,83201,83202,83190,83204,83206],{},"如果 ",[26,83199,83200],{},"indexStart"," 等于 ",[26,83203,83189],{},[26,83205,83193],{}," 返回一个空字符串",[331,83208,83197,83209,83211,83212,83190,83214,83216],{},[26,83210,83200],{}," 大于 ",[26,83213,83189],{},[26,83215,83193],{}," 的效果就像交换了这两个参数一样",[331,83218,83219],{},"结束的索引号不包含想要截取的部分",[30,83221,83223],{"className":82464,"code":83222,"language":82466,"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",[26,83224,83225,83237,83241,83275,83305,83309,83340,83344,83371,83401,83431,83435,83466],{"__ignoreMap":35},[39,83226,83227,83230,83232,83235],{"class":41,"line":42},[39,83228,83229],{"class":53},"const anyString ",[39,83231,1117],{"class":45},[39,83233,83234],{"class":237}," \"Mozilla\"",[39,83236,318],{"class":53},[39,83238,83239],{"class":41,"line":92},[39,83240,122],{"emptyLinePlaceholder":121},[39,83242,83243,83246,83248,83250,83252,83255,83257,83260,83262,83264,83266,83268,83270,83272],{"class":41,"line":112},[39,83244,83245],{"class":74},"console",[39,83247,1819],{"class":53},[39,83249,59222],{"class":74},[39,83251,54],{"class":53},[39,83253,83254],{"class":74},"anyString",[39,83256,1819],{"class":53},[39,83258,83259],{"class":74},"substring",[39,83261,54],{"class":53},[39,83263,1457],{"class":74},[39,83265,63],{"class":53},[39,83267,1483],{"class":74},[39,83269,76228],{"class":53},[39,83271,34304],{"class":45},[39,83273,83274],{"class":237}," 'M'\n",[39,83276,83277,83279,83281,83283,83285,83287,83289,83291,83293,83295,83297,83299,83301,83303],{"class":41,"line":118},[39,83278,83245],{"class":74},[39,83280,1819],{"class":53},[39,83282,59222],{"class":74},[39,83284,54],{"class":53},[39,83286,83254],{"class":74},[39,83288,1819],{"class":53},[39,83290,83259],{"class":74},[39,83292,54],{"class":53},[39,83294,1483],{"class":74},[39,83296,63],{"class":53},[39,83298,1457],{"class":74},[39,83300,76228],{"class":53},[39,83302,34304],{"class":45},[39,83304,83274],{"class":237},[39,83306,83307],{"class":41,"line":125},[39,83308,122],{"emptyLinePlaceholder":121},[39,83310,83311,83313,83315,83317,83319,83321,83323,83325,83327,83329,83331,83333,83335,83337],{"class":41,"line":132},[39,83312,83245],{"class":74},[39,83314,1819],{"class":53},[39,83316,59222],{"class":74},[39,83318,54],{"class":53},[39,83320,83254],{"class":74},[39,83322,1819],{"class":53},[39,83324,83259],{"class":74},[39,83326,54],{"class":53},[39,83328,1457],{"class":74},[39,83330,63],{"class":53},[39,83332,1608],{"class":74},[39,83334,76228],{"class":53},[39,83336,34304],{"class":45},[39,83338,83339],{"class":237}," 'Mozill'\n",[39,83341,83342],{"class":41,"line":138},[39,83343,122],{"emptyLinePlaceholder":121},[39,83345,83346,83348,83350,83352,83354,83356,83358,83360,83362,83364,83366,83368],{"class":41,"line":169},[39,83347,83245],{"class":74},[39,83349,1819],{"class":53},[39,83351,59222],{"class":74},[39,83353,54],{"class":53},[39,83355,83254],{"class":74},[39,83357,1819],{"class":53},[39,83359,83259],{"class":74},[39,83361,54],{"class":53},[39,83363,1558],{"class":74},[39,83365,76228],{"class":53},[39,83367,34304],{"class":45},[39,83369,83370],{"class":237}," 'lla'\n",[39,83372,83373,83375,83377,83379,83381,83383,83385,83387,83389,83391,83393,83395,83397,83399],{"class":41,"line":190},[39,83374,83245],{"class":74},[39,83376,1819],{"class":53},[39,83378,59222],{"class":74},[39,83380,54],{"class":53},[39,83382,83254],{"class":74},[39,83384,1819],{"class":53},[39,83386,83259],{"class":74},[39,83388,54],{"class":53},[39,83390,1558],{"class":74},[39,83392,63],{"class":53},[39,83394,1633],{"class":74},[39,83396,76284],{"class":53},[39,83398,34304],{"class":45},[39,83400,83370],{"class":237},[39,83402,83403,83405,83407,83409,83411,83413,83415,83417,83419,83421,83423,83425,83427,83429],{"class":41,"line":202},[39,83404,83245],{"class":74},[39,83406,1819],{"class":53},[39,83408,59222],{"class":74},[39,83410,54],{"class":53},[39,83412,83254],{"class":74},[39,83414,1819],{"class":53},[39,83416,83259],{"class":74},[39,83418,54],{"class":53},[39,83420,1633],{"class":74},[39,83422,63],{"class":53},[39,83424,1558],{"class":74},[39,83426,76228],{"class":53},[39,83428,34304],{"class":45},[39,83430,83370],{"class":237},[39,83432,83433],{"class":41,"line":207},[39,83434,122],{"emptyLinePlaceholder":121},[39,83436,83437,83439,83441,83443,83445,83447,83449,83451,83453,83455,83457,83459,83461,83463],{"class":41,"line":212},[39,83438,83245],{"class":74},[39,83440,1819],{"class":53},[39,83442,59222],{"class":74},[39,83444,54],{"class":53},[39,83446,83254],{"class":74},[39,83448,1819],{"class":53},[39,83450,83259],{"class":74},[39,83452,54],{"class":53},[39,83454,1457],{"class":74},[39,83456,63],{"class":53},[39,83458,1633],{"class":74},[39,83460,76228],{"class":53},[39,83462,34304],{"class":45},[39,83464,83465],{"class":237}," 'Mozilla'\n",[39,83467,83468,83470,83472,83474,83476,83478,83480,83482,83484,83486,83488,83490,83492,83494],{"class":41,"line":223},[39,83469,83245],{"class":74},[39,83471,1819],{"class":53},[39,83473,59222],{"class":74},[39,83475,54],{"class":53},[39,83477,83254],{"class":74},[39,83479,1819],{"class":53},[39,83481,83259],{"class":74},[39,83483,54],{"class":53},[39,83485,1457],{"class":74},[39,83487,63],{"class":53},[39,83489,423],{"class":74},[39,83491,76228],{"class":53},[39,83493,34304],{"class":45},[39,83495,83465],{"class":237},[23883,83497,83499],{"id":83498},"_410533-startswith","4.10.5.3.3 startsWith",[19,83501,83502,83505,83506,83511,83512,83514,83515],{},[26,83503,83504],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[350,83507,83508],{},[26,83509,83510],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[26,83513,2487],{}," 或 ",[26,83516,66995],{},[30,83518,83520],{"className":78470,"code":83519,"language":78472,"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",[26,83521,83522,83534,83553,83558,83578],{"__ignoreMap":35},[39,83523,83524,83526,83529,83531],{"class":41,"line":42},[39,83525,960],{"class":45},[39,83527,83528],{"class":53}," str1 ",[39,83530,1117],{"class":45},[39,83532,83533],{"class":237}," \"Saturday night plans\"\n",[39,83535,83536,83538,83540,83543,83546,83548,83551],{"class":41,"line":92},[39,83537,78507],{"class":53},[39,83539,59222],{"class":49},[39,83541,83542],{"class":53},"(str1.",[39,83544,83545],{"class":49},"startsWith",[39,83547,54],{"class":53},[39,83549,83550],{"class":237},"\"Sat\"",[39,83552,31472],{"class":53},[39,83554,83555],{"class":41,"line":112},[39,83556,83557],{"class":128},"\u002F\u002F Expected output: true\n",[39,83559,83560,83562,83564,83566,83568,83570,83572,83574,83576],{"class":41,"line":118},[39,83561,78507],{"class":53},[39,83563,59222],{"class":49},[39,83565,83542],{"class":53},[39,83567,83545],{"class":49},[39,83569,54],{"class":53},[39,83571,83550],{"class":237},[39,83573,63],{"class":53},[39,83575,1339],{"class":74},[39,83577,31472],{"class":53},[39,83579,83580],{"class":41,"line":125},[39,83581,83582],{"class":128},"\u002F\u002F Expected output: false\n",[30,83584,83586],{"className":51608,"code":83585,"language":51610,"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",[26,83587,83588,83593,83598,83602,83607,83612],{"__ignoreMap":35},[39,83589,83590],{"class":41,"line":42},[39,83591,83592],{"class":53},"startsWith(searchString)\n",[39,83594,83595],{"class":41,"line":92},[39,83596,83597],{"class":53},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[39,83599,83600],{"class":41,"line":112},[39,83601,122],{"emptyLinePlaceholder":121},[39,83603,83604],{"class":41,"line":118},[39,83605,83606],{"class":53},"const str3 = 'pink老师上课中'\n",[39,83608,83609],{"class":41,"line":125},[39,83610,83611],{"class":53},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[39,83613,83614],{"class":41,"line":132},[39,83615,83616],{"class":53},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23883,83618,83620],{"id":83619},"_410534-includes","4.10.5.3.4 includes",[19,83622,83623],{},"includes(searchString) includes(searchString, position)",[328,83625,83626],{},[331,83627,83628],{},"searchString:",[19,83630,83631,83632,83634,83635,83640,83641,83646,83647,22473,83650,83653,83654,83657],{},"一个要在 ",[26,83633,2427],{}," 中查找的字符串。",[922,83636,83639],{"href":83637,"rel":83638},"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",[24839],"不能是正则表达式","。所有非正则表达式的值都会被",[922,83642,83645],{"href":83643,"rel":83644},"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",[24839],"强制转换为字符串","，因此如果该参数被省略或传入 ",[26,83648,83649],{},"undefined",[26,83651,83652],{},"includes()"," 方法会在字符串中搜索 ",[26,83655,83656],{},"\"undefined\"","，这通常不是你想要的",[328,83659,83660],{"start":92},[331,83661,83662,2119],{},[26,83663,83664],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,83666,83667,83668,83671,83672],{},"在字符串中开始搜索 ",[26,83669,83670],{},"searchString"," 的位置。默认值为 ",[26,83673,1457],{},[328,83675,83676],{"start":112},[331,83677,83678],{},"返回值：",[19,83680,83681,83682,83684,83685,83689,83690],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[26,83683,83670],{}," 为空字符串的情况），则返回 ",[350,83686,83687],{},[26,83688,2487],{}," ，否则返回 ",[350,83691,83692],{},[26,83693,66995],{},[328,83695,83696],{"start":118},[331,83697,83698],{},"异常：",[19,83700,83197,83701,352,83703,83707],{},[26,83702,83670],{},[922,83704,83706],{"href":83637,"rel":83705},[24839],"是一个正则表达式","，则会抛出",[19,83709,83710],{},"只要是有就是true，不需要非得以谁开头结尾",[30,83712,83714],{"className":78470,"code":83713,"language":78472,"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",[26,83715,83716,83727,83750,83769,83789,83811,83830],{"__ignoreMap":35},[39,83717,83718,83720,83722,83724],{"class":41,"line":42},[39,83719,960],{"class":45},[39,83721,80750],{"class":53},[39,83723,1117],{"class":45},[39,83725,83726],{"class":237}," \"To be, or not to be, that is the question.\"\n",[39,83728,83729,83731,83733,83736,83739,83741,83744,83747],{"class":41,"line":92},[39,83730,78507],{"class":53},[39,83732,59222],{"class":49},[39,83734,83735],{"class":53},"(str.",[39,83737,83738],{"class":49},"includes",[39,83740,54],{"class":53},[39,83742,83743],{"class":237},"\"To be\"",[39,83745,83746],{"class":53},"))",[39,83748,83749],{"class":128},"  \u002F\u002F true\n",[39,83751,83752,83754,83756,83758,83760,83762,83765,83767],{"class":41,"line":112},[39,83753,78507],{"class":53},[39,83755,59222],{"class":49},[39,83757,83735],{"class":53},[39,83759,83738],{"class":49},[39,83761,54],{"class":53},[39,83763,83764],{"class":237},"\"question\"",[39,83766,83746],{"class":53},[39,83768,83749],{"class":128},[39,83770,83771,83773,83775,83777,83779,83781,83784,83786],{"class":41,"line":118},[39,83772,78507],{"class":53},[39,83774,59222],{"class":49},[39,83776,83735],{"class":53},[39,83778,83738],{"class":49},[39,83780,54],{"class":53},[39,83782,83783],{"class":237},"\"nonexistent\"",[39,83785,83746],{"class":53},[39,83787,83788],{"class":128},"  \u002F\u002F false\n",[39,83790,83791,83793,83795,83797,83799,83801,83803,83805,83807,83809],{"class":41,"line":125},[39,83792,78507],{"class":53},[39,83794,59222],{"class":49},[39,83796,83735],{"class":53},[39,83798,83738],{"class":49},[39,83800,54],{"class":53},[39,83802,83743],{"class":237},[39,83804,63],{"class":53},[39,83806,1483],{"class":74},[39,83808,83746],{"class":53},[39,83810,83788],{"class":128},[39,83812,83813,83815,83817,83819,83821,83823,83826,83828],{"class":41,"line":132},[39,83814,78507],{"class":53},[39,83816,59222],{"class":49},[39,83818,83735],{"class":53},[39,83820,83738],{"class":49},[39,83822,54],{"class":53},[39,83824,83825],{"class":237},"\"TO BE\"",[39,83827,83746],{"class":53},[39,83829,83788],{"class":128},[39,83831,83832,83834,83836,83838,83840,83842,83844,83846],{"class":41,"line":138},[39,83833,78507],{"class":53},[39,83835,59222],{"class":49},[39,83837,83735],{"class":53},[39,83839,83738],{"class":49},[39,83841,54],{"class":53},[39,83843,8726],{"class":237},[39,83845,83746],{"class":53},[39,83847,83749],{"class":128},[23883,83849,83851],{"id":83850},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[30,83853,83855],{"className":54042,"code":83854,"language":54044,"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",[26,83856,83857,83865,83873,83878,83883,83888,83893,83898,83906],{"__ignoreMap":35},[39,83858,83859,83861,83863],{"class":41,"line":42},[39,83860,2170],{"class":53},[39,83862,52775],{"class":52275},[39,83864,52282],{"class":53},[39,83866,83867,83869,83871],{"class":41,"line":92},[39,83868,53119],{"class":53},[39,83870,52788],{"class":52275},[39,83872,52282],{"class":53},[39,83874,83875],{"class":41,"line":112},[39,83876,83877],{"class":53},"    const num = 10\n",[39,83879,83880],{"class":41,"line":118},[39,83881,83882],{"class":53},"    \u002F\u002F 强制转换\n",[39,83884,83885],{"class":41,"line":125},[39,83886,83887],{"class":53},"    console.log(String(num))\n",[39,83889,83890],{"class":41,"line":132},[39,83891,83892],{"class":53},"    \u002F\u002F toString()方法转换\n",[39,83894,83895],{"class":41,"line":138},[39,83896,83897],{"class":53},"    console.log(num.toString())\n",[39,83899,83900,83902,83904],{"class":41,"line":169},[39,83901,53392],{"class":53},[39,83903,52788],{"class":52275},[39,83905,52282],{"class":53},[39,83907,83908,83910,83912],{"class":41,"line":190},[39,83909,52760],{"class":53},[39,83911,52775],{"class":52275},[39,83913,52282],{"class":53},[23883,83915,83917],{"id":83916},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83919,83920],{},[2585,83921],{"alt":35,"src":83922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[30,83924,83926],{"className":51608,"code":83925,"language":51610,"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",[26,83927,83928,83938,83952,83956,83964,83978,83998,84010,84018,84022,84030,84042,84050,84062,84067,84072,84077,84124,84140,84148,84156,84160],{"__ignoreMap":35},[39,83929,83930,83932,83934,83936],{"class":41,"line":42},[39,83931,52272],{"class":53},[39,83933,52276],{"class":52275},[39,83935,52279],{"class":49},[39,83937,52282],{"class":53},[39,83939,83940,83942,83944,83946,83948,83950],{"class":41,"line":92},[39,83941,2170],{"class":53},[39,83943,51610],{"class":52275},[39,83945,52291],{"class":49},[39,83947,1117],{"class":53},[39,83949,52296],{"class":237},[39,83951,52282],{"class":53},[39,83953,83954],{"class":41,"line":112},[39,83955,122],{"emptyLinePlaceholder":121},[39,83957,83958,83960,83962],{"class":41,"line":118},[39,83959,2170],{"class":53},[39,83961,52309],{"class":52275},[39,83963,52282],{"class":53},[39,83965,83966,83968,83970,83972,83974,83976],{"class":41,"line":125},[39,83967,53119],{"class":53},[39,83969,52319],{"class":52275},[39,83971,52322],{"class":49},[39,83973,1117],{"class":53},[39,83975,52327],{"class":237},[39,83977,52282],{"class":53},[39,83979,83980,83982,83984,83986,83988,83990,83992,83994,83996],{"class":41,"line":132},[39,83981,53119],{"class":53},[39,83983,52319],{"class":52275},[39,83985,15893],{"class":49},[39,83987,1117],{"class":53},[39,83989,52366],{"class":237},[39,83991,52346],{"class":49},[39,83993,1117],{"class":53},[39,83995,52373],{"class":237},[39,83997,52282],{"class":53},[39,83999,84000,84002,84004,84006,84008],{"class":41,"line":138},[39,84001,53119],{"class":53},[39,84003,52382],{"class":52275},[39,84005,52385],{"class":53},[39,84007,52382],{"class":52275},[39,84009,52282],{"class":53},[39,84011,84012,84014,84016],{"class":41,"line":169},[39,84013,52760],{"class":53},[39,84015,52309],{"class":52275},[39,84017,52282],{"class":53},[39,84019,84020],{"class":41,"line":190},[39,84021,122],{"emptyLinePlaceholder":121},[39,84023,84024,84026,84028],{"class":41,"line":202},[39,84025,2170],{"class":53},[39,84027,52775],{"class":52275},[39,84029,52282],{"class":53},[39,84031,84032,84034,84036,84038,84040],{"class":41,"line":207},[39,84033,53119],{"class":53},[39,84035,52586],{"class":52275},[39,84037,56289],{"class":53},[39,84039,52586],{"class":52275},[39,84041,52282],{"class":53},[39,84043,84044,84046,84048],{"class":41,"line":212},[39,84045,53119],{"class":53},[39,84047,52788],{"class":52275},[39,84049,52282],{"class":53},[39,84051,84052,84054,84057,84059],{"class":41,"line":223},[39,84053,12283],{"class":45},[39,84055,84056],{"class":74}," gift",[39,84058,71],{"class":45},[39,84060,84061],{"class":237}," '50g的茶叶，清洗球'\n",[39,84063,84064],{"class":41,"line":228},[39,84065,84066],{"class":128},"    \u002F\u002F 1.把字符串拆分为数组\n",[39,84068,84069],{"class":41,"line":263},[39,84070,84071],{"class":128},"    \u002F\u002F console.log(gift.split(','))\n",[39,84073,84074],{"class":41,"line":287},[39,84075,84076],{"class":128},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[39,84078,84079,84081,84083,84085,84088,84091,84093,84096,84098,84100,84102,84104,84106,84109,84111,84114,84116,84118,84120,84122],{"class":41,"line":292},[39,84080,12283],{"class":45},[39,84082,74894],{"class":74},[39,84084,71],{"class":45},[39,84086,84087],{"class":53}," gift.",[39,84089,84090],{"class":49},"split",[39,84092,54],{"class":53},[39,84094,84095],{"class":237},"'，'",[39,84097,31801],{"class":53},[39,84099,75019],{"class":49},[39,84101,54],{"class":53},[39,84103,80770],{"class":59},[39,84105,80773],{"class":45},[39,84107,84108],{"class":237}," `\u003Cspan>【赠品】${",[39,84110,80770],{"class":53},[39,84112,84113],{"class":237},"}\u003C\u002Fspan>\u003Cbr>`",[39,84115,31801],{"class":53},[39,84117,75198],{"class":49},[39,84119,54],{"class":53},[39,84121,75203],{"class":237},[39,84123,574],{"class":53},[39,84125,84126,84128,84130,84132,84134,84136,84138],{"class":41,"line":305},[39,84127,53382],{"class":53},[39,84129,55374],{"class":49},[39,84131,54],{"class":53},[39,84133,82906],{"class":237},[39,84135,75224],{"class":53},[39,84137,1117],{"class":45},[39,84139,74960],{"class":53},[39,84141,84142,84144,84146],{"class":41,"line":310},[39,84143,53392],{"class":53},[39,84145,52788],{"class":52275},[39,84147,52282],{"class":53},[39,84149,84150,84152,84154],{"class":41,"line":321},[39,84151,52760],{"class":53},[39,84153,52775],{"class":52275},[39,84155,52282],{"class":53},[39,84157,84158],{"class":41,"line":713},[39,84159,122],{"emptyLinePlaceholder":121},[39,84161,84162,84164,84166],{"class":41,"line":718},[39,84163,52760],{"class":53},[39,84165,51610],{"class":52275},[39,84167,52282],{"class":53},[22971,84169,84171],{"id":84170},"_41054-number","4.10.5.4 Number",[19,84173,84174],{},[2585,84175],{"alt":35,"src":84176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84178,84179],{},"整数也可以进行toFixed来保留小数",[19,84181,84182],{},"比如：",[19,84184,84185],{},"const price=10",[19,84187,84188],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22971,84190,84192],{"id":84191},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84194,84195],{},[2585,84196],{"alt":35,"src":84197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[30,84199,84201],{"className":51608,"code":84200,"language":51610,"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",[26,84202,84203,84213,84227,84231,84239,84253,84273,84285,84293,84299,84309,84319,84329,84333,84337,84343,84355,84369,84373,84377,84383,84395,84411,84421,84437,84441,84445,84451,84461,84471,84475,84479,84487,84499,84511,84523,84527,84531,84539,84551,84555,84559,84570,84580,84592,84604,84614,84618,84622,84630,84639,84651,84661,84671,84675,84679,84687,84696,84703,84713,84725,84729,84733,84742,84752,84763,84775,84787,84791,84795,84804,84814,84825,84829,84833,84839,84851,84863,84873,84883,84901,84913,84917,84921,84930,84942,84952,84962,84974,84978,84986,84994,84998,85006,85020,85028,85042,85070,85078,85086,85096,85100,85108,85116,85125,85133,85142,85152,85156,85160,85168,85176,85185,85193,85201,85214,85218,85222,85230,85238,85247,85255,85263,85278,85282,85286,85294,85302,85311,85319,85327,85341,85349,85353,85357,85362,85388,85393,85430,85435,85458,85463,85517,85522,85558,85562,85568,85573,85582,85596,85605,85624,85633,85643,85648,85653,85666,85671,85725,85751,85759,85767,85771],{"__ignoreMap":35},[39,84204,84205,84207,84209,84211],{"class":41,"line":42},[39,84206,52272],{"class":53},[39,84208,52276],{"class":52275},[39,84210,52279],{"class":49},[39,84212,52282],{"class":53},[39,84214,84215,84217,84219,84221,84223,84225],{"class":41,"line":92},[39,84216,2170],{"class":53},[39,84218,51610],{"class":52275},[39,84220,52291],{"class":49},[39,84222,1117],{"class":53},[39,84224,52296],{"class":237},[39,84226,52282],{"class":53},[39,84228,84229],{"class":41,"line":112},[39,84230,122],{"emptyLinePlaceholder":121},[39,84232,84233,84235,84237],{"class":41,"line":118},[39,84234,2170],{"class":53},[39,84236,52309],{"class":52275},[39,84238,52282],{"class":53},[39,84240,84241,84243,84245,84247,84249,84251],{"class":41,"line":125},[39,84242,53119],{"class":53},[39,84244,52319],{"class":52275},[39,84246,52322],{"class":49},[39,84248,1117],{"class":53},[39,84250,52327],{"class":237},[39,84252,52282],{"class":53},[39,84254,84255,84257,84259,84261,84263,84265,84267,84269,84271],{"class":41,"line":132},[39,84256,53119],{"class":53},[39,84258,52319],{"class":52275},[39,84260,15893],{"class":49},[39,84262,1117],{"class":53},[39,84264,52366],{"class":237},[39,84266,52346],{"class":49},[39,84268,1117],{"class":53},[39,84270,52373],{"class":237},[39,84272,52282],{"class":53},[39,84274,84275,84277,84279,84281,84283],{"class":41,"line":138},[39,84276,53119],{"class":53},[39,84278,52382],{"class":52275},[39,84280,52385],{"class":53},[39,84282,52382],{"class":52275},[39,84284,52282],{"class":53},[39,84286,84287,84289,84291],{"class":41,"line":169},[39,84288,53119],{"class":53},[39,84290,1192],{"class":52275},[39,84292,52282],{"class":53},[39,84294,84295,84297],{"class":41,"line":190},[39,84296,7479],{"class":52275},[39,84298,16545],{"class":53},[39,84300,84301,84303,84305,84307],{"class":41,"line":202},[39,84302,55670],{"class":74},[39,84304,52412],{"class":53},[39,84306,1457],{"class":74},[39,84308,318],{"class":53},[39,84310,84311,84313,84315,84317],{"class":41,"line":207},[39,84312,55681],{"class":74},[39,84314,52412],{"class":53},[39,84316,1457],{"class":74},[39,84318,318],{"class":53},[39,84320,84321,84323,84325,84327],{"class":41,"line":212},[39,84322,73571],{"class":74},[39,84324,52412],{"class":53},[39,84326,61480],{"class":74},[39,84328,318],{"class":53},[39,84330,84331],{"class":41,"line":223},[39,84332,3284],{"class":53},[39,84334,84335],{"class":41,"line":228},[39,84336,122],{"emptyLinePlaceholder":121},[39,84338,84339,84341],{"class":41,"line":263},[39,84340,63098],{"class":49},[39,84342,16545],{"class":53},[39,84344,84345,84347,84349,84351,84353],{"class":41,"line":287},[39,84346,55746],{"class":74},[39,84348,52412],{"class":53},[39,84350,79549],{"class":74},[39,84352,52467],{"class":45},[39,84354,318],{"class":53},[39,84356,84357,84359,84361,84363,84365,84367],{"class":41,"line":292},[39,84358,55681],{"class":74},[39,84360,52412],{"class":53},[39,84362,278],{"class":74},[39,84364,52467],{"class":45},[39,84366,52531],{"class":74},[39,84368,318],{"class":53},[39,84370,84371],{"class":41,"line":305},[39,84372,3284],{"class":53},[39,84374,84375],{"class":41,"line":310},[39,84376,122],{"emptyLinePlaceholder":121},[39,84378,84379,84381],{"class":41,"line":321},[39,84380,79600],{"class":49},[39,84382,16545],{"class":53},[39,84384,84385,84387,84389,84391,84393],{"class":41,"line":713},[39,84386,55670],{"class":74},[39,84388,52412],{"class":53},[39,84390,1836],{"class":74},[39,84392,52467],{"class":45},[39,84394,318],{"class":53},[39,84396,84397,84399,84401,84403,84405,84407,84409],{"class":41,"line":718},[39,84398,62835],{"class":74},[39,84400,52412],{"class":53},[39,84402,29096],{"class":74},[39,84404,79655],{"class":74},[39,84406,79658],{"class":74},[39,84408,1956],{"class":45},[39,84410,318],{"class":53},[39,84412,84413,84415,84417,84419],{"class":41,"line":723},[39,84414,55984],{"class":74},[39,84416,52412],{"class":53},[39,84418,52452],{"class":74},[39,84420,318],{"class":53},[39,84422,84423,84425,84427,84429,84431,84433,84435],{"class":41,"line":729},[39,84424,62952],{"class":74},[39,84426,52412],{"class":53},[39,84428,1483],{"class":74},[39,84430,52467],{"class":45},[39,84432,52496],{"class":74},[39,84434,63219],{"class":74},[39,84436,318],{"class":53},[39,84438,84439],{"class":41,"line":735},[39,84440,3284],{"class":53},[39,84442,84443],{"class":41,"line":741},[39,84444,122],{"emptyLinePlaceholder":121},[39,84446,84447,84449],{"class":41,"line":747},[39,84448,79718],{"class":49},[39,84450,16545],{"class":53},[39,84452,84453,84455,84457,84459],{"class":41,"line":753},[39,84454,63000],{"class":74},[39,84456,52412],{"class":53},[39,84458,63005],{"class":74},[39,84460,318],{"class":53},[39,84462,84463,84465,84467,84469],{"class":41,"line":758},[39,84464,55859],{"class":74},[39,84466,52412],{"class":53},[39,84468,62793],{"class":74},[39,84470,318],{"class":53},[39,84472,84473],{"class":41,"line":763},[39,84474,3284],{"class":53},[39,84476,84477],{"class":41,"line":772},[39,84478,122],{"emptyLinePlaceholder":121},[39,84480,84481,84483,84485],{"class":41,"line":777},[39,84482,79600],{"class":49},[39,84484,56590],{"class":52275},[39,84486,16545],{"class":53},[39,84488,84489,84491,84493,84495,84497],{"class":41,"line":785},[39,84490,55746],{"class":74},[39,84492,52412],{"class":53},[39,84494,1873],{"class":74},[39,84496,52467],{"class":45},[39,84498,318],{"class":53},[39,84500,84501,84503,84505,84507,84509],{"class":41,"line":796},[39,84502,55760],{"class":74},[39,84504,52412],{"class":53},[39,84506,1873],{"class":74},[39,84508,52467],{"class":45},[39,84510,318],{"class":53},[39,84512,84513,84515,84517,84519,84521],{"class":41,"line":808},[39,84514,62725],{"class":74},[39,84516,52412],{"class":53},[39,84518,1583],{"class":74},[39,84520,52467],{"class":45},[39,84522,318],{"class":53},[39,84524,84525],{"class":41,"line":823},[39,84526,3284],{"class":53},[39,84528,84529],{"class":41,"line":839},[39,84530,122],{"emptyLinePlaceholder":121},[39,84532,84533,84535,84537],{"class":41,"line":845},[39,84534,79600],{"class":49},[39,84536,63279],{"class":49},[39,84538,16545],{"class":53},[39,84540,84541,84543,84545,84547,84549],{"class":41,"line":856},[39,84542,55746],{"class":74},[39,84544,52412],{"class":53},[39,84546,2832],{"class":74},[39,84548,52467],{"class":45},[39,84550,318],{"class":53},[39,84552,84553],{"class":41,"line":861},[39,84554,3284],{"class":53},[39,84556,84557],{"class":41,"line":870},[39,84558,122],{"emptyLinePlaceholder":121},[39,84560,84561,84563,84565,84568],{"class":41,"line":9084},[39,84562,79600],{"class":49},[39,84564,63279],{"class":49},[39,84566,84567],{"class":49}," .tag",[39,84569,16545],{"class":53},[39,84571,84572,84574,84576,84578],{"class":41,"line":9090},[39,84573,55984],{"class":74},[39,84575,52412],{"class":53},[39,84577,61844],{"class":74},[39,84579,318],{"class":53},[39,84581,84582,84584,84586,84588,84590],{"class":41,"line":9102},[39,84583,55670],{"class":74},[39,84585,52412],{"class":53},[39,84587,1345],{"class":74},[39,84589,52467],{"class":45},[39,84591,318],{"class":53},[39,84593,84594,84596,84598,84600,84602],{"class":41,"line":9114},[39,84595,55897],{"class":74},[39,84597,52412],{"class":53},[39,84599,1759],{"class":74},[39,84601,52467],{"class":45},[39,84603,318],{"class":53},[39,84605,84606,84608,84610,84612],{"class":41,"line":9126},[39,84607,58391],{"class":74},[39,84609,52412],{"class":53},[39,84611,63045],{"class":74},[39,84613,318],{"class":53},[39,84615,84616],{"class":41,"line":10784},[39,84617,3284],{"class":53},[39,84619,84620],{"class":41,"line":10809},[39,84621,122],{"emptyLinePlaceholder":121},[39,84623,84624,84626,84628],{"class":41,"line":10832},[39,84625,79600],{"class":49},[39,84627,79892],{"class":49},[39,84629,32441],{"class":53},[39,84631,84632,84634,84637],{"class":41,"line":10856},[39,84633,79600],{"class":49},[39,84635,84636],{"class":49}," .sub-total",[39,84638,16545],{"class":53},[39,84640,84641,84643,84645,84647,84649],{"class":41,"line":10861},[39,84642,55897],{"class":74},[39,84644,52412],{"class":53},[39,84646,1911],{"class":74},[39,84648,52467],{"class":45},[39,84650,318],{"class":53},[39,84652,84653,84655,84657,84659],{"class":41,"line":10866},[39,84654,58391],{"class":74},[39,84656,52412],{"class":53},[39,84658,79915],{"class":74},[39,84660,318],{"class":53},[39,84662,84663,84665,84667,84669],{"class":41,"line":10871},[39,84664,62812],{"class":74},[39,84666,52412],{"class":53},[39,84668,1483],{"class":74},[39,84670,318],{"class":53},[39,84672,84673],{"class":41,"line":10880},[39,84674,3284],{"class":53},[39,84676,84677],{"class":41,"line":10885},[39,84678,122],{"emptyLinePlaceholder":121},[39,84680,84681,84683,84685],{"class":41,"line":10891},[39,84682,79600],{"class":49},[39,84684,79932],{"class":49},[39,84686,32441],{"class":53},[39,84688,84689,84691,84694],{"class":41,"line":10912},[39,84690,79600],{"class":49},[39,84692,84693],{"class":49}," .sub-total::before",[39,84695,32441],{"class":53},[39,84697,84698,84701],{"class":41,"line":10918},[39,84699,84700],{"class":49},"    .amount::before",[39,84702,16545],{"class":53},[39,84704,84705,84707,84709,84711],{"class":41,"line":10932},[39,84706,79939],{"class":74},[39,84708,52412],{"class":53},[39,84710,79944],{"class":237},[39,84712,318],{"class":53},[39,84714,84715,84717,84719,84721,84723],{"class":41,"line":10938},[39,84716,55897],{"class":74},[39,84718,52412],{"class":53},[39,84720,1759],{"class":74},[39,84722,52467],{"class":45},[39,84724,318],{"class":53},[39,84726,84727],{"class":41,"line":10965},[39,84728,3284],{"class":53},[39,84730,84731],{"class":41,"line":10974},[39,84732,122],{"emptyLinePlaceholder":121},[39,84734,84735,84737,84740],{"class":41,"line":10980},[39,84736,79600],{"class":49},[39,84738,84739],{"class":49}," .spec",[39,84741,16545],{"class":53},[39,84743,84744,84746,84748,84750],{"class":41,"line":10988},[39,84745,62812],{"class":74},[39,84747,52412],{"class":53},[39,84749,1345],{"class":74},[39,84751,318],{"class":53},[39,84753,84754,84756,84758,84761],{"class":41,"line":10993},[39,84755,58391],{"class":74},[39,84757,52412],{"class":53},[39,84759,84760],{"class":74},"#888",[39,84762,318],{"class":53},[39,84764,84765,84767,84769,84771,84773],{"class":41,"line":17577},[39,84766,55897],{"class":74},[39,84768,52412],{"class":53},[39,84770,1810],{"class":74},[39,84772,52467],{"class":45},[39,84774,318],{"class":53},[39,84776,84777,84779,84781,84783,84785],{"class":41,"line":17583},[39,84778,62975],{"class":74},[39,84780,52412],{"class":53},[39,84782,248],{"class":74},[39,84784,52467],{"class":45},[39,84786,318],{"class":53},[39,84788,84789],{"class":41,"line":17606},[39,84790,3284],{"class":53},[39,84792,84793],{"class":41,"line":17612},[39,84794,122],{"emptyLinePlaceholder":121},[39,84796,84797,84799,84802],{"class":41,"line":17635},[39,84798,79600],{"class":49},[39,84800,84801],{"class":49}," .count",[39,84803,16545],{"class":53},[39,84805,84806,84808,84810,84812],{"class":41,"line":17649},[39,84807,62812],{"class":74},[39,84809,52412],{"class":53},[39,84811,1483],{"class":74},[39,84813,318],{"class":53},[39,84815,84816,84818,84820,84823],{"class":41,"line":17669},[39,84817,58391],{"class":74},[39,84819,52412],{"class":53},[39,84821,84822],{"class":74},"#aaa",[39,84824,318],{"class":53},[39,84826,84827],{"class":41,"line":17675},[39,84828,3284],{"class":53},[39,84830,84831],{"class":41,"line":17686},[39,84832,122],{"emptyLinePlaceholder":121},[39,84834,84835,84837],{"class":41,"line":17709},[39,84836,73450],{"class":49},[39,84838,16545],{"class":53},[39,84840,84841,84843,84845,84847,84849],{"class":41,"line":17731},[39,84842,55746],{"class":74},[39,84844,52412],{"class":53},[39,84846,79549],{"class":74},[39,84848,52467],{"class":45},[39,84850,318],{"class":53},[39,84852,84853,84855,84857,84859,84861],{"class":41,"line":17736},[39,84854,55681],{"class":74},[39,84856,52412],{"class":53},[39,84858,1457],{"class":74},[39,84860,52531],{"class":74},[39,84862,318],{"class":53},[39,84864,84865,84867,84869,84871],{"class":41,"line":17742},[39,84866,55984],{"class":74},[39,84868,52412],{"class":53},[39,84870,52452],{"class":74},[39,84872,318],{"class":53},[39,84874,84875,84877,84879,84881],{"class":41,"line":17756},[39,84876,55995],{"class":74},[39,84878,52412],{"class":53},[39,84880,52555],{"class":74},[39,84882,318],{"class":53},[39,84884,84885,84888,84890,84892,84894,84896,84899],{"class":41,"line":17769},[39,84886,84887],{"class":74},"      border-top",[39,84889,52412],{"class":53},[39,84891,1483],{"class":74},[39,84893,52467],{"class":45},[39,84895,52496],{"class":74},[39,84897,84898],{"class":74}," #4e4e4e",[39,84900,318],{"class":53},[39,84902,84903,84905,84907,84909,84911],{"class":41,"line":17774},[39,84904,55670],{"class":74},[39,84906,52412],{"class":53},[39,84908,248],{"class":74},[39,84910,52467],{"class":45},[39,84912,318],{"class":53},[39,84914,84915],{"class":41,"line":17788},[39,84916,3284],{"class":53},[39,84918,84919],{"class":41,"line":17793},[39,84920,122],{"emptyLinePlaceholder":121},[39,84922,84923,84925,84928],{"class":41,"line":17799},[39,84924,73450],{"class":49},[39,84926,84927],{"class":49}," .amount",[39,84929,16545],{"class":53},[39,84931,84932,84934,84936,84938,84940],{"class":41,"line":17804},[39,84933,55897],{"class":74},[39,84935,52412],{"class":53},[39,84937,1911],{"class":74},[39,84939,52467],{"class":45},[39,84941,318],{"class":53},[39,84943,84944,84946,84948,84950],{"class":41,"line":17818},[39,84945,58391],{"class":74},[39,84947,52412],{"class":53},[39,84949,79915],{"class":74},[39,84951,318],{"class":53},[39,84953,84954,84956,84958,84960],{"class":41,"line":17823},[39,84955,63309],{"class":74},[39,84957,52412],{"class":53},[39,84959,52464],{"class":74},[39,84961,318],{"class":53},[39,84963,84964,84966,84968,84970,84972],{"class":41,"line":17828},[39,84965,62725],{"class":74},[39,84967,52412],{"class":53},[39,84969,1917],{"class":74},[39,84971,52467],{"class":45},[39,84973,318],{"class":53},[39,84975,84976],{"class":41,"line":17842},[39,84977,3284],{"class":53},[39,84979,84980,84982,84984],{"class":41,"line":17854},[39,84981,53392],{"class":53},[39,84983,1192],{"class":52275},[39,84985,52282],{"class":53},[39,84987,84988,84990,84992],{"class":41,"line":17859},[39,84989,52760],{"class":53},[39,84991,52309],{"class":52275},[39,84993,52282],{"class":53},[39,84995,84996],{"class":41,"line":17872},[39,84997,122],{"emptyLinePlaceholder":121},[39,84999,85000,85002,85004],{"class":41,"line":17877},[39,85001,2170],{"class":53},[39,85003,52775],{"class":52275},[39,85005,52282],{"class":53},[39,85007,85008,85010,85012,85014,85016,85018],{"class":41,"line":17882},[39,85009,53119],{"class":53},[39,85011,52586],{"class":52275},[39,85013,54461],{"class":49},[39,85015,1117],{"class":53},[39,85017,63583],{"class":237},[39,85019,52282],{"class":53},[39,85021,85022,85024,85026],{"class":41,"line":17887},[39,85023,53392],{"class":53},[39,85025,52586],{"class":52275},[39,85027,52282],{"class":53},[39,85029,85030,85032,85034,85036,85038,85040],{"class":41,"line":17900},[39,85031,53119],{"class":53},[39,85033,52586],{"class":52275},[39,85035,54461],{"class":49},[39,85037,1117],{"class":53},[39,85039,63555],{"class":237},[39,85041,52282],{"class":53},[39,85043,85044,85046,85048,85051,85053,85055,85057,85060,85062,85064,85066,85068],{"class":41,"line":17905},[39,85045,52316],{"class":53},[39,85047,52586],{"class":52275},[39,85049,85050],{"class":53},">合计：\u003C",[39,85052,39],{"class":52275},[39,85054,54461],{"class":49},[39,85056,1117],{"class":53},[39,85058,85059],{"class":237},"\"amount\"",[39,85061,56289],{"class":53},[39,85063,39],{"class":52275},[39,85065,56289],{"class":53},[39,85067,52586],{"class":52275},[39,85069,52282],{"class":53},[39,85071,85072,85074,85076],{"class":41,"line":33608},[39,85073,53392],{"class":53},[39,85075,52586],{"class":52275},[39,85077,52282],{"class":53},[39,85079,85080,85082,85084],{"class":41,"line":33614},[39,85081,53119],{"class":53},[39,85083,52788],{"class":52275},[39,85085,52282],{"class":53},[39,85087,85088,85090,85092,85094],{"class":41,"line":33620},[39,85089,12283],{"class":45},[39,85091,80352],{"class":74},[39,85093,71],{"class":45},[39,85095,56422],{"class":53},[39,85097,85098],{"class":41,"line":33626},[39,85099,80361],{"class":53},[39,85101,85102,85104,85106],{"class":41,"line":33632},[39,85103,80366],{"class":53},[39,85105,80369],{"class":237},[39,85107,32441],{"class":53},[39,85109,85110,85112,85114],{"class":41,"line":33643},[39,85111,80376],{"class":53},[39,85113,80379],{"class":237},[39,85115,32441],{"class":53},[39,85117,85118,85120,85123],{"class":41,"line":33649},[39,85119,80386],{"class":53},[39,85121,85122],{"class":74},"289.9",[39,85124,32441],{"class":53},[39,85126,85127,85129,85131],{"class":41,"line":33669},[39,85128,80396],{"class":53},[39,85130,80399],{"class":237},[39,85132,32441],{"class":53},[39,85134,85135,85138,85140],{"class":41,"line":33675},[39,85136,85137],{"class":53},"        count: ",[39,85139,1345],{"class":74},[39,85141,32441],{"class":53},[39,85143,85144,85147,85150],{"class":41,"line":33686},[39,85145,85146],{"class":53},"        spec: { color: ",[39,85148,85149],{"class":237},"'白色'",[39,85151,56579],{"class":53},[39,85153,85154],{"class":41,"line":33692},[39,85155,78867],{"class":53},[39,85157,85158],{"class":41,"line":33698},[39,85159,80361],{"class":53},[39,85161,85162,85164,85166],{"class":41,"line":33704},[39,85163,80366],{"class":53},[39,85165,80460],{"class":237},[39,85167,32441],{"class":53},[39,85169,85170,85172,85174],{"class":41,"line":33710},[39,85171,80376],{"class":53},[39,85173,80469],{"class":237},[39,85175,32441],{"class":53},[39,85177,85178,85180,85183],{"class":41,"line":33716},[39,85179,80386],{"class":53},[39,85181,85182],{"class":74},"109.8",[39,85184,32441],{"class":53},[39,85186,85187,85189,85191],{"class":41,"line":33722},[39,85188,80396],{"class":53},[39,85190,80487],{"class":237},[39,85192,32441],{"class":53},[39,85194,85195,85197,85199],{"class":41,"line":33728},[39,85196,85137],{"class":53},[39,85198,1339],{"class":74},[39,85200,32441],{"class":53},[39,85202,85203,85206,85208,85210,85212],{"class":41,"line":33748},[39,85204,85205],{"class":53},"        spec: { size: ",[39,85207,82878],{"class":237},[39,85209,56439],{"class":53},[39,85211,82883],{"class":237},[39,85213,56579],{"class":53},[39,85215,85216],{"class":41,"line":33754},[39,85217,78867],{"class":53},[39,85219,85220],{"class":41,"line":33770},[39,85221,80361],{"class":53},[39,85223,85224,85226,85228],{"class":41,"line":33776},[39,85225,80366],{"class":53},[39,85227,80504],{"class":237},[39,85229,32441],{"class":53},[39,85231,85232,85234,85236],{"class":41,"line":33790},[39,85233,80376],{"class":53},[39,85235,80513],{"class":237},[39,85237,32441],{"class":53},[39,85239,85240,85242,85245],{"class":41,"line":33796},[39,85241,80386],{"class":53},[39,85243,85244],{"class":74},"488",[39,85246,32441],{"class":53},[39,85248,85249,85251,85253],{"class":41,"line":33811},[39,85250,80396],{"class":53},[39,85252,80531],{"class":237},[39,85254,32441],{"class":53},[39,85256,85257,85259,85261],{"class":41,"line":33817},[39,85258,85137],{"class":53},[39,85260,1483],{"class":74},[39,85262,32441],{"class":53},[39,85264,85265,85267,85270,85273,85276],{"class":41,"line":33826},[39,85266,85146],{"class":53},[39,85268,85269],{"class":237},"'青色'",[39,85271,85272],{"class":53},", sum: ",[39,85274,85275],{"class":237},"'一大四小'",[39,85277,56579],{"class":53},[39,85279,85280],{"class":41,"line":33832},[39,85281,78867],{"class":53},[39,85283,85284],{"class":41,"line":33841},[39,85285,80361],{"class":53},[39,85287,85288,85290,85292],{"class":41,"line":33847},[39,85289,80366],{"class":53},[39,85291,80548],{"class":237},[39,85293,32441],{"class":53},[39,85295,85296,85298,85300],{"class":41,"line":33853},[39,85297,80376],{"class":53},[39,85299,80557],{"class":237},[39,85301,32441],{"class":53},[39,85303,85304,85306,85309],{"class":41,"line":33862},[39,85305,80386],{"class":53},[39,85307,85308],{"class":74},"139",[39,85310,32441],{"class":53},[39,85312,85313,85315,85317],{"class":41,"line":33868},[39,85314,80396],{"class":53},[39,85316,80575],{"class":237},[39,85318,32441],{"class":53},[39,85320,85321,85323,85325],{"class":41,"line":33879},[39,85322,85137],{"class":53},[39,85324,1483],{"class":74},[39,85326,32441],{"class":53},[39,85328,85329,85331,85334,85336,85339],{"class":41,"line":33885},[39,85330,85205],{"class":53},[39,85332,85333],{"class":237},"'小号'",[39,85335,56439],{"class":53},[39,85337,85338],{"class":237},"'紫色'",[39,85340,56445],{"class":53},[39,85342,85343,85346],{"class":41,"line":33904},[39,85344,85345],{"class":53},"        gift: ",[39,85347,85348],{"class":237},"'50g茶叶,清洗球'\n",[39,85350,85351],{"class":41,"line":33910},[39,85352,53373],{"class":53},[39,85354,85355],{"class":41,"line":33921},[39,85356,54084],{"class":53},[39,85358,85359],{"class":41,"line":33927},[39,85360,85361],{"class":128},"    \u002F\u002F  1.根据数据渲染页面\n",[39,85363,85364,85366,85368,85370,85372,85374,85376,85378,85380,85382,85384,85386],{"class":41,"line":33947},[39,85365,53382],{"class":53},[39,85367,55374],{"class":49},[39,85369,54],{"class":53},[39,85371,80876],{"class":237},[39,85373,75224],{"class":53},[39,85375,1117],{"class":45},[39,85377,81023],{"class":53},[39,85379,75019],{"class":49},[39,85381,54],{"class":53},[39,85383,80770],{"class":59},[39,85385,80773],{"class":45},[39,85387,16545],{"class":53},[39,85389,85390],{"class":41,"line":33963},[39,85391,85392],{"class":128},"      \u002F\u002F 对象解构\n",[39,85394,85395,85397,85399,85401,85403,85405,85407,85410,85412,85414,85416,85419,85421,85424,85426,85428],{"class":41,"line":33969},[39,85396,59203],{"class":45},[39,85398,80782],{"class":53},[39,85400,80795],{"class":74},[39,85402,63],{"class":53},[39,85404,80785],{"class":74},[39,85406,63],{"class":53},[39,85408,85409],{"class":74},"count",[39,85411,63],{"class":53},[39,85413,80790],{"class":74},[39,85415,63],{"class":53},[39,85417,85418],{"class":74},"spec",[39,85420,63],{"class":53},[39,85422,85423],{"class":74},"gift",[39,85425,80798],{"class":53},[39,85427,1117],{"class":45},[39,85429,80803],{"class":53},[39,85431,85432],{"class":41,"line":33983},[39,85433,85434],{"class":128},"      \u002F\u002F 规格文字模块处理\n",[39,85436,85437,85439,85442,85444,85446,85448,85450,85452,85454,85456],{"class":41,"line":33989},[39,85438,59203],{"class":45},[39,85440,85441],{"class":74}," text",[39,85443,71],{"class":45},[39,85445,82913],{"class":53},[39,85447,82916],{"class":49},[39,85449,82919],{"class":53},[39,85451,75198],{"class":49},[39,85453,54],{"class":53},[39,85455,82926],{"class":237},[39,85457,574],{"class":53},[39,85459,85460],{"class":41,"line":33995},[39,85461,85462],{"class":128},"      \u002F\u002F 处理赠品模块\n",[39,85464,85465,85467,85469,85471,85474,85476,85478,85480,85482,85485,85487,85489,85491,85493,85495,85498,85500,85503,85505,85507,85509,85511,85513,85515],{"class":41,"line":34006},[39,85466,59203],{"class":45},[39,85468,74894],{"class":74},[39,85470,71],{"class":45},[39,85472,85473],{"class":53}," gift ",[39,85475,2246],{"class":45},[39,85477,84087],{"class":53},[39,85479,84090],{"class":49},[39,85481,54],{"class":53},[39,85483,85484],{"class":237},"','",[39,85486,31801],{"class":53},[39,85488,75019],{"class":49},[39,85490,54],{"class":53},[39,85492,80770],{"class":59},[39,85494,80773],{"class":45},[39,85496,85497],{"class":237}," `\u003Cspan class=\"tag\">【赠品】${",[39,85499,80770],{"class":53},[39,85501,85502],{"class":237},"}\u003C\u002Fspan>`",[39,85504,31801],{"class":53},[39,85506,75198],{"class":49},[39,85508,54],{"class":53},[39,85510,75203],{"class":237},[39,85512,255],{"class":53},[39,85514,2119],{"class":45},[39,85516,71079],{"class":237},[39,85518,85519],{"class":41,"line":34012},[39,85520,85521],{"class":128},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[39,85523,85524,85526,85529,85531,85534,85536,85538,85540,85543,85545,85547,85549,85552,85554,85556],{"class":41,"line":34018},[39,85525,59203],{"class":45},[39,85527,85528],{"class":74}," subtotal",[39,85530,71],{"class":45},[39,85532,85533],{"class":53}," ((price ",[39,85535,1717],{"class":45},[39,85537,6831],{"class":74},[39,85539,7594],{"class":45},[39,85541,85542],{"class":53}," count) ",[39,85544,1845],{"class":45},[39,85546,6831],{"class":74},[39,85548,31801],{"class":53},[39,85550,85551],{"class":49},"toFixed",[39,85553,54],{"class":53},[39,85555,1345],{"class":74},[39,85557,574],{"class":53},[39,85559,85560],{"class":41,"line":34028},[39,85561,122],{"emptyLinePlaceholder":121},[39,85563,85564,85566],{"class":41,"line":34034},[39,85565,74957],{"class":45},[39,85567,71143],{"class":237},[39,85569,85570],{"class":41,"line":34045},[39,85571,85572],{"class":237},"        \u003Cdiv class=\"item\">\n",[39,85574,85575,85578,85580],{"class":41,"line":34051},[39,85576,85577],{"class":237},"          \u003Cimg src=\"${",[39,85579,80795],{"class":53},[39,85581,80827],{"class":237},[39,85583,85584,85587,85589,85592,85594],{"class":41,"line":34061},[39,85585,85586],{"class":237},"          \u003Cp class=\"name\">${",[39,85588,80785],{"class":53},[39,85590,85591],{"class":237},"}${",[39,85593,2427],{"class":53},[39,85595,80837],{"class":237},[39,85597,85598,85601,85603],{"class":41,"line":34066},[39,85599,85600],{"class":237},"          \u003Cp class=\"spec\">${",[39,85602,6267],{"class":53},[39,85604,80837],{"class":237},[39,85606,85607,85610,85612,85614,85616,85618,85620,85622],{"class":41,"line":34072},[39,85608,85609],{"class":237},"          \u003Cp class=\"price\">${",[39,85611,80790],{"class":53},[39,85613,1819],{"class":237},[39,85615,85551],{"class":49},[39,85617,54],{"class":237},[39,85619,1345],{"class":74},[39,85621,1692],{"class":237},[39,85623,80837],{"class":237},[39,85625,85626,85629,85631],{"class":41,"line":34121},[39,85627,85628],{"class":237},"          \u003Cp class=\"count\">x${",[39,85630,85409],{"class":53},[39,85632,80837],{"class":237},[39,85634,85635,85638,85641],{"class":41,"line":34168},[39,85636,85637],{"class":237},"          \u003Cp class=\"sub-total\">${",[39,85639,85640],{"class":53},"subtotal",[39,85642,80837],{"class":237},[39,85644,85645],{"class":41,"line":34173},[39,85646,85647],{"class":237},"        \u003C\u002Fdiv> \n",[39,85649,85650],{"class":41,"line":34179},[39,85651,85652],{"class":237},"             `\n",[39,85654,85655,85658,85660,85662,85664],{"class":41,"line":34198},[39,85656,85657],{"class":53},"    }).",[39,85659,75198],{"class":49},[39,85661,54],{"class":53},[39,85663,75203],{"class":237},[39,85665,574],{"class":53},[39,85667,85668],{"class":41,"line":34204},[39,85669,85670],{"class":128},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[39,85672,85673,85675,85677,85679,85681,85684,85686,85689,85691,85693,85695,85698,85701,85703,85706,85708,85710,85712,85715,85717,85719,85721,85723],{"class":41,"line":34224},[39,85674,12283],{"class":45},[39,85676,63760],{"class":74},[39,85678,71],{"class":45},[39,85680,81023],{"class":53},[39,85682,85683],{"class":49},"reduce",[39,85685,3471],{"class":53},[39,85687,85688],{"class":59},"prev",[39,85690,63],{"class":53},[39,85692,80770],{"class":59},[39,85694,255],{"class":53},[39,85696,85697],{"class":45},"=>",[39,85699,85700],{"class":53}," prev ",[39,85702,101],{"class":45},[39,85704,85705],{"class":53}," (item.price ",[39,85707,1717],{"class":45},[39,85709,6831],{"class":74},[39,85711,7594],{"class":45},[39,85713,85714],{"class":53}," item.count) ",[39,85716,1845],{"class":45},[39,85718,6831],{"class":74},[39,85720,63],{"class":53},[39,85722,1457],{"class":74},[39,85724,574],{"class":53},[39,85726,85727,85729,85731,85733,85736,85738,85740,85743,85745,85747,85749],{"class":41,"line":34230},[39,85728,53382],{"class":53},[39,85730,55374],{"class":49},[39,85732,54],{"class":53},[39,85734,85735],{"class":237},"'.amount'",[39,85737,75224],{"class":53},[39,85739,1117],{"class":45},[39,85741,85742],{"class":53}," total.",[39,85744,85551],{"class":49},[39,85746,54],{"class":53},[39,85748,1345],{"class":74},[39,85750,574],{"class":53},[39,85752,85753,85755,85757],{"class":41,"line":34236},[39,85754,53392],{"class":53},[39,85756,52788],{"class":52275},[39,85758,52282],{"class":53},[39,85760,85761,85763,85765],{"class":41,"line":34246},[39,85762,52760],{"class":53},[39,85764,52775],{"class":52275},[39,85766,52282],{"class":53},[39,85768,85769],{"class":41,"line":34251},[39,85770,122],{"emptyLinePlaceholder":121},[39,85772,85773,85775,85777],{"class":41,"line":34257},[39,85774,52760],{"class":53},[39,85776,51610],{"class":52275},[39,85778,52282],{"class":53},[14,85780,85782],{"id":85781},"_411-编程思想","4.11 编程思想",[476,85784,85786],{"id":85785},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85788,85789,85792],{},[350,85790,85791],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85794,85795],{},"调用就可以了",[19,85797,85798],{},[2585,85799],{"alt":35,"src":85800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[476,85802,85804],{"id":85803},"_4112-面向对象","4.11.2 面向对象",[19,85806,85807],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85809,85810],{},[2585,85811],{"alt":35,"src":85812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85814,85815],{},"面向对象的特性：",[489,85817,85818,85821,85824],{},[331,85819,85820],{},"封装性",[331,85822,85823],{},"继承性",[331,85825,85826],{},"多态性",[476,85828,85830],{"id":85829},"_4113-两者比较","4.11.3 两者比较",[19,85832,85833],{},[2585,85834],{"alt":35,"src":85835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85837,85839],{"id":85838},"_412-构造函数回顾","4.12 构造函数回顾",[19,85841,85842],{},[2585,85843],{"alt":35,"src":85844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85846,85847],{},[2585,85848],{"alt":35,"src":85849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85851,85852],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85854,85855],{},[2585,85856],{"alt":35,"src":85857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85859,85861],{"id":85860},"_413-原型","4.13 原型",[476,85863,85865],{"id":85864},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85867,85868],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85870,85871],{},[2585,85872],{"alt":35,"src":85873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85875,85876],{},[2585,85877],{"alt":35,"src":85878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85880,85881],{},"原型是构造函数的属性，它也是一个对象",[19,85883,85884],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85886,85887],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[30,85889,85891],{"className":54042,"code":85890,"language":54044,"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",[26,85892,85893,85901,85906,85914,85919,85924,85929,85934,85939,85943,85947,85951,85956,85961,85965,85970,85975,85980,85985,85990,85994,86002],{"__ignoreMap":35},[39,85894,85895,85897,85899],{"class":41,"line":42},[39,85896,2170],{"class":53},[39,85898,52775],{"class":52275},[39,85900,52282],{"class":53},[39,85902,85903],{"class":41,"line":92},[39,85904,85905],{"class":128},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[39,85907,85908,85910,85912],{"class":41,"line":112},[39,85909,53119],{"class":53},[39,85911,52788],{"class":52275},[39,85913,52282],{"class":53},[39,85915,85916],{"class":41,"line":118},[39,85917,85918],{"class":53},"    function Star(uname, age) {\n",[39,85920,85921],{"class":41,"line":125},[39,85922,85923],{"class":53},"      this.uname = uname,\n",[39,85925,85926],{"class":41,"line":132},[39,85927,85928],{"class":53},"        this.age = age\n",[39,85930,85931],{"class":41,"line":138},[39,85932,85933],{"class":53},"      \u002F\u002F this.sing = function () {\n",[39,85935,85936],{"class":41,"line":169},[39,85937,85938],{"class":53},"      \u002F\u002F   console.log('唱歌')\n",[39,85940,85941],{"class":41,"line":190},[39,85942,122],{"emptyLinePlaceholder":121},[39,85944,85945],{"class":41,"line":202},[39,85946,61012],{"class":53},[39,85948,85949],{"class":41,"line":207},[39,85950,3284],{"class":53},[39,85952,85953],{"class":41,"line":212},[39,85954,85955],{"class":53},"    Star.prototype.sing = function () {\n",[39,85957,85958],{"class":41,"line":223},[39,85959,85960],{"class":53},"      console.log('唱歌')\n",[39,85962,85963],{"class":41,"line":228},[39,85964,3284],{"class":53},[39,85966,85967],{"class":41,"line":263},[39,85968,85969],{"class":53},"    \u002F\u002F console.dir(Star.prototype)\n",[39,85971,85972],{"class":41,"line":287},[39,85973,85974],{"class":53},"    const pink = new Star('pink', 18)\n",[39,85976,85977],{"class":41,"line":292},[39,85978,85979],{"class":53},"    const red = new Star('red', 20)\n",[39,85981,85982],{"class":41,"line":305},[39,85983,85984],{"class":53},"    pink.sing()\n",[39,85986,85987],{"class":41,"line":310},[39,85988,85989],{"class":53},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[39,85991,85992],{"class":41,"line":321},[39,85993,122],{"emptyLinePlaceholder":121},[39,85995,85996,85998,86000],{"class":41,"line":713},[39,85997,53392],{"class":53},[39,85999,52788],{"class":52275},[39,86001,52282],{"class":53},[39,86003,86004,86006,86008],{"class":41,"line":718},[39,86005,52760],{"class":53},[39,86007,52775],{"class":52275},[39,86009,52282],{"class":53},[19,86011,86012],{},[2585,86013],{"alt":35,"src":86014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[30,86016,86018],{"className":54042,"code":86017,"language":54044,"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",[26,86019,86020,86028,86036,86041,86046,86051,86056,86060,86065,86070,86075,86079,86084,86088,86092,86097,86101,86109],{"__ignoreMap":35},[39,86021,86022,86024,86026],{"class":41,"line":42},[39,86023,2170],{"class":53},[39,86025,52775],{"class":52275},[39,86027,52282],{"class":53},[39,86029,86030,86032,86034],{"class":41,"line":92},[39,86031,53119],{"class":53},[39,86033,52788],{"class":52275},[39,86035,52282],{"class":53},[39,86037,86038],{"class":41,"line":112},[39,86039,86040],{"class":53},"    let that\n",[39,86042,86043],{"class":41,"line":118},[39,86044,86045],{"class":53},"    function Star(uname) {\n",[39,86047,86048],{"class":41,"line":125},[39,86049,86050],{"class":53},"      this.uname = uname\n",[39,86052,86053],{"class":41,"line":132},[39,86054,86055],{"class":53},"      that = this\n",[39,86057,86058],{"class":41,"line":138},[39,86059,3284],{"class":53},[39,86061,86062],{"class":41,"line":169},[39,86063,86064],{"class":53},"    \u002F\u002F 实例对象是 ldh\n",[39,86066,86067],{"class":41,"line":190},[39,86068,86069],{"class":53},"    const ldh = new Star('刘德华')\n",[39,86071,86072],{"class":41,"line":202},[39,86073,86074],{"class":53},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[39,86076,86077],{"class":41,"line":207},[39,86078,122],{"emptyLinePlaceholder":121},[39,86080,86081],{"class":41,"line":212},[39,86082,86083],{"class":53},"    Star.sing = function () {\n",[39,86085,86086],{"class":41,"line":223},[39,86087,85960],{"class":53},[39,86089,86090],{"class":41,"line":228},[39,86091,3284],{"class":53},[39,86093,86094],{"class":41,"line":263},[39,86095,86096],{"class":53},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[39,86098,86099],{"class":41,"line":287},[39,86100,122],{"emptyLinePlaceholder":121},[39,86102,86103,86105,86107],{"class":41,"line":292},[39,86104,53392],{"class":53},[39,86106,52788],{"class":52275},[39,86108,52282],{"class":53},[39,86110,86111,86113,86115],{"class":41,"line":305},[39,86112,52760],{"class":53},[39,86114,52775],{"class":52275},[39,86116,52282],{"class":53},[19,86118,86119],{},"构造函数的this指向的是实例对象；",[19,86121,86122],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[476,86124,86126],{"id":86125},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86128,86129],{},[2585,86130],{"alt":35,"src":86131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[30,86133,86135],{"className":54042,"code":86134,"language":54044,"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",[26,86136,86137,86145,86153,86158,86163,86168,86173,86178,86183,86188,86193,86198,86203,86207,86212,86217,86222,86227,86231,86236,86241,86246,86251,86255,86260,86265,86270,86275,86279,86284,86288,86296],{"__ignoreMap":35},[39,86138,86139,86141,86143],{"class":41,"line":42},[39,86140,2170],{"class":53},[39,86142,52775],{"class":52275},[39,86144,52282],{"class":53},[39,86146,86147,86149,86151],{"class":41,"line":92},[39,86148,53119],{"class":53},[39,86150,52788],{"class":52275},[39,86152,52282],{"class":53},[39,86154,86155],{"class":41,"line":112},[39,86156,86157],{"class":53},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[39,86159,86160],{"class":41,"line":118},[39,86161,86162],{"class":53},"    const arr = [1, 2, 3]\n",[39,86164,86165],{"class":41,"line":125},[39,86166,86167],{"class":53},"    \u002F\u002F 自己定义数组的扩展方法\n",[39,86169,86170],{"class":41,"line":132},[39,86171,86172],{"class":53},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[39,86174,86175],{"class":41,"line":138},[39,86176,86177],{"class":53},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[39,86179,86180],{"class":41,"line":169},[39,86181,86182],{"class":53},"    \u002F\u002F ①.最大值\n",[39,86184,86185],{"class":41,"line":190},[39,86186,86187],{"class":53},"    Array.prototype.max = function () {\n",[39,86189,86190],{"class":41,"line":202},[39,86191,86192],{"class":53},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[39,86194,86195],{"class":41,"line":207},[39,86196,86197],{"class":53},"      return Math.max(...this)\n",[39,86199,86200],{"class":41,"line":212},[39,86201,86202],{"class":53},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[39,86204,86205],{"class":41,"line":223},[39,86206,3284],{"class":53},[39,86208,86209],{"class":41,"line":228},[39,86210,86211],{"class":53},"    console.log(arr.max())\n",[39,86213,86214],{"class":41,"line":263},[39,86215,86216],{"class":53},"    \u002F\u002F ②最小值\n",[39,86218,86219],{"class":41,"line":287},[39,86220,86221],{"class":53},"    Array.prototype.min = function () {\n",[39,86223,86224],{"class":41,"line":292},[39,86225,86226],{"class":53},"      return Math.min(...this)\n",[39,86228,86229],{"class":41,"line":305},[39,86230,3284],{"class":53},[39,86232,86233],{"class":41,"line":310},[39,86234,86235],{"class":53},"    console.log(arr.min())\n",[39,86237,86238],{"class":41,"line":321},[39,86239,86240],{"class":53},"    \u002F\u002F③求和\n",[39,86242,86243],{"class":41,"line":713},[39,86244,86245],{"class":53},"    Array.prototype.sum = function () {\n",[39,86247,86248],{"class":41,"line":718},[39,86249,86250],{"class":53},"      return this.reduce((prev, current) => prev + current, 0)\n",[39,86252,86253],{"class":41,"line":723},[39,86254,3284],{"class":53},[39,86256,86257],{"class":41,"line":729},[39,86258,86259],{"class":53},"    console.log(arr.sum())\n",[39,86261,86262],{"class":41,"line":735},[39,86263,86264],{"class":53},"    \u002F\u002F ③排序\n",[39,86266,86267],{"class":41,"line":741},[39,86268,86269],{"class":53},"    Array.prototype.rever = function () {\n",[39,86271,86272],{"class":41,"line":747},[39,86273,86274],{"class":53},"      return this.reverse()\n",[39,86276,86277],{"class":41,"line":753},[39,86278,3284],{"class":53},[39,86280,86281],{"class":41,"line":758},[39,86282,86283],{"class":53},"    console.log(arr.rever())\n",[39,86285,86286],{"class":41,"line":763},[39,86287,122],{"emptyLinePlaceholder":121},[39,86289,86290,86292,86294],{"class":41,"line":772},[39,86291,53392],{"class":53},[39,86293,52788],{"class":52275},[39,86295,52282],{"class":53},[39,86297,86298,86300,86302],{"class":41,"line":777},[39,86299,52760],{"class":53},[39,86301,52775],{"class":52275},[39,86303,52282],{"class":53},[19,86305,86306],{},[2585,86307],{"alt":35,"src":86308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[476,86310,86312],{"id":86311},"_4133-constructor-属性","4.13.3 constructor 属性",[19,86314,86315],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,86317,86318],{},[2585,86319],{"alt":35,"src":86320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[30,86322,86324],{"className":54042,"code":86323,"language":54044,"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",[26,86325,86326,86334,86342,86347,86352,86356,86361,86366,86371,86379],{"__ignoreMap":35},[39,86327,86328,86330,86332],{"class":41,"line":42},[39,86329,2170],{"class":53},[39,86331,52775],{"class":52275},[39,86333,52282],{"class":53},[39,86335,86336,86338,86340],{"class":41,"line":92},[39,86337,53119],{"class":53},[39,86339,52788],{"class":52275},[39,86341,52282],{"class":53},[39,86343,86344],{"class":41,"line":112},[39,86345,86346],{"class":53},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[39,86348,86349],{"class":41,"line":118},[39,86350,86351],{"class":53},"    function Star() {\n",[39,86353,86354],{"class":41,"line":125},[39,86355,3284],{"class":53},[39,86357,86358],{"class":41,"line":132},[39,86359,86360],{"class":53},"    const ldh = new Star()\n",[39,86362,86363],{"class":41,"line":138},[39,86364,86365],{"class":53},"    console.log(Star.prototype)\n",[39,86367,86368],{"class":41,"line":169},[39,86369,86370],{"class":53},"    console.log(Star.prototype.constructor === Star)\n",[39,86372,86373,86375,86377],{"class":41,"line":190},[39,86374,53392],{"class":53},[39,86376,52788],{"class":52275},[39,86378,52282],{"class":53},[39,86380,86381,86383,86385],{"class":41,"line":202},[39,86382,52760],{"class":53},[39,86384,52775],{"class":52275},[39,86386,52282],{"class":53},[19,86388,86389],{},[2585,86390],{"alt":35,"src":86391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,86393,86394],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[30,86396,86398],{"className":54042,"code":86397,"language":54044,"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",[26,86399,86400,86408,86412,86416,86420,86425,86430,86435,86439,86444,86449,86454,86459,86464,86469,86473,86477,86482,86487,86492,86496,86501,86506,86510,86514,86518],{"__ignoreMap":35},[39,86401,86402,86404,86406],{"class":41,"line":42},[39,86403,53119],{"class":53},[39,86405,52788],{"class":52275},[39,86407,52282],{"class":53},[39,86409,86410],{"class":41,"line":92},[39,86411,86346],{"class":53},[39,86413,86414],{"class":41,"line":112},[39,86415,86351],{"class":53},[39,86417,86418],{"class":41,"line":118},[39,86419,3284],{"class":53},[39,86421,86422],{"class":41,"line":125},[39,86423,86424],{"class":53},"    \u002F\u002F const ldh = new Star()\n",[39,86426,86427],{"class":41,"line":132},[39,86428,86429],{"class":53},"    \u002F\u002F console.log(Star.prototype)\n",[39,86431,86432],{"class":41,"line":138},[39,86433,86434],{"class":53},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[39,86436,86437],{"class":41,"line":169},[39,86438,122],{"emptyLinePlaceholder":121},[39,86440,86441],{"class":41,"line":190},[39,86442,86443],{"class":53},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[39,86445,86446],{"class":41,"line":202},[39,86447,86448],{"class":53},"    \u002F\u002F Star.prototype.sing = function () {\n",[39,86450,86451],{"class":41,"line":207},[39,86452,86453],{"class":53},"    \u002F\u002F   console.log('唱歌')\n",[39,86455,86456],{"class":41,"line":212},[39,86457,86458],{"class":53},"    \u002F\u002F }\n",[39,86460,86461],{"class":41,"line":223},[39,86462,86463],{"class":53},"    \u002F\u002F Star.prototype.dance = function () {\n",[39,86465,86466],{"class":41,"line":228},[39,86467,86468],{"class":53},"    \u002F\u002F   console.log('跳舞')\n",[39,86470,86471],{"class":41,"line":263},[39,86472,86458],{"class":53},[39,86474,86475],{"class":41,"line":287},[39,86476,86365],{"class":53},[39,86478,86479],{"class":41,"line":292},[39,86480,86481],{"class":53},"    Star.prototype = {\n",[39,86483,86484],{"class":41,"line":305},[39,86485,86486],{"class":53},"      sing: function () {\n",[39,86488,86489],{"class":41,"line":310},[39,86490,86491],{"class":53},"        console.log('唱歌')\n",[39,86493,86494],{"class":41,"line":321},[39,86495,78867],{"class":53},[39,86497,86498],{"class":41,"line":713},[39,86499,86500],{"class":53},"      dance: function () {\n",[39,86502,86503],{"class":41,"line":718},[39,86504,86505],{"class":53},"        console.log('跳舞')\n",[39,86507,86508],{"class":41,"line":723},[39,86509,53373],{"class":53},[39,86511,86512],{"class":41,"line":729},[39,86513,3284],{"class":53},[39,86515,86516],{"class":41,"line":735},[39,86517,86365],{"class":53},[39,86519,86520,86522,86524],{"class":41,"line":741},[39,86521,53392],{"class":53},[39,86523,52788],{"class":52275},[39,86525,52282],{"class":53},[19,86527,86528],{},"进行输出结果后会发现：",[19,86530,86531],{},[2585,86532],{"alt":35,"src":86533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86535,86536],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86538,86539],{},"所以，要重新指回创造这个原型对象的构造函数",[30,86541,86543],{"className":72188,"code":86542,"language":72190,"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",[26,86544,86545,86559,86564,86569,86580,86593,86598,86609,86623,86627],{"__ignoreMap":35},[39,86546,86547,86550,86552,86555,86557],{"class":41,"line":42},[39,86548,86549],{"class":74},"Star",[39,86551,1819],{"class":53},[39,86553,86554],{"class":74},"prototype",[39,86556,71],{"class":45},[39,86558,16545],{"class":53},[39,86560,86561],{"class":41,"line":92},[39,86562,86563],{"class":128},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[39,86565,86566],{"class":41,"line":112},[39,86567,86568],{"class":53},"  constructor: Star,\n",[39,86570,86571,86574,86576,86578],{"class":41,"line":118},[39,86572,86573],{"class":49},"  sing",[39,86575,52412],{"class":53},[39,86577,55424],{"class":45},[39,86579,55427],{"class":53},[39,86581,86582,86584,86586,86588,86591],{"class":41,"line":125},[39,86583,74728],{"class":53},[39,86585,59222],{"class":49},[39,86587,54],{"class":53},[39,86589,86590],{"class":237},"'唱歌'",[39,86592,574],{"class":53},[39,86594,86595],{"class":41,"line":132},[39,86596,86597],{"class":53},"   },\n",[39,86599,86600,86603,86605,86607],{"class":41,"line":138},[39,86601,86602],{"class":49},"   dance",[39,86604,52412],{"class":53},[39,86606,55424],{"class":45},[39,86608,55427],{"class":53},[39,86610,86611,86614,86616,86618,86621],{"class":41,"line":169},[39,86612,86613],{"class":53},"     console.",[39,86615,59222],{"class":49},[39,86617,54],{"class":53},[39,86619,86620],{"class":237},"'跳舞'",[39,86622,574],{"class":53},[39,86624,86625],{"class":41,"line":190},[39,86626,5390],{"class":53},[39,86628,86629],{"class":41,"line":202},[39,86630,115],{"class":53},[19,86632,86633],{},[2585,86634],{"alt":35,"src":86635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86637,86638],{},"总结1：",[19,86640,86641],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86643,86644],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,86646,86647],{},"constructor指的是他的来源",[19,86649,86650],{},[2585,86651],{"alt":35,"src":86652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,86654,86655],{},[2585,86656],{"alt":35,"src":86657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,86659,86660],{},"总结2：",[19,86662,86663],{},[2585,86664],{"alt":35,"src":86665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,86667,86668],{},[2585,86669],{"alt":35,"src":86670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,86672,86673],{},[2585,86674],{"alt":35,"src":86675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[476,86677,86679],{"id":86678},"_4134-对象原型","4.13.4 对象原型",[19,86681,86682],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,86684,86685],{},"对象原型就是__proto__这个属性",[19,86687,86688],{},[2585,86689],{"alt":35,"src":86690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,86692,86693],{},[2585,86694],{"alt":35,"src":86695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,86697,86698],{},[2585,86699],{"alt":35,"src":86700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,86702,86703],{},[2585,86704],{"alt":35,"src":86705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[30,86707,86709],{"className":54042,"code":86708,"language":54044,"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",[26,86710,86711,86719,86727,86731,86735,86739,86744,86752],{"__ignoreMap":35},[39,86712,86713,86715,86717],{"class":41,"line":42},[39,86714,2170],{"class":53},[39,86716,52775],{"class":52275},[39,86718,52282],{"class":53},[39,86720,86721,86723,86725],{"class":41,"line":92},[39,86722,53119],{"class":53},[39,86724,52788],{"class":52275},[39,86726,52282],{"class":53},[39,86728,86729],{"class":41,"line":112},[39,86730,86351],{"class":53},[39,86732,86733],{"class":41,"line":118},[39,86734,3284],{"class":53},[39,86736,86737],{"class":41,"line":125},[39,86738,86360],{"class":53},[39,86740,86741],{"class":41,"line":132},[39,86742,86743],{"class":53},"    console.log(ldh)\n",[39,86745,86746,86748,86750],{"class":41,"line":138},[39,86747,53392],{"class":53},[39,86749,52788],{"class":52275},[39,86751,52282],{"class":53},[39,86753,86754,86756,86758],{"class":41,"line":169},[39,86755,52760],{"class":53},[39,86757,52775],{"class":52275},[39,86759,52282],{"class":53},[19,86761,86762],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,86764,86765],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,86767,86768],{},[2585,86769],{"alt":35,"src":86770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,86772,86773],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86775,86776],{},"对象原型指向原型对象",[19,86778,86779],{},[2585,86780],{"alt":35,"src":86781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86783,86784],{},[2585,86785],{"alt":35,"src":86786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86788,86789],{},[2585,86790],{"alt":35,"src":86791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[476,86793,86795],{"id":86794},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86797,86798],{},[2585,86799],{"alt":35,"src":86800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[328,86802,86803,86806,86809,86812],{},[331,86804,86805],{},"构造函数通过new的形式实例化得到实例对象",[331,86807,86808],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[331,86810,86811],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[331,86813,86814],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86816,86817],{},[2585,86818],{"alt":35,"src":86819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86821,86822],{},"题目梳理：",[19,86824,86825],{},[2585,86826],{"alt":35,"src":86827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[476,86829,86831],{"id":86830},"_4136-原型继承","4.13.6 原型继承",[19,86833,86834],{},[2585,86835],{"alt":35,"src":86836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86838,86839],{},[2585,86840],{"alt":35,"src":86841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86843,86844],{},[2585,86845],{"alt":35,"src":86846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86848,86849],{},[2585,86850],{"alt":35,"src":86851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86853,86854],{},[2585,86855],{"alt":35,"src":86856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86858,86859],{},[2585,86860],{"alt":35,"src":86861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86863,86864],{},[2585,86865],{"alt":35,"src":86866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86868,86869],{},[2585,86870],{"alt":35,"src":86871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86873,86874],{},"回顾：构造函数每次new得到对象都是不同的",[476,86876,86878],{"id":86877},"_4137-原型链","4.13.7 原型链",[19,86880,86881],{},[2585,86882],{"alt":35,"src":86883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86885,86886],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86888,86889],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86891,86892],{},"大哥是Object",[19,86894,86895],{},[2585,86896],{"alt":35,"src":86897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86899,86900],{},[2585,86901],{"alt":35,"src":86902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86904,86905],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86907,86908],{},"万物皆对象",[476,86910,86912],{"id":86911},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86914,86915],{},"模态框",[19,86917,86918],{},"以后遇见这个效果直接使用这个就行",[19,86920,86921],{},[2585,86922],{"alt":35,"src":86923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86925,86926],{},[2585,86927],{"alt":35,"src":86928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86930,86931],{},[2585,86932],{"alt":35,"src":86933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86935,86936],{},[2585,86937],{"alt":35,"src":86938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86940,86941],{},"补充知识点：",[328,86943,86944],{},[331,86945,86946],{},"append()",[19,86948,86949],{},[2585,86950],{"alt":35,"src":86951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[30,86953,86955],{"className":51608,"code":86954,"language":51610,"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",[26,86956,86957,86962,86967,86972,86976,86980,86984,86989,86994,86999,87003],{"__ignoreMap":35},[39,86958,86959],{"class":41,"line":42},[39,86960,86961],{"class":53},"append(param1)\n",[39,86963,86964],{"class":41,"line":92},[39,86965,86966],{"class":53},"append(param1, param2)\n",[39,86968,86969],{"class":41,"line":112},[39,86970,86971],{"class":53},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[39,86973,86974],{"class":41,"line":118},[39,86975,122],{"emptyLinePlaceholder":121},[39,86977,86978],{"class":41,"line":125},[39,86979,122],{"emptyLinePlaceholder":121},[39,86981,86982],{"class":41,"line":132},[39,86983,122],{"emptyLinePlaceholder":121},[39,86985,86986],{"class":41,"line":138},[39,86987,86988],{"class":53},"let div = document.createElement(\"div\");\n",[39,86990,86991],{"class":41,"line":169},[39,86992,86993],{"class":53},"let p = document.createElement(\"p\");\n",[39,86995,86996],{"class":41,"line":190},[39,86997,86998],{"class":53},"div.append(p);\n",[39,87000,87001],{"class":41,"line":202},[39,87002,122],{"emptyLinePlaceholder":121},[39,87004,87005,87008,87010],{"class":41,"line":207},[39,87006,87007],{"class":53},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[39,87009,19],{"class":52275},[39,87011,87012],{"class":53},"> ]\n",[328,87014,87015],{"start":92},[331,87016,87017],{},"remove()",[19,87019,87020],{},"自己删自己",[19,87022,87023],{},[2585,87024],{"alt":35,"src":87025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[30,87027,87029],{"className":51608,"code":87028,"language":51610,"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",[26,87030,87031,87041,87055,87059,87067,87081,87101,87113,87121,87128,87140,87153,87188,87200,87211,87223,87235,87247,87274,87284,87288,87292,87301,87313,87327,87337,87349,87353,87357,87367,87378,87388,87398,87411,87424,87434,87438,87442,87451,87461,87473,87477,87481,87490,87500,87510,87522,87526,87530,87540,87556,87567,87577,87587,87599,87611,87623,87627,87631,87644,87655,87659,87667,87675,87679,87687,87707,87727,87735,87740,87766,87771,87776,87795,87800,87812,87817,87828,87838,87848,87853,87858,87862,87867,87872,87877,87897,87902,87922,87927,87941,87946,87951,87956,87972,87976,87981,88010,88015,88020,88025,88036,88040,88044,88048,88053,88078,88083,88108,88113,88122,88126,88131,88156,88160,88185,88189,88198,88202,88207,88225,88235,88239,88247,88255,88259],{"__ignoreMap":35},[39,87032,87033,87035,87037,87039],{"class":41,"line":42},[39,87034,52272],{"class":53},[39,87036,52276],{"class":52275},[39,87038,52279],{"class":49},[39,87040,52282],{"class":53},[39,87042,87043,87045,87047,87049,87051,87053],{"class":41,"line":92},[39,87044,2170],{"class":53},[39,87046,51610],{"class":52275},[39,87048,52291],{"class":49},[39,87050,1117],{"class":53},[39,87052,52296],{"class":237},[39,87054,52282],{"class":53},[39,87056,87057],{"class":41,"line":112},[39,87058,122],{"emptyLinePlaceholder":121},[39,87060,87061,87063,87065],{"class":41,"line":118},[39,87062,2170],{"class":53},[39,87064,52309],{"class":52275},[39,87066,52282],{"class":53},[39,87068,87069,87071,87073,87075,87077,87079],{"class":41,"line":125},[39,87070,53119],{"class":53},[39,87072,52319],{"class":52275},[39,87074,52322],{"class":49},[39,87076,1117],{"class":53},[39,87078,52327],{"class":237},[39,87080,52282],{"class":53},[39,87082,87083,87085,87087,87089,87091,87093,87095,87097,87099],{"class":41,"line":132},[39,87084,53119],{"class":53},[39,87086,52319],{"class":52275},[39,87088,15893],{"class":49},[39,87090,1117],{"class":53},[39,87092,52366],{"class":237},[39,87094,52346],{"class":49},[39,87096,1117],{"class":53},[39,87098,52373],{"class":237},[39,87100,52282],{"class":53},[39,87102,87103,87105,87107,87109,87111],{"class":41,"line":138},[39,87104,53119],{"class":53},[39,87106,52382],{"class":52275},[39,87108,52385],{"class":53},[39,87110,52382],{"class":52275},[39,87112,52282],{"class":53},[39,87114,87115,87117,87119],{"class":41,"line":169},[39,87116,53119],{"class":53},[39,87118,1192],{"class":52275},[39,87120,52282],{"class":53},[39,87122,87123,87126],{"class":41,"line":190},[39,87124,87125],{"class":49},"    .modal",[39,87127,16545],{"class":53},[39,87129,87130,87132,87134,87136,87138],{"class":41,"line":202},[39,87131,55746],{"class":74},[39,87133,52412],{"class":53},[39,87135,5056],{"class":74},[39,87137,52467],{"class":45},[39,87139,318],{"class":53},[39,87141,87142,87145,87147,87149,87151],{"class":41,"line":207},[39,87143,87144],{"class":74},"      min-height",[39,87146,52412],{"class":53},[39,87148,278],{"class":74},[39,87150,52467],{"class":45},[39,87152,318],{"class":53},[39,87154,87155,87157,87159,87161,87163,87165,87167,87169,87171,87173,87175,87177,87179,87181,87183,87186],{"class":41,"line":212},[39,87156,79725],{"class":74},[39,87158,52412],{"class":53},[39,87160,1457],{"class":74},[39,87162,315],{"class":74},[39,87164,75],{"class":74},[39,87166,52467],{"class":45},[39,87168,79742],{"class":74},[39,87170,54],{"class":53},[39,87172,1457],{"class":74},[39,87174,63],{"class":53},[39,87176,1457],{"class":74},[39,87178,63],{"class":53},[39,87180,1457],{"class":74},[39,87182,63],{"class":53},[39,87184,87185],{"class":74},"0.1",[39,87187,166],{"class":53},[39,87189,87190,87192,87194,87196,87198],{"class":41,"line":223},[39,87191,56109],{"class":74},[39,87193,52412],{"class":53},[39,87195,1558],{"class":74},[39,87197,52467],{"class":45},[39,87199,318],{"class":53},[39,87201,87202,87204,87206,87209],{"class":41,"line":228},[39,87203,55734],{"class":74},[39,87205,52412],{"class":53},[39,87207,87208],{"class":74},"fixed",[39,87210,318],{"class":53},[39,87212,87213,87216,87218,87221],{"class":41,"line":263},[39,87214,87215],{"class":74},"      z-index",[39,87217,52412],{"class":53},[39,87219,87220],{"class":74},"999",[39,87222,318],{"class":53},[39,87224,87225,87227,87229,87231,87233],{"class":41,"line":287},[39,87226,55813],{"class":74},[39,87228,52412],{"class":53},[39,87230,1917],{"class":74},[39,87232,1592],{"class":45},[39,87234,318],{"class":53},[39,87236,87237,87239,87241,87243,87245],{"class":41,"line":292},[39,87238,55922],{"class":74},[39,87240,52412],{"class":53},[39,87242,1917],{"class":74},[39,87244,1592],{"class":45},[39,87246,318],{"class":53},[39,87248,87249,87251,87253,87255,87257,87260,87262,87264,87266,87268,87270,87272],{"class":41,"line":305},[39,87250,79766],{"class":74},[39,87252,52412],{"class":53},[39,87254,79771],{"class":74},[39,87256,54],{"class":53},[39,87258,87259],{"class":74},"-50",[39,87261,1592],{"class":45},[39,87263,63],{"class":53},[39,87265,87259],{"class":74},[39,87267,1592],{"class":45},[39,87269,63],{"class":53},[39,87271,1457],{"class":74},[39,87273,166],{"class":53},[39,87275,87276,87278,87280,87282],{"class":41,"line":310},[39,87277,55859],{"class":74},[39,87279,52412],{"class":53},[39,87281,61817],{"class":74},[39,87283,318],{"class":53},[39,87285,87286],{"class":41,"line":321},[39,87287,3284],{"class":53},[39,87289,87290],{"class":41,"line":713},[39,87291,122],{"emptyLinePlaceholder":121},[39,87293,87294,87296,87299],{"class":41,"line":718},[39,87295,87125],{"class":49},[39,87297,87298],{"class":49}," .header",[39,87300,16545],{"class":53},[39,87302,87303,87305,87307,87309,87311],{"class":41,"line":723},[39,87304,58334],{"class":74},[39,87306,52412],{"class":53},[39,87308,1664],{"class":74},[39,87310,52467],{"class":45},[39,87312,318],{"class":53},[39,87314,87315,87317,87319,87321,87323,87325],{"class":41,"line":729},[39,87316,55670],{"class":74},[39,87318,52412],{"class":53},[39,87320,1457],{"class":74},[39,87322,75],{"class":74},[39,87324,52467],{"class":45},[39,87326,318],{"class":53},[39,87328,87329,87331,87333,87335],{"class":41,"line":735},[39,87330,55734],{"class":74},[39,87332,52412],{"class":53},[39,87334,55739],{"class":74},[39,87336,318],{"class":53},[39,87338,87339,87341,87343,87345,87347],{"class":41,"line":741},[39,87340,55897],{"class":74},[39,87342,52412],{"class":53},[39,87344,248],{"class":74},[39,87346,52467],{"class":45},[39,87348,318],{"class":53},[39,87350,87351],{"class":41,"line":747},[39,87352,3284],{"class":53},[39,87354,87355],{"class":41,"line":753},[39,87356,122],{"emptyLinePlaceholder":121},[39,87358,87359,87361,87363,87365],{"class":41,"line":758},[39,87360,87125],{"class":49},[39,87362,87298],{"class":49},[39,87364,4115],{"class":52275},[39,87366,16545],{"class":53},[39,87368,87369,87372,87374,87376],{"class":41,"line":763},[39,87370,87371],{"class":74},"      font-style",[39,87373,52412],{"class":53},[39,87375,64816],{"class":74},[39,87377,318],{"class":53},[39,87379,87380,87382,87384,87386],{"class":41,"line":772},[39,87381,58391],{"class":74},[39,87383,52412],{"class":53},[39,87385,63045],{"class":74},[39,87387,318],{"class":53},[39,87389,87390,87392,87394,87396],{"class":41,"line":777},[39,87391,55734],{"class":74},[39,87393,52412],{"class":53},[39,87395,55806],{"class":74},[39,87397,318],{"class":53},[39,87399,87400,87403,87405,87407,87409],{"class":41,"line":785},[39,87401,87402],{"class":74},"      right",[39,87404,52412],{"class":53},[39,87406,1836],{"class":74},[39,87408,52467],{"class":45},[39,87410,318],{"class":53},[39,87412,87413,87415,87417,87420,87422],{"class":41,"line":796},[39,87414,55922],{"class":74},[39,87416,52412],{"class":53},[39,87418,87419],{"class":74},"-2",[39,87421,52467],{"class":45},[39,87423,318],{"class":53},[39,87425,87426,87428,87430,87432],{"class":41,"line":808},[39,87427,63000],{"class":74},[39,87429,52412],{"class":53},[39,87431,63005],{"class":74},[39,87433,318],{"class":53},[39,87435,87436],{"class":41,"line":823},[39,87437,3284],{"class":53},[39,87439,87440],{"class":41,"line":839},[39,87441,122],{"emptyLinePlaceholder":121},[39,87443,87444,87446,87449],{"class":41,"line":845},[39,87445,87125],{"class":49},[39,87447,87448],{"class":49}," .body",[39,87450,16545],{"class":53},[39,87452,87453,87455,87457,87459],{"class":41,"line":856},[39,87454,58261],{"class":74},[39,87456,52412],{"class":53},[39,87458,52567],{"class":74},[39,87460,318],{"class":53},[39,87462,87463,87465,87467,87469,87471],{"class":41,"line":861},[39,87464,55670],{"class":74},[39,87466,52412],{"class":53},[39,87468,423],{"class":74},[39,87470,52467],{"class":45},[39,87472,318],{"class":53},[39,87474,87475],{"class":41,"line":870},[39,87476,3284],{"class":53},[39,87478,87479],{"class":41,"line":9084},[39,87480,122],{"emptyLinePlaceholder":121},[39,87482,87483,87485,87488],{"class":41,"line":9090},[39,87484,87125],{"class":49},[39,87486,87487],{"class":49}," .footer",[39,87489,16545],{"class":53},[39,87491,87492,87494,87496,87498],{"class":41,"line":9102},[39,87493,55984],{"class":74},[39,87495,52412],{"class":53},[39,87497,52452],{"class":74},[39,87499,318],{"class":53},[39,87501,87502,87504,87506,87508],{"class":41,"line":9114},[39,87503,55995],{"class":74},[39,87505,52412],{"class":53},[39,87507,52555],{"class":74},[39,87509,318],{"class":53},[39,87511,87512,87514,87516,87518,87520],{"class":41,"line":9126},[39,87513,55670],{"class":74},[39,87515,52412],{"class":53},[39,87517,423],{"class":74},[39,87519,52467],{"class":45},[39,87521,318],{"class":53},[39,87523,87524],{"class":41,"line":10784},[39,87525,3284],{"class":53},[39,87527,87528],{"class":41,"line":10809},[39,87529,122],{"emptyLinePlaceholder":121},[39,87531,87532,87534,87536,87538],{"class":41,"line":10832},[39,87533,87125],{"class":49},[39,87535,87487],{"class":49},[39,87537,60],{"class":52275},[39,87539,16545],{"class":53},[39,87541,87542,87544,87546,87548,87550,87552,87554],{"class":41,"line":10856},[39,87543,55670],{"class":74},[39,87545,52412],{"class":53},[39,87547,1339],{"class":74},[39,87549,52467],{"class":45},[39,87551,3180],{"class":74},[39,87553,52467],{"class":45},[39,87555,318],{"class":53},[39,87557,87558,87560,87562,87565],{"class":41,"line":10861},[39,87559,62696],{"class":74},[39,87561,52412],{"class":53},[39,87563,87564],{"class":74},"#ccc",[39,87566,318],{"class":53},[39,87568,87569,87571,87573,87575],{"class":41,"line":10866},[39,87570,64945],{"class":74},[39,87572,52412],{"class":53},[39,87574,55712],{"class":74},[39,87576,318],{"class":53},[39,87578,87579,87581,87583,87585],{"class":41,"line":10871},[39,87580,58391],{"class":74},[39,87582,52412],{"class":53},[39,87584,61817],{"class":74},[39,87586,318],{"class":53},[39,87588,87589,87591,87593,87595,87597],{"class":41,"line":10880},[39,87590,56109],{"class":74},[39,87592,52412],{"class":53},[39,87594,1345],{"class":74},[39,87596,52467],{"class":45},[39,87598,318],{"class":53},[39,87600,87601,87603,87605,87607,87609],{"class":41,"line":10885},[39,87602,62725],{"class":74},[39,87604,52412],{"class":53},[39,87606,423],{"class":74},[39,87608,52467],{"class":45},[39,87610,318],{"class":53},[39,87612,87613,87615,87617,87619,87621],{"class":41,"line":10891},[39,87614,55897],{"class":74},[39,87616,52412],{"class":53},[39,87618,1810],{"class":74},[39,87620,52467],{"class":45},[39,87622,318],{"class":53},[39,87624,87625],{"class":41,"line":10912},[39,87626,3284],{"class":53},[39,87628,87629],{"class":41,"line":10918},[39,87630,122],{"emptyLinePlaceholder":121},[39,87632,87633,87635,87637,87639,87642],{"class":41,"line":10932},[39,87634,87125],{"class":49},[39,87636,87487],{"class":49},[39,87638,60],{"class":52275},[39,87640,87641],{"class":49},".submit",[39,87643,16545],{"class":53},[39,87645,87646,87648,87650,87653],{"class":41,"line":10938},[39,87647,55859],{"class":74},[39,87649,52412],{"class":53},[39,87651,87652],{"class":74},"#369",[39,87654,318],{"class":53},[39,87656,87657],{"class":41,"line":10965},[39,87658,3284],{"class":53},[39,87660,87661,87663,87665],{"class":41,"line":10974},[39,87662,53392],{"class":53},[39,87664,1192],{"class":52275},[39,87666,52282],{"class":53},[39,87668,87669,87671,87673],{"class":41,"line":10980},[39,87670,52760],{"class":53},[39,87672,52309],{"class":52275},[39,87674,52282],{"class":53},[39,87676,87677],{"class":41,"line":10988},[39,87678,122],{"emptyLinePlaceholder":121},[39,87680,87681,87683,87685],{"class":41,"line":10993},[39,87682,2170],{"class":53},[39,87684,52775],{"class":52275},[39,87686,52282],{"class":53},[39,87688,87689,87691,87693,87695,87697,87700,87703,87705],{"class":41,"line":17577},[39,87690,53119],{"class":53},[39,87692,54862],{"class":52275},[39,87694,15932],{"class":49},[39,87696,1117],{"class":53},[39,87698,87699],{"class":237},"\"delete\"",[39,87701,87702],{"class":53},">删除\u003C\u002F",[39,87704,54862],{"class":52275},[39,87706,52282],{"class":53},[39,87708,87709,87711,87713,87715,87717,87720,87723,87725],{"class":41,"line":17583},[39,87710,53119],{"class":53},[39,87712,54862],{"class":52275},[39,87714,15932],{"class":49},[39,87716,1117],{"class":53},[39,87718,87719],{"class":237},"\"login\"",[39,87721,87722],{"class":53},">登录\u003C\u002F",[39,87724,54862],{"class":52275},[39,87726,52282],{"class":53},[39,87728,87729,87731,87733],{"class":41,"line":17606},[39,87730,53119],{"class":53},[39,87732,52788],{"class":52275},[39,87734,52282],{"class":53},[39,87736,87737],{"class":41,"line":17612},[39,87738,87739],{"class":128},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[39,87741,87742,87744,87747,87749,87751,87753,87755,87757,87760,87762,87764],{"class":41,"line":17635},[39,87743,71059],{"class":45},[39,87745,87746],{"class":49}," Modal",[39,87748,54],{"class":53},[39,87750,52382],{"class":59},[39,87752,71],{"class":45},[39,87754,70905],{"class":237},[39,87756,63],{"class":53},[39,87758,87759],{"class":59},"message",[39,87761,71],{"class":45},[39,87763,70905],{"class":237},[39,87765,89],{"class":53},[39,87767,87768],{"class":41,"line":17649},[39,87769,87770],{"class":128},"      \u002F\u002F 创建Model 模态框盒子\n",[39,87772,87773],{"class":41,"line":17669},[39,87774,87775],{"class":128},"      \u002F\u002F 1.1 创建div标签\n",[39,87777,87778,87780,87783,87785,87787,87789,87791,87793],{"class":41,"line":17675},[39,87779,71026],{"class":74},[39,87781,87782],{"class":53},".modalBox ",[39,87784,1117],{"class":45},[39,87786,55371],{"class":53},[39,87788,71126],{"class":49},[39,87790,54],{"class":53},[39,87792,82906],{"class":237},[39,87794,574],{"class":53},[39,87796,87797],{"class":41,"line":17686},[39,87798,87799],{"class":128},"      \u002F\u002F 1.2 给div 添加类名为model\n",[39,87801,87802,87804,87807,87809],{"class":41,"line":17709},[39,87803,71026],{"class":74},[39,87805,87806],{"class":53},".modalBox.className ",[39,87808,1117],{"class":45},[39,87810,87811],{"class":237}," 'modal'\n",[39,87813,87814],{"class":41,"line":17731},[39,87815,87816],{"class":128},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[39,87818,87819,87821,87824,87826],{"class":41,"line":17736},[39,87820,71026],{"class":74},[39,87822,87823],{"class":53},".modalBox.innerHTML ",[39,87825,1117],{"class":45},[39,87827,71143],{"class":237},[39,87829,87830,87833,87835],{"class":41,"line":17742},[39,87831,87832],{"class":237},"        \u003Cdiv class=\"header\">${",[39,87834,52382],{"class":53},[39,87836,87837],{"class":237},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[39,87839,87840,87843,87845],{"class":41,"line":17756},[39,87841,87842],{"class":237},"        \u003Cdiv class=\"body\">${",[39,87844,87759],{"class":53},[39,87846,87847],{"class":237},"}\u003C\u002Fdiv>\n",[39,87849,87850],{"class":41,"line":17769},[39,87851,87852],{"class":237},"      `\n",[39,87854,87855],{"class":41,"line":17774},[39,87856,87857],{"class":128},"      \u002F\u002F console.log(this.modalBox)\n",[39,87859,87860],{"class":41,"line":17788},[39,87861,3284],{"class":53},[39,87863,87864],{"class":41,"line":17793},[39,87865,87866],{"class":128},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[39,87868,87869],{"class":41,"line":17799},[39,87870,87871],{"class":128},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[39,87873,87874],{"class":41,"line":17804},[39,87875,87876],{"class":128},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[39,87878,87879,87882,87884,87886,87888,87891,87893,87895],{"class":41,"line":17818},[39,87880,87881],{"class":74},"    Modal",[39,87883,1819],{"class":53},[39,87885,86554],{"class":74},[39,87887,1819],{"class":53},[39,87889,87890],{"class":49},"open",[39,87892,71],{"class":45},[39,87894,59893],{"class":45},[39,87896,55427],{"class":53},[39,87898,87899],{"class":41,"line":17823},[39,87900,87901],{"class":128},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[39,87903,87904,87906,87909,87911,87913,87915,87917,87920],{"class":41,"line":17828},[39,87905,59203],{"class":45},[39,87907,87908],{"class":74}," box",[39,87910,71],{"class":45},[39,87912,55371],{"class":53},[39,87914,55374],{"class":49},[39,87916,54],{"class":53},[39,87918,87919],{"class":237},"'.modal'",[39,87921,574],{"class":53},[39,87923,87924],{"class":41,"line":17842},[39,87925,87926],{"class":128},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[39,87928,87929,87932,87934,87937,87939],{"class":41,"line":17854},[39,87930,87931],{"class":53},"      box ",[39,87933,2825],{"class":45},[39,87935,87936],{"class":53}," box.",[39,87938,57981],{"class":49},[39,87940,537],{"class":53},[39,87942,87943],{"class":41,"line":17859},[39,87944,87945],{"class":128},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[39,87947,87948],{"class":41,"line":17872},[39,87949,87950],{"class":128},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[39,87952,87953],{"class":41,"line":17877},[39,87954,87955],{"class":128},"      \u002F\u002F append可以增加对象\n",[39,87957,87958,87961,87964,87966,87969],{"class":41,"line":17882},[39,87959,87960],{"class":53},"      document.body.",[39,87962,87963],{"class":49},"append",[39,87965,54],{"class":53},[39,87967,87968],{"class":74},"this",[39,87970,87971],{"class":53},".modalBox)\n",[39,87973,87974],{"class":41,"line":17887},[39,87975,122],{"emptyLinePlaceholder":121},[39,87977,87978],{"class":41,"line":17900},[39,87979,87980],{"class":128},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[39,87982,87983,87985,87988,87990,87992,87995,87997,87999,88001,88003,88006,88008],{"class":41,"line":17905},[39,87984,71026],{"class":74},[39,87986,87987],{"class":53},".modalBox.",[39,87989,55374],{"class":49},[39,87991,54],{"class":53},[39,87993,87994],{"class":237},"'i'",[39,87996,31801],{"class":53},[39,87998,58788],{"class":49},[39,88000,54],{"class":53},[39,88002,58793],{"class":237},[39,88004,88005],{"class":53},", () ",[39,88007,85697],{"class":45},[39,88009,16545],{"class":53},[39,88011,88012],{"class":41,"line":33608},[39,88013,88014],{"class":128},"        \u002F\u002F 这个地方需要用到箭头函数\n",[39,88016,88017],{"class":41,"line":33614},[39,88018,88019],{"class":128},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[39,88021,88022],{"class":41,"line":33620},[39,88023,88024],{"class":128},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[39,88026,88027,88029,88031,88034],{"class":41,"line":33626},[39,88028,65701],{"class":74},[39,88030,1819],{"class":53},[39,88032,88033],{"class":49},"close",[39,88035,537],{"class":53},[39,88037,88038],{"class":41,"line":33632},[39,88039,65790],{"class":53},[39,88041,88042],{"class":41,"line":33643},[39,88043,3284],{"class":53},[39,88045,88046],{"class":41,"line":33649},[39,88047,122],{"emptyLinePlaceholder":121},[39,88049,88050],{"class":41,"line":33669},[39,88051,88052],{"class":128},"    \u002F\u002F 测试一下 点击 删除按钮\n",[39,88054,88055,88057,88059,88061,88064,88066,88068,88070,88072,88074,88076],{"class":41,"line":33675},[39,88056,53382],{"class":53},[39,88058,55374],{"class":49},[39,88060,54],{"class":53},[39,88062,88063],{"class":237},"'#delete'",[39,88065,31801],{"class":53},[39,88067,58788],{"class":49},[39,88069,54],{"class":53},[39,88071,58793],{"class":237},[39,88073,88005],{"class":53},[39,88075,85697],{"class":45},[39,88077,16545],{"class":53},[39,88079,88080],{"class":41,"line":33686},[39,88081,88082],{"class":128},"      \u002F\u002F 先调用Model构造函数\n",[39,88084,88085,88087,88090,88092,88094,88096,88098,88101,88103,88106],{"class":41,"line":33692},[39,88086,59203],{"class":45},[39,88088,88089],{"class":74}," del",[39,88091,71],{"class":45},[39,88093,12638],{"class":45},[39,88095,87746],{"class":49},[39,88097,54],{"class":53},[39,88099,88100],{"class":237},"'温馨的提示'",[39,88102,63],{"class":53},[39,88104,88105],{"class":237},"'您没有删除权限操作'",[39,88107,574],{"class":53},[39,88109,88110],{"class":41,"line":33698},[39,88111,88112],{"class":128},"      \u002F\u002F 实例对象调用open方法\n",[39,88114,88115,88118,88120],{"class":41,"line":33704},[39,88116,88117],{"class":53},"      del.",[39,88119,87890],{"class":49},[39,88121,537],{"class":53},[39,88123,88124],{"class":41,"line":33710},[39,88125,34436],{"class":53},[39,88127,88128],{"class":41,"line":33716},[39,88129,88130],{"class":128},"    \u002F\u002F 测试一下 点击 登录按钮\n",[39,88132,88133,88135,88137,88139,88142,88144,88146,88148,88150,88152,88154],{"class":41,"line":33722},[39,88134,53382],{"class":53},[39,88136,55374],{"class":49},[39,88138,54],{"class":53},[39,88140,88141],{"class":237},"'#login'",[39,88143,31801],{"class":53},[39,88145,58788],{"class":49},[39,88147,54],{"class":53},[39,88149,58793],{"class":237},[39,88151,88005],{"class":53},[39,88153,85697],{"class":45},[39,88155,16545],{"class":53},[39,88157,88158],{"class":41,"line":33728},[39,88159,88082],{"class":128},[39,88161,88162,88164,88167,88169,88171,88173,88175,88178,88180,88183],{"class":41,"line":33748},[39,88163,59203],{"class":45},[39,88165,88166],{"class":74}," log",[39,88168,71],{"class":45},[39,88170,12638],{"class":45},[39,88172,87746],{"class":49},[39,88174,54],{"class":53},[39,88176,88177],{"class":237},"'友情提示'",[39,88179,63],{"class":53},[39,88181,88182],{"class":237},"'您还没有登录呢'",[39,88184,574],{"class":53},[39,88186,88187],{"class":41,"line":33754},[39,88188,88112],{"class":128},[39,88190,88191,88194,88196],{"class":41,"line":33770},[39,88192,88193],{"class":53},"      log.",[39,88195,87890],{"class":49},[39,88197,537],{"class":53},[39,88199,88200],{"class":41,"line":33776},[39,88201,34436],{"class":53},[39,88203,88204],{"class":41,"line":33790},[39,88205,88206],{"class":128},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[39,88208,88209,88211,88213,88215,88217,88219,88221,88223],{"class":41,"line":33796},[39,88210,87881],{"class":74},[39,88212,1819],{"class":53},[39,88214,86554],{"class":74},[39,88216,1819],{"class":53},[39,88218,88033],{"class":49},[39,88220,71],{"class":45},[39,88222,59893],{"class":45},[39,88224,55427],{"class":53},[39,88226,88227,88229,88231,88233],{"class":41,"line":33811},[39,88228,71026],{"class":74},[39,88230,87987],{"class":53},[39,88232,57981],{"class":49},[39,88234,537],{"class":53},[39,88236,88237],{"class":41,"line":33817},[39,88238,3284],{"class":53},[39,88240,88241,88243,88245],{"class":41,"line":33826},[39,88242,53392],{"class":53},[39,88244,52788],{"class":52275},[39,88246,52282],{"class":53},[39,88248,88249,88251,88253],{"class":41,"line":33832},[39,88250,52760],{"class":53},[39,88252,52775],{"class":52275},[39,88254,52282],{"class":53},[39,88256,88257],{"class":41,"line":33841},[39,88258,122],{"emptyLinePlaceholder":121},[39,88260,88261,88263,88265],{"class":41,"line":33847},[39,88262,52760],{"class":53},[39,88264,51610],{"class":52275},[39,88266,52282],{"class":53},[19,88268,88269],{},[2585,88270],{"alt":35,"src":88271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88273,88275],{"id":88274},"_414-深浅拷贝","4.14 深浅拷贝",[476,88277,88279],{"id":88278},"_4141-浅拷贝","4.14.1 浅拷贝",[19,88281,88282],{},[2585,88283],{"alt":35,"src":88284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,88286,88287],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,88289,88290],{},[2585,88291],{"alt":35,"src":88292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,88294,88295],{},[2585,88296],{"alt":35,"src":88297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,88299,88300],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,88302,88303],{},[2585,88304],{"alt":35,"src":88305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,88307,326],{},[19,88309,88310],{},[2585,88311],{"alt":35,"src":88312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[476,88314,88316],{"id":88315},"_4142-深拷贝","4.14.2 深拷贝",[19,88318,88319],{},"深拷贝：拷贝的是对象，不是地址",[19,88321,88322],{},"常用的三种方法：",[328,88324,88325,88328,88331],{},[331,88326,88327],{},"通过递归实现深拷贝",[331,88329,88330],{},"lodash\u002FcloneDeep",[331,88332,88333],{},"通过JSON.stringify()实现",[22971,88335,88337],{"id":88336},"_41421-递归函数","4.14.2.1 递归函数",[19,88339,88340],{},[2585,88341],{"alt":35,"src":88342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[328,88344,88345],{},[331,88346,88347],{},"死递归占溢出：",[30,88349,88351],{"className":54042,"code":88350,"language":54044,"meta":35,"style":35},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[26,88352,88353,88361,88369,88373,88378,88382,88387,88395],{"__ignoreMap":35},[39,88354,88355,88357,88359],{"class":41,"line":42},[39,88356,2170],{"class":53},[39,88358,52775],{"class":52275},[39,88360,52282],{"class":53},[39,88362,88363,88365,88367],{"class":41,"line":92},[39,88364,53119],{"class":53},[39,88366,52788],{"class":52275},[39,88368,52282],{"class":53},[39,88370,88371],{"class":41,"line":112},[39,88372,78118],{"class":53},[39,88374,88375],{"class":41,"line":118},[39,88376,88377],{"class":53},"      fn()\n",[39,88379,88380],{"class":41,"line":125},[39,88381,3284],{"class":53},[39,88383,88384],{"class":41,"line":132},[39,88385,88386],{"class":53},"    fn()\n",[39,88388,88389,88391,88393],{"class":41,"line":138},[39,88390,53392],{"class":53},[39,88392,52788],{"class":52275},[39,88394,52282],{"class":53},[39,88396,88397,88399,88401],{"class":41,"line":169},[39,88398,52760],{"class":53},[39,88400,52775],{"class":52275},[39,88402,52282],{"class":53},[328,88404,88405],{"start":92},[331,88406,88407],{},"递归函数要加判断条件：",[19,88409,88410],{},[2585,88411],{"alt":35,"src":88412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[328,88414,88415],{"start":112},[331,88416,88417],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[30,88419,88421],{"className":51608,"code":88420,"language":51610,"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",[26,88422,88423,88433,88447,88451,88459,88473,88493,88505,88513,88517,88525,88537,88545,88553,88578,88590,88594,88601,88609,88617,88621],{"__ignoreMap":35},[39,88424,88425,88427,88429,88431],{"class":41,"line":42},[39,88426,52272],{"class":53},[39,88428,52276],{"class":52275},[39,88430,52279],{"class":49},[39,88432,52282],{"class":53},[39,88434,88435,88437,88439,88441,88443,88445],{"class":41,"line":92},[39,88436,2170],{"class":53},[39,88438,51610],{"class":52275},[39,88440,52291],{"class":49},[39,88442,1117],{"class":53},[39,88444,52296],{"class":237},[39,88446,52282],{"class":53},[39,88448,88449],{"class":41,"line":112},[39,88450,122],{"emptyLinePlaceholder":121},[39,88452,88453,88455,88457],{"class":41,"line":118},[39,88454,2170],{"class":53},[39,88456,52309],{"class":52275},[39,88458,52282],{"class":53},[39,88460,88461,88463,88465,88467,88469,88471],{"class":41,"line":125},[39,88462,53119],{"class":53},[39,88464,52319],{"class":52275},[39,88466,52322],{"class":49},[39,88468,1117],{"class":53},[39,88470,52327],{"class":237},[39,88472,52282],{"class":53},[39,88474,88475,88477,88479,88481,88483,88485,88487,88489,88491],{"class":41,"line":132},[39,88476,53119],{"class":53},[39,88478,52319],{"class":52275},[39,88480,15893],{"class":49},[39,88482,1117],{"class":53},[39,88484,52366],{"class":237},[39,88486,52346],{"class":49},[39,88488,1117],{"class":53},[39,88490,52373],{"class":237},[39,88492,52282],{"class":53},[39,88494,88495,88497,88499,88501,88503],{"class":41,"line":138},[39,88496,53119],{"class":53},[39,88498,52382],{"class":52275},[39,88500,52385],{"class":53},[39,88502,52382],{"class":52275},[39,88504,52282],{"class":53},[39,88506,88507,88509,88511],{"class":41,"line":169},[39,88508,52760],{"class":53},[39,88510,52309],{"class":52275},[39,88512,52282],{"class":53},[39,88514,88515],{"class":41,"line":190},[39,88516,122],{"emptyLinePlaceholder":121},[39,88518,88519,88521,88523],{"class":41,"line":202},[39,88520,2170],{"class":53},[39,88522,52775],{"class":52275},[39,88524,52282],{"class":53},[39,88526,88527,88529,88531,88533,88535],{"class":41,"line":207},[39,88528,53119],{"class":53},[39,88530,52586],{"class":52275},[39,88532,56289],{"class":53},[39,88534,52586],{"class":52275},[39,88536,52282],{"class":53},[39,88538,88539,88541,88543],{"class":41,"line":212},[39,88540,53119],{"class":53},[39,88542,52788],{"class":52275},[39,88544,52282],{"class":53},[39,88546,88547,88549,88551],{"class":41,"line":223},[39,88548,71059],{"class":45},[39,88550,74748],{"class":49},[39,88552,220],{"class":53},[39,88554,88555,88557,88559,88561,88563,88565,88567,88569,88571,88573,88576],{"class":41,"line":228},[39,88556,56746],{"class":53},[39,88558,55374],{"class":49},[39,88560,54],{"class":53},[39,88562,82906],{"class":237},[39,88564,75224],{"class":53},[39,88566,1117],{"class":45},[39,88568,12638],{"class":45},[39,88570,74764],{"class":49},[39,88572,18234],{"class":53},[39,88574,88575],{"class":49},"toLocaleString",[39,88577,537],{"class":53},[39,88579,88580,88583,88586,88588],{"class":41,"line":263},[39,88581,88582],{"class":49},"      setTimeout",[39,88584,88585],{"class":53},"(getTime, ",[39,88587,7486],{"class":74},[39,88589,574],{"class":53},[39,88591,88592],{"class":41,"line":287},[39,88593,3284],{"class":53},[39,88595,88596,88599],{"class":41,"line":292},[39,88597,88598],{"class":49},"    getTime",[39,88600,537],{"class":53},[39,88602,88603,88605,88607],{"class":41,"line":305},[39,88604,53392],{"class":53},[39,88606,52788],{"class":52275},[39,88608,52282],{"class":53},[39,88610,88611,88613,88615],{"class":41,"line":310},[39,88612,52760],{"class":53},[39,88614,52775],{"class":52275},[39,88616,52282],{"class":53},[39,88618,88619],{"class":41,"line":321},[39,88620,122],{"emptyLinePlaceholder":121},[39,88622,88623,88625,88627],{"class":41,"line":713},[39,88624,52760],{"class":53},[39,88626,51610],{"class":52275},[39,88628,52282],{"class":53},[19,88630,88631],{},[2585,88632],{"alt":35,"src":88633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[328,88635,88636],{"start":118},[331,88637,88327],{},[19,88639,88640],{},[2585,88641],{"alt":35,"src":88642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,88644,88645],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,88647,40164],{},[19,88649,88650],{},"这个是简易版的递归函数深拷贝",[19,88652,88653],{},"一定要注意先数组再对象，因为万物皆可对象",[30,88655,88657],{"className":51608,"code":88656,"language":51610,"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",[26,88658,88659,88669,88683,88687,88695,88709,88729,88741,88749,88753,88761,88769,88779,88788,88796,88812,88816,88824,88828,88832,88844,88849,88868,88884,88889,88894,88899,88914,88919,88924,88933,88941,88958,88966,88972,88980,88985,88990,88999,89003,89007,89011,89022,89031,89041,89055,89065,89073,89081,89089,89093],{"__ignoreMap":35},[39,88660,88661,88663,88665,88667],{"class":41,"line":42},[39,88662,52272],{"class":53},[39,88664,52276],{"class":52275},[39,88666,52279],{"class":49},[39,88668,52282],{"class":53},[39,88670,88671,88673,88675,88677,88679,88681],{"class":41,"line":92},[39,88672,2170],{"class":53},[39,88674,51610],{"class":52275},[39,88676,52291],{"class":49},[39,88678,1117],{"class":53},[39,88680,52296],{"class":237},[39,88682,52282],{"class":53},[39,88684,88685],{"class":41,"line":112},[39,88686,122],{"emptyLinePlaceholder":121},[39,88688,88689,88691,88693],{"class":41,"line":118},[39,88690,2170],{"class":53},[39,88692,52309],{"class":52275},[39,88694,52282],{"class":53},[39,88696,88697,88699,88701,88703,88705,88707],{"class":41,"line":125},[39,88698,53119],{"class":53},[39,88700,52319],{"class":52275},[39,88702,52322],{"class":49},[39,88704,1117],{"class":53},[39,88706,52327],{"class":237},[39,88708,52282],{"class":53},[39,88710,88711,88713,88715,88717,88719,88721,88723,88725,88727],{"class":41,"line":132},[39,88712,53119],{"class":53},[39,88714,52319],{"class":52275},[39,88716,15893],{"class":49},[39,88718,1117],{"class":53},[39,88720,52366],{"class":237},[39,88722,52346],{"class":49},[39,88724,1117],{"class":53},[39,88726,52373],{"class":237},[39,88728,52282],{"class":53},[39,88730,88731,88733,88735,88737,88739],{"class":41,"line":138},[39,88732,53119],{"class":53},[39,88734,52382],{"class":52275},[39,88736,52385],{"class":53},[39,88738,52382],{"class":52275},[39,88740,52282],{"class":53},[39,88742,88743,88745,88747],{"class":41,"line":169},[39,88744,52760],{"class":53},[39,88746,52309],{"class":52275},[39,88748,52282],{"class":53},[39,88750,88751],{"class":41,"line":190},[39,88752,122],{"emptyLinePlaceholder":121},[39,88754,88755,88757,88759],{"class":41,"line":202},[39,88756,2170],{"class":53},[39,88758,52775],{"class":52275},[39,88760,52282],{"class":53},[39,88762,88763,88765,88767],{"class":41,"line":207},[39,88764,53119],{"class":53},[39,88766,52788],{"class":52275},[39,88768,52282],{"class":53},[39,88770,88771,88773,88775,88777],{"class":41,"line":212},[39,88772,12283],{"class":45},[39,88774,70946],{"class":74},[39,88776,71],{"class":45},[39,88778,16545],{"class":53},[39,88780,88781,88783,88786],{"class":41,"line":223},[39,88782,72591],{"class":53},[39,88784,88785],{"class":237},"'pink'",[39,88787,32441],{"class":53},[39,88789,88790,88792,88794],{"class":41,"line":228},[39,88791,72601],{"class":53},[39,88793,1911],{"class":74},[39,88795,32441],{"class":53},[39,88797,88798,88801,88804,88806,88809],{"class":41,"line":263},[39,88799,88800],{"class":53},"      hobby: [",[39,88802,88803],{"class":237},"'乒乓球'",[39,88805,63],{"class":53},[39,88807,88808],{"class":237},"'足球'",[39,88810,88811],{"class":53},"],\n",[39,88813,88814],{"class":41,"line":287},[39,88815,78847],{"class":53},[39,88817,88818,88821],{"class":41,"line":292},[39,88819,88820],{"class":53},"        baby: ",[39,88822,88823],{"class":237},"'小pink'\n",[39,88825,88826],{"class":41,"line":305},[39,88827,53373],{"class":53},[39,88829,88830],{"class":41,"line":310},[39,88831,3284],{"class":53},[39,88833,88834,88836,88839,88841],{"class":41,"line":321},[39,88835,12283],{"class":45},[39,88837,88838],{"class":74}," o",[39,88840,71],{"class":45},[39,88842,88843],{"class":53}," {}\n",[39,88845,88846],{"class":41,"line":713},[39,88847,88848],{"class":128},"    \u002F\u002F 拷贝函数\n",[39,88850,88851,88853,88856,88858,88861,88863,88866],{"class":41,"line":718},[39,88852,71059],{"class":45},[39,88854,88855],{"class":49}," deepCopy",[39,88857,54],{"class":53},[39,88859,88860],{"class":59},"newObj",[39,88862,63],{"class":53},[39,88864,88865],{"class":59},"oldObj",[39,88867,89],{"class":53},[39,88869,88870,88872,88874,88876,88879,88881],{"class":41,"line":723},[39,88871,53259],{"class":45},[39,88873,2772],{"class":53},[39,88875,52822],{"class":45},[39,88877,88878],{"class":53}," k ",[39,88880,27018],{"class":45},[39,88882,88883],{"class":53}," oldObj) {\n",[39,88885,88886],{"class":41,"line":729},[39,88887,88888],{"class":128},"        \u002F\u002F 处理数组的问题\n",[39,88890,88891],{"class":41,"line":735},[39,88892,88893],{"class":128},"        \u002F\u002F 判断是否属于数组\n",[39,88895,88896],{"class":41,"line":741},[39,88897,88898],{"class":128},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[39,88900,88901,88903,88906,88909,88912],{"class":41,"line":747},[39,88902,3590],{"class":45},[39,88904,88905],{"class":53}," (oldObj[k] ",[39,88907,88908],{"class":45},"instanceof",[39,88910,88911],{"class":49}," Array",[39,88913,89],{"class":53},[39,88915,88916],{"class":41,"line":753},[39,88917,88918],{"class":128},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[39,88920,88921],{"class":41,"line":758},[39,88922,88923],{"class":128},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[39,88925,88926,88929,88931],{"class":41,"line":763},[39,88927,88928],{"class":53},"          newObj[k] ",[39,88930,1117],{"class":45},[39,88932,52813],{"class":53},[39,88934,88935,88938],{"class":41,"line":772},[39,88936,88937],{"class":49},"          deepCopy",[39,88939,88940],{"class":53},"(newObj[k], oldObj[k])\n",[39,88942,88943,88945,88947,88949,88951,88953,88956],{"class":41,"line":777},[39,88944,81055],{"class":53},[39,88946,2811],{"class":45},[39,88948,2814],{"class":45},[39,88950,88905],{"class":53},[39,88952,88908],{"class":45},[39,88954,88955],{"class":49}," Object",[39,88957,89],{"class":53},[39,88959,88960,88962,88964],{"class":41,"line":785},[39,88961,88928],{"class":53},[39,88963,1117],{"class":45},[39,88965,88843],{"class":53},[39,88967,88968,88970],{"class":41,"line":796},[39,88969,88937],{"class":49},[39,88971,88940],{"class":53},[39,88973,88974,88976,88978],{"class":41,"line":808},[39,88975,81055],{"class":53},[39,88977,2811],{"class":45},[39,88979,16545],{"class":53},[39,88981,88982],{"class":41,"line":823},[39,88983,88984],{"class":128},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[39,88986,88987],{"class":41,"line":839},[39,88988,88989],{"class":128},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[39,88991,88992,88994,88996],{"class":41,"line":845},[39,88993,88928],{"class":53},[39,88995,1117],{"class":45},[39,88997,88998],{"class":53}," oldObj[k]\n",[39,89000,89001],{"class":41,"line":856},[39,89002,3622],{"class":53},[39,89004,89005],{"class":41,"line":861},[39,89006,53373],{"class":53},[39,89008,89009],{"class":41,"line":870},[39,89010,3284],{"class":53},[39,89012,89013,89016,89019],{"class":41,"line":9084},[39,89014,89015],{"class":49},"    deepCopy",[39,89017,89018],{"class":53},"(o, obj) ",[39,89020,89021],{"class":128},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[39,89023,89024,89026,89028],{"class":41,"line":9090},[39,89025,74728],{"class":53},[39,89027,59222],{"class":49},[39,89029,89030],{"class":53},"(o)\n",[39,89032,89033,89036,89038],{"class":41,"line":9102},[39,89034,89035],{"class":53},"    o.age ",[39,89037,1117],{"class":45},[39,89039,89040],{"class":74}," 20\n",[39,89042,89043,89046,89048,89050,89052],{"class":41,"line":9114},[39,89044,89045],{"class":53},"    o.hobby[",[39,89047,1457],{"class":74},[39,89049,5524],{"class":53},[39,89051,1117],{"class":45},[39,89053,89054],{"class":237}," '篮球'\n",[39,89056,89057,89060,89062],{"class":41,"line":9126},[39,89058,89059],{"class":53},"    o.family ",[39,89061,1117],{"class":45},[39,89063,89064],{"class":237}," '老pink'\n",[39,89066,89067,89069,89071],{"class":41,"line":10784},[39,89068,74728],{"class":53},[39,89070,59222],{"class":49},[39,89072,71011],{"class":53},[39,89074,89075,89077,89079],{"class":41,"line":10809},[39,89076,53392],{"class":53},[39,89078,52788],{"class":52275},[39,89080,52282],{"class":53},[39,89082,89083,89085,89087],{"class":41,"line":10832},[39,89084,52760],{"class":53},[39,89086,52775],{"class":52275},[39,89088,52282],{"class":53},[39,89090,89091],{"class":41,"line":10856},[39,89092,122],{"emptyLinePlaceholder":121},[39,89094,89095,89097,89099],{"class":41,"line":10861},[39,89096,52760],{"class":53},[39,89098,51610],{"class":52275},[39,89100,52282],{"class":53},[19,89102,89103],{},[2585,89104],{"alt":35,"src":89105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22971,89107,89109,89110],{"id":89108},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[350,89111,89112],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89114,89115],{},[922,89116,89117],{"href":89117,"rel":89118},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24839],[19,89120,89121],{},"lodash里边的方法都要加上一个下划线_",[19,89123,89124],{},"_.cloneDeep()",[30,89126,89128],{"className":51608,"code":89127,"language":51610,"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",[26,89129,89130,89140,89154,89158,89166,89180,89200,89212,89220,89224,89232,89237,89256,89264,89274,89282,89290,89302,89306,89312,89316,89320,89336,89344,89353,89361,89369,89377,89381],{"__ignoreMap":35},[39,89131,89132,89134,89136,89138],{"class":41,"line":42},[39,89133,52272],{"class":53},[39,89135,52276],{"class":52275},[39,89137,52279],{"class":49},[39,89139,52282],{"class":53},[39,89141,89142,89144,89146,89148,89150,89152],{"class":41,"line":92},[39,89143,2170],{"class":53},[39,89145,51610],{"class":52275},[39,89147,52291],{"class":49},[39,89149,1117],{"class":53},[39,89151,52296],{"class":237},[39,89153,52282],{"class":53},[39,89155,89156],{"class":41,"line":112},[39,89157,122],{"emptyLinePlaceholder":121},[39,89159,89160,89162,89164],{"class":41,"line":118},[39,89161,2170],{"class":53},[39,89163,52309],{"class":52275},[39,89165,52282],{"class":53},[39,89167,89168,89170,89172,89174,89176,89178],{"class":41,"line":125},[39,89169,53119],{"class":53},[39,89171,52319],{"class":52275},[39,89173,52322],{"class":49},[39,89175,1117],{"class":53},[39,89177,52327],{"class":237},[39,89179,52282],{"class":53},[39,89181,89182,89184,89186,89188,89190,89192,89194,89196,89198],{"class":41,"line":132},[39,89183,53119],{"class":53},[39,89185,52319],{"class":52275},[39,89187,15893],{"class":49},[39,89189,1117],{"class":53},[39,89191,52366],{"class":237},[39,89193,52346],{"class":49},[39,89195,1117],{"class":53},[39,89197,52373],{"class":237},[39,89199,52282],{"class":53},[39,89201,89202,89204,89206,89208,89210],{"class":41,"line":138},[39,89203,53119],{"class":53},[39,89205,52382],{"class":52275},[39,89207,52385],{"class":53},[39,89209,52382],{"class":52275},[39,89211,52282],{"class":53},[39,89213,89214,89216,89218],{"class":41,"line":169},[39,89215,52760],{"class":53},[39,89217,52309],{"class":52275},[39,89219,52282],{"class":53},[39,89221,89222],{"class":41,"line":190},[39,89223,122],{"emptyLinePlaceholder":121},[39,89225,89226,89228,89230],{"class":41,"line":202},[39,89227,2170],{"class":53},[39,89229,52775],{"class":52275},[39,89231,52282],{"class":53},[39,89233,89234],{"class":41,"line":207},[39,89235,89236],{"class":128},"  \u003C!-- 先引用这个库 -->\n",[39,89238,89239,89241,89243,89245,89247,89250,89252,89254],{"class":41,"line":212},[39,89240,53119],{"class":53},[39,89242,52788],{"class":52275},[39,89244,56214],{"class":49},[39,89246,1117],{"class":53},[39,89248,89249],{"class":237},"\"lodash.min.js\"",[39,89251,56289],{"class":53},[39,89253,52788],{"class":52275},[39,89255,52282],{"class":53},[39,89257,89258,89260,89262],{"class":41,"line":223},[39,89259,53119],{"class":53},[39,89261,52788],{"class":52275},[39,89263,52282],{"class":53},[39,89265,89266,89268,89270,89272],{"class":41,"line":228},[39,89267,12283],{"class":45},[39,89269,70946],{"class":74},[39,89271,71],{"class":45},[39,89273,16545],{"class":53},[39,89275,89276,89278,89280],{"class":41,"line":263},[39,89277,72591],{"class":53},[39,89279,88785],{"class":237},[39,89281,32441],{"class":53},[39,89283,89284,89286,89288],{"class":41,"line":287},[39,89285,72601],{"class":53},[39,89287,1911],{"class":74},[39,89289,32441],{"class":53},[39,89291,89292,89294,89296,89298,89300],{"class":41,"line":292},[39,89293,88800],{"class":53},[39,89295,88803],{"class":237},[39,89297,63],{"class":53},[39,89299,88808],{"class":237},[39,89301,88811],{"class":53},[39,89303,89304],{"class":41,"line":305},[39,89305,78847],{"class":53},[39,89307,89308,89310],{"class":41,"line":310},[39,89309,88820],{"class":53},[39,89311,88823],{"class":237},[39,89313,89314],{"class":41,"line":321},[39,89315,53373],{"class":53},[39,89317,89318],{"class":41,"line":713},[39,89319,3284],{"class":53},[39,89321,89322,89324,89326,89328,89331,89334],{"class":41,"line":718},[39,89323,12283],{"class":45},[39,89325,88838],{"class":74},[39,89327,71],{"class":45},[39,89329,89330],{"class":53}," _.",[39,89332,89333],{"class":49},"cloneDeep",[39,89335,71011],{"class":53},[39,89337,89338,89340,89342],{"class":41,"line":723},[39,89339,74728],{"class":53},[39,89341,59222],{"class":49},[39,89343,89030],{"class":53},[39,89345,89346,89349,89351],{"class":41,"line":729},[39,89347,89348],{"class":53},"    o.family.baby ",[39,89350,1117],{"class":45},[39,89352,89064],{"class":237},[39,89354,89355,89357,89359],{"class":41,"line":735},[39,89356,74728],{"class":53},[39,89358,59222],{"class":49},[39,89360,71011],{"class":53},[39,89362,89363,89365,89367],{"class":41,"line":741},[39,89364,53392],{"class":53},[39,89366,52788],{"class":52275},[39,89368,52282],{"class":53},[39,89370,89371,89373,89375],{"class":41,"line":747},[39,89372,52760],{"class":53},[39,89374,52775],{"class":52275},[39,89376,52282],{"class":53},[39,89378,89379],{"class":41,"line":753},[39,89380,122],{"emptyLinePlaceholder":121},[39,89382,89383,89385,89387],{"class":41,"line":758},[39,89384,52760],{"class":53},[39,89386,51610],{"class":52275},[39,89388,52282],{"class":53},[19,89390,89391],{},[2585,89392],{"alt":35,"src":89393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22971,89395,89397],{"id":89396},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[30,89399,89401],{"className":51608,"code":89400,"language":51610,"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",[26,89402,89403,89413,89427,89431,89439,89453,89473,89485,89493,89497,89505,89513,89523,89531,89539,89551,89555,89561,89565,89569,89574,89579,89584,89610,89618,89627,89635,89643,89651,89655],{"__ignoreMap":35},[39,89404,89405,89407,89409,89411],{"class":41,"line":42},[39,89406,52272],{"class":53},[39,89408,52276],{"class":52275},[39,89410,52279],{"class":49},[39,89412,52282],{"class":53},[39,89414,89415,89417,89419,89421,89423,89425],{"class":41,"line":92},[39,89416,2170],{"class":53},[39,89418,51610],{"class":52275},[39,89420,52291],{"class":49},[39,89422,1117],{"class":53},[39,89424,52296],{"class":237},[39,89426,52282],{"class":53},[39,89428,89429],{"class":41,"line":112},[39,89430,122],{"emptyLinePlaceholder":121},[39,89432,89433,89435,89437],{"class":41,"line":118},[39,89434,2170],{"class":53},[39,89436,52309],{"class":52275},[39,89438,52282],{"class":53},[39,89440,89441,89443,89445,89447,89449,89451],{"class":41,"line":125},[39,89442,53119],{"class":53},[39,89444,52319],{"class":52275},[39,89446,52322],{"class":49},[39,89448,1117],{"class":53},[39,89450,52327],{"class":237},[39,89452,52282],{"class":53},[39,89454,89455,89457,89459,89461,89463,89465,89467,89469,89471],{"class":41,"line":132},[39,89456,53119],{"class":53},[39,89458,52319],{"class":52275},[39,89460,15893],{"class":49},[39,89462,1117],{"class":53},[39,89464,52366],{"class":237},[39,89466,52346],{"class":49},[39,89468,1117],{"class":53},[39,89470,52373],{"class":237},[39,89472,52282],{"class":53},[39,89474,89475,89477,89479,89481,89483],{"class":41,"line":138},[39,89476,53119],{"class":53},[39,89478,52382],{"class":52275},[39,89480,52385],{"class":53},[39,89482,52382],{"class":52275},[39,89484,52282],{"class":53},[39,89486,89487,89489,89491],{"class":41,"line":169},[39,89488,52760],{"class":53},[39,89490,52309],{"class":52275},[39,89492,52282],{"class":53},[39,89494,89495],{"class":41,"line":190},[39,89496,122],{"emptyLinePlaceholder":121},[39,89498,89499,89501,89503],{"class":41,"line":202},[39,89500,2170],{"class":53},[39,89502,52775],{"class":52275},[39,89504,52282],{"class":53},[39,89506,89507,89509,89511],{"class":41,"line":207},[39,89508,53119],{"class":53},[39,89510,52788],{"class":52275},[39,89512,52282],{"class":53},[39,89514,89515,89517,89519,89521],{"class":41,"line":212},[39,89516,12283],{"class":45},[39,89518,70946],{"class":74},[39,89520,71],{"class":45},[39,89522,16545],{"class":53},[39,89524,89525,89527,89529],{"class":41,"line":223},[39,89526,72591],{"class":53},[39,89528,88785],{"class":237},[39,89530,32441],{"class":53},[39,89532,89533,89535,89537],{"class":41,"line":228},[39,89534,72601],{"class":53},[39,89536,1911],{"class":74},[39,89538,32441],{"class":53},[39,89540,89541,89543,89545,89547,89549],{"class":41,"line":263},[39,89542,88800],{"class":53},[39,89544,88803],{"class":237},[39,89546,63],{"class":53},[39,89548,88808],{"class":237},[39,89550,88811],{"class":53},[39,89552,89553],{"class":41,"line":287},[39,89554,78847],{"class":53},[39,89556,89557,89559],{"class":41,"line":292},[39,89558,88820],{"class":53},[39,89560,88823],{"class":237},[39,89562,89563],{"class":41,"line":305},[39,89564,53373],{"class":53},[39,89566,89567],{"class":41,"line":310},[39,89568,3284],{"class":53},[39,89570,89571],{"class":41,"line":321},[39,89572,89573],{"class":128},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[39,89575,89576],{"class":41,"line":713},[39,89577,89578],{"class":128},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[39,89580,89581],{"class":41,"line":718},[39,89582,89583],{"class":128},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[39,89585,89586,89588,89590,89592,89595,89597,89600,89602,89604,89606,89608],{"class":41,"line":723},[39,89587,12283],{"class":45},[39,89589,88838],{"class":74},[39,89591,71],{"class":45},[39,89593,89594],{"class":74}," JSON",[39,89596,1819],{"class":53},[39,89598,89599],{"class":49},"parse",[39,89601,54],{"class":53},[39,89603,72639],{"class":74},[39,89605,1819],{"class":53},[39,89607,72644],{"class":49},[39,89609,72647],{"class":53},[39,89611,89612,89614,89616],{"class":41,"line":729},[39,89613,74728],{"class":53},[39,89615,59222],{"class":49},[39,89617,89030],{"class":53},[39,89619,89620,89622,89624],{"class":41,"line":735},[39,89621,89348],{"class":53},[39,89623,1117],{"class":45},[39,89625,89626],{"class":237}," '123'\n",[39,89628,89629,89631,89633],{"class":41,"line":741},[39,89630,74728],{"class":53},[39,89632,59222],{"class":49},[39,89634,71011],{"class":53},[39,89636,89637,89639,89641],{"class":41,"line":747},[39,89638,53392],{"class":53},[39,89640,52788],{"class":52275},[39,89642,52282],{"class":53},[39,89644,89645,89647,89649],{"class":41,"line":753},[39,89646,52760],{"class":53},[39,89648,52775],{"class":52275},[39,89650,52282],{"class":53},[39,89652,89653],{"class":41,"line":758},[39,89654,122],{"emptyLinePlaceholder":121},[39,89656,89657,89659,89661],{"class":41,"line":763},[39,89658,52760],{"class":53},[39,89660,51610],{"class":52275},[39,89662,52282],{"class":53},[19,89664,89665],{},[2585,89666],{"alt":35,"src":89667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89669,89671],{"id":89670},"_415-异常处理","4.15 异常处理",[328,89673,89674],{},[331,89675,89676],{},"throw抛异常",[19,89678,89679],{},[2585,89680],{"alt":35,"src":89681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[328,89683,89684],{"start":92},[331,89685,89686],{},"try\u002Fcatch 捕获错误信息",[19,89688,89689],{},[2585,89690],{"alt":35,"src":89691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[30,89693,89695],{"className":51608,"code":89694,"language":51610,"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",[26,89696,89697,89707,89721,89725,89733,89747,89767,89779,89787,89791,89799,89811,89819,89828,89835,89840,89859,89868,89879,89884,89894,89899,89904,89909,89926,89930,89935,89942,89954,89958,89970,89974,89978,89983,89988,89995,90003,90011,90015],{"__ignoreMap":35},[39,89698,89699,89701,89703,89705],{"class":41,"line":42},[39,89700,52272],{"class":53},[39,89702,52276],{"class":52275},[39,89704,52279],{"class":49},[39,89706,52282],{"class":53},[39,89708,89709,89711,89713,89715,89717,89719],{"class":41,"line":92},[39,89710,2170],{"class":53},[39,89712,51610],{"class":52275},[39,89714,52291],{"class":49},[39,89716,1117],{"class":53},[39,89718,52296],{"class":237},[39,89720,52282],{"class":53},[39,89722,89723],{"class":41,"line":112},[39,89724,122],{"emptyLinePlaceholder":121},[39,89726,89727,89729,89731],{"class":41,"line":118},[39,89728,2170],{"class":53},[39,89730,52309],{"class":52275},[39,89732,52282],{"class":53},[39,89734,89735,89737,89739,89741,89743,89745],{"class":41,"line":125},[39,89736,53119],{"class":53},[39,89738,52319],{"class":52275},[39,89740,52322],{"class":49},[39,89742,1117],{"class":53},[39,89744,52327],{"class":237},[39,89746,52282],{"class":53},[39,89748,89749,89751,89753,89755,89757,89759,89761,89763,89765],{"class":41,"line":132},[39,89750,53119],{"class":53},[39,89752,52319],{"class":52275},[39,89754,15893],{"class":49},[39,89756,1117],{"class":53},[39,89758,52366],{"class":237},[39,89760,52346],{"class":49},[39,89762,1117],{"class":53},[39,89764,52373],{"class":237},[39,89766,52282],{"class":53},[39,89768,89769,89771,89773,89775,89777],{"class":41,"line":138},[39,89770,53119],{"class":53},[39,89772,52382],{"class":52275},[39,89774,52385],{"class":53},[39,89776,52382],{"class":52275},[39,89778,52282],{"class":53},[39,89780,89781,89783,89785],{"class":41,"line":169},[39,89782,52760],{"class":53},[39,89784,52309],{"class":52275},[39,89786,52282],{"class":53},[39,89788,89789],{"class":41,"line":190},[39,89790,122],{"emptyLinePlaceholder":121},[39,89792,89793,89795,89797],{"class":41,"line":202},[39,89794,2170],{"class":53},[39,89796,52775],{"class":52275},[39,89798,52282],{"class":53},[39,89800,89801,89803,89805,89807,89809],{"class":41,"line":207},[39,89802,53119],{"class":53},[39,89804,19],{"class":52275},[39,89806,54469],{"class":53},[39,89808,19],{"class":52275},[39,89810,52282],{"class":53},[39,89812,89813,89815,89817],{"class":41,"line":212},[39,89814,53119],{"class":53},[39,89816,52788],{"class":52275},[39,89818,52282],{"class":53},[39,89820,89821,89823,89826],{"class":41,"line":223},[39,89822,71059],{"class":45},[39,89824,89825],{"class":49}," fn",[39,89827,220],{"class":53},[39,89829,89830,89833],{"class":41,"line":228},[39,89831,89832],{"class":45},"      try",[39,89834,16545],{"class":53},[39,89836,89837],{"class":41,"line":263},[39,89838,89839],{"class":128},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[39,89841,89842,89844,89846,89848,89850,89852,89854,89857],{"class":41,"line":287},[39,89843,62245],{"class":45},[39,89845,7899],{"class":74},[39,89847,71],{"class":45},[39,89849,55371],{"class":53},[39,89851,55374],{"class":49},[39,89853,54],{"class":53},[39,89855,89856],{"class":237},"'.p'",[39,89858,574],{"class":53},[39,89860,89861,89864,89866],{"class":41,"line":292},[39,89862,89863],{"class":53},"        p.style.color ",[39,89865,1117],{"class":45},[39,89867,68026],{"class":237},[39,89869,89870,89873,89876],{"class":41,"line":305},[39,89871,89872],{"class":53},"      } ",[39,89874,89875],{"class":45},"catch",[39,89877,89878],{"class":53}," (err) {\n",[39,89880,89881],{"class":41,"line":310},[39,89882,89883],{"class":128},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[39,89885,89886,89889,89891],{"class":41,"line":321},[39,89887,89888],{"class":53},"        console.",[39,89890,59222],{"class":49},[39,89892,89893],{"class":53},"(err.message)\n",[39,89895,89896],{"class":41,"line":713},[39,89897,89898],{"class":128},"        \u002F\u002F 想要中断程序，需要加return\n",[39,89900,89901],{"class":41,"line":718},[39,89902,89903],{"class":128},"        \u002F\u002F return\n",[39,89905,89906],{"class":41,"line":723},[39,89907,89908],{"class":128},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[39,89910,89911,89914,89916,89919,89921,89924],{"class":41,"line":729},[39,89912,89913],{"class":45},"        throw",[39,89915,12638],{"class":45},[39,89917,89918],{"class":49}," Error",[39,89920,54],{"class":53},[39,89922,89923],{"class":237},"'你看看，选择器错误了吧'",[39,89925,574],{"class":53},[39,89927,89928],{"class":41,"line":735},[39,89929,53373],{"class":53},[39,89931,89932],{"class":41,"line":741},[39,89933,89934],{"class":128},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[39,89936,89937,89940],{"class":41,"line":747},[39,89938,89939],{"class":45},"      finally",[39,89941,16545],{"class":53},[39,89943,89944,89947,89949,89952],{"class":41,"line":753},[39,89945,89946],{"class":49},"        alert",[39,89948,54],{"class":53},[39,89950,89951],{"class":237},"'弹出对话框'",[39,89953,574],{"class":53},[39,89955,89956],{"class":41,"line":758},[39,89957,53373],{"class":53},[39,89959,89960,89962,89964,89966,89968],{"class":41,"line":763},[39,89961,59219],{"class":53},[39,89963,59222],{"class":49},[39,89965,54],{"class":53},[39,89967,1734],{"class":74},[39,89969,574],{"class":53},[39,89971,89972],{"class":41,"line":772},[39,89973,122],{"emptyLinePlaceholder":121},[39,89975,89976],{"class":41,"line":777},[39,89977,3284],{"class":53},[39,89979,89980],{"class":41,"line":785},[39,89981,89982],{"class":128},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[39,89984,89985],{"class":41,"line":796},[39,89986,89987],{"class":128},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[39,89989,89990,89993],{"class":41,"line":808},[39,89991,89992],{"class":49},"    fn",[39,89994,537],{"class":53},[39,89996,89997,89999,90001],{"class":41,"line":823},[39,89998,53392],{"class":53},[39,90000,52788],{"class":52275},[39,90002,52282],{"class":53},[39,90004,90005,90007,90009],{"class":41,"line":839},[39,90006,52760],{"class":53},[39,90008,52775],{"class":52275},[39,90010,52282],{"class":53},[39,90012,90013],{"class":41,"line":845},[39,90014,122],{"emptyLinePlaceholder":121},[39,90016,90017,90019,90021],{"class":41,"line":856},[39,90018,52760],{"class":53},[39,90020,51610],{"class":52275},[39,90022,52282],{"class":53},[19,90024,90025],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[328,90027,90028],{"start":112},[331,90029,90030],{},"debugger",[19,90032,90033],{},[2585,90034],{"alt":35,"src":90035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90037,90038],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90040,90042],{"id":90041},"_416-处理this","4.16 处理this",[476,90044,90046],{"id":90045},"_4161-this的指向","4.16.1 this的指向",[328,90048,90049],{},[331,90050,90051],{},"普通函数的this",[19,90053,90054],{},[2585,90055],{"alt":35,"src":90056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[328,90058,90059],{"start":92},[331,90060,90061],{},"箭头函数的this",[19,90063,90064],{},[2585,90065],{"alt":35,"src":90066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90068,90069],{},[2585,90070],{"alt":35,"src":90071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90073,90074],{},[2585,90075],{"alt":35,"src":90076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[476,90078,90080],{"id":90079},"_4162-this的改变","4.16.2 this的改变",[19,90082,90083],{},"call() apply() bind()",[328,90085,90086],{},[331,90087,90088],{},"call()",[19,90090,90091],{},[2585,90092],{"alt":35,"src":90093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90095,90096],{},"两个作用：①调用函数；②改变this指向",[30,90098,90100],{"className":54042,"code":90099,"language":54044,"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",[26,90101,90102,90110,90118,90122,90127,90131,90136,90141,90146,90150,90155,90163],{"__ignoreMap":35},[39,90103,90104,90106,90108],{"class":41,"line":42},[39,90105,2170],{"class":53},[39,90107,52775],{"class":52275},[39,90109,52282],{"class":53},[39,90111,90112,90114,90116],{"class":41,"line":92},[39,90113,53119],{"class":53},[39,90115,52788],{"class":52275},[39,90117,52282],{"class":53},[39,90119,90120],{"class":41,"line":112},[39,90121,72498],{"class":53},[39,90123,90124],{"class":41,"line":118},[39,90125,90126],{"class":53},"      uname: 'pink'\n",[39,90128,90129],{"class":41,"line":125},[39,90130,3284],{"class":53},[39,90132,90133],{"class":41,"line":132},[39,90134,90135],{"class":53},"    function fn(x, y) {\n",[39,90137,90138],{"class":41,"line":138},[39,90139,90140],{"class":53},"      console.log(this)  \u002F\u002Fwindow\n",[39,90142,90143],{"class":41,"line":169},[39,90144,90145],{"class":53},"      console.log(x + y)\n",[39,90147,90148],{"class":41,"line":190},[39,90149,3284],{"class":53},[39,90151,90152],{"class":41,"line":202},[39,90153,90154],{"class":53},"    fn.call(obj, 1, 2)\n",[39,90156,90157,90159,90161],{"class":41,"line":207},[39,90158,53392],{"class":53},[39,90160,52788],{"class":52275},[39,90162,52282],{"class":53},[39,90164,90165,90167,90169],{"class":41,"line":212},[39,90166,52760],{"class":53},[39,90168,52775],{"class":52275},[39,90170,52282],{"class":53},[19,90172,90173],{},[2585,90174],{"alt":35,"src":90175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[328,90177,90178],{"start":92},[331,90179,90180],{},"apply()",[19,90182,90183],{},[2585,90184],{"alt":35,"src":90185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90187,90096],{},[19,90189,90190],{},"call传递的是普通参数，而apply必须传递的是数组",[30,90192,90194],{"className":51608,"code":90193,"language":51610,"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",[26,90195,90196,90206,90220,90224,90232,90246,90266,90278,90286,90290,90298,90306,90316,90323,90327,90332,90348,90360,90374,90378,90383,90402,90407,90411,90416,90421,90429,90434,90456,90461,90477,90493,90505,90509,90514,90533,90541,90549,90553],{"__ignoreMap":35},[39,90197,90198,90200,90202,90204],{"class":41,"line":42},[39,90199,52272],{"class":53},[39,90201,52276],{"class":52275},[39,90203,52279],{"class":49},[39,90205,52282],{"class":53},[39,90207,90208,90210,90212,90214,90216,90218],{"class":41,"line":92},[39,90209,2170],{"class":53},[39,90211,51610],{"class":52275},[39,90213,52291],{"class":49},[39,90215,1117],{"class":53},[39,90217,52296],{"class":237},[39,90219,52282],{"class":53},[39,90221,90222],{"class":41,"line":112},[39,90223,122],{"emptyLinePlaceholder":121},[39,90225,90226,90228,90230],{"class":41,"line":118},[39,90227,2170],{"class":53},[39,90229,52309],{"class":52275},[39,90231,52282],{"class":53},[39,90233,90234,90236,90238,90240,90242,90244],{"class":41,"line":125},[39,90235,53119],{"class":53},[39,90237,52319],{"class":52275},[39,90239,52322],{"class":49},[39,90241,1117],{"class":53},[39,90243,52327],{"class":237},[39,90245,52282],{"class":53},[39,90247,90248,90250,90252,90254,90256,90258,90260,90262,90264],{"class":41,"line":132},[39,90249,53119],{"class":53},[39,90251,52319],{"class":52275},[39,90253,15893],{"class":49},[39,90255,1117],{"class":53},[39,90257,52366],{"class":237},[39,90259,52346],{"class":49},[39,90261,1117],{"class":53},[39,90263,52373],{"class":237},[39,90265,52282],{"class":53},[39,90267,90268,90270,90272,90274,90276],{"class":41,"line":138},[39,90269,53119],{"class":53},[39,90271,52382],{"class":52275},[39,90273,52385],{"class":53},[39,90275,52382],{"class":52275},[39,90277,52282],{"class":53},[39,90279,90280,90282,90284],{"class":41,"line":169},[39,90281,52760],{"class":53},[39,90283,52309],{"class":52275},[39,90285,52282],{"class":53},[39,90287,90288],{"class":41,"line":190},[39,90289,122],{"emptyLinePlaceholder":121},[39,90291,90292,90294,90296],{"class":41,"line":202},[39,90293,2170],{"class":53},[39,90295,52775],{"class":52275},[39,90297,52282],{"class":53},[39,90299,90300,90302,90304],{"class":41,"line":207},[39,90301,53119],{"class":53},[39,90303,52788],{"class":52275},[39,90305,52282],{"class":53},[39,90307,90308,90310,90312,90314],{"class":41,"line":212},[39,90309,12283],{"class":45},[39,90311,70946],{"class":74},[39,90313,71],{"class":45},[39,90315,16545],{"class":53},[39,90317,90318,90320],{"class":41,"line":223},[39,90319,72601],{"class":53},[39,90321,90322],{"class":74},"18\n",[39,90324,90325],{"class":41,"line":228},[39,90326,3284],{"class":53},[39,90328,90329],{"class":41,"line":263},[39,90330,90331],{"class":128},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[39,90333,90334,90336,90338,90340,90342,90344,90346],{"class":41,"line":287},[39,90335,71059],{"class":45},[39,90337,89825],{"class":49},[39,90339,54],{"class":53},[39,90341,2080],{"class":59},[39,90343,63],{"class":53},[39,90345,2105],{"class":59},[39,90347,89],{"class":53},[39,90349,90350,90352,90354,90356,90358],{"class":41,"line":292},[39,90351,59219],{"class":53},[39,90353,59222],{"class":49},[39,90355,54],{"class":53},[39,90357,87968],{"class":74},[39,90359,574],{"class":53},[39,90361,90362,90364,90366,90369,90371],{"class":41,"line":305},[39,90363,59219],{"class":53},[39,90365,59222],{"class":49},[39,90367,90368],{"class":53},"(x ",[39,90370,101],{"class":45},[39,90372,90373],{"class":53}," y)\n",[39,90375,90376],{"class":41,"line":310},[39,90377,3284],{"class":53},[39,90379,90380],{"class":41,"line":321},[39,90381,90382],{"class":128},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[39,90384,90385,90388,90391,90394,90396,90398,90400],{"class":41,"line":713},[39,90386,90387],{"class":53},"    fn.",[39,90389,90390],{"class":49},"apply",[39,90392,90393],{"class":53},"(obj, [",[39,90395,1483],{"class":74},[39,90397,63],{"class":53},[39,90399,1345],{"class":74},[39,90401,5738],{"class":53},[39,90403,90404],{"class":41,"line":718},[39,90405,90406],{"class":128},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[39,90408,90409],{"class":41,"line":723},[39,90410,122],{"emptyLinePlaceholder":121},[39,90412,90413],{"class":41,"line":729},[39,90414,90415],{"class":128},"    \u002F\u002F 使用场景：求数组最大值\n",[39,90417,90418],{"class":41,"line":735},[39,90419,90420],{"class":128},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[39,90422,90423,90426],{"class":41,"line":741},[39,90424,90425],{"class":128},"    \u002F\u002F console.log(max)",[39,90427,90428],{"class":128},"   \u002F\u002F3\n",[39,90430,90431],{"class":41,"line":747},[39,90432,90433],{"class":128},"    \u002F\u002F 指向空或者Math都是可以的\n",[39,90435,90436,90438,90440,90442,90444,90446,90448,90450,90452,90454],{"class":41,"line":753},[39,90437,12283],{"class":45},[39,90439,58670],{"class":74},[39,90441,71],{"class":45},[39,90443,53201],{"class":53},[39,90445,278],{"class":74},[39,90447,63],{"class":53},[39,90449,1765],{"class":74},[39,90451,63],{"class":53},[39,90453,1796],{"class":74},[39,90455,34221],{"class":53},[39,90457,90458],{"class":41,"line":758},[39,90459,90460],{"class":128},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[39,90462,90463,90465,90467,90469,90472,90474],{"class":41,"line":763},[39,90464,12283],{"class":45},[39,90466,7028],{"class":74},[39,90468,71],{"class":45},[39,90470,90471],{"class":53}," Math.max.",[39,90473,90390],{"class":49},[39,90475,90476],{"class":53},"(Math, arr)\n",[39,90478,90479,90481,90484,90486,90489,90491],{"class":41,"line":772},[39,90480,12283],{"class":45},[39,90482,90483],{"class":74}," min",[39,90485,71],{"class":45},[39,90487,90488],{"class":53}," Math.min.",[39,90490,90390],{"class":49},[39,90492,90476],{"class":53},[39,90494,90495,90497,90499,90502],{"class":41,"line":777},[39,90496,74728],{"class":53},[39,90498,59222],{"class":49},[39,90500,90501],{"class":53},"(max, min)     ",[39,90503,90504],{"class":128},"\u002F\u002F100,4\n",[39,90506,90507],{"class":41,"line":785},[39,90508,122],{"emptyLinePlaceholder":121},[39,90510,90511],{"class":41,"line":796},[39,90512,90513],{"class":128},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[39,90515,90516,90518,90520,90523,90525,90527,90530],{"class":41,"line":808},[39,90517,74728],{"class":53},[39,90519,59222],{"class":49},[39,90521,90522],{"class":53},"(Max.",[39,90524,7091],{"class":49},[39,90526,54],{"class":53},[39,90528,90529],{"class":45},"...",[39,90531,90532],{"class":53},"arr))\n",[39,90534,90535,90537,90539],{"class":41,"line":823},[39,90536,53392],{"class":53},[39,90538,52788],{"class":52275},[39,90540,52282],{"class":53},[39,90542,90543,90545,90547],{"class":41,"line":839},[39,90544,52760],{"class":53},[39,90546,52775],{"class":52275},[39,90548,52282],{"class":53},[39,90550,90551],{"class":41,"line":845},[39,90552,122],{"emptyLinePlaceholder":121},[39,90554,90555,90557,90559],{"class":41,"line":856},[39,90556,52760],{"class":53},[39,90558,51610],{"class":52275},[39,90560,52282],{"class":53},[19,90562,90563],{},[2585,90564],{"alt":35,"src":90565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[328,90567,90568],{"start":112},[331,90569,90570],{},"bind()",[19,90572,90573],{},[2585,90574],{"alt":35,"src":90575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90577,90578],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90580,90581],{},"bind的语法跟call很相似",[30,90583,90585],{"className":54042,"code":90584,"language":54044,"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",[26,90586,90587,90595,90603,90607,90612,90616,90620,90625,90629,90634,90639,90644,90649,90654,90659,90664,90668,90676],{"__ignoreMap":35},[39,90588,90589,90591,90593],{"class":41,"line":42},[39,90590,2170],{"class":53},[39,90592,52775],{"class":52275},[39,90594,52282],{"class":53},[39,90596,90597,90599,90601],{"class":41,"line":92},[39,90598,53119],{"class":53},[39,90600,52788],{"class":52275},[39,90602,52282],{"class":53},[39,90604,90605],{"class":41,"line":112},[39,90606,72498],{"class":53},[39,90608,90609],{"class":41,"line":118},[39,90610,90611],{"class":53},"      age: 18\n",[39,90613,90614],{"class":41,"line":125},[39,90615,3284],{"class":53},[39,90617,90618],{"class":41,"line":132},[39,90619,78118],{"class":53},[39,90621,90622],{"class":41,"line":138},[39,90623,90624],{"class":53},"      console.log(this)\n",[39,90626,90627],{"class":41,"line":169},[39,90628,3284],{"class":53},[39,90630,90631],{"class":41,"line":190},[39,90632,90633],{"class":53},"    \u002F\u002F 1.bind 不会调用函数\n",[39,90635,90636],{"class":41,"line":202},[39,90637,90638],{"class":53},"    \u002F\u002F 2.bind能改变this的指向\n",[39,90640,90641],{"class":41,"line":207},[39,90642,90643],{"class":53},"    fn.bind()\n",[39,90645,90646],{"class":41,"line":212},[39,90647,90648],{"class":53},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[39,90650,90651],{"class":41,"line":223},[39,90652,90653],{"class":53},"    const fun = fn.bind(obj)\n",[39,90655,90656],{"class":41,"line":228},[39,90657,90658],{"class":53},"    \u002F\u002F console.log(fun)\n",[39,90660,90661],{"class":41,"line":263},[39,90662,90663],{"class":53},"    \u002F\u002F 调用,查看this的指向\n",[39,90665,90666],{"class":41,"line":287},[39,90667,53626],{"class":53},[39,90669,90670,90672,90674],{"class":41,"line":292},[39,90671,53392],{"class":53},[39,90673,52788],{"class":52275},[39,90675,52282],{"class":53},[39,90677,90678,90680,90682],{"class":41,"line":305},[39,90679,52760],{"class":53},[39,90681,52775],{"class":52275},[39,90683,52282],{"class":53},[19,90685,90686],{},[2585,90687],{"alt":35,"src":90688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[328,90690,90691],{"start":118},[331,90692,90693],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[30,90695,90697],{"className":54042,"code":90696,"language":54044,"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",[26,90698,90699,90707,90720,90728,90733,90737,90742,90747,90752,90757,90762,90767,90772,90777,90781,90789],{"__ignoreMap":35},[39,90700,90701,90703,90705],{"class":41,"line":42},[39,90702,2170],{"class":53},[39,90704,52775],{"class":52275},[39,90706,52282],{"class":53},[39,90708,90709,90711,90713,90716,90718],{"class":41,"line":92},[39,90710,53119],{"class":53},[39,90712,54862],{"class":52275},[39,90714,90715],{"class":53},">禁用\u003C\u002F",[39,90717,54862],{"class":52275},[39,90719,52282],{"class":53},[39,90721,90722,90724,90726],{"class":41,"line":112},[39,90723,53119],{"class":53},[39,90725,52788],{"class":52275},[39,90727,52282],{"class":53},[39,90729,90730],{"class":41,"line":118},[39,90731,90732],{"class":53},"    const btn = document.querySelector('button')\n",[39,90734,90735],{"class":41,"line":125},[39,90736,59991],{"class":53},[39,90738,90739],{"class":41,"line":132},[39,90740,90741],{"class":53},"      this.disabled = true\n",[39,90743,90744],{"class":41,"line":138},[39,90745,90746],{"class":53},"      \u002F\u002F 定时器是window进行调用的\n",[39,90748,90749],{"class":41,"line":169},[39,90750,90751],{"class":53},"      setTimeout(function () {\n",[39,90753,90754],{"class":41,"line":190},[39,90755,90756],{"class":53},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[39,90758,90759],{"class":41,"line":202},[39,90760,90761],{"class":53},"        this.disabled = false\n",[39,90763,90764],{"class":41,"line":207},[39,90765,90766],{"class":53},"      }.bind(this), 2000)\n",[39,90768,90769],{"class":41,"line":212},[39,90770,90771],{"class":53},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[39,90773,90774],{"class":41,"line":223},[39,90775,90776],{"class":53},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[39,90778,90779],{"class":41,"line":228},[39,90780,34436],{"class":53},[39,90782,90783,90785,90787],{"class":41,"line":263},[39,90784,53392],{"class":53},[39,90786,52788],{"class":52275},[39,90788,52282],{"class":53},[39,90790,90791,90793,90795],{"class":41,"line":287},[39,90792,52760],{"class":53},[39,90794,52775],{"class":52275},[39,90796,52282],{"class":53},[328,90798,90799],{"start":125},[331,90800,22926],{},[19,90802,90803],{},[2585,90804],{"alt":35,"src":90805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90807,90809],{"id":90808},"_417-性能优化","4.17 性能优化",[476,90811,90813],{"id":90812},"_4171-防抖","4.17.1 防抖",[19,90815,90816],{},[2585,90817],{"alt":35,"src":90818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90820,90821],{},[350,90822,90823],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90825,90826],{},"防抖实现方式：",[489,90828,90829],{},[331,90830,90831],{},"lodash 提供了防抖处理",[19,90833,90834],{},"_.debounce(func,[wait=0],[options={}])",[19,90836,90837],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[30,90839,90841],{"className":51608,"code":90840,"language":51610,"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",[26,90842,90843,90853,90867,90871,90879,90893,90913,90925,90933,90939,90949,90961,90973,90984,90996,91006,91016,91029,91033,91041,91049,91053,91061,91079,91097,91105,91124,91134,91143,91154,91159,91163,91168,91173,91178,91203,91211,91219,91223],{"__ignoreMap":35},[39,90844,90845,90847,90849,90851],{"class":41,"line":42},[39,90846,52272],{"class":53},[39,90848,52276],{"class":52275},[39,90850,52279],{"class":49},[39,90852,52282],{"class":53},[39,90854,90855,90857,90859,90861,90863,90865],{"class":41,"line":92},[39,90856,2170],{"class":53},[39,90858,51610],{"class":52275},[39,90860,52291],{"class":49},[39,90862,1117],{"class":53},[39,90864,52296],{"class":237},[39,90866,52282],{"class":53},[39,90868,90869],{"class":41,"line":112},[39,90870,122],{"emptyLinePlaceholder":121},[39,90872,90873,90875,90877],{"class":41,"line":118},[39,90874,2170],{"class":53},[39,90876,52309],{"class":52275},[39,90878,52282],{"class":53},[39,90880,90881,90883,90885,90887,90889,90891],{"class":41,"line":125},[39,90882,53119],{"class":53},[39,90884,52319],{"class":52275},[39,90886,52322],{"class":49},[39,90888,1117],{"class":53},[39,90890,52327],{"class":237},[39,90892,52282],{"class":53},[39,90894,90895,90897,90899,90901,90903,90905,90907,90909,90911],{"class":41,"line":132},[39,90896,53119],{"class":53},[39,90898,52319],{"class":52275},[39,90900,15893],{"class":49},[39,90902,1117],{"class":53},[39,90904,52366],{"class":237},[39,90906,52346],{"class":49},[39,90908,1117],{"class":53},[39,90910,52373],{"class":237},[39,90912,52282],{"class":53},[39,90914,90915,90917,90919,90921,90923],{"class":41,"line":138},[39,90916,53119],{"class":53},[39,90918,52382],{"class":52275},[39,90920,52385],{"class":53},[39,90922,52382],{"class":52275},[39,90924,52282],{"class":53},[39,90926,90927,90929,90931],{"class":41,"line":169},[39,90928,53119],{"class":53},[39,90930,1192],{"class":52275},[39,90932,52282],{"class":53},[39,90934,90935,90937],{"class":41,"line":190},[39,90936,55727],{"class":49},[39,90938,16545],{"class":53},[39,90940,90941,90943,90945,90947],{"class":41,"line":202},[39,90942,73571],{"class":74},[39,90944,52412],{"class":53},[39,90946,61480],{"class":74},[39,90948,318],{"class":53},[39,90950,90951,90953,90955,90957,90959],{"class":41,"line":207},[39,90952,55746],{"class":74},[39,90954,52412],{"class":53},[39,90956,2832],{"class":74},[39,90958,52467],{"class":45},[39,90960,318],{"class":53},[39,90962,90963,90965,90967,90969,90971],{"class":41,"line":212},[39,90964,55760],{"class":74},[39,90966,52412],{"class":53},[39,90968,2832],{"class":74},[39,90970,52467],{"class":45},[39,90972,318],{"class":53},[39,90974,90975,90977,90979,90982],{"class":41,"line":223},[39,90976,55859],{"class":74},[39,90978,52412],{"class":53},[39,90980,90981],{"class":74},"gray",[39,90983,318],{"class":53},[39,90985,90986,90988,90990,90992,90994],{"class":41,"line":228},[39,90987,55897],{"class":74},[39,90989,52412],{"class":53},[39,90991,2085],{"class":74},[39,90993,52467],{"class":45},[39,90995,318],{"class":53},[39,90997,90998,91000,91002,91004],{"class":41,"line":263},[39,90999,58391],{"class":74},[39,91001,52412],{"class":53},[39,91003,61817],{"class":74},[39,91005,318],{"class":53},[39,91007,91008,91010,91012,91014],{"class":41,"line":287},[39,91009,58261],{"class":74},[39,91011,52412],{"class":53},[39,91013,52567],{"class":74},[39,91015,318],{"class":53},[39,91017,91018,91021,91023,91025,91027],{"class":41,"line":292},[39,91019,91020],{"class":74},"      padding-top",[39,91022,52412],{"class":53},[39,91024,1583],{"class":74},[39,91026,52467],{"class":45},[39,91028,318],{"class":53},[39,91030,91031],{"class":41,"line":305},[39,91032,3284],{"class":53},[39,91034,91035,91037,91039],{"class":41,"line":310},[39,91036,53392],{"class":53},[39,91038,1192],{"class":52275},[39,91040,52282],{"class":53},[39,91042,91043,91045,91047],{"class":41,"line":321},[39,91044,52760],{"class":53},[39,91046,52309],{"class":52275},[39,91048,52282],{"class":53},[39,91050,91051],{"class":41,"line":713},[39,91052,122],{"emptyLinePlaceholder":121},[39,91054,91055,91057,91059],{"class":41,"line":718},[39,91056,2170],{"class":53},[39,91058,52775],{"class":52275},[39,91060,52282],{"class":53},[39,91062,91063,91065,91067,91069,91071,91073,91075,91077],{"class":41,"line":723},[39,91064,53119],{"class":53},[39,91066,52586],{"class":52275},[39,91068,54461],{"class":49},[39,91070,1117],{"class":53},[39,91072,54466],{"class":237},[39,91074,56289],{"class":53},[39,91076,52586],{"class":52275},[39,91078,52282],{"class":53},[39,91080,91081,91083,91085,91087,91089,91091,91093,91095],{"class":41,"line":729},[39,91082,53119],{"class":53},[39,91084,52788],{"class":52275},[39,91086,56214],{"class":49},[39,91088,1117],{"class":53},[39,91090,89249],{"class":237},[39,91092,56289],{"class":53},[39,91094,52788],{"class":52275},[39,91096,52282],{"class":53},[39,91098,91099,91101,91103],{"class":41,"line":735},[39,91100,53119],{"class":53},[39,91102,52788],{"class":52275},[39,91104,52282],{"class":53},[39,91106,91107,91109,91111,91113,91115,91117,91119,91122],{"class":41,"line":741},[39,91108,12283],{"class":45},[39,91110,87908],{"class":74},[39,91112,71],{"class":45},[39,91114,55371],{"class":53},[39,91116,55374],{"class":49},[39,91118,54],{"class":53},[39,91120,91121],{"class":237},"'.box'",[39,91123,574],{"class":53},[39,91125,91126,91128,91130,91132],{"class":41,"line":747},[39,91127,53194],{"class":45},[39,91129,10506],{"class":53},[39,91131,1117],{"class":45},[39,91133,48308],{"class":74},[39,91135,91136,91138,91141],{"class":41,"line":753},[39,91137,71059],{"class":45},[39,91139,91140],{"class":49}," mouseMove",[39,91142,220],{"class":53},[39,91144,91145,91148,91150,91152],{"class":41,"line":758},[39,91146,91147],{"class":53},"      box.innerHTML ",[39,91149,1117],{"class":45},[39,91151,4115],{"class":53},[39,91153,3788],{"class":45},[39,91155,91156],{"class":41,"line":763},[39,91157,91158],{"class":128},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[39,91160,91161],{"class":41,"line":772},[39,91162,3284],{"class":53},[39,91164,91165],{"class":41,"line":777},[39,91166,91167],{"class":128},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[39,91169,91170],{"class":41,"line":785},[39,91171,91172],{"class":128},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[39,91174,91175],{"class":41,"line":796},[39,91176,91177],{"class":128},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[39,91179,91180,91183,91185,91187,91190,91193,91196,91199,91201],{"class":41,"line":808},[39,91181,91182],{"class":53},"    box.",[39,91184,58788],{"class":49},[39,91186,54],{"class":53},[39,91188,91189],{"class":237},"'mousemove'",[39,91191,91192],{"class":53},", _.",[39,91194,91195],{"class":49},"debounce",[39,91197,91198],{"class":53},"(mouseMove, ",[39,91200,66049],{"class":74},[39,91202,31472],{"class":53},[39,91204,91205,91207,91209],{"class":41,"line":823},[39,91206,53392],{"class":53},[39,91208,52788],{"class":52275},[39,91210,52282],{"class":53},[39,91212,91213,91215,91217],{"class":41,"line":839},[39,91214,52760],{"class":53},[39,91216,52775],{"class":52275},[39,91218,52282],{"class":53},[39,91220,91221],{"class":41,"line":845},[39,91222,122],{"emptyLinePlaceholder":121},[39,91224,91225,91227,91229],{"class":41,"line":856},[39,91226,52760],{"class":53},[39,91228,51610],{"class":52275},[39,91230,52282],{"class":53},[489,91232,91233],{},[331,91234,91235],{},"手写一个防抖函数来处理",[19,91237,91238],{},"防抖的核心就是利用定时器来实现的：",[19,91240,91241],{},"①声明一个定时器变量",[19,91243,91244],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,91246,91247],{},"③如果没有定时器则开启定时器，记得存到变量里面",[30,91249,91251],{"className":51608,"code":91250,"language":51610,"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",[26,91252,91253,91263,91277,91281,91289,91303,91323,91335,91343,91349,91359,91371,91383,91393,91405,91415,91425,91437,91441,91449,91457,91461,91469,91487,91505,91513,91531,91541,91549,91559,91563,91567,91571,91576,91581,91586,91591,91596,91601,91619,91626,91631,91639,91644,91657,91673,91683,91688,91692,91696,91716,91720,91725,91730,91735,91740,91748,91756,91760],{"__ignoreMap":35},[39,91254,91255,91257,91259,91261],{"class":41,"line":42},[39,91256,52272],{"class":53},[39,91258,52276],{"class":52275},[39,91260,52279],{"class":49},[39,91262,52282],{"class":53},[39,91264,91265,91267,91269,91271,91273,91275],{"class":41,"line":92},[39,91266,2170],{"class":53},[39,91268,51610],{"class":52275},[39,91270,52291],{"class":49},[39,91272,1117],{"class":53},[39,91274,52296],{"class":237},[39,91276,52282],{"class":53},[39,91278,91279],{"class":41,"line":112},[39,91280,122],{"emptyLinePlaceholder":121},[39,91282,91283,91285,91287],{"class":41,"line":118},[39,91284,2170],{"class":53},[39,91286,52309],{"class":52275},[39,91288,52282],{"class":53},[39,91290,91291,91293,91295,91297,91299,91301],{"class":41,"line":125},[39,91292,53119],{"class":53},[39,91294,52319],{"class":52275},[39,91296,52322],{"class":49},[39,91298,1117],{"class":53},[39,91300,52327],{"class":237},[39,91302,52282],{"class":53},[39,91304,91305,91307,91309,91311,91313,91315,91317,91319,91321],{"class":41,"line":132},[39,91306,53119],{"class":53},[39,91308,52319],{"class":52275},[39,91310,15893],{"class":49},[39,91312,1117],{"class":53},[39,91314,52366],{"class":237},[39,91316,52346],{"class":49},[39,91318,1117],{"class":53},[39,91320,52373],{"class":237},[39,91322,52282],{"class":53},[39,91324,91325,91327,91329,91331,91333],{"class":41,"line":138},[39,91326,53119],{"class":53},[39,91328,52382],{"class":52275},[39,91330,52385],{"class":53},[39,91332,52382],{"class":52275},[39,91334,52282],{"class":53},[39,91336,91337,91339,91341],{"class":41,"line":169},[39,91338,53119],{"class":53},[39,91340,1192],{"class":52275},[39,91342,52282],{"class":53},[39,91344,91345,91347],{"class":41,"line":190},[39,91346,55727],{"class":49},[39,91348,16545],{"class":53},[39,91350,91351,91353,91355,91357],{"class":41,"line":202},[39,91352,73571],{"class":74},[39,91354,52412],{"class":53},[39,91356,61480],{"class":74},[39,91358,318],{"class":53},[39,91360,91361,91363,91365,91367,91369],{"class":41,"line":207},[39,91362,55746],{"class":74},[39,91364,52412],{"class":53},[39,91366,2832],{"class":74},[39,91368,52467],{"class":45},[39,91370,318],{"class":53},[39,91372,91373,91375,91377,91379,91381],{"class":41,"line":212},[39,91374,55760],{"class":74},[39,91376,52412],{"class":53},[39,91378,2832],{"class":74},[39,91380,52467],{"class":45},[39,91382,318],{"class":53},[39,91384,91385,91387,91389,91391],{"class":41,"line":223},[39,91386,55859],{"class":74},[39,91388,52412],{"class":53},[39,91390,90981],{"class":74},[39,91392,318],{"class":53},[39,91394,91395,91397,91399,91401,91403],{"class":41,"line":228},[39,91396,55897],{"class":74},[39,91398,52412],{"class":53},[39,91400,2085],{"class":74},[39,91402,52467],{"class":45},[39,91404,318],{"class":53},[39,91406,91407,91409,91411,91413],{"class":41,"line":263},[39,91408,58391],{"class":74},[39,91410,52412],{"class":53},[39,91412,61817],{"class":74},[39,91414,318],{"class":53},[39,91416,91417,91419,91421,91423],{"class":41,"line":287},[39,91418,58261],{"class":74},[39,91420,52412],{"class":53},[39,91422,52567],{"class":74},[39,91424,318],{"class":53},[39,91426,91427,91429,91431,91433,91435],{"class":41,"line":292},[39,91428,91020],{"class":74},[39,91430,52412],{"class":53},[39,91432,1583],{"class":74},[39,91434,52467],{"class":45},[39,91436,318],{"class":53},[39,91438,91439],{"class":41,"line":305},[39,91440,3284],{"class":53},[39,91442,91443,91445,91447],{"class":41,"line":310},[39,91444,53392],{"class":53},[39,91446,1192],{"class":52275},[39,91448,52282],{"class":53},[39,91450,91451,91453,91455],{"class":41,"line":321},[39,91452,52760],{"class":53},[39,91454,52309],{"class":52275},[39,91456,52282],{"class":53},[39,91458,91459],{"class":41,"line":713},[39,91460,122],{"emptyLinePlaceholder":121},[39,91462,91463,91465,91467],{"class":41,"line":718},[39,91464,2170],{"class":53},[39,91466,52775],{"class":52275},[39,91468,52282],{"class":53},[39,91470,91471,91473,91475,91477,91479,91481,91483,91485],{"class":41,"line":723},[39,91472,53119],{"class":53},[39,91474,52586],{"class":52275},[39,91476,54461],{"class":49},[39,91478,1117],{"class":53},[39,91480,54466],{"class":237},[39,91482,56289],{"class":53},[39,91484,52586],{"class":52275},[39,91486,52282],{"class":53},[39,91488,91489,91491,91493,91495,91497,91499,91501,91503],{"class":41,"line":729},[39,91490,53119],{"class":53},[39,91492,52788],{"class":52275},[39,91494,56214],{"class":49},[39,91496,1117],{"class":53},[39,91498,89249],{"class":237},[39,91500,56289],{"class":53},[39,91502,52788],{"class":52275},[39,91504,52282],{"class":53},[39,91506,91507,91509,91511],{"class":41,"line":735},[39,91508,53119],{"class":53},[39,91510,52788],{"class":52275},[39,91512,52282],{"class":53},[39,91514,91515,91517,91519,91521,91523,91525,91527,91529],{"class":41,"line":741},[39,91516,12283],{"class":45},[39,91518,87908],{"class":74},[39,91520,71],{"class":45},[39,91522,55371],{"class":53},[39,91524,55374],{"class":49},[39,91526,54],{"class":53},[39,91528,91121],{"class":237},[39,91530,574],{"class":53},[39,91532,91533,91535,91537,91539],{"class":41,"line":747},[39,91534,53194],{"class":45},[39,91536,10506],{"class":53},[39,91538,1117],{"class":45},[39,91540,48308],{"class":74},[39,91542,91543,91545,91547],{"class":41,"line":753},[39,91544,71059],{"class":45},[39,91546,91140],{"class":49},[39,91548,220],{"class":53},[39,91550,91551,91553,91555,91557],{"class":41,"line":758},[39,91552,91147],{"class":53},[39,91554,1117],{"class":45},[39,91556,4115],{"class":53},[39,91558,3788],{"class":45},[39,91560,91561],{"class":41,"line":763},[39,91562,91158],{"class":128},[39,91564,91565],{"class":41,"line":772},[39,91566,3284],{"class":53},[39,91568,91569],{"class":41,"line":777},[39,91570,91167],{"class":128},[39,91572,91573],{"class":41,"line":785},[39,91574,91575],{"class":128},"    \u002F\u002F 手写防抖函数\n",[39,91577,91578],{"class":41,"line":796},[39,91579,91580],{"class":128},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[39,91582,91583],{"class":41,"line":808},[39,91584,91585],{"class":128},"    \u002F\u002F 1.声明定时器变量\n",[39,91587,91588],{"class":41,"line":823},[39,91589,91590],{"class":128},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[39,91592,91593],{"class":41,"line":839},[39,91594,91595],{"class":128},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[39,91597,91598],{"class":41,"line":845},[39,91599,91600],{"class":128},"    \u002F\u002F 4.定时器里面写函数调用\n",[39,91602,91603,91605,91608,91610,91613,91615,91617],{"class":41,"line":856},[39,91604,71059],{"class":45},[39,91606,91607],{"class":49}," debounce",[39,91609,54],{"class":53},[39,91611,91612],{"class":59},"fn",[39,91614,63],{"class":53},[39,91616,1980],{"class":59},[39,91618,89],{"class":53},[39,91620,91621,91623],{"class":41,"line":861},[39,91622,80747],{"class":45},[39,91624,91625],{"class":53}," timer\n",[39,91627,91628],{"class":41,"line":870},[39,91629,91630],{"class":128},"      \u002F\u002F return 返回一个匿名函数\n",[39,91632,91633,91635,91637],{"class":41,"line":9084},[39,91634,74957],{"class":45},[39,91636,59893],{"class":45},[39,91638,55427],{"class":53},[39,91640,91641],{"class":41,"line":9090},[39,91642,91643],{"class":128},"        \u002F\u002F 这里边写第二三四步\n",[39,91645,91646,91648,91651,91654],{"class":41,"line":9102},[39,91647,3590],{"class":45},[39,91649,91650],{"class":53}," (timer) ",[39,91652,91653],{"class":49},"clearTimeout",[39,91655,91656],{"class":53},"(timer)\n",[39,91658,91659,91662,91664,91667,91669,91671],{"class":41,"line":9114},[39,91660,91661],{"class":53},"        timer ",[39,91663,1117],{"class":45},[39,91665,91666],{"class":49}," setTimeout",[39,91668,54],{"class":53},[39,91670,55424],{"class":45},[39,91672,55427],{"class":53},[39,91674,91675,91678,91680],{"class":41,"line":9126},[39,91676,91677],{"class":49},"          fn",[39,91679,14107],{"class":53},[39,91681,91682],{"class":128},"\u002F\u002F加小括号调用fn }, t)\n",[39,91684,91685],{"class":41,"line":10784},[39,91686,91687],{"class":53},"        }, t)\n",[39,91689,91690],{"class":41,"line":10809},[39,91691,53373],{"class":53},[39,91693,91694],{"class":41,"line":10832},[39,91695,3284],{"class":53},[39,91697,91698,91700,91702,91704,91706,91708,91710,91712,91714],{"class":41,"line":10856},[39,91699,91182],{"class":53},[39,91701,58788],{"class":49},[39,91703,54],{"class":53},[39,91705,91189],{"class":237},[39,91707,63],{"class":53},[39,91709,91195],{"class":49},[39,91711,91198],{"class":53},[39,91713,66049],{"class":74},[39,91715,31472],{"class":53},[39,91717,91718],{"class":41,"line":10861},[39,91719,122],{"emptyLinePlaceholder":121},[39,91721,91722],{"class":41,"line":10866},[39,91723,91724],{"class":128},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[39,91726,91727],{"class":41,"line":10871},[39,91728,91729],{"class":128},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[39,91731,91732],{"class":41,"line":10880},[39,91733,91734],{"class":128},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[39,91736,91737],{"class":41,"line":10885},[39,91738,91739],{"class":128},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[39,91741,91742,91744,91746],{"class":41,"line":10891},[39,91743,53392],{"class":53},[39,91745,52788],{"class":52275},[39,91747,52282],{"class":53},[39,91749,91750,91752,91754],{"class":41,"line":10912},[39,91751,52760],{"class":53},[39,91753,52775],{"class":52275},[39,91755,52282],{"class":53},[39,91757,91758],{"class":41,"line":10918},[39,91759,122],{"emptyLinePlaceholder":121},[39,91761,91762,91764,91766],{"class":41,"line":10932},[39,91763,52760],{"class":53},[39,91765,51610],{"class":52275},[39,91767,52282],{"class":53},[476,91769,91771],{"id":91770},"_4172-节流","4.17.2 节流",[19,91773,91774],{},[2585,91775],{"alt":35,"src":91776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91778,91779],{},[2585,91780],{"alt":35,"src":91781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91783,91784],{},[350,91785,91786],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91788,91789],{},"实现方式：",[489,91791,91792],{},[331,91793,91794],{},"lodash 提供的节流函数来处理",[19,91796,91797],{},"_.throttle(func,[wait=0],[options=])",[19,91799,91800],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[30,91802,91804],{"className":51608,"code":91803,"language":51610,"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",[26,91805,91806,91816,91830,91834,91842,91856,91876,91888,91896,91902,91912,91924,91936,91946,91958,91968,91978,91990,91994,92002,92010,92014,92022,92040,92058,92066,92084,92094,92102,92112,92116,92120,92124,92129,92134,92155,92163,92171,92175],{"__ignoreMap":35},[39,91807,91808,91810,91812,91814],{"class":41,"line":42},[39,91809,52272],{"class":53},[39,91811,52276],{"class":52275},[39,91813,52279],{"class":49},[39,91815,52282],{"class":53},[39,91817,91818,91820,91822,91824,91826,91828],{"class":41,"line":92},[39,91819,2170],{"class":53},[39,91821,51610],{"class":52275},[39,91823,52291],{"class":49},[39,91825,1117],{"class":53},[39,91827,52296],{"class":237},[39,91829,52282],{"class":53},[39,91831,91832],{"class":41,"line":112},[39,91833,122],{"emptyLinePlaceholder":121},[39,91835,91836,91838,91840],{"class":41,"line":118},[39,91837,2170],{"class":53},[39,91839,52309],{"class":52275},[39,91841,52282],{"class":53},[39,91843,91844,91846,91848,91850,91852,91854],{"class":41,"line":125},[39,91845,53119],{"class":53},[39,91847,52319],{"class":52275},[39,91849,52322],{"class":49},[39,91851,1117],{"class":53},[39,91853,52327],{"class":237},[39,91855,52282],{"class":53},[39,91857,91858,91860,91862,91864,91866,91868,91870,91872,91874],{"class":41,"line":132},[39,91859,53119],{"class":53},[39,91861,52319],{"class":52275},[39,91863,15893],{"class":49},[39,91865,1117],{"class":53},[39,91867,52366],{"class":237},[39,91869,52346],{"class":49},[39,91871,1117],{"class":53},[39,91873,52373],{"class":237},[39,91875,52282],{"class":53},[39,91877,91878,91880,91882,91884,91886],{"class":41,"line":138},[39,91879,53119],{"class":53},[39,91881,52382],{"class":52275},[39,91883,52385],{"class":53},[39,91885,52382],{"class":52275},[39,91887,52282],{"class":53},[39,91889,91890,91892,91894],{"class":41,"line":169},[39,91891,53119],{"class":53},[39,91893,1192],{"class":52275},[39,91895,52282],{"class":53},[39,91897,91898,91900],{"class":41,"line":190},[39,91899,55727],{"class":49},[39,91901,16545],{"class":53},[39,91903,91904,91906,91908,91910],{"class":41,"line":202},[39,91905,73571],{"class":74},[39,91907,52412],{"class":53},[39,91909,61480],{"class":74},[39,91911,318],{"class":53},[39,91913,91914,91916,91918,91920,91922],{"class":41,"line":207},[39,91915,55746],{"class":74},[39,91917,52412],{"class":53},[39,91919,2832],{"class":74},[39,91921,52467],{"class":45},[39,91923,318],{"class":53},[39,91925,91926,91928,91930,91932,91934],{"class":41,"line":212},[39,91927,55760],{"class":74},[39,91929,52412],{"class":53},[39,91931,2832],{"class":74},[39,91933,52467],{"class":45},[39,91935,318],{"class":53},[39,91937,91938,91940,91942,91944],{"class":41,"line":223},[39,91939,55859],{"class":74},[39,91941,52412],{"class":53},[39,91943,90981],{"class":74},[39,91945,318],{"class":53},[39,91947,91948,91950,91952,91954,91956],{"class":41,"line":228},[39,91949,55897],{"class":74},[39,91951,52412],{"class":53},[39,91953,2085],{"class":74},[39,91955,52467],{"class":45},[39,91957,318],{"class":53},[39,91959,91960,91962,91964,91966],{"class":41,"line":263},[39,91961,58391],{"class":74},[39,91963,52412],{"class":53},[39,91965,61817],{"class":74},[39,91967,318],{"class":53},[39,91969,91970,91972,91974,91976],{"class":41,"line":287},[39,91971,58261],{"class":74},[39,91973,52412],{"class":53},[39,91975,52567],{"class":74},[39,91977,318],{"class":53},[39,91979,91980,91982,91984,91986,91988],{"class":41,"line":292},[39,91981,91020],{"class":74},[39,91983,52412],{"class":53},[39,91985,1583],{"class":74},[39,91987,52467],{"class":45},[39,91989,318],{"class":53},[39,91991,91992],{"class":41,"line":305},[39,91993,3284],{"class":53},[39,91995,91996,91998,92000],{"class":41,"line":310},[39,91997,53392],{"class":53},[39,91999,1192],{"class":52275},[39,92001,52282],{"class":53},[39,92003,92004,92006,92008],{"class":41,"line":321},[39,92005,52760],{"class":53},[39,92007,52309],{"class":52275},[39,92009,52282],{"class":53},[39,92011,92012],{"class":41,"line":713},[39,92013,122],{"emptyLinePlaceholder":121},[39,92015,92016,92018,92020],{"class":41,"line":718},[39,92017,2170],{"class":53},[39,92019,52775],{"class":52275},[39,92021,52282],{"class":53},[39,92023,92024,92026,92028,92030,92032,92034,92036,92038],{"class":41,"line":723},[39,92025,53119],{"class":53},[39,92027,52586],{"class":52275},[39,92029,54461],{"class":49},[39,92031,1117],{"class":53},[39,92033,54466],{"class":237},[39,92035,56289],{"class":53},[39,92037,52586],{"class":52275},[39,92039,52282],{"class":53},[39,92041,92042,92044,92046,92048,92050,92052,92054,92056],{"class":41,"line":729},[39,92043,53119],{"class":53},[39,92045,52788],{"class":52275},[39,92047,56214],{"class":49},[39,92049,1117],{"class":53},[39,92051,89249],{"class":237},[39,92053,56289],{"class":53},[39,92055,52788],{"class":52275},[39,92057,52282],{"class":53},[39,92059,92060,92062,92064],{"class":41,"line":735},[39,92061,53119],{"class":53},[39,92063,52788],{"class":52275},[39,92065,52282],{"class":53},[39,92067,92068,92070,92072,92074,92076,92078,92080,92082],{"class":41,"line":741},[39,92069,12283],{"class":45},[39,92071,87908],{"class":74},[39,92073,71],{"class":45},[39,92075,55371],{"class":53},[39,92077,55374],{"class":49},[39,92079,54],{"class":53},[39,92081,91121],{"class":237},[39,92083,574],{"class":53},[39,92085,92086,92088,92090,92092],{"class":41,"line":747},[39,92087,53194],{"class":45},[39,92089,10506],{"class":53},[39,92091,1117],{"class":45},[39,92093,48308],{"class":74},[39,92095,92096,92098,92100],{"class":41,"line":753},[39,92097,71059],{"class":45},[39,92099,91140],{"class":49},[39,92101,220],{"class":53},[39,92103,92104,92106,92108,92110],{"class":41,"line":758},[39,92105,91147],{"class":53},[39,92107,1117],{"class":45},[39,92109,4115],{"class":53},[39,92111,3788],{"class":45},[39,92113,92114],{"class":41,"line":763},[39,92115,91158],{"class":128},[39,92117,92118],{"class":41,"line":772},[39,92119,3284],{"class":53},[39,92121,92122],{"class":41,"line":777},[39,92123,91167],{"class":128},[39,92125,92126],{"class":41,"line":785},[39,92127,92128],{"class":128},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[39,92130,92131],{"class":41,"line":796},[39,92132,92133],{"class":128},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[39,92135,92136,92138,92140,92142,92144,92146,92149,92151,92153],{"class":41,"line":808},[39,92137,91182],{"class":53},[39,92139,58788],{"class":49},[39,92141,54],{"class":53},[39,92143,91189],{"class":237},[39,92145,91192],{"class":53},[39,92147,92148],{"class":49},"throttle",[39,92150,91198],{"class":53},[39,92152,66049],{"class":74},[39,92154,31472],{"class":53},[39,92156,92157,92159,92161],{"class":41,"line":823},[39,92158,53392],{"class":53},[39,92160,52788],{"class":52275},[39,92162,52282],{"class":53},[39,92164,92165,92167,92169],{"class":41,"line":839},[39,92166,52760],{"class":53},[39,92168,52775],{"class":52275},[39,92170,52282],{"class":53},[39,92172,92173],{"class":41,"line":845},[39,92174,122],{"emptyLinePlaceholder":121},[39,92176,92177,92179,92181],{"class":41,"line":856},[39,92178,52760],{"class":53},[39,92180,51610],{"class":52275},[39,92182,52282],{"class":53},[489,92184,92185],{},[331,92186,92187],{},"手写一个节流函数来处理",[19,92189,71927],{},[19,92191,91241],{},[19,92193,92194],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92196,92197],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[30,92199,92201],{"className":51608,"code":92200,"language":51610,"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",[26,92202,92203,92213,92227,92231,92239,92253,92273,92285,92293,92299,92309,92321,92333,92343,92355,92365,92375,92387,92391,92399,92407,92411,92419,92437,92455,92463,92481,92491,92499,92509,92513,92517,92521,92526,92531,92536,92541,92546,92551,92568,92574,92582,92593,92608,92615,92620,92625,92635,92640,92645,92650,92654,92658,92662,92682,92690,92698,92702],{"__ignoreMap":35},[39,92204,92205,92207,92209,92211],{"class":41,"line":42},[39,92206,52272],{"class":53},[39,92208,52276],{"class":52275},[39,92210,52279],{"class":49},[39,92212,52282],{"class":53},[39,92214,92215,92217,92219,92221,92223,92225],{"class":41,"line":92},[39,92216,2170],{"class":53},[39,92218,51610],{"class":52275},[39,92220,52291],{"class":49},[39,92222,1117],{"class":53},[39,92224,52296],{"class":237},[39,92226,52282],{"class":53},[39,92228,92229],{"class":41,"line":112},[39,92230,122],{"emptyLinePlaceholder":121},[39,92232,92233,92235,92237],{"class":41,"line":118},[39,92234,2170],{"class":53},[39,92236,52309],{"class":52275},[39,92238,52282],{"class":53},[39,92240,92241,92243,92245,92247,92249,92251],{"class":41,"line":125},[39,92242,53119],{"class":53},[39,92244,52319],{"class":52275},[39,92246,52322],{"class":49},[39,92248,1117],{"class":53},[39,92250,52327],{"class":237},[39,92252,52282],{"class":53},[39,92254,92255,92257,92259,92261,92263,92265,92267,92269,92271],{"class":41,"line":132},[39,92256,53119],{"class":53},[39,92258,52319],{"class":52275},[39,92260,15893],{"class":49},[39,92262,1117],{"class":53},[39,92264,52366],{"class":237},[39,92266,52346],{"class":49},[39,92268,1117],{"class":53},[39,92270,52373],{"class":237},[39,92272,52282],{"class":53},[39,92274,92275,92277,92279,92281,92283],{"class":41,"line":138},[39,92276,53119],{"class":53},[39,92278,52382],{"class":52275},[39,92280,52385],{"class":53},[39,92282,52382],{"class":52275},[39,92284,52282],{"class":53},[39,92286,92287,92289,92291],{"class":41,"line":169},[39,92288,53119],{"class":53},[39,92290,1192],{"class":52275},[39,92292,52282],{"class":53},[39,92294,92295,92297],{"class":41,"line":190},[39,92296,55727],{"class":49},[39,92298,16545],{"class":53},[39,92300,92301,92303,92305,92307],{"class":41,"line":202},[39,92302,73571],{"class":74},[39,92304,52412],{"class":53},[39,92306,61480],{"class":74},[39,92308,318],{"class":53},[39,92310,92311,92313,92315,92317,92319],{"class":41,"line":207},[39,92312,55746],{"class":74},[39,92314,52412],{"class":53},[39,92316,2832],{"class":74},[39,92318,52467],{"class":45},[39,92320,318],{"class":53},[39,92322,92323,92325,92327,92329,92331],{"class":41,"line":212},[39,92324,55760],{"class":74},[39,92326,52412],{"class":53},[39,92328,2832],{"class":74},[39,92330,52467],{"class":45},[39,92332,318],{"class":53},[39,92334,92335,92337,92339,92341],{"class":41,"line":223},[39,92336,55859],{"class":74},[39,92338,52412],{"class":53},[39,92340,90981],{"class":74},[39,92342,318],{"class":53},[39,92344,92345,92347,92349,92351,92353],{"class":41,"line":228},[39,92346,55897],{"class":74},[39,92348,52412],{"class":53},[39,92350,2085],{"class":74},[39,92352,52467],{"class":45},[39,92354,318],{"class":53},[39,92356,92357,92359,92361,92363],{"class":41,"line":263},[39,92358,58391],{"class":74},[39,92360,52412],{"class":53},[39,92362,61817],{"class":74},[39,92364,318],{"class":53},[39,92366,92367,92369,92371,92373],{"class":41,"line":287},[39,92368,58261],{"class":74},[39,92370,52412],{"class":53},[39,92372,52567],{"class":74},[39,92374,318],{"class":53},[39,92376,92377,92379,92381,92383,92385],{"class":41,"line":292},[39,92378,91020],{"class":74},[39,92380,52412],{"class":53},[39,92382,1583],{"class":74},[39,92384,52467],{"class":45},[39,92386,318],{"class":53},[39,92388,92389],{"class":41,"line":305},[39,92390,3284],{"class":53},[39,92392,92393,92395,92397],{"class":41,"line":310},[39,92394,53392],{"class":53},[39,92396,1192],{"class":52275},[39,92398,52282],{"class":53},[39,92400,92401,92403,92405],{"class":41,"line":321},[39,92402,52760],{"class":53},[39,92404,52309],{"class":52275},[39,92406,52282],{"class":53},[39,92408,92409],{"class":41,"line":713},[39,92410,122],{"emptyLinePlaceholder":121},[39,92412,92413,92415,92417],{"class":41,"line":718},[39,92414,2170],{"class":53},[39,92416,52775],{"class":52275},[39,92418,52282],{"class":53},[39,92420,92421,92423,92425,92427,92429,92431,92433,92435],{"class":41,"line":723},[39,92422,53119],{"class":53},[39,92424,52586],{"class":52275},[39,92426,54461],{"class":49},[39,92428,1117],{"class":53},[39,92430,54466],{"class":237},[39,92432,56289],{"class":53},[39,92434,52586],{"class":52275},[39,92436,52282],{"class":53},[39,92438,92439,92441,92443,92445,92447,92449,92451,92453],{"class":41,"line":729},[39,92440,53119],{"class":53},[39,92442,52788],{"class":52275},[39,92444,56214],{"class":49},[39,92446,1117],{"class":53},[39,92448,89249],{"class":237},[39,92450,56289],{"class":53},[39,92452,52788],{"class":52275},[39,92454,52282],{"class":53},[39,92456,92457,92459,92461],{"class":41,"line":735},[39,92458,53119],{"class":53},[39,92460,52788],{"class":52275},[39,92462,52282],{"class":53},[39,92464,92465,92467,92469,92471,92473,92475,92477,92479],{"class":41,"line":741},[39,92466,12283],{"class":45},[39,92468,87908],{"class":74},[39,92470,71],{"class":45},[39,92472,55371],{"class":53},[39,92474,55374],{"class":49},[39,92476,54],{"class":53},[39,92478,91121],{"class":237},[39,92480,574],{"class":53},[39,92482,92483,92485,92487,92489],{"class":41,"line":747},[39,92484,53194],{"class":45},[39,92486,10506],{"class":53},[39,92488,1117],{"class":45},[39,92490,48308],{"class":74},[39,92492,92493,92495,92497],{"class":41,"line":753},[39,92494,71059],{"class":45},[39,92496,91140],{"class":49},[39,92498,220],{"class":53},[39,92500,92501,92503,92505,92507],{"class":41,"line":758},[39,92502,91147],{"class":53},[39,92504,1117],{"class":45},[39,92506,4115],{"class":53},[39,92508,3788],{"class":45},[39,92510,92511],{"class":41,"line":763},[39,92512,91158],{"class":128},[39,92514,92515],{"class":41,"line":772},[39,92516,3284],{"class":53},[39,92518,92519],{"class":41,"line":777},[39,92520,91167],{"class":128},[39,92522,92523],{"class":41,"line":785},[39,92524,92525],{"class":128},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[39,92527,92528],{"class":41,"line":796},[39,92529,92530],{"class":128},"    \u002F\u002F 1.声明一个定时器变量\n",[39,92532,92533],{"class":41,"line":808},[39,92534,92535],{"class":128},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[39,92537,92538],{"class":41,"line":823},[39,92539,92540],{"class":128},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[39,92542,92543],{"class":41,"line":839},[39,92544,92545],{"class":128},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[39,92547,92548],{"class":41,"line":845},[39,92549,92550],{"class":128},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[39,92552,92553,92555,92558,92560,92562,92564,92566],{"class":41,"line":856},[39,92554,71059],{"class":45},[39,92556,92557],{"class":49}," throttle",[39,92559,54],{"class":53},[39,92561,91612],{"class":59},[39,92563,63],{"class":53},[39,92565,1980],{"class":59},[39,92567,89],{"class":53},[39,92569,92570,92572],{"class":41,"line":861},[39,92571,80747],{"class":45},[39,92573,91625],{"class":53},[39,92575,92576,92578,92580],{"class":41,"line":870},[39,92577,74957],{"class":45},[39,92579,59893],{"class":45},[39,92581,55427],{"class":53},[39,92583,92584,92586,92588,92590],{"class":41,"line":9084},[39,92585,3590],{"class":45},[39,92587,2772],{"class":53},[39,92589,1492],{"class":45},[39,92591,92592],{"class":53},"timer) {\n",[39,92594,92595,92598,92600,92602,92604,92606],{"class":41,"line":9090},[39,92596,92597],{"class":53},"          timer ",[39,92599,1117],{"class":45},[39,92601,91666],{"class":49},[39,92603,54],{"class":53},[39,92605,55424],{"class":45},[39,92607,55427],{"class":53},[39,92609,92610,92613],{"class":41,"line":9102},[39,92611,92612],{"class":49},"            fn",[39,92614,537],{"class":53},[39,92616,92617],{"class":41,"line":9114},[39,92618,92619],{"class":128},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[39,92621,92622],{"class":41,"line":9126},[39,92623,92624],{"class":128},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[39,92626,92627,92630,92632],{"class":41,"line":10784},[39,92628,92629],{"class":53},"            timer ",[39,92631,1117],{"class":45},[39,92633,92634],{"class":74}," null\n",[39,92636,92637],{"class":41,"line":10809},[39,92638,92639],{"class":128},"            \u002F\u002F 不能用clearTimeout(timer)\n",[39,92641,92642],{"class":41,"line":10832},[39,92643,92644],{"class":128},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[39,92646,92647],{"class":41,"line":10856},[39,92648,92649],{"class":53},"          }, t)\n",[39,92651,92652],{"class":41,"line":10861},[39,92653,3622],{"class":53},[39,92655,92656],{"class":41,"line":10866},[39,92657,53373],{"class":53},[39,92659,92660],{"class":41,"line":10871},[39,92661,3284],{"class":53},[39,92663,92664,92666,92668,92670,92672,92674,92676,92678,92680],{"class":41,"line":10880},[39,92665,91182],{"class":53},[39,92667,58788],{"class":49},[39,92669,54],{"class":53},[39,92671,91189],{"class":237},[39,92673,63],{"class":53},[39,92675,92148],{"class":49},[39,92677,91198],{"class":53},[39,92679,66049],{"class":74},[39,92681,31472],{"class":53},[39,92683,92684,92686,92688],{"class":41,"line":10885},[39,92685,53392],{"class":53},[39,92687,52788],{"class":52275},[39,92689,52282],{"class":53},[39,92691,92692,92694,92696],{"class":41,"line":10891},[39,92693,52760],{"class":53},[39,92695,52775],{"class":52275},[39,92697,52282],{"class":53},[39,92699,92700],{"class":41,"line":10912},[39,92701,122],{"emptyLinePlaceholder":121},[39,92703,92704,92706,92708],{"class":41,"line":10918},[39,92705,52760],{"class":53},[39,92707,51610],{"class":52275},[39,92709,52282],{"class":53},[476,92711,92713],{"id":92712},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[30,92715,92717],{"className":54042,"code":92716,"language":54044,"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",[26,92718,92719,92727,92735,92740,92745,92750,92755,92759,92767],{"__ignoreMap":35},[39,92720,92721,92723,92725],{"class":41,"line":42},[39,92722,2170],{"class":53},[39,92724,52775],{"class":52275},[39,92726,52282],{"class":53},[39,92728,92729,92731,92733],{"class":41,"line":92},[39,92730,53119],{"class":53},[39,92732,52788],{"class":52275},[39,92734,52282],{"class":53},[39,92736,92737],{"class":41,"line":112},[39,92738,92739],{"class":53},"    let timer = null\n",[39,92741,92742],{"class":41,"line":118},[39,92743,92744],{"class":53},"    timer = setTimeout(() => {\n",[39,92746,92747],{"class":41,"line":125},[39,92748,92749],{"class":53},"      clearTimeout(timer)\n",[39,92751,92752],{"class":41,"line":132},[39,92753,92754],{"class":53},"      console.log(timer)\n",[39,92756,92757],{"class":41,"line":138},[39,92758,61200],{"class":53},[39,92760,92761,92763,92765],{"class":41,"line":169},[39,92762,53392],{"class":53},[39,92764,52788],{"class":52275},[39,92766,52282],{"class":53},[39,92768,92769,92771,92773],{"class":41,"line":190},[39,92770,52760],{"class":53},[39,92772,52775],{"class":52275},[39,92774,52282],{"class":53},[19,92776,92777],{},"输出为1",[19,92779,92780],{},"在开启的定时器里边写清除定时器",[19,92782,92783],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[476,92785,92787],{"id":92786},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92789,92790],{},"页面打开，可以记录上一次的视频播放位置",[19,92792,92793],{},[2585,92794],{"alt":35,"src":92795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92797,92798],{},[2585,92799],{"alt":35,"src":92800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[30,92802,92804],{"className":51608,"code":92803,"language":51610,"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",[26,92805,92806,92816,92830,92834,92842,92856,92876,92896,92918,92931,92939,92945,92955,92965,92975,92979,92983,92990,93003,93015,93019,93023,93033,93045,93059,93063,93067,93074,93084,93097,93109,93119,93129,93145,93157,93161,93165,93173,93183,93195,93205,93215,93225,93229,93233,93243,93254,93258,93266,93274,93278,93286,93301,93316,93331,93352,93360,93368,93383,93405,93413,93428,93454,93480,93506,93514,93522,93541,93549,93554,93573,93578,93596,93601,93606,93614,93619,93633,93641,93646,93663,93667,93672,93694,93698,93706,93714,93718],{"__ignoreMap":35},[39,92807,92808,92810,92812,92814],{"class":41,"line":42},[39,92809,52272],{"class":53},[39,92811,52276],{"class":52275},[39,92813,52279],{"class":49},[39,92815,52282],{"class":53},[39,92817,92818,92820,92822,92824,92826,92828],{"class":41,"line":92},[39,92819,2170],{"class":53},[39,92821,51610],{"class":52275},[39,92823,52291],{"class":49},[39,92825,1117],{"class":53},[39,92827,52296],{"class":237},[39,92829,52282],{"class":53},[39,92831,92832],{"class":41,"line":112},[39,92833,122],{"emptyLinePlaceholder":121},[39,92835,92836,92838,92840],{"class":41,"line":118},[39,92837,2170],{"class":53},[39,92839,52309],{"class":52275},[39,92841,52282],{"class":53},[39,92843,92844,92846,92848,92850,92852,92854],{"class":41,"line":125},[39,92845,53119],{"class":53},[39,92847,52319],{"class":52275},[39,92849,52322],{"class":49},[39,92851,1117],{"class":53},[39,92853,52327],{"class":237},[39,92855,60102],{"class":53},[39,92857,92858,92860,92862,92864,92866,92868,92870,92872,92874],{"class":41,"line":132},[39,92859,53119],{"class":53},[39,92861,52319],{"class":52275},[39,92863,52338],{"class":49},[39,92865,1117],{"class":53},[39,92867,52343],{"class":237},[39,92869,52346],{"class":49},[39,92871,1117],{"class":53},[39,92873,52351],{"class":237},[39,92875,60102],{"class":53},[39,92877,92878,92880,92882,92884,92886,92888,92890,92892,92894],{"class":41,"line":138},[39,92879,53119],{"class":53},[39,92881,52319],{"class":52275},[39,92883,15893],{"class":49},[39,92885,1117],{"class":53},[39,92887,52366],{"class":237},[39,92889,52346],{"class":49},[39,92891,1117],{"class":53},[39,92893,52373],{"class":237},[39,92895,60102],{"class":53},[39,92897,92898,92900,92902,92904,92906,92909,92911,92913,92916],{"class":41,"line":169},[39,92899,53119],{"class":53},[39,92901,52319],{"class":52275},[39,92903,15893],{"class":49},[39,92905,1117],{"class":53},[39,92907,92908],{"class":237},"\"referrer\"",[39,92910,52346],{"class":49},[39,92912,1117],{"class":53},[39,92914,92915],{"class":237},"\"never\"",[39,92917,60102],{"class":53},[39,92919,92920,92922,92924,92927,92929],{"class":41,"line":190},[39,92921,53119],{"class":53},[39,92923,52382],{"class":52275},[39,92925,92926],{"class":53},">综合案例\u003C\u002F",[39,92928,52382],{"class":52275},[39,92930,52282],{"class":53},[39,92932,92933,92935,92937],{"class":41,"line":202},[39,92934,53119],{"class":53},[39,92936,1192],{"class":52275},[39,92938,52282],{"class":53},[39,92940,92941,92943],{"class":41,"line":207},[39,92942,7479],{"class":52275},[39,92944,16545],{"class":53},[39,92946,92947,92949,92951,92953],{"class":41,"line":212},[39,92948,55670],{"class":74},[39,92950,52412],{"class":53},[39,92952,1457],{"class":74},[39,92954,318],{"class":53},[39,92956,92957,92959,92961,92963],{"class":41,"line":223},[39,92958,55681],{"class":74},[39,92960,52412],{"class":53},[39,92962,1457],{"class":74},[39,92964,318],{"class":53},[39,92966,92967,92969,92971,92973],{"class":41,"line":228},[39,92968,73571],{"class":74},[39,92970,52412],{"class":53},[39,92972,61480],{"class":74},[39,92974,318],{"class":53},[39,92976,92977],{"class":41,"line":263},[39,92978,3284],{"class":53},[39,92980,92981],{"class":41,"line":287},[39,92982,122],{"emptyLinePlaceholder":121},[39,92984,92985,92988],{"class":41,"line":292},[39,92986,92987],{"class":49},"    .container",[39,92989,16545],{"class":53},[39,92991,92992,92994,92996,92999,93001],{"class":41,"line":305},[39,92993,55746],{"class":74},[39,92995,52412],{"class":53},[39,92997,92998],{"class":74},"1200",[39,93000,52467],{"class":45},[39,93002,318],{"class":53},[39,93004,93005,93007,93009,93011,93013],{"class":41,"line":310},[39,93006,55681],{"class":74},[39,93008,52412],{"class":53},[39,93010,1457],{"class":74},[39,93012,52531],{"class":74},[39,93014,318],{"class":53},[39,93016,93017],{"class":41,"line":321},[39,93018,3284],{"class":53},[39,93020,93021],{"class":41,"line":713},[39,93022,122],{"emptyLinePlaceholder":121},[39,93024,93025,93028,93031],{"class":41,"line":718},[39,93026,93027],{"class":49},"    .video",[39,93029,93030],{"class":52275}," video",[39,93032,16545],{"class":53},[39,93034,93035,93037,93039,93041,93043],{"class":41,"line":723},[39,93036,55746],{"class":74},[39,93038,52412],{"class":53},[39,93040,278],{"class":74},[39,93042,1592],{"class":45},[39,93044,318],{"class":53},[39,93046,93047,93049,93051,93053,93055,93057],{"class":41,"line":729},[39,93048,55670],{"class":74},[39,93050,52412],{"class":53},[39,93052,248],{"class":74},[39,93054,52467],{"class":45},[39,93056,315],{"class":74},[39,93058,318],{"class":53},[39,93060,93061],{"class":41,"line":735},[39,93062,3284],{"class":53},[39,93064,93065],{"class":41,"line":741},[39,93066,122],{"emptyLinePlaceholder":121},[39,93068,93069,93072],{"class":41,"line":747},[39,93070,93071],{"class":49},"    .elevator",[39,93073,16545],{"class":53},[39,93075,93076,93078,93080,93082],{"class":41,"line":753},[39,93077,55734],{"class":74},[39,93079,52412],{"class":53},[39,93081,87208],{"class":74},[39,93083,318],{"class":53},[39,93085,93086,93088,93090,93093,93095],{"class":41,"line":758},[39,93087,55922],{"class":74},[39,93089,52412],{"class":53},[39,93091,93092],{"class":74},"280",[39,93094,52467],{"class":45},[39,93096,318],{"class":53},[39,93098,93099,93101,93103,93105,93107],{"class":41,"line":763},[39,93100,87402],{"class":74},[39,93102,52412],{"class":53},[39,93104,248],{"class":74},[39,93106,52467],{"class":45},[39,93108,318],{"class":53},[39,93110,93111,93113,93115,93117],{"class":41,"line":772},[39,93112,87215],{"class":74},[39,93114,52412],{"class":53},[39,93116,87220],{"class":74},[39,93118,318],{"class":53},[39,93120,93121,93123,93125,93127],{"class":41,"line":777},[39,93122,62696],{"class":74},[39,93124,52412],{"class":53},[39,93126,61817],{"class":74},[39,93128,318],{"class":53},[39,93130,93131,93133,93135,93137,93139,93141,93143],{"class":41,"line":785},[39,93132,62952],{"class":74},[39,93134,52412],{"class":53},[39,93136,1483],{"class":74},[39,93138,52467],{"class":45},[39,93140,52496],{"class":74},[39,93142,63219],{"class":74},[39,93144,318],{"class":53},[39,93146,93147,93149,93151,93153,93155],{"class":41,"line":796},[39,93148,55746],{"class":74},[39,93150,52412],{"class":53},[39,93152,2167],{"class":74},[39,93154,52467],{"class":45},[39,93156,318],{"class":53},[39,93158,93159],{"class":41,"line":808},[39,93160,3284],{"class":53},[39,93162,93163],{"class":41,"line":823},[39,93164,122],{"emptyLinePlaceholder":121},[39,93166,93167,93169,93171],{"class":41,"line":839},[39,93168,93071],{"class":49},[39,93170,60],{"class":52275},[39,93172,16545],{"class":53},[39,93174,93175,93177,93179,93181],{"class":41,"line":845},[39,93176,55984],{"class":74},[39,93178,52412],{"class":53},[39,93180,61844],{"class":74},[39,93182,318],{"class":53},[39,93184,93185,93187,93189,93191,93193],{"class":41,"line":856},[39,93186,55670],{"class":74},[39,93188,52412],{"class":53},[39,93190,423],{"class":74},[39,93192,52467],{"class":45},[39,93194,318],{"class":53},[39,93196,93197,93199,93201,93203],{"class":41,"line":861},[39,93198,64945],{"class":74},[39,93200,52412],{"class":53},[39,93202,55712],{"class":74},[39,93204,318],{"class":53},[39,93206,93207,93209,93211,93213],{"class":41,"line":870},[39,93208,58261],{"class":74},[39,93210,52412],{"class":53},[39,93212,52567],{"class":74},[39,93214,318],{"class":53},[39,93216,93217,93219,93221,93223],{"class":41,"line":9084},[39,93218,58391],{"class":74},[39,93220,52412],{"class":53},[39,93222,63045],{"class":74},[39,93224,318],{"class":53},[39,93226,93227],{"class":41,"line":9090},[39,93228,3284],{"class":53},[39,93230,93231],{"class":41,"line":9102},[39,93232,122],{"emptyLinePlaceholder":121},[39,93234,93235,93237,93239,93241],{"class":41,"line":9114},[39,93236,93071],{"class":49},[39,93238,60],{"class":52275},[39,93240,64999],{"class":49},[39,93242,16545],{"class":53},[39,93244,93245,93247,93249,93252],{"class":41,"line":9126},[39,93246,58391],{"class":74},[39,93248,52412],{"class":53},[39,93250,93251],{"class":74},"#1286ff",[39,93253,318],{"class":53},[39,93255,93256],{"class":41,"line":10784},[39,93257,3284],{"class":53},[39,93259,93260,93262,93264],{"class":41,"line":10809},[39,93261,53392],{"class":53},[39,93263,1192],{"class":52275},[39,93265,52282],{"class":53},[39,93267,93268,93270,93272],{"class":41,"line":10832},[39,93269,52760],{"class":53},[39,93271,52309],{"class":52275},[39,93273,52282],{"class":53},[39,93275,93276],{"class":41,"line":10856},[39,93277,122],{"emptyLinePlaceholder":121},[39,93279,93280,93282,93284],{"class":41,"line":10861},[39,93281,2170],{"class":53},[39,93283,52775],{"class":52275},[39,93285,52282],{"class":53},[39,93287,93288,93290,93292,93294,93296,93299],{"class":41,"line":10866},[39,93289,53119],{"class":53},[39,93291,52586],{"class":52275},[39,93293,54461],{"class":49},[39,93295,1117],{"class":53},[39,93297,93298],{"class":237},"\"container\"",[39,93300,52282],{"class":53},[39,93302,93303,93305,93307,93309,93311,93314],{"class":41,"line":10871},[39,93304,52316],{"class":53},[39,93306,52586],{"class":52275},[39,93308,54461],{"class":49},[39,93310,1117],{"class":53},[39,93312,93313],{"class":237},"\"header\"",[39,93315,52282],{"class":53},[39,93317,93318,93320,93322,93324,93326,93329],{"class":41,"line":10880},[39,93319,56209],{"class":53},[39,93321,922],{"class":52275},[39,93323,62032],{"class":49},[39,93325,1117],{"class":53},[39,93327,93328],{"class":237},"\"http:\u002F\u002Fpip.itcast.cn\"",[39,93330,52282],{"class":53},[39,93332,93333,93335,93337,93339,93341,93344,93346,93348,93350],{"class":41,"line":10885},[39,93334,56277],{"class":53},[39,93336,2585],{"class":52275},[39,93338,56214],{"class":49},[39,93340,1117],{"class":53},[39,93342,93343],{"class":237},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[39,93345,56222],{"class":49},[39,93347,1117],{"class":53},[39,93349,8726],{"class":237},[39,93351,60102],{"class":53},[39,93353,93354,93356,93358],{"class":41,"line":10891},[39,93355,56382],{"class":53},[39,93357,922],{"class":52275},[39,93359,52282],{"class":53},[39,93361,93362,93364,93366],{"class":41,"line":10912},[39,93363,52751],{"class":53},[39,93365,52586],{"class":52275},[39,93367,52282],{"class":53},[39,93369,93370,93372,93374,93376,93378,93381],{"class":41,"line":10918},[39,93371,52316],{"class":53},[39,93373,52586],{"class":52275},[39,93375,54461],{"class":49},[39,93377,1117],{"class":53},[39,93379,93380],{"class":237},"\"video\"",[39,93382,52282],{"class":53},[39,93384,93385,93387,93389,93391,93393,93396,93399,93401,93403],{"class":41,"line":10932},[39,93386,56209],{"class":53},[39,93388,29158],{"class":52275},[39,93390,56214],{"class":49},[39,93392,1117],{"class":53},[39,93394,93395],{"class":237},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[39,93397,93398],{"class":49}," controls",[39,93400,56289],{"class":53},[39,93402,29158],{"class":52275},[39,93404,52282],{"class":53},[39,93406,93407,93409,93411],{"class":41,"line":10938},[39,93408,52751],{"class":53},[39,93410,52586],{"class":52275},[39,93412,52282],{"class":53},[39,93414,93415,93417,93419,93421,93423,93426],{"class":41,"line":10965},[39,93416,52316],{"class":53},[39,93418,52586],{"class":52275},[39,93420,54461],{"class":49},[39,93422,1117],{"class":53},[39,93424,93425],{"class":237},"\"elevator\"",[39,93427,52282],{"class":53},[39,93429,93430,93432,93434,93436,93438,93440,93443,93445,93447,93450,93452],{"class":41,"line":10974},[39,93431,56209],{"class":53},[39,93433,922],{"class":52275},[39,93435,62032],{"class":49},[39,93437,1117],{"class":53},[39,93439,65211],{"class":237},[39,93441,93442],{"class":49}," data-ref",[39,93444,1117],{"class":53},[39,93446,93380],{"class":237},[39,93448,93449],{"class":53},">视频介绍\u003C\u002F",[39,93451,922],{"class":52275},[39,93453,52282],{"class":53},[39,93455,93456,93458,93460,93462,93464,93466,93468,93470,93473,93476,93478],{"class":41,"line":10980},[39,93457,56209],{"class":53},[39,93459,922],{"class":52275},[39,93461,62032],{"class":49},[39,93463,1117],{"class":53},[39,93465,65211],{"class":237},[39,93467,93442],{"class":49},[39,93469,1117],{"class":53},[39,93471,93472],{"class":237},"\"intro\"",[39,93474,93475],{"class":53},">课程简介\u003C\u002F",[39,93477,922],{"class":52275},[39,93479,52282],{"class":53},[39,93481,93482,93484,93486,93488,93490,93492,93494,93496,93499,93502,93504],{"class":41,"line":10988},[39,93483,56209],{"class":53},[39,93485,922],{"class":52275},[39,93487,62032],{"class":49},[39,93489,1117],{"class":53},[39,93491,65211],{"class":237},[39,93493,93442],{"class":49},[39,93495,1117],{"class":53},[39,93497,93498],{"class":237},"\"outline\"",[39,93500,93501],{"class":53},">评论列表\u003C\u002F",[39,93503,922],{"class":52275},[39,93505,52282],{"class":53},[39,93507,93508,93510,93512],{"class":41,"line":10993},[39,93509,52751],{"class":53},[39,93511,52586],{"class":52275},[39,93513,52282],{"class":53},[39,93515,93516,93518,93520],{"class":41,"line":17577},[39,93517,53392],{"class":53},[39,93519,52586],{"class":52275},[39,93521,52282],{"class":53},[39,93523,93524,93526,93528,93530,93532,93535,93537,93539],{"class":41,"line":17583},[39,93525,53119],{"class":53},[39,93527,52788],{"class":52275},[39,93529,56214],{"class":49},[39,93531,1117],{"class":53},[39,93533,93534],{"class":237},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[39,93536,56289],{"class":53},[39,93538,52788],{"class":52275},[39,93540,52282],{"class":53},[39,93542,93543,93545,93547],{"class":41,"line":17606},[39,93544,53119],{"class":53},[39,93546,52788],{"class":52275},[39,93548,52282],{"class":53},[39,93550,93551],{"class":41,"line":17612},[39,93552,93553],{"class":128},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[39,93555,93556,93558,93560,93562,93564,93566,93568,93571],{"class":41,"line":17635},[39,93557,12283],{"class":45},[39,93559,93030],{"class":74},[39,93561,71],{"class":45},[39,93563,55371],{"class":53},[39,93565,55374],{"class":49},[39,93567,54],{"class":53},[39,93569,93570],{"class":237},"'video'",[39,93572,574],{"class":53},[39,93574,93575],{"class":41,"line":17649},[39,93576,93577],{"class":128},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[39,93579,93580,93583,93585,93587,93589,93592,93594],{"class":41,"line":17669},[39,93581,93582],{"class":53},"    video.ontimeupdate ",[39,93584,1117],{"class":45},[39,93586,89330],{"class":53},[39,93588,92148],{"class":49},[39,93590,93591],{"class":53},"(() ",[39,93593,85697],{"class":45},[39,93595,16545],{"class":53},[39,93597,93598],{"class":41,"line":17675},[39,93599,93600],{"class":128},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[39,93602,93603],{"class":41,"line":17686},[39,93604,93605],{"class":128},"      \u002F\u002F 控制台输出当前的时间\n",[39,93607,93608,93611],{"class":41,"line":17709},[39,93609,93610],{"class":128},"      \u002F\u002F console.log(video.currentTime)",[39,93612,93613],{"class":128},"  \u002F\u002F获得当前的视频时间\n",[39,93615,93616],{"class":41,"line":17731},[39,93617,93618],{"class":128},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[39,93620,93621,93623,93625,93627,93630],{"class":41,"line":17736},[39,93622,75658],{"class":53},[39,93624,72629],{"class":49},[39,93626,54],{"class":53},[39,93628,93629],{"class":237},"'currentTime'",[39,93631,93632],{"class":53},", video.currentTime)\n",[39,93634,93635,93637,93639],{"class":41,"line":17742},[39,93636,55510],{"class":53},[39,93638,7486],{"class":74},[39,93640,574],{"class":53},[39,93642,93643],{"class":41,"line":17756},[39,93644,93645],{"class":128},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[39,93647,93648,93651,93654,93656,93659,93661],{"class":41,"line":17769},[39,93649,93650],{"class":53},"    video.",[39,93652,93653],{"class":49},"onloadeddata",[39,93655,71],{"class":45},[39,93657,93658],{"class":53}," () ",[39,93660,85697],{"class":45},[39,93662,16545],{"class":53},[39,93664,93665],{"class":41,"line":17774},[39,93666,60987],{"class":128},[39,93668,93669],{"class":41,"line":17788},[39,93670,93671],{"class":128},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[39,93673,93674,93677,93679,93682,93684,93686,93688,93690,93692],{"class":41,"line":17793},[39,93675,93676],{"class":53},"      video.currentTime ",[39,93678,1117],{"class":45},[39,93680,93681],{"class":53}," localStorage.",[39,93683,72660],{"class":49},[39,93685,54],{"class":53},[39,93687,93629],{"class":237},[39,93689,255],{"class":53},[39,93691,72332],{"class":45},[39,93693,48308],{"class":74},[39,93695,93696],{"class":41,"line":17799},[39,93697,3284],{"class":53},[39,93699,93700,93702,93704],{"class":41,"line":17804},[39,93701,53392],{"class":53},[39,93703,52788],{"class":52275},[39,93705,52282],{"class":53},[39,93707,93708,93710,93712],{"class":41,"line":17818},[39,93709,52760],{"class":53},[39,93711,52775],{"class":52275},[39,93713,52282],{"class":53},[39,93715,93716],{"class":41,"line":17823},[39,93717,122],{"emptyLinePlaceholder":121},[39,93719,93720,93722,93724],{"class":41,"line":17828},[39,93721,52760],{"class":53},[39,93723,51610],{"class":52275},[39,93725,52282],{"class":53},[1192,93727,93728],{},"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":92,"depth":92,"links":93730},[93731,93736,93740,93741,93742,93747,93752,93753,93754,93755,93762,93767,93768,93778,93782,93783,93787],{"id":77666,"depth":92,"text":77667,"children":93732},[93733,93734,93735],{"id":77670,"depth":112,"text":77671},{"id":77695,"depth":112,"text":77696},{"id":77707,"depth":112,"text":77708},{"id":77719,"depth":92,"text":77720,"children":93737},[93738,93739],{"id":77723,"depth":112,"text":77724},{"id":77738,"depth":112,"text":77739},{"id":77790,"depth":92,"text":77791},{"id":77834,"depth":92,"text":77835},{"id":77851,"depth":92,"text":77852,"children":93743},[93744,93745,93746],{"id":77855,"depth":112,"text":77856},{"id":77868,"depth":112,"text":77869},{"id":77973,"depth":112,"text":77974},{"id":78262,"depth":92,"text":78263,"children":93748},[93749,93750,93751],{"id":78266,"depth":112,"text":78267},{"id":78709,"depth":112,"text":78710},{"id":79120,"depth":112,"text":79121},{"id":79183,"depth":92,"text":79184},{"id":79262,"depth":92,"text":79263},{"id":79355,"depth":92,"text":79356},{"id":81200,"depth":92,"text":81201,"children":93756},[93757,93758,93759,93760,93761],{"id":81204,"depth":112,"text":81205},{"id":81216,"depth":112,"text":81217},{"id":81435,"depth":112,"text":81436},{"id":81453,"depth":112,"text":81454},{"id":81513,"depth":112,"text":81514},{"id":85781,"depth":92,"text":85782,"children":93763},[93764,93765,93766],{"id":85785,"depth":112,"text":85786},{"id":85803,"depth":112,"text":85804},{"id":85829,"depth":112,"text":85830},{"id":85838,"depth":92,"text":85839},{"id":85860,"depth":92,"text":85861,"children":93769},[93770,93771,93772,93773,93774,93775,93776,93777],{"id":85864,"depth":112,"text":85865},{"id":86125,"depth":112,"text":86126},{"id":86311,"depth":112,"text":86312},{"id":86678,"depth":112,"text":86679},{"id":86794,"depth":112,"text":86795},{"id":86830,"depth":112,"text":86831},{"id":86877,"depth":112,"text":86878},{"id":86911,"depth":112,"text":86912},{"id":88274,"depth":92,"text":88275,"children":93779},[93780,93781],{"id":88278,"depth":112,"text":88279},{"id":88315,"depth":112,"text":88316},{"id":89670,"depth":92,"text":89671},{"id":90041,"depth":92,"text":90042,"children":93784},[93785,93786],{"id":90045,"depth":112,"text":90046},{"id":90079,"depth":112,"text":90080},{"id":90808,"depth":92,"text":90809,"children":93788},[93789,93790,93791,93792],{"id":90812,"depth":112,"text":90813},{"id":91770,"depth":112,"text":91771},{"id":92712,"depth":112,"text":92713},{"id":92786,"depth":112,"text":92787},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77655,"description":24350},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93799,"title":93800,"body":93801,"description":93812,"extension":1203,"meta":93813,"navigation":121,"path":93815,"seo":93816,"stem":93817,"__hash__":93818},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93802,"toc":93810},[93803],[19,93804,93805,93806],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[922,93807,93808],{"href":93808,"rel":93809},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24839],{"title":35,"searchDepth":92,"depth":92,"links":93811},[],"三件套第三套学习",{"category":93814},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93800,"description":93812},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93820,"title":93821,"body":93822,"description":24350,"extension":1203,"meta":93927,"navigation":121,"path":93928,"seo":93929,"stem":93930,"__hash__":93931},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93823,"toc":93922},[93824,93831,93834,93837,93840,93844,93853,93856,93859,93863,93872,93875,93879,93882,93902,93905,93919],[19,93825,93826],{},[922,93827,93830],{"href":93828,"rel":93829},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24839],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93832,93821],{"id":93833},"_1安装",[19,93835,93836],{},"numpy是科学计算基础库,底层是C语言",[19,93838,93839],{},"三种方式：",[14,93841,93843],{"id":93842},"_11-通过pip安装","1.1 通过pip安装",[30,93845,93847],{"className":31353,"code":93846,"language":31355,"meta":35,"style":35},"pip install numpy\n",[26,93848,93849],{"__ignoreMap":35},[39,93850,93851],{"class":41,"line":42},[39,93852,93846],{"class":53},[19,93854,93855],{},"首选方式，自动处理依赖项",[19,93857,93858],{},"在提示系统命令符中使用cmd",[14,93860,93862],{"id":93861},"_12-通过anaconda安装","1.2 通过Anaconda安装",[30,93864,93866],{"className":31353,"code":93865,"language":31355,"meta":35,"style":35},"conda install numpy\n",[26,93867,93868],{"__ignoreMap":35},[39,93869,93870],{"class":41,"line":42},[39,93871,93865],{"class":53},[19,93873,93874],{},"自动解决环境依赖",[14,93876,93878],{"id":93877},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93880,93881],{},"对于Debian\u002FUbuntu",[30,93883,93885],{"className":31353,"code":93884,"language":31355,"meta":35,"style":35},"sudo apt-get install python3-numpy\n",[26,93886,93887],{"__ignoreMap":35},[39,93888,93889,93892,93894,93897,93899],{"class":41,"line":42},[39,93890,93891],{"class":53},"sudo apt",[39,93893,1793],{"class":45},[39,93895,93896],{"class":53},"get install python3",[39,93898,1793],{"class":45},[39,93900,93901],{"class":53},"numpy\n",[19,93903,93904],{},"对于Fedora:",[30,93906,93908],{"className":31353,"code":93907,"language":31355,"meta":35,"style":35},"sudo dnf install python3-numpy\n",[26,93909,93910],{"__ignoreMap":35},[39,93911,93912,93915,93917],{"class":41,"line":42},[39,93913,93914],{"class":53},"sudo dnf install python3",[39,93916,1793],{"class":45},[39,93918,93901],{"class":53},[1192,93920,93921],{},"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":92,"depth":92,"links":93923},[93924,93925,93926],{"id":93842,"depth":92,"text":93843},{"id":93861,"depth":92,"text":93862},{"id":93877,"depth":92,"text":93878},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93821,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93933,"title":93934,"body":93935,"description":24350,"extension":1203,"meta":94048,"navigation":121,"path":94049,"seo":94050,"stem":94051,"__hash__":94052},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93936,"toc":94046},[93937,93940,93943,93946,93949,93952,93955,93958,93961,93964,94040,94043],[10,93938,93934],{"id":93939},"_10算数函数",[19,93941,93942],{},"加减乘除运算跟python基础语法没区别",[19,93944,93945],{},"除了python那种方法外还可以使用函数",[19,93947,93948],{},"加：np.add(a,b)",[19,93950,93951],{},"减：np.subtract(a,b)",[19,93953,93954],{},"乘：np.multiply(a,b)",[19,93956,93957],{},"除：np.divide(a,b) == a\u002Fb",[19,93959,93960],{},"取余：np.mod(a,b) == a%b",[19,93962,93963],{},"必须会的用法：",[30,93965,93967],{"className":31353,"code":93966,"language":31355,"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",[26,93968,93969,93991,94012,94022,94035],{"__ignoreMap":35},[39,93970,93971,93973,93975,93978,93980,93983,93985,93987,93989],{"class":41,"line":42},[39,93972,922],{"class":53},[39,93974,1117],{"class":45},[39,93976,93977],{"class":53},"np.arange(",[39,93979,1683],{"class":74},[39,93981,93982],{"class":53},").reshape(",[39,93984,1339],{"class":74},[39,93986,426],{"class":53},[39,93988,1339],{"class":74},[39,93990,574],{"class":53},[39,93992,93993,93995,93997,94000,94002,94004,94006,94008,94010],{"class":41,"line":92},[39,93994,1528],{"class":53},[39,93996,1117],{"class":45},[39,93998,93999],{"class":53},"np.array([",[39,94001,423],{"class":74},[39,94003,426],{"class":53},[39,94005,423],{"class":74},[39,94007,426],{"class":53},[39,94009,423],{"class":74},[39,94011,5738],{"class":53},[39,94013,94014,94017,94019],{"class":41,"line":112},[39,94015,94016],{"class":53},"result",[39,94018,1117],{"class":45},[39,94020,94021],{"class":53},"np.empty_like(a)\n",[39,94023,94024,94027,94030,94032],{"class":41,"line":118},[39,94025,94026],{"class":53},"np.add(a,b,",[39,94028,94029],{"class":59},"out",[39,94031,1117],{"class":45},[39,94033,94034],{"class":53},"result)\n",[39,94036,94037],{"class":41,"line":125},[39,94038,94039],{"class":53},"result\n",[19,94041,94042],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1192,94044,94045],{},"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":92,"depth":92,"links":94047},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93934,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94054,"title":94055,"body":94056,"description":24350,"extension":1203,"meta":94818,"navigation":121,"path":94819,"seo":94820,"stem":94821,"__hash__":94822},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94057,"toc":94805},[94058,94061,94064,94067,94071,94110,94114,94158,94218,94222,94225,94264,94267,94312,94316,94352,94356,94425,94429,94493,94497,94500,94503,94506,94509,94545,94549,94589,94593,94665,94668,94672,94735,94739,94802],[10,94059,94055],{"id":94060},"_11统计函数",[19,94062,94063],{},"sum max min mean",[19,94065,94066],{},"这些有axis参数，可以指定方向",[14,94068,94070],{"id":94069},"_111-sum求和函数","11.1 sum()求和函数",[30,94072,94074],{"className":31353,"code":94073,"language":31355,"meta":35,"style":35},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[26,94075,94076,94081,94102],{"__ignoreMap":35},[39,94077,94078],{"class":41,"line":42},[39,94079,94080],{"class":128},"#创建一维数组\n",[39,94082,94083,94085,94087,94090,94092,94094,94096,94098,94100],{"class":41,"line":92},[39,94084,922],{"class":53},[39,94086,1117],{"class":45},[39,94088,94089],{"class":53},"np.random.randint(",[39,94091,1483],{"class":74},[39,94093,426],{"class":53},[39,94095,278],{"class":74},[39,94097,426],{"class":53},[39,94099,248],{"class":74},[39,94101,574],{"class":53},[39,94103,94104,94107],{"class":41,"line":112},[39,94105,94106],{"class":53},"np.sum(a)",[39,94108,94109],{"class":128},"#求和\n",[14,94111,94113],{"id":94112},"_112-max求最大值函数","11.2 max()求最大值函数",[30,94115,94117],{"className":31353,"code":94116,"language":31355,"meta":35,"style":35},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[26,94118,94119,94123,94143,94148,94153],{"__ignoreMap":35},[39,94120,94121],{"class":41,"line":42},[39,94122,94080],{"class":128},[39,94124,94125,94127,94129,94131,94133,94135,94137,94139,94141],{"class":41,"line":92},[39,94126,922],{"class":53},[39,94128,1117],{"class":45},[39,94130,94089],{"class":53},[39,94132,1483],{"class":74},[39,94134,426],{"class":53},[39,94136,278],{"class":74},[39,94138,426],{"class":53},[39,94140,248],{"class":74},[39,94142,574],{"class":53},[39,94144,94145],{"class":41,"line":112},[39,94146,94147],{"class":53},"np.max(a)\n",[39,94149,94150],{"class":41,"line":118},[39,94151,94152],{"class":128},"#最大索引(求最大元素的索引)arg\n",[39,94154,94155],{"class":41,"line":125},[39,94156,94157],{"class":53},"np.argmax(a)\n",[30,94159,94161],{"className":31353,"code":94160,"language":31355,"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",[26,94162,94163,94184,94204,94208],{"__ignoreMap":35},[39,94164,94165,94167,94169,94172,94174,94176,94178,94180,94182],{"class":41,"line":42},[39,94166,11981],{"class":53},[39,94168,1117],{"class":45},[39,94170,94171],{"class":53}," np.array([",[39,94173,1483],{"class":74},[39,94175,63],{"class":53},[39,94177,1583],{"class":74},[39,94179,63],{"class":53},[39,94181,1339],{"class":74},[39,94183,5738],{"class":53},[39,94185,94186,94188,94190,94192,94194,94196,94198,94200,94202],{"class":41,"line":92},[39,94187,12007],{"class":53},[39,94189,1117],{"class":45},[39,94191,94171],{"class":53},[39,94193,1339],{"class":74},[39,94195,63],{"class":53},[39,94197,1345],{"class":74},[39,94199,63],{"class":53},[39,94201,1558],{"class":74},[39,94203,5738],{"class":53},[39,94205,94206],{"class":41,"line":112},[39,94207,122],{"emptyLinePlaceholder":121},[39,94209,94210,94212,94215],{"class":41,"line":118},[39,94211,31390],{"class":74},[39,94213,94214],{"class":53},"(np.maximum(a, b))   ",[39,94216,94217],{"class":128},"# [3 5 4]，每个位置上取较大值\n",[14,94219,94221],{"id":94220},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,94223,94224],{},"①一维数组：",[30,94226,94228],{"className":31353,"code":94227,"language":31355,"meta":35,"style":35},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[26,94229,94230,94234,94254,94259],{"__ignoreMap":35},[39,94231,94232],{"class":41,"line":42},[39,94233,94080],{"class":128},[39,94235,94236,94238,94240,94242,94244,94246,94248,94250,94252],{"class":41,"line":92},[39,94237,922],{"class":53},[39,94239,1117],{"class":45},[39,94241,94089],{"class":53},[39,94243,1483],{"class":74},[39,94245,426],{"class":53},[39,94247,278],{"class":74},[39,94249,426],{"class":53},[39,94251,248],{"class":74},[39,94253,574],{"class":53},[39,94255,94256],{"class":41,"line":112},[39,94257,94258],{"class":128},"#求平均值\n",[39,94260,94261],{"class":41,"line":118},[39,94262,94263],{"class":53},"np.mean(a)\n",[19,94265,94266],{},"②二维数组",[30,94268,94270],{"className":31353,"code":94269,"language":31355,"meta":35,"style":35},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[26,94271,94272,94277,94302,94307],{"__ignoreMap":35},[39,94273,94274],{"class":41,"line":42},[39,94275,94276],{"class":128},"#二维数组\n",[39,94278,94279,94282,94284,94286,94288,94290,94292,94294,94296,94298,94300],{"class":41,"line":92},[39,94280,94281],{"class":53},"aa",[39,94283,1117],{"class":45},[39,94285,93977],{"class":53},[39,94287,1483],{"class":74},[39,94289,426],{"class":53},[39,94291,1784],{"class":74},[39,94293,93982],{"class":53},[39,94295,1339],{"class":74},[39,94297,426],{"class":53},[39,94299,1558],{"class":74},[39,94301,574],{"class":53},[39,94303,94304],{"class":41,"line":112},[39,94305,94306],{"class":128},"#对数组中的所有数求平均\n",[39,94308,94309],{"class":41,"line":118},[39,94310,94311],{"class":53},"np.mean(aa)\n",[14,94313,94315],{"id":94314},"_114-median求中位数函数","11.4 median()求中位数函数",[30,94317,94319],{"className":31353,"code":94318,"language":31355,"meta":35,"style":35},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[26,94320,94321,94326,94342,94347],{"__ignoreMap":35},[39,94322,94323],{"class":41,"line":42},[39,94324,94325],{"class":128},"#求中位数\n",[39,94327,94328,94330,94332,94334,94336,94338,94340],{"class":41,"line":92},[39,94329,1528],{"class":53},[39,94331,1117],{"class":45},[39,94333,93977],{"class":53},[39,94335,1483],{"class":74},[39,94337,426],{"class":53},[39,94339,423],{"class":74},[39,94341,574],{"class":53},[39,94343,94344],{"class":41,"line":112},[39,94345,94346],{"class":53},"np.median(b)\n",[39,94348,94349],{"class":41,"line":118},[39,94350,94351],{"class":128},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94353,94355],{"id":94354},"_115-power求幂运算函数","11.5 power()求幂运算函数",[30,94357,94359],{"className":31353,"code":94358,"language":31355,"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",[26,94360,94361,94377,94382,94387,94396,94401,94410],{"__ignoreMap":35},[39,94362,94363,94365,94367,94369,94371,94373,94375],{"class":41,"line":42},[39,94364,1528],{"class":53},[39,94366,1117],{"class":45},[39,94368,93977],{"class":53},[39,94370,1483],{"class":74},[39,94372,426],{"class":53},[39,94374,423],{"class":74},[39,94376,574],{"class":53},[39,94378,94379],{"class":41,"line":92},[39,94380,94381],{"class":128},"#幂运算\n",[39,94383,94384],{"class":41,"line":112},[39,94385,94386],{"class":128},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[39,94388,94389,94392,94394],{"class":41,"line":118},[39,94390,94391],{"class":53},"np.power(b,",[39,94393,1345],{"class":74},[39,94395,574],{"class":53},[39,94397,94398],{"class":41,"line":125},[39,94399,94400],{"class":128},"#或者以下代码，将数据存储起来\n",[39,94402,94403,94405,94407],{"class":41,"line":132},[39,94404,2105],{"class":53},[39,94406,1117],{"class":45},[39,94408,94409],{"class":53},"np.empty_like(b)\n",[39,94411,94412,94414,94416,94418,94420,94422],{"class":41,"line":138},[39,94413,94391],{"class":53},[39,94415,1345],{"class":74},[39,94417,426],{"class":53},[39,94419,94029],{"class":59},[39,94421,1117],{"class":45},[39,94423,94424],{"class":53},"y)\n",[14,94426,94428],{"id":94427},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[30,94430,94432],{"className":31353,"code":94431,"language":31355,"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",[26,94433,94434,94450,94455,94460,94464,94482],{"__ignoreMap":35},[39,94435,94436,94438,94440,94442,94444,94446,94448],{"class":41,"line":42},[39,94437,1528],{"class":53},[39,94439,1117],{"class":45},[39,94441,93977],{"class":53},[39,94443,1483],{"class":74},[39,94445,426],{"class":53},[39,94447,423],{"class":74},[39,94449,574],{"class":53},[39,94451,94452],{"class":41,"line":92},[39,94453,94454],{"class":128},"#开方\n",[39,94456,94457],{"class":41,"line":112},[39,94458,94459],{"class":53},"np.sqrt(b)\n",[39,94461,94462],{"class":41,"line":118},[39,94463,94400],{"class":128},[39,94465,94466,94468,94470,94473,94476,94478,94480],{"class":41,"line":125},[39,94467,2105],{"class":53},[39,94469,1117],{"class":45},[39,94471,94472],{"class":53},"np.empty_like(b,",[39,94474,94475],{"class":59},"dtype",[39,94477,1117],{"class":45},[39,94479,1311],{"class":74},[39,94481,574],{"class":53},[39,94483,94484,94487,94489,94491],{"class":41,"line":132},[39,94485,94486],{"class":53},"np.sqrt(b,",[39,94488,94029],{"class":59},[39,94490,1117],{"class":45},[39,94492,94424],{"class":53},[14,94494,94496],{"id":94495},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,94498,94499],{},"对数组中的元素累计求和，可指定轴",[19,94501,94502],{},"#累计求和的意思是：",[19,94504,94505],{},"a = np.array([1, 2, 3, 4])",[19,94507,94508],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[30,94510,94512],{"className":31353,"code":94511,"language":31355,"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",[26,94513,94514,94530,94535,94540],{"__ignoreMap":35},[39,94515,94516,94518,94520,94522,94524,94526,94528],{"class":41,"line":42},[39,94517,1528],{"class":53},[39,94519,1117],{"class":45},[39,94521,93977],{"class":53},[39,94523,1483],{"class":74},[39,94525,426],{"class":53},[39,94527,423],{"class":74},[39,94529,574],{"class":53},[39,94531,94532],{"class":41,"line":92},[39,94533,94534],{"class":53},"np.cumsum(b)\n",[39,94536,94537],{"class":41,"line":112},[39,94538,94539],{"class":128},"#结果：\n",[39,94541,94542],{"class":41,"line":118},[39,94543,94544],{"class":128},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94546,94548],{"id":94547},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[30,94550,94552],{"className":31353,"code":94551,"language":31355,"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",[26,94553,94554,94570,94575,94580,94584],{"__ignoreMap":35},[39,94555,94556,94558,94560,94562,94564,94566,94568],{"class":41,"line":42},[39,94557,1528],{"class":53},[39,94559,1117],{"class":45},[39,94561,93977],{"class":53},[39,94563,1483],{"class":74},[39,94565,426],{"class":53},[39,94567,423],{"class":74},[39,94569,574],{"class":53},[39,94571,94572],{"class":41,"line":92},[39,94573,94574],{"class":128},"#对数组中的元素累计求积，可指定轴\n",[39,94576,94577],{"class":41,"line":112},[39,94578,94579],{"class":53},"np.cumprod(b)\n",[39,94581,94582],{"class":41,"line":118},[39,94583,94539],{"class":128},[39,94585,94586],{"class":41,"line":125},[39,94587,94588],{"class":128},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94590,94592],{"id":94591},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[30,94594,94596],{"className":31353,"code":94595,"language":31355,"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",[26,94597,94598,94603,94651,94656,94660],{"__ignoreMap":35},[39,94599,94600],{"class":41,"line":42},[39,94601,94602],{"class":128},"#删除数组中的重复数据，并对数据进行排序\n",[39,94604,94605,94607,94609,94611,94613,94615,94617,94619,94621,94623,94625,94627,94629,94631,94633,94635,94637,94639,94641,94643,94645,94647,94649],{"class":41,"line":92},[39,94606,922],{"class":53},[39,94608,1117],{"class":45},[39,94610,93999],{"class":53},[39,94612,1483],{"class":74},[39,94614,426],{"class":53},[39,94616,1345],{"class":74},[39,94618,426],{"class":53},[39,94620,1339],{"class":74},[39,94622,426],{"class":53},[39,94624,1759],{"class":74},[39,94626,426],{"class":53},[39,94628,1339],{"class":74},[39,94630,426],{"class":53},[39,94632,423],{"class":74},[39,94634,426],{"class":53},[39,94636,1463],{"class":74},[39,94638,426],{"class":53},[39,94640,1457],{"class":74},[39,94642,426],{"class":53},[39,94644,2035],{"class":74},[39,94646,426],{"class":53},[39,94648,1558],{"class":74},[39,94650,5738],{"class":53},[39,94652,94653],{"class":41,"line":112},[39,94654,94655],{"class":53},"np.unique(a)\n",[39,94657,94658],{"class":41,"line":118},[39,94659,94539],{"class":128},[39,94661,94662],{"class":41,"line":125},[39,94663,94664],{"class":128},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,94666,94667],{},"升序形式排序",[14,94669,94671],{"id":94670},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[30,94673,94675],{"className":31353,"code":94674,"language":31355,"meta":35,"style":35},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[26,94676,94677,94725,94730],{"__ignoreMap":35},[39,94678,94679,94681,94683,94685,94687,94689,94691,94693,94695,94697,94699,94701,94703,94705,94707,94709,94711,94713,94715,94717,94719,94721,94723],{"class":41,"line":42},[39,94680,922],{"class":53},[39,94682,1117],{"class":45},[39,94684,93999],{"class":53},[39,94686,1483],{"class":74},[39,94688,426],{"class":53},[39,94690,1345],{"class":74},[39,94692,426],{"class":53},[39,94694,1339],{"class":74},[39,94696,426],{"class":53},[39,94698,1759],{"class":74},[39,94700,426],{"class":53},[39,94702,1339],{"class":74},[39,94704,426],{"class":53},[39,94706,423],{"class":74},[39,94708,426],{"class":53},[39,94710,1463],{"class":74},[39,94712,426],{"class":53},[39,94714,1457],{"class":74},[39,94716,426],{"class":53},[39,94718,2035],{"class":74},[39,94720,426],{"class":53},[39,94722,1558],{"class":74},[39,94724,5738],{"class":53},[39,94726,94727],{"class":41,"line":92},[39,94728,94729],{"class":128},"#返回数组中非零元素的索引\n",[39,94731,94732],{"class":41,"line":112},[39,94733,94734],{"class":53},"np.nonzero(a)\n",[14,94736,94738],{"id":94737},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[30,94740,94742],{"className":31353,"code":94741,"language":31355,"meta":35,"style":35},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[26,94743,94744,94792,94797],{"__ignoreMap":35},[39,94745,94746,94748,94750,94752,94754,94756,94758,94760,94762,94764,94766,94768,94770,94772,94774,94776,94778,94780,94782,94784,94786,94788,94790],{"class":41,"line":42},[39,94747,922],{"class":53},[39,94749,1117],{"class":45},[39,94751,93999],{"class":53},[39,94753,1483],{"class":74},[39,94755,426],{"class":53},[39,94757,1345],{"class":74},[39,94759,426],{"class":53},[39,94761,1339],{"class":74},[39,94763,426],{"class":53},[39,94765,1759],{"class":74},[39,94767,426],{"class":53},[39,94769,1339],{"class":74},[39,94771,426],{"class":53},[39,94773,423],{"class":74},[39,94775,426],{"class":53},[39,94777,1463],{"class":74},[39,94779,426],{"class":53},[39,94781,1457],{"class":74},[39,94783,426],{"class":53},[39,94785,2035],{"class":74},[39,94787,426],{"class":53},[39,94789,1558],{"class":74},[39,94791,5738],{"class":53},[39,94793,94794],{"class":41,"line":92},[39,94795,94796],{"class":128},"#计算一组数中最大值与最小值的差，可指定轴\n",[39,94798,94799],{"class":41,"line":112},[39,94800,94801],{"class":53},"np.ptp(a)\n",[1192,94803,94804],{},"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":92,"depth":92,"links":94806},[94807,94808,94809,94810,94811,94812,94813,94814,94815,94816,94817],{"id":94069,"depth":92,"text":94070},{"id":94112,"depth":92,"text":94113},{"id":94220,"depth":92,"text":94221},{"id":94314,"depth":92,"text":94315},{"id":94354,"depth":92,"text":94355},{"id":94427,"depth":92,"text":94428},{"id":94495,"depth":92,"text":94496},{"id":94547,"depth":92,"text":94548},{"id":94591,"depth":92,"text":94592},{"id":94670,"depth":92,"text":94671},{"id":94737,"depth":92,"text":94738},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94055,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94824,"title":94825,"body":94826,"description":24350,"extension":1203,"meta":95481,"navigation":121,"path":95482,"seo":95483,"stem":95484,"__hash__":95485},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94827,"toc":95469},[94828,94831,94835,94838,95054,95058,95061,95270,95274,95340,95345,95349,95352,95355,95393,95397,95400,95405,95409,95412,95415,95420,95424,95427,95431,95434,95437,95442,95446,95449,95452,95457,95461,95466],[10,94829,94825],{"id":94830},"_12其他常用函数",[14,94832,94834],{"id":94833},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94836,94837],{},"将数组的数据按照行列复制扩展",[30,94839,94841],{"className":31353,"code":94840,"language":31355,"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",[26,94842,94843,94859,94868,94872,94877,94882,94895,94899,94904,94909,94914,94918,94923,94947,94959,94963,94967,94972,94977,94982,94987,94991,95004,95008,95012,95017,95022,95027,95032,95037,95041,95045,95050],{"__ignoreMap":35},[39,94844,94845,94847,94849,94851,94853,94855,94857],{"class":41,"line":42},[39,94846,922],{"class":53},[39,94848,1117],{"class":45},[39,94850,93977],{"class":53},[39,94852,1483],{"class":74},[39,94854,426],{"class":53},[39,94856,1583],{"class":74},[39,94858,574],{"class":53},[39,94860,94861,94864,94866],{"class":41,"line":92},[39,94862,94863],{"class":53},"np.tile(a,",[39,94865,1345],{"class":74},[39,94867,574],{"class":53},[39,94869,94870],{"class":41,"line":112},[39,94871,94539],{"class":128},[39,94873,94874],{"class":41,"line":118},[39,94875,94876],{"class":128},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[39,94878,94879],{"class":41,"line":125},[39,94880,94881],{"class":128},"#行复制两次，列复制三次\n",[39,94883,94884,94887,94889,94891,94893],{"class":41,"line":132},[39,94885,94886],{"class":53},"np.tile(a,(",[39,94888,1345],{"class":74},[39,94890,426],{"class":53},[39,94892,1339],{"class":74},[39,94894,31472],{"class":53},[39,94896,94897],{"class":41,"line":138},[39,94898,94539],{"class":128},[39,94900,94901],{"class":41,"line":169},[39,94902,94903],{"class":237},"'''\n",[39,94905,94906],{"class":41,"line":190},[39,94907,94908],{"class":237},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[39,94910,94911],{"class":41,"line":202},[39,94912,94913],{"class":237},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[39,94915,94916],{"class":41,"line":207},[39,94917,94903],{"class":237},[39,94919,94920],{"class":41,"line":212},[39,94921,94922],{"class":128},"#创建二维数组\n",[39,94924,94925,94927,94929,94931,94933,94935,94937,94939,94941,94943,94945],{"class":41,"line":223},[39,94926,94281],{"class":53},[39,94928,1117],{"class":45},[39,94930,93977],{"class":53},[39,94932,1483],{"class":74},[39,94934,426],{"class":53},[39,94936,1784],{"class":74},[39,94938,93982],{"class":53},[39,94940,1558],{"class":74},[39,94942,426],{"class":53},[39,94944,1339],{"class":74},[39,94946,574],{"class":53},[39,94948,94949,94952,94954,94956],{"class":41,"line":228},[39,94950,94951],{"class":53},"np.tile(aa,",[39,94953,1345],{"class":74},[39,94955,1692],{"class":53},[39,94957,94958],{"class":128},"#一个数的时候就是行\n",[39,94960,94961],{"class":41,"line":263},[39,94962,94539],{"class":128},[39,94964,94965],{"class":41,"line":287},[39,94966,94903],{"class":237},[39,94968,94969],{"class":41,"line":292},[39,94970,94971],{"class":237},"array([[ 1,  2,  3,  1,  2,  3],\n",[39,94973,94974],{"class":41,"line":305},[39,94975,94976],{"class":237},"       [ 4,  5,  6,  4,  5,  6],\n",[39,94978,94979],{"class":41,"line":310},[39,94980,94981],{"class":237},"       [ 7,  8,  9,  7,  8,  9],\n",[39,94983,94984],{"class":41,"line":321},[39,94985,94986],{"class":237},"       [10, 11, 12, 10, 11, 12]])\n",[39,94988,94989],{"class":41,"line":713},[39,94990,94903],{"class":237},[39,94992,94993,94996,94998,95000,95002],{"class":41,"line":718},[39,94994,94995],{"class":53},"np.tile(aa,(",[39,94997,1345],{"class":74},[39,94999,426],{"class":53},[39,95001,1339],{"class":74},[39,95003,31472],{"class":53},[39,95005,95006],{"class":41,"line":723},[39,95007,94539],{"class":128},[39,95009,95010],{"class":41,"line":729},[39,95011,94903],{"class":237},[39,95013,95014],{"class":41,"line":735},[39,95015,95016],{"class":237},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[39,95018,95019],{"class":41,"line":741},[39,95020,95021],{"class":237},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[39,95023,95024],{"class":41,"line":747},[39,95025,95026],{"class":237},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[39,95028,95029],{"class":41,"line":753},[39,95030,95031],{"class":237},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[39,95033,95034],{"class":41,"line":758},[39,95035,95036],{"class":237},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[39,95038,95039],{"class":41,"line":763},[39,95040,95021],{"class":237},[39,95042,95043],{"class":41,"line":772},[39,95044,95026],{"class":237},[39,95046,95047],{"class":41,"line":777},[39,95048,95049],{"class":237},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[39,95051,95052],{"class":41,"line":785},[39,95053,94903],{"class":237},[14,95055,95057],{"id":95056},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95059,95060],{},"repeat()将数组中的每个元素重复若干次",[30,95062,95064],{"className":31353,"code":95063,"language":31355,"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",[26,95065,95066,95082,95091,95095,95100,95124,95129,95138,95142,95147,95151,95156,95172,95176,95180,95185,95190,95195,95199,95204,95208,95213,95218,95222,95238,95242,95246,95251,95256,95261,95266],{"__ignoreMap":35},[39,95067,95068,95070,95072,95074,95076,95078,95080],{"class":41,"line":42},[39,95069,922],{"class":53},[39,95071,1117],{"class":45},[39,95073,93977],{"class":53},[39,95075,1483],{"class":74},[39,95077,426],{"class":53},[39,95079,1583],{"class":74},[39,95081,574],{"class":53},[39,95083,95084,95087,95089],{"class":41,"line":92},[39,95085,95086],{"class":53},"np.repeat(a,",[39,95088,1339],{"class":74},[39,95090,574],{"class":53},[39,95092,95093],{"class":41,"line":112},[39,95094,94539],{"class":128},[39,95096,95097],{"class":41,"line":118},[39,95098,95099],{"class":128},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[39,95101,95102,95104,95106,95108,95110,95112,95114,95116,95118,95120,95122],{"class":41,"line":125},[39,95103,94281],{"class":53},[39,95105,1117],{"class":45},[39,95107,93977],{"class":53},[39,95109,1483],{"class":74},[39,95111,426],{"class":53},[39,95113,1784],{"class":74},[39,95115,93982],{"class":53},[39,95117,1558],{"class":74},[39,95119,426],{"class":53},[39,95121,1339],{"class":74},[39,95123,574],{"class":53},[39,95125,95126],{"class":41,"line":132},[39,95127,95128],{"class":128},"#这个重复之后二维变成一维\n",[39,95130,95131,95134,95136],{"class":41,"line":138},[39,95132,95133],{"class":53},"np.repeat(aa,",[39,95135,1345],{"class":74},[39,95137,574],{"class":53},[39,95139,95140],{"class":41,"line":169},[39,95141,94903],{"class":237},[39,95143,95144],{"class":41,"line":190},[39,95145,95146],{"class":237},"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",[39,95148,95149],{"class":41,"line":202},[39,95150,94903],{"class":237},[39,95152,95153],{"class":41,"line":207},[39,95154,95155],{"class":128},"#指定axis\n",[39,95157,95158,95160,95162,95164,95166,95168,95170],{"class":41,"line":212},[39,95159,95133],{"class":53},[39,95161,1345],{"class":74},[39,95163,426],{"class":53},[39,95165,48489],{"class":59},[39,95167,1117],{"class":45},[39,95169,1457],{"class":74},[39,95171,574],{"class":53},[39,95173,95174],{"class":41,"line":223},[39,95175,94539],{"class":128},[39,95177,95178],{"class":41,"line":228},[39,95179,94903],{"class":237},[39,95181,95182],{"class":41,"line":263},[39,95183,95184],{"class":237},"array([[ 1,  2,  3],\n",[39,95186,95187],{"class":41,"line":287},[39,95188,95189],{"class":237},"       [ 1,  2,  3],\n",[39,95191,95192],{"class":41,"line":292},[39,95193,95194],{"class":237},"       [ 4,  5,  6],\n",[39,95196,95197],{"class":41,"line":305},[39,95198,95194],{"class":237},[39,95200,95201],{"class":41,"line":310},[39,95202,95203],{"class":237},"       [ 7,  8,  9],\n",[39,95205,95206],{"class":41,"line":321},[39,95207,95203],{"class":237},[39,95209,95210],{"class":41,"line":713},[39,95211,95212],{"class":237},"       [10, 11, 12],\n",[39,95214,95215],{"class":41,"line":718},[39,95216,95217],{"class":237},"       [10, 11, 12]])\n",[39,95219,95220],{"class":41,"line":723},[39,95221,94903],{"class":237},[39,95223,95224,95226,95228,95230,95232,95234,95236],{"class":41,"line":729},[39,95225,95133],{"class":53},[39,95227,1345],{"class":74},[39,95229,426],{"class":53},[39,95231,48489],{"class":59},[39,95233,1117],{"class":45},[39,95235,1483],{"class":74},[39,95237,574],{"class":53},[39,95239,95240],{"class":41,"line":735},[39,95241,94539],{"class":128},[39,95243,95244],{"class":41,"line":741},[39,95245,94903],{"class":237},[39,95247,95248],{"class":41,"line":747},[39,95249,95250],{"class":237},"array([[ 1,  1,  2,  2,  3,  3],\n",[39,95252,95253],{"class":41,"line":753},[39,95254,95255],{"class":237},"       [ 4,  4,  5,  5,  6,  6],\n",[39,95257,95258],{"class":41,"line":758},[39,95259,95260],{"class":237},"       [ 7,  7,  8,  8,  9,  9],\n",[39,95262,95263],{"class":41,"line":763},[39,95264,95265],{"class":237},"       [10, 10, 11, 11, 12, 12]])\n",[39,95267,95268],{"class":41,"line":772},[39,95269,94903],{"class":237},[14,95271,95273],{"id":95272},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[30,95275,95277],{"className":31353,"code":95276,"language":31355,"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",[26,95278,95279,95295,95300,95312,95316,95321,95331,95335],{"__ignoreMap":35},[39,95280,95281,95283,95285,95287,95289,95291,95293],{"class":41,"line":42},[39,95282,922],{"class":53},[39,95284,1117],{"class":45},[39,95286,93977],{"class":53},[39,95288,1483],{"class":74},[39,95290,426],{"class":53},[39,95292,1583],{"class":74},[39,95294,574],{"class":53},[39,95296,95297],{"class":41,"line":92},[39,95298,95299],{"class":128},"#array([，2，3，4])\n",[39,95301,95302,95305,95307,95309],{"class":41,"line":112},[39,95303,95304],{"class":53},"np.roll(a,",[39,95306,1345],{"class":74},[39,95308,1692],{"class":53},[39,95310,95311],{"class":128},"#传正数向后调多少位，传负数向前调多少位\n",[39,95313,95314],{"class":41,"line":118},[39,95315,94539],{"class":128},[39,95317,95318],{"class":41,"line":125},[39,95319,95320],{"class":128},"#array([3, 4, 1, 2])\n",[39,95322,95323,95325,95327,95329],{"class":41,"line":132},[39,95324,95304],{"class":53},[39,95326,1793],{"class":45},[39,95328,1483],{"class":74},[39,95330,574],{"class":53},[39,95332,95333],{"class":41,"line":138},[39,95334,94539],{"class":128},[39,95336,95337],{"class":41,"line":169},[39,95338,95339],{"class":128},"#array([2, 3, 4, 1])\n",[19,95341,95342],{},[2585,95343],{"alt":35,"src":95344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95346,95348],{"id":95347},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,95350,95351],{},"resize()重新调整数组的大小",[19,95353,95354],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[30,95356,95358],{"className":31353,"code":95357,"language":31355,"meta":35,"style":35},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[26,95359,95360,95365,95378],{"__ignoreMap":35},[39,95361,95362],{"class":41,"line":42},[39,95363,95364],{"class":128},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[39,95366,95367,95370,95372,95374,95376],{"class":41,"line":92},[39,95368,95369],{"class":53},"np.resize(aa,(",[39,95371,1345],{"class":74},[39,95373,426],{"class":53},[39,95375,1608],{"class":74},[39,95377,31472],{"class":53},[39,95379,95380,95382,95384,95386,95388,95390],{"class":41,"line":112},[39,95381,95369],{"class":53},[39,95383,1345],{"class":74},[39,95385,426],{"class":53},[39,95387,1683],{"class":74},[39,95389,83746],{"class":53},[39,95391,95392],{"class":128},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95394,95396],{"id":95395},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,95398,95399],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,95401,95402],{},[2585,95403],{"alt":35,"src":95404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95406,95408],{"id":95407},"_126-保存加载文件","12.6 保存加载文件",[19,95410,95411],{},"savetxt():将数据保存到txt文件中",[19,95413,95414],{},"loadtxt():从文件加载数据",[19,95416,95417],{},[2585,95418],{"alt":35,"src":95419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95421,95423],{"id":95422},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,95425,95426],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95428,95430],{"id":95429},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,95432,95433],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,95435,95436],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,95438,95439],{},[2585,95440],{"alt":35,"src":95441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95443,95445],{"id":95444},"_129-where语句","12.9 where语句",[19,95447,95448],{},"np.where(条件,x,y)",[19,95450,95451],{},"如果条件为True,对应值为x,否则对应值为y",[19,95453,95454],{},[2585,95455],{"alt":35,"src":95456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95458,95460],{"id":95459},"_1210-dot矩阵","12.10 dot()矩阵",[19,95462,95463],{},[2585,95464],{"alt":35,"src":95465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1192,95467,95468],{},"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":92,"depth":92,"links":95470},[95471,95472,95473,95474,95475,95476,95477,95478,95479,95480],{"id":94833,"depth":92,"text":94834},{"id":95056,"depth":92,"text":95057},{"id":95272,"depth":92,"text":95273},{"id":95347,"depth":92,"text":95348},{"id":95395,"depth":92,"text":95396},{"id":95407,"depth":92,"text":95408},{"id":95422,"depth":92,"text":95423},{"id":95429,"depth":92,"text":95430},{"id":95444,"depth":92,"text":95445},{"id":95459,"depth":92,"text":95460},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94825,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95487,"title":95488,"body":95489,"description":24350,"extension":1203,"meta":95842,"navigation":121,"path":95843,"seo":95844,"stem":95845,"__hash__":95846},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95490,"toc":95840},[95491,95494,95497,95500,95503,95506,95571,95573,95837],[10,95492,95488],{"id":95493},"_13数组排序",[19,95495,95496],{},"排序主要用到的方法是np.sort和np.argsort",[19,95498,95499],{},"其中np.sort()对数组直接排序",[19,95501,95502],{},"而np.argsort()是返回排序后的原始索引",[19,95504,95505],{},"①一维数组",[30,95507,95509],{"className":31353,"code":95508,"language":31355,"meta":35,"style":35},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[26,95510,95511,95515,95555,95563],{"__ignoreMap":35},[39,95512,95513],{"class":41,"line":42},[39,95514,94080],{"class":128},[39,95516,95517,95519,95521,95523,95525,95527,95529,95531,95533,95535,95537,95539,95541,95543,95545,95547,95549,95551,95553],{"class":41,"line":92},[39,95518,922],{"class":53},[39,95520,1117],{"class":45},[39,95522,93999],{"class":53},[39,95524,1339],{"class":74},[39,95526,426],{"class":53},[39,95528,1759],{"class":74},[39,95530,426],{"class":53},[39,95532,1658],{"class":74},[39,95534,426],{"class":53},[39,95536,2035],{"class":74},[39,95538,426],{"class":53},[39,95540,1544],{"class":74},[39,95542,426],{"class":53},[39,95544,2153],{"class":74},[39,95546,426],{"class":53},[39,95548,1608],{"class":74},[39,95550,426],{"class":53},[39,95552,423],{"class":74},[39,95554,5738],{"class":53},[39,95556,95557,95560],{"class":41,"line":112},[39,95558,95559],{"class":53},"np.sort(a)",[39,95561,95562],{"class":128},"#升序排序\n",[39,95564,95565,95568],{"class":41,"line":118},[39,95566,95567],{"class":53},"np.argsort(a)",[39,95569,95570],{"class":128},"#按照元素大小来索引排序\n",[19,95572,94266],{},[30,95574,95576],{"className":31353,"code":95575,"language":31355,"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",[26,95577,95578,95590,95616,95621,95625,95630,95635,95640,95645,95649,95657,95661,95666,95671,95676,95681,95685,95690,95703,95707,95712,95717,95722,95727,95731,95736,95748,95752,95756,95760,95764,95768,95772,95777,95792,95797,95806,95811,95815,95819,95824,95828,95833],{"__ignoreMap":35},[39,95579,95580,95583,95585,95587],{"class":41,"line":42},[39,95581,95582],{"class":53},"np.random.seed(",[39,95584,1457],{"class":74},[39,95586,1692],{"class":53},[39,95588,95589],{"class":128},"#保证每次值一样\n",[39,95591,95592,95594,95596,95598,95600,95602,95604,95606,95608,95610,95612,95614],{"class":41,"line":92},[39,95593,94281],{"class":53},[39,95595,1117],{"class":45},[39,95597,94089],{"class":53},[39,95599,278],{"class":74},[39,95601,426],{"class":53},[39,95603,32471],{"class":59},[39,95605,1117],{"class":45},[39,95607,54],{"class":53},[39,95609,1558],{"class":74},[39,95611,426],{"class":53},[39,95613,1608],{"class":74},[39,95615,31472],{"class":53},[39,95617,95618],{"class":41,"line":112},[39,95619,95620],{"class":128},"#原数组：\n",[39,95622,95623],{"class":41,"line":118},[39,95624,94903],{"class":237},[39,95626,95627],{"class":41,"line":125},[39,95628,95629],{"class":237},"array([[44, 47, 64, 67, 67,  9],\n",[39,95631,95632],{"class":41,"line":132},[39,95633,95634],{"class":237},"       [83, 21, 36, 87, 70, 88],\n",[39,95636,95637],{"class":41,"line":138},[39,95638,95639],{"class":237},"       [88, 12, 58, 65, 39, 87],\n",[39,95641,95642],{"class":41,"line":169},[39,95643,95644],{"class":237},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[39,95646,95647],{"class":41,"line":190},[39,95648,94903],{"class":237},[39,95650,95651,95654],{"class":41,"line":202},[39,95652,95653],{"class":53},"np.sort(aa)",[39,95655,95656],{"class":128},"#每行进行了排序\n",[39,95658,95659],{"class":41,"line":207},[39,95660,94903],{"class":237},[39,95662,95663],{"class":41,"line":212},[39,95664,95665],{"class":237},"array([[ 9, 44, 47, 64, 67, 67],\n",[39,95667,95668],{"class":41,"line":223},[39,95669,95670],{"class":237},"       [21, 36, 70, 83, 87, 88],\n",[39,95672,95673],{"class":41,"line":228},[39,95674,95675],{"class":237},"       [12, 39, 58, 65, 87, 88],\n",[39,95677,95678],{"class":41,"line":263},[39,95679,95680],{"class":237},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[39,95682,95683],{"class":41,"line":287},[39,95684,94903],{"class":237},[39,95686,95687],{"class":41,"line":292},[39,95688,95689],{"class":128},"#axis=0时\n",[39,95691,95692,95695,95697,95699,95701],{"class":41,"line":305},[39,95693,95694],{"class":53},"np.sort(aa,",[39,95696,48489],{"class":59},[39,95698,1117],{"class":45},[39,95700,1457],{"class":74},[39,95702,574],{"class":53},[39,95704,95705],{"class":41,"line":310},[39,95706,94903],{"class":237},[39,95708,95709],{"class":41,"line":321},[39,95710,95711],{"class":237},"array([[44, 12, 36, 37, 25,  9],\n",[39,95713,95714],{"class":41,"line":713},[39,95715,95716],{"class":237},"       [46, 21, 58, 65, 39, 77],\n",[39,95718,95719],{"class":41,"line":718},[39,95720,95721],{"class":237},"       [83, 47, 64, 67, 67, 87],\n",[39,95723,95724],{"class":41,"line":723},[39,95725,95726],{"class":237},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[39,95728,95729],{"class":41,"line":729},[39,95730,94903],{"class":237},[39,95732,95733],{"class":41,"line":735},[39,95734,95735],{"class":128},"#axis=1时,为默认值\n",[39,95737,95738,95740,95742,95744,95746],{"class":41,"line":741},[39,95739,95694],{"class":53},[39,95741,48489],{"class":59},[39,95743,1117],{"class":45},[39,95745,1483],{"class":74},[39,95747,574],{"class":53},[39,95749,95750],{"class":41,"line":747},[39,95751,94903],{"class":237},[39,95753,95754],{"class":41,"line":753},[39,95755,95665],{"class":237},[39,95757,95758],{"class":41,"line":758},[39,95759,95670],{"class":237},[39,95761,95762],{"class":41,"line":763},[39,95763,95675],{"class":237},[39,95765,95766],{"class":41,"line":772},[39,95767,95680],{"class":237},[39,95769,95770],{"class":41,"line":777},[39,95771,94903],{"class":237},[39,95773,95774],{"class":41,"line":785},[39,95775,95776],{"class":128},"#按最后一列排序\n",[39,95778,95779,95781,95783,95786,95788,95790],{"class":41,"line":796},[39,95780,1528],{"class":53},[39,95782,1117],{"class":45},[39,95784,95785],{"class":53},"aa[:,",[39,95787,1793],{"class":45},[39,95789,1483],{"class":74},[39,95791,34221],{"class":53},[39,95793,95794],{"class":41,"line":808},[39,95795,95796],{"class":128},"#获取最后一列排好序的索引\n",[39,95798,95799,95801,95803],{"class":41,"line":823},[39,95800,75033],{"class":53},[39,95802,1117],{"class":45},[39,95804,95805],{"class":53},"np.argsort(b)\n",[39,95807,95808],{"class":41,"line":839},[39,95809,95810],{"class":53},"aa[index]\n",[39,95812,95813],{"class":41,"line":845},[39,95814,94903],{"class":237},[39,95816,95817],{"class":41,"line":856},[39,95818,95629],{"class":237},[39,95820,95821],{"class":41,"line":861},[39,95822,95823],{"class":237},"       [46, 88, 81, 37, 25, 77],\n",[39,95825,95826],{"class":41,"line":870},[39,95827,95639],{"class":237},[39,95829,95830],{"class":41,"line":9084},[39,95831,95832],{"class":237},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[39,95834,95835],{"class":41,"line":9090},[39,95836,94903],{"class":237},[1192,95838,95839],{},"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":92,"depth":92,"links":95841},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95488,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95848,"title":95849,"body":95850,"description":24350,"extension":1203,"meta":95880,"navigation":121,"path":95881,"seo":95882,"stem":95883,"__hash__":95884},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95851,"toc":95878},[95852,95855,95858,95861,95864,95867,95870,95873],[10,95853,95849],{"id":95854},"_14广播机制",[19,95856,95857],{},"广播的规则：",[19,95859,95860],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95862,95863],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95865,95866],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95868,95869],{},"3.如果没有维度形状为1，则会引发异常",[19,95871,95872],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95874,95875],{},[2585,95876],{"alt":35,"src":95877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":35,"searchDepth":92,"depth":92,"links":95879},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95849,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95886,"title":95887,"body":95888,"description":24350,"extension":1203,"meta":95986,"navigation":121,"path":95987,"seo":95988,"stem":95989,"__hash__":95990},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95889,"toc":95984},[95890,95893,95896,95981],[10,95891,95887],{"id":95892},"_15比较掩码",[19,95894,95895],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[30,95897,95899],{"className":31353,"code":95898,"language":31355,"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",[26,95900,95901,95947,95958,95972,95976],{"__ignoreMap":35},[39,95902,95903,95905,95907,95910,95912,95914,95916,95918,95920,95922,95924,95926,95928,95930,95932,95934,95936,95938,95940,95942,95944],{"class":41,"line":42},[39,95904,922],{"class":53},[39,95906,1117],{"class":45},[39,95908,95909],{"class":53},"np.array([[",[39,95911,1483],{"class":74},[39,95913,426],{"class":53},[39,95915,1345],{"class":74},[39,95917,426],{"class":53},[39,95919,1339],{"class":74},[39,95921,49005],{"class":53},[39,95923,1734],{"class":74},[39,95925,426],{"class":53},[39,95927,1759],{"class":74},[39,95929,426],{"class":53},[39,95931,1784],{"class":74},[39,95933,49005],{"class":53},[39,95935,1985],{"class":74},[39,95937,426],{"class":53},[39,95939,2010],{"class":74},[39,95941,426],{"class":53},[39,95943,2035],{"class":74},[39,95945,95946],{"class":53},"]])\n",[39,95948,95949,95951,95953,95955],{"class":41,"line":92},[39,95950,922],{"class":53},[39,95952,2170],{"class":45},[39,95954,248],{"class":74},[39,95956,95957],{"class":128},"#结果是一个由True,False组成的数组\n",[39,95959,95960,95963,95965,95967,95969],{"class":41,"line":112},[39,95961,95962],{"class":53},"a[a",[39,95964,2170],{"class":45},[39,95966,248],{"class":74},[39,95968,2200],{"class":53},[39,95970,95971],{"class":128},"#小于20的元素会存到这个数组中\n",[39,95973,95974],{"class":41,"line":118},[39,95975,94539],{"class":128},[39,95977,95978],{"class":41,"line":125},[39,95979,95980],{"class":128},"#array([ 1,  2,  3, 11, 12, 13])\n",[1192,95982,95983],{},"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":92,"depth":92,"links":95985},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95887,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95992,"title":95993,"body":95994,"description":24350,"extension":1203,"meta":96086,"navigation":121,"path":96087,"seo":96088,"stem":96089,"__hash__":96090},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95995,"toc":96084},[95996,95999,96002,96005,96008,96011,96076,96081],[10,95997,95993],{"id":95998},"_16魔法命令time",[19,96000,96001],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96003,96004],{},"%:行模式",[19,96006,96007],{},"%%:单元格模式",[19,96009,96010],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[30,96012,96014],{"className":31353,"code":96013,"language":31355,"meta":35,"style":35},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[26,96015,96016,96021,96028,96033,96042,96055,96059,96067],{"__ignoreMap":35},[39,96017,96018],{"class":41,"line":42},[39,96019,96020],{"class":128},"#程序执行时间\n",[39,96022,96023,96025],{"class":41,"line":92},[39,96024,31367],{"class":45},[39,96026,96027],{"class":53}," time \n",[39,96029,96030],{"class":41,"line":112},[39,96031,96032],{"class":128},"#获取时间\n",[39,96034,96035,96038,96040],{"class":41,"line":118},[39,96036,96037],{"class":53},"start",[39,96039,1117],{"class":45},[39,96041,33393],{"class":53},[39,96043,96044,96047,96050,96052],{"class":41,"line":125},[39,96045,96046],{"class":53},"time.sleep(",[39,96048,96049],{"class":74},"0.4",[39,96051,1692],{"class":53},[39,96053,96054],{"class":128},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[39,96056,96057],{"class":41,"line":132},[39,96058,96032],{"class":128},[39,96060,96061,96063,96065],{"class":41,"line":138},[39,96062,46776],{"class":53},[39,96064,1117],{"class":45},[39,96066,33393],{"class":53},[39,96068,96069,96071,96073],{"class":41,"line":169},[39,96070,46776],{"class":53},[39,96072,1793],{"class":45},[39,96074,96075],{"class":53},"start\n",[19,96077,96078],{},[2585,96079],{"alt":35,"src":96080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1192,96082,96083],{},"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":92,"depth":92,"links":96085},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95993,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96092,"title":96093,"body":96094,"description":24350,"extension":1203,"meta":96129,"navigation":121,"path":96130,"seo":96131,"stem":96132,"__hash__":96133},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96095,"toc":96127},[96096,96099,96102,96105,96108,96111,96114,96117,96122],[10,96097,96093],{"id":96098},"_17魔法命令timeit",[19,96100,96101],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96103,96104],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96106,96107],{},"单元格模式：",[19,96109,96110],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96112,96113],{},"初始化语句执行次数由轮数来决定",[19,96115,96116],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96118,96119],{},[2585,96120],{"alt":35,"src":96121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96123,96124],{},[2585,96125],{"alt":35,"src":96126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":35,"searchDepth":92,"depth":92,"links":96128},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96093,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96135,"title":96136,"body":96137,"description":24350,"extension":1203,"meta":96155,"navigation":121,"path":96156,"seo":96157,"stem":96158,"__hash__":96159},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96138,"toc":96153},[96139,96142,96145,96148],[10,96140,96136],{"id":96141},"_18魔法命令writefile和run",[19,96143,96144],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96146,96147],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96149,96150],{},[2585,96151],{"alt":35,"src":96152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":35,"searchDepth":92,"depth":92,"links":96154},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96136,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96161,"title":96162,"body":96163,"description":24350,"extension":1203,"meta":96216,"navigation":121,"path":96217,"seo":96218,"stem":96219,"__hash__":96220},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96164,"toc":96214},[96165,96168,96171,96173,96176,96179,96184,96187,96190,96193,96196,96199,96202,96205,96208,96211],[10,96166,96162],{"id":96167},"_19魔法命令memit",[19,96169,96170],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96172,25574],{},[19,96174,96175],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96177,96178],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96180,96181],{},[2585,96182],{"alt":35,"src":96183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96185,96186],{},"补充：",[19,96188,96189],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96191,96192],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96194,96195],{},"解决方法：",[19,96197,96198],{},"1.cmd",[19,96200,96201],{},"2.依次输入以下代码：",[19,96203,96204],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,96206,96207],{},"pip install --upgrade ipython",[19,96209,96210],{},"#升级 memory_profiler 和 setuptools",[19,96212,96213],{},"pip install --upgrade memory_profiler setuptools",{"title":35,"searchDepth":92,"depth":92,"links":96215},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96162,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96222,"title":96223,"body":96224,"description":24350,"extension":1203,"meta":97870,"navigation":121,"path":97871,"seo":97872,"stem":97873,"__hash__":97874},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96225,"toc":97840},[96226,96229,96233,96237,96298,96301,96306,96310,96315,96320,96325,96330,96333,96338,96342,96346,96379,96382,96385,96388,96440,96443,96479,96482,96524,96528,96549,96551,96588,96590,96595,96597,96602,96606,96609,96637,96641,96645,96698,96702,96794,96798,96802,96805,96810,96814,96839,96844,96848,96851,96854,96857,96860,96863,96866,96869,96881,96885,96889,96892,96924,96927,96950,96953,96979,96982,97008,97011,97045,97048,97110,97114,97117,97121,97124,97150,97153,97156,97161,97164,97233,97235,97240,97301,97304,97315,97321,97326,97330,97333,97346,97350,97365,97367,97390,97392,97418,97421,97424,97427,97475,97477,97482,97486,97490,97517,97521,97548,97551,97556,97561,97651,97655,97713,97718,97721,97724,97766,97770,97826,97831,97834,97837],[10,96227,96223],{"id":96228},"_2创建数组",[14,96230,96232],{"id":96231},"_21-array函数创建数组","2.1 array()函数创建数组",[476,96234,96236],{"id":96235},"_221-函数语句","2.2.1 函数语句",[30,96238,96240],{"className":31353,"code":96239,"language":31355,"meta":35,"style":35},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[26,96241,96242],{"__ignoreMap":35},[39,96243,96244,96247,96250,96252,96254,96256,96258,96260,96263,96265,96268,96270,96273,96275,96277,96279,96282,96284,96287,96289,96292,96294,96296],{"class":41,"line":42},[39,96245,96246],{"class":53},"numpy.array(",[39,96248,96249],{"class":74},"object",[39,96251,63],{"class":53},[39,96253,94475],{"class":59},[39,96255,71],{"class":45},[39,96257,39908],{"class":74},[39,96259,63],{"class":53},[39,96261,96262],{"class":59},"copy",[39,96264,71],{"class":45},[39,96266,96267],{"class":74}," True",[39,96269,63],{"class":53},[39,96271,96272],{"class":59},"order",[39,96274,71],{"class":45},[39,96276,39908],{"class":74},[39,96278,63],{"class":53},[39,96280,96281],{"class":59},"subok",[39,96283,71],{"class":45},[39,96285,96286],{"class":74}," False",[39,96288,63],{"class":53},[39,96290,96291],{"class":59},"ndmin",[39,96293,71],{"class":45},[39,96295,315],{"class":74},[39,96297,574],{"class":53},[19,96299,96300],{},"参数：",[19,96302,96303],{},[2585,96304],{"alt":35,"src":96305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[476,96307,96309],{"id":96308},"_222-实例","2.2.2 实例",[19,96311,96312],{},[2585,96313],{"alt":35,"src":96314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,96316,96317],{},[2585,96318],{"alt":35,"src":96319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,96321,96322],{},[2585,96323],{"alt":35,"src":96324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,96326,96327],{},[2585,96328],{"alt":35,"src":96329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,96331,96332],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,96334,96335],{},[2585,96336],{"alt":35,"src":96337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96339,96341],{"id":96340},"_22-随机数创建数组","2.2 随机数创建数组",[476,96343,96345],{"id":96344},"_221-random语句","2.2.1 random语句",[30,96347,96349],{"className":31353,"code":96348,"language":31355,"meta":35,"style":35},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[26,96350,96351,96356,96361,96369,96374],{"__ignoreMap":35},[39,96352,96353],{"class":41,"line":42},[39,96354,96355],{"class":128},"#random.random()\n",[39,96357,96358],{"class":41,"line":92},[39,96359,96360],{"class":128},"#确定随机种子,就是每次运行结果是相同的\n",[39,96362,96363,96365,96367],{"class":41,"line":112},[39,96364,95582],{"class":53},[39,96366,1457],{"class":74},[39,96368,574],{"class":53},[39,96370,96371],{"class":41,"line":118},[39,96372,96373],{"class":53},"np.random.random()\n",[39,96375,96376],{"class":41,"line":125},[39,96377,96378],{"class":128},"#生成一个随机的数目\n",[19,96380,96381],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,96383,96384],{},"可以指定数组形状 size",[19,96386,96387],{},"①生成一维数组",[30,96389,96391],{"className":31353,"code":96390,"language":31355,"meta":35,"style":35},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[26,96392,96393,96398,96411,96416,96432],{"__ignoreMap":35},[39,96394,96395],{"class":41,"line":42},[39,96396,96397],{"class":128},"#random.random(size())\n",[39,96399,96400,96403,96405,96407,96409],{"class":41,"line":92},[39,96401,96402],{"class":53},"np.random.random(",[39,96404,32471],{"class":59},[39,96406,1117],{"class":45},[39,96408,1583],{"class":74},[39,96410,574],{"class":53},[39,96412,96413],{"class":41,"line":112},[39,96414,96415],{"class":128},"#生成一位的五个元素\n",[39,96417,96418,96420,96422,96424,96426,96428,96430],{"class":41,"line":118},[39,96419,922],{"class":53},[39,96421,1117],{"class":45},[39,96423,96402],{"class":53},[39,96425,32471],{"class":59},[39,96427,1117],{"class":45},[39,96429,1558],{"class":74},[39,96431,574],{"class":53},[39,96433,96434,96437],{"class":41,"line":125},[39,96435,96436],{"class":53},"a.shape ",[39,96438,96439],{"class":128},"#输出数组形状\n",[19,96441,96442],{},"②生成二维数组",[30,96444,96446],{"className":31353,"code":96445,"language":31355,"meta":35,"style":35},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[26,96447,96448,96452,96474],{"__ignoreMap":35},[39,96449,96450],{"class":41,"line":42},[39,96451,94276],{"class":128},[39,96453,96454,96456,96458,96460,96462,96464,96466,96468,96470,96472],{"class":41,"line":92},[39,96455,94281],{"class":53},[39,96457,1117],{"class":45},[39,96459,96402],{"class":53},[39,96461,32471],{"class":59},[39,96463,1117],{"class":45},[39,96465,54],{"class":53},[39,96467,1558],{"class":74},[39,96469,426],{"class":53},[39,96471,1583],{"class":74},[39,96473,31472],{"class":53},[39,96475,96476],{"class":41,"line":112},[39,96477,96478],{"class":128},"#生成四行五列的数组\n",[19,96480,96481],{},"③生成三维数组",[30,96483,96485],{"className":31353,"code":96484,"language":31355,"meta":35,"style":35},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[26,96486,96487,96492,96519],{"__ignoreMap":35},[39,96488,96489],{"class":41,"line":42},[39,96490,96491],{"class":128},"#三维数组\n",[39,96493,96494,96497,96499,96501,96503,96505,96507,96509,96511,96513,96515,96517],{"class":41,"line":92},[39,96495,96496],{"class":53},"aaa",[39,96498,1117],{"class":45},[39,96500,96402],{"class":53},[39,96502,32471],{"class":59},[39,96504,1117],{"class":45},[39,96506,54],{"class":53},[39,96508,1345],{"class":74},[39,96510,426],{"class":53},[39,96512,1339],{"class":74},[39,96514,426],{"class":53},[39,96516,1558],{"class":74},[39,96518,31472],{"class":53},[39,96520,96521],{"class":41,"line":112},[39,96522,96523],{"class":53},"aaa.shape\n",[476,96525,96527],{"id":96526},"_222-randint语句","2.2.2 randint语句",[30,96529,96531],{"className":31353,"code":96530,"language":31355,"meta":35,"style":35},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[26,96532,96533,96538],{"__ignoreMap":35},[39,96534,96535],{"class":41,"line":42},[39,96536,96537],{"class":128},"#生成随机的整数 random.randint(low,high,size)\n",[39,96539,96540,96542,96544,96546],{"class":41,"line":92},[39,96541,94089],{"class":53},[39,96543,1583],{"class":74},[39,96545,255],{"class":53},[39,96547,96548],{"class":128},"#0~5中的随机一个数\n",[19,96550,96387],{},[30,96552,96554],{"className":31353,"code":96553,"language":31355,"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",[26,96555,96556,96561,96583],{"__ignoreMap":35},[39,96557,96558],{"class":41,"line":42},[39,96559,96560],{"class":128},"#一维\n",[39,96562,96563,96565,96567,96569,96571,96573,96575,96577,96579,96581],{"class":41,"line":92},[39,96564,94089],{"class":53},[39,96566,1483],{"class":74},[39,96568,426],{"class":53},[39,96570,1734],{"class":74},[39,96572,426],{"class":53},[39,96574,32471],{"class":59},[39,96576,1117],{"class":45},[39,96578,54],{"class":53},[39,96580,423],{"class":74},[39,96582,31472],{"class":53},[39,96584,96585],{"class":41,"line":112},[39,96586,96587],{"class":128},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96589,96442],{},[19,96591,96592],{},[2585,96593],{"alt":35,"src":96594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96596,96481],{},[19,96598,96599],{},[2585,96600],{"alt":35,"src":96601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[476,96603,96605],{"id":96604},"_222-rand语句","2.2.2 rand语句",[19,96607,96608],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[30,96610,96612],{"className":31353,"code":96611,"language":31355,"meta":35,"style":35},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[26,96613,96614,96627,96632],{"__ignoreMap":35},[39,96615,96616,96619,96621,96623,96625],{"class":41,"line":42},[39,96617,96618],{"class":53},"np.random.rand(",[39,96620,278],{"class":74},[39,96622,426],{"class":53},[39,96624,423],{"class":74},[39,96626,574],{"class":53},[39,96628,96629],{"class":41,"line":92},[39,96630,96631],{"class":128},"#第一个参数100：行数，表示有100个样本\n",[39,96633,96634],{"class":41,"line":112},[39,96635,96636],{"class":128},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96638,96640],{"id":96639},"_23-arange创建数组","2.3 arange()创建数组",[476,96642,96644],{"id":96643},"_231-函数语句","2.3.1 函数语句",[30,96646,96648],{"className":31353,"code":96647,"language":31355,"meta":35,"style":35},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[26,96649,96650,96664,96669,96674,96679,96684,96689,96694],{"__ignoreMap":35},[39,96651,96652,96655,96657,96659,96662],{"class":41,"line":42},[39,96653,96654],{"class":53},"numpy.arange([start,] stop[, step], ",[39,96656,94475],{"class":59},[39,96658,1117],{"class":45},[39,96660,96661],{"class":74},"None",[39,96663,574],{"class":53},[39,96665,96666],{"class":41,"line":92},[39,96667,96668],{"class":128},"#参数\n",[39,96670,96671],{"class":41,"line":112},[39,96672,96673],{"class":237},"\"\"\"\n",[39,96675,96676],{"class":41,"line":118},[39,96677,96678],{"class":237},"start:起始值，可选，默认从 0 开始。\n",[39,96680,96681],{"class":41,"line":125},[39,96682,96683],{"class":237},"stop:结束值（不包含该值）。\n",[39,96685,96686],{"class":41,"line":132},[39,96687,96688],{"class":237},"step:步长，可选，默认是 1。可以为浮点数。\n",[39,96690,96691],{"class":41,"line":138},[39,96692,96693],{"class":237},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[39,96695,96696],{"class":41,"line":169},[39,96697,96673],{"class":237},[476,96699,96701],{"id":96700},"_232-实例","2.3.2 实例",[30,96703,96705],{"className":31353,"code":96704,"language":31355,"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",[26,96706,96707,96711,96735,96740,96745,96749,96772,96776,96780,96785,96790],{"__ignoreMap":35},[39,96708,96709],{"class":41,"line":42},[39,96710,94080],{"class":128},[39,96712,96713,96715,96717,96719,96721,96723,96725,96727,96729,96731,96733],{"class":41,"line":92},[39,96714,93977],{"class":53},[39,96716,1483],{"class":74},[39,96718,426],{"class":53},[39,96720,1985],{"class":74},[39,96722,426],{"class":53},[39,96724,1483],{"class":74},[39,96726,426],{"class":53},[39,96728,94475],{"class":59},[39,96730,1117],{"class":45},[39,96732,46],{"class":74},[39,96734,574],{"class":53},[39,96736,96737],{"class":41,"line":112},[39,96738,96739],{"class":128},"#输出结果：\n",[39,96741,96742],{"class":41,"line":118},[39,96743,96744],{"class":128},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[39,96746,96747],{"class":41,"line":125},[39,96748,94922],{"class":128},[39,96750,96751,96754,96756,96758,96760,96763,96765,96767,96769],{"class":41,"line":132},[39,96752,96753],{"class":53},"np.array([np.arange(",[39,96755,1483],{"class":74},[39,96757,426],{"class":53},[39,96759,1558],{"class":74},[39,96761,96762],{"class":53},"),np.arange(",[39,96764,1558],{"class":74},[39,96766,426],{"class":53},[39,96768,1633],{"class":74},[39,96770,96771],{"class":53},")])\n",[39,96773,96774],{"class":41,"line":138},[39,96775,94539],{"class":128},[39,96777,96778],{"class":41,"line":169},[39,96779,96673],{"class":237},[39,96781,96782],{"class":41,"line":190},[39,96783,96784],{"class":237},"array([[1, 2, 3],\n",[39,96786,96787],{"class":41,"line":202},[39,96788,96789],{"class":237},"       [4, 5, 6]])\n",[39,96791,96792],{"class":41,"line":207},[39,96793,96673],{"class":237},[14,96795,96797],{"id":96796},"_24-生态分布","2.4 生态分布",[476,96799,96801],{"id":96800},"_241-标准正态分布","2.4.1 标准正态分布",[19,96803,96804],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96806,96807],{},[2585,96808],{"alt":35,"src":96809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[476,96811,96813],{"id":96812},"_242-常规正态分布","2.4.2 常规正态分布",[30,96815,96817],{"className":31353,"code":96816,"language":31355,"meta":35,"style":35},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[26,96818,96819,96824,96829,96834],{"__ignoreMap":35},[39,96820,96821],{"class":41,"line":42},[39,96822,96823],{"class":53},"random.normal(loc,scale,size)也可以生成正态分布\n",[39,96825,96826],{"class":41,"line":92},[39,96827,96828],{"class":128},"#loc:期望\n",[39,96830,96831],{"class":41,"line":112},[39,96832,96833],{"class":128},"#scale:方差\n",[39,96835,96836],{"class":41,"line":118},[39,96837,96838],{"class":128},"#size:用于确定是几维的数列\n",[19,96840,96841],{},[2585,96842],{"alt":35,"src":96843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96845,96847],{"id":96846},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96849,96850],{},"ndim:秩，维度个数",[19,96852,96853],{},"size:数组元素的个数",[19,96855,96856],{},"shape:数组的形状",[19,96858,96859],{},"dtype:数组元素的类型",[19,96861,96862],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96864,96865],{},"他们都是属性，通过数组.属性的形式来确定",[19,96867,96868],{},"如果需要输出多个可以通过以下方式：",[30,96870,96872],{"className":31353,"code":96871,"language":31355,"meta":35,"style":35},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[26,96873,96874],{"__ignoreMap":35},[39,96875,96876,96878],{"class":41,"line":42},[39,96877,31390],{"class":74},[39,96879,96880],{"class":53},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96882,96884],{"id":96883},"_26-其他方式创建数组","2.6 其他方式创建数组",[476,96886,96888],{"id":96887},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96890,96891],{},"①创建一维数组",[30,96893,96895],{"className":31353,"code":96894,"language":31355,"meta":35,"style":35},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[26,96896,96897,96906,96910,96915,96920],{"__ignoreMap":35},[39,96898,96899,96902,96904],{"class":41,"line":42},[39,96900,96901],{"class":53},"np.zeros(",[39,96903,423],{"class":74},[39,96905,574],{"class":53},[39,96907,96908],{"class":41,"line":92},[39,96909,96673],{"class":237},[39,96911,96912],{"class":41,"line":112},[39,96913,96914],{"class":237},"输出结果：\n",[39,96916,96917],{"class":41,"line":118},[39,96918,96919],{"class":237},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[39,96921,96922],{"class":41,"line":125},[39,96923,96673],{"class":237},[19,96925,96926],{},"上方代码等价于：",[30,96928,96930],{"className":31353,"code":96929,"language":31355,"meta":35,"style":35},"np.zeros(shape=(10))#创建10个元素的0数组\n",[26,96931,96932],{"__ignoreMap":35},[39,96933,96934,96936,96939,96941,96943,96945,96947],{"class":41,"line":42},[39,96935,96901],{"class":53},[39,96937,96938],{"class":59},"shape",[39,96940,1117],{"class":45},[39,96942,54],{"class":53},[39,96944,423],{"class":74},[39,96946,83746],{"class":53},[39,96948,96949],{"class":128},"#创建10个元素的0数组\n",[19,96951,96952],{},"也可以指定类型",[30,96954,96956],{"className":31353,"code":96955,"language":31355,"meta":35,"style":35},"#指定类型\nnp.zeros(5,dtype=int)\n",[26,96957,96958,96963],{"__ignoreMap":35},[39,96959,96960],{"class":41,"line":42},[39,96961,96962],{"class":128},"#指定类型\n",[39,96964,96965,96967,96969,96971,96973,96975,96977],{"class":41,"line":92},[39,96966,96901],{"class":53},[39,96968,1583],{"class":74},[39,96970,426],{"class":53},[39,96972,94475],{"class":59},[39,96974,1117],{"class":45},[39,96976,46],{"class":74},[39,96978,574],{"class":53},[19,96980,96981],{},"②创建二维数组",[30,96983,96985],{"className":31353,"code":96984,"language":31355,"meta":35,"style":35},"np.zeros((3,4),dtype=int)\n",[26,96986,96987],{"__ignoreMap":35},[39,96988,96989,96992,96994,96996,96998,97000,97002,97004,97006],{"class":41,"line":42},[39,96990,96991],{"class":53},"np.zeros((",[39,96993,1339],{"class":74},[39,96995,426],{"class":53},[39,96997,1558],{"class":74},[39,96999,43231],{"class":53},[39,97001,94475],{"class":59},[39,97003,1117],{"class":45},[39,97005,46],{"class":74},[39,97007,574],{"class":53},[19,97009,97010],{},"③创建三维数组",[30,97012,97014],{"className":31353,"code":97013,"language":31355,"meta":35,"style":35},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[26,97015,97016,97021],{"__ignoreMap":35},[39,97017,97018],{"class":41,"line":42},[39,97019,97020],{"class":128},"#创建三维数组\n",[39,97022,97023,97025,97027,97029,97031,97033,97035,97037,97039,97041,97043],{"class":41,"line":92},[39,97024,96991],{"class":53},[39,97026,1339],{"class":74},[39,97028,426],{"class":53},[39,97030,1558],{"class":74},[39,97032,426],{"class":53},[39,97034,1583],{"class":74},[39,97036,43231],{"class":53},[39,97038,94475],{"class":59},[39,97040,1117],{"class":45},[39,97042,46],{"class":74},[39,97044,574],{"class":53},[19,97046,97047],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[30,97049,97051],{"className":31353,"code":97050,"language":31355,"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",[26,97052,97053,97058,97073,97078,97083,97105],{"__ignoreMap":35},[39,97054,97055],{"class":41,"line":42},[39,97056,97057],{"class":128},"#使用zeros_like将创建的一维数组变成全0的数组\n",[39,97059,97060,97062,97064,97066,97068,97070],{"class":41,"line":92},[39,97061,922],{"class":53},[39,97063,1117],{"class":45},[39,97065,93977],{"class":53},[39,97067,1558],{"class":74},[39,97069,1692],{"class":53},[39,97071,97072],{"class":128},"#这个得到的结果：一维数组0，1，2，3\n",[39,97074,97075],{"class":41,"line":112},[39,97076,97077],{"class":53},"np.zeros_like(a)\n",[39,97079,97080],{"class":41,"line":118},[39,97081,97082],{"class":128},"#使用zeros_like将创建的二维数组变成全0的数组\n",[39,97084,97085,97087,97089,97091,97093,97095,97097,97099,97101,97103],{"class":41,"line":125},[39,97086,94281],{"class":53},[39,97088,1117],{"class":45},[39,97090,96402],{"class":53},[39,97092,32471],{"class":59},[39,97094,1117],{"class":45},[39,97096,54],{"class":53},[39,97098,1558],{"class":74},[39,97100,426],{"class":53},[39,97102,1583],{"class":74},[39,97104,31472],{"class":53},[39,97106,97107],{"class":41,"line":132},[39,97108,97109],{"class":53},"np.zeros_like(aa)\n",[476,97111,97113],{"id":97112},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97115,97116],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[476,97118,97120],{"id":97119},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97122,97123],{},"①empty()用法",[30,97125,97127],{"className":31353,"code":97126,"language":31355,"meta":35,"style":35},"numpy.empty(shape,dtype=float,order='c')\n",[26,97128,97129],{"__ignoreMap":35},[39,97130,97131,97134,97136,97138,97140,97142,97144,97146,97148],{"class":41,"line":42},[39,97132,97133],{"class":53},"numpy.empty(shape,",[39,97135,94475],{"class":59},[39,97137,1117],{"class":45},[39,97139,1311],{"class":74},[39,97141,426],{"class":53},[39,97143,96272],{"class":59},[39,97145,1117],{"class":45},[39,97147,77003],{"class":237},[39,97149,574],{"class":53},[19,97151,97152],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97154,97155],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97157,97158],{},[2585,97159],{"alt":35,"src":97160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97162,97163],{},"②empty()用法",[30,97165,97167],{"className":31353,"code":97166,"language":31355,"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",[26,97168,97169,97190,97202,97223,97228],{"__ignoreMap":35},[39,97170,97171,97173,97175,97178,97180,97182,97184,97186,97188],{"class":41,"line":42},[39,97172,2105],{"class":53},[39,97174,1117],{"class":45},[39,97176,97177],{"class":53},"np.empty(",[39,97179,423],{"class":74},[39,97181,426],{"class":53},[39,97183,94475],{"class":59},[39,97185,1117],{"class":45},[39,97187,46],{"class":74},[39,97189,574],{"class":53},[39,97191,97192,97194,97196,97198,97200],{"class":41,"line":92},[39,97193,2080],{"class":53},[39,97195,1117],{"class":45},[39,97197,93977],{"class":53},[39,97199,1583],{"class":74},[39,97201,574],{"class":53},[39,97203,97204,97207,97209,97212,97214,97216,97219,97221],{"class":41,"line":112},[39,97205,97206],{"class":53},"np.add(",[39,97208,1345],{"class":74},[39,97210,97211],{"class":53},",x,",[39,97213,94029],{"class":59},[39,97215,1117],{"class":45},[39,97217,97218],{"class":53},"y[:",[39,97220,1583],{"class":74},[39,97222,5738],{"class":53},[39,97224,97225],{"class":41,"line":118},[39,97226,97227],{"class":128},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[39,97229,97230],{"class":41,"line":125},[39,97231,97232],{"class":53},"y\n",[19,97234,12574],{},[19,97236,97237],{},[2585,97238],{"alt":35,"src":97239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[30,97241,97243],{"className":31353,"code":97242,"language":31355,"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",[26,97244,97245,97261,97281,97296],{"__ignoreMap":35},[39,97246,97247,97249,97251,97253,97255,97257,97259],{"class":41,"line":42},[39,97248,2080],{"class":53},[39,97250,1117],{"class":45},[39,97252,93977],{"class":53},[39,97254,1483],{"class":74},[39,97256,426],{"class":53},[39,97258,1608],{"class":74},[39,97260,574],{"class":53},[39,97262,97263,97265,97267,97269,97271,97273,97275,97277,97279],{"class":41,"line":92},[39,97264,2105],{"class":53},[39,97266,1117],{"class":45},[39,97268,97177],{"class":53},[39,97270,1583],{"class":74},[39,97272,426],{"class":53},[39,97274,94475],{"class":59},[39,97276,1117],{"class":45},[39,97278,46],{"class":74},[39,97280,574],{"class":53},[39,97282,97283,97286,97288,97290,97292,97294],{"class":41,"line":112},[39,97284,97285],{"class":53},"np.add(x,",[39,97287,1345],{"class":74},[39,97289,426],{"class":53},[39,97291,94029],{"class":59},[39,97293,1117],{"class":45},[39,97295,94424],{"class":53},[39,97297,97298],{"class":41,"line":118},[39,97299,97300],{"class":128},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,97302,97303],{},"③empty_like()",[19,97305,97306],{},[350,97307,97308,97309,97314],{},"创建一个",[350,97310,97311],{},[350,97312,97313],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,97316,97317,97320],{},[26,97318,97319],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,97322,97323],{},[2585,97324],{"alt":35,"src":97325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[476,97327,97329],{"id":97328},"_264-用法","2.6.4 ？？用法",[19,97331,97332],{},"当想查看一个函数的参数时，可以通过？？来实现",[30,97334,97336],{"className":31353,"code":97335,"language":31355,"meta":35,"style":35},"np.full??\n",[26,97337,97338],{"__ignoreMap":35},[39,97339,97340,97343],{"class":41,"line":42},[39,97341,97342],{"class":53},"np.full",[39,97344,97345],{"class":78378},"??\n",[476,97347,97349],{"id":97348},"_265-full创建数组","2.6.5 full()创建数组",[30,97351,97353],{"className":31353,"code":97352,"language":31355,"meta":35,"style":35},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[26,97354,97355,97360],{"__ignoreMap":35},[39,97356,97357],{"class":41,"line":42},[39,97358,97359],{"class":53},"full(shape,fill_value)\n",[39,97361,97362],{"class":41,"line":92},[39,97363,97364],{"class":53},"创建全为某个指定值的数组\n",[19,97366,95505],{},[30,97368,97370],{"className":31353,"code":97369,"language":31355,"meta":35,"style":35},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[26,97371,97372,97377],{"__ignoreMap":35},[39,97373,97374],{"class":41,"line":42},[39,97375,97376],{"class":128},"#创建一个一维数组,以20进行填充\n",[39,97378,97379,97382,97384,97386,97388],{"class":41,"line":92},[39,97380,97381],{"class":53},"np.full(",[39,97383,423],{"class":74},[39,97385,426],{"class":53},[39,97387,248],{"class":74},[39,97389,574],{"class":53},[19,97391,94266],{},[30,97393,97395],{"className":31353,"code":97394,"language":31355,"meta":35,"style":35},"#创建二维数组\nnp.full((3,5),11)\n",[26,97396,97397,97401],{"__ignoreMap":35},[39,97398,97399],{"class":41,"line":42},[39,97400,94922],{"class":128},[39,97402,97403,97406,97408,97410,97412,97414,97416],{"class":41,"line":92},[39,97404,97405],{"class":53},"np.full((",[39,97407,1339],{"class":74},[39,97409,426],{"class":53},[39,97411,1583],{"class":74},[39,97413,43231],{"class":53},[39,97415,1734],{"class":74},[39,97417,574],{"class":53},[19,97419,97420],{},"③full_like用法",[19,97422,97423],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,97425,97426],{},"这里是指定填充而已",[30,97428,97430],{"className":31353,"code":97429,"language":31355,"meta":35,"style":35},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[26,97431,97432,97437,97461,97466],{"__ignoreMap":35},[39,97433,97434],{"class":41,"line":42},[39,97435,97436],{"class":128},"#创建一个指定形状数组\n",[39,97438,97439,97441,97443,97445,97447,97449,97451,97453,97455,97457,97459],{"class":41,"line":92},[39,97440,922],{"class":53},[39,97442,1117],{"class":45},[39,97444,93977],{"class":53},[39,97446,1483],{"class":74},[39,97448,426],{"class":53},[39,97450,1589],{"class":74},[39,97452,93982],{"class":53},[39,97454,1558],{"class":74},[39,97456,426],{"class":53},[39,97458,1683],{"class":74},[39,97460,574],{"class":53},[39,97462,97463],{"class":41,"line":112},[39,97464,97465],{"class":128},"#进行指定填充\n",[39,97467,97468,97471,97473],{"class":41,"line":118},[39,97469,97470],{"class":53},"np.full_like(a,",[39,97472,423],{"class":74},[39,97474,574],{"class":53},[19,97476,12574],{},[19,97478,97479],{},[2585,97480],{"alt":35,"src":97481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[476,97483,97485],{"id":97484},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22971,97487,97489],{"id":97488},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[30,97491,97493],{"className":31353,"code":97492,"language":31355,"meta":35,"style":35},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[26,97494,97495,97512],{"__ignoreMap":35},[39,97496,97497,97500,97502,97504,97506,97508,97510],{"class":41,"line":42},[39,97498,97499],{"class":53},"np.eye(",[39,97501,1558],{"class":74},[39,97503,426],{"class":53},[39,97505,94475],{"class":59},[39,97507,1117],{"class":45},[39,97509,46],{"class":74},[39,97511,574],{"class":53},[39,97513,97514],{"class":41,"line":92},[39,97515,97516],{"class":128},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22971,97518,97520],{"id":97519},"_2662-法2identity","2.6.6.2 法2：identity()",[30,97522,97524],{"className":31353,"code":97523,"language":31355,"meta":35,"style":35},"#identity()\nnp.identity(5,dtype=int)\n",[26,97525,97526,97531],{"__ignoreMap":35},[39,97527,97528],{"class":41,"line":42},[39,97529,97530],{"class":128},"#identity()\n",[39,97532,97533,97536,97538,97540,97542,97544,97546],{"class":41,"line":92},[39,97534,97535],{"class":53},"np.identity(",[39,97537,1583],{"class":74},[39,97539,426],{"class":53},[39,97541,94475],{"class":59},[39,97543,1117],{"class":45},[39,97545,46],{"class":74},[39,97547,574],{"class":53},[19,97549,97550],{},"两个函数是有区别的",[19,97552,97553],{},[2585,97554],{"alt":35,"src":97555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97557,97558],{},[2585,97559],{"alt":35,"src":97560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[30,97562,97564],{"className":31353,"code":97563,"language":31355,"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",[26,97565,97566,97571,97583,97588,97593,97598,97603,97607,97612,97632,97636,97641,97646],{"__ignoreMap":35},[39,97567,97568],{"class":41,"line":42},[39,97569,97570],{"class":128},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[39,97572,97573,97575,97577,97579,97581],{"class":41,"line":92},[39,97574,97499],{"class":53},[39,97576,1339],{"class":74},[39,97578,63],{"class":53},[39,97580,1558],{"class":74},[39,97582,574],{"class":53},[39,97584,97585],{"class":41,"line":112},[39,97586,97587],{"class":128},"# 输出:\n",[39,97589,97590],{"class":41,"line":118},[39,97591,97592],{"class":128},"# [[1. 0. 0. 0.]\n",[39,97594,97595],{"class":41,"line":125},[39,97596,97597],{"class":128},"#  [0. 1. 0. 0.]\n",[39,97599,97600],{"class":41,"line":132},[39,97601,97602],{"class":128},"#  [0. 0. 1. 0.]]\n",[39,97604,97605],{"class":41,"line":138},[39,97606,122],{"emptyLinePlaceholder":121},[39,97608,97609],{"class":41,"line":169},[39,97610,97611],{"class":128},"# 对角线向上偏移1\n",[39,97613,97614,97616,97618,97620,97622,97624,97626,97628,97630],{"class":41,"line":190},[39,97615,97499],{"class":53},[39,97617,1339],{"class":74},[39,97619,63],{"class":53},[39,97621,1558],{"class":74},[39,97623,63],{"class":53},[39,97625,1754],{"class":59},[39,97627,1117],{"class":45},[39,97629,1483],{"class":74},[39,97631,574],{"class":53},[39,97633,97634],{"class":41,"line":202},[39,97635,97587],{"class":128},[39,97637,97638],{"class":41,"line":207},[39,97639,97640],{"class":128},"# [[0. 1. 0. 0.]\n",[39,97642,97643],{"class":41,"line":212},[39,97644,97645],{"class":128},"#  [0. 0. 1. 0.]\n",[39,97647,97648],{"class":41,"line":223},[39,97649,97650],{"class":128},"#  [0. 0. 0. 1.]]\n",[476,97652,97654],{"id":97653},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[30,97656,97658],{"className":31353,"code":97657,"language":31355,"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",[26,97659,97660,97665,97669,97674,97679,97684,97689,97694,97699,97704,97709],{"__ignoreMap":35},[39,97661,97662],{"class":41,"line":42},[39,97663,97664],{"class":128},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[39,97666,97667],{"class":41,"line":92},[39,97668,96673],{"class":237},[39,97670,97671],{"class":41,"line":112},[39,97672,97673],{"class":237},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[39,97675,97676],{"class":41,"line":118},[39,97677,97678],{"class":237},"参数介绍：\n",[39,97680,97681],{"class":41,"line":125},[39,97682,97683],{"class":237},"start：序列的起始值\n",[39,97685,97686],{"class":41,"line":132},[39,97687,97688],{"class":237},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[39,97690,97691],{"class":41,"line":138},[39,97692,97693],{"class":237},"num：要生长的等步长的样本数量，默认为50\n",[39,97695,97696],{"class":41,"line":169},[39,97697,97698],{"class":237},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[39,97700,97701],{"class":41,"line":190},[39,97702,97703],{"class":237},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[39,97705,97706],{"class":41,"line":202},[39,97707,97708],{"class":237},"dtype：ndarry的数据类型\n",[39,97710,97711],{"class":41,"line":207},[39,97712,96673],{"class":237},[19,97714,97715],{},[2585,97716],{"alt":35,"src":97717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97719,97720],{},"这里num=是可以省略的",[19,97722,97723],{},"也就是下方两行代码结果是一模一样的",[30,97725,97727],{"className":31353,"code":97726,"language":31355,"meta":35,"style":35},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[26,97728,97729,97746],{"__ignoreMap":35},[39,97730,97731,97734,97736,97738,97740,97742,97744],{"class":41,"line":42},[39,97732,97733],{"class":53},"np.linspace(",[39,97735,1483],{"class":74},[39,97737,426],{"class":53},[39,97739,1583],{"class":74},[39,97741,426],{"class":53},[39,97743,1583],{"class":74},[39,97745,574],{"class":53},[39,97747,97748,97750,97752,97754,97756,97758,97760,97762,97764],{"class":41,"line":92},[39,97749,97733],{"class":53},[39,97751,1483],{"class":74},[39,97753,426],{"class":53},[39,97755,1583],{"class":74},[39,97757,426],{"class":53},[39,97759,2779],{"class":59},[39,97761,1117],{"class":45},[39,97763,1583],{"class":74},[39,97765,574],{"class":53},[476,97767,97769],{"id":97768},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[30,97771,97773],{"className":31353,"code":97772,"language":31355,"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",[26,97774,97775,97780,97784,97789,97794,97799,97804,97808,97813,97818,97822],{"__ignoreMap":35},[39,97776,97777],{"class":41,"line":42},[39,97778,97779],{"class":128},"#logspace函数用于创建一个等比数列，格式如下：\n",[39,97781,97782],{"class":41,"line":92},[39,97783,96673],{"class":237},[39,97785,97786],{"class":41,"line":112},[39,97787,97788],{"class":237},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[39,97790,97791],{"class":41,"line":118},[39,97792,97793],{"class":237},"参数为：\n",[39,97795,97796],{"class":41,"line":125},[39,97797,97798],{"class":237},"start:序列的起始位置为：base**start\n",[39,97800,97801],{"class":41,"line":132},[39,97802,97803],{"class":237},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[39,97805,97806],{"class":41,"line":138},[39,97807,97693],{"class":237},[39,97809,97810],{"class":41,"line":169},[39,97811,97812],{"class":237},"endpoint：是否包含 stop 这个值，默认是 True\n",[39,97814,97815],{"class":41,"line":190},[39,97816,97817],{"class":237},"base：对数的底数，默认是 10（常见对数）\n",[39,97819,97820],{"class":41,"line":202},[39,97821,97708],{"class":237},[39,97823,97824],{"class":41,"line":207},[39,97825,96673],{"class":237},[19,97827,97828],{},[2585,97829],{"alt":35,"src":97830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97832,97833],{},"logspace()函数中的num参数也是可以不写num=的",[19,97835,97836],{},"endpoint是不可以省略的",[1192,97838,97839],{},"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":92,"depth":92,"links":97841},[97842,97846,97851,97855,97859,97860],{"id":96231,"depth":92,"text":96232,"children":97843},[97844,97845],{"id":96235,"depth":112,"text":96236},{"id":96308,"depth":112,"text":96309},{"id":96340,"depth":92,"text":96341,"children":97847},[97848,97849,97850],{"id":96344,"depth":112,"text":96345},{"id":96526,"depth":112,"text":96527},{"id":96604,"depth":112,"text":96605},{"id":96639,"depth":92,"text":96640,"children":97852},[97853,97854],{"id":96643,"depth":112,"text":96644},{"id":96700,"depth":112,"text":96701},{"id":96796,"depth":92,"text":96797,"children":97856},[97857,97858],{"id":96800,"depth":112,"text":96801},{"id":96812,"depth":112,"text":96813},{"id":96846,"depth":92,"text":96847},{"id":96883,"depth":92,"text":96884,"children":97861},[97862,97863,97864,97865,97866,97867,97868,97869],{"id":96887,"depth":112,"text":96888},{"id":97112,"depth":112,"text":97113},{"id":97119,"depth":112,"text":97120},{"id":97328,"depth":112,"text":97329},{"id":97348,"depth":112,"text":97349},{"id":97484,"depth":112,"text":97485},{"id":97653,"depth":112,"text":97654},{"id":97768,"depth":112,"text":97769},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96223,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97876,"title":97877,"body":97878,"description":24350,"extension":1203,"meta":97971,"navigation":121,"path":97972,"seo":97973,"stem":97974,"__hash__":97975},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97879,"toc":97969},[97880,97883,97886,97889,97892,97895,97898,97901,97904,97907,97910,97913,97915,97918,97921,97926,97929,97932,97966],[10,97881,97877],{"id":97882},"_20魔法命令mprun",[19,97884,97885],{},"逐行分析数据内存的使用情况",[19,97887,97888],{},"语法格式：",[19,97890,97891],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97893,97894],{},"分析结果列如下：",[19,97896,97897],{},"Line行号",[19,97899,97900],{},"Mem usage内存使用大小",[19,97902,97903],{},"increment内存增量",[19,97905,97906],{},"Line content代码内容",[19,97908,97909],{},"补充说明：",[19,97911,97912],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97914,96178],{},[19,97916,97917],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97919,97920],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97922,97923],{},[2585,97924],{"alt":35,"src":97925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97927,97928],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97930,97931],{},"这时候需要重新加载模块",[30,97933,97935],{"className":31353,"code":97934,"language":31355,"meta":35,"style":35},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[26,97936,97937,97942,97949,97954],{"__ignoreMap":35},[39,97938,97939],{"class":41,"line":42},[39,97940,97941],{"class":128},"#重新加载模块\n",[39,97943,97944,97946],{"class":41,"line":92},[39,97945,31367],{"class":45},[39,97947,97948],{"class":53}," importlib\n",[39,97950,97951],{"class":41,"line":112},[39,97952,97953],{"class":53},"importlib.reload(mprun_test)\n",[39,97955,97956,97958,97961,97963],{"class":41,"line":118},[39,97957,1592],{"class":45},[39,97959,97960],{"class":53},"mprun ",[39,97962,1793],{"class":45},[39,97964,97965],{"class":53},"f mprun_test.fun_test mprun_test.fun_test()\n",[1192,97967,97968],{},"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":92,"depth":92,"links":97970},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97877,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97977,"title":97978,"body":97979,"description":24350,"extension":1203,"meta":97996,"navigation":121,"path":97997,"seo":97998,"stem":97999,"__hash__":98000},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97980,"toc":97994},[97981,97984,97989],[10,97982,97978],{"id":97983},"_3一维数组的索引和切片",[19,97985,97986],{},[2585,97987],{"alt":35,"src":97988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97990,97991],{},[2585,97992],{"alt":35,"src":97993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":35,"searchDepth":92,"depth":92,"links":97995},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97978,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98002,"title":98003,"body":98004,"description":24350,"extension":1203,"meta":98487,"navigation":121,"path":98488,"seo":98489,"stem":98490,"__hash__":98491},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98005,"toc":98485},[98006,98009,98012,98017,98050,98053,98091,98094,98128,98131,98236,98239,98276,98279,98380,98383,98434,98437,98479,98482],[10,98007,98003],{"id":98008},"_4二维数组的索引与切片",[19,98010,98011],{},"①获取指定单个元素",[19,98013,98014],{},[2585,98015],{"alt":35,"src":98016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[30,98018,98020],{"className":31353,"code":98019,"language":31355,"meta":35,"style":35},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[26,98021,98022,98027,98032,98037],{"__ignoreMap":35},[39,98023,98024],{"class":41,"line":42},[39,98025,98026],{"class":128},"#获取元素9\n",[39,98028,98029],{"class":41,"line":92},[39,98030,98031],{"class":128},"#先获取所在行，再获取所在列\n",[39,98033,98034],{"class":41,"line":112},[39,98035,98036],{"class":128},"#数组[行索引号，列索引号]\n",[39,98038,98039,98042,98044,98046,98048],{"class":41,"line":118},[39,98040,98041],{"class":53},"a[",[39,98043,1483],{"class":74},[39,98045,426],{"class":53},[39,98047,1345],{"class":74},[39,98049,34221],{"class":53},[19,98051,98052],{},"②获取整行元素",[30,98054,98056],{"className":31353,"code":98055,"language":31355,"meta":35,"style":35},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[26,98057,98058,98063,98068,98076,98081],{"__ignoreMap":35},[39,98059,98060],{"class":41,"line":42},[39,98061,98062],{"class":128},"#获取整行 数组[行索引号]\n",[39,98064,98065],{"class":41,"line":92},[39,98066,98067],{"class":128},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[39,98069,98070,98072,98074],{"class":41,"line":112},[39,98071,98041],{"class":53},[39,98073,1345],{"class":74},[39,98075,34221],{"class":53},[39,98077,98078],{"class":41,"line":118},[39,98079,98080],{"class":128},"#也可以负索引获取一行\n",[39,98082,98083,98085,98087,98089],{"class":41,"line":125},[39,98084,98041],{"class":53},[39,98086,1793],{"class":45},[39,98088,1483],{"class":74},[39,98090,34221],{"class":53},[19,98092,98093],{},"③获取整列元素",[30,98095,98097],{"className":31353,"code":98096,"language":31355,"meta":35,"style":35},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[26,98098,98099,98104,98113,98118],{"__ignoreMap":35},[39,98100,98101],{"class":41,"line":42},[39,98102,98103],{"class":128},"#获取整列 数组名[:,列索引]\n",[39,98105,98106,98109,98111],{"class":41,"line":92},[39,98107,98108],{"class":53},"a[:,",[39,98110,1345],{"class":74},[39,98112,34221],{"class":53},[39,98114,98115],{"class":41,"line":112},[39,98116,98117],{"class":128},"#也可以负索引获取一列\n",[39,98119,98120,98122,98124,98126],{"class":41,"line":118},[39,98121,98108],{"class":53},[39,98123,1793],{"class":45},[39,98125,1483],{"class":74},[39,98127,34221],{"class":53},[19,98129,98130],{},"④部分行部分列的元素",[30,98132,98134],{"className":31353,"code":98133,"language":31355,"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",[26,98135,98136,98141,98151,98155,98159,98164,98169,98173,98185,98189,98193,98198,98203,98208,98213,98217,98222],{"__ignoreMap":35},[39,98137,98138],{"class":41,"line":42},[39,98139,98140],{"class":128},"#部分行部分列 数组名[行切片，列切片]\n",[39,98142,98143,98146,98148],{"class":41,"line":92},[39,98144,98145],{"class":53},"a[:",[39,98147,1345],{"class":74},[39,98149,98150],{"class":53},",:]\n",[39,98152,98153],{"class":41,"line":112},[39,98154,94539],{"class":128},[39,98156,98157],{"class":41,"line":118},[39,98158,94903],{"class":237},[39,98160,98161],{"class":41,"line":125},[39,98162,98163],{"class":237},"array([[ 1,  2,  3,  4,  5,  6],\n",[39,98165,98166],{"class":41,"line":132},[39,98167,98168],{"class":237},"       [ 7,  8,  9, 10, 11, 12]])\n",[39,98170,98171],{"class":41,"line":138},[39,98172,94903],{"class":237},[39,98174,98175,98177,98179,98181,98183],{"class":41,"line":169},[39,98176,98108],{"class":53},[39,98178,1483],{"class":74},[39,98180,2119],{"class":53},[39,98182,1558],{"class":74},[39,98184,34221],{"class":53},[39,98186,98187],{"class":41,"line":190},[39,98188,94539],{"class":128},[39,98190,98191],{"class":41,"line":202},[39,98192,94903],{"class":237},[39,98194,98195],{"class":41,"line":207},[39,98196,98197],{"class":237},"array([[ 2,  3,  4],\n",[39,98199,98200],{"class":41,"line":212},[39,98201,98202],{"class":237},"       [ 8,  9, 10],\n",[39,98204,98205],{"class":41,"line":223},[39,98206,98207],{"class":237},"       [14, 15, 16],\n",[39,98209,98210],{"class":41,"line":228},[39,98211,98212],{"class":237},"       [20, 21, 22]])\n",[39,98214,98215],{"class":41,"line":263},[39,98216,94903],{"class":237},[39,98218,98219],{"class":41,"line":287},[39,98220,98221],{"class":128},"#对列行同时进行切片，使用了step参数\n",[39,98223,98224,98227,98229,98232,98234],{"class":41,"line":292},[39,98225,98226],{"class":53},"a[::",[39,98228,1345],{"class":74},[39,98230,98231],{"class":53},",::",[39,98233,1345],{"class":74},[39,98235,34221],{"class":53},[19,98237,98238],{},"⑤同时获取两个元素",[30,98240,98242],{"className":31353,"code":98241,"language":31355,"meta":35,"style":35},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[26,98243,98244,98249,98254],{"__ignoreMap":35},[39,98245,98246],{"class":41,"line":42},[39,98247,98248],{"class":128},"#同时获取第三行第二列，第四行第一列\n",[39,98250,98251],{"class":41,"line":92},[39,98252,98253],{"class":128},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[39,98255,98256,98259,98261,98263,98265,98267,98269,98271,98273],{"class":41,"line":112},[39,98257,98258],{"class":53},"a[(",[39,98260,1345],{"class":74},[39,98262,426],{"class":53},[39,98264,1339],{"class":74},[39,98266,43222],{"class":53},[39,98268,1483],{"class":74},[39,98270,426],{"class":53},[39,98272,1457],{"class":74},[39,98274,98275],{"class":53},")]\n",[19,98277,98278],{},"⑥切片，对行进行反向获取",[30,98280,98282],{"className":31353,"code":98281,"language":31355,"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",[26,98283,98284,98289,98299,98303,98307,98312,98317,98322,98327,98331,98336,98352,98356,98361,98366,98371,98376],{"__ignoreMap":35},[39,98285,98286],{"class":41,"line":42},[39,98287,98288],{"class":128},"#切片 对所有行进行反向获取\n",[39,98290,98291,98293,98295,98297],{"class":41,"line":92},[39,98292,98226],{"class":53},[39,98294,1793],{"class":45},[39,98296,1483],{"class":74},[39,98298,34221],{"class":53},[39,98300,98301],{"class":41,"line":112},[39,98302,94539],{"class":128},[39,98304,98305],{"class":41,"line":118},[39,98306,94903],{"class":237},[39,98308,98309],{"class":41,"line":125},[39,98310,98311],{"class":237},"array([[19, 20, 21, 22, 23, 24],\n",[39,98313,98314],{"class":41,"line":132},[39,98315,98316],{"class":237},"       [13, 14, 15, 16, 17, 18],\n",[39,98318,98319],{"class":41,"line":138},[39,98320,98321],{"class":237},"       [ 7,  8,  9, 10, 11, 12],\n",[39,98323,98324],{"class":41,"line":169},[39,98325,98326],{"class":237},"       [ 1,  2,  3,  4,  5,  6]])\n",[39,98328,98329],{"class":41,"line":190},[39,98330,94903],{"class":237},[39,98332,98333],{"class":41,"line":202},[39,98334,98335],{"class":128},"#对行列都进行反向切片获取\n",[39,98337,98338,98340,98342,98344,98346,98348,98350],{"class":41,"line":207},[39,98339,98226],{"class":53},[39,98341,1793],{"class":45},[39,98343,1483],{"class":74},[39,98345,98231],{"class":53},[39,98347,1793],{"class":45},[39,98349,1483],{"class":74},[39,98351,34221],{"class":53},[39,98353,98354],{"class":41,"line":212},[39,98355,94903],{"class":237},[39,98357,98358],{"class":41,"line":223},[39,98359,98360],{"class":237},"array([[24, 23, 22, 21, 20, 19],\n",[39,98362,98363],{"class":41,"line":228},[39,98364,98365],{"class":237},"       [18, 17, 16, 15, 14, 13],\n",[39,98367,98368],{"class":41,"line":263},[39,98369,98370],{"class":237},"       [12, 11, 10,  9,  8,  7],\n",[39,98372,98373],{"class":41,"line":287},[39,98374,98375],{"class":237},"       [ 6,  5,  4,  3,  2,  1]])\n",[39,98377,98378],{"class":41,"line":292},[39,98379,94903],{"class":237},[19,98381,98382],{},"⑦修改元素",[30,98384,98386],{"className":31353,"code":98385,"language":31355,"meta":35,"style":35},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[26,98387,98388,98393,98411,98416],{"__ignoreMap":35},[39,98389,98390],{"class":41,"line":42},[39,98391,98392],{"class":128},"#获取前两行和前两列\n",[39,98394,98395,98398,98400,98402,98404,98407,98409],{"class":41,"line":92},[39,98396,98397],{"class":53},"sub_a",[39,98399,1117],{"class":45},[39,98401,98145],{"class":53},[39,98403,1345],{"class":74},[39,98405,98406],{"class":53},",:",[39,98408,1345],{"class":74},[39,98410,34221],{"class":53},[39,98412,98413],{"class":41,"line":112},[39,98414,98415],{"class":128},"#修改sub_a第一个元素的值\n",[39,98417,98418,98421,98423,98425,98427,98429,98431],{"class":41,"line":118},[39,98419,98420],{"class":53},"sub_a[",[39,98422,1457],{"class":74},[39,98424,426],{"class":53},[39,98426,1457],{"class":74},[39,98428,2200],{"class":53},[39,98430,1117],{"class":45},[39,98432,98433],{"class":74},"100\n",[19,98435,98436],{},"⑧数组复制copy()",[30,98438,98440],{"className":31353,"code":98439,"language":31355,"meta":35,"style":35},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[26,98441,98442,98447,98457,98462],{"__ignoreMap":35},[39,98443,98444],{"class":41,"line":42},[39,98445,98446],{"class":128},"#数组复制\n",[39,98448,98449,98452,98454],{"class":41,"line":92},[39,98450,98451],{"class":53},"copy_a",[39,98453,1117],{"class":45},[39,98455,98456],{"class":53},"np.copy(sub_a)\n",[39,98458,98459],{"class":41,"line":112},[39,98460,98461],{"class":128},"#修改copy_a后不影响原数组\n",[39,98463,98464,98467,98469,98471,98473,98475,98477],{"class":41,"line":118},[39,98465,98466],{"class":53},"copy_a[",[39,98468,1457],{"class":74},[39,98470,426],{"class":53},[39,98472,1457],{"class":74},[39,98474,2200],{"class":53},[39,98476,1117],{"class":45},[39,98478,98433],{"class":74},[19,98480,98481],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1192,98483,98484],{},"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":92,"depth":92,"links":98486},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98003,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98493,"title":98494,"body":98495,"description":24350,"extension":1203,"meta":98987,"navigation":121,"path":98988,"seo":98989,"stem":98990,"__hash__":98991},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98496,"toc":98979},[98497,98500,98504,98507,98510,98563,98566,98591,98594,98613,98633,98636,98652,98656,98702,98706,98748,98752,98755,98758,98761,98764,98767,98829,98889,98893,98896,98953,98957,98962,98971,98976],[10,98498,98494],{"id":98499},"_5改变数组的维度",[14,98501,98503],{"id":98502},"_51-使用reshape","5.1 使用reshape()",[19,98505,98506],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,98508,98509],{},"①一维数组转换为二维数组",[30,98511,98513],{"className":31353,"code":98512,"language":31355,"meta":35,"style":35},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[26,98514,98515,98531,98536,98541,98546],{"__ignoreMap":35},[39,98516,98517,98519,98521,98523,98525,98527,98529],{"class":41,"line":42},[39,98518,922],{"class":53},[39,98520,1117],{"class":45},[39,98522,93977],{"class":53},[39,98524,1483],{"class":74},[39,98526,426],{"class":53},[39,98528,1784],{"class":74},[39,98530,574],{"class":53},[39,98532,98533],{"class":41,"line":92},[39,98534,98535],{"class":128},"#将一维数组进行转换\n",[39,98537,98538],{"class":41,"line":112},[39,98539,98540],{"class":128},"#注意点：元素个数不可以变\n",[39,98542,98543],{"class":41,"line":118},[39,98544,98545],{"class":128},"#转换维度要保持一致，不一致就异常！！！\n",[39,98547,98548,98550,98552,98555,98557,98559,98561],{"class":41,"line":125},[39,98549,94281],{"class":53},[39,98551,1117],{"class":45},[39,98553,98554],{"class":53},"a.reshape(",[39,98556,1345],{"class":74},[39,98558,426],{"class":53},[39,98560,1608],{"class":74},[39,98562,574],{"class":53},[19,98564,98565],{},"②一维数组转换为三维数组",[30,98567,98569],{"className":31353,"code":98568,"language":31355,"meta":35,"style":35},"aaa=a.reshape(2,3,2)\n",[26,98570,98571],{"__ignoreMap":35},[39,98572,98573,98575,98577,98579,98581,98583,98585,98587,98589],{"class":41,"line":42},[39,98574,96496],{"class":53},[39,98576,1117],{"class":45},[39,98578,98554],{"class":53},[39,98580,1345],{"class":74},[39,98582,426],{"class":53},[39,98584,1339],{"class":74},[39,98586,426],{"class":53},[39,98588,1345],{"class":74},[39,98590,574],{"class":53},[19,98592,98593],{},"③二维数组转化为一维数组",[30,98595,98597],{"className":31353,"code":98596,"language":31355,"meta":35,"style":35},"#知道元素个数：\naa.reshape(12)\n",[26,98598,98599,98604],{"__ignoreMap":35},[39,98600,98601],{"class":41,"line":42},[39,98602,98603],{"class":128},"#知道元素个数：\n",[39,98605,98606,98609,98611],{"class":41,"line":92},[39,98607,98608],{"class":53},"aa.reshape(",[39,98610,1759],{"class":74},[39,98612,574],{"class":53},[30,98614,98616],{"className":31353,"code":98615,"language":31355,"meta":35,"style":35},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[26,98617,98618,98623],{"__ignoreMap":35},[39,98619,98620],{"class":41,"line":42},[39,98621,98622],{"class":128},"#不知道元素个数，参数传递-1\n",[39,98624,98625,98627,98629,98631],{"class":41,"line":92},[39,98626,98608],{"class":53},[39,98628,1793],{"class":45},[39,98630,1483],{"class":74},[39,98632,574],{"class":53},[19,98634,98635],{},"④三维数组转换为一维数组",[30,98637,98639],{"className":31353,"code":98638,"language":31355,"meta":35,"style":35},"aaa.reshape(-1)\n",[26,98640,98641],{"__ignoreMap":35},[39,98642,98643,98646,98648,98650],{"class":41,"line":42},[39,98644,98645],{"class":53},"aaa.reshape(",[39,98647,1793],{"class":45},[39,98649,1483],{"class":74},[39,98651,574],{"class":53},[14,98653,98655],{"id":98654},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[30,98657,98659],{"className":31353,"code":98658,"language":31355,"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",[26,98660,98661,98688,98693,98697],{"__ignoreMap":35},[39,98662,98663,98665,98667,98669,98671,98673,98675,98677,98679,98681,98683,98685],{"class":41,"line":42},[39,98664,94281],{"class":53},[39,98666,1117],{"class":45},[39,98668,93977],{"class":53},[39,98670,1483],{"class":74},[39,98672,426],{"class":53},[39,98674,1784],{"class":74},[39,98676,93982],{"class":53},[39,98678,1345],{"class":74},[39,98680,426],{"class":53},[39,98682,1608],{"class":74},[39,98684,1692],{"class":53},[39,98686,98687],{"class":128},"#转换为2行6列的数组\n",[39,98689,98690],{"class":41,"line":92},[39,98691,98692],{"class":53},"aa.revel()\n",[39,98694,98695],{"class":41,"line":112},[39,98696,94539],{"class":128},[39,98698,98699],{"class":41,"line":118},[39,98700,98701],{"class":128},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98703,98705],{"id":98704},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[30,98707,98709],{"className":31353,"code":98708,"language":31355,"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",[26,98710,98711,98735,98740,98744],{"__ignoreMap":35},[39,98712,98713,98715,98717,98719,98721,98723,98725,98727,98729,98731,98733],{"class":41,"line":42},[39,98714,94281],{"class":53},[39,98716,1117],{"class":45},[39,98718,93977],{"class":53},[39,98720,1483],{"class":74},[39,98722,426],{"class":53},[39,98724,1784],{"class":74},[39,98726,93982],{"class":53},[39,98728,1345],{"class":74},[39,98730,426],{"class":53},[39,98732,1608],{"class":74},[39,98734,574],{"class":53},[39,98736,98737],{"class":41,"line":92},[39,98738,98739],{"class":53},"aa.flatten()\n",[39,98741,98742],{"class":41,"line":112},[39,98743,94539],{"class":128},[39,98745,98746],{"class":41,"line":118},[39,98747,98701],{"class":128},[14,98749,98751],{"id":98750},"_54-使用resize","5.4 使用resize()",[19,98753,98754],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,98756,98757],{},"通过resize方法可以改变数组的维度",[19,98759,98760],{},"#resize修改数组维度",[19,98762,98763],{},"#以元组的形式指定形状",[19,98765,98766],{},"#改变的是原数组",[30,98768,98770],{"className":31353,"code":98769,"language":31355,"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",[26,98771,98772,98788,98808,98821,98825],{"__ignoreMap":35},[39,98773,98774,98776,98778,98780,98782,98784,98786],{"class":41,"line":42},[39,98775,922],{"class":53},[39,98777,1117],{"class":45},[39,98779,93977],{"class":53},[39,98781,1483],{"class":74},[39,98783,426],{"class":53},[39,98785,1784],{"class":74},[39,98787,574],{"class":53},[39,98789,98790,98793,98795,98797,98799,98801,98803,98805],{"class":41,"line":92},[39,98791,98792],{"class":53},"a.shape",[39,98794,1117],{"class":45},[39,98796,54],{"class":53},[39,98798,1345],{"class":74},[39,98800,426],{"class":53},[39,98802,1608],{"class":74},[39,98804,1692],{"class":53},[39,98806,98807],{"class":128},"#改变了原数组\n",[39,98809,98810,98812,98814,98817,98819],{"class":41,"line":112},[39,98811,922],{"class":53},[39,98813,1117],{"class":45},[39,98815,98816],{"class":53},"resize((",[39,98818,1759],{"class":74},[39,98820,31472],{"class":53},[39,98822,98823],{"class":41,"line":118},[39,98824,94539],{"class":128},[39,98826,98827],{"class":41,"line":125},[39,98828,98701],{"class":128},[30,98830,98832],{"className":31353,"code":98831,"language":31355,"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",[26,98833,98834,98847,98851,98855,98860,98865,98870,98875,98880,98885],{"__ignoreMap":35},[39,98835,98836,98839,98841,98843,98845],{"class":41,"line":42},[39,98837,98838],{"class":53},"a.resize((",[39,98840,1608],{"class":74},[39,98842,426],{"class":53},[39,98844,1345],{"class":74},[39,98846,31472],{"class":53},[39,98848,98849],{"class":41,"line":92},[39,98850,94539],{"class":128},[39,98852,98853],{"class":41,"line":112},[39,98854,94903],{"class":237},[39,98856,98857],{"class":41,"line":118},[39,98858,98859],{"class":237},"array([[ 1,  2],\n",[39,98861,98862],{"class":41,"line":125},[39,98863,98864],{"class":237},"       [ 3,  4],\n",[39,98866,98867],{"class":41,"line":132},[39,98868,98869],{"class":237},"       [ 5,  6],\n",[39,98871,98872],{"class":41,"line":138},[39,98873,98874],{"class":237},"       [ 7,  8],\n",[39,98876,98877],{"class":41,"line":169},[39,98878,98879],{"class":237},"       [ 9, 10],\n",[39,98881,98882],{"class":41,"line":190},[39,98883,98884],{"class":237},"       [11, 12]])\n",[39,98886,98887],{"class":41,"line":202},[39,98888,94903],{"class":237},[14,98890,98892],{"id":98891},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98894,98895],{},"改变了原数组",[30,98897,98899],{"className":31353,"code":98898,"language":31355,"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",[26,98900,98901,98917,98933,98937,98941,98945,98949],{"__ignoreMap":35},[39,98902,98903,98905,98907,98909,98911,98913,98915],{"class":41,"line":42},[39,98904,922],{"class":53},[39,98906,1117],{"class":45},[39,98908,93977],{"class":53},[39,98910,1483],{"class":74},[39,98912,426],{"class":53},[39,98914,1784],{"class":74},[39,98916,574],{"class":53},[39,98918,98919,98921,98923,98925,98927,98929,98931],{"class":41,"line":92},[39,98920,98792],{"class":53},[39,98922,1117],{"class":45},[39,98924,54],{"class":53},[39,98926,1345],{"class":74},[39,98928,426],{"class":53},[39,98930,1608],{"class":74},[39,98932,574],{"class":53},[39,98934,98935],{"class":41,"line":112},[39,98936,94539],{"class":128},[39,98938,98939],{"class":41,"line":118},[39,98940,94903],{"class":237},[39,98942,98943],{"class":41,"line":125},[39,98944,98163],{"class":237},[39,98946,98947],{"class":41,"line":132},[39,98948,98168],{"class":237},[39,98950,98951],{"class":41,"line":138},[39,98952,94903],{"class":237},[14,98954,98956],{"id":98955},"_56-重要比较","5.6 重要比较：",[19,98958,98959],{},[2585,98960],{"alt":35,"src":98961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98963,98964,98965,98967,98968,98970],{},"口诀：NumPy 函数要么用 ",[26,98966,96938],{},"，要么用 ",[26,98969,32471],{},"，创建结构用 shape，造数据用 size",[19,98972,98973],{},[2585,98974],{"alt":35,"src":98975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1192,98977,98978],{},"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":92,"depth":92,"links":98980},[98981,98982,98983,98984,98985,98986],{"id":98502,"depth":92,"text":98503},{"id":98654,"depth":92,"text":98655},{"id":98704,"depth":92,"text":98705},{"id":98750,"depth":92,"text":98751},{"id":98891,"depth":92,"text":98892},{"id":98955,"depth":92,"text":98956},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98494,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98993,"title":98994,"body":98995,"description":24350,"extension":1203,"meta":100067,"navigation":121,"path":100068,"seo":100069,"stem":100070,"__hash__":100071},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98996,"toc":100061},[98997,99000,99004,99007,99010,99013,99078,99081,99121,99124,99206,99209,99214,99236,99238,99243,99248,99251,99254,99409,99412,99614,99618,99621,99624,99692,99694,99699,99702,99705,99785,99789,99792,99794,99867,99869,99874,99876,99956,99960,99963,99966,99969,99972,99975,99978,100058],[10,98998,98994],{"id":98999},"_6数组的拼接",[14,99001,99003],{"id":99002},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99005,99006],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99008,99009],{},"函数内部传两个数列构成的数列或者元组",[19,99011,99012],{},"①一维数组的拼接",[30,99014,99016],{"className":31353,"code":99015,"language":31355,"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",[26,99017,99018,99038,99058,99063,99068,99073],{"__ignoreMap":35},[39,99019,99020,99022,99024,99026,99028,99030,99032,99034,99036],{"class":41,"line":42},[39,99021,922],{"class":53},[39,99023,1117],{"class":45},[39,99025,93999],{"class":53},[39,99027,1483],{"class":74},[39,99029,426],{"class":53},[39,99031,1345],{"class":74},[39,99033,426],{"class":53},[39,99035,1339],{"class":74},[39,99037,5738],{"class":53},[39,99039,99040,99042,99044,99046,99048,99050,99052,99054,99056],{"class":41,"line":92},[39,99041,1528],{"class":53},[39,99043,1117],{"class":45},[39,99045,93999],{"class":53},[39,99047,1558],{"class":74},[39,99049,426],{"class":53},[39,99051,1583],{"class":74},[39,99053,426],{"class":53},[39,99055,1608],{"class":74},[39,99057,5738],{"class":53},[39,99059,99060],{"class":41,"line":112},[39,99061,99062],{"class":128},"#调用concatenate进行数组拼接\n",[39,99064,99065],{"class":41,"line":118},[39,99066,99067],{"class":53},"np.concatenate((a,b))\n",[39,99069,99070],{"class":41,"line":125},[39,99071,99072],{"class":128},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[39,99074,99075],{"class":41,"line":132},[39,99076,99077],{"class":128},"#np.concatenate([a,b])\n",[19,99079,99080],{},"②一维多个数组拼接",[30,99082,99084],{"className":31353,"code":99083,"language":31355,"meta":35,"style":35},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[26,99085,99086,99091,99111,99116],{"__ignoreMap":35},[39,99087,99088],{"class":41,"line":42},[39,99089,99090],{"class":128},"#也可以多个数组进行拼接\n",[39,99092,99093,99095,99097,99099,99101,99103,99105,99107,99109],{"class":41,"line":92},[39,99094,1553],{"class":53},[39,99096,1117],{"class":45},[39,99098,93999],{"class":53},[39,99100,423],{"class":74},[39,99102,426],{"class":53},[39,99104,1734],{"class":74},[39,99106,426],{"class":53},[39,99108,1784],{"class":74},[39,99110,5738],{"class":53},[39,99112,99113],{"class":41,"line":112},[39,99114,99115],{"class":53},"c\n",[39,99117,99118],{"class":41,"line":118},[39,99119,99120],{"class":53},"np.concatenate((a,b,c))\n",[19,99122,99123],{},"③二维数组拼接",[30,99125,99127],{"className":31353,"code":99126,"language":31355,"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",[26,99128,99129,99134,99158,99183,99188,99193],{"__ignoreMap":35},[39,99130,99131],{"class":41,"line":42},[39,99132,99133],{"class":128},"#二维数组使用concatenate进行拼接\n",[39,99135,99136,99138,99140,99142,99144,99146,99148,99150,99152,99154,99156],{"class":41,"line":92},[39,99137,94281],{"class":53},[39,99139,1117],{"class":45},[39,99141,93977],{"class":53},[39,99143,1483],{"class":74},[39,99145,426],{"class":53},[39,99147,1784],{"class":74},[39,99149,93982],{"class":53},[39,99151,1339],{"class":74},[39,99153,426],{"class":53},[39,99155,1558],{"class":74},[39,99157,574],{"class":53},[39,99159,99160,99163,99165,99167,99169,99171,99173,99175,99177,99179,99181],{"class":41,"line":112},[39,99161,99162],{"class":53},"bb",[39,99164,1117],{"class":45},[39,99166,93977],{"class":53},[39,99168,1601],{"class":74},[39,99170,426],{"class":53},[39,99172,1903],{"class":74},[39,99174,93982],{"class":53},[39,99176,1339],{"class":74},[39,99178,426],{"class":53},[39,99180,1558],{"class":74},[39,99182,574],{"class":53},[39,99184,99185],{"class":41,"line":118},[39,99186,99187],{"class":128},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[39,99189,99190],{"class":41,"line":125},[39,99191,99192],{"class":128},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[39,99194,99195,99198,99200,99202,99204],{"class":41,"line":132},[39,99196,99197],{"class":53},"np.concatenate((aa,bb),",[39,99199,48489],{"class":59},[39,99201,1117],{"class":45},[39,99203,1457],{"class":74},[39,99205,574],{"class":53},[19,99207,99208],{},"结果：",[19,99210,99211],{},[2585,99212],{"alt":35,"src":99213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[30,99215,99217],{"className":31353,"code":99216,"language":31355,"meta":35,"style":35},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[26,99218,99219,99224],{"__ignoreMap":35},[39,99220,99221],{"class":41,"line":42},[39,99222,99223],{"class":128},"#指定axis为1进行拼接\n",[39,99225,99226,99228,99230,99232,99234],{"class":41,"line":92},[39,99227,99197],{"class":53},[39,99229,48489],{"class":59},[39,99231,1117],{"class":45},[39,99233,1483],{"class":74},[39,99235,574],{"class":53},[19,99237,99208],{},[19,99239,99240],{},[2585,99241],{"alt":35,"src":99242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,99244,99245],{},[350,99246,99247],{},"二维数组总结：0竖着方向，1横着方向",[19,99249,99250],{},"④三维数组拼接",[19,99252,99253],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[30,99255,99257],{"className":31353,"code":99256,"language":31355,"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",[26,99258,99259,99264,99292,99322,99327,99344,99349,99354,99359,99376,99381,99386,99391,99404],{"__ignoreMap":35},[39,99260,99261],{"class":41,"line":42},[39,99262,99263],{"class":128},"#两个三行六列\n",[39,99265,99266,99268,99270,99272,99274,99276,99278,99280,99282,99284,99286,99288,99290],{"class":41,"line":92},[39,99267,96496],{"class":53},[39,99269,1117],{"class":45},[39,99271,93977],{"class":53},[39,99273,1483],{"class":74},[39,99275,426],{"class":53},[39,99277,1589],{"class":74},[39,99279,93982],{"class":53},[39,99281,1345],{"class":74},[39,99283,426],{"class":53},[39,99285,1339],{"class":74},[39,99287,426],{"class":53},[39,99289,1608],{"class":74},[39,99291,574],{"class":53},[39,99293,99294,99297,99299,99301,99303,99305,99308,99310,99312,99314,99316,99318,99320],{"class":41,"line":112},[39,99295,99296],{"class":53},"bbb",[39,99298,1117],{"class":45},[39,99300,93977],{"class":53},[39,99302,1601],{"class":74},[39,99304,426],{"class":53},[39,99306,99307],{"class":74},"137",[39,99309,93982],{"class":53},[39,99311,1345],{"class":74},[39,99313,426],{"class":53},[39,99315,1339],{"class":74},[39,99317,426],{"class":53},[39,99319,1608],{"class":74},[39,99321,574],{"class":53},[39,99323,99324],{"class":41,"line":118},[39,99325,99326],{"class":128},"#axis=0\n",[39,99328,99329,99331,99333,99336,99338,99340,99342],{"class":41,"line":125},[39,99330,1956],{"class":53},[39,99332,1117],{"class":45},[39,99334,99335],{"class":53},"np.concatenate((aaa,bbb),",[39,99337,48489],{"class":59},[39,99339,1117],{"class":45},[39,99341,1457],{"class":74},[39,99343,574],{"class":53},[39,99345,99346],{"class":41,"line":132},[39,99347,99348],{"class":53},"s.shape\n",[39,99350,99351],{"class":41,"line":138},[39,99352,99353],{"class":128},"#输出：(4,3,6)\n",[39,99355,99356],{"class":41,"line":169},[39,99357,99358],{"class":128},"#axis=1\n",[39,99360,99361,99364,99366,99368,99370,99372,99374],{"class":41,"line":190},[39,99362,99363],{"class":53},"ss",[39,99365,1117],{"class":45},[39,99367,99335],{"class":53},[39,99369,48489],{"class":59},[39,99371,1117],{"class":45},[39,99373,1483],{"class":74},[39,99375,574],{"class":53},[39,99377,99378],{"class":41,"line":202},[39,99379,99380],{"class":53},"ss.shape\n",[39,99382,99383],{"class":41,"line":207},[39,99384,99385],{"class":128},"#输出：(2,6,6)\n",[39,99387,99388],{"class":41,"line":212},[39,99389,99390],{"class":128},"#axis=2\n",[39,99392,99393,99395,99397,99399,99401],{"class":41,"line":223},[39,99394,99335],{"class":53},[39,99396,48489],{"class":59},[39,99398,1117],{"class":45},[39,99400,1345],{"class":74},[39,99402,99403],{"class":53},").shape\n",[39,99405,99406],{"class":41,"line":228},[39,99407,99408],{"class":128},"#输出：（2，3，12）\n",[19,99410,99411],{},"⑤四维数组拼接",[30,99413,99415],{"className":31353,"code":99414,"language":31355,"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",[26,99416,99417,99421,99449,99477,99502,99528,99532,99545,99550,99554,99566,99571,99575,99587,99592,99597,99609],{"__ignoreMap":35},[39,99418,99419],{"class":41,"line":42},[39,99420,99263],{"class":128},[39,99422,99423,99425,99427,99429,99431,99433,99435,99437,99439,99441,99443,99445,99447],{"class":41,"line":92},[39,99424,96496],{"class":53},[39,99426,1117],{"class":45},[39,99428,93977],{"class":53},[39,99430,1483],{"class":74},[39,99432,426],{"class":53},[39,99434,1589],{"class":74},[39,99436,93982],{"class":53},[39,99438,1345],{"class":74},[39,99440,426],{"class":53},[39,99442,1339],{"class":74},[39,99444,426],{"class":53},[39,99446,1608],{"class":74},[39,99448,574],{"class":53},[39,99450,99451,99453,99455,99457,99459,99461,99463,99465,99467,99469,99471,99473,99475],{"class":41,"line":112},[39,99452,99296],{"class":53},[39,99454,1117],{"class":45},[39,99456,93977],{"class":53},[39,99458,1601],{"class":74},[39,99460,426],{"class":53},[39,99462,99307],{"class":74},[39,99464,93982],{"class":53},[39,99466,1345],{"class":74},[39,99468,426],{"class":53},[39,99470,1339],{"class":74},[39,99472,426],{"class":53},[39,99474,1608],{"class":74},[39,99476,574],{"class":53},[39,99478,99479,99482,99484,99486,99488,99490,99492,99494,99496,99498,99500],{"class":41,"line":118},[39,99480,99481],{"class":53},"aaaa",[39,99483,1117],{"class":45},[39,99485,98645],{"class":53},[39,99487,1345],{"class":74},[39,99489,426],{"class":53},[39,99491,1339],{"class":74},[39,99493,426],{"class":53},[39,99495,1339],{"class":74},[39,99497,426],{"class":53},[39,99499,1345],{"class":74},[39,99501,574],{"class":53},[39,99503,99504,99507,99509,99512,99514,99516,99518,99520,99522,99524,99526],{"class":41,"line":125},[39,99505,99506],{"class":53},"bbbb",[39,99508,1117],{"class":45},[39,99510,99511],{"class":53},"bbb.reshape(",[39,99513,1345],{"class":74},[39,99515,426],{"class":53},[39,99517,1339],{"class":74},[39,99519,426],{"class":53},[39,99521,1339],{"class":74},[39,99523,426],{"class":53},[39,99525,1345],{"class":74},[39,99527,574],{"class":53},[39,99529,99530],{"class":41,"line":132},[39,99531,99326],{"class":128},[39,99533,99534,99537,99539,99541,99543],{"class":41,"line":138},[39,99535,99536],{"class":53},"np.concatenate((aaaa,bbbb),",[39,99538,48489],{"class":59},[39,99540,1117],{"class":45},[39,99542,1457],{"class":74},[39,99544,99403],{"class":53},[39,99546,99547],{"class":41,"line":169},[39,99548,99549],{"class":128},"#结果：（4，3，3，2）\n",[39,99551,99552],{"class":41,"line":190},[39,99553,99358],{"class":128},[39,99555,99556,99558,99560,99562,99564],{"class":41,"line":202},[39,99557,99536],{"class":53},[39,99559,48489],{"class":59},[39,99561,1117],{"class":45},[39,99563,1483],{"class":74},[39,99565,99403],{"class":53},[39,99567,99568],{"class":41,"line":207},[39,99569,99570],{"class":128},"#结果：（2，6，3，2）\n",[39,99572,99573],{"class":41,"line":212},[39,99574,99390],{"class":128},[39,99576,99577,99579,99581,99583,99585],{"class":41,"line":223},[39,99578,99536],{"class":53},[39,99580,48489],{"class":59},[39,99582,1117],{"class":45},[39,99584,1345],{"class":74},[39,99586,99403],{"class":53},[39,99588,99589],{"class":41,"line":228},[39,99590,99591],{"class":128},"#结果：（2，3，6，2）\n",[39,99593,99594],{"class":41,"line":263},[39,99595,99596],{"class":128},"#axis=3\n",[39,99598,99599,99601,99603,99605,99607],{"class":41,"line":287},[39,99600,99536],{"class":53},[39,99602,48489],{"class":59},[39,99604,1117],{"class":45},[39,99606,1339],{"class":74},[39,99608,99403],{"class":53},[39,99610,99611],{"class":41,"line":292},[39,99612,99613],{"class":128},"#结果：（2，3，3，4）\n",[14,99615,99617],{"id":99616},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99619,99620],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99622,99623],{},"①二维数组",[30,99625,99627],{"className":31353,"code":99626,"language":31355,"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",[26,99628,99629,99653,99677,99682,99687],{"__ignoreMap":35},[39,99630,99631,99633,99635,99637,99639,99641,99643,99645,99647,99649,99651],{"class":41,"line":42},[39,99632,94281],{"class":53},[39,99634,1117],{"class":45},[39,99636,93977],{"class":53},[39,99638,1483],{"class":74},[39,99640,426],{"class":53},[39,99642,1784],{"class":74},[39,99644,93982],{"class":53},[39,99646,1339],{"class":74},[39,99648,426],{"class":53},[39,99650,1558],{"class":74},[39,99652,574],{"class":53},[39,99654,99655,99657,99659,99661,99663,99665,99667,99669,99671,99673,99675],{"class":41,"line":92},[39,99656,99162],{"class":53},[39,99658,1117],{"class":45},[39,99660,93977],{"class":53},[39,99662,1601],{"class":74},[39,99664,426],{"class":53},[39,99666,1903],{"class":74},[39,99668,93982],{"class":53},[39,99670,1339],{"class":74},[39,99672,426],{"class":53},[39,99674,1558],{"class":74},[39,99676,574],{"class":53},[39,99678,99679],{"class":41,"line":112},[39,99680,99681],{"class":53},"np.hstack((aa,bb))\n",[39,99683,99684],{"class":41,"line":118},[39,99685,99686],{"class":128},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[39,99688,99689],{"class":41,"line":125},[39,99690,99691],{"class":128},"#np.hstack([aa,bb])\n",[19,99693,99208],{},[19,99695,99696],{},[2585,99697],{"alt":35,"src":99698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,99700,99701],{},"等效于concatenate()函数中axis=1时的情况",[19,99703,99704],{},"②三维数组",[30,99706,99708],{"className":31353,"code":99707,"language":31355,"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",[26,99709,99710,99714,99742,99770,99775,99780],{"__ignoreMap":35},[39,99711,99712],{"class":41,"line":42},[39,99713,99263],{"class":128},[39,99715,99716,99718,99720,99722,99724,99726,99728,99730,99732,99734,99736,99738,99740],{"class":41,"line":92},[39,99717,96496],{"class":53},[39,99719,1117],{"class":45},[39,99721,93977],{"class":53},[39,99723,1483],{"class":74},[39,99725,426],{"class":53},[39,99727,1589],{"class":74},[39,99729,93982],{"class":53},[39,99731,1345],{"class":74},[39,99733,426],{"class":53},[39,99735,1339],{"class":74},[39,99737,426],{"class":53},[39,99739,1608],{"class":74},[39,99741,574],{"class":53},[39,99743,99744,99746,99748,99750,99752,99754,99756,99758,99760,99762,99764,99766,99768],{"class":41,"line":112},[39,99745,99296],{"class":53},[39,99747,1117],{"class":45},[39,99749,93977],{"class":53},[39,99751,1601],{"class":74},[39,99753,426],{"class":53},[39,99755,99307],{"class":74},[39,99757,93982],{"class":53},[39,99759,1345],{"class":74},[39,99761,426],{"class":53},[39,99763,1339],{"class":74},[39,99765,426],{"class":53},[39,99767,1608],{"class":74},[39,99769,574],{"class":53},[39,99771,99772],{"class":41,"line":118},[39,99773,99774],{"class":128},"#使用hstack\n",[39,99776,99777],{"class":41,"line":125},[39,99778,99779],{"class":53},"np.hstack((aaa,bbb)).shape\n",[39,99781,99782],{"class":41,"line":132},[39,99783,99784],{"class":128},"#输出：（2，6，6）\n",[14,99786,99788],{"id":99787},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99790,99791],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99793,99623],{},[30,99795,99797],{"className":31353,"code":99796,"language":31355,"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",[26,99798,99799,99823,99847,99852,99857,99862],{"__ignoreMap":35},[39,99800,99801,99803,99805,99807,99809,99811,99813,99815,99817,99819,99821],{"class":41,"line":42},[39,99802,94281],{"class":53},[39,99804,1117],{"class":45},[39,99806,93977],{"class":53},[39,99808,1483],{"class":74},[39,99810,426],{"class":53},[39,99812,1784],{"class":74},[39,99814,93982],{"class":53},[39,99816,1339],{"class":74},[39,99818,426],{"class":53},[39,99820,1558],{"class":74},[39,99822,574],{"class":53},[39,99824,99825,99827,99829,99831,99833,99835,99837,99839,99841,99843,99845],{"class":41,"line":92},[39,99826,99162],{"class":53},[39,99828,1117],{"class":45},[39,99830,93977],{"class":53},[39,99832,1601],{"class":74},[39,99834,426],{"class":53},[39,99836,1903],{"class":74},[39,99838,93982],{"class":53},[39,99840,1339],{"class":74},[39,99842,426],{"class":53},[39,99844,1558],{"class":74},[39,99846,574],{"class":53},[39,99848,99849],{"class":41,"line":112},[39,99850,99851],{"class":128},"#vstack 垂直方向进行堆叠\n",[39,99853,99854],{"class":41,"line":118},[39,99855,99856],{"class":53},"np.vstack((aa,bb))\n",[39,99858,99859],{"class":41,"line":125},[39,99860,99861],{"class":128},"#与hstack传的参数类似，等价于：\n",[39,99863,99864],{"class":41,"line":132},[39,99865,99866],{"class":53},"np.vstack([aa,bb])\n",[19,99868,99208],{},[19,99870,99871],{},[2585,99872],{"alt":35,"src":99873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99875,99704],{},[30,99877,99879],{"className":31353,"code":99878,"language":31355,"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",[26,99880,99881,99885,99913,99941,99946,99951],{"__ignoreMap":35},[39,99882,99883],{"class":41,"line":42},[39,99884,99263],{"class":128},[39,99886,99887,99889,99891,99893,99895,99897,99899,99901,99903,99905,99907,99909,99911],{"class":41,"line":92},[39,99888,96496],{"class":53},[39,99890,1117],{"class":45},[39,99892,93977],{"class":53},[39,99894,1483],{"class":74},[39,99896,426],{"class":53},[39,99898,1589],{"class":74},[39,99900,93982],{"class":53},[39,99902,1345],{"class":74},[39,99904,426],{"class":53},[39,99906,1339],{"class":74},[39,99908,426],{"class":53},[39,99910,1608],{"class":74},[39,99912,574],{"class":53},[39,99914,99915,99917,99919,99921,99923,99925,99927,99929,99931,99933,99935,99937,99939],{"class":41,"line":112},[39,99916,99296],{"class":53},[39,99918,1117],{"class":45},[39,99920,93977],{"class":53},[39,99922,1601],{"class":74},[39,99924,426],{"class":53},[39,99926,99307],{"class":74},[39,99928,93982],{"class":53},[39,99930,1345],{"class":74},[39,99932,426],{"class":53},[39,99934,1339],{"class":74},[39,99936,426],{"class":53},[39,99938,1608],{"class":74},[39,99940,574],{"class":53},[39,99942,99943],{"class":41,"line":118},[39,99944,99945],{"class":128},"#使用vstack\n",[39,99947,99948],{"class":41,"line":125},[39,99949,99950],{"class":53},"np.vstack((aaa,bbb)).shape\n",[39,99952,99953],{"class":41,"line":132},[39,99954,99955],{"class":128},"#输出：（4，3，6）\n",[14,99957,99959],{"id":99958},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99961,99962],{},"该方法是三维数组特有的方法",[19,99964,99965],{},"也就是说",[19,99967,99968],{},"一维数组拼接方法用：concatenate()",[19,99970,99971],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99973,99974],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99976,99977],{},"四维数组及多维数组只能用concatenate进行拼接",[30,99979,99981],{"className":31353,"code":99980,"language":31355,"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",[26,99982,99983,99987,100015,100043,100048,100053],{"__ignoreMap":35},[39,99984,99985],{"class":41,"line":42},[39,99986,99263],{"class":128},[39,99988,99989,99991,99993,99995,99997,99999,100001,100003,100005,100007,100009,100011,100013],{"class":41,"line":92},[39,99990,96496],{"class":53},[39,99992,1117],{"class":45},[39,99994,93977],{"class":53},[39,99996,1483],{"class":74},[39,99998,426],{"class":53},[39,100000,1589],{"class":74},[39,100002,93982],{"class":53},[39,100004,1345],{"class":74},[39,100006,426],{"class":53},[39,100008,1339],{"class":74},[39,100010,426],{"class":53},[39,100012,1608],{"class":74},[39,100014,574],{"class":53},[39,100016,100017,100019,100021,100023,100025,100027,100029,100031,100033,100035,100037,100039,100041],{"class":41,"line":112},[39,100018,99296],{"class":53},[39,100020,1117],{"class":45},[39,100022,93977],{"class":53},[39,100024,1601],{"class":74},[39,100026,426],{"class":53},[39,100028,99307],{"class":74},[39,100030,93982],{"class":53},[39,100032,1345],{"class":74},[39,100034,426],{"class":53},[39,100036,1339],{"class":74},[39,100038,426],{"class":53},[39,100040,1608],{"class":74},[39,100042,574],{"class":53},[39,100044,100045],{"class":41,"line":118},[39,100046,100047],{"class":128},"#使用dstack\n",[39,100049,100050],{"class":41,"line":125},[39,100051,100052],{"class":53},"np.dstack((aaa,bbb)).shape\n",[39,100054,100055],{"class":41,"line":132},[39,100056,100057],{"class":128},"#结果：（2，3，12）\n",[1192,100059,100060],{},"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":92,"depth":92,"links":100062},[100063,100064,100065,100066],{"id":99002,"depth":92,"text":99003},{"id":99616,"depth":92,"text":99617},{"id":99787,"depth":92,"text":99788},{"id":99958,"depth":92,"text":99959},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98994,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100073,"title":100074,"body":100075,"description":24350,"extension":1203,"meta":100350,"navigation":121,"path":100351,"seo":100352,"stem":100353,"__hash__":100354},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100076,"toc":100348},[100077,100080,100083,100177,100180,100183,100186,100189,100192,100195,100198,100201,100345],[10,100078,100074],{"id":100079},"_7数组转置",[19,100081,100082],{},"使用transpose()函数",[30,100084,100086],{"className":31353,"code":100085,"language":31355,"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",[26,100087,100088,100098,100122,100127,100132,100137,100142,100150,100154,100158,100163,100168,100173],{"__ignoreMap":35},[39,100089,100090,100092,100094,100096],{"class":41,"line":42},[39,100091,31367],{"class":45},[39,100093,32355],{"class":53},[39,100095,32358],{"class":45},[39,100097,32361],{"class":53},[39,100099,100100,100102,100104,100106,100108,100110,100112,100114,100116,100118,100120],{"class":41,"line":92},[39,100101,922],{"class":53},[39,100103,1117],{"class":45},[39,100105,32692],{"class":53},[39,100107,1483],{"class":74},[39,100109,426],{"class":53},[39,100111,1784],{"class":74},[39,100113,93982],{"class":53},[39,100115,1558],{"class":74},[39,100117,426],{"class":53},[39,100119,1339],{"class":74},[39,100121,574],{"class":53},[39,100123,100124],{"class":41,"line":112},[39,100125,100126],{"class":128},"#二维数组转置\n",[39,100128,100129],{"class":41,"line":118},[39,100130,100131],{"class":128},"#调用transpose()函数\n",[39,100133,100134],{"class":41,"line":125},[39,100135,100136],{"class":53},"a.transpose()\n",[39,100138,100139],{"class":41,"line":132},[39,100140,100141],{"class":128},"#对于二维数组也可以采用.T来实现\n",[39,100143,100144,100147],{"class":41,"line":138},[39,100145,100146],{"class":53},"a.T",[39,100148,100149],{"class":128},"#与上述代码一样\n",[39,100151,100152],{"class":41,"line":169},[39,100153,94539],{"class":128},[39,100155,100156],{"class":41,"line":190},[39,100157,94903],{"class":237},[39,100159,100160],{"class":41,"line":202},[39,100161,100162],{"class":237},"array([[ 1,  4,  7, 10],\n",[39,100164,100165],{"class":41,"line":207},[39,100166,100167],{"class":237},"       [ 2,  5,  8, 11],\n",[39,100169,100170],{"class":41,"line":212},[39,100171,100172],{"class":237},"       [ 3,  6,  9, 12]])\n",[39,100174,100175],{"class":41,"line":223},[39,100176,94903],{"class":237},[19,100178,100179],{},"也可以使用np.transpose()的形式",[19,100181,100182],{},"#多维数组进行转置 np.transpose()",[19,100184,100185],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100187,100188],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100190,100191],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100193,100194],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100196,100197],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100199,100200],{},"四维及以上的数组也是一样的道理",[30,100202,100204],{"className":31353,"code":100203,"language":31355,"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",[26,100205,100206,100234,100239,100244,100249,100267,100272,100304,100309,100314,100319,100340],{"__ignoreMap":35},[39,100207,100208,100210,100212,100214,100216,100218,100220,100222,100224,100226,100228,100230,100232],{"class":41,"line":42},[39,100209,2080],{"class":53},[39,100211,1117],{"class":45},[39,100213,93977],{"class":53},[39,100215,1483],{"class":74},[39,100217,426],{"class":53},[39,100219,1589],{"class":74},[39,100221,93982],{"class":53},[39,100223,1339],{"class":74},[39,100225,426],{"class":53},[39,100227,1608],{"class":74},[39,100229,426],{"class":53},[39,100231,1345],{"class":74},[39,100233,574],{"class":53},[39,100235,100236],{"class":41,"line":92},[39,100237,100238],{"class":53},"x.shape\n",[39,100240,100241],{"class":41,"line":112},[39,100242,100243],{"class":128},"#结果：（3,6,2）\n",[39,100245,100246],{"class":41,"line":118},[39,100247,100248],{"class":128},"#使用np.transpose()进行转置 变为(2,6,3)\n",[39,100250,100251,100254,100256,100258,100260,100262,100264],{"class":41,"line":125},[39,100252,100253],{"class":53},"np.transpose(x,(",[39,100255,1345],{"class":74},[39,100257,426],{"class":53},[39,100259,1483],{"class":74},[39,100261,426],{"class":53},[39,100263,1457],{"class":74},[39,100265,100266],{"class":53},")).shape\n",[39,100268,100269],{"class":41,"line":132},[39,100270,100271],{"class":128},"#结果：(2,6,3)\n",[39,100273,100274,100276,100278,100280,100282,100284,100286,100288,100290,100292,100294,100296,100298,100300,100302],{"class":41,"line":138},[39,100275,99481],{"class":53},[39,100277,1117],{"class":45},[39,100279,93977],{"class":53},[39,100281,1483],{"class":74},[39,100283,426],{"class":53},[39,100285,1589],{"class":74},[39,100287,93982],{"class":53},[39,100289,1339],{"class":74},[39,100291,426],{"class":53},[39,100293,1345],{"class":74},[39,100295,426],{"class":53},[39,100297,1483],{"class":74},[39,100299,426],{"class":53},[39,100301,1608],{"class":74},[39,100303,574],{"class":53},[39,100305,100306],{"class":41,"line":169},[39,100307,100308],{"class":53},"aaaa.shape\n",[39,100310,100311],{"class":41,"line":190},[39,100312,100313],{"class":128},"#结果：（3，2，1，6）\n",[39,100315,100316],{"class":41,"line":202},[39,100317,100318],{"class":128},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[39,100320,100321,100324,100326,100328,100330,100332,100334,100336,100338],{"class":41,"line":207},[39,100322,100323],{"class":53},"np.transpose(aaaa,(",[39,100325,1483],{"class":74},[39,100327,426],{"class":53},[39,100329,1345],{"class":74},[39,100331,426],{"class":53},[39,100333,1457],{"class":74},[39,100335,426],{"class":53},[39,100337,1339],{"class":74},[39,100339,100266],{"class":53},[39,100341,100342],{"class":41,"line":212},[39,100343,100344],{"class":128},"#结果：(2,1,3,6)\n",[1192,100346,100347],{},"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":92,"depth":92,"links":100349},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100074,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100356,"title":100357,"body":100358,"description":24350,"extension":1203,"meta":101092,"navigation":121,"path":101093,"seo":101094,"stem":101095,"__hash__":101096},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100359,"toc":101090},[100360,100363,100366,100369,100372,100375,100378,100381,100384,100493,100496,100499,101087],[10,100361,100357],{"id":100362},"_8数组分割",[19,100364,100365],{},"split分割",[19,100367,100368],{},"numpy.split(ary,indics_or_sections,axis)",[19,100370,100371],{},"解释：",[19,100373,100374],{},"ary:被分割的数组",[19,100376,100377],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,100379,100380],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,100382,100383],{},"①一维数组的分割",[30,100385,100387],{"className":31353,"code":100386,"language":31355,"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",[26,100388,100389,100405,100410,100419,100423,100428,100436,100440,100445,100450,100463,100467,100472,100484,100488],{"__ignoreMap":35},[39,100390,100391,100393,100395,100397,100399,100401,100403],{"class":41,"line":42},[39,100392,922],{"class":53},[39,100394,1117],{"class":45},[39,100396,93977],{"class":53},[39,100398,1483],{"class":74},[39,100400,426],{"class":53},[39,100402,1683],{"class":74},[39,100404,574],{"class":53},[39,100406,100407],{"class":41,"line":92},[39,100408,100409],{"class":128},"#如果传入整数，必须能够平分，否则会报错\n",[39,100411,100412,100415,100417],{"class":41,"line":112},[39,100413,100414],{"class":53},"np.split(a,",[39,100416,1345],{"class":74},[39,100418,574],{"class":53},[39,100420,100421],{"class":41,"line":118},[39,100422,94539],{"class":128},[39,100424,100425],{"class":41,"line":125},[39,100426,100427],{"class":128},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[39,100429,100430,100432,100434],{"class":41,"line":132},[39,100431,100414],{"class":53},[39,100433,1558],{"class":74},[39,100435,574],{"class":53},[39,100437,100438],{"class":41,"line":138},[39,100439,94539],{"class":128},[39,100441,100442],{"class":41,"line":169},[39,100443,100444],{"class":128},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[39,100446,100447],{"class":41,"line":190},[39,100448,100449],{"class":128},"#传入数组\n",[39,100451,100452,100455,100457,100459,100461],{"class":41,"line":202},[39,100453,100454],{"class":53},"np.split(a,[",[39,100456,1339],{"class":74},[39,100458,426],{"class":53},[39,100460,1583],{"class":74},[39,100462,5738],{"class":53},[39,100464,100465],{"class":41,"line":207},[39,100466,94539],{"class":128},[39,100468,100469],{"class":41,"line":212},[39,100470,100471],{"class":128},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[39,100473,100474,100476,100478,100480,100482],{"class":41,"line":223},[39,100475,100454],{"class":53},[39,100477,1583],{"class":74},[39,100479,426],{"class":53},[39,100481,1633],{"class":74},[39,100483,5738],{"class":53},[39,100485,100486],{"class":41,"line":228},[39,100487,94539],{"class":128},[39,100489,100490],{"class":41,"line":263},[39,100491,100492],{"class":128},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,100494,100495],{},"②二维数组的分割",[19,100497,100498],{},"使用split()",[30,100500,100502],{"className":31353,"code":100501,"language":31355,"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",[26,100503,100504,100509,100533,100538,100547,100551,100555,100560,100565,100570,100575,100580,100585,100590,100594,100607,100611,100615,100619,100623,100627,100632,100637,100642,100646,100651,100667,100671,100675,100680,100685,100690,100695,100700,100705,100710,100715,100720,100725,100730,100735,100740,100745,100750,100755,100760,100765,100769,100773,100793,100797,100801,100806,100811,100816,100821,100826,100831,100836,100841,100846,100851,100856,100861,100866,100871,100876,100881,100886,100891,100895,100900,100909,100913,100917,100921,100925,100929,100933,100937,100941,100945,100954,100958,100962,100966,100970,100974,100978,100982,100986,100990,100994,100998,101002,101006,101010,101014,101018,101022,101026,101030,101034,101038,101051,101055,101059,101063,101067,101071,101075,101079,101083],{"__ignoreMap":35},[39,100505,100506],{"class":41,"line":42},[39,100507,100508],{"class":128},"#二维数组分割\n",[39,100510,100511,100513,100515,100517,100519,100521,100523,100525,100527,100529,100531],{"class":41,"line":92},[39,100512,94281],{"class":53},[39,100514,1117],{"class":45},[39,100516,93977],{"class":53},[39,100518,1483],{"class":74},[39,100520,426],{"class":53},[39,100522,1589],{"class":74},[39,100524,93982],{"class":53},[39,100526,1608],{"class":74},[39,100528,426],{"class":53},[39,100530,1608],{"class":74},[39,100532,574],{"class":53},[39,100534,100535],{"class":41,"line":112},[39,100536,100537],{"class":128},"#默认axis=0  传入整数平均分,按行来的\n",[39,100539,100540,100543,100545],{"class":41,"line":118},[39,100541,100542],{"class":53},"np.split(aa,",[39,100544,1339],{"class":74},[39,100546,574],{"class":53},[39,100548,100549],{"class":41,"line":125},[39,100550,96739],{"class":128},[39,100552,100553],{"class":41,"line":132},[39,100554,94903],{"class":237},[39,100556,100557],{"class":41,"line":138},[39,100558,100559],{"class":237},"[array([[ 1,  2,  3,  4,  5,  6],\n",[39,100561,100562],{"class":41,"line":169},[39,100563,100564],{"class":237},"        [ 7,  8,  9, 10, 11, 12]]),\n",[39,100566,100567],{"class":41,"line":190},[39,100568,100569],{"class":237}," array([[13, 14, 15, 16, 17, 18],\n",[39,100571,100572],{"class":41,"line":202},[39,100573,100574],{"class":237},"        [19, 20, 21, 22, 23, 24]]),\n",[39,100576,100577],{"class":41,"line":207},[39,100578,100579],{"class":237}," array([[25, 26, 27, 28, 29, 30],\n",[39,100581,100582],{"class":41,"line":212},[39,100583,100584],{"class":237},"        [31, 32, 33, 34, 35, 36]])]\n",[39,100586,100587],{"class":41,"line":223},[39,100588,100589],{"class":237}," '''\n",[39,100591,100592],{"class":41,"line":228},[39,100593,100449],{"class":128},[39,100595,100596,100599,100601,100603,100605],{"class":41,"line":263},[39,100597,100598],{"class":53},"np.split(aa,[",[39,100600,1345],{"class":74},[39,100602,426],{"class":53},[39,100604,1583],{"class":74},[39,100606,5738],{"class":53},[39,100608,100609],{"class":41,"line":287},[39,100610,96739],{"class":128},[39,100612,100613],{"class":41,"line":292},[39,100614,94903],{"class":237},[39,100616,100617],{"class":41,"line":305},[39,100618,100559],{"class":237},[39,100620,100621],{"class":41,"line":310},[39,100622,100564],{"class":237},[39,100624,100625],{"class":41,"line":321},[39,100626,100569],{"class":237},[39,100628,100629],{"class":41,"line":713},[39,100630,100631],{"class":237},"        [19, 20, 21, 22, 23, 24],\n",[39,100633,100634],{"class":41,"line":718},[39,100635,100636],{"class":237},"        [25, 26, 27, 28, 29, 30]]),\n",[39,100638,100639],{"class":41,"line":723},[39,100640,100641],{"class":237}," array([[31, 32, 33, 34, 35, 36]])]\n",[39,100643,100644],{"class":41,"line":729},[39,100645,94903],{"class":237},[39,100647,100648],{"class":41,"line":735},[39,100649,100650],{"class":128},"#axis=1 按照列来分\n",[39,100652,100653,100655,100657,100659,100661,100663,100665],{"class":41,"line":741},[39,100654,100542],{"class":53},[39,100656,1339],{"class":74},[39,100658,426],{"class":53},[39,100660,48489],{"class":59},[39,100662,1117],{"class":45},[39,100664,1483],{"class":74},[39,100666,574],{"class":53},[39,100668,100669],{"class":41,"line":747},[39,100670,96739],{"class":128},[39,100672,100673],{"class":41,"line":753},[39,100674,94903],{"class":237},[39,100676,100677],{"class":41,"line":758},[39,100678,100679],{"class":237},"[array([[ 1,  2],\n",[39,100681,100682],{"class":41,"line":763},[39,100683,100684],{"class":237},"        [ 7,  8],\n",[39,100686,100687],{"class":41,"line":772},[39,100688,100689],{"class":237},"        [13, 14],\n",[39,100691,100692],{"class":41,"line":777},[39,100693,100694],{"class":237},"        [19, 20],\n",[39,100696,100697],{"class":41,"line":785},[39,100698,100699],{"class":237},"        [25, 26],\n",[39,100701,100702],{"class":41,"line":796},[39,100703,100704],{"class":237},"        [31, 32]]),\n",[39,100706,100707],{"class":41,"line":808},[39,100708,100709],{"class":237}," array([[ 3,  4],\n",[39,100711,100712],{"class":41,"line":823},[39,100713,100714],{"class":237},"        [ 9, 10],\n",[39,100716,100717],{"class":41,"line":839},[39,100718,100719],{"class":237},"        [15, 16],\n",[39,100721,100722],{"class":41,"line":845},[39,100723,100724],{"class":237},"        [21, 22],\n",[39,100726,100727],{"class":41,"line":856},[39,100728,100729],{"class":237},"        [27, 28],\n",[39,100731,100732],{"class":41,"line":861},[39,100733,100734],{"class":237},"        [33, 34]]),\n",[39,100736,100737],{"class":41,"line":870},[39,100738,100739],{"class":237}," array([[ 5,  6],\n",[39,100741,100742],{"class":41,"line":9084},[39,100743,100744],{"class":237},"        [11, 12],\n",[39,100746,100747],{"class":41,"line":9090},[39,100748,100749],{"class":237},"        [17, 18],\n",[39,100751,100752],{"class":41,"line":9102},[39,100753,100754],{"class":237},"        [23, 24],\n",[39,100756,100757],{"class":41,"line":9114},[39,100758,100759],{"class":237},"        [29, 30],\n",[39,100761,100762],{"class":41,"line":9126},[39,100763,100764],{"class":237},"        [35, 36]])]\n",[39,100766,100767],{"class":41,"line":10784},[39,100768,100589],{"class":237},[39,100770,100771],{"class":41,"line":10809},[39,100772,100449],{"class":128},[39,100774,100775,100777,100779,100781,100783,100785,100787,100789,100791],{"class":41,"line":10832},[39,100776,100598],{"class":53},[39,100778,1483],{"class":74},[39,100780,426],{"class":53},[39,100782,1345],{"class":74},[39,100784,42584],{"class":53},[39,100786,48489],{"class":59},[39,100788,1117],{"class":45},[39,100790,1483],{"class":74},[39,100792,574],{"class":53},[39,100794,100795],{"class":41,"line":10856},[39,100796,94539],{"class":128},[39,100798,100799],{"class":41,"line":10861},[39,100800,94903],{"class":237},[39,100802,100803],{"class":41,"line":10866},[39,100804,100805],{"class":237},"[array([[ 1],\n",[39,100807,100808],{"class":41,"line":10871},[39,100809,100810],{"class":237},"        [ 7],\n",[39,100812,100813],{"class":41,"line":10880},[39,100814,100815],{"class":237},"        [13],\n",[39,100817,100818],{"class":41,"line":10885},[39,100819,100820],{"class":237},"        [19],\n",[39,100822,100823],{"class":41,"line":10891},[39,100824,100825],{"class":237},"        [25],\n",[39,100827,100828],{"class":41,"line":10912},[39,100829,100830],{"class":237},"        [31]]),\n",[39,100832,100833],{"class":41,"line":10918},[39,100834,100835],{"class":237}," array([[ 2],\n",[39,100837,100838],{"class":41,"line":10932},[39,100839,100840],{"class":237},"        [ 8],\n",[39,100842,100843],{"class":41,"line":10938},[39,100844,100845],{"class":237},"        [14],\n",[39,100847,100848],{"class":41,"line":10965},[39,100849,100850],{"class":237},"        [20],\n",[39,100852,100853],{"class":41,"line":10974},[39,100854,100855],{"class":237},"        [26],\n",[39,100857,100858],{"class":41,"line":10980},[39,100859,100860],{"class":237},"        [32]]),\n",[39,100862,100863],{"class":41,"line":10988},[39,100864,100865],{"class":237}," array([[ 3,  4,  5,  6],\n",[39,100867,100868],{"class":41,"line":10993},[39,100869,100870],{"class":237},"        [ 9, 10, 11, 12],\n",[39,100872,100873],{"class":41,"line":17577},[39,100874,100875],{"class":237},"        [15, 16, 17, 18],\n",[39,100877,100878],{"class":41,"line":17583},[39,100879,100880],{"class":237},"        [21, 22, 23, 24],\n",[39,100882,100883],{"class":41,"line":17606},[39,100884,100885],{"class":237},"        [27, 28, 29, 30],\n",[39,100887,100888],{"class":41,"line":17612},[39,100889,100890],{"class":237},"        [33, 34, 35, 36]])]\n",[39,100892,100893],{"class":41,"line":17635},[39,100894,94903],{"class":237},[39,100896,100897],{"class":41,"line":17649},[39,100898,100899],{"class":128},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[39,100901,100902,100905,100907],{"class":41,"line":17669},[39,100903,100904],{"class":53},"np.vsplit(aa,",[39,100906,1339],{"class":74},[39,100908,574],{"class":53},[39,100910,100911],{"class":41,"line":17675},[39,100912,94539],{"class":128},[39,100914,100915],{"class":41,"line":17686},[39,100916,94903],{"class":237},[39,100918,100919],{"class":41,"line":17709},[39,100920,100559],{"class":237},[39,100922,100923],{"class":41,"line":17731},[39,100924,100564],{"class":237},[39,100926,100927],{"class":41,"line":17736},[39,100928,100569],{"class":237},[39,100930,100931],{"class":41,"line":17742},[39,100932,100574],{"class":237},[39,100934,100935],{"class":41,"line":17756},[39,100936,100579],{"class":237},[39,100938,100939],{"class":41,"line":17769},[39,100940,100584],{"class":237},[39,100942,100943],{"class":41,"line":17774},[39,100944,94903],{"class":237},[39,100946,100947,100950,100952],{"class":41,"line":17788},[39,100948,100949],{"class":53},"np.hsplit(aa,",[39,100951,1339],{"class":74},[39,100953,574],{"class":53},[39,100955,100956],{"class":41,"line":17793},[39,100957,94539],{"class":128},[39,100959,100960],{"class":41,"line":17799},[39,100961,94903],{"class":237},[39,100963,100964],{"class":41,"line":17804},[39,100965,100679],{"class":237},[39,100967,100968],{"class":41,"line":17818},[39,100969,100684],{"class":237},[39,100971,100972],{"class":41,"line":17823},[39,100973,100689],{"class":237},[39,100975,100976],{"class":41,"line":17828},[39,100977,100694],{"class":237},[39,100979,100980],{"class":41,"line":17842},[39,100981,100699],{"class":237},[39,100983,100984],{"class":41,"line":17854},[39,100985,100704],{"class":237},[39,100987,100988],{"class":41,"line":17859},[39,100989,100709],{"class":237},[39,100991,100992],{"class":41,"line":17872},[39,100993,100714],{"class":237},[39,100995,100996],{"class":41,"line":17877},[39,100997,100719],{"class":237},[39,100999,101000],{"class":41,"line":17882},[39,101001,100724],{"class":237},[39,101003,101004],{"class":41,"line":17887},[39,101005,100729],{"class":237},[39,101007,101008],{"class":41,"line":17900},[39,101009,100734],{"class":237},[39,101011,101012],{"class":41,"line":17905},[39,101013,100739],{"class":237},[39,101015,101016],{"class":41,"line":33608},[39,101017,100744],{"class":237},[39,101019,101020],{"class":41,"line":33614},[39,101021,100749],{"class":237},[39,101023,101024],{"class":41,"line":33620},[39,101025,100754],{"class":237},[39,101027,101028],{"class":41,"line":33626},[39,101029,100759],{"class":237},[39,101031,101032],{"class":41,"line":33632},[39,101033,100764],{"class":237},[39,101035,101036],{"class":41,"line":33643},[39,101037,94903],{"class":237},[39,101039,101040,101043,101045,101047,101049],{"class":41,"line":33649},[39,101041,101042],{"class":53},"np.vsplit(aa,[",[39,101044,1345],{"class":74},[39,101046,426],{"class":53},[39,101048,1583],{"class":74},[39,101050,5738],{"class":53},[39,101052,101053],{"class":41,"line":33669},[39,101054,94539],{"class":128},[39,101056,101057],{"class":41,"line":33675},[39,101058,94903],{"class":237},[39,101060,101061],{"class":41,"line":33686},[39,101062,100559],{"class":237},[39,101064,101065],{"class":41,"line":33692},[39,101066,100564],{"class":237},[39,101068,101069],{"class":41,"line":33698},[39,101070,100569],{"class":237},[39,101072,101073],{"class":41,"line":33704},[39,101074,100631],{"class":237},[39,101076,101077],{"class":41,"line":33710},[39,101078,100636],{"class":237},[39,101080,101081],{"class":41,"line":33716},[39,101082,100641],{"class":237},[39,101084,101085],{"class":41,"line":33722},[39,101086,100589],{"class":237},[1192,101088,101089],{},"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":92,"depth":92,"links":101091},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100357,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101098,"title":101099,"body":101100,"description":24350,"extension":1203,"meta":101594,"navigation":121,"path":101595,"seo":101596,"stem":101597,"__hash__":101598},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101101,"toc":101585},[101102,101105,101108,101133,101137,101196,101248,101252,101254,101290,101344,101346,101384,101455,101459,101464,101468,101471,101504,101507,101511,101514,101517,101520,101523,101528,101532,101535,101538,101541,101544,101549,101553,101558,101561,101582],[10,101103,101099],{"id":101104},"_9数学函数",[19,101106,101107],{},"补充回顾：python的列表推导式",[30,101109,101111],{"className":31353,"code":101110,"language":31355,"meta":35,"style":35},"[1\u002Fi for i in a]\n",[26,101112,101113],{"__ignoreMap":35},[39,101114,101115,101117,101119,101121,101124,101126,101128,101130],{"class":41,"line":42},[39,101116,2150],{"class":53},[39,101118,1483],{"class":74},[39,101120,1845],{"class":45},[39,101122,101123],{"class":53},"i ",[39,101125,4108],{"class":45},[39,101127,10506],{"class":53},[39,101129,27018],{"class":45},[39,101131,101132],{"class":53}," a]\n",[14,101134,101136],{"id":101135},"_91-求倒数","9.1 求倒数",[30,101138,101140],{"className":31353,"code":101139,"language":31355,"meta":35,"style":35},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[26,101141,101142,101147,101175,101187],{"__ignoreMap":35},[39,101143,101144],{"class":41,"line":42},[39,101145,101146],{"class":128},"#数组求倒数\n",[39,101148,101149,101151,101153,101155,101157,101159,101161,101163,101165,101167,101169,101171,101173],{"class":41,"line":92},[39,101150,922],{"class":53},[39,101152,1117],{"class":45},[39,101154,2150],{"class":53},[39,101156,1483],{"class":74},[39,101158,426],{"class":53},[39,101160,1345],{"class":74},[39,101162,426],{"class":53},[39,101164,1339],{"class":74},[39,101166,426],{"class":53},[39,101168,1558],{"class":74},[39,101170,426],{"class":53},[39,101172,1583],{"class":74},[39,101174,34221],{"class":53},[39,101176,101177,101179,101181,101184],{"class":41,"line":112},[39,101178,1528],{"class":53},[39,101180,1117],{"class":45},[39,101182,101183],{"class":53},"np.array(a)",[39,101185,101186],{"class":128},"#将列表转换为数组\n",[39,101188,101189,101191,101193],{"class":41,"line":118},[39,101190,1483],{"class":74},[39,101192,1845],{"class":45},[39,101194,101195],{"class":53},"b\n",[30,101197,101199],{"className":31353,"code":101198,"language":31355,"meta":35,"style":35},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[26,101200,101201,101229,101238,101243],{"__ignoreMap":35},[39,101202,101203,101205,101207,101209,101211,101213,101215,101217,101219,101221,101223,101225,101227],{"class":41,"line":42},[39,101204,922],{"class":53},[39,101206,1117],{"class":45},[39,101208,2150],{"class":53},[39,101210,1483],{"class":74},[39,101212,426],{"class":53},[39,101214,1345],{"class":74},[39,101216,426],{"class":53},[39,101218,1339],{"class":74},[39,101220,426],{"class":53},[39,101222,1558],{"class":74},[39,101224,426],{"class":53},[39,101226,1583],{"class":74},[39,101228,34221],{"class":53},[39,101230,101231,101233,101235],{"class":41,"line":92},[39,101232,1528],{"class":53},[39,101234,1117],{"class":45},[39,101236,101237],{"class":53},"np.array(a)\n",[39,101239,101240],{"class":41,"line":112},[39,101241,101242],{"class":128},"#调用numpy中的函数reciprocal()\n",[39,101244,101245],{"class":41,"line":118},[39,101246,101247],{"class":53},"np.reciprocal(b)\n",[14,101249,101251],{"id":101250},"_92-求平方","9.2 求平方",[19,101253,95505],{},[30,101255,101257],{"className":31353,"code":101256,"language":31355,"meta":35,"style":35},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[26,101258,101259,101264,101269,101285],{"__ignoreMap":35},[39,101260,101261],{"class":41,"line":42},[39,101262,101263],{"class":128},"#square()，求平方\n",[39,101265,101266],{"class":41,"line":92},[39,101267,101268],{"class":128},"#一维数组\n",[39,101270,101271,101273,101275,101277,101279,101281,101283],{"class":41,"line":112},[39,101272,922],{"class":53},[39,101274,1117],{"class":45},[39,101276,93977],{"class":53},[39,101278,1483],{"class":74},[39,101280,426],{"class":53},[39,101282,423],{"class":74},[39,101284,574],{"class":53},[39,101286,101287],{"class":41,"line":118},[39,101288,101289],{"class":53},"np.square(a)\n",[30,101291,101293],{"className":31353,"code":101292,"language":31355,"meta":35,"style":35},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[26,101294,101295,101300,101305,101326],{"__ignoreMap":35},[39,101296,101297],{"class":41,"line":42},[39,101298,101299],{"class":128},"#或者通过循环遍历的形式来计算\n",[39,101301,101302],{"class":41,"line":92},[39,101303,101304],{"class":128},"#这是一个列表\n",[39,101306,101307,101310,101312,101314,101316,101318,101320,101323],{"class":41,"line":112},[39,101308,101309],{"class":53},"[i",[39,101311,1717],{"class":45},[39,101313,101123],{"class":53},[39,101315,4108],{"class":45},[39,101317,10506],{"class":53},[39,101319,27018],{"class":45},[39,101321,101322],{"class":53}," a]",[39,101324,101325],{"class":128},"#这个求完之后在数列当中\n",[39,101327,101328,101331,101333,101335,101337,101339,101341],{"class":41,"line":118},[39,101329,101330],{"class":53},"np.array([i",[39,101332,1717],{"class":45},[39,101334,101123],{"class":53},[39,101336,4108],{"class":45},[39,101338,10506],{"class":53},[39,101340,27018],{"class":45},[39,101342,101343],{"class":53}," a])\n",[19,101345,94266],{},[30,101347,101349],{"className":31353,"code":101348,"language":31355,"meta":35,"style":35},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[26,101350,101351,101355,101379],{"__ignoreMap":35},[39,101352,101353],{"class":41,"line":42},[39,101354,94276],{"class":128},[39,101356,101357,101359,101361,101363,101365,101367,101369,101371,101373,101375,101377],{"class":41,"line":92},[39,101358,94281],{"class":53},[39,101360,1117],{"class":45},[39,101362,93977],{"class":53},[39,101364,1483],{"class":74},[39,101366,426],{"class":53},[39,101368,1784],{"class":74},[39,101370,93982],{"class":53},[39,101372,1558],{"class":74},[39,101374,426],{"class":53},[39,101376,1339],{"class":74},[39,101378,574],{"class":53},[39,101380,101381],{"class":41,"line":112},[39,101382,101383],{"class":53},"np.square(aa)\n",[30,101385,101387],{"className":31353,"code":101386,"language":31355,"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",[26,101388,101389,101394,101403,101419,101435,101450],{"__ignoreMap":35},[39,101390,101391],{"class":41,"line":42},[39,101392,101393],{"class":128},"#传统的方式\n",[39,101395,101396,101398,101400],{"class":41,"line":92},[39,101397,99162],{"class":53},[39,101399,1117],{"class":45},[39,101401,101402],{"class":53},"np.empty_like(aa)\n",[39,101404,101405,101407,101409,101411,101413,101415,101417],{"class":41,"line":112},[39,101406,4108],{"class":45},[39,101408,10506],{"class":53},[39,101410,27018],{"class":45},[39,101412,33418],{"class":74},[39,101414,54],{"class":53},[39,101416,1558],{"class":74},[39,101418,31761],{"class":53},[39,101420,101421,101423,101425,101427,101429,101431,101433],{"class":41,"line":118},[39,101422,4284],{"class":45},[39,101424,10568],{"class":53},[39,101426,27018],{"class":45},[39,101428,33418],{"class":74},[39,101430,54],{"class":53},[39,101432,1339],{"class":74},[39,101434,31761],{"class":53},[39,101436,101437,101440,101442,101445,101447],{"class":41,"line":125},[39,101438,101439],{"class":53},"        bb[i,j]",[39,101441,1117],{"class":45},[39,101443,101444],{"class":53},"aa[i,j]",[39,101446,1717],{"class":45},[39,101448,101449],{"class":53},"aa[i,j]\n",[39,101451,101452],{"class":41,"line":132},[39,101453,101454],{"class":53},"bb\n",[14,101456,101458],{"id":101457},"_93-求各元素的符号","9.3 求各元素的符号",[19,101460,101461],{},[2585,101462],{"alt":35,"src":101463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101465,101467],{"id":101466},"_94-modf函数","9.4 modf函数",[19,101469,101470],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[30,101472,101474],{"className":31353,"code":101473,"language":31355,"meta":35,"style":35},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[26,101475,101476,101499],{"__ignoreMap":35},[39,101477,101478,101480,101482,101484,101486,101488,101490,101492,101494,101497],{"class":41,"line":42},[39,101479,922],{"class":53},[39,101481,1117],{"class":45},[39,101483,93977],{"class":53},[39,101485,1793],{"class":45},[39,101487,423],{"class":74},[39,101489,426],{"class":53},[39,101491,423],{"class":74},[39,101493,426],{"class":53},[39,101495,101496],{"class":74},"0.3",[39,101498,574],{"class":53},[39,101500,101501],{"class":41,"line":92},[39,101502,101503],{"class":53},"np.modf(a)\n",[19,101505,101506],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101508,101510],{"id":101509},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,101512,101513],{},"np.cell()",[19,101515,101516],{},"np.floor()",[19,101518,101519],{},"np.rint()",[19,101521,101522],{},"对各元素分别向上取整、向下取整、四舍五入",[19,101524,101525],{},[2585,101526],{"alt":35,"src":101527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101529,101531],{"id":101530},"_96-around函数","9.6 around()函数",[19,101533,101534],{},"around()函数也可以实现对数的小数位数进行操作",[19,101536,101537],{},"其中的参数：",[19,101539,101540],{},"1.要传的数组",[19,101542,101543],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,101545,101546],{},[2585,101547],{"alt":35,"src":101548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101550,101552],{"id":101551},"_97-三角函数","9.7 三角函数",[19,101554,101555],{},[2585,101556],{"alt":35,"src":101557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,101559,101560],{},"引入图像模块非常重要",[30,101562,101564],{"className":31353,"code":101563,"language":31355,"meta":35,"style":35},"from matplotlib import pyplot as plt\n",[26,101565,101566],{"__ignoreMap":35},[39,101567,101568,101570,101573,101575,101578,101580],{"class":41,"line":42},[39,101569,31712],{"class":45},[39,101571,101572],{"class":53}," matplotlib ",[39,101574,31367],{"class":45},[39,101576,101577],{"class":53}," pyplot ",[39,101579,32358],{"class":45},[39,101581,32412],{"class":53},[1192,101583,101584],{},"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":92,"depth":92,"links":101586},[101587,101588,101589,101590,101591,101592,101593],{"id":101135,"depth":92,"text":101136},{"id":101250,"depth":92,"text":101251},{"id":101457,"depth":92,"text":101458},{"id":101466,"depth":92,"text":101467},{"id":101509,"depth":92,"text":101510},{"id":101530,"depth":92,"text":101531},{"id":101551,"depth":92,"text":101552},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101099,"description":24350},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101600,"title":101601,"body":101602,"description":24350,"extension":1203,"meta":101606,"navigation":121,"path":101607,"seo":101608,"stem":101609,"__hash__":101610},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101603,"toc":101604},[],{"title":35,"searchDepth":92,"depth":92,"links":101605},[],{"category":51395},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101601,"description":24350},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101612,"title":101613,"body":101614,"description":35,"extension":1203,"meta":103622,"navigation":121,"path":103623,"seo":103624,"stem":103625,"__hash__":103626},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101615,"toc":103598},[101616,101619,101623,101626,101629,101635,101638,101661,101664,101698,101701,101742,101746,101749,101842,101845,101889,101892,101909,101912,101926,101929,101932,101977,101980,102017,102021,102024,102030,102035,102055,102059,102062,102128,102131,102149,102153,102156,102185,102195,102201,102205,102208,102214,102225,102229,102232,102262,102265,102545,102548,102551,102562,102565,102568,102590,102597,102600,102618,102621,102624,102638,102646,102649,102675,102681,102684,102687,102697,102709,102729,102738,102758,102768,102792,102805,102819,102824,102865,102882,102907,102919,102939,102945,102990,103009,103026,103039,103055,103062,103074,103083,103118,103139,103164,103177,103201,103216,103241,103244,103265,103274,103277,103288,103292,103295,103301,103313,103320,103324,103327,103339,103342,103356,103359,103369,103379,103382,103422,103425,103429,103435,103438,103452,103456,103459,103492,103496,103499,103522,103530,103533,103539,103545,103548,103551,103579,103583,103586,103592,103595],[10,101617,101613],{"id":101618},"_1环境安装与第一个-mujoco-程序",[14,101620,101622],{"id":101621},"_1目标说明","1.目标说明",[19,101624,101625],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101627,101628],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[30,101630,101633],{"className":101631,"code":101632,"language":6267,"meta":35},[6265],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[26,101634,101632],{"__ignoreMap":35},[19,101636,101637],{},"需要掌握:",[328,101639,101640,101643,101646,101651,101656],{},[331,101641,101642],{},"Fedora 44 下 MuJoCo 的系统依赖",[331,101644,101645],{},"Python 虚拟环境创建",[331,101647,101648],{},[26,101649,101650],{},"mujoco.MjModel",[331,101652,101653],{},[26,101654,101655],{},"mujoco.MjData",[331,101657,101658],{},[26,101659,101660],{},"mujoco.mj_step(model, data)",[19,101662,101663],{},"MuJoCo 中最重要的两个对象:",[1404,101665,101666,101676],{},[1407,101667,101668],{},[1410,101669,101670,101673],{},[1413,101671,101672],{"align":24710},"对象",[1413,101674,101675],{"align":24710},"含义",[1450,101677,101678,101688],{},[1410,101679,101680,101685],{},[1455,101681,101682],{"align":24710},[26,101683,101684],{},"MjModel",[1455,101686,101687],{"align":24710},"模型结构，来自 XML，基本不随时间变化",[1410,101689,101690,101695],{},[1455,101691,101692],{"align":24710},[26,101693,101694],{},"MjData",[1455,101696,101697],{"align":24710},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,101699,101700],{},"可以先用一个类比理解：",[1404,101702,101703,101713],{},[1407,101704,101705],{},[1410,101706,101707,101710],{},[1413,101708,101709],{"align":24710},"类比",[1413,101711,101712],{"align":24710},"MuJoCo 对象",[1450,101714,101715,101724,101733],{},[1410,101716,101717,101720],{},[1455,101718,101719],{"align":24710},"游戏地图和角色配置",[1455,101721,101722],{"align":24710},[26,101723,101684],{},[1410,101725,101726,101729],{},[1455,101727,101728],{"align":24710},"游戏运行到当前帧的状态",[1455,101730,101731],{"align":24710},[26,101732,101694],{},[1410,101734,101735,101738],{},[1455,101736,101737],{"align":24710},"前进一帧",[1455,101739,101740],{"align":24710},[26,101741,101660],{},[14,101743,101745],{"id":101744},"_2环境与依赖安装","2.环境与依赖安装",[19,101747,101748],{},"Fedora 44 系统依赖:",[30,101750,101752],{"className":24796,"code":101751,"language":24798,"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",[26,101753,101754,101766,101779,101792,101802,101812,101831],{"__ignoreMap":35},[39,101755,101756,101758,101760,101762,101764],{"class":41,"line":42},[39,101757,25551],{"class":49},[39,101759,27290],{"class":237},[39,101761,24808],{"class":237},[39,101763,27375],{"class":74},[39,101765,25653],{"class":74},[39,101767,101768,101771,101774,101777],{"class":41,"line":92},[39,101769,101770],{"class":237},"  python3",[39,101772,101773],{"class":237}," python3-pip",[39,101775,101776],{"class":237}," python3-virtualenv",[39,101778,25653],{"class":74},[39,101780,101781,101784,101787,101790],{"class":41,"line":112},[39,101782,101783],{"class":237},"  mesa-libGL",[39,101785,101786],{"class":237}," mesa-libGLU",[39,101788,101789],{"class":237}," mesa-dri-drivers",[39,101791,25653],{"class":74},[39,101793,101794,101797,101800],{"class":41,"line":118},[39,101795,101796],{"class":237},"  libglvnd-glx",[39,101798,101799],{"class":237}," libglvnd-opengl",[39,101801,25653],{"class":74},[39,101803,101804,101807,101810],{"class":41,"line":125},[39,101805,101806],{"class":237},"  glfw",[39,101808,101809],{"class":237}," glfw-devel",[39,101811,25653],{"class":74},[39,101813,101814,101817,101820,101823,101826,101829],{"class":41,"line":132},[39,101815,101816],{"class":237},"  libX11",[39,101818,101819],{"class":237}," libXcursor",[39,101821,101822],{"class":237}," libXi",[39,101824,101825],{"class":237}," libXinerama",[39,101827,101828],{"class":237}," libXrandr",[39,101830,25653],{"class":74},[39,101832,101833,101836,101839],{"class":41,"line":138},[39,101834,101835],{"class":237},"  gcc",[39,101837,101838],{"class":237}," gcc-c++",[39,101840,101841],{"class":237}," make\n",[19,101843,101844],{},"创建 Python 环境:",[30,101846,101848],{"className":24796,"code":101847,"language":24798,"meta":35,"style":35},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[26,101849,101850,101864,101872],{"__ignoreMap":35},[39,101851,101852,101855,101858,101861],{"class":41,"line":42},[39,101853,101854],{"class":49},"python3",[39,101856,101857],{"class":74}," -m",[39,101859,101860],{"class":237}," venv",[39,101862,101863],{"class":237}," .venv\n",[39,101865,101866,101869],{"class":41,"line":92},[39,101867,101868],{"class":74},"source",[39,101870,101871],{"class":237}," .venv\u002Fbin\u002Factivate\n",[39,101873,101874,101876,101878,101881,101883,101886],{"class":41,"line":112},[39,101875,31355],{"class":49},[39,101877,101857],{"class":74},[39,101879,101880],{"class":237}," pip",[39,101882,24808],{"class":237},[39,101884,101885],{"class":74}," --upgrade",[39,101887,101888],{"class":237}," pip\n",[19,101890,101891],{},"pip 安装:",[30,101893,101895],{"className":24796,"code":101894,"language":24798,"meta":35,"style":35},"pip install \"mujoco>=2.3\" numpy\n",[26,101896,101897],{"__ignoreMap":35},[39,101898,101899,101901,101903,101906],{"class":41,"line":42},[39,101900,24805],{"class":49},[39,101902,24808],{"class":237},[39,101904,101905],{"class":237}," \"mujoco>=2.3\"",[39,101907,101908],{"class":237}," numpy\n",[19,101910,101911],{},"安装完成后，先做最小检查：",[30,101913,101915],{"className":24796,"code":101914,"language":24798,"meta":35,"style":35},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[26,101916,101917],{"__ignoreMap":35},[39,101918,101919,101921,101923],{"class":41,"line":42},[39,101920,31355],{"class":49},[39,101922,31333],{"class":74},[39,101924,101925],{"class":237}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101927,101928],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101930,101931],{},"conda 安装:",[30,101933,101935],{"className":24796,"code":101934,"language":24798,"meta":35,"style":35},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[26,101936,101937,101957,101967],{"__ignoreMap":35},[39,101938,101939,101941,101943,101945,101948,101951,101954],{"class":41,"line":42},[39,101940,31305],{"class":49},[39,101942,30151],{"class":237},[39,101944,26090],{"class":74},[39,101946,101947],{"class":237}," mujoco-study",[39,101949,101950],{"class":237}," python=",[39,101952,101953],{"class":74},"3.10",[39,101955,101956],{"class":74}," -y\n",[39,101958,101959,101961,101964],{"class":41,"line":92},[39,101960,31305],{"class":49},[39,101962,101963],{"class":237}," activate",[39,101965,101966],{"class":237}," mujoco-study\n",[39,101968,101969,101971,101973,101975],{"class":41,"line":112},[39,101970,24805],{"class":49},[39,101972,24808],{"class":237},[39,101974,101905],{"class":237},[39,101976,101908],{"class":237},[19,101978,101979],{},"版本冲突说明:",[328,101981,101982,101988,101998,102007],{},[331,101983,101984,101985,29360],{},"不要安装 ",[26,101986,101987],{},"mujoco-py",[331,101989,101990,101991,101993,101994,101997],{},"如果旧项目里同时安装了 ",[26,101992,101987],{}," 和 ",[26,101995,101996],{},"mujoco","，建议新建干净虚拟环境。",[331,101999,102000,102003,102004,29360],{},[26,102001,102002],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[26,102005,102006],{},"~\u002F.mujoco\u002Fmujoco210",[331,102008,102009,102010,83514,102013,102016],{},"离屏渲染可能涉及 OpenGL 后端，",[26,102011,102012],{},"MUJOCO_GL=egl",[26,102014,102015],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102018,102020],{"id":102019},"_3核心概念解释","3.核心概念解释",[19,102022,102023],{},"MuJoCo 的基本执行流程:",[30,102025,102028],{"className":102026,"code":102027,"language":6267,"meta":35},[6265],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[26,102029,102027],{"__ignoreMap":35},[19,102031,102032,102034],{},[26,102033,101684],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102036,102037,102039,102040,1478,102043,1478,102046,1478,102049,1478,102052,29360],{},[26,102038,101694],{}," 存放仿真运行时状态，例如 ",[26,102041,102042],{},"data.time",[26,102044,102045],{},"data.qpos",[26,102047,102048],{},"data.qvel",[26,102050,102051],{},"data.ctrl",[26,102053,102054],{},"data.xpos",[476,102056,102058],{"id":102057},"xml-是什么","XML 是什么",[19,102060,102061],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[30,102063,102065],{"className":54042,"code":102064,"language":54044,"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",[26,102066,102067,102089,102120],{"__ignoreMap":35},[39,102068,102069,102071,102073,102075,102077,102079,102082,102084,102087],{"class":41,"line":42},[39,102070,2170],{"class":53},[39,102072,52775],{"class":52275},[39,102074,15893],{"class":49},[39,102076,1117],{"class":53},[39,102078,54466],{"class":237},[39,102080,102081],{"class":49}," pos",[39,102083,1117],{"class":53},[39,102085,102086],{"class":237},"\"0 0 1\"",[39,102088,52282],{"class":53},[39,102090,102091,102093,102096,102098,102100,102103,102105,102107,102109,102112,102114,102117],{"class":41,"line":92},[39,102092,53119],{"class":53},[39,102094,102095],{"class":52275},"geom",[39,102097,15893],{"class":49},[39,102099,1117],{"class":53},[39,102101,102102],{"class":237},"\"box_geom\"",[39,102104,54799],{"class":49},[39,102106,1117],{"class":53},[39,102108,54466],{"class":237},[39,102110,102111],{"class":49}," size",[39,102113,1117],{"class":53},[39,102115,102116],{"class":237},"\"0.1 0.1 0.1\"",[39,102118,102119],{"class":53},"\u002F>\n",[39,102121,102122,102124,102126],{"class":41,"line":112},[39,102123,52760],{"class":53},[39,102125,52775],{"class":52275},[39,102127,52282],{"class":53},[19,102129,102130],{},"这段意思是：",[328,102132,102133,102139,102146],{},[331,102134,102135,102136,102138],{},"创建一个叫 ",[26,102137,54689],{}," 的刚体。",[331,102140,102141,102142,102145],{},"它初始放在 ",[26,102143,102144],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[331,102147,102148],{},"它里面有一个盒子形状的几何体。",[476,102150,102152],{"id":102151},"timestep-是什么","timestep 是什么",[19,102154,102155],{},"XML 里的：",[30,102157,102159],{"className":54042,"code":102158,"language":54044,"meta":35,"style":35},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[26,102160,102161],{"__ignoreMap":35},[39,102162,102163,102165,102167,102170,102172,102175,102178,102180,102183],{"class":41,"line":42},[39,102164,2170],{"class":53},[39,102166,70141],{"class":52275},[39,102168,102169],{"class":49}," timestep",[39,102171,1117],{"class":53},[39,102173,102174],{"class":237},"\"0.01\"",[39,102176,102177],{"class":49}," gravity",[39,102179,1117],{"class":53},[39,102181,102182],{"class":237},"\"0 0 -9.81\"",[39,102184,102119],{"class":53},[19,102186,102187,102188,102191,102192,102194],{},"表示每调用一次 ",[26,102189,102190],{},"mj_step","，仿真时间前进 ",[26,102193,39961],{}," 秒。循环 100 次，大约就是 1 秒：",[30,102196,102199],{"className":102197,"code":102198,"language":6267,"meta":35},[6265],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[26,102200,102198],{"__ignoreMap":35},[476,102202,102204],{"id":102203},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,102206,102207],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[30,102209,102212],{"className":102210,"code":102211,"language":6267,"meta":35},[6265],"x y z qw qx qy qz\n",[26,102213,102211],{"__ignoreMap":35},[19,102215,102216,102217,102220,102221,102224],{},"表示一个自由刚体的位置和姿态。其中 ",[26,102218,102219],{},"x y z"," 是位置，",[26,102222,102223],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102226,102228],{"id":102227},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,102230,102231],{},"新建文件:",[30,102233,102235],{"className":24796,"code":102234,"language":24798,"meta":35,"style":35},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[26,102236,102237,102247,102254],{"__ignoreMap":35},[39,102238,102239,102242,102244],{"class":41,"line":42},[39,102240,102241],{"class":49},"mkdir",[39,102243,30191],{"class":74},[39,102245,102246],{"class":237}," mujoco_tutorial\n",[39,102248,102249,102252],{"class":41,"line":92},[39,102250,102251],{"class":74},"cd",[39,102253,102246],{"class":237},[39,102255,102256,102259],{"class":41,"line":112},[39,102257,102258],{"class":49},"touch",[39,102260,102261],{"class":237}," ch1_first_sim.py\n",[19,102263,102264],{},"写入:",[30,102266,102268],{"className":31353,"code":102267,"language":31355,"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",[26,102269,102270,102277,102281,102285,102295,102300,102305,102309,102314,102319,102323,102328,102333,102338,102343,102348,102353,102357,102361,102365,102378,102392,102402,102406,102418,102430,102442,102454,102466,102470,102487,102492,102496,102507,102518,102522,102526,102540],{"__ignoreMap":35},[39,102271,102272,102274],{"class":41,"line":42},[39,102273,31367],{"class":45},[39,102275,102276],{"class":53}," mujoco\n",[39,102278,102279],{"class":41,"line":92},[39,102280,122],{"emptyLinePlaceholder":121},[39,102282,102283],{"class":41,"line":112},[39,102284,122],{"emptyLinePlaceholder":121},[39,102286,102287,102290,102292],{"class":41,"line":118},[39,102288,102289],{"class":74},"XML",[39,102291,71],{"class":45},[39,102293,102294],{"class":237}," \"\"\"\n",[39,102296,102297],{"class":41,"line":125},[39,102298,102299],{"class":237},"\u003Cmujoco model=\"first_sim\">\n",[39,102301,102302],{"class":41,"line":132},[39,102303,102304],{"class":237},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[39,102306,102307],{"class":41,"line":138},[39,102308,122],{"emptyLinePlaceholder":121},[39,102310,102311],{"class":41,"line":169},[39,102312,102313],{"class":237},"  \u003Cworldbody>\n",[39,102315,102316],{"class":41,"line":190},[39,102317,102318],{"class":237},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[39,102320,102321],{"class":41,"line":202},[39,102322,122],{"emptyLinePlaceholder":121},[39,102324,102325],{"class":41,"line":207},[39,102326,102327],{"class":237},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[39,102329,102330],{"class":41,"line":212},[39,102331,102332],{"class":237},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[39,102334,102335],{"class":41,"line":223},[39,102336,102337],{"class":237},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[39,102339,102340],{"class":41,"line":228},[39,102341,102342],{"class":237},"    \u003C\u002Fbody>\n",[39,102344,102345],{"class":41,"line":263},[39,102346,102347],{"class":237},"  \u003C\u002Fworldbody>\n",[39,102349,102350],{"class":41,"line":287},[39,102351,102352],{"class":237},"\u003C\u002Fmujoco>\n",[39,102354,102355],{"class":41,"line":292},[39,102356,96673],{"class":237},[39,102358,102359],{"class":41,"line":305},[39,102360,122],{"emptyLinePlaceholder":121},[39,102362,102363],{"class":41,"line":310},[39,102364,122],{"emptyLinePlaceholder":121},[39,102366,102367,102369,102371,102374,102376],{"class":41,"line":321},[39,102368,32922],{"class":45},[39,102370,217],{"class":49},[39,102372,102373],{"class":53},"() -> ",[39,102375,96661],{"class":74},[39,102377,4822],{"class":53},[39,102379,102380,102383,102385,102388,102390],{"class":41,"line":713},[39,102381,102382],{"class":53},"    model ",[39,102384,1117],{"class":45},[39,102386,102387],{"class":53}," mujoco.MjModel.from_xml_string(",[39,102389,102289],{"class":74},[39,102391,574],{"class":53},[39,102393,102394,102397,102399],{"class":41,"line":718},[39,102395,102396],{"class":53},"    data ",[39,102398,1117],{"class":45},[39,102400,102401],{"class":53}," mujoco.MjData(model)\n",[39,102403,102404],{"class":41,"line":723},[39,102405,122],{"emptyLinePlaceholder":121},[39,102407,102408,102410,102412,102415],{"class":41,"line":729},[39,102409,32274],{"class":74},[39,102411,54],{"class":53},[39,102413,102414],{"class":237},"\"nq:\"",[39,102416,102417],{"class":53},", model.nq)\n",[39,102419,102420,102422,102424,102427],{"class":41,"line":735},[39,102421,32274],{"class":74},[39,102423,54],{"class":53},[39,102425,102426],{"class":237},"\"nv:\"",[39,102428,102429],{"class":53},", model.nv)\n",[39,102431,102432,102434,102436,102439],{"class":41,"line":741},[39,102433,32274],{"class":74},[39,102435,54],{"class":53},[39,102437,102438],{"class":237},"\"nu:\"",[39,102440,102441],{"class":53},", model.nu)\n",[39,102443,102444,102446,102448,102451],{"class":41,"line":747},[39,102445,32274],{"class":74},[39,102447,54],{"class":53},[39,102449,102450],{"class":237},"\"initial time:\"",[39,102452,102453],{"class":53},", data.time)\n",[39,102455,102456,102458,102460,102463],{"class":41,"line":753},[39,102457,32274],{"class":74},[39,102459,54],{"class":53},[39,102461,102462],{"class":237},"\"initial qpos:\"",[39,102464,102465],{"class":53},", data.qpos.copy())\n",[39,102467,102468],{"class":41,"line":758},[39,102469,122],{"emptyLinePlaceholder":121},[39,102471,102472,102474,102477,102479,102481,102483,102485],{"class":41,"line":763},[39,102473,4284],{"class":45},[39,102475,102476],{"class":53}," _ ",[39,102478,27018],{"class":45},[39,102480,33418],{"class":74},[39,102482,54],{"class":53},[39,102484,278],{"class":74},[39,102486,31761],{"class":53},[39,102488,102489],{"class":41,"line":772},[39,102490,102491],{"class":53},"        mujoco.mj_step(model, data)\n",[39,102493,102494],{"class":41,"line":777},[39,102495,122],{"emptyLinePlaceholder":121},[39,102497,102498,102500,102502,102505],{"class":41,"line":785},[39,102499,32274],{"class":74},[39,102501,54],{"class":53},[39,102503,102504],{"class":237},"\"final time:\"",[39,102506,102453],{"class":53},[39,102508,102509,102511,102513,102516],{"class":41,"line":796},[39,102510,32274],{"class":74},[39,102512,54],{"class":53},[39,102514,102515],{"class":237},"\"final qpos:\"",[39,102517,102465],{"class":53},[39,102519,102520],{"class":41,"line":808},[39,102521,122],{"emptyLinePlaceholder":121},[39,102523,102524],{"class":41,"line":823},[39,102525,122],{"emptyLinePlaceholder":121},[39,102527,102528,102530,102532,102535,102538],{"class":41,"line":839},[39,102529,2654],{"class":45},[39,102531,32195],{"class":74},[39,102533,102534],{"class":45}," ==",[39,102536,102537],{"class":237}," \"__main__\"",[39,102539,4822],{"class":53},[39,102541,102542],{"class":41,"line":845},[39,102543,102544],{"class":53},"    main()\n",[476,102546,102547],{"id":102547},"代码逐段解释",[19,102549,102550],{},"导入库：",[30,102552,102554],{"className":31353,"code":102553,"language":31355,"meta":35,"style":35},"import mujoco\n",[26,102555,102556],{"__ignoreMap":35},[39,102557,102558,102560],{"class":41,"line":42},[39,102559,31367],{"class":45},[39,102561,102276],{"class":53},[19,102563,102564],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,102566,102567],{},"定义 XML：",[30,102569,102571],{"className":31353,"code":102570,"language":31355,"meta":35,"style":35},"XML = \"\"\"\n...\n\"\"\"\n",[26,102572,102573,102581,102586],{"__ignoreMap":35},[39,102574,102575,102577,102579],{"class":41,"line":42},[39,102576,102289],{"class":74},[39,102578,71],{"class":45},[39,102580,102294],{"class":237},[39,102582,102583],{"class":41,"line":92},[39,102584,102585],{"class":237},"...\n",[39,102587,102588],{"class":41,"line":112},[39,102589,96673],{"class":237},[19,102591,102592,102593,102596],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[26,102594,102595],{},"freejoint"," 的方块。",[19,102598,102599],{},"编译模型：",[30,102601,102603],{"className":31353,"code":102602,"language":31355,"meta":35,"style":35},"model = mujoco.MjModel.from_xml_string(XML)\n",[26,102604,102605],{"__ignoreMap":35},[39,102606,102607,102610,102612,102614,102616],{"class":41,"line":42},[39,102608,102609],{"class":53},"model ",[39,102611,1117],{"class":45},[39,102613,102387],{"class":53},[39,102615,102289],{"class":74},[39,102617,574],{"class":53},[19,102619,102620],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102622,102623],{},"创建数据：",[30,102625,102627],{"className":31353,"code":102626,"language":31355,"meta":35,"style":35},"data = mujoco.MjData(model)\n",[26,102628,102629],{"__ignoreMap":35},[39,102630,102631,102634,102636],{"class":41,"line":42},[39,102632,102633],{"class":53},"data ",[39,102635,1117],{"class":45},[39,102637,102401],{"class":53},[19,102639,102640,102642,102643,102645],{},[26,102641,34376],{}," 会保存仿真当前状态。刚创建时，时间是 ",[26,102644,1457],{},"，方块还在初始位置。",[19,102647,102648],{},"推进仿真：",[30,102650,102652],{"className":31353,"code":102651,"language":31355,"meta":35,"style":35},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[26,102653,102654,102670],{"__ignoreMap":35},[39,102655,102656,102658,102660,102662,102664,102666,102668],{"class":41,"line":42},[39,102657,4108],{"class":45},[39,102659,102476],{"class":53},[39,102661,27018],{"class":45},[39,102663,33418],{"class":74},[39,102665,54],{"class":53},[39,102667,278],{"class":74},[39,102669,31761],{"class":53},[39,102671,102672],{"class":41,"line":92},[39,102673,102674],{"class":53},"    mujoco.mj_step(model, data)\n",[19,102676,102677,102678,102680],{},"每次 ",[26,102679,102190],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[476,102682,102683],{"id":102683},"代码逐行细讲",[19,102685,102686],{},"下面把完整代码按新手视角拆开讲。",[30,102688,102689],{"className":31353,"code":102553,"language":31355,"meta":35,"style":35},[26,102690,102691],{"__ignoreMap":35},[39,102692,102693,102695],{"class":41,"line":42},[39,102694,31367],{"class":45},[39,102696,102276],{"class":53},[19,102698,102699,102701,102702,1478,102704,1478,102706,29360],{},[26,102700,31367],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[26,102703,101650],{},[26,102705,101655],{},[26,102707,102708],{},"mujoco.mj_step",[30,102710,102711],{"className":31353,"code":102570,"language":31355,"meta":35,"style":35},[26,102712,102713,102721,102725],{"__ignoreMap":35},[39,102714,102715,102717,102719],{"class":41,"line":42},[39,102716,102289],{"class":74},[39,102718,71],{"class":45},[39,102720,102294],{"class":237},[39,102722,102723],{"class":41,"line":92},[39,102724,102585],{"class":237},[39,102726,102727],{"class":41,"line":112},[39,102728,96673],{"class":237},[19,102730,102731,102733,102734,102737],{},[26,102732,102289],{}," 是一个变量名。右边的三引号 ",[26,102735,102736],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[30,102739,102740],{"className":54042,"code":102299,"language":54044,"meta":35,"style":35},[26,102741,102742],{"__ignoreMap":35},[39,102743,102744,102746,102748,102751,102753,102756],{"class":41,"line":42},[39,102745,2170],{"class":53},[39,102747,101996],{"class":52275},[39,102749,102750],{"class":49}," model",[39,102752,1117],{"class":53},[39,102754,102755],{"class":237},"\"first_sim\"",[39,102757,52282],{"class":53},[19,102759,102760,102761,102764,102765,29360],{},"这是 XML 的根标签。",[26,102762,102763],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[26,102766,102767],{},"first_sim",[30,102769,102770],{"className":54042,"code":102158,"language":54044,"meta":35,"style":35},[26,102771,102772],{"__ignoreMap":35},[39,102773,102774,102776,102778,102780,102782,102784,102786,102788,102790],{"class":41,"line":42},[39,102775,2170],{"class":53},[39,102777,70141],{"class":52275},[39,102779,102169],{"class":49},[39,102781,1117],{"class":53},[39,102783,102174],{"class":237},[39,102785,102177],{"class":49},[39,102787,1117],{"class":53},[39,102789,102182],{"class":237},[39,102791,102119],{"class":53},[19,102793,102794,102796,102797,102800,102801,102804],{},[26,102795,70141],{}," 用来设置仿真参数。",[26,102798,102799],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[26,102802,102803],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[30,102806,102808],{"className":54042,"code":102807,"language":54044,"meta":35,"style":35},"\u003Cworldbody>\n",[26,102809,102810],{"__ignoreMap":35},[39,102811,102812,102814,102817],{"class":41,"line":42},[39,102813,2170],{"class":53},[39,102815,102816],{"class":52275},"worldbody",[39,102818,52282],{"class":53},[19,102820,102821,102823],{},[26,102822,102816],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[30,102825,102827],{"className":54042,"code":102826,"language":54044,"meta":35,"style":35},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[26,102828,102829],{"__ignoreMap":35},[39,102830,102831,102833,102835,102837,102839,102842,102844,102846,102849,102851,102853,102856,102858,102860,102863],{"class":41,"line":42},[39,102832,2170],{"class":53},[39,102834,102095],{"class":52275},[39,102836,15893],{"class":49},[39,102838,1117],{"class":53},[39,102840,102841],{"class":237},"\"floor\"",[39,102843,54799],{"class":49},[39,102845,1117],{"class":53},[39,102847,102848],{"class":237},"\"plane\"",[39,102850,102111],{"class":49},[39,102852,1117],{"class":53},[39,102854,102855],{"class":237},"\"2 2 0.1\"",[39,102857,79742],{"class":49},[39,102859,1117],{"class":53},[39,102861,102862],{"class":237},"\"0.8 0.8 0.8 1\"",[39,102864,102119],{"class":53},[19,102866,102867,102868,102870,102871,102874,102875,102878,102879,102881],{},"这行创建地面。",[26,102869,102095],{}," 是几何体。",[26,102872,102873],{},"name=\"floor\""," 是名字。",[26,102876,102877],{},"type=\"plane\""," 表示平面。",[26,102880,56085],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[30,102883,102885],{"className":54042,"code":102884,"language":54044,"meta":35,"style":35},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[26,102886,102887],{"__ignoreMap":35},[39,102888,102889,102891,102893,102895,102897,102899,102901,102903,102905],{"class":41,"line":42},[39,102890,2170],{"class":53},[39,102892,52775],{"class":52275},[39,102894,15893],{"class":49},[39,102896,1117],{"class":53},[39,102898,54466],{"class":237},[39,102900,102081],{"class":49},[39,102902,1117],{"class":53},[39,102904,102086],{"class":237},[39,102906,52282],{"class":53},[19,102908,102909,102910,29360,102912,102915,102916,102918],{},"这行创建一个刚体，名字叫 ",[26,102911,54689],{},[26,102913,102914],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[26,102917,102144],{},"，也就是离地面 1 米高。",[30,102920,102922],{"className":54042,"code":102921,"language":54044,"meta":35,"style":35},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[26,102923,102924],{"__ignoreMap":35},[39,102925,102926,102928,102930,102932,102934,102937],{"class":41,"line":42},[39,102927,2170],{"class":53},[39,102929,102595],{"class":52275},[39,102931,15893],{"class":49},[39,102933,1117],{"class":53},[39,102935,102936],{"class":237},"\"box_free\"",[39,102938,102119],{"class":53},[19,102940,102941,102942,102944],{},"这行很重要。",[26,102943,102595],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[30,102946,102948],{"className":54042,"code":102947,"language":54044,"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",[26,102949,102950],{"__ignoreMap":35},[39,102951,102952,102954,102956,102958,102960,102962,102964,102966,102968,102970,102972,102974,102977,102979,102981,102983,102985,102988],{"class":41,"line":42},[39,102953,2170],{"class":53},[39,102955,102095],{"class":52275},[39,102957,15893],{"class":49},[39,102959,1117],{"class":53},[39,102961,102102],{"class":237},[39,102963,54799],{"class":49},[39,102965,1117],{"class":53},[39,102967,54466],{"class":237},[39,102969,102111],{"class":49},[39,102971,1117],{"class":53},[39,102973,102116],{"class":237},[39,102975,102976],{"class":49}," mass",[39,102978,1117],{"class":53},[39,102980,4761],{"class":237},[39,102982,79742],{"class":49},[39,102984,1117],{"class":53},[39,102986,102987],{"class":237},"\"1 0 0 1\"",[39,102989,102119],{"class":53},[19,102991,102992,102993,102996,102997,103000,103001,103004,103005,103008],{},"这行给 box body 添加一个盒子形状。",[26,102994,102995],{},"type=\"box\""," 表示形状是盒子。",[26,102998,102999],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[26,103002,103003],{},"mass=\"1\""," 表示质量是 1。",[26,103006,103007],{},"rgba=\"1 0 0 1\""," 表示红色。",[30,103010,103012],{"className":31353,"code":103011,"language":31355,"meta":35,"style":35},"def main() -> None:\n",[26,103013,103014],{"__ignoreMap":35},[39,103015,103016,103018,103020,103022,103024],{"class":41,"line":42},[39,103017,32922],{"class":45},[39,103019,217],{"class":49},[39,103021,102373],{"class":53},[39,103023,96661],{"class":74},[39,103025,4822],{"class":53},[19,103027,103028,103030,103031,103034,103035,103038],{},[26,103029,32922],{}," 用来定义函数。这里定义了一个叫 ",[26,103032,103033],{},"main"," 的函数。",[26,103036,103037],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[30,103040,103041],{"className":31353,"code":102602,"language":31355,"meta":35,"style":35},[26,103042,103043],{"__ignoreMap":35},[39,103044,103045,103047,103049,103051,103053],{"class":41,"line":42},[39,103046,102609],{"class":53},[39,103048,1117],{"class":45},[39,103050,102387],{"class":53},[39,103052,102289],{"class":74},[39,103054,574],{"class":53},[19,103056,103057,103058,103061],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[26,103059,103060],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[30,103063,103064],{"className":31353,"code":102626,"language":31355,"meta":35,"style":35},[26,103065,103066],{"__ignoreMap":35},[39,103067,103068,103070,103072],{"class":41,"line":42},[39,103069,102633],{"class":53},[39,103071,1117],{"class":45},[39,103073,102401],{"class":53},[19,103075,103076,103077,103079,103080,103082],{},"这行创建仿真数据。",[26,103078,34376],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[26,103081,34376],{}," 都会变化。",[30,103084,103086],{"className":31353,"code":103085,"language":31355,"meta":35,"style":35},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[26,103087,103088,103098,103108],{"__ignoreMap":35},[39,103089,103090,103092,103094,103096],{"class":41,"line":42},[39,103091,31390],{"class":74},[39,103093,54],{"class":53},[39,103095,102414],{"class":237},[39,103097,102417],{"class":53},[39,103099,103100,103102,103104,103106],{"class":41,"line":92},[39,103101,31390],{"class":74},[39,103103,54],{"class":53},[39,103105,102426],{"class":237},[39,103107,102429],{"class":53},[39,103109,103110,103112,103114,103116],{"class":41,"line":112},[39,103111,31390],{"class":74},[39,103113,54],{"class":53},[39,103115,102438],{"class":237},[39,103117,102441],{"class":53},[19,103119,103120,103122,103123,103126,103127,103130,103131,103134,103135,103138],{},[26,103121,31390],{}," 用来输出信息。",[26,103124,103125],{},"model.nq"," 是位置变量数量，",[26,103128,103129],{},"model.nv"," 是速度变量数量，",[26,103132,103133],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[26,103136,103137],{},"nu"," 是 0。",[30,103140,103142],{"className":31353,"code":103141,"language":31355,"meta":35,"style":35},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[26,103143,103144,103154],{"__ignoreMap":35},[39,103145,103146,103148,103150,103152],{"class":41,"line":42},[39,103147,31390],{"class":74},[39,103149,54],{"class":53},[39,103151,102450],{"class":237},[39,103153,102453],{"class":53},[39,103155,103156,103158,103160,103162],{"class":41,"line":92},[39,103157,31390],{"class":74},[39,103159,54],{"class":53},[39,103161,102462],{"class":237},[39,103163,102465],{"class":53},[19,103165,103166,103167,103169,103170,103172,103173,103176],{},"这里打印初始时间和初始位置。",[26,103168,102042],{}," 一开始是 0。",[26,103171,102045],{}," 是位置数组。",[26,103174,103175],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[30,103178,103179],{"className":31353,"code":102651,"language":31355,"meta":35,"style":35},[26,103180,103181,103197],{"__ignoreMap":35},[39,103182,103183,103185,103187,103189,103191,103193,103195],{"class":41,"line":42},[39,103184,4108],{"class":45},[39,103186,102476],{"class":53},[39,103188,27018],{"class":45},[39,103190,33418],{"class":74},[39,103192,54],{"class":53},[39,103194,278],{"class":74},[39,103196,31761],{"class":53},[39,103198,103199],{"class":41,"line":92},[39,103200,102674],{"class":53},[19,103202,103203,103205,103206,103209,103210,103212,103213,103215],{},[26,103204,4108],{}," 是循环。",[26,103207,103208],{},"range(100)"," 表示循环 100 次。",[26,103211,2252],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[26,103214,102190],{},"，仿真就前进一步。",[30,103217,103219],{"className":31353,"code":103218,"language":31355,"meta":35,"style":35},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[26,103220,103221,103231],{"__ignoreMap":35},[39,103222,103223,103225,103227,103229],{"class":41,"line":42},[39,103224,31390],{"class":74},[39,103226,54],{"class":53},[39,103228,102504],{"class":237},[39,103230,102453],{"class":53},[39,103232,103233,103235,103237,103239],{"class":41,"line":92},[39,103234,31390],{"class":74},[39,103236,54],{"class":53},[39,103238,102515],{"class":237},[39,103240,102465],{"class":53},[19,103242,103243],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[30,103245,103247],{"className":31353,"code":103246,"language":31355,"meta":35,"style":35},"if __name__ == \"__main__\":\n    main()\n",[26,103248,103249,103261],{"__ignoreMap":35},[39,103250,103251,103253,103255,103257,103259],{"class":41,"line":42},[39,103252,2654],{"class":45},[39,103254,32195],{"class":74},[39,103256,102534],{"class":45},[39,103258,102537],{"class":237},[39,103260,4822],{"class":53},[39,103262,103263],{"class":41,"line":92},[39,103264,102544],{"class":53},[19,103266,103267,103268,103271,103272,29360],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[26,103269,103270],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[26,103273,103270],{},[19,103275,103276],{},"运行:",[30,103278,103280],{"className":24796,"code":103279,"language":24798,"meta":35,"style":35},"python ch1_first_sim.py\n",[26,103281,103282],{"__ignoreMap":35},[39,103283,103284,103286],{"class":41,"line":42},[39,103285,31355],{"class":49},[39,103287,102261],{"class":237},[14,103289,103291],{"id":103290},"_5运行结果说明","5.运行结果说明",[19,103293,103294],{},"你应该看到类似输出:",[30,103296,103299],{"className":103297,"code":103298,"language":6267,"meta":35},[6265],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[26,103300,103298],{"__ignoreMap":35},[19,103302,103303,103305,103306,103309,103310,29360],{},[26,103304,102595],{}," 有 7 个位置变量: ",[26,103307,103308],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[26,103311,103312],{},"vx vy vz wx wy wz",[19,103314,103315,103316,103319],{},"你还会看到 ",[26,103317,103318],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103321,103323],{"id":103322},"_6验证步骤","6.验证步骤",[19,103325,103326],{},"确认版本:",[30,103328,103329],{"className":24796,"code":101914,"language":24798,"meta":35,"style":35},[26,103330,103331],{"__ignoreMap":35},[39,103332,103333,103335,103337],{"class":41,"line":42},[39,103334,31355],{"class":49},[39,103336,31333],{"class":74},[39,103338,101925],{"class":237},[19,103340,103341],{},"确认导入的是官方 bindings:",[30,103343,103345],{"className":24796,"code":103344,"language":24798,"meta":35,"style":35},"python -c \"import mujoco; print(mujoco)\"\n",[26,103346,103347],{"__ignoreMap":35},[39,103348,103349,103351,103353],{"class":41,"line":42},[39,103350,31355],{"class":49},[39,103352,31333],{"class":74},[39,103354,103355],{"class":237}," \"import mujoco; print(mujoco)\"\n",[19,103357,103358],{},"运行程序:",[30,103360,103361],{"className":24796,"code":103279,"language":24798,"meta":35,"style":35},[26,103362,103363],{"__ignoreMap":35},[39,103364,103365,103367],{"class":41,"line":42},[39,103366,31355],{"class":49},[39,103368,102261],{"class":237},[19,103370,103371,103372,103375,103376,29360],{},"检查 ",[26,103373,103374],{},"final time"," 是否约等于 ",[26,103377,103378],{},"1.0",[19,103380,103381],{},"再做几个小实验：",[328,103383,103384,103394,103402,103415],{},[331,103385,103386,103387,103389,103390,103393],{},"把 ",[26,103388,102914],{}," 改成 ",[26,103391,103392],{},"pos=\"0 0 2\"","，观察初始高度变化。",[331,103395,103386,103396,103389,103398,103401],{},[26,103397,102803],{},[26,103399,103400],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[331,103403,103386,103404,103389,103406,103409,103410,103412,103413,29360],{},[26,103405,102799],{},[26,103407,103408],{},"timestep=\"0.005\"","，观察 100 步后的 ",[26,103411,103374],{}," 是否变成约 ",[26,103414,36304],{},[331,103416,103417,103418,103421],{},"删除 ",[26,103419,103420],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,103423,103424],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103426,103428],{"id":103427},"_7常见错误与解决方案","7.常见错误与解决方案",[476,103430,103432],{"id":103431},"modulenotfounderror-no-module-named-mujoco",[26,103433,103434],{},"ModuleNotFoundError: No module named 'mujoco'",[19,103436,103437],{},"解决:",[30,103439,103441],{"className":24796,"code":103440,"language":24798,"meta":35,"style":35},"pip install \"mujoco>=2.3\"\n",[26,103442,103443],{"__ignoreMap":35},[39,103444,103445,103447,103449],{"class":41,"line":42},[39,103446,24805],{"class":49},[39,103448,24808],{"class":237},[39,103450,103451],{"class":237}," \"mujoco>=2.3\"\n",[476,103453,103455],{"id":103454},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103457,103458],{},"先安装系统依赖:",[30,103460,103462],{"className":24796,"code":103461,"language":24798,"meta":35,"style":35},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[26,103463,103464],{"__ignoreMap":35},[39,103465,103466,103468,103470,103472,103474,103477,103479,103482,103484,103487,103489],{"class":41,"line":42},[39,103467,25551],{"class":49},[39,103469,27290],{"class":237},[39,103471,24808],{"class":237},[39,103473,27375],{"class":74},[39,103475,103476],{"class":237}," mesa-libGL",[39,103478,101789],{"class":237},[39,103480,103481],{"class":237}," glfw",[39,103483,101809],{"class":237},[39,103485,103486],{"class":237}," libX11",[39,103488,101822],{"class":237},[39,103490,103491],{"class":237}," libXrandr\n",[476,103493,103495],{"id":103494},"xml-解析失败","XML 解析失败",[19,103497,103498],{},"检查:",[328,103500,103501,103504,103507,103513],{},[331,103502,103503],{},"标签是否闭合",[331,103505,103506],{},"属性是否带引号",[331,103508,103509,103510],{},"根节点是否是 ",[26,103511,103512],{},"\u003Cmujoco>",[331,103514,103515,103517,103518,103521],{},[26,103516,52775],{}," 是否放在 ",[26,103519,103520],{},"\u003Cworldbody>"," 内部",[476,103523,103525,103527,103528],{"id":103524},"final-time-不是严格等于-10",[26,103526,103374],{}," 不是严格等于 ",[26,103529,103378],{},[19,103531,103532],{},"这通常不是错误。浮点数计算可能得到：",[30,103534,103537],{"className":103535,"code":103536,"language":6267,"meta":35},[6265],"1.0000000000000007\n",[26,103538,103536],{"__ignoreMap":35},[19,103540,103541,103542,103544],{},"只要接近 ",[26,103543,103378],{}," 就正常。",[476,103546,103547],{"id":103547},"方块没有掉下来",[19,103549,103550],{},"检查：",[328,103552,103553,103559,103565,103570],{},[331,103554,103555,103556],{},"方块 body 里是否有 ",[26,103557,103558],{},"\u003Cfreejoint\u002F>",[331,103560,103561,103562],{},"重力是否是 ",[26,103563,103564],{},"0 0 -9.81",[331,103566,103567,103568],{},"是否真的调用了 ",[26,103569,101660],{},[331,103571,103572,103573,103575,103576],{},"你看的是否是 ",[26,103574,103318],{},"，不是 ",[26,103577,103578],{},"initial qpos",[14,103580,103582],{"id":103581},"_8本章小结","8.本章小结",[19,103584,103585],{},"本章你已经完成了 MuJoCo 的最小闭环：",[30,103587,103590],{"className":103588,"code":103589,"language":6267,"meta":35},[6265],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[26,103591,103589],{"__ignoreMap":35},[19,103593,103594],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1192,103596,103597],{},"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":92,"depth":92,"links":103599},[103600,103601,103602,103607,103611,103612,103613,103621],{"id":101621,"depth":92,"text":101622},{"id":101744,"depth":92,"text":101745},{"id":102019,"depth":92,"text":102020,"children":103603},[103604,103605,103606],{"id":102057,"depth":112,"text":102058},{"id":102151,"depth":112,"text":102152},{"id":102203,"depth":112,"text":102204},{"id":102227,"depth":92,"text":102228,"children":103608},[103609,103610],{"id":102547,"depth":112,"text":102547},{"id":102683,"depth":112,"text":102683},{"id":103290,"depth":92,"text":103291},{"id":103322,"depth":92,"text":103323},{"id":103427,"depth":92,"text":103428,"children":103614},[103615,103616,103617,103618,103620],{"id":103431,"depth":112,"text":103434},{"id":103454,"depth":112,"text":103455},{"id":103494,"depth":112,"text":103495},{"id":103524,"depth":112,"text":103619},"final time 不是严格等于 1.0",{"id":103547,"depth":112,"text":103547},{"id":103581,"depth":92,"text":103582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101613,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103628,"title":103629,"body":103630,"description":35,"extension":1203,"meta":105286,"navigation":121,"path":105287,"seo":105288,"stem":105289,"__hash__":105290},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103631,"toc":105262},[103632,103635,103637,103640,103643,103660,103755,103758,103764,103766,103768,103792,103795,103809,103812,103853,103855,103868,103870,103873,103921,103933,103936,103939,103945,103958,104025,104028,104047,104050,104053,104059,104061,104070,104073,104077,104086,104168,104177,104181,104187,104201,104211,104213,104543,104546,104558,104560,104571,104573,104576,104594,104597,104600,104618,104629,104632,104647,104657,104659,104680,104697,104717,104723,104763,104779,104795,104801,104804,104828,104844,104849,104879,104896,104921,104924,104939,104948,104963,104972,104987,104994,104996,105006,105019,105026,105029,105068,105075,105077,105129,105131,105137,105140,105147,105154,105157,105159,105177,105180,105183,105217,105229,105231,105234,105256,105259],[10,103633,103629],{"id":103634},"_2xml-与-mjcf-物理建模基础",[14,103636,101622],{"id":101621},[19,103638,103639],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103641,103642],{},"本章结束后，你应该能看懂一个简单模型里：",[328,103644,103645,103648,103651,103654,103657],{},[331,103646,103647],{},"地面在哪里。",[331,103649,103650],{},"物体初始位置在哪里。",[331,103652,103653],{},"几何体是什么形状。",[331,103655,103656],{},"哪些 body 可以自由运动。",[331,103658,103659],{},"如何用名字在 Python 里找到 XML 中的对象。",[1404,103661,103662,103672],{},[1407,103663,103664],{},[1410,103665,103666,103669],{},[1413,103667,103668],{"align":24710},"标签",[1413,103670,103671],{"align":24710},"作用",[1450,103673,103674,103683,103693,103702,103712,103722,103735,103745],{},[1410,103675,103676,103680],{},[1455,103677,103678],{"align":24710},[26,103679,103512],{},[1455,103681,103682],{"align":24710},"根节点",[1410,103684,103685,103690],{},[1455,103686,103687],{"align":24710},[26,103688,103689],{},"\u003Coption>",[1455,103691,103692],{"align":24710},"仿真参数",[1410,103694,103695,103699],{},[1455,103696,103697],{"align":24710},[26,103698,103520],{},[1455,103700,103701],{"align":24710},"世界中的物体",[1410,103703,103704,103709],{},[1455,103705,103706],{"align":24710},[26,103707,103708],{},"\u003Cbody>",[1455,103710,103711],{"align":24710},"刚体",[1410,103713,103714,103719],{},[1455,103715,103716],{"align":24710},[26,103717,103718],{},"\u003Cgeom>",[1455,103720,103721],{"align":24710},"几何体、碰撞体、可视体",[1410,103723,103724,103732],{},[1455,103725,103726,25953,103729],{"align":24710},[26,103727,103728],{},"\u003Cjoint>",[26,103730,103731],{},"\u003Cfreejoint>",[1455,103733,103734],{"align":24710},"关节",[1410,103736,103737,103742],{},[1455,103738,103739],{"align":24710},[26,103740,103741],{},"\u003Csite>",[1455,103743,103744],{"align":24710},"标记点",[1410,103746,103747,103752],{},[1455,103748,103749],{"align":24710},[26,103750,103751],{},"\u003Cactuator>",[1455,103753,103754],{"align":24710},"控制器",[19,103756,103757],{},"初学时可以先记住：",[30,103759,103762],{"className":103760,"code":103761,"language":6267,"meta":35},[6265],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[26,103763,103761],{"__ignoreMap":35},[14,103765,101745],{"id":101744},[19,103767,101748],{},[30,103769,103771],{"className":24796,"code":103770,"language":24798,"meta":35,"style":35},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[26,103772,103773],{"__ignoreMap":35},[39,103774,103775,103777,103779,103781,103783,103785,103787,103789],{"class":41,"line":42},[39,103776,25551],{"class":49},[39,103778,27290],{"class":237},[39,103780,24808],{"class":237},[39,103782,27375],{"class":74},[39,103784,103476],{"class":237},[39,103786,101789],{"class":237},[39,103788,103481],{"class":237},[39,103790,103791],{"class":237}," glfw-devel\n",[19,103793,103794],{},"pip:",[30,103796,103797],{"className":24796,"code":101894,"language":24798,"meta":35,"style":35},[26,103798,103799],{"__ignoreMap":35},[39,103800,103801,103803,103805,103807],{"class":41,"line":42},[39,103802,24805],{"class":49},[39,103804,24808],{"class":237},[39,103806,101905],{"class":237},[39,103808,101908],{"class":237},[19,103810,103811],{},"conda:",[30,103813,103815],{"className":24796,"code":103814,"language":24798,"meta":35,"style":35},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[26,103816,103817,103834,103843],{"__ignoreMap":35},[39,103818,103819,103821,103823,103825,103828,103830,103832],{"class":41,"line":42},[39,103820,31305],{"class":49},[39,103822,30151],{"class":237},[39,103824,26090],{"class":74},[39,103826,103827],{"class":237}," mujoco-xml",[39,103829,101950],{"class":237},[39,103831,101953],{"class":74},[39,103833,101956],{"class":74},[39,103835,103836,103838,103840],{"class":41,"line":92},[39,103837,31305],{"class":49},[39,103839,101963],{"class":237},[39,103841,103842],{"class":237}," mujoco-xml\n",[39,103844,103845,103847,103849,103851],{"class":41,"line":112},[39,103846,24805],{"class":49},[39,103848,24808],{"class":237},[39,103850,101905],{"class":237},[39,103852,101908],{"class":237},[19,103854,101979],{},[328,103856,103857,103860,103865],{},[331,103858,103859],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[331,103861,103862,103863,29360],{},"本章使用基础标签，适用于 ",[26,103864,102002],{},[331,103866,103867],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103869,102020],{"id":102019},[19,103871,103872],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[30,103874,103876],{"className":54042,"code":103875,"language":54044,"meta":35,"style":35},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[26,103877,103878,103892,103900,103905,103913],{"__ignoreMap":35},[39,103879,103880,103882,103884,103886,103888,103890],{"class":41,"line":42},[39,103881,2170],{"class":53},[39,103883,101996],{"class":52275},[39,103885,102750],{"class":49},[39,103887,1117],{"class":53},[39,103889,63654],{"class":237},[39,103891,52282],{"class":53},[39,103893,103894,103896,103898],{"class":41,"line":92},[39,103895,53119],{"class":53},[39,103897,102816],{"class":52275},[39,103899,52282],{"class":53},[39,103901,103902],{"class":41,"line":112},[39,103903,103904],{"class":53},"    ...\n",[39,103906,103907,103909,103911],{"class":41,"line":118},[39,103908,53392],{"class":53},[39,103910,102816],{"class":52275},[39,103912,52282],{"class":53},[39,103914,103915,103917,103919],{"class":41,"line":125},[39,103916,52760],{"class":53},[39,103918,101996],{"class":52275},[39,103920,52282],{"class":53},[19,103922,103923,103925,103926,103928,103929,103932],{},[26,103924,52775],{}," 表示刚体。",[26,103927,102095],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[26,103930,103931],{},"joint"," 表示刚体相对父刚体如何运动。",[476,103934,103935],{"id":103935},"层级结构非常重要",[19,103937,103938],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[30,103940,103943],{"className":103941,"code":103942,"language":6267,"meta":35},[6265],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[26,103944,103942],{"__ignoreMap":35},[19,103946,103947,101993,103950,103953,103954,103957],{},[26,103948,103949],{},"red_box_geom",[26,103951,103952],{},"box_center"," 都属于 ",[26,103955,103956],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[30,103959,103961],{"className":54042,"code":103960,"language":54044,"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",[26,103962,103963,103983,103997,104017],{"__ignoreMap":35},[39,103964,103965,103967,103969,103971,103973,103975,103977,103979,103981],{"class":41,"line":42},[39,103966,2170],{"class":53},[39,103968,52775],{"class":52275},[39,103970,15893],{"class":49},[39,103972,1117],{"class":53},[39,103974,54466],{"class":237},[39,103976,102081],{"class":49},[39,103978,1117],{"class":53},[39,103980,102086],{"class":237},[39,103982,52282],{"class":53},[39,103984,103985,103987,103989,103991,103993,103995],{"class":41,"line":92},[39,103986,53119],{"class":53},[39,103988,102595],{"class":52275},[39,103990,15893],{"class":49},[39,103992,1117],{"class":53},[39,103994,102936],{"class":237},[39,103996,102119],{"class":53},[39,103998,103999,104001,104003,104005,104007,104009,104011,104013,104015],{"class":41,"line":112},[39,104000,53119],{"class":53},[39,104002,102095],{"class":52275},[39,104004,54799],{"class":49},[39,104006,1117],{"class":53},[39,104008,54466],{"class":237},[39,104010,102111],{"class":49},[39,104012,1117],{"class":53},[39,104014,102116],{"class":237},[39,104016,102119],{"class":53},[39,104018,104019,104021,104023],{"class":41,"line":118},[39,104020,52760],{"class":53},[39,104022,52775],{"class":52275},[39,104024,52282],{"class":53},[19,104026,104027],{},"含义:",[328,104029,104030,104036,104041,104044],{},[331,104031,104032,104033,104035],{},"创建名为 ",[26,104034,54689],{}," 的刚体",[331,104037,104038,104039],{},"初始位置在世界坐标 ",[26,104040,102144],{},[331,104042,104043],{},"它有一个自由关节",[331,104045,104046],{},"它有一个盒子几何体",[476,104048,104049],{"id":104049},"坐标怎么理解",[19,104051,104052],{},"MuJoCo 默认使用三维坐标：",[30,104054,104057],{"className":104055,"code":104056,"language":6267,"meta":35},[6265],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[26,104058,104056],{"__ignoreMap":35},[19,104060,15606],{},[30,104062,104064],{"className":54042,"code":104063,"language":54044,"meta":35,"style":35},"pos=\"0 0 1\"\n",[26,104065,104066],{"__ignoreMap":35},[39,104067,104068],{"class":41,"line":42},[39,104069,104063],{"class":53},[19,104071,104072],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[476,104074,104076],{"id":104075},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104078,104079,104080,83505,104083,104085],{},"不同 ",[26,104081,104082],{},"type",[26,104084,32471],{}," 含义不同：",[1404,104087,104088,104103],{},[1407,104089,104090],{},[1410,104091,104092,104096,104101],{},[1413,104093,104094],{"align":24710},[26,104095,104082],{},[1413,104097,104098,104100],{"align":24710},[26,104099,32471],{}," 示例",[1413,104102,101675],{"align":24710},[1450,104104,104105,104119,104134,104153],{},[1410,104106,104107,104111,104116],{},[1455,104108,104109],{"align":24710},[26,104110,54689],{},[1455,104112,104113],{"align":24710},[26,104114,104115],{},"size=\"0.1 0.2 0.3\"",[1455,104117,104118],{"align":24710},"x\u002Fy\u002Fz 半边长，不是完整长度",[1410,104120,104121,104126,104131],{},[1455,104122,104123],{"align":24710},[26,104124,104125],{},"sphere",[1455,104127,104128],{"align":24710},[26,104129,104130],{},"size=\"0.1\"",[1455,104132,104133],{"align":24710},"球半径",[1410,104135,104136,104141,104146],{},[1455,104137,104138],{"align":24710},[26,104139,104140],{},"capsule",[1455,104142,104143],{"align":24710},[26,104144,104145],{},"size=\"0.03\"",[1455,104147,104148,104149,104152],{"align":24710},"胶囊半径，长度常用 ",[26,104150,104151],{},"fromto"," 指定",[1410,104154,104155,104160,104165],{},[1455,104156,104157],{"align":24710},[26,104158,104159],{},"plane",[1455,104161,104162],{"align":24710},[26,104163,104164],{},"size=\"3 3 0.1\"",[1455,104166,104167],{"align":24710},"可视平面大小，通常当地面",[19,104169,104170,104171,104173,104174,104176],{},"最容易踩坑的是 box：",[26,104172,102999],{}," 表示边长大约是 ",[26,104175,33012],{},"，因为 MuJoCo 用的是半边长。",[476,104178,104180],{"id":104179},"site-是什么","site 是什么",[19,104182,104183,104186],{},[26,104184,104185],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[328,104188,104189,104192,104195,104198],{},[331,104190,104191],{},"标记机械臂末端。",[331,104193,104194],{},"标记目标位置。",[331,104196,104197],{},"放传感器或相机参考点。",[331,104199,104200],{},"在 Python 中读取某个关键点的世界坐标。",[19,104202,104203,104204,101993,104207,104210],{},"在后面的 Reacher 任务中，",[26,104205,104206],{},"tip",[26,104208,104209],{},"target"," 就会用 site 表示。",[14,104212,102228],{"id":102227},[30,104214,104216],{"className":31353,"code":104215,"language":31355,"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",[26,104217,104218,104224,104234,104238,104242,104250,104255,104259,104263,104267,104272,104276,104281,104286,104291,104296,104300,104304,104308,104312,104316,104320,104332,104344,104352,104356,104371,104386,104390,104403,104418,104431,104444,104448,104464,104468,104472,104483,104495,104507,104519,104523,104527,104539],{"__ignoreMap":35},[39,104219,104220,104222],{"class":41,"line":42},[39,104221,31367],{"class":45},[39,104223,102276],{"class":53},[39,104225,104226,104228,104230,104232],{"class":41,"line":92},[39,104227,31367],{"class":45},[39,104229,32355],{"class":53},[39,104231,32358],{"class":45},[39,104233,32361],{"class":53},[39,104235,104236],{"class":41,"line":112},[39,104237,122],{"emptyLinePlaceholder":121},[39,104239,104240],{"class":41,"line":118},[39,104241,122],{"emptyLinePlaceholder":121},[39,104243,104244,104246,104248],{"class":41,"line":125},[39,104245,102289],{"class":74},[39,104247,71],{"class":45},[39,104249,102294],{"class":237},[39,104251,104252],{"class":41,"line":132},[39,104253,104254],{"class":237},"\u003Cmujoco model=\"xml_basic\">\n",[39,104256,104257],{"class":41,"line":138},[39,104258,102304],{"class":237},[39,104260,104261],{"class":41,"line":169},[39,104262,122],{"emptyLinePlaceholder":121},[39,104264,104265],{"class":41,"line":190},[39,104266,102313],{"class":237},[39,104268,104269],{"class":41,"line":202},[39,104270,104271],{"class":237},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[39,104273,104274],{"class":41,"line":207},[39,104275,122],{"emptyLinePlaceholder":121},[39,104277,104278],{"class":41,"line":212},[39,104279,104280],{"class":237},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[39,104282,104283],{"class":41,"line":223},[39,104284,104285],{"class":237},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[39,104287,104288],{"class":41,"line":228},[39,104289,104290],{"class":237},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[39,104292,104293],{"class":41,"line":263},[39,104294,104295],{"class":237},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[39,104297,104298],{"class":41,"line":287},[39,104299,102342],{"class":237},[39,104301,104302],{"class":41,"line":292},[39,104303,102347],{"class":237},[39,104305,104306],{"class":41,"line":305},[39,104307,102352],{"class":237},[39,104309,104310],{"class":41,"line":310},[39,104311,96673],{"class":237},[39,104313,104314],{"class":41,"line":321},[39,104315,122],{"emptyLinePlaceholder":121},[39,104317,104318],{"class":41,"line":713},[39,104319,122],{"emptyLinePlaceholder":121},[39,104321,104322,104324,104326,104328,104330],{"class":41,"line":718},[39,104323,32922],{"class":45},[39,104325,217],{"class":49},[39,104327,102373],{"class":53},[39,104329,96661],{"class":74},[39,104331,4822],{"class":53},[39,104333,104334,104336,104338,104340,104342],{"class":41,"line":723},[39,104335,102382],{"class":53},[39,104337,1117],{"class":45},[39,104339,102387],{"class":53},[39,104341,102289],{"class":74},[39,104343,574],{"class":53},[39,104345,104346,104348,104350],{"class":41,"line":729},[39,104347,102396],{"class":53},[39,104349,1117],{"class":45},[39,104351,102401],{"class":53},[39,104353,104354],{"class":41,"line":735},[39,104355,122],{"emptyLinePlaceholder":121},[39,104357,104358,104361,104363,104366,104369],{"class":41,"line":741},[39,104359,104360],{"class":53},"    box_body_id ",[39,104362,1117],{"class":45},[39,104364,104365],{"class":53}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[39,104367,104368],{"class":237},"\"red_box\"",[39,104370,574],{"class":53},[39,104372,104373,104376,104378,104381,104384],{"class":41,"line":747},[39,104374,104375],{"class":53},"    site_id ",[39,104377,1117],{"class":45},[39,104379,104380],{"class":53}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[39,104382,104383],{"class":237},"\"box_center\"",[39,104385,574],{"class":53},[39,104387,104388],{"class":41,"line":753},[39,104389,122],{"emptyLinePlaceholder":121},[39,104391,104392,104394,104397,104399,104401],{"class":41,"line":758},[39,104393,4184],{"class":45},[39,104395,104396],{"class":53}," box_body_id ",[39,104398,2170],{"class":45},[39,104400,315],{"class":74},[39,104402,4822],{"class":53},[39,104404,104405,104408,104411,104413,104416],{"class":41,"line":763},[39,104406,104407],{"class":45},"        raise",[39,104409,104410],{"class":74}," RuntimeError",[39,104412,54],{"class":53},[39,104414,104415],{"class":237},"\"body red_box not found\"",[39,104417,574],{"class":53},[39,104419,104420,104422,104425,104427,104429],{"class":41,"line":772},[39,104421,4184],{"class":45},[39,104423,104424],{"class":53}," site_id ",[39,104426,2170],{"class":45},[39,104428,315],{"class":74},[39,104430,4822],{"class":53},[39,104432,104433,104435,104437,104439,104442],{"class":41,"line":777},[39,104434,104407],{"class":45},[39,104436,104410],{"class":74},[39,104438,54],{"class":53},[39,104440,104441],{"class":237},"\"site box_center not found\"",[39,104443,574],{"class":53},[39,104445,104446],{"class":41,"line":785},[39,104447,122],{"emptyLinePlaceholder":121},[39,104449,104450,104452,104454,104456,104458,104460,104462],{"class":41,"line":796},[39,104451,4284],{"class":45},[39,104453,102476],{"class":53},[39,104455,27018],{"class":45},[39,104457,33418],{"class":74},[39,104459,54],{"class":53},[39,104461,2832],{"class":74},[39,104463,31761],{"class":53},[39,104465,104466],{"class":41,"line":808},[39,104467,102491],{"class":53},[39,104469,104470],{"class":41,"line":823},[39,104471,122],{"emptyLinePlaceholder":121},[39,104473,104474,104476,104478,104481],{"class":41,"line":839},[39,104475,32274],{"class":74},[39,104477,54],{"class":53},[39,104479,104480],{"class":237},"\"simulation time:\"",[39,104482,102453],{"class":53},[39,104484,104485,104487,104489,104492],{"class":41,"line":845},[39,104486,32274],{"class":74},[39,104488,54],{"class":53},[39,104490,104491],{"class":237},"\"box body position:\"",[39,104493,104494],{"class":53},", data.xpos[box_body_id].copy())\n",[39,104496,104497,104499,104501,104504],{"class":41,"line":856},[39,104498,32274],{"class":74},[39,104500,54],{"class":53},[39,104502,104503],{"class":237},"\"site position:\"",[39,104505,104506],{"class":53},", data.site_xpos[site_id].copy())\n",[39,104508,104509,104511,104513,104516],{"class":41,"line":861},[39,104510,32274],{"class":74},[39,104512,54],{"class":53},[39,104514,104515],{"class":237},"\"box qpos:\"",[39,104517,104518],{"class":53},", np.array(data.qpos))\n",[39,104520,104521],{"class":41,"line":870},[39,104522,122],{"emptyLinePlaceholder":121},[39,104524,104525],{"class":41,"line":9084},[39,104526,122],{"emptyLinePlaceholder":121},[39,104528,104529,104531,104533,104535,104537],{"class":41,"line":9090},[39,104530,2654],{"class":45},[39,104532,32195],{"class":74},[39,104534,102534],{"class":45},[39,104536,102537],{"class":237},[39,104538,4822],{"class":53},[39,104540,104541],{"class":41,"line":9102},[39,104542,102544],{"class":53},[19,104544,104545],{},"保存为：",[30,104547,104549],{"className":24796,"code":104548,"language":24798,"meta":35,"style":35},"touch ch2_xml_basic.py\n",[26,104550,104551],{"__ignoreMap":35},[39,104552,104553,104555],{"class":41,"line":42},[39,104554,102258],{"class":49},[39,104556,104557],{"class":237}," ch2_xml_basic.py\n",[19,104559,103276],{},[30,104561,104563],{"className":24796,"code":104562,"language":24798,"meta":35,"style":35},"python ch2_xml_basic.py\n",[26,104564,104565],{"__ignoreMap":35},[39,104566,104567,104569],{"class":41,"line":42},[39,104568,31355],{"class":49},[39,104570,104557],{"class":237},[476,104572,102547],{"id":102547},[19,104574,104575],{},"用名字查找 body：",[30,104577,104579],{"className":31353,"code":104578,"language":31355,"meta":35,"style":35},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[26,104580,104581],{"__ignoreMap":35},[39,104582,104583,104586,104588,104590,104592],{"class":41,"line":42},[39,104584,104585],{"class":53},"box_body_id ",[39,104587,1117],{"class":45},[39,104589,104365],{"class":53},[39,104591,104368],{"class":237},[39,104593,574],{"class":53},[19,104595,104596],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104598,104599],{},"用名字查找 site：",[30,104601,104603],{"className":31353,"code":104602,"language":31355,"meta":35,"style":35},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[26,104604,104605],{"__ignoreMap":35},[39,104606,104607,104610,104612,104614,104616],{"class":41,"line":42},[39,104608,104609],{"class":53},"site_id ",[39,104611,1117],{"class":45},[39,104613,104380],{"class":53},[39,104615,104383],{"class":237},[39,104617,574],{"class":53},[19,104619,104620,104621,104624,104625,104628],{},"注意第二个参数是对象类型。查 body 就用 ",[26,104622,104623],{},"mjOBJ_BODY","，查 site 就用 ",[26,104626,104627],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104630,104631],{},"读取世界坐标：",[30,104633,104635],{"className":31353,"code":104634,"language":31355,"meta":35,"style":35},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[26,104636,104637,104642],{"__ignoreMap":35},[39,104638,104639],{"class":41,"line":42},[39,104640,104641],{"class":53},"data.xpos[box_body_id]\n",[39,104643,104644],{"class":41,"line":92},[39,104645,104646],{"class":53},"data.site_xpos[site_id]\n",[19,104648,104649,104652,104653,104656],{},[26,104650,104651],{},"xpos"," 是 body 的世界坐标，",[26,104654,104655],{},"site_xpos"," 是 site 的世界坐标。",[476,104658,102683],{"id":102683},[30,104660,104662],{"className":31353,"code":104661,"language":31355,"meta":35,"style":35},"import mujoco\nimport numpy as np\n",[26,104663,104664,104670],{"__ignoreMap":35},[39,104665,104666,104668],{"class":41,"line":42},[39,104667,31367],{"class":45},[39,104669,102276],{"class":53},[39,104671,104672,104674,104676,104678],{"class":41,"line":92},[39,104673,31367],{"class":45},[39,104675,32355],{"class":53},[39,104677,32358],{"class":45},[39,104679,32361],{"class":53},[19,104681,104682,104683,104686,104687,104690,104691,1478,104694,29360],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[26,104684,104685],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[26,104688,104689],{},"as np"," 是习惯写法，后面就可以写 ",[26,104692,104693],{},"np.array(...)",[26,104695,104696],{},"np.round(...)",[30,104698,104699],{"className":31353,"code":102570,"language":31355,"meta":35,"style":35},[26,104700,104701,104709,104713],{"__ignoreMap":35},[39,104702,104703,104705,104707],{"class":41,"line":42},[39,104704,102289],{"class":74},[39,104706,71],{"class":45},[39,104708,102294],{"class":237},[39,104710,104711],{"class":41,"line":92},[39,104712,102585],{"class":237},[39,104714,104715],{"class":41,"line":112},[39,104716,96673],{"class":237},[19,104718,104719,104720,29360],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[26,104721,104722],{},"mujoco.MjModel.from_xml_string(XML)",[30,104724,104726],{"className":54042,"code":104725,"language":54044,"meta":35,"style":35},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[26,104727,104728],{"__ignoreMap":35},[39,104729,104730,104732,104734,104736,104738,104740,104742,104744,104747,104749,104751,104754,104756,104758,104761],{"class":41,"line":42},[39,104731,2170],{"class":53},[39,104733,104185],{"class":52275},[39,104735,15893],{"class":49},[39,104737,1117],{"class":53},[39,104739,104383],{"class":237},[39,104741,102081],{"class":49},[39,104743,1117],{"class":53},[39,104745,104746],{"class":237},"\"0 0 0\"",[39,104748,102111],{"class":49},[39,104750,1117],{"class":53},[39,104752,104753],{"class":237},"\"0.03\"",[39,104755,79742],{"class":49},[39,104757,1117],{"class":53},[39,104759,104760],{"class":237},"\"0 1 0 1\"",[39,104762,102119],{"class":53},[19,104764,104765,104767,104768,104771,104772,104774,104775,104778],{},[26,104766,104185],{}," 是标记点。",[26,104769,104770],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[26,104773,104145],{}," 表示显示出来的小球大小。",[26,104776,104777],{},"rgba=\"0 1 0 1\""," 表示绿色。",[30,104780,104781],{"className":31353,"code":104578,"language":31355,"meta":35,"style":35},[26,104782,104783],{"__ignoreMap":35},[39,104784,104785,104787,104789,104791,104793],{"class":41,"line":42},[39,104786,104585],{"class":53},[39,104788,1117],{"class":45},[39,104790,104365],{"class":53},[39,104792,104368],{"class":237},[39,104794,574],{"class":53},[19,104796,104797,104798,104800],{},"这行的作用是：根据名字 ",[26,104799,104368],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104802,104803],{},"拆开看：",[328,104805,104806,104812,104817,104823],{},[331,104807,104808,104811],{},[26,104809,104810],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[331,104813,104814,104816],{},[26,104815,103060],{}," 是被查询的模型。",[331,104818,104819,104822],{},[26,104820,104821],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[331,104824,104825,104827],{},[26,104826,104368],{}," 是 XML 里写的名字。",[30,104829,104830],{"className":31353,"code":104602,"language":31355,"meta":35,"style":35},[26,104831,104832],{"__ignoreMap":35},[39,104833,104834,104836,104838,104840,104842],{"class":41,"line":42},[39,104835,104609],{"class":53},[39,104837,1117],{"class":45},[39,104839,104380],{"class":53},[39,104841,104383],{"class":237},[39,104843,574],{"class":53},[19,104845,104846,104847,29360],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[26,104848,104383],{},[30,104850,104852],{"className":31353,"code":104851,"language":31355,"meta":35,"style":35},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[26,104853,104854,104866],{"__ignoreMap":35},[39,104855,104856,104858,104860,104862,104864],{"class":41,"line":42},[39,104857,2654],{"class":45},[39,104859,104396],{"class":53},[39,104861,2170],{"class":45},[39,104863,315],{"class":74},[39,104865,4822],{"class":53},[39,104867,104868,104871,104873,104875,104877],{"class":41,"line":92},[39,104869,104870],{"class":45},"    raise",[39,104872,104410],{"class":74},[39,104874,54],{"class":53},[39,104876,104415],{"class":237},[39,104878,574],{"class":53},[19,104880,104881,104883,104884,104887,104888,104891,104892,104895],{},[26,104882,2654],{}," 是条件判断。",[26,104885,104886],{},"mj_name2id"," 找不到对象时会返回 ",[26,104889,104890],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[26,104893,104894],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[30,104897,104899],{"className":31353,"code":104898,"language":31355,"meta":35,"style":35},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[26,104900,104901,104917],{"__ignoreMap":35},[39,104902,104903,104905,104907,104909,104911,104913,104915],{"class":41,"line":42},[39,104904,4108],{"class":45},[39,104906,102476],{"class":53},[39,104908,27018],{"class":45},[39,104910,33418],{"class":74},[39,104912,54],{"class":53},[39,104914,2832],{"class":74},[39,104916,31761],{"class":53},[39,104918,104919],{"class":41,"line":92},[39,104920,102674],{"class":53},[19,104922,104923],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[30,104925,104927],{"className":31353,"code":104926,"language":31355,"meta":35,"style":35},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[26,104928,104929],{"__ignoreMap":35},[39,104930,104931,104933,104935,104937],{"class":41,"line":42},[39,104932,31390],{"class":74},[39,104934,54],{"class":53},[39,104936,104491],{"class":237},[39,104938,104494],{"class":53},[19,104940,104941,104943,104944,104947],{},[26,104942,102054],{}," 保存所有 body 的世界坐标。",[26,104945,104946],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[30,104949,104951],{"className":31353,"code":104950,"language":31355,"meta":35,"style":35},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[26,104952,104953],{"__ignoreMap":35},[39,104954,104955,104957,104959,104961],{"class":41,"line":42},[39,104956,31390],{"class":74},[39,104958,54],{"class":53},[39,104960,104503],{"class":237},[39,104962,104506],{"class":53},[19,104964,104965,104968,104969,104971],{},[26,104966,104967],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[26,104970,103952],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[30,104973,104975],{"className":31353,"code":104974,"language":31355,"meta":35,"style":35},"print(\"box qpos:\", np.array(data.qpos))\n",[26,104976,104977],{"__ignoreMap":35},[39,104978,104979,104981,104983,104985],{"class":41,"line":42},[39,104980,31390],{"class":74},[39,104982,54],{"class":53},[39,104984,104515],{"class":237},[39,104986,104518],{"class":53},[19,104988,104989,104990,104993],{},"这里打印广义位置数组。",[26,104991,104992],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104995,103291],{"id":103290},[19,104997,104998,104999,105002,105003,29360],{},"程序会输出 ",[26,105000,105001],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[26,105004,105005],{},"qpos",[19,105007,105008,105010,105011,105014,105015,105018],{},[26,105009,104946],{}," 是 body 的世界坐标位置。",[26,105012,105013],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[26,105016,105017],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105020,83197,105021,83505,105023,105025],{},[26,105022,103952],{},[26,105024,104770],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105027,105028],{},"如果你把 site 改成：",[30,105030,105032],{"className":54042,"code":105031,"language":54044,"meta":35,"style":35},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[26,105033,105034],{"__ignoreMap":35},[39,105035,105036,105038,105040,105042,105044,105047,105049,105051,105054,105056,105058,105060,105062,105064,105066],{"class":41,"line":42},[39,105037,2170],{"class":53},[39,105039,104185],{"class":52275},[39,105041,15893],{"class":49},[39,105043,1117],{"class":53},[39,105045,105046],{"class":237},"\"box_top\"",[39,105048,102081],{"class":49},[39,105050,1117],{"class":53},[39,105052,105053],{"class":237},"\"0 0 0.15\"",[39,105055,102111],{"class":49},[39,105057,1117],{"class":53},[39,105059,104753],{"class":237},[39,105061,79742],{"class":49},[39,105063,1117],{"class":53},[39,105065,104760],{"class":237},[39,105067,102119],{"class":53},[19,105069,105070,105071,105074],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[26,105072,105073],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105076,103323],{"id":103322},[328,105078,105079,105088,105091,105098,105104,105115],{},[331,105080,103386,105081,105083,105084,103389,105086,29360],{},[26,105082,103956],{}," 的初始高度从 ",[26,105085,1483],{},[26,105087,1345],{},[331,105089,105090],{},"重新运行程序。",[331,105092,105093,105094,105097],{},"观察 ",[26,105095,105096],{},"box qpos"," 和最终位置是否变化。",[331,105099,105100,105101,105103],{},"故意把 ",[26,105102,104185],{}," 名称改错，确认程序能报错。",[331,105105,103386,105106,105108,105109,103389,105111,105114],{},[26,105107,102095],{}," 的颜色 ",[26,105110,103007],{},[26,105112,105113],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[331,105116,103386,105117,83505,105119,103389,105122,105125,105126,105128],{},[26,105118,103952],{},[26,105120,105121],{},"pos",[26,105123,105124],{},"0 0 0.2","，观察 ",[26,105127,105073],{}," 如何变化。",[14,105130,103428],{"id":103427},[476,105132,105134],{"id":105133},"xml-error-schema-violation",[26,105135,105136],{},"XML Error: Schema violation",[19,105138,105139],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[476,105141,105143,82265,105145],{"id":105142},"mj_name2id-返回-1",[26,105144,104886],{},[26,105146,104890],{},[19,105148,105149,105150,105153],{},"说明名字没有找到。检查 XML 中 ",[26,105151,105152],{},"name=\"...\"","，并确认对象类型正确。",[476,105155,105156],{"id":105156},"物体不下落",[19,105158,103498],{},[328,105160,105161,105166,105171],{},[331,105162,105163,105164],{},"body 是否有 ",[26,105165,102595],{},[331,105167,105168,105169],{},"gravity 是否为 ",[26,105170,103564],{},[331,105172,105173,105174,105176],{},"body 是否被固定在 ",[26,105175,102816],{}," 中",[476,105178,105179],{"id":105179},"坐标看起来不符合预期",[19,105181,105182],{},"先区分两种坐标：",[1404,105184,105185,105194],{},[1407,105186,105187],{},[1410,105188,105189,105192],{},[1413,105190,105191],{"align":24710},"坐标",[1413,105193,101675],{"align":24710},[1450,105195,105196,105206],{},[1410,105197,105198,105203],{},[1455,105199,105200,105201],{"align":24710},"XML 里的 ",[26,105202,105121],{},[1455,105204,105205],{"align":24710},"相对父 body 的局部坐标",[1410,105207,105208,105214],{},[1455,105209,105210,25953,105212],{"align":24710},[26,105211,102054],{},[26,105213,104967],{},[1455,105215,105216],{"align":24710},"仿真更新后的世界坐标",[19,105218,105219,105220,105222,105223,83514,105226,105228],{},"如果你修改了 ",[26,105221,102045],{},"，但还没调用 ",[26,105224,105225],{},"mj_forward",[26,105227,102190],{},"，世界坐标可能还没有更新。",[14,105230,103582],{"id":103581},[19,105232,105233],{},"MJCF 建模先掌握四件事：",[328,105235,105236,105241,105246,105251],{},[331,105237,105238,105240],{},[26,105239,52775],{}," 表示刚体层级。",[331,105242,105243,105245],{},[26,105244,102095],{}," 表示形状、碰撞和质量。",[331,105247,105248,105250],{},[26,105249,103931],{}," 决定 body 能不能动、怎么动。",[331,105252,105253,105255],{},[26,105254,104185],{}," 用来标记关键点，方便 Python 读取位置。",[19,105257,105258],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1192,105260,105261],{},"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":92,"depth":92,"links":105263},[105264,105265,105266,105272,105276,105277,105278,105285],{"id":101621,"depth":92,"text":101622},{"id":101744,"depth":92,"text":101745},{"id":102019,"depth":92,"text":102020,"children":105267},[105268,105269,105270,105271],{"id":103935,"depth":112,"text":103935},{"id":104049,"depth":112,"text":104049},{"id":104075,"depth":112,"text":104076},{"id":104179,"depth":112,"text":104180},{"id":102227,"depth":92,"text":102228,"children":105273},[105274,105275],{"id":102547,"depth":112,"text":102547},{"id":102683,"depth":112,"text":102683},{"id":103290,"depth":92,"text":103291},{"id":103322,"depth":92,"text":103323},{"id":103427,"depth":92,"text":103428,"children":105279},[105280,105281,105283,105284],{"id":105133,"depth":112,"text":105136},{"id":105142,"depth":112,"text":105282},"mj_name2id 返回 -1",{"id":105156,"depth":112,"text":105156},{"id":105179,"depth":112,"text":105179},{"id":103581,"depth":92,"text":103582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103629,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105292,"title":105293,"body":105294,"description":35,"extension":1203,"meta":106789,"navigation":121,"path":106790,"seo":106791,"stem":106792,"__hash__":106793},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105295,"toc":106761},[105296,105299,105301,105304,105307,105345,105348,105354,105357,105359,105361,105388,105390,105404,105406,105447,105449,105473,105475,105478,105487,105496,105499,105508,105516,105525,105528,105538,105541,105593,105600,105606,105614,105662,105665,105684,105687,105695,105699,105708,105741,105743,106091,106093,106105,106107,106118,106120,106123,106144,106150,106153,106178,106188,106191,106199,106202,106205,106226,106237,106239,106259,106262,106283,106292,106311,106317,106342,106345,106359,106366,106390,106393,106401,106410,106426,106438,106446,106455,106457,106460,106484,106489,106492,106514,106516,106555,106557,106564,106566,106574,106577,106580,106592,106633,106640,106651,106658,106661,106710,106713,106716,106722,106724,106729,106755,106758],[10,105297,105293],{"id":105298},"_3python-控制接口读取状态与推进仿真",[14,105300,101622],{"id":101621},[19,105302,105303],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105305,105306],{},"你将学习:",[328,105308,105309,105314,105319,105323,105328,105339],{},[331,105310,105311],{},[26,105312,105313],{},"MjModel.from_xml_string",[331,105315,105316],{},[26,105317,105318],{},"MjData(model)",[331,105320,105321],{},[26,105322,102190],{},[331,105324,105325],{},[26,105326,105327],{},"mj_resetData",[331,105329,105330,105331,1478,105333,1478,105336],{},"读取 ",[26,105332,105005],{},[26,105334,105335],{},"qvel",[26,105337,105338],{},"ctrl",[331,105340,105341,105342],{},"使用 ",[26,105343,105344],{},"model.opt.timestep",[19,105346,105347],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[30,105349,105352],{"className":105350,"code":105351,"language":6267,"meta":35},[6265],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[26,105353,105351],{"__ignoreMap":35},[19,105355,105356],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105358,101745],{"id":101744},[19,105360,101748],{},[30,105362,105364],{"className":24796,"code":105363,"language":24798,"meta":35,"style":35},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[26,105365,105366],{"__ignoreMap":35},[39,105367,105368,105370,105372,105374,105376,105379,105381,105383,105385],{"class":41,"line":42},[39,105369,25551],{"class":49},[39,105371,27290],{"class":237},[39,105373,24808],{"class":237},[39,105375,27375],{"class":74},[39,105377,105378],{"class":237}," python3",[39,105380,101773],{"class":237},[39,105382,103476],{"class":237},[39,105384,101789],{"class":237},[39,105386,105387],{"class":237}," glfw\n",[19,105389,103794],{},[30,105391,105392],{"className":24796,"code":101894,"language":24798,"meta":35,"style":35},[26,105393,105394],{"__ignoreMap":35},[39,105395,105396,105398,105400,105402],{"class":41,"line":42},[39,105397,24805],{"class":49},[39,105399,24808],{"class":237},[39,105401,101905],{"class":237},[39,105403,101908],{"class":237},[19,105405,103811],{},[30,105407,105409],{"className":24796,"code":105408,"language":24798,"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",[26,105410,105411,105428,105437],{"__ignoreMap":35},[39,105412,105413,105415,105417,105419,105422,105424,105426],{"class":41,"line":42},[39,105414,31305],{"class":49},[39,105416,30151],{"class":237},[39,105418,26090],{"class":74},[39,105420,105421],{"class":237}," mujoco-python-api",[39,105423,101950],{"class":237},[39,105425,101953],{"class":74},[39,105427,101956],{"class":74},[39,105429,105430,105432,105434],{"class":41,"line":92},[39,105431,31305],{"class":49},[39,105433,101963],{"class":237},[39,105435,105436],{"class":237}," mujoco-python-api\n",[39,105438,105439,105441,105443,105445],{"class":41,"line":112},[39,105440,24805],{"class":49},[39,105442,24808],{"class":237},[39,105444,101905],{"class":237},[39,105446,101908],{"class":237},[19,105448,101979],{},[328,105450,105451,105458,105467],{},[331,105452,105453,101993,105455,105457],{},[26,105454,101650],{},[26,105456,101655],{}," 是官方 Python bindings 的类名。",[331,105459,105460,105461,105464,105465,29360],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[26,105462,105463],{},"mjModel"," 在 Python 中是 ",[26,105466,101684],{},[331,105468,105469,105470,29360],{},"不要使用 ",[26,105471,105472],{},"sim = mujoco_py.MjSim(...)",[14,105474,102020],{"id":102019},[19,105476,105477],{},"仿真推进核心代码:",[30,105479,105481],{"className":31353,"code":105480,"language":31355,"meta":35,"style":35},"mujoco.mj_step(model, data)\n",[26,105482,105483],{"__ignoreMap":35},[39,105484,105485],{"class":41,"line":42},[39,105486,105480],{"class":53},[19,105488,105489,105490,1478,105492,1478,105494,29360],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[26,105491,102045],{},[26,105493,102048],{},[26,105495,102042],{},[19,105497,105498],{},"重置仿真:",[30,105500,105502],{"className":31353,"code":105501,"language":31355,"meta":35,"style":35},"mujoco.mj_resetData(model, data)\n",[26,105503,105504],{"__ignoreMap":35},[39,105505,105506],{"class":41,"line":42},[39,105507,105501],{"class":53},[19,105509,105510,105511,83514,105513,105515],{},"如果手动修改了 ",[26,105512,102045],{},[26,105514,102048],{},"，通常应调用:",[30,105517,105519],{"className":31353,"code":105518,"language":31355,"meta":35,"style":35},"mujoco.mj_forward(model, data)\n",[26,105520,105521],{"__ignoreMap":35},[39,105522,105523],{"class":41,"line":42},[39,105524,105518],{"class":53},[19,105526,105527],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[476,105529,105531,1478,105533,1478,105535,105537],{"id":105530},"qposqvelctrl-是什么",[26,105532,105005],{},[26,105534,105335],{},[26,105536,105338],{}," 是什么",[19,105539,105540],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1404,105542,105543,105555],{},[1407,105544,105545],{},[1410,105546,105547,105550,105552],{},[1413,105548,105549],{"align":24710},"字段",[1413,105551,101675],{"align":24710},[1413,105553,105554],{"align":24710},"谁来修改",[1450,105556,105557,105569,105581],{},[1410,105558,105559,105563,105566],{},[1455,105560,105561],{"align":24710},[26,105562,102045],{},[1455,105564,105565],{"align":24710},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1455,105567,105568],{"align":24710},"MuJoCo 更新，也可以手动设置初始状态",[1410,105570,105571,105575,105578],{},[1455,105572,105573],{"align":24710},[26,105574,102048],{},[1455,105576,105577],{"align":24710},"广义速度，例如小车速度、关节角速度",[1455,105579,105580],{"align":24710},"MuJoCo 更新，也可以手动清零",[1410,105582,105583,105587,105590],{},[1455,105584,105585],{"align":24710},[26,105586,102051],{},[1455,105588,105589],{"align":24710},"actuator 的控制输入",[1455,105591,105592],{"align":24710},"主要由你的控制代码写入",[19,105594,10093,105595,101993,105597,105599],{},[26,105596,105005],{},[26,105598,105335],{}," 不一定同维。自由刚体就是典型例子：",[30,105601,105604],{"className":105602,"code":105603,"language":6267,"meta":35},[6265],"freejoint: qpos 7 维，qvel 6 维\n",[26,105605,105603],{"__ignoreMap":35},[476,105607,105609,101993,105611,105613],{"id":105608},"mj_step-和-mj_forward-的区别",[26,105610,102190],{},[26,105612,105225],{}," 的区别",[1404,105615,105616,105629],{},[1407,105617,105618],{},[1410,105619,105620,105623,105626],{},[1413,105621,105622],{"align":24710},"函数",[1413,105624,105625],{"align":24710},"是否推进时间",[1413,105627,105628],{"align":24710},"什么时候用",[1450,105630,105631,105644],{},[1410,105632,105633,105638,105641],{},[1455,105634,105635],{"align":24710},[26,105636,105637],{},"mj_step(model, data)",[1455,105639,105640],{"align":24710},"是",[1455,105642,105643],{"align":24710},"正常仿真循环，每调用一次前进一步",[1410,105645,105646,105651,105654],{},[1455,105647,105648],{"align":24710},[26,105649,105650],{},"mj_forward(model, data)",[1455,105652,105653],{"align":24710},"否",[1455,105655,105656,105657,1478,105659,105661],{"align":24710},"手动改了 ",[26,105658,105005],{},[26,105660,105335],{}," 后，刷新派生量",[19,105663,105664],{},"例如你写：",[30,105666,105668],{"className":31353,"code":105667,"language":31355,"meta":35,"style":35},"data.qpos[2] = 2.0\n",[26,105669,105670],{"__ignoreMap":35},[39,105671,105672,105675,105677,105679,105681],{"class":41,"line":42},[39,105673,105674],{"class":53},"data.qpos[",[39,105676,1345],{"class":74},[39,105678,5524],{"class":53},[39,105680,1117],{"class":45},[39,105682,105683],{"class":74}," 2.0\n",[19,105685,105686],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[30,105688,105689],{"className":31353,"code":105518,"language":31355,"meta":35,"style":35},[26,105690,105691],{"__ignoreMap":35},[39,105692,105693],{"class":41,"line":42},[39,105694,105518],{"class":53},[476,105696,105698],{"id":105697},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,105700,105701,105704,105705,105707],{},[26,105702,105703],{},"mujoco.mj_resetData(model, data)"," 会把 ",[26,105706,34376],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[30,105709,105711],{"className":31353,"code":105710,"language":31355,"meta":35,"style":35},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[26,105712,105713,105717,105727,105737],{"__ignoreMap":35},[39,105714,105715],{"class":41,"line":42},[39,105716,105501],{"class":53},[39,105718,105719,105722,105724],{"class":41,"line":92},[39,105720,105721],{"class":53},"data.qpos[:] ",[39,105723,1117],{"class":45},[39,105725,105726],{"class":53}," random_qpos\n",[39,105728,105729,105732,105734],{"class":41,"line":112},[39,105730,105731],{"class":53},"data.qvel[:] ",[39,105733,1117],{"class":45},[39,105735,105736],{"class":74}," 0.0\n",[39,105738,105739],{"class":41,"line":118},[39,105740,105518],{"class":53},[14,105742,102228],{"id":102227},[30,105744,105746],{"className":31353,"code":105745,"language":31355,"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",[26,105747,105748,105754,105764,105768,105772,105780,105785,105789,105793,105797,105802,105806,105811,105816,105821,105825,105829,105833,105837,105841,105845,105864,105871,105883,105894,105910,105926,105930,105934,105946,105958,105966,105970,105981,105985,106001,106005,106009,106018,106022,106027,106036,106040,106053,106058,106067,106071,106075,106087],{"__ignoreMap":35},[39,105749,105750,105752],{"class":41,"line":42},[39,105751,31367],{"class":45},[39,105753,102276],{"class":53},[39,105755,105756,105758,105760,105762],{"class":41,"line":92},[39,105757,31367],{"class":45},[39,105759,32355],{"class":53},[39,105761,32358],{"class":45},[39,105763,32361],{"class":53},[39,105765,105766],{"class":41,"line":112},[39,105767,122],{"emptyLinePlaceholder":121},[39,105769,105770],{"class":41,"line":118},[39,105771,122],{"emptyLinePlaceholder":121},[39,105773,105774,105776,105778],{"class":41,"line":125},[39,105775,102289],{"class":74},[39,105777,71],{"class":45},[39,105779,102294],{"class":237},[39,105781,105782],{"class":41,"line":132},[39,105783,105784],{"class":237},"\u003Cmujoco model=\"state_api\">\n",[39,105786,105787],{"class":41,"line":138},[39,105788,102304],{"class":237},[39,105790,105791],{"class":41,"line":169},[39,105792,122],{"emptyLinePlaceholder":121},[39,105794,105795],{"class":41,"line":190},[39,105796,102313],{"class":237},[39,105798,105799],{"class":41,"line":202},[39,105800,105801],{"class":237},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[39,105803,105804],{"class":41,"line":207},[39,105805,122],{"emptyLinePlaceholder":121},[39,105807,105808],{"class":41,"line":212},[39,105809,105810],{"class":237},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[39,105812,105813],{"class":41,"line":223},[39,105814,105815],{"class":237},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[39,105817,105818],{"class":41,"line":228},[39,105819,105820],{"class":237},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[39,105822,105823],{"class":41,"line":263},[39,105824,102342],{"class":237},[39,105826,105827],{"class":41,"line":287},[39,105828,102347],{"class":237},[39,105830,105831],{"class":41,"line":292},[39,105832,102352],{"class":237},[39,105834,105835],{"class":41,"line":305},[39,105836,96673],{"class":237},[39,105838,105839],{"class":41,"line":310},[39,105840,122],{"emptyLinePlaceholder":121},[39,105842,105843],{"class":41,"line":321},[39,105844,122],{"emptyLinePlaceholder":121},[39,105846,105847,105849,105852,105855,105857,105860,105862],{"class":41,"line":713},[39,105848,32922],{"class":45},[39,105850,105851],{"class":49}," print_state",[39,105853,105854],{"class":53},"(prefix: ",[39,105856,2427],{"class":74},[39,105858,105859],{"class":53},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[39,105861,96661],{"class":74},[39,105863,4822],{"class":53},[39,105865,105866,105868],{"class":41,"line":718},[39,105867,32274],{"class":74},[39,105869,105870],{"class":53},"(prefix)\n",[39,105872,105873,105875,105877,105880],{"class":41,"line":723},[39,105874,32274],{"class":74},[39,105876,54],{"class":53},[39,105878,105879],{"class":237},"\"  timestep:\"",[39,105881,105882],{"class":53},", model.opt.timestep)\n",[39,105884,105885,105887,105889,105892],{"class":41,"line":729},[39,105886,32274],{"class":74},[39,105888,54],{"class":53},[39,105890,105891],{"class":237},"\"  time:\"",[39,105893,102453],{"class":53},[39,105895,105896,105898,105900,105903,105906,105908],{"class":41,"line":735},[39,105897,32274],{"class":74},[39,105899,54],{"class":53},[39,105901,105902],{"class":237},"\"  qpos:\"",[39,105904,105905],{"class":53},", np.round(data.qpos.copy(), ",[39,105907,1558],{"class":74},[39,105909,31472],{"class":53},[39,105911,105912,105914,105916,105919,105922,105924],{"class":41,"line":741},[39,105913,32274],{"class":74},[39,105915,54],{"class":53},[39,105917,105918],{"class":237},"\"  qvel:\"",[39,105920,105921],{"class":53},", np.round(data.qvel.copy(), ",[39,105923,1558],{"class":74},[39,105925,31472],{"class":53},[39,105927,105928],{"class":41,"line":747},[39,105929,122],{"emptyLinePlaceholder":121},[39,105931,105932],{"class":41,"line":753},[39,105933,122],{"emptyLinePlaceholder":121},[39,105935,105936,105938,105940,105942,105944],{"class":41,"line":758},[39,105937,32922],{"class":45},[39,105939,217],{"class":49},[39,105941,102373],{"class":53},[39,105943,96661],{"class":74},[39,105945,4822],{"class":53},[39,105947,105948,105950,105952,105954,105956],{"class":41,"line":763},[39,105949,102382],{"class":53},[39,105951,1117],{"class":45},[39,105953,102387],{"class":53},[39,105955,102289],{"class":74},[39,105957,574],{"class":53},[39,105959,105960,105962,105964],{"class":41,"line":772},[39,105961,102396],{"class":53},[39,105963,1117],{"class":45},[39,105965,102401],{"class":53},[39,105967,105968],{"class":41,"line":777},[39,105969,122],{"emptyLinePlaceholder":121},[39,105971,105972,105975,105978],{"class":41,"line":785},[39,105973,105974],{"class":53},"    print_state(",[39,105976,105977],{"class":237},"\"initial\"",[39,105979,105980],{"class":53},", model, data)\n",[39,105982,105983],{"class":41,"line":796},[39,105984,122],{"emptyLinePlaceholder":121},[39,105986,105987,105989,105991,105993,105995,105997,105999],{"class":41,"line":808},[39,105988,4284],{"class":45},[39,105990,102476],{"class":53},[39,105992,27018],{"class":45},[39,105994,33418],{"class":74},[39,105996,54],{"class":53},[39,105998,1917],{"class":74},[39,106000,31761],{"class":53},[39,106002,106003],{"class":41,"line":823},[39,106004,102491],{"class":53},[39,106006,106007],{"class":41,"line":839},[39,106008,122],{"emptyLinePlaceholder":121},[39,106010,106011,106013,106016],{"class":41,"line":845},[39,106012,105974],{"class":53},[39,106014,106015],{"class":237},"\"after 50 steps\"",[39,106017,105980],{"class":53},[39,106019,106020],{"class":41,"line":856},[39,106021,122],{"emptyLinePlaceholder":121},[39,106023,106024],{"class":41,"line":861},[39,106025,106026],{"class":53},"    mujoco.mj_resetData(model, data)\n",[39,106028,106029,106031,106034],{"class":41,"line":870},[39,106030,105974],{"class":53},[39,106032,106033],{"class":237},"\"after reset\"",[39,106035,105980],{"class":53},[39,106037,106038],{"class":41,"line":9084},[39,106039,122],{"emptyLinePlaceholder":121},[39,106041,106042,106045,106047,106049,106051],{"class":41,"line":9090},[39,106043,106044],{"class":53},"    data.qpos[",[39,106046,1345],{"class":74},[39,106048,5524],{"class":53},[39,106050,1117],{"class":45},[39,106052,105683],{"class":74},[39,106054,106055],{"class":41,"line":9102},[39,106056,106057],{"class":53},"    mujoco.mj_forward(model, data)\n",[39,106059,106060,106062,106065],{"class":41,"line":9114},[39,106061,105974],{"class":53},[39,106063,106064],{"class":237},"\"after manual qpos edit\"",[39,106066,105980],{"class":53},[39,106068,106069],{"class":41,"line":9126},[39,106070,122],{"emptyLinePlaceholder":121},[39,106072,106073],{"class":41,"line":10784},[39,106074,122],{"emptyLinePlaceholder":121},[39,106076,106077,106079,106081,106083,106085],{"class":41,"line":10809},[39,106078,2654],{"class":45},[39,106080,32195],{"class":74},[39,106082,102534],{"class":45},[39,106084,102537],{"class":237},[39,106086,4822],{"class":53},[39,106088,106089],{"class":41,"line":10832},[39,106090,102544],{"class":53},[19,106092,104545],{},[30,106094,106096],{"className":24796,"code":106095,"language":24798,"meta":35,"style":35},"touch ch3_python_state.py\n",[26,106097,106098],{"__ignoreMap":35},[39,106099,106100,106102],{"class":41,"line":42},[39,106101,102258],{"class":49},[39,106103,106104],{"class":237}," ch3_python_state.py\n",[19,106106,103276],{},[30,106108,106110],{"className":24796,"code":106109,"language":24798,"meta":35,"style":35},"python ch3_python_state.py\n",[26,106111,106112],{"__ignoreMap":35},[39,106113,106114,106116],{"class":41,"line":42},[39,106115,31355],{"class":49},[39,106117,106104],{"class":237},[476,106119,102547],{"id":102547},[19,106121,106122],{},"打印状态的函数：",[30,106124,106126],{"className":31353,"code":106125,"language":31355,"meta":35,"style":35},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[26,106127,106128],{"__ignoreMap":35},[39,106129,106130,106132,106134,106136,106138,106140,106142],{"class":41,"line":42},[39,106131,32922],{"class":45},[39,106133,105851],{"class":49},[39,106135,105854],{"class":53},[39,106137,2427],{"class":74},[39,106139,105859],{"class":53},[39,106141,96661],{"class":74},[39,106143,4822],{"class":53},[19,106145,106146,106147,106149],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[26,106148,34376],{}," 里发生了什么。",[19,106151,106152],{},"推进 50 步：",[30,106154,106156],{"className":31353,"code":106155,"language":31355,"meta":35,"style":35},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[26,106157,106158,106174],{"__ignoreMap":35},[39,106159,106160,106162,106164,106166,106168,106170,106172],{"class":41,"line":42},[39,106161,4108],{"class":45},[39,106163,102476],{"class":53},[39,106165,27018],{"class":45},[39,106167,33418],{"class":74},[39,106169,54],{"class":53},[39,106171,1917],{"class":74},[39,106173,31761],{"class":53},[39,106175,106176],{"class":41,"line":92},[39,106177,102674],{"class":53},[19,106179,106180,106181,106184,106185,106187],{},"由于 ",[26,106182,106183],{},"timestep=0.01","，所以 50 步后时间约为 ",[26,106186,36304],{}," 秒。",[19,106189,106190],{},"重置：",[30,106192,106193],{"className":31353,"code":105501,"language":31355,"meta":35,"style":35},[26,106194,106195],{"__ignoreMap":35},[39,106196,106197],{"class":41,"line":42},[39,106198,105501],{"class":53},[19,106200,106201],{},"这会把时间、位置、速度恢复到初始状态。",[19,106203,106204],{},"手动改高度：",[30,106206,106208],{"className":31353,"code":106207,"language":31355,"meta":35,"style":35},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[26,106209,106210,106222],{"__ignoreMap":35},[39,106211,106212,106214,106216,106218,106220],{"class":41,"line":42},[39,106213,105674],{"class":53},[39,106215,1345],{"class":74},[39,106217,5524],{"class":53},[39,106219,1117],{"class":45},[39,106221,105683],{"class":74},[39,106223,106224],{"class":41,"line":92},[39,106225,105518],{"class":53},[19,106227,106228,106229,106232,106233,106236],{},"这个例子里 ",[26,106230,106231],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[26,106234,106235],{},"2.0"," 表示把小球放到更高的位置。",[476,106238,102683],{"id":102683},[30,106240,106241],{"className":31353,"code":106125,"language":31355,"meta":35,"style":35},[26,106242,106243],{"__ignoreMap":35},[39,106244,106245,106247,106249,106251,106253,106255,106257],{"class":41,"line":42},[39,106246,32922],{"class":45},[39,106248,105851],{"class":49},[39,106250,105854],{"class":53},[39,106252,2427],{"class":74},[39,106254,105859],{"class":53},[39,106256,96661],{"class":74},[39,106258,4822],{"class":53},[19,106260,106261],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[328,106263,106264,106273,106278],{},[331,106265,106266,106269,106270,106272],{},[26,106267,106268],{},"prefix","：一段文字，比如 ",[26,106271,105977],{},"，用来说明现在打印的是哪个阶段。",[331,106274,106275,106277],{},[26,106276,103060],{},"：MuJoCo 模型。",[331,106279,106280,106282],{},[26,106281,34376],{},"：MuJoCo 当前状态。",[19,106284,106285,1478,106288,106291],{},[26,106286,106287],{},"prefix: str",[26,106289,106290],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[30,106293,106295],{"className":31353,"code":106294,"language":31355,"meta":35,"style":35},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[26,106296,106297],{"__ignoreMap":35},[39,106298,106299,106301,106303,106305,106307,106309],{"class":41,"line":42},[39,106300,31390],{"class":74},[39,106302,54],{"class":53},[39,106304,105902],{"class":237},[39,106306,105905],{"class":53},[39,106308,1558],{"class":74},[39,106310,31472],{"class":53},[19,106312,106313,106316],{},[26,106314,106315],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[30,106318,106320],{"className":31353,"code":106319,"language":31355,"meta":35,"style":35},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[26,106321,106322,106334],{"__ignoreMap":35},[39,106323,106324,106326,106328,106330,106332],{"class":41,"line":42},[39,106325,102609],{"class":53},[39,106327,1117],{"class":45},[39,106329,102387],{"class":53},[39,106331,102289],{"class":74},[39,106333,574],{"class":53},[39,106335,106336,106338,106340],{"class":41,"line":92},[39,106337,102633],{"class":53},[39,106339,1117],{"class":45},[39,106341,102401],{"class":53},[19,106343,106344],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[30,106346,106348],{"className":31353,"code":106347,"language":31355,"meta":35,"style":35},"print_state(\"initial\", model, data)\n",[26,106349,106350],{"__ignoreMap":35},[39,106351,106352,106355,106357],{"class":41,"line":42},[39,106353,106354],{"class":53},"print_state(",[39,106356,105977],{"class":237},[39,106358,105980],{"class":53},[19,106360,106361,106362,106365],{},"调用刚才定义的 ",[26,106363,106364],{},"print_state"," 函数，打印初始状态。",[30,106367,106368],{"className":31353,"code":106155,"language":31355,"meta":35,"style":35},[26,106369,106370,106386],{"__ignoreMap":35},[39,106371,106372,106374,106376,106378,106380,106382,106384],{"class":41,"line":42},[39,106373,4108],{"class":45},[39,106375,102476],{"class":53},[39,106377,27018],{"class":45},[39,106379,33418],{"class":74},[39,106381,54],{"class":53},[39,106383,1917],{"class":74},[39,106385,31761],{"class":53},[39,106387,106388],{"class":41,"line":92},[39,106389,102674],{"class":53},[19,106391,106392],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[30,106394,106395],{"className":31353,"code":105501,"language":31355,"meta":35,"style":35},[26,106396,106397],{"__ignoreMap":35},[39,106398,106399],{"class":41,"line":42},[39,106400,105501],{"class":53},[19,106402,106403,106404,106406,106407,106409],{},"重置 ",[26,106405,34376],{},"。注意它不会重新创建 ",[26,106408,103060],{},"，因为模型结构没有变，只是状态回到初始值。",[30,106411,106412],{"className":31353,"code":105667,"language":31355,"meta":35,"style":35},[26,106413,106414],{"__ignoreMap":35},[39,106415,106416,106418,106420,106422,106424],{"class":41,"line":42},[39,106417,105674],{"class":53},[39,106419,1345],{"class":74},[39,106421,5524],{"class":53},[39,106423,1117],{"class":45},[39,106425,105683],{"class":74},[19,106427,106428,106429,1478,106432,1478,106435,106437],{},"这行是“手动改状态”。在 freejoint 中，",[26,106430,106431],{},"qpos[0]",[26,106433,106434],{},"qpos[1]",[26,106436,106231],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[30,106439,106440],{"className":31353,"code":105518,"language":31355,"meta":35,"style":35},[26,106441,106442],{"__ignoreMap":35},[39,106443,106444],{"class":41,"line":42},[39,106445,105518],{"class":53},[19,106447,106448,106449,106451,106452,106454],{},"手动改完 ",[26,106450,105005],{}," 后，调用 ",[26,106453,105225],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106456,103291],{"id":103290},[19,106458,106459],{},"你会看到:",[328,106461,106462,106467,106472,106475],{},[331,106463,106464,106465],{},"初始时间为 ",[26,106466,1457],{},[331,106468,106469,106470],{},"50 步后时间约为 ",[26,106471,36304],{},[331,106473,106474],{},"reset 后状态恢复",[331,106476,106477,106478,106481,106482],{},"手动修改 ",[26,106479,106480],{},"data.qpos[2]"," 后，小球高度变为 ",[26,106483,106235],{},[19,106485,106486,106488],{},[26,106487,106231],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106490,106491],{},"输出里可以重点看三件事：",[328,106493,106494,106502,106507],{},[331,106495,106496,106498,106499,106501],{},[26,106497,3481],{}," 是否随着 ",[26,106500,102190],{}," 增加。",[331,106503,106504,106506],{},[26,106505,105005],{}," 的 z 坐标是否因为下落而变化。",[331,106508,106509,106511,106512,29360],{},[26,106510,105327],{}," 后时间是否回到 ",[26,106513,1457],{},[14,106515,103323],{"id":103322},[328,106517,106518,106524,106530,106536,106539,106548],{},[331,106519,106520,106521,29360],{},"修改 timestep 为 ",[26,106522,106523],{},"0.005",[331,106525,106526,106527,29360],{},"重新运行，检查 50 步后时间是否约为 ",[26,106528,106529],{},"0.25",[331,106531,106532,106533,29360],{},"修改重力为 ",[26,106534,106535],{},"0 0 -1.0",[331,106537,106538],{},"观察小球下降速度是否变慢。",[331,106540,103386,106541,103389,106544,106547],{},[26,106542,106543],{},"data.qpos[2] = 2.0",[26,106545,106546],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[331,106549,106550,106551,106554],{},"注释掉 ",[26,106552,106553],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106556,103428],{"id":103427},[476,106558,106560,106561,106563],{"id":106559},"修改-dataqpos-后位置没有更新","修改 ",[26,106562,102045],{}," 后位置没有更新",[19,106565,103437],{},[30,106567,106568],{"className":31353,"code":105518,"language":31355,"meta":35,"style":35},[26,106569,106570],{"__ignoreMap":35},[39,106571,106572],{"class":41,"line":42},[39,106573,105518],{"class":53},[476,106575,106576],{"id":106576},"数组维度看不懂",[19,106578,106579],{},"打印模型维度:",[30,106581,106583],{"className":31353,"code":106582,"language":31355,"meta":35,"style":35},"print(model.nq, model.nv, model.nu)\n",[26,106584,106585],{"__ignoreMap":35},[39,106586,106587,106589],{"class":41,"line":42},[39,106588,31390],{"class":74},[39,106590,106591],{"class":53},"(model.nq, model.nv, model.nu)\n",[1404,106593,106594,106602],{},[1407,106595,106596],{},[1410,106597,106598,106600],{},[1413,106599,105549],{"align":24710},[1413,106601,101675],{"align":24710},[1450,106603,106604,106614,106624],{},[1410,106605,106606,106611],{},[1455,106607,106608],{"align":24710},[26,106609,106610],{},"nq",[1455,106612,106613],{"align":24710},"位置变量数量",[1410,106615,106616,106621],{},[1455,106617,106618],{"align":24710},[26,106619,106620],{},"nv",[1455,106622,106623],{"align":24710},"速度变量数量",[1410,106625,106626,106630],{},[1455,106627,106628],{"align":24710},[26,106629,103137],{},[1455,106631,106632],{"align":24710},"控制输入数量",[476,106634,106636,106637,106639],{"id":106635},"误以为-qpos-一定等于关节数","误以为 ",[26,106638,105005],{}," 一定等于关节数",[19,106641,106642,106643,83505,106645,106647,106648,106650],{},"不是。例如 ",[26,106644,102595],{},[26,106646,105005],{}," 是 7 维，但 ",[26,106649,105335],{}," 是 6 维。",[476,106652,106654,106655,106657],{"id":106653},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[26,106656,105005],{}," 的第几位",[19,106659,106660],{},"初学时可以先打印：",[30,106662,106664],{"className":31353,"code":106663,"language":31355,"meta":35,"style":35},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[26,106665,106666,106676,106686,106698],{"__ignoreMap":35},[39,106667,106668,106670,106672,106674],{"class":41,"line":42},[39,106669,31390],{"class":74},[39,106671,54],{"class":53},[39,106673,102414],{"class":237},[39,106675,102417],{"class":53},[39,106677,106678,106680,106682,106684],{"class":41,"line":92},[39,106679,31390],{"class":74},[39,106681,54],{"class":53},[39,106683,102426],{"class":237},[39,106685,102429],{"class":53},[39,106687,106688,106690,106692,106695],{"class":41,"line":112},[39,106689,31390],{"class":74},[39,106691,54],{"class":53},[39,106693,106694],{"class":237},"\"qpos:\"",[39,106696,106697],{"class":53},", data.qpos)\n",[39,106699,106700,106702,106704,106707],{"class":41,"line":118},[39,106701,31390],{"class":74},[39,106703,54],{"class":53},[39,106705,106706],{"class":237},"\"qvel:\"",[39,106708,106709],{"class":53},", data.qvel)\n",[19,106711,106712],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[476,106714,106715],{"id":106715},"仿真结果每次都一样",[19,106717,106718,106719,106721],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[26,106720,105005],{},"、目标点或控制输入。",[14,106723,103582],{"id":103581},[19,106725,106726,106727,25593],{},"Python 控制 MuJoCo 的核心就是读写 ",[26,106728,34376],{},[328,106730,106731,106739,106744,106749],{},[331,106732,106733,106734,101993,106736,106738],{},"用 ",[26,106735,102045],{},[26,106737,102048],{}," 读取状态。",[331,106740,106733,106741,106743],{},[26,106742,102051],{}," 写入控制。",[331,106745,106733,106746,106748],{},[26,106747,102190],{}," 推进时间。",[331,106750,106751,106752,106754],{},"手动改状态后用 ",[26,106753,105225],{}," 刷新派生量。",[19,106756,106757],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1192,106759,106760],{},"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":92,"depth":92,"links":106762},[106763,106764,106765,106772,106776,106777,106778,106788],{"id":101621,"depth":92,"text":101622},{"id":101744,"depth":92,"text":101745},{"id":102019,"depth":92,"text":102020,"children":106766},[106767,106769,106771],{"id":105530,"depth":112,"text":106768},"qpos、qvel、ctrl 是什么",{"id":105608,"depth":112,"text":106770},"mj_step 和 mj_forward 的区别",{"id":105697,"depth":112,"text":105698},{"id":102227,"depth":92,"text":102228,"children":106773},[106774,106775],{"id":102547,"depth":112,"text":102547},{"id":102683,"depth":112,"text":102683},{"id":103290,"depth":92,"text":103291},{"id":103322,"depth":92,"text":103323},{"id":103427,"depth":92,"text":103428,"children":106779},[106780,106782,106783,106785,106787],{"id":106559,"depth":112,"text":106781},"修改 data.qpos 后位置没有更新",{"id":106576,"depth":112,"text":106576},{"id":106635,"depth":112,"text":106784},"误以为 qpos 一定等于关节数",{"id":106653,"depth":112,"text":106786},"不知道某个元素在 qpos 的第几位",{"id":106715,"depth":112,"text":106715},{"id":103581,"depth":92,"text":103582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105293,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106795,"title":106796,"body":106797,"description":35,"extension":1203,"meta":108487,"navigation":121,"path":108488,"seo":108489,"stem":108490,"__hash__":108491},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106798,"toc":108463},[106799,106802,106804,106807,106809,106834,106837,106856,106859,106861,106863,106887,106889,106903,106905,106946,106948,106972,106974,106977,107011,107013,107026,107029,107097,107106,107110,107113,107147,107153,107156,107160,107199,107202,107222,107226,107269,107271,107300,107303,107309,107312,107314,107708,107710,107722,107724,107735,107737,107740,107769,107777,107780,107815,107818,107820,107828,107831,107833,107844,107854,107874,107877,107913,107925,107973,107992,108034,108047,108075,108080,108101,108111,108129,108132,108166,108169,108189,108192,108211,108217,108219,108222,108228,108234,108244,108247,108253,108262,108264,108310,108312,108318,108324,108327,108330,108350,108353,108359,108365,108367,108390,108393,108396,108405,108408,108446,108448,108451,108457,108460],[10,106800,106796],{"id":106801},"_4关节actuator-与力控制",[14,106803,101622],{"id":101621},[19,106805,106806],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106808,105306],{},[328,106810,106811,106817,106822,106826,106831],{},[331,106812,106813,106816],{},[26,106814,106815],{},"hinge"," 关节",[331,106818,106819],{},[26,106820,106821],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[331,106823,106824],{},[26,106825,102051],{},[331,106827,106828],{},[26,106829,106830],{},"ctrlrange",[331,106832,106833],{},"读取关节角和角速度",[19,106835,106836],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[30,106838,106840],{"className":31353,"code":106839,"language":31355,"meta":35,"style":35},"data.ctrl[0] = ...\n",[26,106841,106842],{"__ignoreMap":35},[39,106843,106844,106847,106849,106851,106853],{"class":41,"line":42},[39,106845,106846],{"class":53},"data.ctrl[",[39,106848,1457],{"class":74},[39,106850,5524],{"class":53},[39,106852,1117],{"class":45},[39,106854,106855],{"class":74}," ...\n",[19,106857,106858],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106860,101745],{"id":101744},[19,106862,101748],{},[30,106864,106865],{"className":24796,"code":105363,"language":24798,"meta":35,"style":35},[26,106866,106867],{"__ignoreMap":35},[39,106868,106869,106871,106873,106875,106877,106879,106881,106883,106885],{"class":41,"line":42},[39,106870,25551],{"class":49},[39,106872,27290],{"class":237},[39,106874,24808],{"class":237},[39,106876,27375],{"class":74},[39,106878,105378],{"class":237},[39,106880,101773],{"class":237},[39,106882,103476],{"class":237},[39,106884,101789],{"class":237},[39,106886,105387],{"class":237},[19,106888,103794],{},[30,106890,106891],{"className":24796,"code":101894,"language":24798,"meta":35,"style":35},[26,106892,106893],{"__ignoreMap":35},[39,106894,106895,106897,106899,106901],{"class":41,"line":42},[39,106896,24805],{"class":49},[39,106898,24808],{"class":237},[39,106900,101905],{"class":237},[39,106902,101908],{"class":237},[19,106904,103811],{},[30,106906,106908],{"className":24796,"code":106907,"language":24798,"meta":35,"style":35},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[26,106909,106910,106927,106936],{"__ignoreMap":35},[39,106911,106912,106914,106916,106918,106921,106923,106925],{"class":41,"line":42},[39,106913,31305],{"class":49},[39,106915,30151],{"class":237},[39,106917,26090],{"class":74},[39,106919,106920],{"class":237}," mujoco-control",[39,106922,101950],{"class":237},[39,106924,101953],{"class":74},[39,106926,101956],{"class":74},[39,106928,106929,106931,106933],{"class":41,"line":92},[39,106930,31305],{"class":49},[39,106932,101963],{"class":237},[39,106934,106935],{"class":237}," mujoco-control\n",[39,106937,106938,106940,106942,106944],{"class":41,"line":112},[39,106939,24805],{"class":49},[39,106941,24808],{"class":237},[39,106943,101905],{"class":237},[39,106945,101908],{"class":237},[19,106947,101979],{},[328,106949,106950,106956,106963,106969],{},[331,106951,106952,106955],{},[26,106953,106954],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[331,106957,106958,106960,106961,29360],{},[26,106959,102051],{}," 长度等于 ",[26,106962,103133],{},[331,106964,83197,106965,106968],{},[26,106966,106967],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[331,106970,106971],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106973,102020],{"id":102019},[19,106975,106976],{},"关节决定 body 如何运动:",[30,106978,106980],{"className":54042,"code":106979,"language":54044,"meta":35,"style":35},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[26,106981,106982],{"__ignoreMap":35},[39,106983,106984,106986,106988,106990,106992,106995,106997,106999,107001,107004,107006,107009],{"class":41,"line":42},[39,106985,2170],{"class":53},[39,106987,103931],{"class":52275},[39,106989,15893],{"class":49},[39,106991,1117],{"class":53},[39,106993,106994],{"class":237},"\"hinge\"",[39,106996,54799],{"class":49},[39,106998,1117],{"class":53},[39,107000,106994],{"class":237},[39,107002,107003],{"class":49}," axis",[39,107005,1117],{"class":53},[39,107007,107008],{"class":237},"\"0 1 0\"",[39,107010,102119],{"class":53},[19,107012,104027],{},[328,107014,107015,107020,107023],{},[331,107016,107017,107018],{},"名字是 ",[26,107019,106815],{},[331,107021,107022],{},"类型是旋转关节",[331,107024,107025],{},"绕 y 轴旋转",[19,107027,107028],{},"actuator 决定如何施加控制:",[30,107030,107032],{"className":54042,"code":107031,"language":54044,"meta":35,"style":35},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[26,107033,107034,107043,107089],{"__ignoreMap":35},[39,107035,107036,107038,107041],{"class":41,"line":42},[39,107037,2170],{"class":53},[39,107039,107040],{"class":52275},"actuator",[39,107042,52282],{"class":53},[39,107044,107045,107047,107050,107052,107054,107057,107060,107062,107064,107067,107069,107071,107074,107076,107079,107082,107084,107087],{"class":41,"line":92},[39,107046,53119],{"class":53},[39,107048,107049],{"class":52275},"motor",[39,107051,15893],{"class":49},[39,107053,1117],{"class":53},[39,107055,107056],{"class":237},"\"hinge_motor\"",[39,107058,107059],{"class":49}," joint",[39,107061,1117],{"class":53},[39,107063,106994],{"class":237},[39,107065,107066],{"class":49}," gear",[39,107068,1117],{"class":53},[39,107070,4761],{"class":237},[39,107072,107073],{"class":49}," ctrlrange",[39,107075,1117],{"class":53},[39,107077,107078],{"class":237},"\"-2 2\"",[39,107080,107081],{"class":49}," ctrllimited",[39,107083,1117],{"class":53},[39,107085,107086],{"class":237},"\"true\"",[39,107088,102119],{"class":53},[39,107090,107091,107093,107095],{"class":41,"line":112},[39,107092,52760],{"class":53},[39,107094,107040],{"class":52275},[39,107096,52282],{"class":53},[19,107098,107099,107102,107103,29360],{},[26,107100,107101],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[26,107104,107105],{},"[-2, 2]",[476,107107,107109],{"id":107108},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107111,107112],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1404,107114,107115,107125],{},[1407,107116,107117],{},[1410,107118,107119,107121,107123],{},[1413,107120,26728],{"align":24710},[1413,107122,103671],{"align":24710},[1413,107124,101709],{"align":24710},[1450,107126,107127,107137],{},[1410,107128,107129,107131,107134],{},[1455,107130,103931],{"align":24710},[1455,107132,107133],{"align":24710},"定义能怎么动",[1455,107135,107136],{"align":24710},"门轴允许门旋转",[1410,107138,107139,107141,107144],{},[1455,107140,107040],{"align":24710},[1455,107142,107143],{"align":24710},"定义怎么施力或控制",[1455,107145,107146],{"align":24710},"人推门、马达带动门",[19,107148,107149,107150,107152],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[26,107151,102051],{}," 主动控制它。",[19,107154,107155],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[476,107157,107159],{"id":107158},"hinge-joint","hinge joint",[30,107161,107163],{"className":54042,"code":107162,"language":54044,"meta":35,"style":35},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[26,107164,107165],{"__ignoreMap":35},[39,107166,107167,107169,107171,107173,107175,107177,107179,107181,107183,107185,107187,107189,107192,107194,107197],{"class":41,"line":42},[39,107168,2170],{"class":53},[39,107170,103931],{"class":52275},[39,107172,15893],{"class":49},[39,107174,1117],{"class":53},[39,107176,106994],{"class":237},[39,107178,54799],{"class":49},[39,107180,1117],{"class":53},[39,107182,106994],{"class":237},[39,107184,107003],{"class":49},[39,107186,1117],{"class":53},[39,107188,107008],{"class":237},[39,107190,107191],{"class":49}," damping",[39,107193,1117],{"class":53},[39,107195,107196],{"class":237},"\"0.1\"",[39,107198,102119],{"class":53},[19,107200,107201],{},"含义：",[328,107203,107204,107210,107216],{},[331,107205,107206,107209],{},[26,107207,107208],{},"type=\"hinge\"","：只能绕一个轴旋转。",[331,107211,107212,107215],{},[26,107213,107214],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[331,107217,107218,107221],{},[26,107219,107220],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[476,107223,107225],{"id":107224},"motor-actuator","motor actuator",[30,107227,107229],{"className":54042,"code":107228,"language":54044,"meta":35,"style":35},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[26,107230,107231],{"__ignoreMap":35},[39,107232,107233,107235,107237,107239,107241,107243,107245,107247,107249,107251,107253,107255,107257,107259,107261,107263,107265,107267],{"class":41,"line":42},[39,107234,2170],{"class":53},[39,107236,107049],{"class":52275},[39,107238,15893],{"class":49},[39,107240,1117],{"class":53},[39,107242,107056],{"class":237},[39,107244,107059],{"class":49},[39,107246,1117],{"class":53},[39,107248,106994],{"class":237},[39,107250,107066],{"class":49},[39,107252,1117],{"class":53},[39,107254,4761],{"class":237},[39,107256,107073],{"class":49},[39,107258,1117],{"class":53},[39,107260,107078],{"class":237},[39,107262,107081],{"class":49},[39,107264,1117],{"class":53},[39,107266,107086],{"class":237},[39,107268,102119],{"class":53},[19,107270,107201],{},[328,107272,107273,107282,107288,107294],{},[331,107274,107275,107278,107279,107281],{},[26,107276,107277],{},"joint=\"hinge\"","：这个电机作用在名为 ",[26,107280,106815],{}," 的关节上。",[331,107283,107284,107287],{},[26,107285,107286],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[331,107289,107290,107293],{},[26,107291,107292],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[331,107295,107296,107299],{},[26,107297,107298],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107301,107302],{},"简单理解：",[30,107304,107307],{"className":107305,"code":107306,"language":6267,"meta":35},[6265],"实际施加效果 ≈ data.ctrl[0] * gear\n",[26,107308,107306],{"__ignoreMap":35},[19,107310,107311],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107313,102228],{"id":102227},[30,107315,107317],{"className":31353,"code":107316,"language":31355,"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",[26,107318,107319,107326,107330,107336,107346,107350,107354,107362,107367,107372,107376,107380,107385,107390,107394,107399,107404,107409,107414,107418,107422,107426,107431,107436,107441,107445,107449,107453,107457,107469,107481,107489,107493,107503,107513,107523,107527,107540,107553,107557,107574,107588,107623,107627,107631,107642,107657,107672,107684,107688,107692,107704],{"__ignoreMap":35},[39,107320,107321,107323],{"class":41,"line":42},[39,107322,31367],{"class":45},[39,107324,107325],{"class":53}," math\n",[39,107327,107328],{"class":41,"line":92},[39,107329,122],{"emptyLinePlaceholder":121},[39,107331,107332,107334],{"class":41,"line":112},[39,107333,31367],{"class":45},[39,107335,102276],{"class":53},[39,107337,107338,107340,107342,107344],{"class":41,"line":118},[39,107339,31367],{"class":45},[39,107341,32355],{"class":53},[39,107343,32358],{"class":45},[39,107345,32361],{"class":53},[39,107347,107348],{"class":41,"line":125},[39,107349,122],{"emptyLinePlaceholder":121},[39,107351,107352],{"class":41,"line":132},[39,107353,122],{"emptyLinePlaceholder":121},[39,107355,107356,107358,107360],{"class":41,"line":138},[39,107357,102289],{"class":74},[39,107359,71],{"class":45},[39,107361,102294],{"class":237},[39,107363,107364],{"class":41,"line":169},[39,107365,107366],{"class":237},"\u003Cmujoco model=\"one_link_motor\">\n",[39,107368,107369],{"class":41,"line":190},[39,107370,107371],{"class":237},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[39,107373,107374],{"class":41,"line":202},[39,107375,122],{"emptyLinePlaceholder":121},[39,107377,107378],{"class":41,"line":207},[39,107379,102313],{"class":237},[39,107381,107382],{"class":41,"line":212},[39,107383,107384],{"class":237},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[39,107386,107387],{"class":41,"line":223},[39,107388,107389],{"class":237},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[39,107391,107392],{"class":41,"line":228},[39,107393,122],{"emptyLinePlaceholder":121},[39,107395,107396],{"class":41,"line":263},[39,107397,107398],{"class":237},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[39,107400,107401],{"class":41,"line":287},[39,107402,107403],{"class":237},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[39,107405,107406],{"class":41,"line":292},[39,107407,107408],{"class":237},"        \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",[39,107410,107411],{"class":41,"line":305},[39,107412,107413],{"class":237},"      \u003C\u002Fbody>\n",[39,107415,107416],{"class":41,"line":310},[39,107417,102342],{"class":237},[39,107419,107420],{"class":41,"line":321},[39,107421,102347],{"class":237},[39,107423,107424],{"class":41,"line":713},[39,107425,122],{"emptyLinePlaceholder":121},[39,107427,107428],{"class":41,"line":718},[39,107429,107430],{"class":237},"  \u003Cactuator>\n",[39,107432,107433],{"class":41,"line":723},[39,107434,107435],{"class":237},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[39,107437,107438],{"class":41,"line":729},[39,107439,107440],{"class":237},"  \u003C\u002Factuator>\n",[39,107442,107443],{"class":41,"line":735},[39,107444,102352],{"class":237},[39,107446,107447],{"class":41,"line":741},[39,107448,96673],{"class":237},[39,107450,107451],{"class":41,"line":747},[39,107452,122],{"emptyLinePlaceholder":121},[39,107454,107455],{"class":41,"line":753},[39,107456,122],{"emptyLinePlaceholder":121},[39,107458,107459,107461,107463,107465,107467],{"class":41,"line":758},[39,107460,32922],{"class":45},[39,107462,217],{"class":49},[39,107464,102373],{"class":53},[39,107466,96661],{"class":74},[39,107468,4822],{"class":53},[39,107470,107471,107473,107475,107477,107479],{"class":41,"line":763},[39,107472,102382],{"class":53},[39,107474,1117],{"class":45},[39,107476,102387],{"class":53},[39,107478,102289],{"class":74},[39,107480,574],{"class":53},[39,107482,107483,107485,107487],{"class":41,"line":772},[39,107484,102396],{"class":53},[39,107486,1117],{"class":45},[39,107488,102401],{"class":53},[39,107490,107491],{"class":41,"line":777},[39,107492,122],{"emptyLinePlaceholder":121},[39,107494,107495,107497,107499,107501],{"class":41,"line":785},[39,107496,32274],{"class":74},[39,107498,54],{"class":53},[39,107500,102414],{"class":237},[39,107502,102417],{"class":53},[39,107504,107505,107507,107509,107511],{"class":41,"line":796},[39,107506,32274],{"class":74},[39,107508,54],{"class":53},[39,107510,102426],{"class":237},[39,107512,102429],{"class":53},[39,107514,107515,107517,107519,107521],{"class":41,"line":808},[39,107516,32274],{"class":74},[39,107518,54],{"class":53},[39,107520,102438],{"class":237},[39,107522,102441],{"class":53},[39,107524,107525],{"class":41,"line":823},[39,107526,122],{"emptyLinePlaceholder":121},[39,107528,107529,107531,107534,107536,107538],{"class":41,"line":839},[39,107530,4184],{"class":45},[39,107532,107533],{"class":53}," model.nu ",[39,107535,21921],{"class":45},[39,107537,26093],{"class":74},[39,107539,4822],{"class":53},[39,107541,107542,107544,107546,107548,107551],{"class":41,"line":845},[39,107543,104407],{"class":45},[39,107545,104410],{"class":74},[39,107547,54],{"class":53},[39,107549,107550],{"class":237},"\"expected exactly one actuator\"",[39,107552,574],{"class":53},[39,107554,107555],{"class":41,"line":856},[39,107556,122],{"emptyLinePlaceholder":121},[39,107558,107559,107561,107563,107565,107567,107569,107572],{"class":41,"line":861},[39,107560,4284],{"class":45},[39,107562,32591],{"class":53},[39,107564,27018],{"class":45},[39,107566,33418],{"class":74},[39,107568,54],{"class":53},[39,107570,107571],{"class":74},"2000",[39,107573,31761],{"class":53},[39,107575,107576,107579,107581,107583,107585],{"class":41,"line":870},[39,107577,107578],{"class":53},"        t ",[39,107580,1117],{"class":45},[39,107582,32591],{"class":53},[39,107584,1717],{"class":45},[39,107586,107587],{"class":53}," model.opt.timestep\n",[39,107589,107590,107593,107595,107597,107599,107602,107604,107607,107609,107611,107614,107616,107618,107620],{"class":41,"line":9084},[39,107591,107592],{"class":53},"        data.ctrl[",[39,107594,1457],{"class":74},[39,107596,5524],{"class":53},[39,107598,1117],{"class":45},[39,107600,107601],{"class":74}," 1.5",[39,107603,7594],{"class":45},[39,107605,107606],{"class":53}," math.sin(",[39,107608,106235],{"class":74},[39,107610,7594],{"class":45},[39,107612,107613],{"class":53}," math.pi ",[39,107615,1717],{"class":45},[39,107617,62842],{"class":74},[39,107619,7594],{"class":45},[39,107621,107622],{"class":53}," t)\n",[39,107624,107625],{"class":41,"line":9090},[39,107626,102491],{"class":53},[39,107628,107629],{"class":41,"line":9102},[39,107630,122],{"emptyLinePlaceholder":121},[39,107632,107633,107635,107637,107640],{"class":41,"line":9114},[39,107634,32274],{"class":74},[39,107636,54],{"class":53},[39,107638,107639],{"class":237},"\"time:\"",[39,107641,102453],{"class":53},[39,107643,107644,107646,107648,107651,107653,107655],{"class":41,"line":9126},[39,107645,32274],{"class":74},[39,107647,54],{"class":53},[39,107649,107650],{"class":237},"\"joint qpos:\"",[39,107652,105905],{"class":53},[39,107654,1558],{"class":74},[39,107656,31472],{"class":53},[39,107658,107659,107661,107663,107666,107668,107670],{"class":41,"line":10784},[39,107660,32274],{"class":74},[39,107662,54],{"class":53},[39,107664,107665],{"class":237},"\"joint qvel:\"",[39,107667,105921],{"class":53},[39,107669,1558],{"class":74},[39,107671,31472],{"class":53},[39,107673,107674,107676,107678,107681],{"class":41,"line":10809},[39,107675,32274],{"class":74},[39,107677,54],{"class":53},[39,107679,107680],{"class":237},"\"last ctrl:\"",[39,107682,107683],{"class":53},", data.ctrl.copy())\n",[39,107685,107686],{"class":41,"line":10832},[39,107687,122],{"emptyLinePlaceholder":121},[39,107689,107690],{"class":41,"line":10856},[39,107691,122],{"emptyLinePlaceholder":121},[39,107693,107694,107696,107698,107700,107702],{"class":41,"line":10861},[39,107695,2654],{"class":45},[39,107697,32195],{"class":74},[39,107699,102534],{"class":45},[39,107701,102537],{"class":237},[39,107703,4822],{"class":53},[39,107705,107706],{"class":41,"line":10866},[39,107707,102544],{"class":53},[19,107709,104545],{},[30,107711,107713],{"className":24796,"code":107712,"language":24798,"meta":35,"style":35},"touch ch4_joint_motor.py\n",[26,107714,107715],{"__ignoreMap":35},[39,107716,107717,107719],{"class":41,"line":42},[39,107718,102258],{"class":49},[39,107720,107721],{"class":237}," ch4_joint_motor.py\n",[19,107723,103276],{},[30,107725,107727],{"className":24796,"code":107726,"language":24798,"meta":35,"style":35},"python ch4_joint_motor.py\n",[26,107728,107729],{"__ignoreMap":35},[39,107730,107731,107733],{"class":41,"line":42},[39,107732,31355],{"class":49},[39,107734,107721],{"class":237},[476,107736,102547],{"id":102547},[19,107738,107739],{},"检查 actuator 数量：",[30,107741,107743],{"className":31353,"code":107742,"language":31355,"meta":35,"style":35},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[26,107744,107745,107757],{"__ignoreMap":35},[39,107746,107747,107749,107751,107753,107755],{"class":41,"line":42},[39,107748,2654],{"class":45},[39,107750,107533],{"class":53},[39,107752,21921],{"class":45},[39,107754,26093],{"class":74},[39,107756,4822],{"class":53},[39,107758,107759,107761,107763,107765,107767],{"class":41,"line":92},[39,107760,104870],{"class":45},[39,107762,104410],{"class":74},[39,107764,54],{"class":53},[39,107766,107550],{"class":237},[39,107768,574],{"class":53},[19,107770,107771,107773,107774,107776],{},[26,107772,103133],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[26,107775,102051],{}," 长度应该是 1。",[19,107778,107779],{},"产生正弦控制信号：",[30,107781,107783],{"className":31353,"code":107782,"language":31355,"meta":35,"style":35},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[26,107784,107785],{"__ignoreMap":35},[39,107786,107787,107789,107791,107793,107795,107797,107799,107801,107803,107805,107807,107809,107811,107813],{"class":41,"line":42},[39,107788,106846],{"class":53},[39,107790,1457],{"class":74},[39,107792,5524],{"class":53},[39,107794,1117],{"class":45},[39,107796,107601],{"class":74},[39,107798,7594],{"class":45},[39,107800,107606],{"class":53},[39,107802,106235],{"class":74},[39,107804,7594],{"class":45},[39,107806,107613],{"class":53},[39,107808,1717],{"class":45},[39,107810,62842],{"class":74},[39,107812,7594],{"class":45},[39,107814,107622],{"class":53},[19,107816,107817],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107819,102648],{},[30,107821,107822],{"className":31353,"code":105480,"language":31355,"meta":35,"style":35},[26,107823,107824],{"__ignoreMap":35},[39,107825,107826],{"class":41,"line":42},[39,107827,105480],{"class":53},[19,107829,107830],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[476,107832,102683],{"id":102683},[30,107834,107836],{"className":31353,"code":107835,"language":31355,"meta":35,"style":35},"import math\n",[26,107837,107838],{"__ignoreMap":35},[39,107839,107840,107842],{"class":41,"line":42},[39,107841,31367],{"class":45},[39,107843,107325],{"class":53},[19,107845,107846,107847,101993,107850,107853],{},"导入 Python 标准库里的数学模块。后面要用 ",[26,107848,107849],{},"math.sin",[26,107851,107852],{},"math.pi"," 生成周期变化的控制信号。",[30,107855,107856],{"className":31353,"code":104661,"language":31355,"meta":35,"style":35},[26,107857,107858,107864],{"__ignoreMap":35},[39,107859,107860,107862],{"class":41,"line":42},[39,107861,31367],{"class":45},[39,107863,102276],{"class":53},[39,107865,107866,107868,107870,107872],{"class":41,"line":92},[39,107867,31367],{"class":45},[39,107869,32355],{"class":53},[39,107871,32358],{"class":45},[39,107873,32361],{"class":53},[19,107875,107876],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[30,107878,107879],{"className":54042,"code":107162,"language":54044,"meta":35,"style":35},[26,107880,107881],{"__ignoreMap":35},[39,107882,107883,107885,107887,107889,107891,107893,107895,107897,107899,107901,107903,107905,107907,107909,107911],{"class":41,"line":42},[39,107884,2170],{"class":53},[39,107886,103931],{"class":52275},[39,107888,15893],{"class":49},[39,107890,1117],{"class":53},[39,107892,106994],{"class":237},[39,107894,54799],{"class":49},[39,107896,1117],{"class":53},[39,107898,106994],{"class":237},[39,107900,107003],{"class":49},[39,107902,1117],{"class":53},[39,107904,107008],{"class":237},[39,107906,107191],{"class":49},[39,107908,1117],{"class":53},[39,107910,107196],{"class":237},[39,107912,102119],{"class":53},[19,107914,107915,107916,107918,107919,107921,107922,107924],{},"这行定义关节。",[26,107917,106815],{}," 表示旋转关节。",[26,107920,107214],{}," 表示绕 y 轴旋转。",[26,107923,107220],{}," 表示有一点阻尼，运动不会完全无损耗。",[30,107926,107928],{"className":54042,"code":107927,"language":54044,"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",[26,107929,107930],{"__ignoreMap":35},[39,107931,107932,107934,107936,107938,107940,107943,107945,107947,107950,107953,107955,107958,107960,107962,107964,107966,107968,107971],{"class":41,"line":42},[39,107933,2170],{"class":53},[39,107935,102095],{"class":52275},[39,107937,15893],{"class":49},[39,107939,1117],{"class":53},[39,107941,107942],{"class":237},"\"link_geom\"",[39,107944,54799],{"class":49},[39,107946,1117],{"class":53},[39,107948,107949],{"class":237},"\"capsule\"",[39,107951,107952],{"class":49}," fromto",[39,107954,1117],{"class":53},[39,107956,107957],{"class":237},"\"0 0 0 0 0 0.5\"",[39,107959,102111],{"class":49},[39,107961,1117],{"class":53},[39,107963,104753],{"class":237},[39,107965,102976],{"class":49},[39,107967,1117],{"class":53},[39,107969,107970],{"class":237},"\"0.5\"",[39,107972,102119],{"class":53},[19,107974,107975,107976,107978,107979,107981,107982,107985,107986,29360,107989,107991],{},"这行定义摆杆的形状。",[26,107977,104140],{}," 是胶囊体，适合表示杆子。",[26,107980,104151],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[26,107983,107984],{},"(0,0,0)"," 延伸到 ",[26,107987,107988],{},"(0,0,0.5)",[26,107990,104145],{}," 是半径。",[30,107993,107994],{"className":54042,"code":107228,"language":54044,"meta":35,"style":35},[26,107995,107996],{"__ignoreMap":35},[39,107997,107998,108000,108002,108004,108006,108008,108010,108012,108014,108016,108018,108020,108022,108024,108026,108028,108030,108032],{"class":41,"line":42},[39,107999,2170],{"class":53},[39,108001,107049],{"class":52275},[39,108003,15893],{"class":49},[39,108005,1117],{"class":53},[39,108007,107056],{"class":237},[39,108009,107059],{"class":49},[39,108011,1117],{"class":53},[39,108013,106994],{"class":237},[39,108015,107066],{"class":49},[39,108017,1117],{"class":53},[39,108019,4761],{"class":237},[39,108021,107073],{"class":49},[39,108023,1117],{"class":53},[39,108025,107078],{"class":237},[39,108027,107081],{"class":49},[39,108029,1117],{"class":53},[39,108031,107086],{"class":237},[39,108033,102119],{"class":53},[19,108035,108036,108037,108039,108040,108043,108044,108046],{},"这行定义电机。它作用在 ",[26,108038,106815],{}," 关节上。",[26,108041,108042],{},"gear"," 可以理解成放大倍数。",[26,108045,106830],{}," 限制控制输入范围。",[30,108048,108049],{"className":31353,"code":107742,"language":31355,"meta":35,"style":35},[26,108050,108051,108063],{"__ignoreMap":35},[39,108052,108053,108055,108057,108059,108061],{"class":41,"line":42},[39,108054,2654],{"class":45},[39,108056,107533],{"class":53},[39,108058,21921],{"class":45},[39,108060,26093],{"class":74},[39,108062,4822],{"class":53},[39,108064,108065,108067,108069,108071,108073],{"class":41,"line":92},[39,108066,104870],{"class":45},[39,108068,104410],{"class":74},[39,108070,54],{"class":53},[39,108072,107550],{"class":237},[39,108074,574],{"class":53},[19,108076,108077,108079],{},[26,108078,103133],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[30,108081,108083],{"className":31353,"code":108082,"language":31355,"meta":35,"style":35},"for step in range(2000):\n",[26,108084,108085],{"__ignoreMap":35},[39,108086,108087,108089,108091,108093,108095,108097,108099],{"class":41,"line":42},[39,108088,4108],{"class":45},[39,108090,32591],{"class":53},[39,108092,27018],{"class":45},[39,108094,33418],{"class":74},[39,108096,54],{"class":53},[39,108098,107571],{"class":74},[39,108100,31761],{"class":53},[19,108102,108103,108104,108106,108107,108110],{},"循环 2000 步。这里没有用 ",[26,108105,2252],{},"，而是用 ",[26,108108,108109],{},"step","，因为后面要用当前步数计算时间。",[30,108112,108114],{"className":31353,"code":108113,"language":31355,"meta":35,"style":35},"t = step * model.opt.timestep\n",[26,108115,108116],{"__ignoreMap":35},[39,108117,108118,108121,108123,108125,108127],{"class":41,"line":42},[39,108119,108120],{"class":53},"t ",[39,108122,1117],{"class":45},[39,108124,32591],{"class":53},[39,108126,1717],{"class":45},[39,108128,107587],{"class":53},[19,108130,108131],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[30,108133,108134],{"className":31353,"code":107782,"language":31355,"meta":35,"style":35},[26,108135,108136],{"__ignoreMap":35},[39,108137,108138,108140,108142,108144,108146,108148,108150,108152,108154,108156,108158,108160,108162,108164],{"class":41,"line":42},[39,108139,106846],{"class":53},[39,108141,1457],{"class":74},[39,108143,5524],{"class":53},[39,108145,1117],{"class":45},[39,108147,107601],{"class":74},[39,108149,7594],{"class":45},[39,108151,107606],{"class":53},[39,108153,106235],{"class":74},[39,108155,7594],{"class":45},[39,108157,107613],{"class":53},[39,108159,1717],{"class":45},[39,108161,62842],{"class":74},[39,108163,7594],{"class":45},[39,108165,107622],{"class":53},[19,108167,108168],{},"这行给电机输入一个正弦波。拆开看：",[328,108170,108171,108177,108183],{},[331,108172,108173,108176],{},[26,108174,108175],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[331,108178,108179,108182],{},[26,108180,108181],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[331,108184,108185,108188],{},[26,108186,108187],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108190,108191],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[30,108193,108195],{"className":31353,"code":108194,"language":31355,"meta":35,"style":35},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[26,108196,108197],{"__ignoreMap":35},[39,108198,108199,108201,108203,108205,108207,108209],{"class":41,"line":42},[39,108200,31390],{"class":74},[39,108202,54],{"class":53},[39,108204,107650],{"class":237},[39,108206,105905],{"class":53},[39,108208,1558],{"class":74},[39,108210,31472],{"class":53},[19,108212,108213,108214,108216],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[26,108215,102045],{}," 只有一个数。",[14,108218,103291],{"id":103290},[19,108220,108221],{},"输出类似:",[30,108223,108226],{"className":108224,"code":108225,"language":6267,"meta":35},[6265],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[26,108227,108225],{"__ignoreMap":35},[19,108229,108230,108231,108233],{},"这里 ",[26,108232,107101],{}," 是电机输入。",[19,108235,108236,108239,108240,108243],{},[26,108237,108238],{},"joint qpos"," 是关节角度，单位通常是弧度。",[26,108241,108242],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108245,108246],{},"角度单位提示：",[30,108248,108251],{"className":108249,"code":108250,"language":6267,"meta":35},[6265],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[26,108252,108250],{"__ignoreMap":35},[19,108254,108255,108256,108258,108259,108261],{},"如果你看到 ",[26,108257,105005],{}," 是 ",[26,108260,36304],{},"，大约就是 28.6 度。",[14,108263,103323],{"id":103322},[328,108265,108266,108273,108276,108283,108286,108294,108302],{},[331,108267,103386,108268,103389,108270,29360],{},[26,108269,107286],{},[26,108271,108272],{},"gear=\"5\"",[331,108274,108275],{},"重新运行，观察关节运动是否更剧烈。",[331,108277,103386,108278,103389,108280,29360],{},[26,108279,106830],{},[26,108281,108282],{},"-0.2 0.2",[331,108284,108285],{},"重新运行，观察控制能力是否变弱。",[331,108287,108288,108289,108291,108292,29360],{},"去掉 actuator，确认 ",[26,108290,103133],{}," 变成 ",[26,108293,1457],{},[331,108295,103386,108296,103389,108298,108301],{},[26,108297,107220],{},[26,108299,108300],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[331,108303,103386,108304,103389,108306,108309],{},[26,108305,107214],{},[26,108307,108308],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108311,103428],{"id":103427},[476,108313,108315],{"id":108314},"indexerror-index-0-is-out-of-bounds",[26,108316,108317],{},"IndexError: index 0 is out of bounds",[19,108319,108320,108321,108323],{},"原因是 ",[26,108322,106967],{},"，没有 actuator。",[476,108325,108326],{"id":108326},"关节几乎不动",[19,108328,108329],{},"可能原因:",[328,108331,108332,108337,108341,108347],{},[331,108333,108334,108336],{},[26,108335,108042],{}," 太小",[331,108338,108339,108336],{},[26,108340,106830],{},[331,108342,108343,108346],{},[26,108344,108345],{},"damping"," 太大",[331,108348,108349],{},"重力方向导致运动不明显",[476,108351,108352],{"id":108352},"模型编译失败",[19,108354,108355,108356,108358],{},"检查 actuator 引用的 ",[26,108357,107277],{}," 是否存在，joint 名称是否拼写一致。",[476,108360,108362,108364],{"id":108361},"datactrl0-写了但没有效果",[26,108363,107101],{}," 写了但没有效果",[19,108366,103550],{},[328,108368,108369,108374,108377,108382,108387],{},[331,108370,108371,108373],{},[26,108372,103133],{}," 是否大于 0。",[331,108375,108376],{},"motor 是否引用了正确 joint。",[331,108378,108379,108381],{},[26,108380,108042],{}," 是否太小。",[331,108383,108384,108386],{},[26,108385,106830],{}," 是否把输入限制得太小。",[331,108388,108389],{},"body 是否真的有可动 joint。",[476,108391,108392],{"id":108392},"控制输入超过范围会怎样",[19,108394,108395],{},"如果设置了：",[30,108397,108399],{"className":54042,"code":108398,"language":54044,"meta":35,"style":35},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[26,108400,108401],{"__ignoreMap":35},[39,108402,108403],{"class":41,"line":42},[39,108404,108398],{"class":53},[19,108406,108407],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[30,108409,108411],{"className":31353,"code":108410,"language":31355,"meta":35,"style":35},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[26,108412,108413,108433],{"__ignoreMap":35},[39,108414,108415,108418,108420,108423,108425,108427,108429,108431],{"class":41,"line":42},[39,108416,108417],{"class":53},"action ",[39,108419,1117],{"class":45},[39,108421,108422],{"class":53}," np.clip(action, ",[39,108424,1793],{"class":45},[39,108426,106235],{"class":74},[39,108428,63],{"class":53},[39,108430,106235],{"class":74},[39,108432,574],{"class":53},[39,108434,108435,108437,108439,108441,108443],{"class":41,"line":92},[39,108436,106846],{"class":53},[39,108438,1457],{"class":74},[39,108440,5524],{"class":53},[39,108442,1117],{"class":45},[39,108444,108445],{"class":53}," action\n",[14,108447,103582],{"id":103581},[19,108449,108450],{},"这一章建立了控制任务的基本形式：",[30,108452,108455],{"className":108453,"code":108454,"language":6267,"meta":35},[6265],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[26,108456,108454],{"__ignoreMap":35},[19,108458,108459],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1192,108461,108462],{},"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":92,"depth":92,"links":108464},[108465,108466,108467,108472,108476,108477,108478,108486],{"id":101621,"depth":92,"text":101622},{"id":101744,"depth":92,"text":101745},{"id":102019,"depth":92,"text":102020,"children":108468},[108469,108470,108471],{"id":107108,"depth":112,"text":107109},{"id":107158,"depth":112,"text":107159},{"id":107224,"depth":112,"text":107225},{"id":102227,"depth":92,"text":102228,"children":108473},[108474,108475],{"id":102547,"depth":112,"text":102547},{"id":102683,"depth":112,"text":102683},{"id":103290,"depth":92,"text":103291},{"id":103322,"depth":92,"text":103323},{"id":103427,"depth":92,"text":103428,"children":108479},[108480,108481,108482,108483,108485],{"id":108314,"depth":112,"text":108317},{"id":108326,"depth":112,"text":108326},{"id":108352,"depth":112,"text":108352},{"id":108361,"depth":112,"text":108484},"data.ctrl[0] 写了但没有效果",{"id":108392,"depth":112,"text":108392},{"id":103581,"depth":92,"text":103582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106796,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108493,"title":108494,"body":108495,"description":35,"extension":1203,"meta":110404,"navigation":121,"path":110405,"seo":110406,"stem":110407,"__hash__":110408},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108496,"toc":110380},[108497,108500,108502,108505,108513,108516,108533,108536,108561,108564,108610,108612,108614,108669,108671,108690,108692,108735,108738,108755,108758,108774,108784,108791,108793,108796,108799,108833,108836,108884,108888,108891,108905,108914,108918,108921,108946,108949,108953,108966,108969,108975,108978,108993,108995,108998,109258,109260,109272,109275,109587,109589,109601,109603,109606,109621,109626,109629,109651,109654,109657,109691,109694,109698,109709,109712,109729,109732,109746,109753,109773,109780,109794,109797,109809,109824,109844,109847,109869,109872,109876,109891,109902,109917,109920,109950,109966,109995,110003,110027,110030,110048,110058,110070,110077,110086,110092,110101,110104,110106,110115,110118,110133,110135,110138,110149,110152,110163,110166,110184,110186,110203,110206,110234,110236,110240,110243,110273,110279,110282,110286,110294,110297,110299,110320,110323,110326,110342,110345,110361,110363,110366,110377],[10,108498,108494],{"id":108499},"_5viewer-可视化与-renderer-离屏渲染",[14,108501,101622],{"id":101621},[19,108503,108504],{},"本章掌握两类可视化方式:",[328,108506,108507,108510],{},[331,108508,108509],{},"交互式 viewer: 适合人工观察仿真",[331,108511,108512],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108514,108515],{},"使用官方接口:",[30,108517,108519],{"className":31353,"code":108518,"language":31355,"meta":35,"style":35},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[26,108520,108521,108528],{"__ignoreMap":35},[39,108522,108523,108525],{"class":41,"line":42},[39,108524,31367],{"class":45},[39,108526,108527],{"class":53}," mujoco.viewer\n",[39,108529,108530],{"class":41,"line":92},[39,108531,108532],{"class":53},"mujoco.viewer.launch_passive(model, data)\n",[19,108534,108535],{},"以及:",[30,108537,108539],{"className":31353,"code":108538,"language":31355,"meta":35,"style":35},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[26,108540,108541,108551],{"__ignoreMap":35},[39,108542,108543,108546,108548],{"class":41,"line":42},[39,108544,108545],{"class":53},"renderer ",[39,108547,1117],{"class":45},[39,108549,108550],{"class":53}," mujoco.Renderer(model)\n",[39,108552,108553,108556,108558],{"class":41,"line":92},[39,108554,108555],{"class":53},"image ",[39,108557,1117],{"class":45},[39,108559,108560],{"class":53}," renderer.render()\n",[19,108562,108563],{},"新手建议先理解二者区别：",[1404,108565,108566,108582],{},[1407,108567,108568],{},[1410,108569,108570,108573,108576,108579],{},[1413,108571,108572],{"align":24710},"工具",[1413,108574,108575],{"align":24710},"用途",[1413,108577,108578],{"align":24710},"是否打开窗口",[1413,108580,108581],{"align":24710},"常见场景",[1450,108583,108584,108597],{},[1410,108585,108586,108589,108592,108594],{},[1455,108587,108588],{"align":24710},"Viewer",[1455,108590,108591],{"align":24710},"人眼实时观察仿真",[1455,108593,105640],{"align":24710},[1455,108595,108596],{"align":24710},"调试模型、看控制效果",[1410,108598,108599,108602,108605,108607],{},[1455,108600,108601],{"align":24710},"Renderer",[1455,108603,108604],{"align":24710},"生成图像数组",[1455,108606,105653],{"align":24710},[1455,108608,108609],{"align":24710},"保存图片、训练视觉策略、服务器批量采集",[14,108611,101745],{"id":101744},[19,108613,101748],{},[30,108615,108617],{"className":24796,"code":108616,"language":24798,"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",[26,108618,108619,108631,108641,108649,108657],{"__ignoreMap":35},[39,108620,108621,108623,108625,108627,108629],{"class":41,"line":42},[39,108622,25551],{"class":49},[39,108624,27290],{"class":237},[39,108626,24808],{"class":237},[39,108628,27375],{"class":74},[39,108630,25653],{"class":74},[39,108632,108633,108635,108637,108639],{"class":41,"line":92},[39,108634,101783],{"class":237},[39,108636,101786],{"class":237},[39,108638,101789],{"class":237},[39,108640,25653],{"class":74},[39,108642,108643,108645,108647],{"class":41,"line":112},[39,108644,101796],{"class":237},[39,108646,101799],{"class":237},[39,108648,25653],{"class":74},[39,108650,108651,108653,108655],{"class":41,"line":118},[39,108652,101806],{"class":237},[39,108654,101809],{"class":237},[39,108656,25653],{"class":74},[39,108658,108659,108661,108663,108665,108667],{"class":41,"line":125},[39,108660,101816],{"class":237},[39,108662,101819],{"class":237},[39,108664,101822],{"class":237},[39,108666,101825],{"class":237},[39,108668,103491],{"class":237},[19,108670,103794],{},[30,108672,108674],{"className":24796,"code":108673,"language":24798,"meta":35,"style":35},"pip install \"mujoco>=2.3\" numpy pillow\n",[26,108675,108676],{"__ignoreMap":35},[39,108677,108678,108680,108682,108684,108687],{"class":41,"line":42},[39,108679,24805],{"class":49},[39,108681,24808],{"class":237},[39,108683,101905],{"class":237},[39,108685,108686],{"class":237}," numpy",[39,108688,108689],{"class":237}," pillow\n",[19,108691,103811],{},[30,108693,108695],{"className":24796,"code":108694,"language":24798,"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",[26,108696,108697,108714,108723],{"__ignoreMap":35},[39,108698,108699,108701,108703,108705,108708,108710,108712],{"class":41,"line":42},[39,108700,31305],{"class":49},[39,108702,30151],{"class":237},[39,108704,26090],{"class":74},[39,108706,108707],{"class":237}," mujoco-render",[39,108709,101950],{"class":237},[39,108711,101953],{"class":74},[39,108713,101956],{"class":74},[39,108715,108716,108718,108720],{"class":41,"line":92},[39,108717,31305],{"class":49},[39,108719,101963],{"class":237},[39,108721,108722],{"class":237}," mujoco-render\n",[39,108724,108725,108727,108729,108731,108733],{"class":41,"line":112},[39,108726,24805],{"class":49},[39,108728,24808],{"class":237},[39,108730,101905],{"class":237},[39,108732,108686],{"class":237},[39,108734,108689],{"class":237},[19,108736,108737],{},"离屏渲染后端:",[30,108739,108741],{"className":24796,"code":108740,"language":24798,"meta":35,"style":35},"export MUJOCO_GL=egl\n",[26,108742,108743],{"__ignoreMap":35},[39,108744,108745,108747,108750,108752],{"class":41,"line":42},[39,108746,26017],{"class":45},[39,108748,108749],{"class":53}," MUJOCO_GL",[39,108751,1117],{"class":45},[39,108753,108754],{"class":53},"egl\n",[19,108756,108757],{},"或:",[30,108759,108761],{"className":24796,"code":108760,"language":24798,"meta":35,"style":35},"export MUJOCO_GL=osmesa\n",[26,108762,108763],{"__ignoreMap":35},[39,108764,108765,108767,108769,108771],{"class":41,"line":42},[39,108766,26017],{"class":45},[39,108768,108749],{"class":53},[39,108770,1117],{"class":45},[39,108772,108773],{"class":53},"osmesa\n",[19,108775,108776,108777,108780,108781,29360],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[26,108778,108779],{},"egl"," 失败，再尝试 ",[26,108782,108783],{},"osmesa",[19,108785,108786,108787,108790],{},"如果你在本机桌面环境运行，通常先不要设置 ",[26,108788,108789],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108792,102020],{"id":102019},[19,108794,108795],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108797,108798],{},"典型 viewer 流程:",[30,108800,108802],{"className":31353,"code":108801,"language":31355,"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",[26,108803,108804,108817,108824,108828],{"__ignoreMap":35},[39,108805,108806,108809,108812,108814],{"class":41,"line":42},[39,108807,108808],{"class":45},"with",[39,108810,108811],{"class":53}," mujoco.viewer.launch_passive(model, data) ",[39,108813,32358],{"class":45},[39,108815,108816],{"class":53}," viewer:\n",[39,108818,108819,108821],{"class":41,"line":92},[39,108820,3348],{"class":45},[39,108822,108823],{"class":53}," viewer.is_running():\n",[39,108825,108826],{"class":41,"line":112},[39,108827,102491],{"class":53},[39,108829,108830],{"class":41,"line":118},[39,108831,108832],{"class":53},"        viewer.sync()\n",[19,108834,108835],{},"典型 renderer 流程:",[30,108837,108839],{"className":31353,"code":108838,"language":31355,"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",[26,108840,108841,108867,108871,108876],{"__ignoreMap":35},[39,108842,108843,108845,108847,108850,108852,108854,108856,108858,108860,108862,108865],{"class":41,"line":42},[39,108844,108545],{"class":53},[39,108846,1117],{"class":45},[39,108848,108849],{"class":53}," mujoco.Renderer(model, ",[39,108851,25956],{"class":59},[39,108853,1117],{"class":45},[39,108855,43317],{"class":74},[39,108857,63],{"class":53},[39,108859,25952],{"class":59},[39,108861,1117],{"class":45},[39,108863,108864],{"class":74},"640",[39,108866,574],{"class":53},[39,108868,108869],{"class":41,"line":92},[39,108870,105480],{"class":53},[39,108872,108873],{"class":41,"line":112},[39,108874,108875],{"class":53},"renderer.update_scene(data)\n",[39,108877,108878,108880,108882],{"class":41,"line":118},[39,108879,108555],{"class":53},[39,108881,1117],{"class":45},[39,108883,108560],{"class":53},[476,108885,108887],{"id":108886},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108889,108890],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[30,108892,108894],{"className":31353,"code":108893,"language":31355,"meta":35,"style":35},"mujoco.mj_step(model, data)\nviewer.sync()\n",[26,108895,108896,108900],{"__ignoreMap":35},[39,108897,108898],{"class":41,"line":42},[39,108899,105480],{"class":53},[39,108901,108902],{"class":41,"line":92},[39,108903,108904],{"class":53},"viewer.sync()\n",[19,108906,108907,108909,108910,108913],{},[26,108908,102190],{}," 负责算物理，",[26,108911,108912],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[476,108915,108917],{"id":108916},"为什么要-sleep","为什么要 sleep",[19,108919,108920],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[30,108922,108924],{"className":31353,"code":108923,"language":31355,"meta":35,"style":35},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[26,108925,108926],{"__ignoreMap":35},[39,108927,108928,108931,108933,108936,108938,108941,108943],{"class":41,"line":42},[39,108929,108930],{"class":53},"sleep_time ",[39,108932,1117],{"class":45},[39,108934,108935],{"class":53}," model.opt.timestep ",[39,108937,1793],{"class":45},[39,108939,108940],{"class":53}," (time.time() ",[39,108942,1793],{"class":45},[39,108944,108945],{"class":53}," step_start)\n",[19,108947,108948],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[476,108950,108952],{"id":108951},"renderer-输出是什么","renderer 输出是什么",[30,108954,108956],{"className":31353,"code":108955,"language":31355,"meta":35,"style":35},"image = renderer.render()\n",[26,108957,108958],{"__ignoreMap":35},[39,108959,108960,108962,108964],{"class":41,"line":42},[39,108961,108555],{"class":53},[39,108963,1117],{"class":45},[39,108965,108560],{"class":53},[19,108967,108968],{},"得到的是 NumPy 数组，形状通常是：",[30,108970,108973],{"className":108971,"code":108972,"language":6267,"meta":35},[6265],"(height, width, 3)\n",[26,108974,108972],{"__ignoreMap":35},[19,108976,108977],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[30,108979,108981],{"className":31353,"code":108980,"language":31355,"meta":35,"style":35},"Image.fromarray(image).save(\"render_output.png\")\n",[26,108982,108983],{"__ignoreMap":35},[39,108984,108985,108988,108991],{"class":41,"line":42},[39,108986,108987],{"class":53},"Image.fromarray(image).save(",[39,108989,108990],{"class":237},"\"render_output.png\"",[39,108992,574],{"class":53},[14,108994,102228],{"id":102227},[19,108996,108997],{},"交互式 Viewer:",[30,108999,109001],{"className":31353,"code":109000,"language":31355,"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",[26,109002,109003,109009,109013,109019,109025,109029,109033,109041,109046,109050,109054,109058,109063,109068,109072,109076,109080,109085,109089,109093,109097,109101,109105,109109,109121,109133,109141,109145,109155,109175,109185,109190,109195,109199,109216,109229,109234,109238,109242,109254],{"__ignoreMap":35},[39,109004,109005,109007],{"class":41,"line":42},[39,109006,31367],{"class":45},[39,109008,32804],{"class":53},[39,109010,109011],{"class":41,"line":92},[39,109012,122],{"emptyLinePlaceholder":121},[39,109014,109015,109017],{"class":41,"line":112},[39,109016,31367],{"class":45},[39,109018,102276],{"class":53},[39,109020,109021,109023],{"class":41,"line":118},[39,109022,31367],{"class":45},[39,109024,108527],{"class":53},[39,109026,109027],{"class":41,"line":125},[39,109028,122],{"emptyLinePlaceholder":121},[39,109030,109031],{"class":41,"line":132},[39,109032,122],{"emptyLinePlaceholder":121},[39,109034,109035,109037,109039],{"class":41,"line":138},[39,109036,102289],{"class":74},[39,109038,71],{"class":45},[39,109040,102294],{"class":237},[39,109042,109043],{"class":41,"line":169},[39,109044,109045],{"class":237},"\u003Cmujoco model=\"viewer_demo\">\n",[39,109047,109048],{"class":41,"line":190},[39,109049,102304],{"class":237},[39,109051,109052],{"class":41,"line":202},[39,109053,122],{"emptyLinePlaceholder":121},[39,109055,109056],{"class":41,"line":207},[39,109057,102313],{"class":237},[39,109059,109060],{"class":41,"line":212},[39,109061,109062],{"class":237},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[39,109064,109065],{"class":41,"line":223},[39,109066,109067],{"class":237},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[39,109069,109070],{"class":41,"line":228},[39,109071,122],{"emptyLinePlaceholder":121},[39,109073,109074],{"class":41,"line":263},[39,109075,102327],{"class":237},[39,109077,109078],{"class":41,"line":287},[39,109079,102332],{"class":237},[39,109081,109082],{"class":41,"line":292},[39,109083,109084],{"class":237},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[39,109086,109087],{"class":41,"line":305},[39,109088,102342],{"class":237},[39,109090,109091],{"class":41,"line":310},[39,109092,102347],{"class":237},[39,109094,109095],{"class":41,"line":321},[39,109096,102352],{"class":237},[39,109098,109099],{"class":41,"line":713},[39,109100,96673],{"class":237},[39,109102,109103],{"class":41,"line":718},[39,109104,122],{"emptyLinePlaceholder":121},[39,109106,109107],{"class":41,"line":723},[39,109108,122],{"emptyLinePlaceholder":121},[39,109110,109111,109113,109115,109117,109119],{"class":41,"line":729},[39,109112,32922],{"class":45},[39,109114,217],{"class":49},[39,109116,102373],{"class":53},[39,109118,96661],{"class":74},[39,109120,4822],{"class":53},[39,109122,109123,109125,109127,109129,109131],{"class":41,"line":735},[39,109124,102382],{"class":53},[39,109126,1117],{"class":45},[39,109128,102387],{"class":53},[39,109130,102289],{"class":74},[39,109132,574],{"class":53},[39,109134,109135,109137,109139],{"class":41,"line":741},[39,109136,102396],{"class":53},[39,109138,1117],{"class":45},[39,109140,102401],{"class":53},[39,109142,109143],{"class":41,"line":747},[39,109144,122],{"emptyLinePlaceholder":121},[39,109146,109147,109149,109151,109153],{"class":41,"line":753},[39,109148,35153],{"class":45},[39,109150,108811],{"class":53},[39,109152,32358],{"class":45},[39,109154,108816],{"class":53},[39,109156,109157,109160,109163,109165,109168,109170,109173],{"class":41,"line":758},[39,109158,109159],{"class":45},"        while",[39,109161,109162],{"class":53}," viewer.is_running() ",[39,109164,31437],{"class":45},[39,109166,109167],{"class":53}," data.time ",[39,109169,2170],{"class":45},[39,109171,109172],{"class":74}," 5.0",[39,109174,4822],{"class":53},[39,109176,109177,109180,109182],{"class":41,"line":763},[39,109178,109179],{"class":53},"            step_start ",[39,109181,1117],{"class":45},[39,109183,109184],{"class":53}," time.time()\n",[39,109186,109187],{"class":41,"line":772},[39,109188,109189],{"class":53},"            mujoco.mj_step(model, data)\n",[39,109191,109192],{"class":41,"line":777},[39,109193,109194],{"class":53},"            viewer.sync()\n",[39,109196,109197],{"class":41,"line":785},[39,109198,122],{"emptyLinePlaceholder":121},[39,109200,109201,109204,109206,109208,109210,109212,109214],{"class":41,"line":796},[39,109202,109203],{"class":53},"            sleep_time ",[39,109205,1117],{"class":45},[39,109207,108935],{"class":53},[39,109209,1793],{"class":45},[39,109211,108940],{"class":53},[39,109213,1793],{"class":45},[39,109215,108945],{"class":53},[39,109217,109218,109220,109223,109225,109227],{"class":41,"line":808},[39,109219,5723],{"class":45},[39,109221,109222],{"class":53}," sleep_time ",[39,109224,2220],{"class":45},[39,109226,315],{"class":74},[39,109228,4822],{"class":53},[39,109230,109231],{"class":41,"line":823},[39,109232,109233],{"class":53},"                time.sleep(sleep_time)\n",[39,109235,109236],{"class":41,"line":839},[39,109237,122],{"emptyLinePlaceholder":121},[39,109239,109240],{"class":41,"line":845},[39,109241,122],{"emptyLinePlaceholder":121},[39,109243,109244,109246,109248,109250,109252],{"class":41,"line":856},[39,109245,2654],{"class":45},[39,109247,32195],{"class":74},[39,109249,102534],{"class":45},[39,109251,102537],{"class":237},[39,109253,4822],{"class":53},[39,109255,109256],{"class":41,"line":861},[39,109257,102544],{"class":53},[19,109259,104545],{},[30,109261,109263],{"className":24796,"code":109262,"language":24798,"meta":35,"style":35},"touch ch5_viewer.py\n",[26,109264,109265],{"__ignoreMap":35},[39,109266,109267,109269],{"class":41,"line":42},[39,109268,102258],{"class":49},[39,109270,109271],{"class":237}," ch5_viewer.py\n",[19,109273,109274],{},"离屏 Renderer 保存图片:",[30,109276,109278],{"className":31353,"code":109277,"language":31355,"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",[26,109279,109280,109292,109296,109302,109312,109316,109320,109328,109333,109337,109341,109345,109349,109354,109358,109362,109366,109370,109374,109378,109382,109386,109390,109394,109398,109410,109422,109430,109455,109459,109475,109479,109483,109498,109507,109511,109525,109530,109535,109539,109551,109563,109567,109571,109583],{"__ignoreMap":35},[39,109281,109282,109284,109287,109289],{"class":41,"line":42},[39,109283,31712],{"class":45},[39,109285,109286],{"class":53}," pathlib ",[39,109288,31367],{"class":45},[39,109290,109291],{"class":53}," Path\n",[39,109293,109294],{"class":41,"line":92},[39,109295,122],{"emptyLinePlaceholder":121},[39,109297,109298,109300],{"class":41,"line":112},[39,109299,31367],{"class":45},[39,109301,102276],{"class":53},[39,109303,109304,109306,109308,109310],{"class":41,"line":118},[39,109305,31712],{"class":45},[39,109307,48238],{"class":74},[39,109309,48241],{"class":45},[39,109311,48244],{"class":53},[39,109313,109314],{"class":41,"line":125},[39,109315,122],{"emptyLinePlaceholder":121},[39,109317,109318],{"class":41,"line":132},[39,109319,122],{"emptyLinePlaceholder":121},[39,109321,109322,109324,109326],{"class":41,"line":138},[39,109323,102289],{"class":74},[39,109325,71],{"class":45},[39,109327,102294],{"class":237},[39,109329,109330],{"class":41,"line":169},[39,109331,109332],{"class":237},"\u003Cmujoco model=\"renderer_demo\">\n",[39,109334,109335],{"class":41,"line":190},[39,109336,102304],{"class":237},[39,109338,109339],{"class":41,"line":202},[39,109340,122],{"emptyLinePlaceholder":121},[39,109342,109343],{"class":41,"line":207},[39,109344,102313],{"class":237},[39,109346,109347],{"class":41,"line":212},[39,109348,109062],{"class":237},[39,109350,109351],{"class":41,"line":223},[39,109352,109353],{"class":237},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[39,109355,109356],{"class":41,"line":228},[39,109357,109067],{"class":237},[39,109359,109360],{"class":41,"line":263},[39,109361,122],{"emptyLinePlaceholder":121},[39,109363,109364],{"class":41,"line":287},[39,109365,102327],{"class":237},[39,109367,109368],{"class":41,"line":292},[39,109369,102332],{"class":237},[39,109371,109372],{"class":41,"line":305},[39,109373,109084],{"class":237},[39,109375,109376],{"class":41,"line":310},[39,109377,102342],{"class":237},[39,109379,109380],{"class":41,"line":321},[39,109381,102347],{"class":237},[39,109383,109384],{"class":41,"line":713},[39,109385,102352],{"class":237},[39,109387,109388],{"class":41,"line":718},[39,109389,96673],{"class":237},[39,109391,109392],{"class":41,"line":723},[39,109393,122],{"emptyLinePlaceholder":121},[39,109395,109396],{"class":41,"line":729},[39,109397,122],{"emptyLinePlaceholder":121},[39,109399,109400,109402,109404,109406,109408],{"class":41,"line":735},[39,109401,32922],{"class":45},[39,109403,217],{"class":49},[39,109405,102373],{"class":53},[39,109407,96661],{"class":74},[39,109409,4822],{"class":53},[39,109411,109412,109414,109416,109418,109420],{"class":41,"line":741},[39,109413,102382],{"class":53},[39,109415,1117],{"class":45},[39,109417,102387],{"class":53},[39,109419,102289],{"class":74},[39,109421,574],{"class":53},[39,109423,109424,109426,109428],{"class":41,"line":747},[39,109425,102396],{"class":53},[39,109427,1117],{"class":45},[39,109429,102401],{"class":53},[39,109431,109432,109435,109437,109439,109441,109443,109445,109447,109449,109451,109453],{"class":41,"line":753},[39,109433,109434],{"class":53},"    renderer ",[39,109436,1117],{"class":45},[39,109438,108849],{"class":53},[39,109440,25956],{"class":59},[39,109442,1117],{"class":45},[39,109444,43317],{"class":74},[39,109446,63],{"class":53},[39,109448,25952],{"class":59},[39,109450,1117],{"class":45},[39,109452,108864],{"class":74},[39,109454,574],{"class":53},[39,109456,109457],{"class":41,"line":758},[39,109458,122],{"emptyLinePlaceholder":121},[39,109460,109461,109463,109465,109467,109469,109471,109473],{"class":41,"line":763},[39,109462,4284],{"class":45},[39,109464,102476],{"class":53},[39,109466,27018],{"class":45},[39,109468,33418],{"class":74},[39,109470,54],{"class":53},[39,109472,278],{"class":74},[39,109474,31761],{"class":53},[39,109476,109477],{"class":41,"line":772},[39,109478,102491],{"class":53},[39,109480,109481],{"class":41,"line":777},[39,109482,122],{"emptyLinePlaceholder":121},[39,109484,109485,109488,109491,109493,109496],{"class":41,"line":785},[39,109486,109487],{"class":53},"    renderer.update_scene(data, ",[39,109489,109490],{"class":59},"camera",[39,109492,1117],{"class":45},[39,109494,109495],{"class":237},"\"fixed_camera\"",[39,109497,574],{"class":53},[39,109499,109500,109503,109505],{"class":41,"line":796},[39,109501,109502],{"class":53},"    image ",[39,109504,1117],{"class":45},[39,109506,108560],{"class":53},[39,109508,109509],{"class":41,"line":808},[39,109510,122],{"emptyLinePlaceholder":121},[39,109512,109513,109516,109518,109521,109523],{"class":41,"line":823},[39,109514,109515],{"class":53},"    output_path ",[39,109517,1117],{"class":45},[39,109519,109520],{"class":53}," Path(",[39,109522,108990],{"class":237},[39,109524,574],{"class":53},[39,109526,109527],{"class":41,"line":839},[39,109528,109529],{"class":53},"    Image.fromarray(image).save(output_path)\n",[39,109531,109532],{"class":41,"line":845},[39,109533,109534],{"class":53},"    renderer.close()\n",[39,109536,109537],{"class":41,"line":856},[39,109538,122],{"emptyLinePlaceholder":121},[39,109540,109541,109543,109545,109548],{"class":41,"line":861},[39,109542,32274],{"class":74},[39,109544,54],{"class":53},[39,109546,109547],{"class":237},"\"saved:\"",[39,109549,109550],{"class":53},", output_path.resolve())\n",[39,109552,109553,109555,109557,109560],{"class":41,"line":870},[39,109554,32274],{"class":74},[39,109556,54],{"class":53},[39,109558,109559],{"class":237},"\"image shape:\"",[39,109561,109562],{"class":53},", image.shape)\n",[39,109564,109565],{"class":41,"line":9084},[39,109566,122],{"emptyLinePlaceholder":121},[39,109568,109569],{"class":41,"line":9090},[39,109570,122],{"emptyLinePlaceholder":121},[39,109572,109573,109575,109577,109579,109581],{"class":41,"line":9102},[39,109574,2654],{"class":45},[39,109576,32195],{"class":74},[39,109578,102534],{"class":45},[39,109580,102537],{"class":237},[39,109582,4822],{"class":53},[39,109584,109585],{"class":41,"line":9114},[39,109586,102544],{"class":53},[19,109588,104545],{},[30,109590,109592],{"className":24796,"code":109591,"language":24798,"meta":35,"style":35},"touch ch5_renderer.py\n",[26,109593,109594],{"__ignoreMap":35},[39,109595,109596,109598],{"class":41,"line":42},[39,109597,102258],{"class":49},[39,109599,109600],{"class":237}," ch5_renderer.py\n",[476,109602,102547],{"id":102547},[19,109604,109605],{},"viewer 上下文：",[30,109607,109609],{"className":31353,"code":109608,"language":31355,"meta":35,"style":35},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[26,109610,109611],{"__ignoreMap":35},[39,109612,109613,109615,109617,109619],{"class":41,"line":42},[39,109614,108808],{"class":45},[39,109616,108811],{"class":53},[39,109618,32358],{"class":45},[39,109620,108816],{"class":53},[19,109622,109623,109625],{},[26,109624,108808],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109627,109628],{},"窗口循环：",[30,109630,109632],{"className":31353,"code":109631,"language":31355,"meta":35,"style":35},"while viewer.is_running() and data.time \u003C 5.0:\n",[26,109633,109634],{"__ignoreMap":35},[39,109635,109636,109639,109641,109643,109645,109647,109649],{"class":41,"line":42},[39,109637,109638],{"class":45},"while",[39,109640,109162],{"class":53},[39,109642,31437],{"class":45},[39,109644,109167],{"class":53},[39,109646,2170],{"class":45},[39,109648,109172],{"class":74},[39,109650,4822],{"class":53},[19,109652,109653],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109655,109656],{},"固定相机：",[30,109658,109660],{"className":54042,"code":109659,"language":54044,"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",[26,109661,109662],{"__ignoreMap":35},[39,109663,109664,109666,109668,109670,109672,109674,109676,109678,109681,109684,109686,109689],{"class":41,"line":42},[39,109665,2170],{"class":53},[39,109667,109490],{"class":52275},[39,109669,15893],{"class":49},[39,109671,1117],{"class":53},[39,109673,109495],{"class":237},[39,109675,102081],{"class":49},[39,109677,1117],{"class":53},[39,109679,109680],{"class":237},"\"1.5 -2.0 1.2\"",[39,109682,109683],{"class":49}," xyaxes",[39,109685,1117],{"class":53},[39,109687,109688],{"class":237},"\"1 0.75 0 0 0 1\"",[39,109690,102119],{"class":53},[19,109692,109693],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[476,109695,109697],{"id":109696},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[30,109699,109701],{"className":31353,"code":109700,"language":31355,"meta":35,"style":35},"import time\n",[26,109702,109703],{"__ignoreMap":35},[39,109704,109705,109707],{"class":41,"line":42},[39,109706,31367],{"class":45},[39,109708,32804],{"class":53},[19,109710,109711],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[30,109713,109715],{"className":31353,"code":109714,"language":31355,"meta":35,"style":35},"import mujoco\nimport mujoco.viewer\n",[26,109716,109717,109723],{"__ignoreMap":35},[39,109718,109719,109721],{"class":41,"line":42},[39,109720,31367],{"class":45},[39,109722,102276],{"class":53},[39,109724,109725,109727],{"class":41,"line":92},[39,109726,31367],{"class":45},[39,109728,108527],{"class":53},[19,109730,109731],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[30,109733,109734],{"className":31353,"code":109608,"language":31355,"meta":35,"style":35},[26,109735,109736],{"__ignoreMap":35},[39,109737,109738,109740,109742,109744],{"class":41,"line":42},[39,109739,108808],{"class":45},[39,109741,108811],{"class":53},[39,109743,32358],{"class":45},[39,109745,108816],{"class":53},[19,109747,109748,109749,109752],{},"打开一个 viewer 窗口。",[26,109750,109751],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[30,109754,109755],{"className":31353,"code":109631,"language":31355,"meta":35,"style":35},[26,109756,109757],{"__ignoreMap":35},[39,109758,109759,109761,109763,109765,109767,109769,109771],{"class":41,"line":42},[39,109760,109638],{"class":45},[39,109762,109162],{"class":53},[39,109764,31437],{"class":45},[39,109766,109167],{"class":53},[39,109768,2170],{"class":45},[39,109770,109172],{"class":74},[39,109772,4822],{"class":53},[19,109774,109775,109776,109779],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[26,109777,109778],{},"viewer.is_running()"," 会变成 false，循环结束。",[30,109781,109783],{"className":31353,"code":109782,"language":31355,"meta":35,"style":35},"step_start = time.time()\n",[26,109784,109785],{"__ignoreMap":35},[39,109786,109787,109790,109792],{"class":41,"line":42},[39,109788,109789],{"class":53},"step_start ",[39,109791,1117],{"class":45},[39,109793,109184],{"class":53},[19,109795,109796],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[30,109798,109799],{"className":31353,"code":108893,"language":31355,"meta":35,"style":35},[26,109800,109801,109805],{"__ignoreMap":35},[39,109802,109803],{"class":41,"line":42},[39,109804,105480],{"class":53},[39,109806,109807],{"class":41,"line":92},[39,109808,108904],{"class":53},[19,109810,109811,109813,109814,109816,109817,109819,109820,109823],{},[26,109812,102190],{}," 推进物理仿真。",[26,109815,108912],{}," 把最新的 ",[26,109818,34376],{}," 同步到窗口里显示。没有 ",[26,109821,109822],{},"sync()","，窗口可能看不到最新状态。",[30,109825,109826],{"className":31353,"code":108923,"language":31355,"meta":35,"style":35},[26,109827,109828],{"__ignoreMap":35},[39,109829,109830,109832,109834,109836,109838,109840,109842],{"class":41,"line":42},[39,109831,108930],{"class":53},[39,109833,1117],{"class":45},[39,109835,108935],{"class":53},[39,109837,1793],{"class":45},[39,109839,108940],{"class":53},[39,109841,1793],{"class":45},[39,109843,108945],{"class":53},[19,109845,109846],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[30,109848,109850],{"className":31353,"code":109849,"language":31355,"meta":35,"style":35},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[26,109851,109852,109864],{"__ignoreMap":35},[39,109853,109854,109856,109858,109860,109862],{"class":41,"line":42},[39,109855,2654],{"class":45},[39,109857,109222],{"class":53},[39,109859,2220],{"class":45},[39,109861,315],{"class":74},[39,109863,4822],{"class":53},[39,109865,109866],{"class":41,"line":92},[39,109867,109868],{"class":53},"    time.sleep(sleep_time)\n",[19,109870,109871],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[476,109873,109875],{"id":109874},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[30,109877,109879],{"className":31353,"code":109878,"language":31355,"meta":35,"style":35},"from pathlib import Path\n",[26,109880,109881],{"__ignoreMap":35},[39,109882,109883,109885,109887,109889],{"class":41,"line":42},[39,109884,31712],{"class":45},[39,109886,109286],{"class":53},[39,109888,31367],{"class":45},[39,109890,109291],{"class":53},[19,109892,109893,109894,109897,109898,109901],{},"导入 ",[26,109895,109896],{},"Path","，用来处理文件路径。相比直接写字符串，",[26,109899,109900],{},"Path(\"render_output.png\")"," 更清晰。",[30,109903,109905],{"className":31353,"code":109904,"language":31355,"meta":35,"style":35},"from PIL import Image\n",[26,109906,109907],{"__ignoreMap":35},[39,109908,109909,109911,109913,109915],{"class":41,"line":42},[39,109910,31712],{"class":45},[39,109912,48238],{"class":74},[39,109914,48241],{"class":45},[39,109916,48244],{"class":53},[19,109918,109919],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[30,109921,109922],{"className":54042,"code":109659,"language":54044,"meta":35,"style":35},[26,109923,109924],{"__ignoreMap":35},[39,109925,109926,109928,109930,109932,109934,109936,109938,109940,109942,109944,109946,109948],{"class":41,"line":42},[39,109927,2170],{"class":53},[39,109929,109490],{"class":52275},[39,109931,15893],{"class":49},[39,109933,1117],{"class":53},[39,109935,109495],{"class":237},[39,109937,102081],{"class":49},[39,109939,1117],{"class":53},[39,109941,109680],{"class":237},[39,109943,109683],{"class":49},[39,109945,1117],{"class":53},[39,109947,109688],{"class":237},[39,109949,102119],{"class":53},[19,109951,109952,109953,109955,109956,109958,109959,109962,109963,109965],{},"定义一个相机。",[26,109954,80785],{}," 是相机名字。",[26,109957,105121],{}," 是相机在世界里的位置。",[26,109960,109961],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[26,109964,105121],{}," 来调视角。",[30,109967,109969],{"className":31353,"code":109968,"language":31355,"meta":35,"style":35},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[26,109970,109971],{"__ignoreMap":35},[39,109972,109973,109975,109977,109979,109981,109983,109985,109987,109989,109991,109993],{"class":41,"line":42},[39,109974,108545],{"class":53},[39,109976,1117],{"class":45},[39,109978,108849],{"class":53},[39,109980,25956],{"class":59},[39,109982,1117],{"class":45},[39,109984,43317],{"class":74},[39,109986,63],{"class":53},[39,109988,25952],{"class":59},[39,109990,1117],{"class":45},[39,109992,108864],{"class":74},[39,109994,574],{"class":53},[19,109996,109997,109998,101993,110000,110002],{},"创建离屏渲染器。",[26,109999,25956],{},[26,110001,25952],{}," 决定输出图片大小。",[30,110004,110005],{"className":31353,"code":102651,"language":31355,"meta":35,"style":35},[26,110006,110007,110023],{"__ignoreMap":35},[39,110008,110009,110011,110013,110015,110017,110019,110021],{"class":41,"line":42},[39,110010,4108],{"class":45},[39,110012,102476],{"class":53},[39,110014,27018],{"class":45},[39,110016,33418],{"class":74},[39,110018,54],{"class":53},[39,110020,278],{"class":74},[39,110022,31761],{"class":53},[39,110024,110025],{"class":41,"line":92},[39,110026,102674],{"class":53},[19,110028,110029],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[30,110031,110033],{"className":31353,"code":110032,"language":31355,"meta":35,"style":35},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[26,110034,110035],{"__ignoreMap":35},[39,110036,110037,110040,110042,110044,110046],{"class":41,"line":42},[39,110038,110039],{"class":53},"renderer.update_scene(data, ",[39,110041,109490],{"class":59},[39,110043,1117],{"class":45},[39,110045,109495],{"class":237},[39,110047,574],{"class":53},[19,110049,110050,110051,110053,110054,110057],{},"告诉 renderer：用当前 ",[26,110052,34376],{}," 的状态更新画面，并使用名为 ",[26,110055,110056],{},"fixed_camera"," 的相机视角。",[30,110059,110060],{"className":31353,"code":108955,"language":31355,"meta":35,"style":35},[26,110061,110062],{"__ignoreMap":35},[39,110063,110064,110066,110068],{"class":41,"line":42},[39,110065,108555],{"class":53},[39,110067,1117],{"class":45},[39,110069,108560],{"class":53},[19,110071,110072,110073,110076],{},"真正渲染出图像。",[26,110074,110075],{},"image"," 是一个 NumPy 数组，不是文件。",[30,110078,110080],{"className":31353,"code":110079,"language":31355,"meta":35,"style":35},"Image.fromarray(image).save(output_path)\n",[26,110081,110082],{"__ignoreMap":35},[39,110083,110084],{"class":41,"line":42},[39,110085,110079],{"class":53},[19,110087,110088,110089,29360],{},"把数组转换成图片，并保存到 ",[26,110090,110091],{},"render_output.png",[30,110093,110095],{"className":31353,"code":110094,"language":31355,"meta":35,"style":35},"renderer.close()\n",[26,110096,110097],{"__ignoreMap":35},[39,110098,110099],{"class":41,"line":42},[39,110100,110094],{"class":53},[19,110102,110103],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110105,103291],{"id":103290},[19,110107,110108,110109,110111,110112,29360],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[26,110110,110091],{},"，并输出图像数组形状，例如 ",[26,110113,110114],{},"(480, 640, 3)",[19,110116,110117],{},"如果图片里看不到方块，先检查：",[328,110119,110120,110123,110126],{},[331,110121,110122],{},"方块是否掉到相机视野外。",[331,110124,110125],{},"camera 位置是否合理。",[331,110127,110128,110129,110132],{},"是否在 ",[26,110130,110131],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110134,103323],{"id":103322},[19,110136,110137],{},"运行 viewer:",[30,110139,110141],{"className":24796,"code":110140,"language":24798,"meta":35,"style":35},"python ch5_viewer.py\n",[26,110142,110143],{"__ignoreMap":35},[39,110144,110145,110147],{"class":41,"line":42},[39,110146,31355],{"class":49},[39,110148,109271],{"class":237},[19,110150,110151],{},"运行 renderer:",[30,110153,110155],{"className":24796,"code":110154,"language":24798,"meta":35,"style":35},"python ch5_renderer.py\n",[26,110156,110157],{"__ignoreMap":35},[39,110158,110159,110161],{"class":41,"line":42},[39,110160,31355],{"class":49},[39,110162,109600],{"class":237},[19,110164,110165],{},"如果在服务器上运行:",[30,110167,110169],{"className":24796,"code":110168,"language":24798,"meta":35,"style":35},"MUJOCO_GL=egl python ch5_renderer.py\n",[26,110170,110171],{"__ignoreMap":35},[39,110172,110173,110175,110177,110179,110182],{"class":41,"line":42},[39,110174,108789],{"class":53},[39,110176,1117],{"class":45},[39,110178,108779],{"class":237},[39,110180,110181],{"class":49}," python",[39,110183,109600],{"class":237},[19,110185,108757],{},[30,110187,110189],{"className":24796,"code":110188,"language":24798,"meta":35,"style":35},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[26,110190,110191],{"__ignoreMap":35},[39,110192,110193,110195,110197,110199,110201],{"class":41,"line":42},[39,110194,108789],{"class":53},[39,110196,1117],{"class":45},[39,110198,108783],{"class":237},[39,110200,110181],{"class":49},[39,110202,109600],{"class":237},[19,110204,110205],{},"再做几个练习：",[328,110207,110208,110215,110218,110224],{},[331,110209,110210,110211,110214],{},"把 renderer 分辨率改成 ",[26,110212,110213],{},"height=240, width=320","，观察输出 shape。",[331,110216,110217],{},"把方块颜色改成蓝色，重新保存图片。",[331,110219,110220,110221,110223],{},"把相机 ",[26,110222,105121],{}," 改远一点，观察画面中物体是否变小。",[331,110225,110226,110227,103389,110230,110233],{},"把 viewer 示例中的 ",[26,110228,110229],{},"data.time \u003C 5.0",[26,110231,110232],{},"data.time \u003C 20.0","，观察更长时间。",[14,110235,103428],{"id":103427},[476,110237,110239],{"id":110238},"viewer-窗口打不开","viewer 窗口打不开",[19,110241,110242],{},"安装:",[30,110244,110246],{"className":24796,"code":110245,"language":24798,"meta":35,"style":35},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[26,110247,110248],{"__ignoreMap":35},[39,110249,110250,110252,110254,110256,110258,110260,110262,110264,110266,110268,110270],{"class":41,"line":42},[39,110251,25551],{"class":49},[39,110253,27290],{"class":237},[39,110255,24808],{"class":237},[39,110257,27375],{"class":74},[39,110259,103481],{"class":237},[39,110261,101809],{"class":237},[39,110263,103486],{"class":237},[39,110265,101822],{"class":237},[39,110267,101828],{"class":237},[39,110269,101819],{"class":237},[39,110271,110272],{"class":237}," libXinerama\n",[476,110274,110276],{"id":110275},"glfwerror",[26,110277,110278],{},"GLFWError",[19,110280,110281],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[476,110283,110285],{"id":110284},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110287,110288,110289,83514,110291,110293],{},"尝试 ",[26,110290,102012],{},[26,110292,102015],{},"。可能存在版本差异。",[476,110295,110296],{"id":110296},"保存图片是黑的",[19,110298,103550],{},[328,110300,110301,110304,110307,110317],{},[331,110302,110303],{},"XML 里是否有 light。",[331,110305,110306],{},"相机是否对着模型。",[331,110308,110309,110310,110313,110314,29360],{},"是否先 ",[26,110311,110312],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[26,110315,110316],{},"renderer.render()",[331,110318,110319],{},"物体是否已经掉出视野。",[476,110321,110322],{"id":110322},"远程服务器没有显示器",[19,110324,110325],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[30,110327,110328],{"className":24796,"code":110168,"language":24798,"meta":35,"style":35},[26,110329,110330],{"__ignoreMap":35},[39,110331,110332,110334,110336,110338,110340],{"class":41,"line":42},[39,110333,108789],{"class":53},[39,110335,1117],{"class":45},[39,110337,108779],{"class":237},[39,110339,110181],{"class":49},[39,110341,109600],{"class":237},[19,110343,110344],{},"如果 EGL 不可用，再尝试：",[30,110346,110347],{"className":24796,"code":110188,"language":24798,"meta":35,"style":35},[26,110348,110349],{"__ignoreMap":35},[39,110350,110351,110353,110355,110357,110359],{"class":41,"line":42},[39,110352,108789],{"class":53},[39,110354,1117],{"class":45},[39,110356,108783],{"class":237},[39,110358,110181],{"class":49},[39,110360,109600],{"class":237},[14,110362,103582],{"id":103581},[19,110364,110365],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[328,110367,110368,110371,110374],{},[331,110369,110370],{},"先用 viewer 看模型和控制是否正常。",[331,110372,110373],{},"再用 renderer 保存图片或构造视觉观测。",[331,110375,110376],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1192,110378,110379],{},"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":92,"depth":92,"links":110381},[110382,110383,110384,110389,110394,110395,110396,110403],{"id":101621,"depth":92,"text":101622},{"id":101744,"depth":92,"text":101745},{"id":102019,"depth":92,"text":102020,"children":110385},[110386,110387,110388],{"id":108886,"depth":112,"text":108887},{"id":108916,"depth":112,"text":108917},{"id":108951,"depth":112,"text":108952},{"id":102227,"depth":92,"text":102228,"children":110390},[110391,110392,110393],{"id":102547,"depth":112,"text":102547},{"id":109696,"depth":112,"text":109697},{"id":109874,"depth":112,"text":109875},{"id":103290,"depth":92,"text":103291},{"id":103322,"depth":92,"text":103323},{"id":103427,"depth":92,"text":103428,"children":110397},[110398,110399,110400,110401,110402],{"id":110238,"depth":112,"text":110239},{"id":110275,"depth":112,"text":110278},{"id":110284,"depth":112,"text":110285},{"id":110296,"depth":112,"text":110296},{"id":110322,"depth":112,"text":110322},{"id":103581,"depth":92,"text":103582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108494,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110410,"title":110411,"body":110412,"description":35,"extension":1203,"meta":112323,"navigation":121,"path":112324,"seo":112325,"stem":112326,"__hash__":112327},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110413,"toc":112299},[110414,110417,110419,110422,110424,110443,110446,110452,110455,110457,110459,110483,110485,110499,110501,110542,110544,110555,110557,110560,110566,110569,110603,110606,110638,110641,110673,110677,110680,110720,110723,110729,110732,110738,110742,110745,110751,110754,110758,110761,110801,110803,110816,110819,110821,111403,111405,111417,111420,111431,111433,111436,111455,111467,111470,111491,111494,111497,111540,111543,111546,111566,111573,111575,111593,111608,111611,111617,111620,111626,111643,111650,111681,111692,111726,111737,111754,111763,111771,111776,111790,111793,111814,111820,111834,111839,111869,111879,111904,111912,111935,111938,111954,111957,111965,111971,111993,112006,112027,112036,112075,112086,112088,112091,112097,112100,112103,112109,112112,112132,112135,112137,112176,112178,112181,112189,112192,112195,112222,112225,112235,112241,112244,112250,112252,112258,112262,112265,112267,112270,112294,112297],[10,110415,110411],{"id":110416},"_6控制任务cartpole",[14,110418,101622],{"id":101621},[19,110420,110421],{},"本章搭建一个最小 Cartpole 控制任务。",[19,110423,105306],{},[328,110425,110426,110429,110431,110434,110437,110440],{},[331,110427,110428],{},"slide joint",[331,110430,107159],{},[331,110432,110433],{},"cart force actuator",[331,110435,110436],{},"状态观测",[331,110438,110439],{},"简单控制循环",[331,110441,110442],{},"reward 设计雏形",[19,110444,110445],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[30,110447,110450],{"className":110448,"code":110449,"language":6267,"meta":35},[6265],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[26,110451,110449],{"__ignoreMap":35},[19,110453,110454],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110456,101745],{"id":101744},[19,110458,101748],{},[30,110460,110461],{"className":24796,"code":105363,"language":24798,"meta":35,"style":35},[26,110462,110463],{"__ignoreMap":35},[39,110464,110465,110467,110469,110471,110473,110475,110477,110479,110481],{"class":41,"line":42},[39,110466,25551],{"class":49},[39,110468,27290],{"class":237},[39,110470,24808],{"class":237},[39,110472,27375],{"class":74},[39,110474,105378],{"class":237},[39,110476,101773],{"class":237},[39,110478,103476],{"class":237},[39,110480,101789],{"class":237},[39,110482,105387],{"class":237},[19,110484,103794],{},[30,110486,110487],{"className":24796,"code":101894,"language":24798,"meta":35,"style":35},[26,110488,110489],{"__ignoreMap":35},[39,110490,110491,110493,110495,110497],{"class":41,"line":42},[39,110492,24805],{"class":49},[39,110494,24808],{"class":237},[39,110496,101905],{"class":237},[39,110498,101908],{"class":237},[19,110500,103811],{},[30,110502,110504],{"className":24796,"code":110503,"language":24798,"meta":35,"style":35},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[26,110505,110506,110523,110532],{"__ignoreMap":35},[39,110507,110508,110510,110512,110514,110517,110519,110521],{"class":41,"line":42},[39,110509,31305],{"class":49},[39,110511,30151],{"class":237},[39,110513,26090],{"class":74},[39,110515,110516],{"class":237}," mujoco-cartpole",[39,110518,101950],{"class":237},[39,110520,101953],{"class":74},[39,110522,101956],{"class":74},[39,110524,110525,110527,110529],{"class":41,"line":92},[39,110526,31305],{"class":49},[39,110528,101963],{"class":237},[39,110530,110531],{"class":237}," mujoco-cartpole\n",[39,110533,110534,110536,110538,110540],{"class":41,"line":112},[39,110535,24805],{"class":49},[39,110537,24808],{"class":237},[39,110539,101905],{"class":237},[39,110541,101908],{"class":237},[19,110543,101979],{},[328,110545,110546,110549,110552],{},[331,110547,110548],{},"本章不依赖 Gymnasium。",[331,110550,110551],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[331,110553,110554],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110556,102020],{"id":102019},[19,110558,110559],{},"Cartpole 的模型结构:",[30,110561,110564],{"className":110562,"code":110563,"language":6267,"meta":35},[6265],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[26,110565,110563],{"__ignoreMap":35},[19,110567,110568],{},"小车通过 slide joint 左右移动:",[30,110570,110572],{"className":54042,"code":110571,"language":54044,"meta":35,"style":35},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[26,110573,110574],{"__ignoreMap":35},[39,110575,110576,110578,110580,110582,110584,110587,110589,110591,110594,110596,110598,110601],{"class":41,"line":42},[39,110577,2170],{"class":53},[39,110579,103931],{"class":52275},[39,110581,15893],{"class":49},[39,110583,1117],{"class":53},[39,110585,110586],{"class":237},"\"cart_x\"",[39,110588,54799],{"class":49},[39,110590,1117],{"class":53},[39,110592,110593],{"class":237},"\"slide\"",[39,110595,107003],{"class":49},[39,110597,1117],{"class":53},[39,110599,110600],{"class":237},"\"1 0 0\"",[39,110602,102119],{"class":53},[19,110604,110605],{},"杆子通过 hinge joint 旋转:",[30,110607,110609],{"className":54042,"code":110608,"language":54044,"meta":35,"style":35},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[26,110610,110611],{"__ignoreMap":35},[39,110612,110613,110615,110617,110619,110621,110624,110626,110628,110630,110632,110634,110636],{"class":41,"line":42},[39,110614,2170],{"class":53},[39,110616,103931],{"class":52275},[39,110618,15893],{"class":49},[39,110620,1117],{"class":53},[39,110622,110623],{"class":237},"\"pole_hinge\"",[39,110625,54799],{"class":49},[39,110627,1117],{"class":53},[39,110629,106994],{"class":237},[39,110631,107003],{"class":49},[39,110633,1117],{"class":53},[39,110635,107008],{"class":237},[39,110637,102119],{"class":53},[19,110639,110640],{},"控制力作用在小车 slide joint 上:",[30,110642,110644],{"className":54042,"code":110643,"language":54044,"meta":35,"style":35},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[26,110645,110646],{"__ignoreMap":35},[39,110647,110648,110650,110652,110654,110656,110659,110661,110663,110665,110667,110669,110671],{"class":41,"line":42},[39,110649,2170],{"class":53},[39,110651,107049],{"class":52275},[39,110653,15893],{"class":49},[39,110655,1117],{"class":53},[39,110657,110658],{"class":237},"\"cart_motor\"",[39,110660,107059],{"class":49},[39,110662,1117],{"class":53},[39,110664,110586],{"class":237},[39,110666,107066],{"class":49},[39,110668,1117],{"class":53},[39,110670,55291],{"class":237},[39,110672,102119],{"class":53},[476,110674,110676],{"id":110675},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110678,110679],{},"这个简化模型有两个关节：",[1404,110681,110682,110693],{},[1407,110683,110684],{},[1410,110685,110686,110688,110690],{},[1413,110687,103734],{"align":24710},[1413,110689,24711],{"align":24710},[1413,110691,110692],{"align":24710},"对应状态",[1450,110694,110695,110708],{},[1410,110696,110697,110702,110705],{},[1455,110698,110699],{"align":24710},[26,110700,110701],{},"cart_x",[1455,110703,110704],{"align":24710},"slide",[1455,110706,110707],{"align":24710},"小车 x 位置",[1410,110709,110710,110715,110717],{},[1455,110711,110712],{"align":24710},[26,110713,110714],{},"pole_hinge",[1455,110716,106815],{"align":24710},[1455,110718,110719],{"align":24710},"杆子角度",[19,110721,110722],{},"所以：",[30,110724,110727],{"className":110725,"code":110726,"language":6267,"meta":35},[6265],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[26,110728,110726],{"__ignoreMap":35},[19,110730,110731],{},"把它们拼起来就是观测：",[30,110733,110736],{"className":110734,"code":110735,"language":6267,"meta":35},[6265],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[26,110737,110735],{"__ignoreMap":35},[476,110739,110741],{"id":110740},"action-是什么","action 是什么",[19,110743,110744],{},"本章只有一个 actuator：",[30,110746,110749],{"className":110747,"code":110748,"language":6267,"meta":35},[6265],"data.ctrl[0] = action\n",[26,110750,110748],{"__ignoreMap":35},[19,110752,110753],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[476,110755,110757],{"id":110756},"reward-是什么","reward 是什么",[19,110759,110760],{},"奖励函数：",[30,110762,110764],{"className":31353,"code":110763,"language":31355,"meta":35,"style":35},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[26,110765,110766],{"__ignoreMap":35},[39,110767,110768,110770,110773,110775,110777,110779,110782,110784,110787,110789,110791,110793,110796,110798],{"class":41,"line":42},[39,110769,18019],{"class":45},[39,110771,110772],{"class":74}," float",[39,110774,54],{"class":53},[39,110776,103378],{"class":74},[39,110778,53246],{"class":45},[39,110780,110781],{"class":74}," 0.1",[39,110783,7594],{"class":45},[39,110785,110786],{"class":53}," cart_x ",[39,110788,1717],{"class":45},[39,110790,110786],{"class":53},[39,110792,1793],{"class":45},[39,110794,110795],{"class":53}," pole_angle ",[39,110797,1717],{"class":45},[39,110799,110800],{"class":53}," pole_angle)\n",[19,110802,107201],{},[328,110804,110805,110810,110813],{},[331,110806,110807,110808,29360],{},"基础奖励是 ",[26,110809,103378],{},[331,110811,110812],{},"小车离中心越远，扣分越多。",[331,110814,110815],{},"杆子角度越大，扣分越多。",[19,110817,110818],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110820,102228],{"id":102227},[30,110822,110824],{"className":31353,"code":110823,"language":31355,"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",[26,110825,110826,110832,110842,110846,110850,110858,110863,110867,110871,110875,110880,110884,110889,110894,110899,110903,110908,110913,110918,110922,110926,110930,110934,110938,110943,110947,110951,110955,110959,110963,110973,110980,110984,110988,111002,111016,111029,111059,111063,111067,111079,111091,111099,111103,111116,111120,111124,111133,111137,111153,111163,111176,111189,111193,111216,111234,111238,111250,111254,111258,111268,111278,111282,111298,111339,111343,111363,111379,111383,111387,111399],{"__ignoreMap":35},[39,110827,110828,110830],{"class":41,"line":42},[39,110829,31367],{"class":45},[39,110831,102276],{"class":53},[39,110833,110834,110836,110838,110840],{"class":41,"line":92},[39,110835,31367],{"class":45},[39,110837,32355],{"class":53},[39,110839,32358],{"class":45},[39,110841,32361],{"class":53},[39,110843,110844],{"class":41,"line":112},[39,110845,122],{"emptyLinePlaceholder":121},[39,110847,110848],{"class":41,"line":118},[39,110849,122],{"emptyLinePlaceholder":121},[39,110851,110852,110854,110856],{"class":41,"line":125},[39,110853,102289],{"class":74},[39,110855,71],{"class":45},[39,110857,102294],{"class":237},[39,110859,110860],{"class":41,"line":132},[39,110861,110862],{"class":237},"\u003Cmujoco model=\"cartpole\">\n",[39,110864,110865],{"class":41,"line":138},[39,110866,102304],{"class":237},[39,110868,110869],{"class":41,"line":169},[39,110870,122],{"emptyLinePlaceholder":121},[39,110872,110873],{"class":41,"line":190},[39,110874,102313],{"class":237},[39,110876,110877],{"class":41,"line":202},[39,110878,110879],{"class":237},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[39,110881,110882],{"class":41,"line":207},[39,110883,122],{"emptyLinePlaceholder":121},[39,110885,110886],{"class":41,"line":212},[39,110887,110888],{"class":237},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[39,110890,110891],{"class":41,"line":223},[39,110892,110893],{"class":237},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[39,110895,110896],{"class":41,"line":228},[39,110897,110898],{"class":237},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[39,110900,110901],{"class":41,"line":263},[39,110902,122],{"emptyLinePlaceholder":121},[39,110904,110905],{"class":41,"line":287},[39,110906,110907],{"class":237},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[39,110909,110910],{"class":41,"line":292},[39,110911,110912],{"class":237},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[39,110914,110915],{"class":41,"line":305},[39,110916,110917],{"class":237},"        \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",[39,110919,110920],{"class":41,"line":310},[39,110921,107413],{"class":237},[39,110923,110924],{"class":41,"line":321},[39,110925,102342],{"class":237},[39,110927,110928],{"class":41,"line":713},[39,110929,102347],{"class":237},[39,110931,110932],{"class":41,"line":718},[39,110933,122],{"emptyLinePlaceholder":121},[39,110935,110936],{"class":41,"line":723},[39,110937,107430],{"class":237},[39,110939,110940],{"class":41,"line":729},[39,110941,110942],{"class":237},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[39,110944,110945],{"class":41,"line":735},[39,110946,107440],{"class":237},[39,110948,110949],{"class":41,"line":741},[39,110950,102352],{"class":237},[39,110952,110953],{"class":41,"line":747},[39,110954,96673],{"class":237},[39,110956,110957],{"class":41,"line":753},[39,110958,122],{"emptyLinePlaceholder":121},[39,110960,110961],{"class":41,"line":758},[39,110962,122],{"emptyLinePlaceholder":121},[39,110964,110965,110967,110970],{"class":41,"line":763},[39,110966,32922],{"class":45},[39,110968,110969],{"class":49}," get_observation",[39,110971,110972],{"class":53},"(data: mujoco.MjData) -> np.ndarray:\n",[39,110974,110975,110977],{"class":41,"line":772},[39,110976,95],{"class":45},[39,110978,110979],{"class":53}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[39,110981,110982],{"class":41,"line":777},[39,110983,122],{"emptyLinePlaceholder":121},[39,110985,110986],{"class":41,"line":785},[39,110987,122],{"emptyLinePlaceholder":121},[39,110989,110990,110992,110995,110998,111000],{"class":41,"line":796},[39,110991,32922],{"class":45},[39,110993,110994],{"class":49}," compute_reward",[39,110996,110997],{"class":53},"(obs: np.ndarray) -> ",[39,110999,1311],{"class":74},[39,111001,4822],{"class":53},[39,111003,111004,111007,111009,111012,111014],{"class":41,"line":808},[39,111005,111006],{"class":53},"    cart_x ",[39,111008,1117],{"class":45},[39,111010,111011],{"class":53}," obs[",[39,111013,1457],{"class":74},[39,111015,34221],{"class":53},[39,111017,111018,111021,111023,111025,111027],{"class":41,"line":823},[39,111019,111020],{"class":53},"    pole_angle ",[39,111022,1117],{"class":45},[39,111024,111011],{"class":53},[39,111026,1483],{"class":74},[39,111028,34221],{"class":53},[39,111030,111031,111033,111035,111037,111039,111041,111043,111045,111047,111049,111051,111053,111055,111057],{"class":41,"line":839},[39,111032,95],{"class":45},[39,111034,110772],{"class":74},[39,111036,54],{"class":53},[39,111038,103378],{"class":74},[39,111040,53246],{"class":45},[39,111042,110781],{"class":74},[39,111044,7594],{"class":45},[39,111046,110786],{"class":53},[39,111048,1717],{"class":45},[39,111050,110786],{"class":53},[39,111052,1793],{"class":45},[39,111054,110795],{"class":53},[39,111056,1717],{"class":45},[39,111058,110800],{"class":53},[39,111060,111061],{"class":41,"line":845},[39,111062,122],{"emptyLinePlaceholder":121},[39,111064,111065],{"class":41,"line":856},[39,111066,122],{"emptyLinePlaceholder":121},[39,111068,111069,111071,111073,111075,111077],{"class":41,"line":861},[39,111070,32922],{"class":45},[39,111072,217],{"class":49},[39,111074,102373],{"class":53},[39,111076,96661],{"class":74},[39,111078,4822],{"class":53},[39,111080,111081,111083,111085,111087,111089],{"class":41,"line":870},[39,111082,102382],{"class":53},[39,111084,1117],{"class":45},[39,111086,102387],{"class":53},[39,111088,102289],{"class":74},[39,111090,574],{"class":53},[39,111092,111093,111095,111097],{"class":41,"line":9084},[39,111094,102396],{"class":53},[39,111096,1117],{"class":45},[39,111098,102401],{"class":53},[39,111100,111101],{"class":41,"line":9090},[39,111102,122],{"emptyLinePlaceholder":121},[39,111104,111105,111107,111109,111111,111113],{"class":41,"line":9102},[39,111106,106044],{"class":53},[39,111108,1483],{"class":74},[39,111110,5524],{"class":53},[39,111112,1117],{"class":45},[39,111114,111115],{"class":74}," 0.1\n",[39,111117,111118],{"class":41,"line":9114},[39,111119,106057],{"class":53},[39,111121,111122],{"class":41,"line":9126},[39,111123,122],{"emptyLinePlaceholder":121},[39,111125,111126,111129,111131],{"class":41,"line":10784},[39,111127,111128],{"class":53},"    total_reward ",[39,111130,1117],{"class":45},[39,111132,105736],{"class":74},[39,111134,111135],{"class":41,"line":10809},[39,111136,122],{"emptyLinePlaceholder":121},[39,111138,111139,111141,111143,111145,111147,111149,111151],{"class":41,"line":10832},[39,111140,4284],{"class":45},[39,111142,32591],{"class":53},[39,111144,27018],{"class":45},[39,111146,33418],{"class":74},[39,111148,54],{"class":53},[39,111150,7486],{"class":74},[39,111152,31761],{"class":53},[39,111154,111155,111158,111160],{"class":41,"line":10856},[39,111156,111157],{"class":53},"        obs ",[39,111159,1117],{"class":45},[39,111161,111162],{"class":53}," get_observation(data)\n",[39,111164,111165,111168,111170,111172,111174],{"class":41,"line":10861},[39,111166,111167],{"class":53},"        pole_angle ",[39,111169,1117],{"class":45},[39,111171,111011],{"class":53},[39,111173,1483],{"class":74},[39,111175,34221],{"class":53},[39,111177,111178,111181,111183,111185,111187],{"class":41,"line":10866},[39,111179,111180],{"class":53},"        pole_angular_velocity ",[39,111182,1117],{"class":45},[39,111184,111011],{"class":53},[39,111186,1339],{"class":74},[39,111188,34221],{"class":53},[39,111190,111191],{"class":41,"line":10871},[39,111192,122],{"emptyLinePlaceholder":121},[39,111194,111195,111198,111200,111203,111205,111207,111209,111211,111213],{"class":41,"line":10880},[39,111196,111197],{"class":53},"        action ",[39,111199,1117],{"class":45},[39,111201,111202],{"class":74}," 2.0",[39,111204,7594],{"class":45},[39,111206,110795],{"class":53},[39,111208,101],{"class":45},[39,111210,62842],{"class":74},[39,111212,7594],{"class":45},[39,111214,111215],{"class":53}," pole_angular_velocity\n",[39,111217,111218,111220,111222,111224,111226,111228,111230,111232],{"class":41,"line":10885},[39,111219,111197],{"class":53},[39,111221,1117],{"class":45},[39,111223,108422],{"class":53},[39,111225,1793],{"class":45},[39,111227,103378],{"class":74},[39,111229,63],{"class":53},[39,111231,103378],{"class":74},[39,111233,574],{"class":53},[39,111235,111236],{"class":41,"line":10891},[39,111237,122],{"emptyLinePlaceholder":121},[39,111239,111240,111242,111244,111246,111248],{"class":41,"line":10912},[39,111241,107592],{"class":53},[39,111243,1457],{"class":74},[39,111245,5524],{"class":53},[39,111247,1117],{"class":45},[39,111249,108445],{"class":53},[39,111251,111252],{"class":41,"line":10918},[39,111253,102491],{"class":53},[39,111255,111256],{"class":41,"line":10932},[39,111257,122],{"emptyLinePlaceholder":121},[39,111259,111260,111263,111265],{"class":41,"line":10938},[39,111261,111262],{"class":53},"        reward ",[39,111264,1117],{"class":45},[39,111266,111267],{"class":53}," compute_reward(get_observation(data))\n",[39,111269,111270,111273,111275],{"class":41,"line":10965},[39,111271,111272],{"class":53},"        total_reward ",[39,111274,10545],{"class":45},[39,111276,111277],{"class":53}," reward\n",[39,111279,111280],{"class":41,"line":10974},[39,111281,122],{"emptyLinePlaceholder":121},[39,111283,111284,111286,111288,111290,111292,111294,111296],{"class":41,"line":10980},[39,111285,3590],{"class":45},[39,111287,32591],{"class":53},[39,111289,1592],{"class":45},[39,111291,6831],{"class":74},[39,111293,102534],{"class":45},[39,111295,315],{"class":74},[39,111297,4822],{"class":53},[39,111299,111300,111302,111304,111307,111310,111313,111316,111318,111321,111324,111326,111328,111330,111332,111335,111337],{"class":41,"line":10988},[39,111301,35625],{"class":74},[39,111303,54],{"class":53},[39,111305,111306],{"class":237},"\"step:\"",[39,111308,111309],{"class":53},", step, ",[39,111311,111312],{"class":237},"\"obs:\"",[39,111314,111315],{"class":53},", np.round(obs, ",[39,111317,1339],{"class":74},[39,111319,111320],{"class":53},"), ",[39,111322,111323],{"class":237},"\"action:\"",[39,111325,63],{"class":53},[39,111327,32993],{"class":74},[39,111329,54],{"class":53},[39,111331,1311],{"class":74},[39,111333,111334],{"class":53},"(action), ",[39,111336,1339],{"class":74},[39,111338,31472],{"class":53},[39,111340,111341],{"class":41,"line":10993},[39,111342,122],{"emptyLinePlaceholder":121},[39,111344,111345,111347,111349,111352,111354,111356,111359,111361],{"class":41,"line":17577},[39,111346,32274],{"class":74},[39,111348,54],{"class":53},[39,111350,111351],{"class":237},"\"total_reward:\"",[39,111353,63],{"class":53},[39,111355,32993],{"class":74},[39,111357,111358],{"class":53},"(total_reward, ",[39,111360,1339],{"class":74},[39,111362,31472],{"class":53},[39,111364,111365,111367,111369,111372,111375,111377],{"class":41,"line":17583},[39,111366,32274],{"class":74},[39,111368,54],{"class":53},[39,111370,111371],{"class":237},"\"final obs:\"",[39,111373,111374],{"class":53},", np.round(get_observation(data), ",[39,111376,1339],{"class":74},[39,111378,31472],{"class":53},[39,111380,111381],{"class":41,"line":17606},[39,111382,122],{"emptyLinePlaceholder":121},[39,111384,111385],{"class":41,"line":17612},[39,111386,122],{"emptyLinePlaceholder":121},[39,111388,111389,111391,111393,111395,111397],{"class":41,"line":17635},[39,111390,2654],{"class":45},[39,111392,32195],{"class":74},[39,111394,102534],{"class":45},[39,111396,102537],{"class":237},[39,111398,4822],{"class":53},[39,111400,111401],{"class":41,"line":17649},[39,111402,102544],{"class":53},[19,111404,104545],{},[30,111406,111408],{"className":24796,"code":111407,"language":24798,"meta":35,"style":35},"touch ch6_cartpole.py\n",[26,111409,111410],{"__ignoreMap":35},[39,111411,111412,111414],{"class":41,"line":42},[39,111413,102258],{"class":49},[39,111415,111416],{"class":237}," ch6_cartpole.py\n",[19,111418,111419],{},"运行：",[30,111421,111423],{"className":24796,"code":111422,"language":24798,"meta":35,"style":35},"python ch6_cartpole.py\n",[26,111424,111425],{"__ignoreMap":35},[39,111426,111427,111429],{"class":41,"line":42},[39,111428,31355],{"class":49},[39,111430,111416],{"class":237},[476,111432,102547],{"id":102547},[19,111434,111435],{},"构造观测：",[30,111437,111439],{"className":31353,"code":111438,"language":31355,"meta":35,"style":35},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[26,111440,111441,111449],{"__ignoreMap":35},[39,111442,111443,111445,111447],{"class":41,"line":42},[39,111444,32922],{"class":45},[39,111446,110969],{"class":49},[39,111448,110972],{"class":53},[39,111450,111451,111453],{"class":41,"line":92},[39,111452,95],{"class":45},[39,111454,110979],{"class":53},[19,111456,111457,111460,111461,111463,111464,111466],{},[26,111458,111459],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[26,111462,105005],{}," 2 维，",[26,111465,105335],{}," 2 维，所以 obs 是 4 维。",[19,111468,111469],{},"设置初始角度：",[30,111471,111473],{"className":31353,"code":111472,"language":31355,"meta":35,"style":35},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[26,111474,111475,111487],{"__ignoreMap":35},[39,111476,111477,111479,111481,111483,111485],{"class":41,"line":42},[39,111478,105674],{"class":53},[39,111480,1483],{"class":74},[39,111482,5524],{"class":53},[39,111484,1117],{"class":45},[39,111486,111115],{"class":74},[39,111488,111489],{"class":41,"line":92},[39,111490,105518],{"class":53},[19,111492,111493],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111495,111496],{},"简单反馈控制：",[30,111498,111500],{"className":31353,"code":111499,"language":31355,"meta":35,"style":35},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[26,111501,111502,111522],{"__ignoreMap":35},[39,111503,111504,111506,111508,111510,111512,111514,111516,111518,111520],{"class":41,"line":42},[39,111505,108417],{"class":53},[39,111507,1117],{"class":45},[39,111509,111202],{"class":74},[39,111511,7594],{"class":45},[39,111513,110795],{"class":53},[39,111515,101],{"class":45},[39,111517,62842],{"class":74},[39,111519,7594],{"class":45},[39,111521,111215],{"class":53},[39,111523,111524,111526,111528,111530,111532,111534,111536,111538],{"class":41,"line":92},[39,111525,108417],{"class":53},[39,111527,1117],{"class":45},[39,111529,108422],{"class":53},[39,111531,1793],{"class":45},[39,111533,103378],{"class":74},[39,111535,63],{"class":53},[39,111537,103378],{"class":74},[39,111539,574],{"class":53},[19,111541,111542],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111544,111545],{},"限制动作：",[30,111547,111549],{"className":31353,"code":111548,"language":31355,"meta":35,"style":35},"np.clip(action, -1.0, 1.0)\n",[26,111550,111551],{"__ignoreMap":35},[39,111552,111553,111556,111558,111560,111562,111564],{"class":41,"line":42},[39,111554,111555],{"class":53},"np.clip(action, ",[39,111557,1793],{"class":45},[39,111559,103378],{"class":74},[39,111561,63],{"class":53},[39,111563,103378],{"class":74},[39,111565,574],{"class":53},[19,111567,111568,111569,111572],{},"因为 XML 里 ",[26,111570,111571],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[476,111574,102683],{"id":102683},[30,111576,111577],{"className":31353,"code":111438,"language":31355,"meta":35,"style":35},[26,111578,111579,111587],{"__ignoreMap":35},[39,111580,111581,111583,111585],{"class":41,"line":42},[39,111582,32922],{"class":45},[39,111584,110969],{"class":49},[39,111586,110972],{"class":53},[39,111588,111589,111591],{"class":41,"line":92},[39,111590,95],{"class":45},[39,111592,110979],{"class":53},[19,111594,111595,111596,111599,111600,111603,111604,111607],{},"这段定义了一个函数，用来获取当前观测。",[26,111597,111598],{},"data.qpos.copy()"," 是位置数组副本，",[26,111601,111602],{},"data.qvel.copy()"," 是速度数组副本。",[26,111605,111606],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111609,111610],{},"在本章模型里：",[30,111612,111615],{"className":111613,"code":111614,"language":6267,"meta":35},[6265],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[26,111616,111614],{"__ignoreMap":35},[19,111618,111619],{},"所以返回的 obs 是：",[30,111621,111624],{"className":111622,"code":111623,"language":6267,"meta":35},[6265],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[26,111625,111623],{"__ignoreMap":35},[30,111627,111629],{"className":31353,"code":111628,"language":31355,"meta":35,"style":35},"def compute_reward(obs: np.ndarray) -> float:\n",[26,111630,111631],{"__ignoreMap":35},[39,111632,111633,111635,111637,111639,111641],{"class":41,"line":42},[39,111634,32922],{"class":45},[39,111636,110994],{"class":49},[39,111638,110997],{"class":53},[39,111640,1311],{"class":74},[39,111642,4822],{"class":53},[19,111644,111645,111646,111649],{},"这行定义奖励函数。输入是观测 ",[26,111647,111648],{},"obs","，输出是一个浮点数奖励。",[30,111651,111653],{"className":31353,"code":111652,"language":31355,"meta":35,"style":35},"cart_x = obs[0]\npole_angle = obs[1]\n",[26,111654,111655,111668],{"__ignoreMap":35},[39,111656,111657,111660,111662,111664,111666],{"class":41,"line":42},[39,111658,111659],{"class":53},"cart_x ",[39,111661,1117],{"class":45},[39,111663,111011],{"class":53},[39,111665,1457],{"class":74},[39,111667,34221],{"class":53},[39,111669,111670,111673,111675,111677,111679],{"class":41,"line":92},[39,111671,111672],{"class":53},"pole_angle ",[39,111674,1117],{"class":45},[39,111676,111011],{"class":53},[39,111678,1483],{"class":74},[39,111680,34221],{"class":53},[19,111682,111683,111684,111687,111688,111691],{},"数组索引从 0 开始。",[26,111685,111686],{},"obs[0]"," 是第一个元素，也就是小车位置。",[26,111689,111690],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[30,111693,111694],{"className":31353,"code":110763,"language":31355,"meta":35,"style":35},[26,111695,111696],{"__ignoreMap":35},[39,111697,111698,111700,111702,111704,111706,111708,111710,111712,111714,111716,111718,111720,111722,111724],{"class":41,"line":42},[39,111699,18019],{"class":45},[39,111701,110772],{"class":74},[39,111703,54],{"class":53},[39,111705,103378],{"class":74},[39,111707,53246],{"class":45},[39,111709,110781],{"class":74},[39,111711,7594],{"class":45},[39,111713,110786],{"class":53},[39,111715,1717],{"class":45},[39,111717,110786],{"class":53},[39,111719,1793],{"class":45},[39,111721,110795],{"class":53},[39,111723,1717],{"class":45},[39,111725,110800],{"class":53},[19,111727,111728,111729,111732,111733,111736],{},"这行计算奖励。",[26,111730,111731],{},"cart_x * cart_x"," 是小车位置的平方，",[26,111734,111735],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[30,111738,111740],{"className":31353,"code":111739,"language":31355,"meta":35,"style":35},"data.qpos[1] = 0.1\n",[26,111741,111742],{"__ignoreMap":35},[39,111743,111744,111746,111748,111750,111752],{"class":41,"line":42},[39,111745,105674],{"class":53},[39,111747,1483],{"class":74},[39,111749,5524],{"class":53},[39,111751,1117],{"class":45},[39,111753,111115],{"class":74},[19,111755,111756,111757,111759,111760,111762],{},"手动设置杆子的初始角度。因为 ",[26,111758,106431],{}," 是小车位置，",[26,111761,106434],{}," 是杆子角度，所以这里改的是杆子。",[30,111764,111765],{"className":31353,"code":105518,"language":31355,"meta":35,"style":35},[26,111766,111767],{"__ignoreMap":35},[39,111768,111769],{"class":41,"line":42},[39,111770,105518],{"class":53},[19,111772,106477,111773,111775],{},[26,111774,105005],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[30,111777,111779],{"className":31353,"code":111778,"language":31355,"meta":35,"style":35},"total_reward = 0.0\n",[26,111780,111781],{"__ignoreMap":35},[39,111782,111783,111786,111788],{"class":41,"line":42},[39,111784,111785],{"class":53},"total_reward ",[39,111787,1117],{"class":45},[39,111789,105736],{"class":74},[19,111791,111792],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[30,111794,111796],{"className":31353,"code":111795,"language":31355,"meta":35,"style":35},"for step in range(1000):\n",[26,111797,111798],{"__ignoreMap":35},[39,111799,111800,111802,111804,111806,111808,111810,111812],{"class":41,"line":42},[39,111801,4108],{"class":45},[39,111803,32591],{"class":53},[39,111805,27018],{"class":45},[39,111807,33418],{"class":74},[39,111809,54],{"class":53},[39,111811,7486],{"class":74},[39,111813,31761],{"class":53},[19,111815,111816,111817,111819],{},"循环 1000 步。",[26,111818,108109],{}," 是当前步数，从 0 到 999。",[30,111821,111823],{"className":31353,"code":111822,"language":31355,"meta":35,"style":35},"obs = get_observation(data)\n",[26,111824,111825],{"__ignoreMap":35},[39,111826,111827,111830,111832],{"class":41,"line":42},[39,111828,111829],{"class":53},"obs ",[39,111831,1117],{"class":45},[39,111833,111162],{"class":53},[19,111835,111836,111837,29360],{},"读取当前状态，保存到 ",[26,111838,111648],{},[30,111840,111842],{"className":31353,"code":111841,"language":31355,"meta":35,"style":35},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[26,111843,111844,111856],{"__ignoreMap":35},[39,111845,111846,111848,111850,111852,111854],{"class":41,"line":42},[39,111847,111672],{"class":53},[39,111849,1117],{"class":45},[39,111851,111011],{"class":53},[39,111853,1483],{"class":74},[39,111855,34221],{"class":53},[39,111857,111858,111861,111863,111865,111867],{"class":41,"line":92},[39,111859,111860],{"class":53},"pole_angular_velocity ",[39,111862,1117],{"class":45},[39,111864,111011],{"class":53},[39,111866,1339],{"class":74},[39,111868,34221],{"class":53},[19,111870,111871,111872,111875,111876,29360],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[26,111873,111874],{},"obs[3]","？因为 obs 的顺序是 ",[26,111877,111878],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[30,111880,111882],{"className":31353,"code":111881,"language":31355,"meta":35,"style":35},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[26,111883,111884],{"__ignoreMap":35},[39,111885,111886,111888,111890,111892,111894,111896,111898,111900,111902],{"class":41,"line":42},[39,111887,108417],{"class":53},[39,111889,1117],{"class":45},[39,111891,111202],{"class":74},[39,111893,7594],{"class":45},[39,111895,110795],{"class":53},[39,111897,101],{"class":45},[39,111899,62842],{"class":74},[39,111901,7594],{"class":45},[39,111903,111215],{"class":53},[19,111905,111906,111907,101993,111909,111911],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[26,111908,106235],{},[26,111910,36304],{}," 是人为设置的系数，不是固定公式。",[30,111913,111915],{"className":31353,"code":111914,"language":31355,"meta":35,"style":35},"action = np.clip(action, -1.0, 1.0)\n",[26,111916,111917],{"__ignoreMap":35},[39,111918,111919,111921,111923,111925,111927,111929,111931,111933],{"class":41,"line":42},[39,111920,108417],{"class":53},[39,111922,1117],{"class":45},[39,111924,108422],{"class":53},[39,111926,1793],{"class":45},[39,111928,103378],{"class":74},[39,111930,63],{"class":53},[39,111932,103378],{"class":74},[39,111934,574],{"class":53},[19,111936,111937],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[30,111939,111940],{"className":31353,"code":110748,"language":31355,"meta":35,"style":35},[26,111941,111942],{"__ignoreMap":35},[39,111943,111944,111946,111948,111950,111952],{"class":41,"line":42},[39,111945,106846],{"class":53},[39,111947,1457],{"class":74},[39,111949,5524],{"class":53},[39,111951,1117],{"class":45},[39,111953,108445],{"class":53},[19,111955,111956],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[30,111958,111959],{"className":31353,"code":105480,"language":31355,"meta":35,"style":35},[26,111960,111961],{"__ignoreMap":35},[39,111962,111963],{"class":41,"line":42},[39,111964,105480],{"class":53},[19,111966,111967,111968,111970],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[26,111969,107101],{}," 计算小车和杆子的下一刻状态。",[30,111972,111974],{"className":31353,"code":111973,"language":31355,"meta":35,"style":35},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[26,111975,111976,111985],{"__ignoreMap":35},[39,111977,111978,111981,111983],{"class":41,"line":42},[39,111979,111980],{"class":53},"reward ",[39,111982,1117],{"class":45},[39,111984,111267],{"class":53},[39,111986,111987,111989,111991],{"class":41,"line":92},[39,111988,111785],{"class":53},[39,111990,10545],{"class":45},[39,111992,111277],{"class":53},[19,111994,111995,111996,111998,111999,112002,112003,29360],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[26,111997,10545],{}," 是简写，",[26,112000,112001],{},"total_reward += reward"," 等价于 ",[26,112004,112005],{},"total_reward = total_reward + reward",[30,112007,112009],{"className":31353,"code":112008,"language":31355,"meta":35,"style":35},"if step % 100 == 0:\n",[26,112010,112011],{"__ignoreMap":35},[39,112012,112013,112015,112017,112019,112021,112023,112025],{"class":41,"line":42},[39,112014,2654],{"class":45},[39,112016,32591],{"class":53},[39,112018,1592],{"class":45},[39,112020,6831],{"class":74},[39,112022,102534],{"class":45},[39,112024,315],{"class":74},[39,112026,4822],{"class":53},[19,112028,112029,112031,112032,112035],{},[26,112030,1592],{}," 是取余数。",[26,112033,112034],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[30,112037,112039],{"className":31353,"code":112038,"language":31355,"meta":35,"style":35},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[26,112040,112041],{"__ignoreMap":35},[39,112042,112043,112045,112047,112049,112051,112053,112055,112057,112059,112061,112063,112065,112067,112069,112071,112073],{"class":41,"line":42},[39,112044,31390],{"class":74},[39,112046,54],{"class":53},[39,112048,111306],{"class":237},[39,112050,111309],{"class":53},[39,112052,111312],{"class":237},[39,112054,111315],{"class":53},[39,112056,1339],{"class":74},[39,112058,111320],{"class":53},[39,112060,111323],{"class":237},[39,112062,63],{"class":53},[39,112064,32993],{"class":74},[39,112066,54],{"class":53},[39,112068,1311],{"class":74},[39,112070,111334],{"class":53},[39,112072,1339],{"class":74},[39,112074,31472],{"class":53},[19,112076,112077,112078,112081,112082,112085],{},"打印当前步数、观测和动作。",[26,112079,112080],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[26,112083,112084],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112087,103291],{"id":103290},[19,112089,112090],{},"观测向量:",[30,112092,112095],{"className":112093,"code":112094,"language":6267,"meta":35},[6265],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[26,112096,112094],{"__ignoreMap":35},[19,112098,112099],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112101,112102],{},"每隔 100 步会打印一次：",[30,112104,112107],{"className":112105,"code":112106,"language":6267,"meta":35},[6265],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[26,112108,112106],{"__ignoreMap":35},[19,112110,112111],{},"重点观察：",[328,112113,112114,112120,112125],{},[331,112115,112116,112119],{},[26,112117,112118],{},"pole_angle"," 是否越来越大。",[331,112121,112122,112124],{},[26,112123,110701],{}," 是否跑得太远。",[331,112126,112127,112128,83514,112130,29360],{},"action 是否经常被 clip 到 ",[26,112129,104890],{},[26,112131,1483],{},[19,112133,112134],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112136,103323],{"id":103322},[328,112138,112139,112145,112148,112154,112164,112170,112173],{},[331,112140,112141,112142,29360],{},"把初始角度改为 ",[26,112143,112144],{},"data.qpos[1] = 0.3",[331,112146,112147],{},"重新运行，观察控制是否变差。",[331,112149,112150,112151,112153],{},"把 actuator ",[26,112152,108042],{}," 改小。",[331,112155,112156,112157,112160,112161,29360],{},"打印 ",[26,112158,112159],{},"model.nq, model.nv, model.nu","，应为 ",[26,112162,112163],{},"2 2 1",[331,112165,112166,112167,112169],{},"把 reward 里的 ",[26,112168,111735],{}," 系数改大，观察总奖励变化。",[331,112171,112172],{},"把控制器改成反号，观察杆子是否更容易倒。",[331,112174,112175],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112177,103428],{"id":103427},[476,112179,112180],{"id":112180},"杆子方向和预期不一致",[19,112182,103371,112183,112185,112186,112188],{},[26,112184,107214],{}," 和 capsule 的 ",[26,112187,104151],{},"，必要时用 viewer 可视化确认。",[476,112190,112191],{"id":112191},"控制器越控越倒",[19,112193,112194],{},"说明反馈符号可能反了，尝试:",[30,112196,112198],{"className":31353,"code":112197,"language":31355,"meta":35,"style":35},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[26,112199,112200],{"__ignoreMap":35},[39,112201,112202,112204,112206,112208,112210,112212,112214,112216,112218,112220],{"class":41,"line":42},[39,112203,108417],{"class":53},[39,112205,1117],{"class":45},[39,112207,53246],{"class":45},[39,112209,106235],{"class":74},[39,112211,7594],{"class":45},[39,112213,110795],{"class":53},[39,112215,1793],{"class":45},[39,112217,62842],{"class":74},[39,112219,7594],{"class":45},[39,112221,111215],{"class":53},[476,112223,112224],{"id":112224},"小车飞走",[19,112226,112227,112228,112230,112231,112234],{},"降低 ",[26,112229,108042],{}," 或缩小 ",[26,112232,112233],{},"action"," 的 clip 范围。",[476,112236,112238,112240],{"id":112237},"obs3-为什么是杆子角速度",[26,112239,111874],{}," 为什么是杆子角速度",[19,112242,112243],{},"因为这个模型里：",[30,112245,112248],{"className":112246,"code":112247,"language":6267,"meta":35},[6265],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[26,112249,112247],{"__ignoreMap":35},[19,112251,110722],{},[30,112253,112256],{"className":112254,"code":112255,"language":6267,"meta":35},[6265],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[26,112257,112255],{"__ignoreMap":35},[476,112259,112261],{"id":112260},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112263,112264],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112266,103582],{"id":103581},[19,112268,112269],{},"一个控制任务通常包含：",[328,112271,112272,112275,112283,112288,112291],{},[331,112273,112274],{},"模型：Cartpole 的 body、joint、actuator。",[331,112276,112277,112278,1478,112280,112282],{},"观测：从 ",[26,112279,105005],{},[26,112281,105335],{}," 里取状态。",[331,112284,112285,112286,29360],{},"动作：写入 ",[26,112287,102051],{},[331,112289,112290],{},"奖励：根据任务目标打分。",[331,112292,112293],{},"循环：obs -> action -> step -> reward。",[19,112295,112296],{},"这就是后面 Gymnasium 环境的基本骨架。",[1192,112298,105261],{},{"title":35,"searchDepth":92,"depth":92,"links":112300},[112301,112302,112303,112308,112312,112313,112314,112322],{"id":101621,"depth":92,"text":101622},{"id":101744,"depth":92,"text":101745},{"id":102019,"depth":92,"text":102020,"children":112304},[112305,112306,112307],{"id":110675,"depth":112,"text":110676},{"id":110740,"depth":112,"text":110741},{"id":110756,"depth":112,"text":110757},{"id":102227,"depth":92,"text":102228,"children":112309},[112310,112311],{"id":102547,"depth":112,"text":102547},{"id":102683,"depth":112,"text":102683},{"id":103290,"depth":92,"text":103291},{"id":103322,"depth":92,"text":103323},{"id":103427,"depth":92,"text":103428,"children":112315},[112316,112317,112318,112319,112321],{"id":112180,"depth":112,"text":112180},{"id":112191,"depth":112,"text":112191},{"id":112224,"depth":112,"text":112224},{"id":112237,"depth":112,"text":112320},"obs[3] 为什么是杆子角速度",{"id":112260,"depth":112,"text":112261},{"id":103581,"depth":92,"text":103582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110411,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112329,"title":112330,"body":112331,"description":35,"extension":1203,"meta":114345,"navigation":121,"path":114346,"seo":114347,"stem":114348,"__hash__":114349},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112332,"toc":114321},[112333,112336,112338,112341,112343,112360,112363,112366,112372,112375,112377,112379,112403,112405,112419,112421,112462,112464,112482,112484,112487,112493,112496,112524,112528,112534,112559,112562,112593,112600,112603,112606,112612,112615,112621,112624,112630,112634,112637,112662,112665,112667,113427,113429,113441,113443,113454,113456,113459,113476,113479,113481,113492,113495,113497,113543,113546,113559,113562,113644,113647,113649,113665,113675,113688,113691,113730,113740,113751,113761,113774,113777,113806,113809,113819,113822,113828,113845,113856,113858,113864,113881,113892,113913,113916,113928,113931,113952,113955,113963,113971,113988,113991,114060,114067,114075,114078,114091,114098,114100,114103,114109,114112,114115,114121,114127,114129,114169,114171,114177,114186,114189,114191,114211,114214,114217,114223,114227,114229,114256,114259,114262,114289,114295,114298,114301,114303,114306,114309,114315,114318],[10,112334,112330],{"id":112335},"_7控制任务reacher-机械臂到达目标",[14,112337,101622],{"id":101621},[19,112339,112340],{},"本章搭建一个二维两关节 reacher 任务。",[19,112342,105306],{},[328,112344,112345,112348,112351,112354,112357],{},[331,112346,112347],{},"两个 hinge joint",[331,112349,112350],{},"两个 motor actuator",[331,112352,112353],{},"site 作为末端点和目标点",[331,112355,112356],{},"根据末端和目标距离设计 reward",[331,112358,112359],{},"构造机械臂任务的基本形式",[19,112361,112362],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112364,112365],{},"Reacher 任务可以理解为：",[30,112367,112370],{"className":112368,"code":112369,"language":6267,"meta":35},[6265],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[26,112371,112369],{"__ignoreMap":35},[19,112373,112374],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112376,101745],{"id":101744},[19,112378,101748],{},[30,112380,112381],{"className":24796,"code":105363,"language":24798,"meta":35,"style":35},[26,112382,112383],{"__ignoreMap":35},[39,112384,112385,112387,112389,112391,112393,112395,112397,112399,112401],{"class":41,"line":42},[39,112386,25551],{"class":49},[39,112388,27290],{"class":237},[39,112390,24808],{"class":237},[39,112392,27375],{"class":74},[39,112394,105378],{"class":237},[39,112396,101773],{"class":237},[39,112398,103476],{"class":237},[39,112400,101789],{"class":237},[39,112402,105387],{"class":237},[19,112404,103794],{},[30,112406,112407],{"className":24796,"code":101894,"language":24798,"meta":35,"style":35},[26,112408,112409],{"__ignoreMap":35},[39,112410,112411,112413,112415,112417],{"class":41,"line":42},[39,112412,24805],{"class":49},[39,112414,24808],{"class":237},[39,112416,101905],{"class":237},[39,112418,101908],{"class":237},[19,112420,103811],{},[30,112422,112424],{"className":24796,"code":112423,"language":24798,"meta":35,"style":35},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[26,112425,112426,112443,112452],{"__ignoreMap":35},[39,112427,112428,112430,112432,112434,112437,112439,112441],{"class":41,"line":42},[39,112429,31305],{"class":49},[39,112431,30151],{"class":237},[39,112433,26090],{"class":74},[39,112435,112436],{"class":237}," mujoco-reacher",[39,112438,101950],{"class":237},[39,112440,101953],{"class":74},[39,112442,101956],{"class":74},[39,112444,112445,112447,112449],{"class":41,"line":92},[39,112446,31305],{"class":49},[39,112448,101963],{"class":237},[39,112450,112451],{"class":237}," mujoco-reacher\n",[39,112453,112454,112456,112458,112460],{"class":41,"line":112},[39,112455,24805],{"class":49},[39,112457,24808],{"class":237},[39,112459,101905],{"class":237},[39,112461,101908],{"class":237},[19,112463,101979],{},[328,112465,112466,112469,112472],{},[331,112467,112468],{},"本章使用低维状态，不使用图像输入。",[331,112470,112471],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[331,112473,112474,112475,1478,112477,1478,112479,112481],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[26,112476,105005],{},[26,112478,105335],{},[26,112480,104655],{}," 的方法一致。",[14,112483,102020],{"id":102019},[19,112485,112486],{},"Reacher 任务核心:",[30,112488,112491],{"className":112489,"code":112490,"language":6267,"meta":35},[6265],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[26,112492,112490],{"__ignoreMap":35},[19,112494,112495],{},"读取 site 世界坐标:",[30,112497,112499],{"className":31353,"code":112498,"language":31355,"meta":35,"style":35},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[26,112500,112501,112514],{"__ignoreMap":35},[39,112502,112503,112505,112507,112509,112512],{"class":41,"line":42},[39,112504,104609],{"class":53},[39,112506,1117],{"class":45},[39,112508,104380],{"class":53},[39,112510,112511],{"class":237},"\"tip\"",[39,112513,574],{"class":53},[39,112515,112516,112519,112521],{"class":41,"line":92},[39,112517,112518],{"class":53},"tip_pos ",[39,112520,1117],{"class":45},[39,112522,112523],{"class":53}," data.site_xpos[site_id]\n",[476,112525,112527],{"id":112526},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112529,112530,112531,112533],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[26,112532,105005],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[30,112535,112537],{"className":31353,"code":112536,"language":31355,"meta":35,"style":35},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[26,112538,112539,112549],{"__ignoreMap":35},[39,112540,112541,112544,112546],{"class":41,"line":42},[39,112542,112543],{"class":53},"tip ",[39,112545,1117],{"class":45},[39,112547,112548],{"class":53}," data.site_xpos[tip_site_id]\n",[39,112550,112551,112554,112556],{"class":41,"line":92},[39,112552,112553],{"class":53},"target ",[39,112555,1117],{"class":45},[39,112557,112558],{"class":53}," data.site_xpos[target_site_id]\n",[19,112560,112561],{},"这样 reward 就很容易写：",[30,112563,112565],{"className":31353,"code":112564,"language":31355,"meta":35,"style":35},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[26,112566,112567,112582],{"__ignoreMap":35},[39,112568,112569,112572,112574,112577,112579],{"class":41,"line":42},[39,112570,112571],{"class":53},"dist ",[39,112573,1117],{"class":45},[39,112575,112576],{"class":53}," np.linalg.norm(tip ",[39,112578,1793],{"class":45},[39,112580,112581],{"class":53}," target)\n",[39,112583,112584,112586,112588,112590],{"class":41,"line":92},[39,112585,111980],{"class":53},[39,112587,1117],{"class":45},[39,112589,53246],{"class":45},[39,112591,112592],{"class":53},"dist\n",[19,112594,112595,112596,112599],{},"距离越小，",[26,112597,112598],{},"-dist"," 越接近 0，奖励越高。",[476,112601,112602],{"id":112602},"两关节机械臂的状态",[19,112604,112605],{},"这个模型有两个 hinge joint：",[30,112607,112610],{"className":112608,"code":112609,"language":6267,"meta":35},[6265],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[26,112611,112609],{"__ignoreMap":35},[19,112613,112614],{},"再加上末端和目标位置：",[30,112616,112619],{"className":112617,"code":112618,"language":6267,"meta":35},[6265],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[26,112620,112618],{"__ignoreMap":35},[19,112622,112623],{},"总维度：",[30,112625,112628],{"className":112626,"code":112627,"language":6267,"meta":35},[6265],"2 + 2 + 3 + 3 = 10\n",[26,112629,112627],{"__ignoreMap":35},[476,112631,112633],{"id":112632},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112635,112636],{},"本章把重力设为：",[30,112638,112640],{"className":54042,"code":112639,"language":54044,"meta":35,"style":35},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[26,112641,112642],{"__ignoreMap":35},[39,112643,112644,112646,112648,112650,112652,112654,112656,112658,112660],{"class":41,"line":42},[39,112645,2170],{"class":53},[39,112647,70141],{"class":52275},[39,112649,102169],{"class":49},[39,112651,1117],{"class":53},[39,112653,102174],{"class":237},[39,112655,102177],{"class":49},[39,112657,1117],{"class":53},[39,112659,104746],{"class":237},[39,112661,102119],{"class":53},[19,112663,112664],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112666,102228],{"id":102227},[30,112668,112670],{"className":31353,"code":112669,"language":31355,"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",[26,112671,112672,112678,112688,112692,112696,112704,112709,112714,112718,112722,112727,112732,112736,112741,112746,112751,112755,112760,112765,112770,112775,112779,112783,112787,112791,112795,112800,112805,112809,112813,112817,112821,112825,112840,112849,112861,112884,112891,112895,112899,112909,112923,112937,112944,112948,112952,112966,112978,112990,113003,113018,113035,113039,113043,113055,113067,113075,113083,113087,113103,113108,113121,113134,113149,113153,113188,113220,113224,113228,113237,113241,113257,113267,113278,113294,113310,113326,113342,113346,113364,113384,113403,113407,113411,113423],{"__ignoreMap":35},[39,112673,112674,112676],{"class":41,"line":42},[39,112675,31367],{"class":45},[39,112677,102276],{"class":53},[39,112679,112680,112682,112684,112686],{"class":41,"line":92},[39,112681,31367],{"class":45},[39,112683,32355],{"class":53},[39,112685,32358],{"class":45},[39,112687,32361],{"class":53},[39,112689,112690],{"class":41,"line":112},[39,112691,122],{"emptyLinePlaceholder":121},[39,112693,112694],{"class":41,"line":118},[39,112695,122],{"emptyLinePlaceholder":121},[39,112697,112698,112700,112702],{"class":41,"line":125},[39,112699,102289],{"class":74},[39,112701,71],{"class":45},[39,112703,102294],{"class":237},[39,112705,112706],{"class":41,"line":132},[39,112707,112708],{"class":237},"\u003Cmujoco model=\"two_link_reacher\">\n",[39,112710,112711],{"class":41,"line":138},[39,112712,112713],{"class":237},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[39,112715,112716],{"class":41,"line":169},[39,112717,122],{"emptyLinePlaceholder":121},[39,112719,112720],{"class":41,"line":190},[39,112721,102313],{"class":237},[39,112723,112724],{"class":41,"line":202},[39,112725,112726],{"class":237},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[39,112728,112729],{"class":41,"line":207},[39,112730,112731],{"class":237},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[39,112733,112734],{"class":41,"line":212},[39,112735,122],{"emptyLinePlaceholder":121},[39,112737,112738],{"class":41,"line":223},[39,112739,112740],{"class":237},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[39,112742,112743],{"class":41,"line":228},[39,112744,112745],{"class":237},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[39,112747,112748],{"class":41,"line":263},[39,112749,112750],{"class":237},"      \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",[39,112752,112753],{"class":41,"line":287},[39,112754,122],{"emptyLinePlaceholder":121},[39,112756,112757],{"class":41,"line":292},[39,112758,112759],{"class":237},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[39,112761,112762],{"class":41,"line":305},[39,112763,112764],{"class":237},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[39,112766,112767],{"class":41,"line":310},[39,112768,112769],{"class":237},"        \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",[39,112771,112772],{"class":41,"line":321},[39,112773,112774],{"class":237},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[39,112776,112777],{"class":41,"line":713},[39,112778,107413],{"class":237},[39,112780,112781],{"class":41,"line":718},[39,112782,102342],{"class":237},[39,112784,112785],{"class":41,"line":723},[39,112786,102347],{"class":237},[39,112788,112789],{"class":41,"line":729},[39,112790,122],{"emptyLinePlaceholder":121},[39,112792,112793],{"class":41,"line":735},[39,112794,107430],{"class":237},[39,112796,112797],{"class":41,"line":741},[39,112798,112799],{"class":237},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[39,112801,112802],{"class":41,"line":747},[39,112803,112804],{"class":237},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[39,112806,112807],{"class":41,"line":753},[39,112808,107440],{"class":237},[39,112810,112811],{"class":41,"line":758},[39,112812,102352],{"class":237},[39,112814,112815],{"class":41,"line":763},[39,112816,96673],{"class":237},[39,112818,112819],{"class":41,"line":772},[39,112820,122],{"emptyLinePlaceholder":121},[39,112822,112823],{"class":41,"line":777},[39,112824,122],{"emptyLinePlaceholder":121},[39,112826,112827,112829,112832,112835,112837],{"class":41,"line":785},[39,112828,32922],{"class":45},[39,112830,112831],{"class":49}," site_position",[39,112833,112834],{"class":53},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[39,112836,2427],{"class":74},[39,112838,112839],{"class":53},") -> np.ndarray:\n",[39,112841,112842,112844,112846],{"class":41,"line":796},[39,112843,104375],{"class":53},[39,112845,1117],{"class":45},[39,112847,112848],{"class":53}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[39,112850,112851,112853,112855,112857,112859],{"class":41,"line":808},[39,112852,4184],{"class":45},[39,112854,104424],{"class":53},[39,112856,2170],{"class":45},[39,112858,315],{"class":74},[39,112860,4822],{"class":53},[39,112862,112863,112865,112867,112869,112871,112874,112876,112878,112880,112882],{"class":41,"line":823},[39,112864,104407],{"class":45},[39,112866,104410],{"class":74},[39,112868,54],{"class":53},[39,112870,1321],{"class":45},[39,112872,112873],{"class":237},"\"site not found: ",[39,112875,2156],{"class":74},[39,112877,80785],{"class":53},[39,112879,2206],{"class":74},[39,112881,1516],{"class":237},[39,112883,574],{"class":53},[39,112885,112886,112888],{"class":41,"line":839},[39,112887,95],{"class":45},[39,112889,112890],{"class":53}," data.site_xpos[site_id].copy()\n",[39,112892,112893],{"class":41,"line":845},[39,112894,122],{"emptyLinePlaceholder":121},[39,112896,112897],{"class":41,"line":856},[39,112898,122],{"emptyLinePlaceholder":121},[39,112900,112901,112903,112906],{"class":41,"line":861},[39,112902,32922],{"class":45},[39,112904,112905],{"class":49}," get_obs",[39,112907,112908],{"class":53},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[39,112910,112911,112914,112916,112919,112921],{"class":41,"line":870},[39,112912,112913],{"class":53},"    tip ",[39,112915,1117],{"class":45},[39,112917,112918],{"class":53}," site_position(model, data, ",[39,112920,112511],{"class":237},[39,112922,574],{"class":53},[39,112924,112925,112928,112930,112932,112935],{"class":41,"line":9084},[39,112926,112927],{"class":53},"    target ",[39,112929,1117],{"class":45},[39,112931,112918],{"class":53},[39,112933,112934],{"class":237},"\"target\"",[39,112936,574],{"class":53},[39,112938,112939,112941],{"class":41,"line":9090},[39,112940,95],{"class":45},[39,112942,112943],{"class":53}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[39,112945,112946],{"class":41,"line":9102},[39,112947,122],{"emptyLinePlaceholder":121},[39,112949,112950],{"class":41,"line":9114},[39,112951,122],{"emptyLinePlaceholder":121},[39,112953,112954,112956,112959,112962,112964],{"class":41,"line":9126},[39,112955,32922],{"class":45},[39,112957,112958],{"class":49}," reward",[39,112960,112961],{"class":53},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[39,112963,1311],{"class":74},[39,112965,4822],{"class":53},[39,112967,112968,112970,112972,112974,112976],{"class":41,"line":10784},[39,112969,112913],{"class":53},[39,112971,1117],{"class":45},[39,112973,112918],{"class":53},[39,112975,112511],{"class":237},[39,112977,574],{"class":53},[39,112979,112980,112982,112984,112986,112988],{"class":41,"line":10809},[39,112981,112927],{"class":53},[39,112983,1117],{"class":45},[39,112985,112918],{"class":53},[39,112987,112934],{"class":237},[39,112989,574],{"class":53},[39,112991,112992,112995,112997,112999,113001],{"class":41,"line":10832},[39,112993,112994],{"class":53},"    dist ",[39,112996,1117],{"class":45},[39,112998,112576],{"class":53},[39,113000,1793],{"class":45},[39,113002,112581],{"class":53},[39,113004,113005,113008,113010,113013,113015],{"class":41,"line":10856},[39,113006,113007],{"class":53},"    control_cost ",[39,113009,1117],{"class":45},[39,113011,113012],{"class":74}," 0.01",[39,113014,7594],{"class":45},[39,113016,113017],{"class":53}," np.sum(np.square(data.ctrl))\n",[39,113019,113020,113022,113024,113026,113028,113030,113032],{"class":41,"line":10861},[39,113021,95],{"class":45},[39,113023,110772],{"class":74},[39,113025,54],{"class":53},[39,113027,1793],{"class":45},[39,113029,112571],{"class":53},[39,113031,1793],{"class":45},[39,113033,113034],{"class":53}," control_cost)\n",[39,113036,113037],{"class":41,"line":10866},[39,113038,122],{"emptyLinePlaceholder":121},[39,113040,113041],{"class":41,"line":10871},[39,113042,122],{"emptyLinePlaceholder":121},[39,113044,113045,113047,113049,113051,113053],{"class":41,"line":10880},[39,113046,32922],{"class":45},[39,113048,217],{"class":49},[39,113050,102373],{"class":53},[39,113052,96661],{"class":74},[39,113054,4822],{"class":53},[39,113056,113057,113059,113061,113063,113065],{"class":41,"line":10885},[39,113058,102382],{"class":53},[39,113060,1117],{"class":45},[39,113062,102387],{"class":53},[39,113064,102289],{"class":74},[39,113066,574],{"class":53},[39,113068,113069,113071,113073],{"class":41,"line":10891},[39,113070,102396],{"class":53},[39,113072,1117],{"class":45},[39,113074,102401],{"class":53},[39,113076,113077,113079,113081],{"class":41,"line":10912},[39,113078,111128],{"class":53},[39,113080,1117],{"class":45},[39,113082,105736],{"class":74},[39,113084,113085],{"class":41,"line":10918},[39,113086,122],{"emptyLinePlaceholder":121},[39,113088,113089,113091,113093,113095,113097,113099,113101],{"class":41,"line":10932},[39,113090,4284],{"class":45},[39,113092,32591],{"class":53},[39,113094,27018],{"class":45},[39,113096,33418],{"class":74},[39,113098,54],{"class":53},[39,113100,66049],{"class":74},[39,113102,31761],{"class":53},[39,113104,113105],{"class":41,"line":10938},[39,113106,113107],{"class":53},"        mujoco.mj_forward(model, data)\n",[39,113109,113110,113113,113115,113117,113119],{"class":41,"line":10965},[39,113111,113112],{"class":53},"        tip ",[39,113114,1117],{"class":45},[39,113116,112918],{"class":53},[39,113118,112511],{"class":237},[39,113120,574],{"class":53},[39,113122,113123,113126,113128,113130,113132],{"class":41,"line":10974},[39,113124,113125],{"class":53},"        target ",[39,113127,1117],{"class":45},[39,113129,112918],{"class":53},[39,113131,112934],{"class":237},[39,113133,574],{"class":53},[39,113135,113136,113139,113141,113144,113146],{"class":41,"line":10980},[39,113137,113138],{"class":53},"        error ",[39,113140,1117],{"class":45},[39,113142,113143],{"class":53}," target ",[39,113145,1793],{"class":45},[39,113147,113148],{"class":53}," tip\n",[39,113150,113151],{"class":41,"line":10988},[39,113152,122],{"emptyLinePlaceholder":121},[39,113154,113155,113157,113159,113161,113163,113166,113168,113170,113173,113175,113178,113180,113182,113184,113186],{"class":41,"line":10993},[39,113156,107592],{"class":53},[39,113158,1457],{"class":74},[39,113160,5524],{"class":53},[39,113162,1117],{"class":45},[39,113164,113165],{"class":53}," np.clip(",[39,113167,106235],{"class":74},[39,113169,7594],{"class":45},[39,113171,113172],{"class":53}," error[",[39,113174,1345],{"class":74},[39,113176,113177],{"class":53},"], ",[39,113179,1793],{"class":45},[39,113181,103378],{"class":74},[39,113183,63],{"class":53},[39,113185,103378],{"class":74},[39,113187,574],{"class":53},[39,113189,113190,113192,113194,113196,113198,113200,113202,113204,113206,113208,113210,113212,113214,113216,113218],{"class":41,"line":17577},[39,113191,107592],{"class":53},[39,113193,1483],{"class":74},[39,113195,5524],{"class":53},[39,113197,1117],{"class":45},[39,113199,113165],{"class":53},[39,113201,106235],{"class":74},[39,113203,7594],{"class":45},[39,113205,113172],{"class":53},[39,113207,1457],{"class":74},[39,113209,113177],{"class":53},[39,113211,1793],{"class":45},[39,113213,103378],{"class":74},[39,113215,63],{"class":53},[39,113217,103378],{"class":74},[39,113219,574],{"class":53},[39,113221,113222],{"class":41,"line":17583},[39,113223,122],{"emptyLinePlaceholder":121},[39,113225,113226],{"class":41,"line":17606},[39,113227,102491],{"class":53},[39,113229,113230,113232,113234],{"class":41,"line":17612},[39,113231,111272],{"class":53},[39,113233,10545],{"class":45},[39,113235,113236],{"class":53}," reward(model, data)\n",[39,113238,113239],{"class":41,"line":17635},[39,113240,122],{"emptyLinePlaceholder":121},[39,113242,113243,113245,113247,113249,113251,113253,113255],{"class":41,"line":17649},[39,113244,3590],{"class":45},[39,113246,32591],{"class":53},[39,113248,1592],{"class":45},[39,113250,6831],{"class":74},[39,113252,102534],{"class":45},[39,113254,315],{"class":74},[39,113256,4822],{"class":53},[39,113258,113259,113262,113264],{"class":41,"line":17669},[39,113260,113261],{"class":53},"            obs ",[39,113263,1117],{"class":45},[39,113265,113266],{"class":53}," get_obs(model, data)\n",[39,113268,113269,113271,113273,113275],{"class":41,"line":17675},[39,113270,35625],{"class":74},[39,113272,54],{"class":53},[39,113274,111306],{"class":237},[39,113276,113277],{"class":53},", step)\n",[39,113279,113280,113282,113284,113287,113290,113292],{"class":41,"line":17686},[39,113281,35625],{"class":74},[39,113283,54],{"class":53},[39,113285,113286],{"class":237},"\"  tip:\"",[39,113288,113289],{"class":53},", np.round(tip, ",[39,113291,1339],{"class":74},[39,113293,31472],{"class":53},[39,113295,113296,113298,113300,113303,113306,113308],{"class":41,"line":17709},[39,113297,35625],{"class":74},[39,113299,54],{"class":53},[39,113301,113302],{"class":237},"\"  target:\"",[39,113304,113305],{"class":53},", np.round(target, ",[39,113307,1339],{"class":74},[39,113309,31472],{"class":53},[39,113311,113312,113314,113316,113319,113322,113324],{"class":41,"line":17731},[39,113313,35625],{"class":74},[39,113315,54],{"class":53},[39,113317,113318],{"class":237},"\"  ctrl:\"",[39,113320,113321],{"class":53},", np.round(data.ctrl.copy(), ",[39,113323,1339],{"class":74},[39,113325,31472],{"class":53},[39,113327,113328,113330,113332,113335,113338,113340],{"class":41,"line":17736},[39,113329,35625],{"class":74},[39,113331,54],{"class":53},[39,113333,113334],{"class":237},"\"  obs_dim:\"",[39,113336,113337],{"class":53},", obs.shape[",[39,113339,1457],{"class":74},[39,113341,5738],{"class":53},[39,113343,113344],{"class":41,"line":17742},[39,113345,122],{"emptyLinePlaceholder":121},[39,113347,113348,113350,113352,113354,113356,113358,113360,113362],{"class":41,"line":17756},[39,113349,32274],{"class":74},[39,113351,54],{"class":53},[39,113353,111351],{"class":237},[39,113355,63],{"class":53},[39,113357,32993],{"class":74},[39,113359,111358],{"class":53},[39,113361,1339],{"class":74},[39,113363,31472],{"class":53},[39,113365,113366,113368,113370,113373,113376,113378,113380,113382],{"class":41,"line":17769},[39,113367,32274],{"class":74},[39,113369,54],{"class":53},[39,113371,113372],{"class":237},"\"final tip:\"",[39,113374,113375],{"class":53},", np.round(site_position(model, data, ",[39,113377,112511],{"class":237},[39,113379,111320],{"class":53},[39,113381,1339],{"class":74},[39,113383,31472],{"class":53},[39,113385,113386,113388,113390,113393,113395,113397,113399,113401],{"class":41,"line":17774},[39,113387,32274],{"class":74},[39,113389,54],{"class":53},[39,113391,113392],{"class":237},"\"target:\"",[39,113394,113375],{"class":53},[39,113396,112934],{"class":237},[39,113398,111320],{"class":53},[39,113400,1339],{"class":74},[39,113402,31472],{"class":53},[39,113404,113405],{"class":41,"line":17788},[39,113406,122],{"emptyLinePlaceholder":121},[39,113408,113409],{"class":41,"line":17793},[39,113410,122],{"emptyLinePlaceholder":121},[39,113412,113413,113415,113417,113419,113421],{"class":41,"line":17799},[39,113414,2654],{"class":45},[39,113416,32195],{"class":74},[39,113418,102534],{"class":45},[39,113420,102537],{"class":237},[39,113422,4822],{"class":53},[39,113424,113425],{"class":41,"line":17804},[39,113426,102544],{"class":53},[19,113428,104545],{},[30,113430,113432],{"className":24796,"code":113431,"language":24798,"meta":35,"style":35},"touch ch7_reacher.py\n",[26,113433,113434],{"__ignoreMap":35},[39,113435,113436,113438],{"class":41,"line":42},[39,113437,102258],{"class":49},[39,113439,113440],{"class":237}," ch7_reacher.py\n",[19,113442,111419],{},[30,113444,113446],{"className":24796,"code":113445,"language":24798,"meta":35,"style":35},"python ch7_reacher.py\n",[26,113447,113448],{"__ignoreMap":35},[39,113449,113450,113452],{"class":41,"line":42},[39,113451,31355],{"class":49},[39,113453,113440],{"class":237},[476,113455,102547],{"id":102547},[19,113457,113458],{},"读取 site 坐标：",[30,113460,113462],{"className":31353,"code":113461,"language":31355,"meta":35,"style":35},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[26,113463,113464],{"__ignoreMap":35},[39,113465,113466,113468,113470,113472,113474],{"class":41,"line":42},[39,113467,32922],{"class":45},[39,113469,112831],{"class":49},[39,113471,112834],{"class":53},[39,113473,2427],{"class":74},[39,113475,112839],{"class":53},[19,113477,113478],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113480,111435],{},[30,113482,113484],{"className":31353,"code":113483,"language":31355,"meta":35,"style":35},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[26,113485,113486],{"__ignoreMap":35},[39,113487,113488,113490],{"class":41,"line":42},[39,113489,18019],{"class":45},[39,113491,112943],{"class":53},[19,113493,113494],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113496,110760],{},[30,113498,113500],{"className":31353,"code":113499,"language":31355,"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",[26,113501,113502,113514,113527],{"__ignoreMap":35},[39,113503,113504,113506,113508,113510,113512],{"class":41,"line":42},[39,113505,112571],{"class":53},[39,113507,1117],{"class":45},[39,113509,112576],{"class":53},[39,113511,1793],{"class":45},[39,113513,112581],{"class":53},[39,113515,113516,113519,113521,113523,113525],{"class":41,"line":92},[39,113517,113518],{"class":53},"control_cost ",[39,113520,1117],{"class":45},[39,113522,113012],{"class":74},[39,113524,7594],{"class":45},[39,113526,113017],{"class":53},[39,113528,113529,113531,113533,113535,113537,113539,113541],{"class":41,"line":112},[39,113530,18019],{"class":45},[39,113532,110772],{"class":74},[39,113534,54],{"class":53},[39,113536,1793],{"class":45},[39,113538,112571],{"class":53},[39,113540,1793],{"class":45},[39,113542,113034],{"class":53},[19,113544,113545],{},"奖励由两部分组成：",[328,113547,113548,113553],{},[331,113549,113550,113552],{},[26,113551,112598],{},"：末端离目标越远，奖励越低。",[331,113554,113555,113558],{},[26,113556,113557],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113560,113561],{},"简单控制器：",[30,113563,113565],{"className":31353,"code":113564,"language":31355,"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",[26,113566,113567,113580,113612],{"__ignoreMap":35},[39,113568,113569,113572,113574,113576,113578],{"class":41,"line":42},[39,113570,113571],{"class":53},"error ",[39,113573,1117],{"class":45},[39,113575,113143],{"class":53},[39,113577,1793],{"class":45},[39,113579,113148],{"class":53},[39,113581,113582,113584,113586,113588,113590,113592,113594,113596,113598,113600,113602,113604,113606,113608,113610],{"class":41,"line":92},[39,113583,106846],{"class":53},[39,113585,1457],{"class":74},[39,113587,5524],{"class":53},[39,113589,1117],{"class":45},[39,113591,113165],{"class":53},[39,113593,106235],{"class":74},[39,113595,7594],{"class":45},[39,113597,113172],{"class":53},[39,113599,1345],{"class":74},[39,113601,113177],{"class":53},[39,113603,1793],{"class":45},[39,113605,103378],{"class":74},[39,113607,63],{"class":53},[39,113609,103378],{"class":74},[39,113611,574],{"class":53},[39,113613,113614,113616,113618,113620,113622,113624,113626,113628,113630,113632,113634,113636,113638,113640,113642],{"class":41,"line":112},[39,113615,106846],{"class":53},[39,113617,1483],{"class":74},[39,113619,5524],{"class":53},[39,113621,1117],{"class":45},[39,113623,113165],{"class":53},[39,113625,106235],{"class":74},[39,113627,7594],{"class":45},[39,113629,113172],{"class":53},[39,113631,1457],{"class":74},[39,113633,113177],{"class":53},[39,113635,1793],{"class":45},[39,113637,103378],{"class":74},[39,113639,63],{"class":53},[39,113641,103378],{"class":74},[39,113643,574],{"class":53},[19,113645,113646],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[476,113648,102683],{"id":102683},[30,113650,113651],{"className":31353,"code":113461,"language":31355,"meta":35,"style":35},[26,113652,113653],{"__ignoreMap":35},[39,113654,113655,113657,113659,113661,113663],{"class":41,"line":42},[39,113656,32922],{"class":45},[39,113658,112831],{"class":49},[39,113660,112834],{"class":53},[39,113662,2427],{"class":74},[39,113664,112839],{"class":53},[19,113666,113667,113668,113670,113671,83514,113673,29360],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[26,113669,80785],{}," 是 site 的名字，比如 ",[26,113672,112511],{},[26,113674,112934],{},[30,113676,113678],{"className":31353,"code":113677,"language":31355,"meta":35,"style":35},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[26,113679,113680],{"__ignoreMap":35},[39,113681,113682,113684,113686],{"class":41,"line":42},[39,113683,104609],{"class":53},[39,113685,1117],{"class":45},[39,113687,112848],{"class":53},[19,113689,113690],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[30,113692,113694],{"className":31353,"code":113693,"language":31355,"meta":35,"style":35},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[26,113695,113696,113708],{"__ignoreMap":35},[39,113697,113698,113700,113702,113704,113706],{"class":41,"line":42},[39,113699,2654],{"class":45},[39,113701,104424],{"class":53},[39,113703,2170],{"class":45},[39,113705,315],{"class":74},[39,113707,4822],{"class":53},[39,113709,113710,113712,113714,113716,113718,113720,113722,113724,113726,113728],{"class":41,"line":92},[39,113711,104870],{"class":45},[39,113713,104410],{"class":74},[39,113715,54],{"class":53},[39,113717,1321],{"class":45},[39,113719,112873],{"class":237},[39,113721,2156],{"class":74},[39,113723,80785],{"class":53},[39,113725,2206],{"class":74},[39,113727,1516],{"class":237},[39,113729,574],{"class":53},[19,113731,113732,113733,113736,113737,113739],{},"如果 site 没找到，就主动报错。",[26,113734,113735],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[26,113738,80785],{}," 的值放进字符串里。",[30,113741,113743],{"className":31353,"code":113742,"language":31355,"meta":35,"style":35},"return data.site_xpos[site_id].copy()\n",[26,113744,113745],{"__ignoreMap":35},[39,113746,113747,113749],{"class":41,"line":42},[39,113748,18019],{"class":45},[39,113750,112890],{"class":53},[19,113752,113753,113754,113756,113757,113760],{},"返回这个 site 的世界坐标。",[26,113755,104655],{}," 里的每一行都是一个 site 的 ",[26,113758,113759],{},"(x, y, z)"," 坐标。",[30,113762,113764],{"className":31353,"code":113763,"language":31355,"meta":35,"style":35},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[26,113765,113766],{"__ignoreMap":35},[39,113767,113768,113770,113772],{"class":41,"line":42},[39,113769,32922],{"class":45},[39,113771,112905],{"class":49},[39,113773,112908],{"class":53},[19,113775,113776],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[30,113778,113780],{"className":31353,"code":113779,"language":31355,"meta":35,"style":35},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[26,113781,113782,113794],{"__ignoreMap":35},[39,113783,113784,113786,113788,113790,113792],{"class":41,"line":42},[39,113785,112543],{"class":53},[39,113787,1117],{"class":45},[39,113789,112918],{"class":53},[39,113791,112511],{"class":237},[39,113793,574],{"class":53},[39,113795,113796,113798,113800,113802,113804],{"class":41,"line":92},[39,113797,112553],{"class":53},[39,113799,1117],{"class":45},[39,113801,112918],{"class":53},[39,113803,112934],{"class":237},[39,113805,574],{"class":53},[19,113807,113808],{},"分别读取末端点和目标点的世界坐标。",[30,113810,113811],{"className":31353,"code":113483,"language":31355,"meta":35,"style":35},[26,113812,113813],{"__ignoreMap":35},[39,113814,113815,113817],{"class":41,"line":42},[39,113816,18019],{"class":45},[39,113818,112943],{"class":53},[19,113820,113821],{},"把四部分拼成一个观测数组：",[30,113823,113826],{"className":113824,"code":113825,"language":6267,"meta":35},[6265],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[26,113827,113825],{"__ignoreMap":35},[30,113829,113831],{"className":31353,"code":113830,"language":31355,"meta":35,"style":35},"dist = np.linalg.norm(tip - target)\n",[26,113832,113833],{"__ignoreMap":35},[39,113834,113835,113837,113839,113841,113843],{"class":41,"line":42},[39,113836,112571],{"class":53},[39,113838,1117],{"class":45},[39,113840,112576],{"class":53},[39,113842,1793],{"class":45},[39,113844,112581],{"class":53},[19,113846,113847,113848,113851,113852,113855],{},"计算 tip 到 target 的距离。",[26,113849,113850],{},"tip - target"," 得到一个三维向量，",[26,113853,113854],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113857,15606],{},[30,113859,113862],{"className":113860,"code":113861,"language":6267,"meta":35},[6265],"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",[26,113863,113861],{"__ignoreMap":35},[30,113865,113867],{"className":31353,"code":113866,"language":31355,"meta":35,"style":35},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[26,113868,113869],{"__ignoreMap":35},[39,113870,113871,113873,113875,113877,113879],{"class":41,"line":42},[39,113872,113518],{"class":53},[39,113874,1117],{"class":45},[39,113876,113012],{"class":74},[39,113878,7594],{"class":45},[39,113880,113017],{"class":53},[19,113882,113883,113884,113887,113888,113891],{},"计算动作惩罚。",[26,113885,113886],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[26,113889,113890],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[30,113893,113895],{"className":31353,"code":113894,"language":31355,"meta":35,"style":35},"return float(-dist - control_cost)\n",[26,113896,113897],{"__ignoreMap":35},[39,113898,113899,113901,113903,113905,113907,113909,113911],{"class":41,"line":42},[39,113900,18019],{"class":45},[39,113902,110772],{"class":74},[39,113904,54],{"class":53},[39,113906,1793],{"class":45},[39,113908,112571],{"class":53},[39,113910,1793],{"class":45},[39,113912,113034],{"class":53},[19,113914,113915],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[30,113917,113918],{"className":31353,"code":111778,"language":31355,"meta":35,"style":35},[26,113919,113920],{"__ignoreMap":35},[39,113921,113922,113924,113926],{"class":41,"line":42},[39,113923,111785],{"class":53},[39,113925,1117],{"class":45},[39,113927,105736],{"class":74},[19,113929,113930],{},"累计奖励变量，记录整个运行过程的总分。",[30,113932,113934],{"className":31353,"code":113933,"language":31355,"meta":35,"style":35},"for step in range(500):\n",[26,113935,113936],{"__ignoreMap":35},[39,113937,113938,113940,113942,113944,113946,113948,113950],{"class":41,"line":42},[39,113939,4108],{"class":45},[39,113941,32591],{"class":53},[39,113943,27018],{"class":45},[39,113945,33418],{"class":74},[39,113947,54],{"class":53},[39,113949,66049],{"class":74},[39,113951,31761],{"class":53},[19,113953,113954],{},"运行 500 个控制步。",[30,113956,113957],{"className":31353,"code":105518,"language":31355,"meta":35,"style":35},[26,113958,113959],{"__ignoreMap":35},[39,113960,113961],{"class":41,"line":42},[39,113962,105518],{"class":53},[19,113964,113965,113966,101993,113968,113970],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[26,113967,104206],{},[26,113969,104209],{}," 是当前状态下的坐标。",[30,113972,113974],{"className":31353,"code":113973,"language":31355,"meta":35,"style":35},"error = target - tip\n",[26,113975,113976],{"__ignoreMap":35},[39,113977,113978,113980,113982,113984,113986],{"class":41,"line":42},[39,113979,113571],{"class":53},[39,113981,1117],{"class":45},[39,113983,113143],{"class":53},[39,113985,1793],{"class":45},[39,113987,113148],{"class":53},[19,113989,113990],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[30,113992,113994],{"className":31353,"code":113993,"language":31355,"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",[26,113995,113996,114028],{"__ignoreMap":35},[39,113997,113998,114000,114002,114004,114006,114008,114010,114012,114014,114016,114018,114020,114022,114024,114026],{"class":41,"line":42},[39,113999,106846],{"class":53},[39,114001,1457],{"class":74},[39,114003,5524],{"class":53},[39,114005,1117],{"class":45},[39,114007,113165],{"class":53},[39,114009,106235],{"class":74},[39,114011,7594],{"class":45},[39,114013,113172],{"class":53},[39,114015,1345],{"class":74},[39,114017,113177],{"class":53},[39,114019,1793],{"class":45},[39,114021,103378],{"class":74},[39,114023,63],{"class":53},[39,114025,103378],{"class":74},[39,114027,574],{"class":53},[39,114029,114030,114032,114034,114036,114038,114040,114042,114044,114046,114048,114050,114052,114054,114056,114058],{"class":41,"line":92},[39,114031,106846],{"class":53},[39,114033,1483],{"class":74},[39,114035,5524],{"class":53},[39,114037,1117],{"class":45},[39,114039,113165],{"class":53},[39,114041,106235],{"class":74},[39,114043,7594],{"class":45},[39,114045,113172],{"class":53},[39,114047,1457],{"class":74},[39,114049,113177],{"class":53},[39,114051,1793],{"class":45},[39,114053,103378],{"class":74},[39,114055,63],{"class":53},[39,114057,103378],{"class":74},[39,114059,574],{"class":53},[19,114061,114062,114063,114066],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[26,114064,114065],{},"error -> ctrl -> step"," 的流程。",[30,114068,114069],{"className":31353,"code":105480,"language":31355,"meta":35,"style":35},[26,114070,114071],{"__ignoreMap":35},[39,114072,114073],{"class":41,"line":42},[39,114074,105480],{"class":53},[19,114076,114077],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[30,114079,114081],{"className":31353,"code":114080,"language":31355,"meta":35,"style":35},"obs = get_obs(model, data)\n",[26,114082,114083],{"__ignoreMap":35},[39,114084,114085,114087,114089],{"class":41,"line":42},[39,114086,111829],{"class":53},[39,114088,1117],{"class":45},[39,114090,113266],{"class":53},[19,114092,114093,114094,114097],{},"读取最新观测。后面打印 ",[26,114095,114096],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114099,103291],{"id":103290},[19,114101,114102],{},"观测维度为:",[30,114104,114107],{"className":114105,"code":114106,"language":6267,"meta":35},[6265],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[26,114108,114106],{"__ignoreMap":35},[19,114110,114111],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114113,114114],{},"程序每 100 步打印：",[30,114116,114119],{"className":114117,"code":114118,"language":6267,"meta":35},[6265],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[26,114120,114118],{"__ignoreMap":35},[19,114122,114123,114124,114126],{},"如果控制有效，你应该看到最终 ",[26,114125,104206],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114128,103323],{"id":103322},[328,114130,114131,114134,114137,114143,114149,114156,114166],{},[331,114132,114133],{},"修改目标点位置。",[331,114135,114136],{},"重新运行，观察最终 tip 是否变化。",[331,114138,114139,114140,114142],{},"把 gravity 改成 ",[26,114141,103564],{},"，观察控制是否变差。",[331,114144,112156,114145,112160,114147,29360],{},[26,114146,103133],{},[26,114148,1345],{},[331,114150,103386,114151,103389,114153,114155],{},[26,114152,111571],{},[26,114154,108282],{},"，观察机械臂是否更难移动。",[331,114157,103386,114158,83505,114160,103389,114162,114165],{},[26,114159,104209],{},[26,114161,105121],{},[26,114163,114164],{},"0.2 0 0.6","，观察 reward 和 final tip。",[331,114167,114168],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114170,103428],{"id":103427},[476,114172,114174],{"id":114173},"site-not-found",[26,114175,114176],{},"site not found",[19,114178,114179,114180,101993,114183,29360],{},"检查 XML 中是否有 ",[26,114181,114182],{},"site name=\"tip\"",[26,114184,114185],{},"site name=\"target\"",[476,114187,114188],{"id":114188},"机械臂完全不动",[19,114190,103498],{},[328,114192,114193,114198,114201,114206],{},[331,114194,114195,114197],{},[26,114196,103133],{}," 是否为 2",[331,114199,114200],{},"actuator 是否引用正确 joint",[331,114202,114203,114205],{},[26,114204,102051],{}," 是否被赋值",[331,114207,114208,114209],{},"是否执行了 ",[26,114210,101660],{},[476,114212,114213],{"id":114213},"控制效果不好",[19,114215,114216],{},"正常。本章重点不是控制器最优，而是任务结构:",[30,114218,114221],{"className":114219,"code":114220,"language":6267,"meta":35},[6265],"obs → action → mj_step → reward → next_obs\n",[26,114222,114220],{"__ignoreMap":35},[476,114224,114226],{"id":114225},"tip-坐标不变化","tip 坐标不变化",[19,114228,103550],{},[328,114230,114231,114236,114244,114253],{},[331,114232,114233,114234,29360],{},"是否每步调用了 ",[26,114235,101660],{},[331,114237,114238,114239,101993,114241,29360],{},"是否写入了 ",[26,114240,107101],{},[26,114242,114243],{},"data.ctrl[1]",[331,114245,114246,114247,1478,114250,29360],{},"actuator 是否正确引用 ",[26,114248,114249],{},"joint1",[26,114251,114252],{},"joint2",[331,114254,114255],{},"控制输入是否太小。",[476,114257,114258],{"id":114258},"目标点不会动",[19,114260,114261],{},"本章的 target 是固定 site：",[30,114263,114265],{"className":54042,"code":114264,"language":54044,"meta":35,"style":35},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[26,114266,114267],{"__ignoreMap":35},[39,114268,114269,114271,114273,114275,114277,114279,114281,114283,114286],{"class":41,"line":42},[39,114270,2170],{"class":53},[39,114272,104185],{"class":52275},[39,114274,15893],{"class":49},[39,114276,1117],{"class":53},[39,114278,112934],{"class":237},[39,114280,102081],{"class":49},[39,114282,1117],{"class":53},[39,114284,114285],{"class":237},"\"0.5 0 0.4\"",[39,114287,114288],{"class":53}," ...\u002F>\n",[19,114290,114291,114292,114294],{},"它直接挂在 ",[26,114293,102816],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[476,114296,114297],{"id":114297},"机械臂不像真实机械臂",[19,114299,114300],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114302,103582],{"id":103581},[19,114304,114305],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114307,114308],{},"核心公式：",[30,114310,114313],{"className":114311,"code":114312,"language":6267,"meta":35},[6265],"distance = ||tip - target||\nreward = -distance - action_cost\n",[26,114314,114312],{"__ignoreMap":35},[19,114316,114317],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1192,114319,114320],{},"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":92,"depth":92,"links":114322},[114323,114324,114325,114330,114334,114335,114336,114344],{"id":101621,"depth":92,"text":101622},{"id":101744,"depth":92,"text":101745},{"id":102019,"depth":92,"text":102020,"children":114326},[114327,114328,114329],{"id":112526,"depth":112,"text":112527},{"id":112602,"depth":112,"text":112602},{"id":112632,"depth":112,"text":112633},{"id":102227,"depth":92,"text":102228,"children":114331},[114332,114333],{"id":102547,"depth":112,"text":102547},{"id":102683,"depth":112,"text":102683},{"id":103290,"depth":92,"text":103291},{"id":103322,"depth":92,"text":103323},{"id":103427,"depth":92,"text":103428,"children":114337},[114338,114339,114340,114341,114342,114343],{"id":114173,"depth":112,"text":114176},{"id":114188,"depth":112,"text":114188},{"id":114213,"depth":112,"text":114213},{"id":114225,"depth":112,"text":114226},{"id":114258,"depth":112,"text":114258},{"id":114297,"depth":112,"text":114297},{"id":103581,"depth":92,"text":103582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112330,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114351,"title":114352,"body":114353,"description":35,"extension":1203,"meta":117815,"navigation":121,"path":117816,"seo":117817,"stem":117818,"__hash__":117819},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114354,"toc":117786},[114355,114358,114360,114363,114366,114391,114394,114400,114403,114409,114411,114413,114437,114439,114457,114459,114502,114504,114531,114533,114536,114588,114591,114597,114606,114609,114647,114650,114689,114692,114700,114707,114710,114716,114718,114772,114779,114824,114827,114831,114847,114857,114859,116120,116122,116134,116136,116147,116149,116152,116173,116176,116179,116212,116218,116221,116254,116257,116260,116301,116306,116320,116323,116336,116341,116364,116366,116381,116391,116406,116413,116433,116448,116466,116469,116486,116494,116510,116516,116548,116561,116593,116603,116638,116652,116698,116712,116754,116765,116778,116784,116817,116820,116847,116857,116897,116907,116924,116931,116949,116952,116993,117006,117021,117024,117047,117050,117062,117065,117084,117089,117110,117113,117128,117131,117165,117177,117192,117195,117220,117223,117242,117245,117277,117280,117304,117310,117340,117347,117360,117363,117365,117367,117373,117376,117379,117391,117394,117396,117450,117452,117456,117462,117471,117474,117481,117483,117506,117509,117513,117515,117533,117539,117541,117574,117577,117583,117587,117590,117610,117615,117619,117626,117646,117651,117655,117658,117678,117681,117767,117771,117774,117780,117783],[10,114356,114352],{"id":114357},"_8gymnasium-风格强化学习接口基础",[14,114359,101622],{"id":101621},[19,114361,114362],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114364,114365],{},"你将实现:",[30,114367,114369],{"className":31353,"code":114368,"language":31355,"meta":35,"style":35},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[26,114370,114371,114381],{"__ignoreMap":35},[39,114372,114373,114376,114378],{"class":41,"line":42},[39,114374,114375],{"class":53},"obs, info ",[39,114377,1117],{"class":45},[39,114379,114380],{"class":53}," env.reset()\n",[39,114382,114383,114386,114388],{"class":41,"line":92},[39,114384,114385],{"class":53},"obs, reward, terminated, truncated, info ",[39,114387,1117],{"class":45},[39,114389,114390],{"class":53}," env.step(action)\n",[19,114392,114393],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114395,114396,114397,114399],{},"前面章节的代码都是“脚本式”的：在 ",[26,114398,103270],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114401,114402],{},"可以先记住 Gymnasium 环境的核心交互：",[30,114404,114407],{"className":114405,"code":114406,"language":6267,"meta":35},[6265],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[26,114408,114406],{"__ignoreMap":35},[14,114410,101745],{"id":101744},[19,114412,101748],{},[30,114414,114415],{"className":24796,"code":105363,"language":24798,"meta":35,"style":35},[26,114416,114417],{"__ignoreMap":35},[39,114418,114419,114421,114423,114425,114427,114429,114431,114433,114435],{"class":41,"line":42},[39,114420,25551],{"class":49},[39,114422,27290],{"class":237},[39,114424,24808],{"class":237},[39,114426,27375],{"class":74},[39,114428,105378],{"class":237},[39,114430,101773],{"class":237},[39,114432,103476],{"class":237},[39,114434,101789],{"class":237},[39,114436,105387],{"class":237},[19,114438,103794],{},[30,114440,114442],{"className":24796,"code":114441,"language":24798,"meta":35,"style":35},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[26,114443,114444],{"__ignoreMap":35},[39,114445,114446,114448,114450,114452,114454],{"class":41,"line":42},[39,114447,24805],{"class":49},[39,114449,24808],{"class":237},[39,114451,101905],{"class":237},[39,114453,108686],{"class":237},[39,114455,114456],{"class":237}," gymnasium\n",[19,114458,103811],{},[30,114460,114462],{"className":24796,"code":114461,"language":24798,"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",[26,114463,114464,114481,114490],{"__ignoreMap":35},[39,114465,114466,114468,114470,114472,114475,114477,114479],{"class":41,"line":42},[39,114467,31305],{"class":49},[39,114469,30151],{"class":237},[39,114471,26090],{"class":74},[39,114473,114474],{"class":237}," mujoco-gym-api",[39,114476,101950],{"class":237},[39,114478,101953],{"class":74},[39,114480,101956],{"class":74},[39,114482,114483,114485,114487],{"class":41,"line":92},[39,114484,31305],{"class":49},[39,114486,101963],{"class":237},[39,114488,114489],{"class":237}," mujoco-gym-api\n",[39,114491,114492,114494,114496,114498,114500],{"class":41,"line":112},[39,114493,24805],{"class":49},[39,114495,24808],{"class":237},[39,114497,101905],{"class":237},[39,114499,108686],{"class":237},[39,114501,114456],{"class":237},[19,114503,101979],{},[328,114505,114506,114516,114519,114525],{},[331,114507,114508,114509,114512,114513,29360],{},"本章使用 ",[26,114510,114511],{},"gymnasium","，不是旧版 ",[26,114514,114515],{},"gym",[331,114517,114518],{},"Gymnasium API 与旧 Gym API 有差异。",[331,114520,114521,114522,29360],{},"旧 Gym 常见返回值是 4 个: ",[26,114523,114524],{},"obs, reward, done, info",[331,114526,114527,114528,29360],{},"Gymnasium 返回值是 5 个: ",[26,114529,114530],{},"obs, reward, terminated, truncated, info",[14,114532,102020],{"id":102019},[19,114534,114535],{},"强化学习环境接口包含:",[1404,114537,114538,114547],{},[1407,114539,114540],{},[1410,114541,114542,114545],{},[1413,114543,114544],{"align":24710},"方法",[1413,114546,103671],{"align":24710},[1450,114548,114549,114559,114569,114579],{},[1410,114550,114551,114556],{},[1455,114552,114553],{"align":24710},[26,114554,114555],{},"reset()",[1455,114557,114558],{"align":24710},"重置环境",[1410,114560,114561,114566],{},[1455,114562,114563],{"align":24710},[26,114564,114565],{},"step(action)",[1455,114567,114568],{"align":24710},"执行动作",[1410,114570,114571,114576],{},[1455,114572,114573],{"align":24710},[26,114574,114575],{},"observation_space",[1455,114577,114578],{"align":24710},"观测空间",[1410,114580,114581,114586],{},[1455,114582,114583],{"align":24710},[26,114584,114585],{},"action_space",[1455,114587,24628],{"align":24710},[19,114589,114590],{},"一个最小环境需要完成:",[30,114592,114595],{"className":114593,"code":114594,"language":6267,"meta":35},[6265],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[26,114596,114594],{"__ignoreMap":35},[476,114598,114600,101993,114603,105613],{"id":114599},"terminated-和-truncated-的区别",[26,114601,114602],{},"terminated",[26,114604,114605],{},"truncated",[19,114607,114608],{},"Gymnasium 把“结束”拆成两个概念：",[1404,114610,114611,114621],{},[1407,114612,114613],{},[1410,114614,114615,114617,114619],{},[1413,114616,105549],{"align":24710},[1413,114618,101675],{"align":24710},[1413,114620,22160],{"align":24710},[1450,114622,114623,114635],{},[1410,114624,114625,114629,114632],{},[1455,114626,114627],{"align":24710},[26,114628,114602],{},[1455,114630,114631],{"align":24710},"任务自然结束",[1455,114633,114634],{"align":24710},"机械臂到达目标、机器人摔倒",[1410,114636,114637,114641,114644],{},[1455,114638,114639],{"align":24710},[26,114640,114605],{},[1455,114642,114643],{"align":24710},"因外部限制截断",[1455,114645,114646],{"align":24710},"达到最大步数、时间限制",[19,114648,114649],{},"本章中：",[30,114651,114653],{"className":31353,"code":114652,"language":31355,"meta":35,"style":35},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[26,114654,114655,114670],{"__ignoreMap":35},[39,114656,114657,114660,114662,114665,114667],{"class":41,"line":42},[39,114658,114659],{"class":53},"terminated ",[39,114661,1117],{"class":45},[39,114663,114664],{"class":53}," dist ",[39,114666,2170],{"class":45},[39,114668,114669],{"class":74}," 0.05\n",[39,114671,114672,114675,114677,114679,114682,114684,114686],{"class":41,"line":92},[39,114673,114674],{"class":53},"truncated ",[39,114676,1117],{"class":45},[39,114678,39848],{"class":74},[39,114680,114681],{"class":53},".steps ",[39,114683,2820],{"class":45},[39,114685,39848],{"class":74},[39,114687,114688],{"class":53},".max_steps\n",[19,114690,114691],{},"也就是：",[328,114693,114694,114697],{},[331,114695,114696],{},"末端距离目标小于 0.05，任务成功结束。",[331,114698,114699],{},"步数超过上限，episode 被截断。",[476,114701,114703,101993,114705],{"id":114702},"observation_space-和-action_space",[26,114704,114575],{},[26,114706,114585],{},[19,114708,114709],{},"这两个对象告诉算法：",[30,114711,114714],{"className":114712,"code":114713,"language":6267,"meta":35},[6265],"观测长什么样\n动作允许多大\n",[26,114715,114713],{"__ignoreMap":35},[19,114717,15606],{},[30,114719,114721],{"className":31353,"code":114720,"language":31355,"meta":35,"style":35},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[26,114722,114723],{"__ignoreMap":35},[39,114724,114725,114727,114730,114732,114735,114738,114741,114743,114745,114748,114750,114752,114754,114756,114758,114760,114762,114765,114767,114769],{"class":41,"line":42},[39,114726,31798],{"class":74},[39,114728,114729],{"class":53},".action_space ",[39,114731,1117],{"class":45},[39,114733,114734],{"class":53}," spaces.Box(",[39,114736,114737],{"class":59},"low",[39,114739,114740],{"class":45},"=-",[39,114742,103378],{"class":74},[39,114744,63],{"class":53},[39,114746,114747],{"class":59},"high",[39,114749,1117],{"class":45},[39,114751,103378],{"class":74},[39,114753,63],{"class":53},[39,114755,96938],{"class":59},[39,114757,1117],{"class":45},[39,114759,54],{"class":53},[39,114761,1345],{"class":74},[39,114763,114764],{"class":53},",), ",[39,114766,94475],{"class":59},[39,114768,1117],{"class":45},[39,114770,114771],{"class":53},"np.float32)\n",[19,114773,114774,114775,114778],{},"表示动作是 2 维数组，每个值都在 ",[26,114776,114777],{},"[-1, 1]"," 范围内。",[30,114780,114782],{"className":31353,"code":114781,"language":31355,"meta":35,"style":35},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[26,114783,114784],{"__ignoreMap":35},[39,114785,114786,114788,114791,114793,114795,114797,114799,114802,114804,114806,114808,114810,114812,114814,114816,114818,114820,114822],{"class":41,"line":42},[39,114787,31798],{"class":74},[39,114789,114790],{"class":53},".observation_space ",[39,114792,1117],{"class":45},[39,114794,114734],{"class":53},[39,114796,114737],{"class":59},[39,114798,114740],{"class":45},[39,114800,114801],{"class":53},"np.inf, ",[39,114803,114747],{"class":59},[39,114805,1117],{"class":45},[39,114807,114801],{"class":53},[39,114809,96938],{"class":59},[39,114811,1117],{"class":45},[39,114813,54],{"class":53},[39,114815,423],{"class":74},[39,114817,114764],{"class":53},[39,114819,94475],{"class":59},[39,114821,1117],{"class":45},[39,114823,114771],{"class":53},[19,114825,114826],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[476,114828,114830],{"id":114829},"frame_skip-是什么","frame_skip 是什么",[30,114832,114834],{"className":31353,"code":114833,"language":31355,"meta":35,"style":35},"self.frame_skip = 5\n",[26,114835,114836],{"__ignoreMap":35},[39,114837,114838,114840,114843,114845],{"class":41,"line":42},[39,114839,31798],{"class":74},[39,114841,114842],{"class":53},".frame_skip ",[39,114844,1117],{"class":45},[39,114846,55402],{"class":74},[19,114848,114849,114850,114853,114854,114856],{},"表示外部调用一次 ",[26,114851,114852],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[26,114855,102190],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114858,102228],{"id":102227},[30,114860,114862],{"className":31353,"code":114861,"language":31355,"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",[26,114863,114864,114876,114882,114892,114903,114907,114911,114919,114924,114928,114932,114936,114940,114944,114948,114952,114957,114961,114965,114969,114974,114978,114982,114986,114990,114994,114998,115002,115006,115010,115014,115018,115022,115026,115044,115059,115063,115076,115086,115101,115118,115122,115143,115162,115187,115201,115205,115215,115227,115237,115241,115283,115321,115325,115335,115351,115366,115385,115392,115396,115409,115424,115439,115452,115471,115487,115491,115532,115547,115562,115566,115605,115616,115629,115633,115643,115652,115656,115666,115681,115699,115703,115714,115731,115744,115748,115758,115762,115773,115784,115788,115802,115816,115832,115836,115849,115866,115881,115888,115892,115896,115908,115918,115936,115948,115960,115964,115972,115988,115997,116006,116014,116056,116069,116074,116078,116096,116100,116104,116116],{"__ignoreMap":35},[39,114865,114866,114868,114871,114873],{"class":41,"line":42},[39,114867,31367],{"class":45},[39,114869,114870],{"class":53}," gymnasium ",[39,114872,32358],{"class":45},[39,114874,114875],{"class":53}," gym\n",[39,114877,114878,114880],{"class":41,"line":92},[39,114879,31367],{"class":45},[39,114881,102276],{"class":53},[39,114883,114884,114886,114888,114890],{"class":41,"line":112},[39,114885,31367],{"class":45},[39,114887,32355],{"class":53},[39,114889,32358],{"class":45},[39,114891,32361],{"class":53},[39,114893,114894,114896,114898,114900],{"class":41,"line":118},[39,114895,31712],{"class":45},[39,114897,114870],{"class":53},[39,114899,31367],{"class":45},[39,114901,114902],{"class":53}," spaces\n",[39,114904,114905],{"class":41,"line":125},[39,114906,122],{"emptyLinePlaceholder":121},[39,114908,114909],{"class":41,"line":132},[39,114910,122],{"emptyLinePlaceholder":121},[39,114912,114913,114915,114917],{"class":41,"line":138},[39,114914,102289],{"class":74},[39,114916,71],{"class":45},[39,114918,102294],{"class":237},[39,114920,114921],{"class":41,"line":169},[39,114922,114923],{"class":237},"\u003Cmujoco model=\"gym_reacher\">\n",[39,114925,114926],{"class":41,"line":190},[39,114927,112713],{"class":237},[39,114929,114930],{"class":41,"line":202},[39,114931,122],{"emptyLinePlaceholder":121},[39,114933,114934],{"class":41,"line":207},[39,114935,102313],{"class":237},[39,114937,114938],{"class":41,"line":212},[39,114939,112731],{"class":237},[39,114941,114942],{"class":41,"line":223},[39,114943,122],{"emptyLinePlaceholder":121},[39,114945,114946],{"class":41,"line":228},[39,114947,112740],{"class":237},[39,114949,114950],{"class":41,"line":263},[39,114951,112745],{"class":237},[39,114953,114954],{"class":41,"line":287},[39,114955,114956],{"class":237},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[39,114958,114959],{"class":41,"line":292},[39,114960,122],{"emptyLinePlaceholder":121},[39,114962,114963],{"class":41,"line":305},[39,114964,112759],{"class":237},[39,114966,114967],{"class":41,"line":310},[39,114968,112764],{"class":237},[39,114970,114971],{"class":41,"line":321},[39,114972,114973],{"class":237},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[39,114975,114976],{"class":41,"line":713},[39,114977,112774],{"class":237},[39,114979,114980],{"class":41,"line":718},[39,114981,107413],{"class":237},[39,114983,114984],{"class":41,"line":723},[39,114985,102342],{"class":237},[39,114987,114988],{"class":41,"line":729},[39,114989,102347],{"class":237},[39,114991,114992],{"class":41,"line":735},[39,114993,122],{"emptyLinePlaceholder":121},[39,114995,114996],{"class":41,"line":741},[39,114997,107430],{"class":237},[39,114999,115000],{"class":41,"line":747},[39,115001,112799],{"class":237},[39,115003,115004],{"class":41,"line":753},[39,115005,112804],{"class":237},[39,115007,115008],{"class":41,"line":758},[39,115009,107440],{"class":237},[39,115011,115012],{"class":41,"line":763},[39,115013,102352],{"class":237},[39,115015,115016],{"class":41,"line":772},[39,115017,96673],{"class":237},[39,115019,115020],{"class":41,"line":777},[39,115021,122],{"emptyLinePlaceholder":121},[39,115023,115024],{"class":41,"line":785},[39,115025,122],{"emptyLinePlaceholder":121},[39,115027,115028,115030,115033,115035,115037,115039,115042],{"class":41,"line":796},[39,115029,15667],{"class":45},[39,115031,115032],{"class":49}," ReacherEnv",[39,115034,54],{"class":53},[39,115036,114515],{"class":49},[39,115038,1819],{"class":53},[39,115040,115041],{"class":49},"Env",[39,115043,31761],{"class":53},[39,115045,115046,115049,115051,115053,115056],{"class":41,"line":808},[39,115047,115048],{"class":53},"    metadata ",[39,115050,1117],{"class":45},[39,115052,5529],{"class":53},[39,115054,115055],{"class":237},"\"render_modes\"",[39,115057,115058],{"class":53},": []}\n",[39,115060,115061],{"class":41,"line":823},[39,115062,122],{"emptyLinePlaceholder":121},[39,115064,115065,115067,115069,115072,115074],{"class":41,"line":839},[39,115066,31776],{"class":45},[39,115068,31779],{"class":74},[39,115070,115071],{"class":53},"(self) -> ",[39,115073,96661],{"class":74},[39,115075,4822],{"class":53},[39,115077,115078,115080,115082,115084],{"class":41,"line":845},[39,115079,31792],{"class":74},[39,115081,18234],{"class":53},[39,115083,31804],{"class":74},[39,115085,537],{"class":53},[39,115087,115088,115090,115093,115095,115097,115099],{"class":41,"line":856},[39,115089,31820],{"class":74},[39,115091,115092],{"class":53},".model ",[39,115094,1117],{"class":45},[39,115096,102387],{"class":53},[39,115098,102289],{"class":74},[39,115100,574],{"class":53},[39,115102,115103,115105,115108,115110,115113,115115],{"class":41,"line":861},[39,115104,31820],{"class":74},[39,115106,115107],{"class":53},".data ",[39,115109,1117],{"class":45},[39,115111,115112],{"class":53}," mujoco.MjData(",[39,115114,31798],{"class":74},[39,115116,115117],{"class":53},".model)\n",[39,115119,115120],{"class":41,"line":870},[39,115121,122],{"emptyLinePlaceholder":121},[39,115123,115124,115126,115129,115131,115134,115136,115139,115141],{"class":41,"line":9084},[39,115125,31820],{"class":74},[39,115127,115128],{"class":53},".tip_site_id ",[39,115130,1117],{"class":45},[39,115132,115133],{"class":53}," mujoco.mj_name2id(",[39,115135,31798],{"class":74},[39,115137,115138],{"class":53},".model, mujoco.mjtObj.mjOBJ_SITE, ",[39,115140,112511],{"class":237},[39,115142,574],{"class":53},[39,115144,115145,115147,115150,115152,115154,115156,115158,115160],{"class":41,"line":9090},[39,115146,31820],{"class":74},[39,115148,115149],{"class":53},".target_site_id ",[39,115151,1117],{"class":45},[39,115153,115133],{"class":53},[39,115155,31798],{"class":74},[39,115157,115138],{"class":53},[39,115159,112934],{"class":237},[39,115161,574],{"class":53},[39,115163,115164,115166,115168,115170,115172,115174,115177,115179,115181,115183,115185],{"class":41,"line":9102},[39,115165,3590],{"class":45},[39,115167,39848],{"class":74},[39,115169,115128],{"class":53},[39,115171,2170],{"class":45},[39,115173,315],{"class":74},[39,115175,115176],{"class":45}," or",[39,115178,39848],{"class":74},[39,115180,115149],{"class":53},[39,115182,2170],{"class":45},[39,115184,315],{"class":74},[39,115186,4822],{"class":53},[39,115188,115189,115192,115194,115196,115199],{"class":41,"line":9114},[39,115190,115191],{"class":45},"            raise",[39,115193,104410],{"class":74},[39,115195,54],{"class":53},[39,115197,115198],{"class":237},"\"required sites not found\"",[39,115200,574],{"class":53},[39,115202,115203],{"class":41,"line":9126},[39,115204,122],{"emptyLinePlaceholder":121},[39,115206,115207,115209,115211,115213],{"class":41,"line":10784},[39,115208,31820],{"class":74},[39,115210,114842],{"class":53},[39,115212,1117],{"class":45},[39,115214,55402],{"class":74},[39,115216,115217,115219,115222,115224],{"class":41,"line":10809},[39,115218,31820],{"class":74},[39,115220,115221],{"class":53},".max_steps ",[39,115223,1117],{"class":45},[39,115225,115226],{"class":74}," 200\n",[39,115228,115229,115231,115233,115235],{"class":41,"line":10832},[39,115230,31820],{"class":74},[39,115232,114681],{"class":53},[39,115234,1117],{"class":45},[39,115236,48308],{"class":74},[39,115238,115239],{"class":41,"line":10856},[39,115240,122],{"emptyLinePlaceholder":121},[39,115242,115243,115245,115247,115249,115251,115253,115255,115257,115259,115261,115263,115265,115267,115269,115271,115273,115275,115277,115279,115281],{"class":41,"line":10861},[39,115244,31820],{"class":74},[39,115246,114729],{"class":53},[39,115248,1117],{"class":45},[39,115250,114734],{"class":53},[39,115252,114737],{"class":59},[39,115254,114740],{"class":45},[39,115256,103378],{"class":74},[39,115258,63],{"class":53},[39,115260,114747],{"class":59},[39,115262,1117],{"class":45},[39,115264,103378],{"class":74},[39,115266,63],{"class":53},[39,115268,96938],{"class":59},[39,115270,1117],{"class":45},[39,115272,54],{"class":53},[39,115274,1345],{"class":74},[39,115276,114764],{"class":53},[39,115278,94475],{"class":59},[39,115280,1117],{"class":45},[39,115282,114771],{"class":53},[39,115284,115285,115287,115289,115291,115293,115295,115297,115299,115301,115303,115305,115307,115309,115311,115313,115315,115317,115319],{"class":41,"line":10866},[39,115286,31820],{"class":74},[39,115288,114790],{"class":53},[39,115290,1117],{"class":45},[39,115292,114734],{"class":53},[39,115294,114737],{"class":59},[39,115296,114740],{"class":45},[39,115298,114801],{"class":53},[39,115300,114747],{"class":59},[39,115302,1117],{"class":45},[39,115304,114801],{"class":53},[39,115306,96938],{"class":59},[39,115308,1117],{"class":45},[39,115310,54],{"class":53},[39,115312,423],{"class":74},[39,115314,114764],{"class":53},[39,115316,94475],{"class":59},[39,115318,1117],{"class":45},[39,115320,114771],{"class":53},[39,115322,115323],{"class":41,"line":10871},[39,115324,122],{"emptyLinePlaceholder":121},[39,115326,115327,115329,115332],{"class":41,"line":10880},[39,115328,31776],{"class":45},[39,115330,115331],{"class":49}," _get_obs",[39,115333,115334],{"class":53},"(self) -> np.ndarray:\n",[39,115336,115337,115339,115341,115343,115346,115348],{"class":41,"line":10885},[39,115338,113112],{"class":53},[39,115340,1117],{"class":45},[39,115342,39848],{"class":74},[39,115344,115345],{"class":53},".data.site_xpos[",[39,115347,31798],{"class":74},[39,115349,115350],{"class":53},".tip_site_id].copy()\n",[39,115352,115353,115355,115357,115359,115361,115363],{"class":41,"line":10891},[39,115354,113125],{"class":53},[39,115356,1117],{"class":45},[39,115358,39848],{"class":74},[39,115360,115345],{"class":53},[39,115362,31798],{"class":74},[39,115364,115365],{"class":53},".target_site_id].copy()\n",[39,115367,115368,115370,115372,115375,115377,115380,115382],{"class":41,"line":10912},[39,115369,111157],{"class":53},[39,115371,1117],{"class":45},[39,115373,115374],{"class":53}," np.concatenate([",[39,115376,31798],{"class":74},[39,115378,115379],{"class":53},".data.qpos.copy(), ",[39,115381,31798],{"class":74},[39,115383,115384],{"class":53},".data.qvel.copy(), tip, target])\n",[39,115386,115387,115389],{"class":41,"line":10918},[39,115388,15725],{"class":45},[39,115390,115391],{"class":53}," obs.astype(np.float32)\n",[39,115393,115394],{"class":41,"line":10932},[39,115395,122],{"emptyLinePlaceholder":121},[39,115397,115398,115400,115403,115405,115407],{"class":41,"line":10938},[39,115399,31776],{"class":45},[39,115401,115402],{"class":49}," _get_reward",[39,115404,115071],{"class":53},[39,115406,1311],{"class":74},[39,115408,4822],{"class":53},[39,115410,115411,115413,115415,115417,115419,115421],{"class":41,"line":10965},[39,115412,113112],{"class":53},[39,115414,1117],{"class":45},[39,115416,39848],{"class":74},[39,115418,115345],{"class":53},[39,115420,31798],{"class":74},[39,115422,115423],{"class":53},".tip_site_id]\n",[39,115425,115426,115428,115430,115432,115434,115436],{"class":41,"line":10974},[39,115427,113125],{"class":53},[39,115429,1117],{"class":45},[39,115431,39848],{"class":74},[39,115433,115345],{"class":53},[39,115435,31798],{"class":74},[39,115437,115438],{"class":53},".target_site_id]\n",[39,115440,115441,115444,115446,115448,115450],{"class":41,"line":10980},[39,115442,115443],{"class":53},"        dist ",[39,115445,1117],{"class":45},[39,115447,112576],{"class":53},[39,115449,1793],{"class":45},[39,115451,112581],{"class":53},[39,115453,115454,115457,115459,115461,115463,115466,115468],{"class":41,"line":10988},[39,115455,115456],{"class":53},"        control_cost ",[39,115458,1117],{"class":45},[39,115460,113012],{"class":74},[39,115462,7594],{"class":45},[39,115464,115465],{"class":53}," np.sum(np.square(",[39,115467,31798],{"class":74},[39,115469,115470],{"class":53},".data.ctrl))\n",[39,115472,115473,115475,115477,115479,115481,115483,115485],{"class":41,"line":10993},[39,115474,15725],{"class":45},[39,115476,110772],{"class":74},[39,115478,54],{"class":53},[39,115480,1793],{"class":45},[39,115482,112571],{"class":53},[39,115484,1793],{"class":45},[39,115486,113034],{"class":53},[39,115488,115489],{"class":41,"line":17577},[39,115490,122],{"emptyLinePlaceholder":121},[39,115492,115493,115495,115498,115501,115503,115506,115508,115510,115512,115514,115516,115519,115522,115524,115526,115528,115530],{"class":41,"line":17583},[39,115494,31776],{"class":45},[39,115496,115497],{"class":49}," reset",[39,115499,115500],{"class":53},"(self, ",[39,115502,1717],{"class":45},[39,115504,115505],{"class":53},", seed: ",[39,115507,46],{"class":74},[39,115509,26084],{"class":45},[39,115511,39908],{"class":74},[39,115513,71],{"class":45},[39,115515,39908],{"class":74},[39,115517,115518],{"class":53},", options: ",[39,115520,115521],{"class":74},"dict",[39,115523,26084],{"class":45},[39,115525,39908],{"class":74},[39,115527,71],{"class":45},[39,115529,39908],{"class":74},[39,115531,31761],{"class":53},[39,115533,115534,115536,115539,115542,115544],{"class":41,"line":17606},[39,115535,31792],{"class":74},[39,115537,115538],{"class":53},"().reset(",[39,115540,115541],{"class":59},"seed",[39,115543,1117],{"class":45},[39,115545,115546],{"class":53},"seed)\n",[39,115548,115549,115552,115554,115557,115559],{"class":41,"line":17612},[39,115550,115551],{"class":53},"        mujoco.mj_resetData(",[39,115553,31798],{"class":74},[39,115555,115556],{"class":53},".model, ",[39,115558,31798],{"class":74},[39,115560,115561],{"class":53},".data)\n",[39,115563,115564],{"class":41,"line":17635},[39,115565,122],{"emptyLinePlaceholder":121},[39,115567,115568,115570,115573,115575,115577,115580,115582,115584,115586,115588,115590,115592,115594,115596,115598,115600,115602],{"class":41,"line":17649},[39,115569,31820],{"class":74},[39,115571,115572],{"class":53},".data.qpos[:] ",[39,115574,1117],{"class":45},[39,115576,39848],{"class":74},[39,115578,115579],{"class":53},".np_random.uniform(",[39,115581,114737],{"class":59},[39,115583,114740],{"class":45},[39,115585,87185],{"class":74},[39,115587,63],{"class":53},[39,115589,114747],{"class":59},[39,115591,1117],{"class":45},[39,115593,87185],{"class":74},[39,115595,63],{"class":53},[39,115597,32471],{"class":59},[39,115599,1117],{"class":45},[39,115601,31798],{"class":74},[39,115603,115604],{"class":53},".model.nq)\n",[39,115606,115607,115609,115612,115614],{"class":41,"line":17669},[39,115608,31820],{"class":74},[39,115610,115611],{"class":53},".data.qvel[:] ",[39,115613,1117],{"class":45},[39,115615,105736],{"class":74},[39,115617,115618,115621,115623,115625,115627],{"class":41,"line":17675},[39,115619,115620],{"class":53},"        mujoco.mj_forward(",[39,115622,31798],{"class":74},[39,115624,115556],{"class":53},[39,115626,31798],{"class":74},[39,115628,115561],{"class":53},[39,115630,115631],{"class":41,"line":17686},[39,115632,122],{"emptyLinePlaceholder":121},[39,115634,115635,115637,115639,115641],{"class":41,"line":17709},[39,115636,31820],{"class":74},[39,115638,114681],{"class":53},[39,115640,1117],{"class":45},[39,115642,48308],{"class":74},[39,115644,115645,115647,115649],{"class":41,"line":17731},[39,115646,15725],{"class":45},[39,115648,39848],{"class":74},[39,115650,115651],{"class":53},"._get_obs(), {}\n",[39,115653,115654],{"class":41,"line":17736},[39,115655,122],{"emptyLinePlaceholder":121},[39,115657,115658,115660,115663],{"class":41,"line":17742},[39,115659,31776],{"class":45},[39,115661,115662],{"class":49}," step",[39,115664,115665],{"class":53},"(self, action):\n",[39,115667,115668,115670,115672,115675,115677,115679],{"class":41,"line":17756},[39,115669,111197],{"class":53},[39,115671,1117],{"class":45},[39,115673,115674],{"class":53}," np.asarray(action, ",[39,115676,94475],{"class":59},[39,115678,1117],{"class":45},[39,115680,114771],{"class":53},[39,115682,115683,115685,115687,115689,115691,115694,115696],{"class":41,"line":17769},[39,115684,111197],{"class":53},[39,115686,1117],{"class":45},[39,115688,108422],{"class":53},[39,115690,31798],{"class":74},[39,115692,115693],{"class":53},".action_space.low, ",[39,115695,31798],{"class":74},[39,115697,115698],{"class":53},".action_space.high)\n",[39,115700,115701],{"class":41,"line":17774},[39,115702,122],{"emptyLinePlaceholder":121},[39,115704,115705,115707,115710,115712],{"class":41,"line":17788},[39,115706,31820],{"class":74},[39,115708,115709],{"class":53},".data.ctrl[:] ",[39,115711,1117],{"class":45},[39,115713,108445],{"class":53},[39,115715,115716,115718,115720,115722,115724,115726,115728],{"class":41,"line":17793},[39,115717,4486],{"class":45},[39,115719,102476],{"class":53},[39,115721,27018],{"class":45},[39,115723,33418],{"class":74},[39,115725,54],{"class":53},[39,115727,31798],{"class":74},[39,115729,115730],{"class":53},".frame_skip):\n",[39,115732,115733,115736,115738,115740,115742],{"class":41,"line":17799},[39,115734,115735],{"class":53},"            mujoco.mj_step(",[39,115737,31798],{"class":74},[39,115739,115556],{"class":53},[39,115741,31798],{"class":74},[39,115743,115561],{"class":53},[39,115745,115746],{"class":41,"line":17804},[39,115747,122],{"emptyLinePlaceholder":121},[39,115749,115750,115752,115754,115756],{"class":41,"line":17818},[39,115751,31820],{"class":74},[39,115753,114681],{"class":53},[39,115755,10545],{"class":45},[39,115757,56674],{"class":74},[39,115759,115760],{"class":41,"line":17823},[39,115761,122],{"emptyLinePlaceholder":121},[39,115763,115764,115766,115768,115770],{"class":41,"line":17828},[39,115765,111157],{"class":53},[39,115767,1117],{"class":45},[39,115769,39848],{"class":74},[39,115771,115772],{"class":53},"._get_obs()\n",[39,115774,115775,115777,115779,115781],{"class":41,"line":17842},[39,115776,111262],{"class":53},[39,115778,1117],{"class":45},[39,115780,39848],{"class":74},[39,115782,115783],{"class":53},"._get_reward()\n",[39,115785,115786],{"class":41,"line":17854},[39,115787,122],{"emptyLinePlaceholder":121},[39,115789,115790,115792,115794,115796,115798,115800],{"class":41,"line":17859},[39,115791,113112],{"class":53},[39,115793,1117],{"class":45},[39,115795,39848],{"class":74},[39,115797,115345],{"class":53},[39,115799,31798],{"class":74},[39,115801,115423],{"class":53},[39,115803,115804,115806,115808,115810,115812,115814],{"class":41,"line":17872},[39,115805,113125],{"class":53},[39,115807,1117],{"class":45},[39,115809,39848],{"class":74},[39,115811,115345],{"class":53},[39,115813,31798],{"class":74},[39,115815,115438],{"class":53},[39,115817,115818,115820,115822,115824,115827,115829],{"class":41,"line":17877},[39,115819,115443],{"class":53},[39,115821,1117],{"class":45},[39,115823,110772],{"class":74},[39,115825,115826],{"class":53},"(np.linalg.norm(tip ",[39,115828,1793],{"class":45},[39,115830,115831],{"class":53}," target))\n",[39,115833,115834],{"class":41,"line":17882},[39,115835,122],{"emptyLinePlaceholder":121},[39,115837,115838,115841,115843,115845,115847],{"class":41,"line":17887},[39,115839,115840],{"class":53},"        terminated ",[39,115842,1117],{"class":45},[39,115844,114664],{"class":53},[39,115846,2170],{"class":45},[39,115848,114669],{"class":74},[39,115850,115851,115854,115856,115858,115860,115862,115864],{"class":41,"line":17900},[39,115852,115853],{"class":53},"        truncated ",[39,115855,1117],{"class":45},[39,115857,39848],{"class":74},[39,115859,114681],{"class":53},[39,115861,2820],{"class":45},[39,115863,39848],{"class":74},[39,115865,114688],{"class":53},[39,115867,115868,115871,115873,115875,115878],{"class":41,"line":17905},[39,115869,115870],{"class":53},"        info ",[39,115872,1117],{"class":45},[39,115874,5529],{"class":53},[39,115876,115877],{"class":237},"\"distance\"",[39,115879,115880],{"class":53},": dist}\n",[39,115882,115883,115885],{"class":41,"line":33608},[39,115884,15725],{"class":45},[39,115886,115887],{"class":53}," obs, reward, terminated, truncated, info\n",[39,115889,115890],{"class":41,"line":33614},[39,115891,122],{"emptyLinePlaceholder":121},[39,115893,115894],{"class":41,"line":33620},[39,115895,122],{"emptyLinePlaceholder":121},[39,115897,115898,115900,115902,115904,115906],{"class":41,"line":33626},[39,115899,32922],{"class":45},[39,115901,217],{"class":49},[39,115903,102373],{"class":53},[39,115905,96661],{"class":74},[39,115907,4822],{"class":53},[39,115909,115910,115913,115915],{"class":41,"line":33632},[39,115911,115912],{"class":53},"    env ",[39,115914,1117],{"class":45},[39,115916,115917],{"class":53}," ReacherEnv()\n",[39,115919,115920,115923,115925,115928,115930,115932,115934],{"class":41,"line":33643},[39,115921,115922],{"class":53},"    obs, info ",[39,115924,1117],{"class":45},[39,115926,115927],{"class":53}," env.reset(",[39,115929,115541],{"class":59},[39,115931,1117],{"class":45},[39,115933,1457],{"class":74},[39,115935,574],{"class":53},[39,115937,115938,115940,115942,115945],{"class":41,"line":33649},[39,115939,32274],{"class":74},[39,115941,54],{"class":53},[39,115943,115944],{"class":237},"\"initial obs shape:\"",[39,115946,115947],{"class":53},", obs.shape)\n",[39,115949,115950,115952,115954,115957],{"class":41,"line":33669},[39,115951,32274],{"class":74},[39,115953,54],{"class":53},[39,115955,115956],{"class":237},"\"initial info:\"",[39,115958,115959],{"class":53},", info)\n",[39,115961,115962],{"class":41,"line":33675},[39,115963,122],{"emptyLinePlaceholder":121},[39,115965,115966,115968,115970],{"class":41,"line":33686},[39,115967,111128],{"class":53},[39,115969,1117],{"class":45},[39,115971,105736],{"class":74},[39,115973,115974,115976,115978,115980,115982,115984,115986],{"class":41,"line":33692},[39,115975,4284],{"class":45},[39,115977,32591],{"class":53},[39,115979,27018],{"class":45},[39,115981,33418],{"class":74},[39,115983,54],{"class":53},[39,115985,248],{"class":74},[39,115987,31761],{"class":53},[39,115989,115990,115992,115994],{"class":41,"line":33698},[39,115991,111197],{"class":53},[39,115993,1117],{"class":45},[39,115995,115996],{"class":53}," env.action_space.sample()\n",[39,115998,115999,116002,116004],{"class":41,"line":33704},[39,116000,116001],{"class":53},"        obs, reward, terminated, truncated, info ",[39,116003,1117],{"class":45},[39,116005,114390],{"class":53},[39,116007,116008,116010,116012],{"class":41,"line":33710},[39,116009,111272],{"class":53},[39,116011,10545],{"class":45},[39,116013,111277],{"class":53},[39,116015,116016,116018,116020,116022,116024,116027,116029,116031,116034,116036,116038,116041,116043,116045,116048,116050,116052,116054],{"class":41,"line":33716},[39,116017,33426],{"class":74},[39,116019,54],{"class":53},[39,116021,111306],{"class":237},[39,116023,111309],{"class":53},[39,116025,116026],{"class":237},"\"reward:\"",[39,116028,63],{"class":53},[39,116030,32993],{"class":74},[39,116032,116033],{"class":53},"(reward, ",[39,116035,1339],{"class":74},[39,116037,111320],{"class":53},[39,116039,116040],{"class":237},"\"distance:\"",[39,116042,63],{"class":53},[39,116044,32993],{"class":74},[39,116046,116047],{"class":53},"(info[",[39,116049,115877],{"class":237},[39,116051,113177],{"class":53},[39,116053,1339],{"class":74},[39,116055,31472],{"class":53},[39,116057,116058,116060,116063,116066],{"class":41,"line":33722},[39,116059,3590],{"class":45},[39,116061,116062],{"class":53}," terminated ",[39,116064,116065],{"class":45},"or",[39,116067,116068],{"class":53}," truncated:\n",[39,116070,116071],{"class":41,"line":33728},[39,116072,116073],{"class":45},"            break\n",[39,116075,116076],{"class":41,"line":33748},[39,116077,122],{"emptyLinePlaceholder":121},[39,116079,116080,116082,116084,116086,116088,116090,116092,116094],{"class":41,"line":33754},[39,116081,32274],{"class":74},[39,116083,54],{"class":53},[39,116085,111351],{"class":237},[39,116087,63],{"class":53},[39,116089,32993],{"class":74},[39,116091,111358],{"class":53},[39,116093,1339],{"class":74},[39,116095,31472],{"class":53},[39,116097,116098],{"class":41,"line":33770},[39,116099,122],{"emptyLinePlaceholder":121},[39,116101,116102],{"class":41,"line":33776},[39,116103,122],{"emptyLinePlaceholder":121},[39,116105,116106,116108,116110,116112,116114],{"class":41,"line":33790},[39,116107,2654],{"class":45},[39,116109,32195],{"class":74},[39,116111,102534],{"class":45},[39,116113,102537],{"class":237},[39,116115,4822],{"class":53},[39,116117,116118],{"class":41,"line":33796},[39,116119,102544],{"class":53},[19,116121,104545],{},[30,116123,116125],{"className":24796,"code":116124,"language":24798,"meta":35,"style":35},"touch ch8_gym_env.py\n",[26,116126,116127],{"__ignoreMap":35},[39,116128,116129,116131],{"class":41,"line":42},[39,116130,102258],{"class":49},[39,116132,116133],{"class":237}," ch8_gym_env.py\n",[19,116135,111419],{},[30,116137,116139],{"className":24796,"code":116138,"language":24798,"meta":35,"style":35},"python ch8_gym_env.py\n",[26,116140,116141],{"__ignoreMap":35},[39,116142,116143,116145],{"class":41,"line":42},[39,116144,31355],{"class":49},[39,116146,116133],{"class":237},[476,116148,102547],{"id":102547},[19,116150,116151],{},"继承 Gymnasium 环境：",[30,116153,116155],{"className":31353,"code":116154,"language":31355,"meta":35,"style":35},"class ReacherEnv(gym.Env):\n",[26,116156,116157],{"__ignoreMap":35},[39,116158,116159,116161,116163,116165,116167,116169,116171],{"class":41,"line":42},[39,116160,15667],{"class":45},[39,116162,115032],{"class":49},[39,116164,54],{"class":53},[39,116166,114515],{"class":49},[39,116168,1819],{"class":53},[39,116170,115041],{"class":49},[39,116172,31761],{"class":53},[19,116174,116175],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116177,116178],{},"初始化模型：",[30,116180,116182],{"className":31353,"code":116181,"language":31355,"meta":35,"style":35},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[26,116183,116184,116198],{"__ignoreMap":35},[39,116185,116186,116188,116190,116192,116194,116196],{"class":41,"line":42},[39,116187,31798],{"class":74},[39,116189,115092],{"class":53},[39,116191,1117],{"class":45},[39,116193,102387],{"class":53},[39,116195,102289],{"class":74},[39,116197,574],{"class":53},[39,116199,116200,116202,116204,116206,116208,116210],{"class":41,"line":92},[39,116201,31798],{"class":74},[39,116203,115107],{"class":53},[39,116205,1117],{"class":45},[39,116207,115112],{"class":53},[39,116209,31798],{"class":74},[39,116211,115117],{"class":53},[19,116213,116214,116215,116217],{},"这和前面章节一样，只是现在放到了类的 ",[26,116216,31804],{}," 里。",[19,116219,116220],{},"缓存 site ID：",[30,116222,116224],{"className":31353,"code":116223,"language":31355,"meta":35,"style":35},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[26,116225,116226,116240],{"__ignoreMap":35},[39,116227,116228,116230,116232,116234,116236,116238],{"class":41,"line":42},[39,116229,31798],{"class":74},[39,116231,115128],{"class":53},[39,116233,1117],{"class":45},[39,116235,115133],{"class":53},[39,116237,90529],{"class":74},[39,116239,574],{"class":53},[39,116241,116242,116244,116246,116248,116250,116252],{"class":41,"line":92},[39,116243,31798],{"class":74},[39,116245,115149],{"class":53},[39,116247,1117],{"class":45},[39,116249,115133],{"class":53},[39,116251,90529],{"class":74},[39,116253,574],{"class":53},[19,116255,116256],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116258,116259],{},"reset：",[30,116261,116263],{"className":31353,"code":116262,"language":31355,"meta":35,"style":35},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[26,116264,116265],{"__ignoreMap":35},[39,116266,116267,116269,116271,116273,116275,116277,116279,116281,116283,116285,116287,116289,116291,116293,116295,116297,116299],{"class":41,"line":42},[39,116268,32922],{"class":45},[39,116270,115497],{"class":49},[39,116272,115500],{"class":53},[39,116274,1717],{"class":45},[39,116276,115505],{"class":53},[39,116278,46],{"class":74},[39,116280,26084],{"class":45},[39,116282,39908],{"class":74},[39,116284,71],{"class":45},[39,116286,39908],{"class":74},[39,116288,115518],{"class":53},[39,116290,115521],{"class":74},[39,116292,26084],{"class":45},[39,116294,39908],{"class":74},[39,116296,71],{"class":45},[39,116298,39908],{"class":74},[39,116300,31761],{"class":53},[19,116302,116303,116305],{},[26,116304,71031],{}," 做四件事：",[328,116307,116308,116311,116314,116317],{},[331,116309,116310],{},"设置随机种子。",[331,116312,116313],{},"重置 MuJoCo data。",[331,116315,116316],{},"随机初始化关节角。",[331,116318,116319],{},"返回初始观测和 info。",[19,116321,116322],{},"step：",[30,116324,116326],{"className":31353,"code":116325,"language":31355,"meta":35,"style":35},"def step(self, action):\n",[26,116327,116328],{"__ignoreMap":35},[39,116329,116330,116332,116334],{"class":41,"line":42},[39,116331,32922],{"class":45},[39,116333,115662],{"class":49},[39,116335,115665],{"class":53},[19,116337,116338,116340],{},[26,116339,108109],{}," 做六件事：",[328,116342,116343,116346,116352,116355,116358,116361],{},[331,116344,116345],{},"检查并裁剪 action。",[331,116347,116348,116349,29360],{},"写入 ",[26,116350,116351],{},"self.data.ctrl",[331,116353,116354],{},"连续推进若干个 MuJoCo 物理步。",[331,116356,116357],{},"计算新观测。",[331,116359,116360],{},"计算奖励和结束条件。",[331,116362,116363],{},"返回 Gymnasium 标准五元组。",[476,116365,102683],{"id":102683},[30,116367,116369],{"className":31353,"code":116368,"language":31355,"meta":35,"style":35},"import gymnasium as gym\n",[26,116370,116371],{"__ignoreMap":35},[39,116372,116373,116375,116377,116379],{"class":41,"line":42},[39,116374,31367],{"class":45},[39,116376,114870],{"class":53},[39,116378,32358],{"class":45},[39,116380,114875],{"class":53},[19,116382,116383,116384,116386,116387,116390],{},"导入 Gymnasium，并起别名 ",[26,116385,114515],{},"。后面写 ",[26,116388,116389],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[30,116392,116394],{"className":31353,"code":116393,"language":31355,"meta":35,"style":35},"from gymnasium import spaces\n",[26,116395,116396],{"__ignoreMap":35},[39,116397,116398,116400,116402,116404],{"class":41,"line":42},[39,116399,31712],{"class":45},[39,116401,114870],{"class":53},[39,116403,31367],{"class":45},[39,116405,114902],{"class":53},[19,116407,116408,116409,116412],{},"导入空间定义工具。",[26,116410,116411],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[30,116414,116415],{"className":31353,"code":116154,"language":31355,"meta":35,"style":35},[26,116416,116417],{"__ignoreMap":35},[39,116418,116419,116421,116423,116425,116427,116429,116431],{"class":41,"line":42},[39,116420,15667],{"class":45},[39,116422,115032],{"class":49},[39,116424,54],{"class":53},[39,116426,114515],{"class":49},[39,116428,1819],{"class":53},[39,116430,115041],{"class":49},[39,116432,31761],{"class":53},[19,116434,116435,116436,116439,116440,116442,116443,101993,116445,116447],{},"定义一个类，名字叫 ",[26,116437,116438],{},"ReacherEnv","。括号里的 ",[26,116441,116389],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[26,116444,71031],{},[26,116446,108109],{}," 这两个核心方法。",[30,116449,116451],{"className":31353,"code":116450,"language":31355,"meta":35,"style":35},"metadata = {\"render_modes\": []}\n",[26,116452,116453],{"__ignoreMap":35},[39,116454,116455,116458,116460,116462,116464],{"class":41,"line":42},[39,116456,116457],{"class":53},"metadata ",[39,116459,1117],{"class":45},[39,116461,5529],{"class":53},[39,116463,115055],{"class":237},[39,116465,115058],{"class":53},[19,116467,116468],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[30,116470,116472],{"className":31353,"code":116471,"language":31355,"meta":35,"style":35},"def __init__(self) -> None:\n",[26,116473,116474],{"__ignoreMap":35},[39,116475,116476,116478,116480,116482,116484],{"class":41,"line":42},[39,116477,32922],{"class":45},[39,116479,31779],{"class":74},[39,116481,115071],{"class":53},[39,116483,96661],{"class":74},[39,116485,4822],{"class":53},[19,116487,116488,116490,116491,29360],{},[26,116489,31804],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[26,116492,116493],{},"env = ReacherEnv()",[30,116495,116497],{"className":31353,"code":116496,"language":31355,"meta":35,"style":35},"super().__init__()\n",[26,116498,116499],{"__ignoreMap":35},[39,116500,116501,116504,116506,116508],{"class":41,"line":42},[39,116502,116503],{"class":74},"super",[39,116505,18234],{"class":53},[39,116507,31804],{"class":74},[39,116509,537],{"class":53},[19,116511,116512,116513,116515],{},"调用父类 ",[26,116514,116389],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[30,116517,116518],{"className":31353,"code":116181,"language":31355,"meta":35,"style":35},[26,116519,116520,116534],{"__ignoreMap":35},[39,116521,116522,116524,116526,116528,116530,116532],{"class":41,"line":42},[39,116523,31798],{"class":74},[39,116525,115092],{"class":53},[39,116527,1117],{"class":45},[39,116529,102387],{"class":53},[39,116531,102289],{"class":74},[39,116533,574],{"class":53},[39,116535,116536,116538,116540,116542,116544,116546],{"class":41,"line":92},[39,116537,31798],{"class":74},[39,116539,115107],{"class":53},[39,116541,1117],{"class":45},[39,116543,115112],{"class":53},[39,116545,31798],{"class":74},[39,116547,115117],{"class":53},[19,116549,116550,116551,116553,116554,101993,116557,116560],{},"把 MuJoCo 模型和状态保存到 ",[26,116552,31798],{}," 上。",[26,116555,116556],{},"self.model",[26,116558,116559],{},"self.data"," 表示这个环境对象自己的模型和状态。",[30,116562,116563],{"className":31353,"code":116223,"language":31355,"meta":35,"style":35},[26,116564,116565,116579],{"__ignoreMap":35},[39,116566,116567,116569,116571,116573,116575,116577],{"class":41,"line":42},[39,116568,31798],{"class":74},[39,116570,115128],{"class":53},[39,116572,1117],{"class":45},[39,116574,115133],{"class":53},[39,116576,90529],{"class":74},[39,116578,574],{"class":53},[39,116580,116581,116583,116585,116587,116589,116591],{"class":41,"line":92},[39,116582,31798],{"class":74},[39,116584,115149],{"class":53},[39,116586,1117],{"class":45},[39,116588,115133],{"class":53},[39,116590,90529],{"class":74},[39,116592,574],{"class":53},[19,116594,116595,116596,101993,116599,116602],{},"提前查好 tip 和 target 的 site ID。这样 ",[26,116597,116598],{},"_get_obs",[26,116600,116601],{},"_get_reward"," 里就不用每次按名字查找。",[30,116604,116606],{"className":31353,"code":116605,"language":31355,"meta":35,"style":35},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[26,116607,116608,116618,116628],{"__ignoreMap":35},[39,116609,116610,116612,116614,116616],{"class":41,"line":42},[39,116611,31798],{"class":74},[39,116613,114842],{"class":53},[39,116615,1117],{"class":45},[39,116617,55402],{"class":74},[39,116619,116620,116622,116624,116626],{"class":41,"line":92},[39,116621,31798],{"class":74},[39,116623,115221],{"class":53},[39,116625,1117],{"class":45},[39,116627,115226],{"class":74},[39,116629,116630,116632,116634,116636],{"class":41,"line":112},[39,116631,31798],{"class":74},[39,116633,114681],{"class":53},[39,116635,1117],{"class":45},[39,116637,48308],{"class":74},[19,116639,116640,116643,116644,116647,116648,116651],{},[26,116641,116642],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[26,116645,116646],{},"max_steps"," 是一个 episode 最多运行多少步。",[26,116649,116650],{},"steps"," 记录当前 episode 已经走了多少步。",[30,116653,116654],{"className":31353,"code":114720,"language":31355,"meta":35,"style":35},[26,116655,116656],{"__ignoreMap":35},[39,116657,116658,116660,116662,116664,116666,116668,116670,116672,116674,116676,116678,116680,116682,116684,116686,116688,116690,116692,116694,116696],{"class":41,"line":42},[39,116659,31798],{"class":74},[39,116661,114729],{"class":53},[39,116663,1117],{"class":45},[39,116665,114734],{"class":53},[39,116667,114737],{"class":59},[39,116669,114740],{"class":45},[39,116671,103378],{"class":74},[39,116673,63],{"class":53},[39,116675,114747],{"class":59},[39,116677,1117],{"class":45},[39,116679,103378],{"class":74},[39,116681,63],{"class":53},[39,116683,96938],{"class":59},[39,116685,1117],{"class":45},[39,116687,54],{"class":53},[39,116689,1345],{"class":74},[39,116691,114764],{"class":53},[39,116693,94475],{"class":59},[39,116695,1117],{"class":45},[39,116697,114771],{"class":53},[19,116699,116700,116701,116704,116705,101993,116708,116711],{},"定义动作空间。",[26,116702,116703],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[26,116706,116707],{},"low=-1.0",[26,116709,116710],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[30,116713,116714],{"className":31353,"code":114781,"language":31355,"meta":35,"style":35},[26,116715,116716],{"__ignoreMap":35},[39,116717,116718,116720,116722,116724,116726,116728,116730,116732,116734,116736,116738,116740,116742,116744,116746,116748,116750,116752],{"class":41,"line":42},[39,116719,31798],{"class":74},[39,116721,114790],{"class":53},[39,116723,1117],{"class":45},[39,116725,114734],{"class":53},[39,116727,114737],{"class":59},[39,116729,114740],{"class":45},[39,116731,114801],{"class":53},[39,116733,114747],{"class":59},[39,116735,1117],{"class":45},[39,116737,114801],{"class":53},[39,116739,96938],{"class":59},[39,116741,1117],{"class":45},[39,116743,54],{"class":53},[39,116745,423],{"class":74},[39,116747,114764],{"class":53},[39,116749,94475],{"class":59},[39,116751,1117],{"class":45},[39,116753,114771],{"class":53},[19,116755,116756,116757,116760,116761,116764],{},"定义观测空间。",[26,116758,116759],{},"shape=(10,)"," 表示观测是 10 个数。",[26,116762,116763],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[30,116766,116768],{"className":31353,"code":116767,"language":31355,"meta":35,"style":35},"def _get_obs(self) -> np.ndarray:\n",[26,116769,116770],{"__ignoreMap":35},[39,116771,116772,116774,116776],{"class":41,"line":42},[39,116773,32922],{"class":45},[39,116775,115331],{"class":49},[39,116777,115334],{"class":53},[19,116779,116780,116781,116783],{},"定义内部函数，用来生成观测。函数名前面的 ",[26,116782,2252],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[30,116785,116787],{"className":31353,"code":116786,"language":31355,"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",[26,116788,116789,116803],{"__ignoreMap":35},[39,116790,116791,116793,116795,116797,116799,116801],{"class":41,"line":42},[39,116792,112543],{"class":53},[39,116794,1117],{"class":45},[39,116796,39848],{"class":74},[39,116798,115345],{"class":53},[39,116800,31798],{"class":74},[39,116802,115350],{"class":53},[39,116804,116805,116807,116809,116811,116813,116815],{"class":41,"line":92},[39,116806,112553],{"class":53},[39,116808,1117],{"class":45},[39,116810,39848],{"class":74},[39,116812,115345],{"class":53},[39,116814,31798],{"class":74},[39,116816,115365],{"class":53},[19,116818,116819],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[30,116821,116823],{"className":31353,"code":116822,"language":31355,"meta":35,"style":35},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[26,116824,116825,116841],{"__ignoreMap":35},[39,116826,116827,116829,116831,116833,116835,116837,116839],{"class":41,"line":42},[39,116828,111829],{"class":53},[39,116830,1117],{"class":45},[39,116832,115374],{"class":53},[39,116834,31798],{"class":74},[39,116836,115379],{"class":53},[39,116838,31798],{"class":74},[39,116840,115384],{"class":53},[39,116842,116843,116845],{"class":41,"line":92},[39,116844,18019],{"class":45},[39,116846,115391],{"class":53},[19,116848,116849,116850,116853,116854,116856],{},"拼接观测，并转换成 ",[26,116851,116852],{},"float32","。很多强化学习库默认使用 ",[26,116855,116852],{},"，所以这里主动转换。",[30,116858,116859],{"className":31353,"code":116262,"language":31355,"meta":35,"style":35},[26,116860,116861],{"__ignoreMap":35},[39,116862,116863,116865,116867,116869,116871,116873,116875,116877,116879,116881,116883,116885,116887,116889,116891,116893,116895],{"class":41,"line":42},[39,116864,32922],{"class":45},[39,116866,115497],{"class":49},[39,116868,115500],{"class":53},[39,116870,1717],{"class":45},[39,116872,115505],{"class":53},[39,116874,46],{"class":74},[39,116876,26084],{"class":45},[39,116878,39908],{"class":74},[39,116880,71],{"class":45},[39,116882,39908],{"class":74},[39,116884,115518],{"class":53},[39,116886,115521],{"class":74},[39,116888,26084],{"class":45},[39,116890,39908],{"class":74},[39,116892,71],{"class":45},[39,116894,39908],{"class":74},[39,116896,31761],{"class":53},[19,116898,116899,116900,116902,116903,116906],{},"定义 reset。",[26,116901,115541],{}," 用来控制随机数，保证实验可以复现。",[26,116904,116905],{},"options"," 用来接收额外配置，本章暂时不用。",[30,116908,116910],{"className":31353,"code":116909,"language":31355,"meta":35,"style":35},"super().reset(seed=seed)\n",[26,116911,116912],{"__ignoreMap":35},[39,116913,116914,116916,116918,116920,116922],{"class":41,"line":42},[39,116915,116503],{"class":74},[39,116917,115538],{"class":53},[39,116919,115541],{"class":59},[39,116921,1117],{"class":45},[39,116923,115546],{"class":53},[19,116925,116926,116927,116930],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[26,116928,116929],{},"self.np_random"," 生成可复现的随机数。",[30,116932,116934],{"className":31353,"code":116933,"language":31355,"meta":35,"style":35},"mujoco.mj_resetData(self.model, self.data)\n",[26,116935,116936],{"__ignoreMap":35},[39,116937,116938,116941,116943,116945,116947],{"class":41,"line":42},[39,116939,116940],{"class":53},"mujoco.mj_resetData(",[39,116942,31798],{"class":74},[39,116944,115556],{"class":53},[39,116946,31798],{"class":74},[39,116948,115561],{"class":53},[19,116950,116951],{},"把 MuJoCo 状态重置到默认状态。",[30,116953,116955],{"className":31353,"code":116954,"language":31355,"meta":35,"style":35},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[26,116956,116957],{"__ignoreMap":35},[39,116958,116959,116961,116963,116965,116967,116969,116971,116973,116975,116977,116979,116981,116983,116985,116987,116989,116991],{"class":41,"line":42},[39,116960,31798],{"class":74},[39,116962,115572],{"class":53},[39,116964,1117],{"class":45},[39,116966,39848],{"class":74},[39,116968,115579],{"class":53},[39,116970,114737],{"class":59},[39,116972,114740],{"class":45},[39,116974,87185],{"class":74},[39,116976,63],{"class":53},[39,116978,114747],{"class":59},[39,116980,1117],{"class":45},[39,116982,87185],{"class":74},[39,116984,63],{"class":53},[39,116986,32471],{"class":59},[39,116988,1117],{"class":45},[39,116990,31798],{"class":74},[39,116992,115604],{"class":53},[19,116994,116316,116995,116998,116999,117002,117003,117005],{},[26,116996,116997],{},"[:]"," 表示修改整个数组。",[26,117000,117001],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[26,117004,103125],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[30,117007,117009],{"className":31353,"code":117008,"language":31355,"meta":35,"style":35},"self.data.qvel[:] = 0.0\n",[26,117010,117011],{"__ignoreMap":35},[39,117012,117013,117015,117017,117019],{"class":41,"line":42},[39,117014,31798],{"class":74},[39,117016,115611],{"class":53},[39,117018,1117],{"class":45},[39,117020,105736],{"class":74},[19,117022,117023],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[30,117025,117027],{"className":31353,"code":117026,"language":31355,"meta":35,"style":35},"self.steps = 0\nreturn self._get_obs(), {}\n",[26,117028,117029,117039],{"__ignoreMap":35},[39,117030,117031,117033,117035,117037],{"class":41,"line":42},[39,117032,31798],{"class":74},[39,117034,114681],{"class":53},[39,117036,1117],{"class":45},[39,117038,48308],{"class":74},[39,117040,117041,117043,117045],{"class":41,"line":92},[39,117042,18019],{"class":45},[39,117044,39848],{"class":74},[39,117046,115651],{"class":53},[19,117048,117049],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[30,117051,117052],{"className":31353,"code":116325,"language":31355,"meta":35,"style":35},[26,117053,117054],{"__ignoreMap":35},[39,117055,117056,117058,117060],{"class":41,"line":42},[39,117057,32922],{"class":45},[39,117059,115662],{"class":49},[39,117061,115665],{"class":53},[19,117063,117064],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[30,117066,117068],{"className":31353,"code":117067,"language":31355,"meta":35,"style":35},"action = np.asarray(action, dtype=np.float32)\n",[26,117069,117070],{"__ignoreMap":35},[39,117071,117072,117074,117076,117078,117080,117082],{"class":41,"line":42},[39,117073,108417],{"class":53},[39,117075,1117],{"class":45},[39,117077,115674],{"class":53},[39,117079,94475],{"class":59},[39,117081,1117],{"class":45},[39,117083,114771],{"class":53},[19,117085,117086,117087,29360],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[26,117088,116852],{},[30,117090,117092],{"className":31353,"code":117091,"language":31355,"meta":35,"style":35},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[26,117093,117094],{"__ignoreMap":35},[39,117095,117096,117098,117100,117102,117104,117106,117108],{"class":41,"line":42},[39,117097,108417],{"class":53},[39,117099,1117],{"class":45},[39,117101,108422],{"class":53},[39,117103,31798],{"class":74},[39,117105,115693],{"class":53},[39,117107,31798],{"class":74},[39,117109,115698],{"class":53},[19,117111,117112],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[30,117114,117116],{"className":31353,"code":117115,"language":31355,"meta":35,"style":35},"self.data.ctrl[:] = action\n",[26,117117,117118],{"__ignoreMap":35},[39,117119,117120,117122,117124,117126],{"class":41,"line":42},[39,117121,31798],{"class":74},[39,117123,115709],{"class":53},[39,117125,1117],{"class":45},[39,117127,108445],{"class":53},[19,117129,117130],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[30,117132,117134],{"className":31353,"code":117133,"language":31355,"meta":35,"style":35},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[26,117135,117136,117152],{"__ignoreMap":35},[39,117137,117138,117140,117142,117144,117146,117148,117150],{"class":41,"line":42},[39,117139,4108],{"class":45},[39,117141,102476],{"class":53},[39,117143,27018],{"class":45},[39,117145,33418],{"class":74},[39,117147,54],{"class":53},[39,117149,31798],{"class":74},[39,117151,115730],{"class":53},[39,117153,117154,117157,117159,117161,117163],{"class":41,"line":92},[39,117155,117156],{"class":53},"    mujoco.mj_step(",[39,117158,31798],{"class":74},[39,117160,115556],{"class":53},[39,117162,31798],{"class":74},[39,117164,115561],{"class":53},[19,117166,117167,117168,117171,117172,117174,117175,29360],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[26,117169,117170],{},"frame_skip=5","，所以外部调用一次 ",[26,117173,114852],{},"，内部实际执行 5 次 ",[26,117176,102190],{},[30,117178,117180],{"className":31353,"code":117179,"language":31355,"meta":35,"style":35},"self.steps += 1\n",[26,117181,117182],{"__ignoreMap":35},[39,117183,117184,117186,117188,117190],{"class":41,"line":42},[39,117185,31798],{"class":74},[39,117187,114681],{"class":53},[39,117189,10545],{"class":45},[39,117191,56674],{"class":74},[19,117193,117194],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[30,117196,117198],{"className":31353,"code":117197,"language":31355,"meta":35,"style":35},"obs = self._get_obs()\nreward = self._get_reward()\n",[26,117199,117200,117210],{"__ignoreMap":35},[39,117201,117202,117204,117206,117208],{"class":41,"line":42},[39,117203,111829],{"class":53},[39,117205,1117],{"class":45},[39,117207,39848],{"class":74},[39,117209,115772],{"class":53},[39,117211,117212,117214,117216,117218],{"class":41,"line":92},[39,117213,111980],{"class":53},[39,117215,1117],{"class":45},[39,117217,39848],{"class":74},[39,117219,115783],{"class":53},[19,117221,117222],{},"计算新的观测和奖励。",[30,117224,117226],{"className":31353,"code":117225,"language":31355,"meta":35,"style":35},"dist = float(np.linalg.norm(tip - target))\n",[26,117227,117228],{"__ignoreMap":35},[39,117229,117230,117232,117234,117236,117238,117240],{"class":41,"line":42},[39,117231,112571],{"class":53},[39,117233,1117],{"class":45},[39,117235,110772],{"class":74},[39,117237,115826],{"class":53},[39,117239,1793],{"class":45},[39,117241,115831],{"class":53},[19,117243,117244],{},"计算末端到目标的距离，并转换成 Python float。",[30,117246,117247],{"className":31353,"code":114652,"language":31355,"meta":35,"style":35},[26,117248,117249,117261],{"__ignoreMap":35},[39,117250,117251,117253,117255,117257,117259],{"class":41,"line":42},[39,117252,114659],{"class":53},[39,117254,1117],{"class":45},[39,117256,114664],{"class":53},[39,117258,2170],{"class":45},[39,117260,114669],{"class":74},[39,117262,117263,117265,117267,117269,117271,117273,117275],{"class":41,"line":92},[39,117264,114674],{"class":53},[39,117266,1117],{"class":45},[39,117268,39848],{"class":74},[39,117270,114681],{"class":53},[39,117272,2820],{"class":45},[39,117274,39848],{"class":74},[39,117276,114688],{"class":53},[19,117278,117279],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[30,117281,117283],{"className":31353,"code":117282,"language":31355,"meta":35,"style":35},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[26,117284,117285,117298],{"__ignoreMap":35},[39,117286,117287,117290,117292,117294,117296],{"class":41,"line":42},[39,117288,117289],{"class":53},"info ",[39,117291,1117],{"class":45},[39,117293,5529],{"class":53},[39,117295,115877],{"class":237},[39,117297,115880],{"class":53},[39,117299,117300,117302],{"class":41,"line":92},[39,117301,18019],{"class":45},[39,117303,115887],{"class":53},[19,117305,117306,117309],{},[26,117307,117308],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[30,117311,117313],{"className":31353,"code":117312,"language":31355,"meta":35,"style":35},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[26,117314,117315,117324],{"__ignoreMap":35},[39,117316,117317,117320,117322],{"class":41,"line":42},[39,117318,117319],{"class":53},"env ",[39,117321,1117],{"class":45},[39,117323,115917],{"class":53},[39,117325,117326,117328,117330,117332,117334,117336,117338],{"class":41,"line":92},[39,117327,114375],{"class":53},[39,117329,1117],{"class":45},[39,117331,115927],{"class":53},[39,117333,115541],{"class":59},[39,117335,1117],{"class":45},[39,117337,1457],{"class":74},[39,117339,574],{"class":53},[19,117341,117342,117343,117346],{},"创建环境并重置。",[26,117344,117345],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[30,117348,117350],{"className":31353,"code":117349,"language":31355,"meta":35,"style":35},"action = env.action_space.sample()\n",[26,117351,117352],{"__ignoreMap":35},[39,117353,117354,117356,117358],{"class":41,"line":42},[39,117355,108417],{"class":53},[39,117357,1117],{"class":45},[39,117359,115996],{"class":53},[19,117361,117362],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117364,103291],{"id":103290},[19,117366,106459],{},[30,117368,117371],{"className":117369,"code":117370,"language":6267,"meta":35},[6265],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[26,117372,117370],{"__ignoreMap":35},[19,117374,117375],{},"这个环境已经具备强化学习环境的基本结构。",[19,117377,117378],{},"主函数里使用随机动作：",[30,117380,117381],{"className":31353,"code":117349,"language":31355,"meta":35,"style":35},[26,117382,117383],{"__ignoreMap":35},[39,117384,117385,117387,117389],{"class":41,"line":42},[39,117386,108417],{"class":53},[39,117388,1117],{"class":45},[39,117390,115996],{"class":53},[19,117392,117393],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117395,103323],{"id":103322},[328,117397,117398,117401,117407,117416,117425,117434,117440],{},[331,117399,117400],{},"运行程序。",[331,117402,117403,117404,29360],{},"确认 ",[26,117405,117406],{},"obs.shape == (10,)",[331,117408,112156,117409,117412,117413,29360],{},[26,117410,117411],{},"env.action_space","，应类似 ",[26,117414,117415],{},"Box(-1.0, 1.0, (2,), float32)",[331,117417,106560,117418,117421,117422,29360],{},[26,117419,117420],{},"self.max_steps = 10","，确认环境会更快 ",[26,117423,117424],{},"truncated=True",[331,117426,103386,117427,103389,117430,117433],{},[26,117428,117429],{},"terminated = dist \u003C 0.05",[26,117431,117432],{},"dist \u003C 0.2","，观察是否更容易结束。",[331,117435,103386,117436,117439],{},[26,117437,117438],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[331,117441,117442,117443,117445,117446,117449],{},"在 ",[26,117444,117308],{}," 里加入 ",[26,117447,117448],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117451,103428],{"id":103427},[476,117453,117455],{"id":117454},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117457,117458,117459,117461],{},"Gymnasium 的 ",[26,117460,108109],{}," 返回 5 个值:",[30,117463,117465],{"className":31353,"code":117464,"language":31355,"meta":35,"style":35},"obs, reward, terminated, truncated, info\n",[26,117466,117467],{"__ignoreMap":35},[39,117468,117469],{"class":41,"line":42},[39,117470,117464],{"class":53},[19,117472,117473],{},"不是旧 Gym 的 4 个值。",[476,117475,117477,117480],{"id":117476},"datactrl-action-维度错误",[26,117478,117479],{},"data.ctrl[:] = action"," 维度错误",[19,117482,103498],{},[30,117484,117486],{"className":31353,"code":117485,"language":31355,"meta":35,"style":35},"print(self.model.nu)\nprint(action.shape)\n",[26,117487,117488,117499],{"__ignoreMap":35},[39,117489,117490,117492,117494,117496],{"class":41,"line":42},[39,117491,31390],{"class":74},[39,117493,54],{"class":53},[39,117495,31798],{"class":74},[39,117497,117498],{"class":53},".model.nu)\n",[39,117500,117501,117503],{"class":41,"line":92},[39,117502,31390],{"class":74},[39,117504,117505],{"class":53},"(action.shape)\n",[19,117507,117508],{},"两者必须匹配。",[476,117510,117512],{"id":117511},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117514,103437],{},[30,117516,117518],{"className":31353,"code":117517,"language":31355,"meta":35,"style":35},"mujoco.mj_forward(self.model, self.data)\n",[26,117519,117520],{"__ignoreMap":35},[39,117521,117522,117525,117527,117529,117531],{"class":41,"line":42},[39,117523,117524],{"class":53},"mujoco.mj_forward(",[39,117526,31798],{"class":74},[39,117528,115556],{"class":53},[39,117530,31798],{"class":74},[39,117532,115561],{"class":53},[476,117534,117536,117538],{"id":117535},"observation_space-维度和-obs-不一致",[26,117537,114575],{}," 维度和 obs 不一致",[19,117540,103550],{},[30,117542,117544],{"className":31353,"code":117543,"language":31355,"meta":35,"style":35},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[26,117545,117546,117556,117563],{"__ignoreMap":35},[39,117547,117548,117550,117552,117554],{"class":41,"line":42},[39,117549,111829],{"class":53},[39,117551,1117],{"class":45},[39,117553,39848],{"class":74},[39,117555,115772],{"class":53},[39,117557,117558,117560],{"class":41,"line":92},[39,117559,31390],{"class":74},[39,117561,117562],{"class":53},"(obs.shape)\n",[39,117564,117565,117567,117569,117571],{"class":41,"line":112},[39,117566,31390],{"class":74},[39,117568,54],{"class":53},[39,117570,31798],{"class":74},[39,117572,117573],{"class":53},".observation_space.shape)\n",[19,117575,117576],{},"两者必须一致。本章观测是：",[30,117578,117581],{"className":117579,"code":117580,"language":6267,"meta":35},[6265],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[26,117582,117580],{"__ignoreMap":35},[476,117584,117586],{"id":117585},"action-超过范围","action 超过范围",[19,117588,117589],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[30,117591,117592],{"className":31353,"code":117091,"language":31355,"meta":35,"style":35},[26,117593,117594],{"__ignoreMap":35},[39,117595,117596,117598,117600,117602,117604,117606,117608],{"class":41,"line":42},[39,117597,108417],{"class":53},[39,117599,1117],{"class":45},[39,117601,108422],{"class":53},[39,117603,31798],{"class":74},[39,117605,115693],{"class":53},[39,117607,31798],{"class":74},[39,117609,115698],{"class":53},[19,117611,117612,117613,29360],{},"这能避免无效动作直接写入 ",[26,117614,102051],{},[476,117616,117618],{"id":117617},"忘记返回-info","忘记返回 info",[19,117620,117458,117621,101993,117623,117625],{},[26,117622,71031],{},[26,117624,108109],{}," 都会返回 info：",[30,117627,117628],{"className":31353,"code":114368,"language":31355,"meta":35,"style":35},[26,117629,117630,117638],{"__ignoreMap":35},[39,117631,117632,117634,117636],{"class":41,"line":42},[39,117633,114375],{"class":53},[39,117635,1117],{"class":45},[39,117637,114380],{"class":53},[39,117639,117640,117642,117644],{"class":41,"line":92},[39,117641,114385],{"class":53},[39,117643,1117],{"class":45},[39,117645,114390],{"class":53},[19,117647,117648,117649,29360],{},"即使暂时没有额外信息，也返回 ",[26,117650,33434],{},[14,117652,117654],{"id":117653},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117656,117657],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[328,117659,117660,117663,117666,117669,117672,117675],{},[331,117661,117662],{},"更稳定的 reward。",[331,117664,117665],{},"合理的 episode 长度。",[331,117667,117668],{},"可重复的随机目标采样。",[331,117670,117671],{},"render 接口。",[331,117673,117674],{},"环境注册代码。",[331,117676,117677],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117679,117680],{},"如果只是自己写训练循环，最小形式是：",[30,117682,117684],{"className":31353,"code":117683,"language":31355,"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",[26,117685,117686,117694,117710,117714,117730,117739,117748,117758],{"__ignoreMap":35},[39,117687,117688,117690,117692],{"class":41,"line":42},[39,117689,117319],{"class":53},[39,117691,1117],{"class":45},[39,117693,115917],{"class":53},[39,117695,117696,117698,117700,117702,117704,117706,117708],{"class":41,"line":92},[39,117697,114375],{"class":53},[39,117699,1117],{"class":45},[39,117701,115927],{"class":53},[39,117703,115541],{"class":59},[39,117705,1117],{"class":45},[39,117707,1457],{"class":74},[39,117709,574],{"class":53},[39,117711,117712],{"class":41,"line":112},[39,117713,122],{"emptyLinePlaceholder":121},[39,117715,117716,117718,117720,117722,117724,117726,117728],{"class":41,"line":118},[39,117717,4108],{"class":45},[39,117719,102476],{"class":53},[39,117721,27018],{"class":45},[39,117723,33418],{"class":74},[39,117725,54],{"class":53},[39,117727,7486],{"class":74},[39,117729,31761],{"class":53},[39,117731,117732,117735,117737],{"class":41,"line":125},[39,117733,117734],{"class":53},"    action ",[39,117736,1117],{"class":45},[39,117738,115996],{"class":53},[39,117740,117741,117744,117746],{"class":41,"line":132},[39,117742,117743],{"class":53},"    obs, reward, terminated, truncated, info ",[39,117745,1117],{"class":45},[39,117747,114390],{"class":53},[39,117749,117750,117752,117754,117756],{"class":41,"line":138},[39,117751,4184],{"class":45},[39,117753,116062],{"class":53},[39,117755,116065],{"class":45},[39,117757,116068],{"class":53},[39,117759,117760,117763,117765],{"class":41,"line":169},[39,117761,117762],{"class":53},"        obs, info ",[39,117764,1117],{"class":45},[39,117766,114380],{"class":53},[14,117768,117770],{"id":117769},"_9本章小结","9.本章小结",[19,117772,117773],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[30,117775,117778],{"className":117776,"code":117777,"language":6267,"meta":35},[6265],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[26,117779,117777],{"__ignoreMap":35},[19,117781,117782],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1192,117784,117785],{},"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":92,"depth":92,"links":117787},[117788,117789,117790,117797,117801,117802,117803,117813,117814],{"id":101621,"depth":92,"text":101622},{"id":101744,"depth":92,"text":101745},{"id":102019,"depth":92,"text":102020,"children":117791},[117792,117794,117796],{"id":114599,"depth":112,"text":117793},"terminated 和 truncated 的区别",{"id":114702,"depth":112,"text":117795},"observation_space 和 action_space",{"id":114829,"depth":112,"text":114830},{"id":102227,"depth":92,"text":102228,"children":117798},[117799,117800],{"id":102547,"depth":112,"text":102547},{"id":102683,"depth":112,"text":102683},{"id":103290,"depth":92,"text":103291},{"id":103322,"depth":92,"text":103323},{"id":103427,"depth":92,"text":103428,"children":117804},[117805,117806,117808,117809,117811,117812],{"id":117454,"depth":112,"text":117455},{"id":117476,"depth":112,"text":117807},"data.ctrl[:] = action 维度错误",{"id":117511,"depth":112,"text":117512},{"id":117535,"depth":112,"text":117810},"observation_space 维度和 obs 不一致",{"id":117585,"depth":112,"text":117586},{"id":117617,"depth":112,"text":117618},{"id":117653,"depth":92,"text":117654},{"id":117769,"depth":92,"text":117770},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114352,"description":35},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117821,"title":117822,"body":117823,"description":118246,"extension":1203,"meta":118247,"navigation":121,"path":118248,"seo":118249,"stem":118250,"__hash__":118251},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117824,"toc":118236},[117825,117829,117832,117835,117855,117861,117867,117877,117880,117883,117903,117906,117910,117913,117919,117922,117936,117939,117942,118016,118019,118025,118028,118051,118054,118104,118107,118113,118116,118119,118122,118141,118144,118150,118153,118156,118159,118179,118182,118185,118188,118233],[10,117826,117828],{"id":117827},"mujoco-学习","MuJoCo 学习",[19,117830,117831],{},"初版",[19,117833,117834],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[328,117836,117837,117840,117843,117852],{},[331,117838,117839],{},"MuJoCo 模型文件在描述什么。",[331,117841,117842],{},"Python 代码怎样读取和推进仿真。",[331,117844,117845,1478,117847,1478,117849,117851],{},[26,117846,105005],{},[26,117848,105335],{},[26,117850,105338],{}," 这些数组为什么重要。",[331,117853,117854],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117856,117857,117858,117860],{},"默认环境为 Fedora 44、Python >= 3.10、",[26,117859,102002],{}," 官方 Python bindings。",[19,117862,117863,117864,117866],{},"注意：本文禁止使用 ",[26,117865,101987],{},"。所有示例均使用：",[30,117868,117869],{"className":31353,"code":102553,"language":31355,"meta":35,"style":35},[26,117870,117871],{"__ignoreMap":35},[39,117872,117873,117875],{"class":41,"line":42},[39,117874,31367],{"class":45},[39,117876,102276],{"class":53},[14,117878,117879],{"id":117879},"适合谁阅读",[19,117881,117882],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[328,117884,117885,117888,117891,117894],{},[331,117886,117887],{},"没学过 MuJoCo，只会一点 Python。",[331,117889,117890],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[331,117892,117893],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[331,117895,117896,117897,117899,117900,117902],{},"以前接触过 ",[26,117898,101987],{},"，现在想迁移到官方 ",[26,117901,101996],{}," Python bindings。",[19,117904,117905],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117907,117909],{"id":117908},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117911,117912],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[30,117914,117917],{"className":117915,"code":117916,"language":6267,"meta":35},[6265],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[26,117918,117916],{"__ignoreMap":35},[19,117920,117921],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[328,117923,117924,117927,117930,117933],{},[331,117925,117926],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[331,117928,117929],{},"快速测试控制算法，不必一开始就上真实机器人。",[331,117931,117932],{},"生成强化学习环境。",[331,117934,117935],{},"采集状态、动作、图像、奖励等训练数据。",[14,117937,117938],{"id":117938},"学习前的心智模型",[19,117940,117941],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1404,117943,117944,117956],{},[1407,117945,117946],{},[1410,117947,117948,117951,117954],{},[1413,117949,117950],{"align":24710},"部分",[1413,117952,117953],{"align":24710},"负责什么",[1413,117955,22160],{"align":24710},[1450,117957,117958,117969,117981,117993,118005],{},[1410,117959,117960,117963,117966],{},[1455,117961,117962],{"align":24710},"MJCF XML",[1455,117964,117965],{"align":24710},"定义世界和机器人结构",[1455,117967,117968],{"align":24710},"地面、盒子、关节、电机、摄像头",[1410,117970,117971,117975,117978],{},[1455,117972,117973],{"align":24710},[26,117974,101684],{},[1455,117976,117977],{"align":24710},"编译后的静态模型",[1455,117979,117980],{"align":24710},"有几个关节、有几个电机、时间步长是多少",[1410,117982,117983,117987,117990],{},[1455,117984,117985],{"align":24710},[26,117986,101694],{},[1455,117988,117989],{"align":24710},"运行中的动态状态",[1455,117991,117992],{"align":24710},"当前时间、位置、速度、电机输入",[1410,117994,117995,117999,118002],{},[1455,117996,117997],{"align":24710},[26,117998,102190],{},[1455,118000,118001],{"align":24710},"推进一步物理仿真",[1455,118003,118004],{"align":24710},"根据重力、力、碰撞更新状态",[1410,118006,118007,118010,118013],{},[1455,118008,118009],{"align":24710},"Viewer \u002F Renderer",[1455,118011,118012],{"align":24710},"把仿真显示出来",[1455,118014,118015],{"align":24710},"打开窗口或保存图片",[19,118017,118018],{},"一句话总结：",[30,118020,118023],{"className":118021,"code":118022,"language":6267,"meta":35},[6265],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[26,118024,118022],{"__ignoreMap":35},[19,118026,118027],{},"参考来源：",[489,118029,118030,118037,118044],{},[331,118031,118032,118033],{},"MuJoCo Python 官方文档：",[922,118034,118035],{"href":118035,"rel":118036},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24839],[331,118038,118039,118040],{},"MuJoCo XML Reference：",[922,118041,118042],{"href":118042,"rel":118043},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24839],[331,118045,118046,118047],{},"MuJoCo Overview：",[922,118048,118049],{"href":118049,"rel":118050},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24839],[14,118052,118053],{"id":118053},"章节目录",[328,118055,118056,118062,118068,118074,118080,118086,118092,118098],{},[331,118057,118058],{},[922,118059,118061],{"href":118060},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[331,118063,118064],{},[922,118065,118067],{"href":118066},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[331,118069,118070],{},[922,118071,118073],{"href":118072},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[331,118075,118076],{},[922,118077,118079],{"href":118078},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[331,118081,118082],{},[922,118083,118085],{"href":118084},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[331,118087,118088],{},[922,118089,118091],{"href":118090},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[331,118093,118094],{},[922,118095,118097],{"href":118096},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[331,118099,118100],{},[922,118101,118103],{"href":118102},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118105,118106],{"id":118106},"推荐学习路线",[30,118108,118111],{"className":118109,"code":118110,"language":6267,"meta":35},[6265],"环境安装\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",[26,118112,118110],{"__ignoreMap":35},[19,118114,118115],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118117,118118],{"id":118118},"建议的目录结构",[19,118120,118121],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[30,118123,118125],{"className":24796,"code":118124,"language":24798,"meta":35,"style":35},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[26,118126,118127,118135],{"__ignoreMap":35},[39,118128,118129,118131,118133],{"class":41,"line":42},[39,118130,102241],{"class":49},[39,118132,30191],{"class":74},[39,118134,102246],{"class":237},[39,118136,118137,118139],{"class":41,"line":92},[39,118138,102251],{"class":74},[39,118140,102246],{"class":237},[19,118142,118143],{},"每一章的代码都单独保存：",[30,118145,118148],{"className":118146,"code":118147,"language":6267,"meta":35},[6265],"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",[26,118149,118147],{"__ignoreMap":35},[19,118151,118152],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118154,118155],{"id":118155},"学习方法",[19,118157,118158],{},"每章建议按这个顺序操作：",[328,118160,118161,118164,118167,118170,118173,118176],{},[331,118162,118163],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[331,118165,118166],{},"复制最小可运行代码，保存成指定文件。",[331,118168,118169],{},"运行代码，确认没有报错。",[331,118171,118172],{},"对照“运行结果说明”理解输出。",[331,118174,118175],{},"做“验证步骤”，主动改一两个参数。",[331,118177,118178],{},"遇到报错先看“常见错误与解决方案”。",[19,118180,118181],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118183,118184],{"id":118184},"全局排错顺序",[19,118186,118187],{},"遇到问题时，按下面顺序查：",[328,118189,118190,118196,118202,118207,118210,118213,118220,118230],{},[331,118191,118192,118193],{},"Python 环境是否激活：",[26,118194,118195],{},"which python",[331,118197,118198,118199],{},"MuJoCo 是否能导入：",[26,118200,118201],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[331,118203,118204,118205],{},"是否误装了 ",[26,118206,101987],{},[331,118208,118209],{},"XML 标签是否闭合、属性是否拼写正确",[331,118211,118212],{},"actuator 引用的 joint 名字是否存在",[331,118214,118215,118217,118218],{},[26,118216,102051],{}," 的长度是否等于 ",[26,118219,103133],{},[331,118221,106560,118222,83514,118224,118226,118227],{},[26,118223,105005],{},[26,118225,105335],{}," 后是否调用了 ",[26,118228,118229],{},"mujoco.mj_forward",[331,118231,118232],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1192,118234,118235],{},"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":92,"depth":92,"links":118237},[118238,118239,118240,118241,118242,118243,118244,118245],{"id":117879,"depth":92,"text":117879},{"id":117908,"depth":92,"text":117909},{"id":117938,"depth":92,"text":117938},{"id":118053,"depth":92,"text":118053},{"id":118106,"depth":92,"text":118106},{"id":118118,"depth":92,"text":118118},{"id":118155,"depth":92,"text":118155},{"id":118184,"depth":92,"text":118184},"仿真搭建。",{"category":24352},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117822,"description":118246},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118253,"title":118254,"body":118255,"description":24350,"extension":1203,"meta":118710,"navigation":121,"path":118711,"seo":118712,"stem":118713,"__hash__":118714},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118256,"toc":118708},[118257,118260,118263,118269,118705],[10,118258,118254],{"id":118259},"_1-最常用的基本操作更新",[19,118261,118262],{},"装linux系统教程：",[19,118264,118265],{},[922,118266,118267],{"href":118267,"rel":118268},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24839],[30,118270,118274],{"className":118271,"code":118272,"language":118273,"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",[26,118275,118276,118281,118286,118295,118300,118309,118314,118334,118339,118350,118355,118364,118369,118397,118402,118421,118426,118445,118449,118454,118470,118474,118479,118509,118513,118518,118534,118538,118543,118558,118562,118567,118583,118587,118592,118604,118616,118620,118625,118642,118646,118651,118669,118673,118678,118687,118691,118696],{"__ignoreMap":35},[39,118277,118278],{"class":41,"line":42},[39,118279,118280],{"class":128},"#更新相关的知识\n",[39,118282,118283],{"class":41,"line":92},[39,118284,118285],{"class":128},"# 更新软件包列表（从服务器获取最新软件信息）\n",[39,118287,118288,118290,118293],{"class":41,"line":112},[39,118289,25551],{"class":49},[39,118291,118292],{"class":237}," apt",[39,118294,27217],{"class":237},[39,118296,118297],{"class":41,"line":118},[39,118298,118299],{"class":128},"# 升级所有可更新的软件包（不删除旧包）\n",[39,118301,118302,118304,118306],{"class":41,"line":125},[39,118303,25551],{"class":49},[39,118305,118292],{"class":237},[39,118307,118308],{"class":237}," upgrade\n",[39,118310,118311],{"class":41,"line":132},[39,118312,118313],{"class":128},"#更新和升级软件包\n",[39,118315,118316,118318,118320,118323,118325,118327,118329,118332],{"class":41,"line":138},[39,118317,25551],{"class":49},[39,118319,118292],{"class":237},[39,118321,118322],{"class":237}," update",[39,118324,27165],{"class":53},[39,118326,25551],{"class":49},[39,118328,118292],{"class":237},[39,118330,118331],{"class":237}," upgrade",[39,118333,101956],{"class":74},[39,118335,118336],{"class":41,"line":169},[39,118337,118338],{"class":128},"#列出可更新的软件包及版本信息\n",[39,118340,118341,118344,118347],{"class":41,"line":190},[39,118342,118343],{"class":49},"apt",[39,118345,118346],{"class":237}," list",[39,118348,118349],{"class":74}," --upgradable\n",[39,118351,118352],{"class":41,"line":202},[39,118353,118354],{"class":128},"#彻底升级（处理依赖关系，可能删除旧包）\n",[39,118356,118357,118359,118361],{"class":41,"line":207},[39,118358,25551],{"class":49},[39,118360,118292],{"class":237},[39,118362,118363],{"class":237}," full-upgrade\n",[39,118365,118366],{"class":41,"line":212},[39,118367,118368],{"class":128},"#设置指定版本\n",[39,118370,118371,118373,118375,118377,118379,118382,118384,118386,118388,118390,118393,118395],{"class":41,"line":223},[39,118372,25551],{"class":49},[39,118374,118292],{"class":237},[39,118376,24808],{"class":237},[39,118378,29877],{"class":45},[39,118380,118381],{"class":237},"package_nam",[39,118383,1342],{"class":53},[39,118385,2220],{"class":45},[39,118387,1117],{"class":237},[39,118389,2170],{"class":45},[39,118391,118392],{"class":237},"version_numbe",[39,118394,1931],{"class":53},[39,118396,52282],{"class":45},[39,118398,118399],{"class":41,"line":228},[39,118400,118401],{"class":128},"#只安装软件包不升级\n",[39,118403,118404,118406,118408,118410,118412,118414,118416,118418],{"class":41,"line":263},[39,118405,25551],{"class":49},[39,118407,118292],{"class":237},[39,118409,24808],{"class":237},[39,118411,29877],{"class":45},[39,118413,118381],{"class":237},[39,118415,1342],{"class":53},[39,118417,2220],{"class":45},[39,118419,118420],{"class":74}," --no-upgrade\n",[39,118422,118423],{"class":41,"line":287},[39,118424,118425],{"class":128},"#只升级，不存在就不安装\n",[39,118427,118428,118430,118432,118434,118436,118438,118440,118442],{"class":41,"line":292},[39,118429,25551],{"class":49},[39,118431,118292],{"class":237},[39,118433,24808],{"class":237},[39,118435,29877],{"class":45},[39,118437,118381],{"class":237},[39,118439,1342],{"class":53},[39,118441,2220],{"class":45},[39,118443,118444],{"class":74}," --only-upgrade\n",[39,118446,118447],{"class":41,"line":305},[39,118448,122],{"emptyLinePlaceholder":121},[39,118450,118451],{"class":41,"line":310},[39,118452,118453],{"class":128},"#安装指定的软件命令\n",[39,118455,118456,118458,118460,118462,118464,118466,118468],{"class":41,"line":321},[39,118457,25551],{"class":49},[39,118459,118292],{"class":237},[39,118461,24808],{"class":237},[39,118463,29877],{"class":45},[39,118465,118381],{"class":237},[39,118467,1342],{"class":53},[39,118469,52282],{"class":45},[39,118471,118472],{"class":41,"line":713},[39,118473,122],{"emptyLinePlaceholder":121},[39,118475,118476],{"class":41,"line":718},[39,118477,118478],{"class":128},"#安装多个软件包\n",[39,118480,118481,118483,118485,118487,118489,118492,118495,118497,118499,118502,118504,118506],{"class":41,"line":723},[39,118482,25551],{"class":49},[39,118484,118292],{"class":237},[39,118486,24808],{"class":237},[39,118488,29877],{"class":45},[39,118490,118491],{"class":237},"package_",[39,118493,118494],{"class":45},"1>",[39,118496,29877],{"class":45},[39,118498,118491],{"class":237},[39,118500,118501],{"class":45},"2>",[39,118503,29877],{"class":45},[39,118505,118491],{"class":237},[39,118507,118508],{"class":45},"3>\n",[39,118510,118511],{"class":41,"line":729},[39,118512,122],{"emptyLinePlaceholder":121},[39,118514,118515],{"class":41,"line":735},[39,118516,118517],{"class":128},"#更新指定的软件命令\n",[39,118519,118520,118522,118524,118526,118528,118530,118532],{"class":41,"line":741},[39,118521,25551],{"class":49},[39,118523,118292],{"class":237},[39,118525,118322],{"class":237},[39,118527,29877],{"class":45},[39,118529,118381],{"class":237},[39,118531,1342],{"class":53},[39,118533,52282],{"class":45},[39,118535,118536],{"class":41,"line":747},[39,118537,122],{"emptyLinePlaceholder":121},[39,118539,118540],{"class":41,"line":753},[39,118541,118542],{"class":128},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[39,118544,118545,118547,118550,118552,118554,118556],{"class":41,"line":758},[39,118546,118343],{"class":49},[39,118548,118549],{"class":237}," show",[39,118551,29877],{"class":45},[39,118553,118381],{"class":237},[39,118555,1342],{"class":53},[39,118557,52282],{"class":45},[39,118559,118560],{"class":41,"line":763},[39,118561,122],{"emptyLinePlaceholder":121},[39,118563,118564],{"class":41,"line":772},[39,118565,118566],{"class":128},"#删除软件包命令\n",[39,118568,118569,118571,118573,118575,118577,118579,118581],{"class":41,"line":777},[39,118570,25551],{"class":49},[39,118572,118292],{"class":237},[39,118574,27054],{"class":237},[39,118576,29877],{"class":45},[39,118578,118381],{"class":237},[39,118580,1342],{"class":53},[39,118582,52282],{"class":45},[39,118584,118585],{"class":41,"line":785},[39,118586,122],{"emptyLinePlaceholder":121},[39,118588,118589],{"class":41,"line":796},[39,118590,118591],{"class":128},"# 清理旧版本和缓存（释放磁盘空间）\n",[39,118593,118594,118596,118598,118601],{"class":41,"line":808},[39,118595,25551],{"class":49},[39,118597,118292],{"class":237},[39,118599,118600],{"class":237}," autoremove",[39,118602,118603],{"class":128},"  # 删除不再需要的依赖和库文件\n",[39,118605,118606,118608,118610,118613],{"class":41,"line":823},[39,118607,25551],{"class":49},[39,118609,118292],{"class":237},[39,118611,118612],{"class":237}," clean",[39,118614,118615],{"class":128},"       # 清理下载的缓存包\n",[39,118617,118618],{"class":41,"line":839},[39,118619,122],{"emptyLinePlaceholder":121},[39,118621,118622],{"class":41,"line":845},[39,118623,118624],{"class":128},"#移除软件包及配置文件\n",[39,118626,118627,118629,118631,118634,118636,118638,118640],{"class":41,"line":856},[39,118628,25551],{"class":49},[39,118630,118292],{"class":237},[39,118632,118633],{"class":237}," purge",[39,118635,29877],{"class":45},[39,118637,118381],{"class":237},[39,118639,1342],{"class":53},[39,118641,52282],{"class":45},[39,118643,118644],{"class":41,"line":861},[39,118645,122],{"emptyLinePlaceholder":121},[39,118647,118648],{"class":41,"line":870},[39,118649,118650],{"class":128},"#查找软件包命令\n",[39,118652,118653,118655,118657,118660,118662,118665,118667],{"class":41,"line":9084},[39,118654,25551],{"class":49},[39,118656,118292],{"class":237},[39,118658,118659],{"class":237}," search",[39,118661,29877],{"class":45},[39,118663,118664],{"class":237},"keywor",[39,118666,1578],{"class":53},[39,118668,52282],{"class":45},[39,118670,118671],{"class":41,"line":9090},[39,118672,122],{"emptyLinePlaceholder":121},[39,118674,118675],{"class":41,"line":9102},[39,118676,118677],{"class":128},"#列出所有已安装的包\n",[39,118679,118680,118682,118684],{"class":41,"line":9114},[39,118681,118343],{"class":49},[39,118683,118346],{"class":237},[39,118685,118686],{"class":74}," --installed\n",[39,118688,118689],{"class":41,"line":9126},[39,118690,122],{"emptyLinePlaceholder":121},[39,118692,118693],{"class":41,"line":10784},[39,118694,118695],{"class":128},"#列出所有已安装的包的版本信息\n",[39,118697,118698,118700,118702],{"class":41,"line":10809},[39,118699,118343],{"class":49},[39,118701,118346],{"class":237},[39,118703,118704],{"class":74}," --all-versions\n",[1192,118706,118707],{},"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":92,"depth":92,"links":118709},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118254,"description":24350},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118716,"title":118717,"body":118718,"description":24350,"extension":1203,"meta":119459,"navigation":121,"path":119460,"seo":119461,"stem":119462,"__hash__":119463},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118719,"toc":119446},[118720,118723,118727,118730,118736,118740,118744,118750,118755,118760,118765,118770,118775,118778,118781,118784,118787,118791,118794,118799,118802,118807,118810,118815,118822,118825,118828,118831,118834,118837,118848,118852,118856,118861,118866,118870,118875,118879,118884,118888,118892,118897,118900,118945,118950,118954,118958,118963,118969,118974,118984,118989,118999,119004,119009,119036,119040,119043,119048,119051,119076,119080,119085,119088,119093,119098,119118,119123,119126,119141,119145,119198,119201,119206,119210,119213,119228,119231,119234,119239,119243,119247,119250,119254,119258,119261,119266,119271,119275,119282,119290,119293,119300,119305,119310,119313,119318,119325,119330,119337,119341,119343,119348,119352,119355,119358,119363,119366,119371,119374,119379,119384,119389,119393,119398,119402,119443],[10,118721,118717],{"id":118722},"_2-linux装机教程",[14,118724,118726],{"id":118725},"_21-实体机","2.1 实体机",[19,118728,118729],{},"使用清华源：（Ubuntu24.04）",[19,118731,118732],{},[922,118733,118734],{"href":118734,"rel":118735},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24839],[14,118737,118739],{"id":118738},"_22-普通虚拟机","2.2 普通虚拟机",[476,118741,118743],{"id":118742},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,118745,118746],{},[922,118747,118748],{"href":118748,"rel":118749},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24839],[19,118751,118752],{},[2585,118753],{"alt":35,"src":118754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,118756,118757],{},[2585,118758],{"alt":35,"src":118759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,118761,118762],{},[2585,118763],{"alt":35,"src":118764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,118766,118767],{},[2585,118768],{"alt":35,"src":118769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,118771,118772],{},[2585,118773],{"alt":35,"src":118774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,118776,118777],{},"内存4G（4096MB）；",[19,118779,118780],{},"CPU给4个核；",[19,118782,118783],{},"硬盘动态分配60G；",[19,118785,118786],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[476,118788,118790],{"id":118789},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118792,118793],{},"按照1.1的步骤下载Ubuntu",[19,118795,118796],{},[2585,118797],{"alt":35,"src":118798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,118800,118801],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118803,118804],{},[2585,118805],{"alt":35,"src":118806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118808,118809],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118811,118812],{},[2585,118813],{"alt":35,"src":118814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118816,118817,118818,118821],{},"选择“正常安装”(找不到都用Alt+F7)， ",[350,118819,118820],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118823,118824],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118826,118827],{},"将改动写入磁盘吗 继续",[19,118829,118830],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118832,118833],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118835,118836],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118838,118839,118840,118843,118844,118847],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[350,118841,118842],{},"除了"," 选不发送系统信息与不升级之外， ",[350,118845,118846],{},"其它"," 都跳过或前进）",[476,118849,118851],{"id":118850},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22971,118853,118855],{"id":118854},"_2231-全屏","2.2.3.1 全屏",[19,118857,118858],{},[2585,118859],{"alt":35,"src":118860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118862,118863],{},[2585,118864],{"alt":35,"src":118865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22971,118867,118869],{"id":118868},"_2232-文件交换","2.2.3.2 文件交换",[19,118871,118872],{},[2585,118873],{"alt":35,"src":118874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22971,118876,118878],{"id":118877},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118880,118881],{},[2585,118882],{"alt":35,"src":118883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118885,118887],{"id":118886},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[476,118889,118891],{"id":118890},"_231-简介与优缺点","2.3.1 简介与优缺点",[328,118893,118894],{},[331,118895,118896],{},"什么情况下推荐？",[19,118898,118899],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[328,118901,118902],{"start":92},[331,118903,118904,118905],{},"优缺点：",[328,118906,118907,118937],{},[331,118908,118909,118910],{},"优点：",[328,118911,118912,118915,118922,118925,118928,118931,118934],{},[331,118913,118914],{},"WSL2是最好的Linux发行版;(bushi)",[331,118916,118917,118918,118921],{},"性能损耗极低。且比在Windows上跑深度性能 ",[350,118919,118920],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[331,118923,118924],{},"非常方便调用USB设备，可以USB直通;",[331,118926,118927],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[331,118929,118930],{},"非常方便Win与WSL2互相传文件等协同操作;",[331,118932,118933],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[331,118935,118936],{},"非常方便使用Windows的VScode远程开发;",[331,118938,118939,118940],{},"缺点：",[328,118941,118942],{},[331,118943,118944],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118946,118947],{},[2585,118948],{"alt":35,"src":118949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[476,118951,118953],{"id":118952},"_232-安装教程","2.3.2 安装教程",[22971,118955,118957],{"id":118956},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[328,118959,118960],{},[331,118961,118962],{},"方法一(图形界面)",[19,118964,118965,118966,25593],{},"用Win+R输入",[26,118967,118968],{},"appwiz.cpl",[19,118970,118971],{},[2585,118972],{"alt":35,"src":118973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118975,118976,118977,118980,118981,27448],{},"点击OK进入 ",[350,118978,118979],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[350,118982,118983],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118985,118986],{},[2585,118987],{"alt":35,"src":118988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118990,118991,118992,101993,118995,118998],{},"选择 ",[350,118993,118994],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[350,118996,118997],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119000,119001],{},[2585,119002],{"alt":35,"src":119003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[328,119005,119006],{"start":92},[331,119007,119008],{},"方法二(命令行)",[30,119010,119014],{"className":119011,"code":119012,"language":119013,"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",[26,119015,119016,119021,119026,119031],{"__ignoreMap":35},[39,119017,119018],{"class":41,"line":42},[39,119019,119020],{},"# 开启 Linux 子系统\n",[39,119022,119023],{"class":41,"line":92},[39,119024,119025],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[39,119027,119028],{"class":41,"line":112},[39,119029,119030],{},"# 开启虚拟机平台\n",[39,119032,119033],{"class":41,"line":118},[39,119034,119035],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22971,119037,119039],{"id":119038},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119041,119042],{},"用管理员权限打开powershell",[19,119044,119045],{},[2585,119046],{"alt":35,"src":119047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119049,119050],{},"升级WSL并设置默认版本为WSL2",[30,119052,119054],{"className":119011,"code":119053,"language":119013,"meta":35,"style":35},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[26,119055,119056,119061,119066,119071],{"__ignoreMap":35},[39,119057,119058],{"class":41,"line":42},[39,119059,119060],{},"# 更新 wsl\n",[39,119062,119063],{"class":41,"line":92},[39,119064,119065],{},"wsl --update\n",[39,119067,119068],{"class":41,"line":112},[39,119069,119070],{},"# 将 wsl 版本设置为 wsl2\n",[39,119072,119073],{"class":41,"line":118},[39,119074,119075],{},"wsl --set-default-version 2\n",[22971,119077,119079],{"id":119078},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[328,119081,119082],{},[331,119083,119084],{},"方式一(商店下载)",[19,119086,119087],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119089,119090],{},[2585,119091],{"alt":35,"src":119092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[328,119094,119095],{"start":92},[331,119096,119097],{},"方式二(命令行安装)",[30,119099,119101],{"className":119011,"code":119100,"language":119013,"meta":35,"style":35},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[26,119102,119103,119108,119113],{"__ignoreMap":35},[39,119104,119105],{"class":41,"line":42},[39,119106,119107],{},"# 列出可安装的 Linux 版本\n",[39,119109,119110],{"class":41,"line":92},[39,119111,119112],{},"#（需要科学手段）\n",[39,119114,119115],{"class":41,"line":112},[39,119116,119117],{},"wsl --list --online\n",[19,119119,119120],{},[2585,119121],{"alt":35,"src":119122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119124,119125],{},"选择对应发行版并安装",[30,119127,119129],{"className":119011,"code":119128,"language":119013,"meta":35,"style":35},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[26,119130,119131,119136],{"__ignoreMap":35},[39,119132,119133],{"class":41,"line":42},[39,119134,119135],{},"# Ubuntu安装完毕后需要重启系统\n",[39,119137,119138],{"class":41,"line":92},[39,119139,119140],{},"wsl --install -d Ubuntu-24.04\n",[22971,119142,119144],{"id":119143},"_2324-查看系统状态","2.3.2.4 查看系统状态",[30,119146,119148],{"className":119011,"code":119147,"language":119013,"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",[26,119149,119150,119155,119160,119165,119170,119174,119178,119183,119188,119193],{"__ignoreMap":35},[39,119151,119152],{"class":41,"line":42},[39,119153,119154],{},"# 查看 wsl\n",[39,119156,119157],{"class":41,"line":92},[39,119158,119159],{},"wsl -l\n",[39,119161,119162],{"class":41,"line":112},[39,119163,119164],{},"# 查看 wsl 运行版本或模式\n",[39,119166,119167],{"class":41,"line":118},[39,119168,119169],{},"wsl -l -v\n",[39,119171,119172],{"class":41,"line":125},[39,119173,122],{"emptyLinePlaceholder":121},[39,119175,119176],{"class":41,"line":132},[39,119177,122],{"emptyLinePlaceholder":121},[39,119179,119180],{"class":41,"line":138},[39,119181,119182],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[39,119184,119185],{"class":41,"line":169},[39,119186,119187],{},"wsl --set-version \u003Cdistro> 2\n",[39,119189,119190],{"class":41,"line":190},[39,119191,119192],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[39,119194,119195],{"class":41,"line":202},[39,119196,119197],{},"wsl --unregister \u003Cdistro>\n",[19,119199,119200],{},"输出Version为2即正常",[19,119202,119203],{},[2585,119204],{"alt":35,"src":119205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22971,119207,119209],{"id":119208},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119211,119212],{},"直接在Powershell里输入wsl命令进入子系统",[30,119214,119216],{"className":119011,"code":119215,"language":119013,"meta":35,"style":35},"# 进入子系统\nwsl\n",[26,119217,119218,119223],{"__ignoreMap":35},[39,119219,119220],{"class":41,"line":42},[39,119221,119222],{},"# 进入子系统\n",[39,119224,119225],{"class":41,"line":92},[39,119226,119227],{},"wsl\n",[19,119229,119230],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119232,119233],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119235,119236],{},[2585,119237],{"alt":35,"src":119238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[476,119240,119242],{"id":119241},"_233-配置各种环境","2.3.3 配置各种环境",[22971,119244,119246],{"id":119245},"_2331-换源","2.3.3.1 换源",[19,119248,119249],{},"(同实体机LINUX，往下找教程)",[22971,119251,119253],{"id":119252},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23883,119255,119257],{"id":119256},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119259,119260],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119262,119263],{},[2585,119264],{"alt":35,"src":119265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119267,119268],{},[2585,119269],{"alt":35,"src":119270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23883,119272,119274],{"id":119273},"_23322-cuda","2.3.3.2.2 CUDA",[19,119276,119277,119278],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[922,119279,119280],{"href":119280,"rel":119281},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24839],[19,119283,119284,119287],{},[2585,119285],{"alt":35,"src":119286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[2585,119288],{"alt":35,"src":119289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119291,119292],{},"在下方的网站，选择合适的版本。",[19,119294,119295,119296],{},"WSL2 专属 CUDA 指南：",[922,119297,119298],{"href":119298,"rel":119299},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24839],[19,119301,119302],{},[350,119303,119304],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119306,119307],{},[2585,119308],{"alt":35,"src":119309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119311,119312],{},"挨行敲一遍",[19,119314,119315],{},[2585,119316],{"alt":35,"src":119317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119319,119320,119321,119324],{},"敲完后，输入",[26,119322,119323],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119326,119327],{},[2585,119328],{"alt":35,"src":119329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119331,119332,119333,119336],{},"（请详看下方教程的",[350,119334,119335],{},"安装CUDA的配置环境来看","如何配置环境）",[23883,119338,119340],{"id":119339},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119342,119249],{},[19,119344,119345],{},[2585,119346],{"alt":35,"src":119347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22971,119349,119351],{"id":119350},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119353,119354],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119356,119357],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119359,119360],{},[2585,119361],{"alt":35,"src":119362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119364,119365],{},"连接WSL2",[19,119367,119368],{},[2585,119369],{"alt":35,"src":119370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119372,119373],{},"远程开发成功。",[19,119375,119376],{},[2585,119377],{"alt":35,"src":119378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119380,119381],{},[2585,119382],{"alt":35,"src":119383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,119385,119386],{},[2585,119387],{"alt":35,"src":119388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22971,119390,119392],{"id":119391},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,119394,119395],{},[2585,119396],{"alt":35,"src":119397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22971,119399,119401],{"id":119400},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[30,119403,119405],{"className":118271,"code":119404,"language":118273,"meta":35,"style":35},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[26,119406,119407,119415,119423,119434,119438],{"__ignoreMap":35},[39,119408,119409,119411,119413],{"class":41,"line":42},[39,119410,25551],{"class":49},[39,119412,118292],{"class":237},[39,119414,27217],{"class":237},[39,119416,119417,119419,119421],{"class":41,"line":92},[39,119418,25551],{"class":49},[39,119420,118292],{"class":237},[39,119422,118308],{"class":237},[39,119424,119425,119427,119429,119431],{"class":41,"line":112},[39,119426,25551],{"class":49},[39,119428,118292],{"class":237},[39,119430,24808],{"class":237},[39,119432,119433],{"class":237}," mesa-utils\n",[39,119435,119436],{"class":41,"line":118},[39,119437,122],{"emptyLinePlaceholder":121},[39,119439,119440],{"class":41,"line":125},[39,119441,119442],{"class":128},"#然后重启wsl2即可\n",[1192,119444,119445],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":92,"depth":92,"links":119447},[119448,119449,119454],{"id":118725,"depth":92,"text":118726},{"id":118738,"depth":92,"text":118739,"children":119450},[119451,119452,119453],{"id":118742,"depth":112,"text":118743},{"id":118789,"depth":112,"text":118790},{"id":118850,"depth":112,"text":118851},{"id":118886,"depth":92,"text":118887,"children":119455},[119456,119457,119458],{"id":118890,"depth":112,"text":118891},{"id":118952,"depth":112,"text":118953},{"id":119241,"depth":112,"text":119242},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118717,"description":24350},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119465,"title":119466,"body":119467,"description":24350,"extension":1203,"meta":122403,"navigation":121,"path":122404,"seo":122405,"stem":122406,"__hash__":122407},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119468,"toc":122375},[119469,119472,119476,119482,119486,119492,119496,119684,119687,119692,119696,119700,119703,119706,119712,119717,119720,119723,119728,119761,119766,119770,119847,119850,119855,119859,119862,119901,119904,119913,119931,119936,119943,120060,120065,120068,120095,120100,120104,120113,120163,120170,120174,120177,120191,120198,120232,120237,120241,120264,120267,120272,120276,120279,120282,120285,120327,120331,120334,120337,120378,120382,120386,120389,120394,120399,120402,120425,120428,120436,120441,120444,120449,120454,120457,120462,120466,120471,120494,120499,120561,120569,120574,120579,120582,120587,120590,120595,120600,120618,120623,120629,120634,120648,120652,120655,120658,120661,120704,120707,120712,120813,120816,120821,120825,120829,120866,120870,120874,120878,120924,120928,120973,120977,120984,120992,121047,121050,121127,121130,121153,121157,121160,121165,121170,121178,121181,121186,121191,121196,121199,121204,121213,121216,121221,121224,121295,121300,121303,121308,121311,121316,121319,121324,121327,121332,121337,121340,121415,121418,121431,121436,121439,121453,121456,121485,121490,121519,121522,121527,121531,121536,121545,121548,121553,121556,121561,121564,121567,121572,121575,121580,121585,121588,121593,121596,121721,121726,121756,121759,121764,121769,121786,121789,121832,121835,121862,121867,121880,122023,122027,122032,122046,122049,122100,122103,122133,122136,122152,122157,122171,122174,122241,122246,122255,122260,122263,122275,122280,122287,122311,122314,122319,122322,122341,122346,122353,122365,122372],[10,119470,119466],{"id":119471},"_3-安装必备配置",[14,119473,119475],{"id":119474},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[30,119477,119480],{"className":119478,"code":119479,"language":6267},[6265],"  打开下方网站（注意，该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",[26,119481,119479],{"__ignoreMap":35},[476,119483,119485],{"id":119484},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[30,119487,119490],{"className":119488,"code":119489,"language":6267},[6265],"  输入以下命令\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",[26,119491,119489],{"__ignoreMap":35},[476,119493,119495],{"id":119494},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[30,119497,119501],{"className":119498,"code":119499,"language":119500,"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",[26,119502,119503,119511,119522,119534,119548,119552,119562,119567,119571,119575,119580,119584,119596,119600,119605,119609,119620,119624,119640,119644,119655,119659,119664,119668,119676],{"__ignoreMap":35},[39,119504,119505,119507,119509],{"class":41,"line":42},[39,119506,25551],{"class":49},[39,119508,118292],{"class":237},[39,119510,27217],{"class":237},[39,119512,119513,119515,119517,119519],{"class":41,"line":92},[39,119514,25551],{"class":49},[39,119516,118292],{"class":237},[39,119518,24808],{"class":237},[39,119520,119521],{"class":237}," vim\n",[39,119523,119524,119526,119529,119531],{"class":41,"line":112},[39,119525,25551],{"class":49},[39,119527,119528],{"class":237}," rm",[39,119530,26300],{"class":74},[39,119532,119533],{"class":237}," \u002Fetc\u002Fapt\u002Fsources.list\n",[39,119535,119536,119538,119540,119542,119545],{"class":41,"line":118},[39,119537,25551],{"class":49},[39,119539,119528],{"class":237},[39,119541,26300],{"class":74},[39,119543,119544],{"class":237}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[39,119546,119547],{"class":74},"**\n",[39,119549,119550],{"class":41,"line":125},[39,119551,122],{"emptyLinePlaceholder":121},[39,119553,119554,119556,119559],{"class":41,"line":132},[39,119555,25551],{"class":49},[39,119557,119558],{"class":237}," vim",[39,119560,119561],{"class":237}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[39,119563,119564],{"class":41,"line":138},[39,119565,119566],{"class":237},"```\n",[39,119568,119569],{"class":41,"line":169},[39,119570,122],{"emptyLinePlaceholder":121},[39,119572,119573],{"class":41,"line":190},[39,119574,122],{"emptyLinePlaceholder":121},[39,119576,119577],{"class":41,"line":202},[39,119578,119579],{"class":49},"选择好Ubuntu版本后，复制下方的内容。\n",[39,119581,119582],{"class":41,"line":207},[39,119583,122],{"emptyLinePlaceholder":121},[39,119585,119586,119588,119591,119594],{"class":41,"line":212},[39,119587,1492],{"class":45},[39,119589,119590],{"class":237},"[](",[39,119592,119593],{"class":49},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[39,119595,574],{"class":237},[39,119597,119598],{"class":41,"line":223},[39,119599,122],{"emptyLinePlaceholder":121},[39,119601,119602],{"class":41,"line":228},[39,119603,119604],{"class":49},"粘贴进去\n",[39,119606,119607],{"class":41,"line":263},[39,119608,122],{"emptyLinePlaceholder":121},[39,119610,119611,119613,119615,119618],{"class":41,"line":287},[39,119612,1492],{"class":45},[39,119614,119590],{"class":237},[39,119616,119617],{"class":49},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[39,119619,574],{"class":237},[39,119621,119622],{"class":41,"line":292},[39,119623,122],{"emptyLinePlaceholder":121},[39,119625,119626,119629,119632,119635,119637],{"class":41,"line":305},[39,119627,119628],{"class":49},"按一下ESC，然后英文冒号，输入",[39,119630,119631],{"class":237}," `",[39,119633,119634],{"class":49},":wq!",[39,119636,2232],{"class":237},[39,119638,119639],{"class":49},"然后回车\n",[39,119641,119642],{"class":41,"line":310},[39,119643,122],{"emptyLinePlaceholder":121},[39,119645,119646,119648,119650,119653],{"class":41,"line":321},[39,119647,1492],{"class":45},[39,119649,119590],{"class":237},[39,119651,119652],{"class":49},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[39,119654,574],{"class":237},[39,119656,119657],{"class":41,"line":713},[39,119658,122],{"emptyLinePlaceholder":121},[39,119660,119661],{"class":41,"line":718},[39,119662,119663],{"class":49},"输入以下命令\n",[39,119665,119666],{"class":41,"line":723},[39,119667,122],{"emptyLinePlaceholder":121},[39,119669,119670,119673],{"class":41,"line":729},[39,119671,119672],{"class":237},"```",[39,119674,119675],{"class":49},"Bash\n",[39,119677,119678,119680,119682],{"class":41,"line":735},[39,119679,25551],{"class":49},[39,119681,118292],{"class":237},[39,119683,27217],{"class":237},[19,119685,119686],{},"这里被替换成对应学校则成功",[19,119688,119689],{},[2585,119690],{"alt":35,"src":119691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119693,119695],{"id":119694},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[476,119697,119699],{"id":119698},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119701,119702],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119704,119705],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119707,119708],{},[922,119709,119710],{"href":119710,"rel":119711},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24839],[19,119713,119714],{},[2585,119715],{"alt":35,"src":119716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119718,119719],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119721,119722],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119724,119725],{},[2585,119726],{"alt":35,"src":119727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[30,119729,119731],{"className":118271,"code":119730,"language":118273,"meta":35,"style":35},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[26,119732,119733,119738,119745,119750],{"__ignoreMap":35},[39,119734,119735],{"class":41,"line":42},[39,119736,119737],{"class":128},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[39,119739,119740,119742],{"class":41,"line":92},[39,119741,102251],{"class":74},[39,119743,119744],{"class":237}," ~\u002FDownloads\n",[39,119746,119747],{"class":41,"line":112},[39,119748,119749],{"class":128},"#下方chrome安装包名不一定是这个，根据名字来看\n",[39,119751,119752,119754,119756,119758],{"class":41,"line":118},[39,119753,25551],{"class":49},[39,119755,118292],{"class":237},[39,119757,24808],{"class":237},[39,119759,119760],{"class":237}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,119762,119763],{},[2585,119764],{"alt":35,"src":119765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[476,119767,119769],{"id":119768},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[30,119771,119773],{"className":118271,"code":119772,"language":118273,"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",[26,119774,119775,119780,119788,119799,119804,119808,119813,119823,119831,119842],{"__ignoreMap":35},[39,119776,119777],{"class":41,"line":42},[39,119778,119779],{"class":128},"# 老版\n",[39,119781,119782,119784,119786],{"class":41,"line":92},[39,119783,25551],{"class":49},[39,119785,118292],{"class":237},[39,119787,27217],{"class":237},[39,119789,119790,119792,119794,119796],{"class":41,"line":112},[39,119791,25551],{"class":49},[39,119793,118292],{"class":237},[39,119795,24808],{"class":237},[39,119797,119798],{"class":237}," neofetch\n",[39,119800,119801],{"class":41,"line":118},[39,119802,119803],{"class":49},"neofetch\n",[39,119805,119806],{"class":41,"line":125},[39,119807,122],{"emptyLinePlaceholder":121},[39,119809,119810],{"class":41,"line":132},[39,119811,119812],{"class":128},"# 新版\n",[39,119814,119815,119817,119820],{"class":41,"line":138},[39,119816,25551],{"class":49},[39,119818,119819],{"class":237}," add-apt-repository",[39,119821,119822],{"class":237}," ppa:zhangsongcui3371\u002Ffastfetch\n",[39,119824,119825,119827,119829],{"class":41,"line":169},[39,119826,25551],{"class":49},[39,119828,118292],{"class":237},[39,119830,27217],{"class":237},[39,119832,119833,119835,119837,119839],{"class":41,"line":190},[39,119834,25551],{"class":49},[39,119836,118292],{"class":237},[39,119838,24808],{"class":237},[39,119840,119841],{"class":237}," fastfetch\n",[39,119843,119844],{"class":41,"line":202},[39,119845,119846],{"class":49},"fastfetch\n",[19,119848,119849],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119851,119852],{},[2585,119853],{"alt":35,"src":119854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[476,119856,119858],{"id":119857},"_323-移除snap应用","3.2.3 移除snap应用",[19,119860,119861],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[30,119863,119865],{"className":118271,"code":119864,"language":118273,"meta":35,"style":35},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[26,119866,119867,119879,119890],{"__ignoreMap":35},[39,119868,119869,119871,119873,119876],{"class":41,"line":42},[39,119870,25551],{"class":49},[39,119872,27488],{"class":237},[39,119874,119875],{"class":237}," disable",[39,119877,119878],{"class":237}," snapd.service\n",[39,119880,119881,119883,119885,119887],{"class":41,"line":92},[39,119882,25551],{"class":49},[39,119884,27488],{"class":237},[39,119886,119875],{"class":237},[39,119888,119889],{"class":237}," snapd.socket\n",[39,119891,119892,119894,119896,119898],{"class":41,"line":112},[39,119893,25551],{"class":49},[39,119895,27488],{"class":237},[39,119897,119875],{"class":237},[39,119899,119900],{"class":237}," snapd.seeded.service\n",[19,119902,119903],{},"然后查看snap应用列表",[19,119905,119906,119907,119912],{},"根据你安装的选择不同（最小安装或普通安装），有",[922,119908,119911],{"href":119909,"rel":119910},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24839],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[30,119914,119916],{"className":118271,"code":119915,"language":118273,"meta":35,"style":35},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[26,119917,119918,119923],{"__ignoreMap":35},[39,119919,119920],{"class":41,"line":42},[39,119921,119922],{"class":128},"# 查询当前系统上snap安装了哪些app\n",[39,119924,119925,119928],{"class":41,"line":92},[39,119926,119927],{"class":49},"snap",[39,119929,119930],{"class":237}," list\n",[19,119932,119933],{},[2585,119934],{"alt":35,"src":119935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119937,119938,119939,119942],{},"卸载掉图中所有应用，按照 ",[350,119940,119941],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[30,119944,119946],{"className":118271,"code":119945,"language":118273,"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",[26,119947,119948,119953,119965,119970,119981,119986,119997,120002,120013,120018,120022,120027,120038,120049],{"__ignoreMap":35},[39,119949,119950],{"class":41,"line":42},[39,119951,119952],{"class":128},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[39,119954,119955,119957,119960,119962],{"class":41,"line":92},[39,119956,25551],{"class":49},[39,119958,119959],{"class":237}," snap",[39,119961,27054],{"class":237},[39,119963,119964],{"class":237}," snap-store\n",[39,119966,119967],{"class":41,"line":112},[39,119968,119969],{"class":128},"#移除firefox浏览器\n",[39,119971,119972,119974,119976,119978],{"class":41,"line":118},[39,119973,25551],{"class":49},[39,119975,119959],{"class":237},[39,119977,27054],{"class":237},[39,119979,119980],{"class":237}," firefox\n",[39,119982,119983],{"class":41,"line":125},[39,119984,119985],{"class":128},"#移除gnome-42-2204\n",[39,119987,119988,119990,119992,119994],{"class":41,"line":132},[39,119989,25551],{"class":49},[39,119991,119959],{"class":237},[39,119993,27054],{"class":237},[39,119995,119996],{"class":237}," gnome-42-2204\n",[39,119998,119999],{"class":41,"line":138},[39,120000,120001],{"class":128},"#移除gtk-common-themes\n",[39,120003,120004,120006,120008,120010],{"class":41,"line":169},[39,120005,25551],{"class":49},[39,120007,119959],{"class":237},[39,120009,27054],{"class":237},[39,120011,120012],{"class":237}," gtk-common-themes\n",[39,120014,120015],{"class":41,"line":190},[39,120016,120017],{"class":128},"#移除其它...\n",[39,120019,120020],{"class":41,"line":202},[39,120021,3760],{"class":53},[39,120023,120024],{"class":41,"line":207},[39,120025,120026],{"class":128},"#移除core22,bare以及snapd\n",[39,120028,120029,120031,120033,120035],{"class":41,"line":212},[39,120030,25551],{"class":49},[39,120032,119959],{"class":237},[39,120034,27054],{"class":237},[39,120036,120037],{"class":237}," core22\n",[39,120039,120040,120042,120044,120046],{"class":41,"line":223},[39,120041,25551],{"class":49},[39,120043,119959],{"class":237},[39,120045,27054],{"class":237},[39,120047,120048],{"class":237}," bare\n",[39,120050,120051,120053,120055,120057],{"class":41,"line":228},[39,120052,25551],{"class":49},[39,120054,119959],{"class":237},[39,120056,27054],{"class":237},[39,120058,120059],{"class":237}," snapd\n",[19,120061,120062],{},[2585,120063],{"alt":35,"src":120064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120066,120067],{},"输入以下命令查看是否还有snap包",[30,120069,120071],{"className":118271,"code":120070,"language":118273,"meta":35,"style":35},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[26,120072,120073,120079,120083,120087,120091],{"__ignoreMap":35},[39,120074,120075,120077],{"class":41,"line":42},[39,120076,119927],{"class":49},[39,120078,119930],{"class":237},[39,120080,120081],{"class":41,"line":92},[39,120082,119779],{"class":128},[39,120084,120085],{"class":41,"line":112},[39,120086,119803],{"class":49},[39,120088,120089],{"class":41,"line":118},[39,120090,119812],{"class":128},[39,120092,120093],{"class":41,"line":125},[39,120094,119846],{"class":49},[19,120096,120097],{},[2585,120098],{"alt":35,"src":120099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[476,120101,120103],{"id":120102},"_324-移除snap","3.2.4 移除snap",[19,120105,120106,120107,120112],{},"在删除掉",[922,120108,120111],{"href":120109,"rel":120110},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24839],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[30,120114,120116],{"className":118271,"code":120115,"language":118273,"meta":35,"style":35}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[26,120117,120118,120123,120136,120141,120152],{"__ignoreMap":35},[39,120119,120120],{"class":41,"line":42},[39,120121,120122],{"class":128}," #使用apt移除掉snap\n",[39,120124,120125,120127,120129,120131,120134],{"class":41,"line":92},[39,120126,25551],{"class":49},[39,120128,118292],{"class":237},[39,120130,118600],{"class":237},[39,120132,120133],{"class":74}," --purge",[39,120135,120059],{"class":237},[39,120137,120138],{"class":41,"line":112},[39,120139,120140],{"class":128},"#移除snapd的一些目录\n",[39,120142,120143,120145,120147,120149],{"class":41,"line":118},[39,120144,25551],{"class":49},[39,120146,119528],{"class":237},[39,120148,26300],{"class":74},[39,120150,120151],{"class":237}," \u002Fvar\u002Fcache\u002Fsnapd\n",[39,120153,120154,120156,120158,120160],{"class":41,"line":125},[39,120155,25551],{"class":49},[39,120157,119528],{"class":237},[39,120159,26300],{"class":74},[39,120161,120162],{"class":237}," ~\u002Fsnap\n",[19,120164,120165,120166,120169],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[26,120167,120168],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[476,120171,120173],{"id":120172},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120175,120176],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[30,120178,120180],{"className":118271,"code":120179,"language":118273,"meta":35,"style":35},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[26,120181,120182],{"__ignoreMap":35},[39,120183,120184,120186,120188],{"class":41,"line":42},[39,120185,25551],{"class":49},[39,120187,119558],{"class":237},[39,120189,120190],{"class":237}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120192,120193,120194,120197],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[26,120195,120196],{},":wq"," 回车",[30,120199,120201],{"className":118271,"code":120200,"language":118273,"meta":35,"style":35},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[26,120202,120203,120210,120224],{"__ignoreMap":35},[39,120204,120205,120208],{"class":41,"line":42},[39,120206,120207],{"class":49},"Package:",[39,120209,120059],{"class":237},[39,120211,120212,120215,120218,120221],{"class":41,"line":92},[39,120213,120214],{"class":49},"Pin:",[39,120216,120217],{"class":237}," release",[39,120219,120220],{"class":237}," a=",[39,120222,120223],{"class":74},"*\n",[39,120225,120226,120229],{"class":41,"line":112},[39,120227,120228],{"class":49},"Pin-Priority:",[39,120230,120231],{"class":74}," -10\n",[19,120233,120234],{},[2585,120235],{"alt":35,"src":120236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[476,120238,120240],{"id":120239},"_326-测试是否成功","3.2.6 测试是否成功",[30,120242,120244],{"className":118271,"code":120243,"language":118273,"meta":35,"style":35},"sudo apt update\nsudo apt install firefox\n",[26,120245,120246,120254],{"__ignoreMap":35},[39,120247,120248,120250,120252],{"class":41,"line":42},[39,120249,25551],{"class":49},[39,120251,118292],{"class":237},[39,120253,27217],{"class":237},[39,120255,120256,120258,120260,120262],{"class":41,"line":92},[39,120257,25551],{"class":49},[39,120259,118292],{"class":237},[39,120261,24808],{"class":237},[39,120263,119980],{"class":237},[19,120265,120266],{},"这里提示snapd无法被安装，就证明成功了",[19,120268,120269],{},[2585,120270],{"alt":35,"src":120271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[476,120273,120275],{"id":120274},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120277,120278],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120280,120281],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120283,120284],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[30,120286,120288],{"className":118271,"code":120287,"language":118273,"meta":35,"style":35},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[26,120289,120290,120295,120304,120309,120317],{"__ignoreMap":35},[39,120291,120292],{"class":41,"line":42},[39,120293,120294],{"class":128},"# 添加Mozilla提供的源\n",[39,120296,120297,120299,120301],{"class":41,"line":92},[39,120298,25551],{"class":49},[39,120300,119819],{"class":237},[39,120302,120303],{"class":237}," ppa:mozillateam\u002Fppa\n",[39,120305,120306],{"class":41,"line":112},[39,120307,120308],{"class":128},"# 安装Firefox\n",[39,120310,120311,120313,120315],{"class":41,"line":118},[39,120312,25551],{"class":49},[39,120314,118292],{"class":237},[39,120316,27217],{"class":237},[39,120318,120319,120321,120323,120325],{"class":41,"line":125},[39,120320,25551],{"class":49},[39,120322,118292],{"class":237},[39,120324,24808],{"class":237},[39,120326,119980],{"class":237},[476,120328,120330],{"id":120329},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120332,120333],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120335,120336],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[30,120338,120340],{"className":118271,"code":120339,"language":118273,"meta":35,"style":35},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[26,120341,120342,120347,120357,120365,120369],{"__ignoreMap":35},[39,120343,120344],{"class":41,"line":42},[39,120345,120346],{"class":128},"#删掉禁止安装snap的配置文件\n",[39,120348,120349,120351,120353,120355],{"class":41,"line":92},[39,120350,25551],{"class":49},[39,120352,119528],{"class":237},[39,120354,26300],{"class":74},[39,120356,120190],{"class":237},[39,120358,120359,120361,120363],{"class":41,"line":112},[39,120360,25551],{"class":49},[39,120362,118292],{"class":237},[39,120364,27217],{"class":237},[39,120366,120367],{"class":41,"line":118},[39,120368,122],{"emptyLinePlaceholder":121},[39,120370,120371,120373,120375],{"class":41,"line":125},[39,120372,25551],{"class":49},[39,120374,118292],{"class":237},[39,120376,120377],{"class":237}," dist-update\n",[14,120379,120381],{"id":120380},"_33-中文输入法","3.3 中文输入法",[476,120383,120385],{"id":120384},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,120387,120388],{},"官网下载搜狗输入法",[19,120390,120391],{},[2585,120392],{"alt":35,"src":120393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,120395,120396],{},[2585,120397],{"alt":35,"src":120398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,120400,120401],{},"打开终端输入如下",[30,120403,120405],{"className":118271,"code":120404,"language":118273,"meta":35,"style":35},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[26,120406,120407,120414],{"__ignoreMap":35},[39,120408,120409,120411],{"class":41,"line":42},[39,120410,102251],{"class":74},[39,120412,120413],{"class":237}," ~\u002FDownloads\u002F\n",[39,120415,120416,120418,120420,120422],{"class":41,"line":92},[39,120417,25551],{"class":49},[39,120419,118292],{"class":237},[39,120421,24808],{"class":237},[39,120423,120424],{"class":237}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,120426,120427],{},"打开Fcitx",[19,120429,120430,120433],{},[2585,120431],{"alt":35,"src":120432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[2585,120434],{"alt":35,"src":120435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,120437,120438],{},[2585,120439],{"alt":35,"src":120440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120442,120443],{},"添加搜狗输入法",[19,120445,120446],{},[2585,120447],{"alt":35,"src":120448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120450,120451],{},[2585,120452],{"alt":35,"src":120453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120455,120456],{},"将搜狗输入法设置为唯一输入法",[19,120458,120459],{},[2585,120460],{"alt":35,"src":120461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[476,120463,120465],{"id":120464},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[328,120467,120468],{},[331,120469,120470],{},"卸载旧输入法",[30,120472,120474],{"className":119498,"code":120473,"language":119500,"meta":35,"style":35},"sudo apt purge fcitx* ibus*\n",[26,120475,120476],{"__ignoreMap":35},[39,120477,120478,120480,120482,120484,120487,120489,120492],{"class":41,"line":42},[39,120479,25551],{"class":49},[39,120481,118292],{"class":237},[39,120483,118633],{"class":237},[39,120485,120486],{"class":237}," fcitx",[39,120488,1717],{"class":74},[39,120490,120491],{"class":237}," ibus",[39,120493,120223],{"class":74},[328,120495,120496],{"start":92},[331,120497,120498],{},"安装Fcitx5",[30,120500,120502],{"className":118271,"code":120501,"language":118273,"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",[26,120503,120504,120509,120523,120527,120532,120541,120549],{"__ignoreMap":35},[39,120505,120506],{"class":41,"line":42},[39,120507,120508],{"class":128},"# Ubuntu22.04及以上、Debian12及以上\n",[39,120510,120511,120513,120515,120517,120520],{"class":41,"line":92},[39,120512,25551],{"class":49},[39,120514,118292],{"class":237},[39,120516,24808],{"class":237},[39,120518,120519],{"class":237}," fcitx5",[39,120521,120522],{"class":237}," fcitx5-chinese-addons\n",[39,120524,120525],{"class":41,"line":112},[39,120526,122],{"emptyLinePlaceholder":121},[39,120528,120529],{"class":41,"line":118},[39,120530,120531],{"class":128},"# Ubuntu20.04\n",[39,120533,120534,120536,120538],{"class":41,"line":125},[39,120535,25551],{"class":49},[39,120537,119819],{"class":237},[39,120539,120540],{"class":237}," ppa:zhsj\u002Ffcitx5\n",[39,120542,120543,120545,120547],{"class":41,"line":132},[39,120544,25551],{"class":49},[39,120546,118292],{"class":237},[39,120548,27217],{"class":237},[39,120550,120551,120553,120555,120557,120559],{"class":41,"line":138},[39,120552,25551],{"class":49},[39,120554,118292],{"class":237},[39,120556,24808],{"class":237},[39,120558,120519],{"class":237},[39,120560,120522],{"class":237},[328,120562,120563,120566],{"start":112},[331,120564,120565],{},"Reboot System",[331,120567,120568],{},"启动Fcitx5",[19,120570,120571],{},[2585,120572],{"alt":35,"src":120573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[328,120575,120576],{"start":125},[331,120577,120578],{},"修改一些设置",[19,120580,120581],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120583,120584],{},[2585,120585],{"alt":35,"src":120586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120588,120589],{},"添加快捷键以便于更好切换中英文",[19,120591,120592],{},[2585,120593],{"alt":35,"src":120594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[328,120596,120597],{"start":132},[331,120598,120599],{},"重启",[30,120601,120603],{"className":119498,"code":120602,"language":119500,"meta":35,"style":35},"sudo shutdown -r now\n",[26,120604,120605],{"__ignoreMap":35},[39,120606,120607,120609,120612,120615],{"class":41,"line":42},[39,120608,25551],{"class":49},[39,120610,120611],{"class":237}," shutdown",[39,120613,120614],{"class":74}," -r",[39,120616,120617],{"class":237}," now\n",[328,120619,120620],{"start":138},[331,120621,120622],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120624,120625],{},[922,120626,120627],{"href":120627,"rel":120628},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24839],[328,120630,120631],{"start":169},[331,120632,120633],{},"再重启",[30,120635,120636],{"className":119498,"code":120602,"language":119500,"meta":35,"style":35},[26,120637,120638],{"__ignoreMap":35},[39,120639,120640,120642,120644,120646],{"class":41,"line":42},[39,120641,25551],{"class":49},[39,120643,120611],{"class":237},[39,120645,120614],{"class":74},[39,120647,120617],{"class":237},[14,120649,120651],{"id":120650},"_34-pip3源替换","3.4 pip3源替换",[19,120653,120654],{},"非Debian系发行版需要做。",[19,120656,120657],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120659,120660],{},"使用dnf的系统也可能不用做。",[30,120662,120664],{"className":118271,"code":120663,"language":118273,"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",[26,120665,120666,120671,120678,120683,120688],{"__ignoreMap":35},[39,120667,120668],{"class":41,"line":42},[39,120669,120670],{"class":128},"# 检查是否已安装 pip\n",[39,120672,120673,120676],{"class":41,"line":92},[39,120674,120675],{"class":49},"pip3",[39,120677,27268],{"class":74},[39,120679,120680],{"class":41,"line":112},[39,120681,120682],{"class":128},"# 如果未安装，先安装 pip3（见下方）\n",[39,120684,120685],{"class":41,"line":118},[39,120686,120687],{"class":128},"# 配置 pip 使用清华源\n",[39,120689,120690,120692,120695,120698,120701],{"class":41,"line":125},[39,120691,120675],{"class":49},[39,120693,120694],{"class":237}," config",[39,120696,120697],{"class":237}," set",[39,120699,120700],{"class":237}," global.index-url",[39,120702,120703],{"class":237}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120705,120706],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120708,120709],{},[2585,120710],{"alt":35,"src":120711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[30,120713,120715],{"className":118271,"code":120714,"language":118273,"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",[26,120716,120717,120722,120730,120741,120745,120750,120769,120773,120778,120790,120794,120799],{"__ignoreMap":35},[39,120718,120719],{"class":41,"line":42},[39,120720,120721],{"class":128},"#安装pip3\n",[39,120723,120724,120726,120728],{"class":41,"line":92},[39,120725,25551],{"class":49},[39,120727,118292],{"class":237},[39,120729,27217],{"class":237},[39,120731,120732,120734,120736,120738],{"class":41,"line":112},[39,120733,25551],{"class":49},[39,120735,27051],{"class":237},[39,120737,24808],{"class":237},[39,120739,120740],{"class":237}," python3-pip\n",[39,120742,120743],{"class":41,"line":118},[39,120744,122],{"emptyLinePlaceholder":121},[39,120746,120747],{"class":41,"line":125},[39,120748,120749],{"class":128},"#更新pip3\n",[39,120751,120752,120754,120756,120758,120760,120762,120765,120767],{"class":41,"line":132},[39,120753,101854],{"class":49},[39,120755,101857],{"class":74},[39,120757,101880],{"class":237},[39,120759,24808],{"class":237},[39,120761,27405],{"class":74},[39,120763,120764],{"class":237}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[39,120766,101885],{"class":74},[39,120768,101888],{"class":237},[39,120770,120771],{"class":41,"line":138},[39,120772,122],{"emptyLinePlaceholder":121},[39,120774,120775],{"class":41,"line":169},[39,120776,120777],{"class":128},"#设置pip源为清华源\n",[39,120779,120780,120782,120784,120786,120788],{"class":41,"line":190},[39,120781,120675],{"class":49},[39,120783,120694],{"class":237},[39,120785,120697],{"class":237},[39,120787,120700],{"class":237},[39,120789,120703],{"class":237},[39,120791,120792],{"class":41,"line":202},[39,120793,122],{"emptyLinePlaceholder":121},[39,120795,120796],{"class":41,"line":207},[39,120797,120798],{"class":128},"#测试\n",[39,120800,120801,120803,120805,120807,120809,120811],{"class":41,"line":212},[39,120802,101854],{"class":49},[39,120804,101857],{"class":74},[39,120806,101880],{"class":237},[39,120808,24808],{"class":237},[39,120810,101885],{"class":74},[39,120812,101888],{"class":237},[19,120814,120815],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120817,120818],{},[2585,120819],{"alt":35,"src":120820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120822,120824],{"id":120823},"_35-显卡驱动安装","3.5 显卡驱动安装",[476,120826,120828],{"id":120827},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[30,120830,120832],{"className":119498,"code":120831,"language":119500,"meta":35,"style":35},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[26,120833,120834,120839,120854,120859],{"__ignoreMap":35},[39,120835,120836],{"class":41,"line":42},[39,120837,120838],{"class":128},"# 如果是使用apt安装的驱动\n",[39,120840,120841,120843,120845,120847,120849,120852],{"class":41,"line":92},[39,120842,25551],{"class":49},[39,120844,27051],{"class":237},[39,120846,27054],{"class":237},[39,120848,120133],{"class":74},[39,120850,120851],{"class":237}," nvidia",[39,120853,120223],{"class":74},[39,120855,120856],{"class":41,"line":112},[39,120857,120858],{"class":128},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[39,120860,120861,120863],{"class":41,"line":118},[39,120862,25551],{"class":49},[39,120864,120865],{"class":237}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[476,120867,120869],{"id":120868},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22971,120871,120873],{"id":120872},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23883,120875,120877],{"id":120876},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[30,120879,120881],{"className":119498,"code":120880,"language":119500,"meta":35,"style":35},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,120882,120883,120888,120899,120904,120914,120919],{"__ignoreMap":35},[39,120884,120885],{"class":41,"line":42},[39,120886,120887],{"class":128},"# 安装英伟达驱动\n",[39,120889,120890,120892,120894,120896],{"class":41,"line":92},[39,120891,25551],{"class":49},[39,120893,118292],{"class":237},[39,120895,24808],{"class":237},[39,120897,120898],{"class":237}," nvidia-driver-版本号\n",[39,120900,120901],{"class":41,"line":112},[39,120902,120903],{"class":128},"# 重启 \n",[39,120905,120906,120908,120910,120912],{"class":41,"line":118},[39,120907,25551],{"class":49},[39,120909,120611],{"class":237},[39,120911,120614],{"class":74},[39,120913,120617],{"class":237},[39,120915,120916],{"class":41,"line":125},[39,120917,120918],{"class":128},"# 检查驱动是否安装成功\n",[39,120920,120921],{"class":41,"line":132},[39,120922,120923],{"class":49},"nvidia-smi\n",[23883,120925,120927],{"id":120926},"_35212-debian","3.5.2.1.2 Debian",[30,120929,120931],{"className":119498,"code":120930,"language":119500,"meta":35,"style":35},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,120932,120933,120937,120951,120955,120965,120969],{"__ignoreMap":35},[39,120934,120935],{"class":41,"line":42},[39,120936,120887],{"class":128},[39,120938,120939,120941,120943,120945,120948],{"class":41,"line":92},[39,120940,25551],{"class":49},[39,120942,118292],{"class":237},[39,120944,24808],{"class":237},[39,120946,120947],{"class":237}," nvidia-driver",[39,120949,120950],{"class":237}," nvidia-settings\n",[39,120952,120953],{"class":41,"line":112},[39,120954,120903],{"class":128},[39,120956,120957,120959,120961,120963],{"class":41,"line":118},[39,120958,25551],{"class":49},[39,120960,120611],{"class":237},[39,120962,120614],{"class":74},[39,120964,120617],{"class":237},[39,120966,120967],{"class":41,"line":125},[39,120968,120918],{"class":128},[39,120970,120971],{"class":41,"line":132},[39,120972,120923],{"class":49},[22971,120974,120976],{"id":120975},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120978,120979,120980,120983],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[350,120981,120982],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120985,120986,120987],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24527,120988,120989],{},[350,120990,120991],{},"（也可以不禁用桌面环境，直接进行下一步。）",[30,120993,120995],{"className":119498,"code":120994,"language":119500,"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",[26,120996,120997,121002,121012,121017,121030,121035],{"__ignoreMap":35},[39,120998,120999],{"class":41,"line":42},[39,121000,121001],{"class":128},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[39,121003,121004,121006,121009],{"class":41,"line":92},[39,121005,25551],{"class":49},[39,121007,121008],{"class":237}," telinit",[39,121010,121011],{"class":74}," 3\n",[39,121013,121014],{"class":41,"line":112},[39,121015,121016],{"class":128},"# ubuntu 使用下方命令\n",[39,121018,121019,121021,121024,121027],{"class":41,"line":118},[39,121020,25551],{"class":49},[39,121022,121023],{"class":237}," service",[39,121025,121026],{"class":237}," lightdm",[39,121028,121029],{"class":237}," stop\n",[39,121031,121032],{"class":41,"line":125},[39,121033,121034],{"class":128},"# Fedora 使用下方命令\n",[39,121036,121037,121039,121041,121044],{"class":41,"line":132},[39,121038,25551],{"class":49},[39,121040,27488],{"class":237},[39,121042,121043],{"class":237}," isolate",[39,121045,121046],{"class":237}," multi-user.target\n",[19,121048,121049],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[30,121051,121053],{"className":119498,"code":121052,"language":119500,"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",[26,121054,121055,121060,121071,121076,121083,121088,121100,121105,121112,121117],{"__ignoreMap":35},[39,121056,121057],{"class":41,"line":42},[39,121058,121059],{"class":128},"# 编译环境+准备工作\n",[39,121061,121062,121064,121066,121068],{"class":41,"line":92},[39,121063,25551],{"class":49},[39,121065,118292],{"class":237},[39,121067,24808],{"class":237},[39,121069,121070],{"class":237}," build-essential\n",[39,121072,121073],{"class":41,"line":112},[39,121074,121075],{"class":128},"# 进入到.run目录中\n",[39,121077,121078,121080],{"class":41,"line":118},[39,121079,102251],{"class":74},[39,121081,121082],{"class":237}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[39,121084,121085],{"class":41,"line":125},[39,121086,121087],{"class":128},"# 给驱动文件增加可执行权限：\n",[39,121089,121090,121092,121094,121097],{"class":41,"line":132},[39,121091,25551],{"class":49},[39,121093,25554],{"class":237},[39,121095,121096],{"class":237}," a+x",[39,121098,121099],{"class":237}," NVIDIA-Linux-x86_64-550.107.02.run\n",[39,121101,121102],{"class":41,"line":138},[39,121103,121104],{"class":128},"# 然后执行安装：\n",[39,121106,121107,121109],{"class":41,"line":169},[39,121108,25551],{"class":49},[39,121110,121111],{"class":237}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[39,121113,121114],{"class":41,"line":190},[39,121115,121116],{"class":128},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[39,121118,121119,121121,121124],{"class":41,"line":202},[39,121120,25551],{"class":49},[39,121122,121123],{"class":237}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[39,121125,121126],{"class":74},"  --no-opengl-files\n",[19,121128,121129],{},"安装完毕重启即可",[30,121131,121133],{"className":119498,"code":121132,"language":119500,"meta":35,"style":35},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,121134,121135,121139,121145,121149],{"__ignoreMap":35},[39,121136,121137],{"class":41,"line":42},[39,121138,120903],{"class":128},[39,121140,121141,121143],{"class":41,"line":92},[39,121142,25551],{"class":49},[39,121144,27622],{"class":237},[39,121146,121147],{"class":41,"line":112},[39,121148,120918],{"class":128},[39,121150,121151],{"class":41,"line":118},[39,121152,120923],{"class":49},[476,121154,121156],{"id":121155},"_353-安装cuda","3.5.3 安装CUDA",[19,121158,121159],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121161,121162],{},[2585,121163],{"alt":35,"src":121164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[328,121166,121167],{},[331,121168,121169],{},"先查看显卡驱动所支持的最高CUDA版本",[30,121171,121172],{"className":119498,"code":120923,"language":119500,"meta":35,"style":35},[26,121173,121174],{"__ignoreMap":35},[39,121175,121176],{"class":41,"line":42},[39,121177,120923],{"class":49},[19,121179,121180],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121182,121183],{},[2585,121184],{"alt":35,"src":121185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[328,121187,121188],{"start":92},[331,121189,121190],{},"下载CUDA并安装CUDA",[19,121192,119277,121193],{},[922,121194,119280],{"href":119280,"rel":121195},[24839],[19,121197,121198],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121200,121201],{},[2585,121202],{"alt":35,"src":121203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121205,121206,121207,121212],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[922,121208,121211],{"href":121209,"rel":121210},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24839],"Vinci机器人队单片机教程","）",[19,121214,121215],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121217,121218],{},[2585,121219],{"alt":35,"src":121220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121222,121223],{},"将最下方框框里的命令敲入终端",[30,121225,121227],{"className":119498,"code":121226,"language":119500,"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",[26,121228,121229,121234,121243,121248,121255,121260,121268,121273,121284,121289],{"__ignoreMap":35},[39,121230,121231],{"class":41,"line":42},[39,121232,121233],{"class":128},"# 在当前文件夹下创建一个ttt的子文件夹\n",[39,121235,121236,121238,121240],{"class":41,"line":92},[39,121237,102241],{"class":49},[39,121239,30191],{"class":74},[39,121241,121242],{"class":237}," .\u002Fttt\n",[39,121244,121245],{"class":41,"line":112},[39,121246,121247],{"class":128},"# 进入ttt文件夹\n",[39,121249,121250,121252],{"class":41,"line":118},[39,121251,102251],{"class":74},[39,121253,121254],{"class":237}," ttt\n",[39,121256,121257],{"class":41,"line":125},[39,121258,121259],{"class":128},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[39,121261,121262,121265],{"class":41,"line":132},[39,121263,121264],{"class":49},"wget",[39,121266,121267],{"class":237}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[39,121269,121270],{"class":41,"line":138},[39,121271,121272],{"class":128},"# 给予权限\n",[39,121274,121275,121277,121279,121281],{"class":41,"line":169},[39,121276,25551],{"class":49},[39,121278,25554],{"class":237},[39,121280,121096],{"class":237},[39,121282,121283],{"class":237}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[39,121285,121286],{"class":41,"line":190},[39,121287,121288],{"class":128},"# 运行脚本\n",[39,121290,121291,121293],{"class":41,"line":202},[39,121292,25551],{"class":49},[39,121294,121283],{"class":237},[19,121296,121297],{},[2585,121298],{"alt":35,"src":121299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121301,121302],{},"正在安装中：",[19,121304,121305],{},[2585,121306],{"alt":35,"src":121307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121309,121310],{},"输入accept接受即可",[19,121312,121313],{},[2585,121314],{"alt":35,"src":121315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121317,121318],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121320,121321],{},[2585,121322],{"alt":35,"src":121323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121325,121326],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121328,121329],{},[2585,121330],{"alt":35,"src":121331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[328,121333,121334],{"start":112},[331,121335,121336],{},"配置环境",[19,121338,121339],{},"根据上方确认一下路径，比如我上面红色框起来的为",[30,121341,121343],{"className":119498,"code":121342,"language":119500,"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",[26,121344,121345,121361,121376],{"__ignoreMap":35},[39,121346,121347,121350,121353,121356,121359],{"class":41,"line":42},[39,121348,121349],{"class":49},"Please",[39,121351,121352],{"class":237}," make",[39,121354,121355],{"class":237}," sure",[39,121357,121358],{"class":237}," that",[39,121360,3760],{"class":53},[39,121362,121363,121365,121368,121371,121374],{"class":41,"line":92},[39,121364,53246],{"class":49},[39,121366,121367],{"class":237},"   PATH",[39,121369,121370],{"class":237}," includes",[39,121372,121373],{"class":237}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[39,121375,3760],{"class":53},[39,121377,121378,121380,121383,121385,121388,121391,121393,121396,121399,121402,121405,121407,121410,121412],{"class":41,"line":112},[39,121379,53246],{"class":49},[39,121381,121382],{"class":237},"   LD_LIBRARY_PATH",[39,121384,121370],{"class":237},[39,121386,121387],{"class":237}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[39,121389,121390],{"class":237}," or,",[39,121392,6289],{"class":237},[39,121394,121395],{"class":237}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[39,121397,121398],{"class":237}," to",[39,121400,121401],{"class":237}," \u002Fetc\u002Fld.so.conf",[39,121403,121404],{"class":237}," and",[39,121406,28205],{"class":237},[39,121408,121409],{"class":237}," ldconfig",[39,121411,65579],{"class":237},[39,121413,121414],{"class":237}," root\n",[19,121416,121417],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[30,121419,121421],{"className":119498,"code":121420,"language":119500,"meta":35,"style":35},"which nvcc\n",[26,121422,121423],{"__ignoreMap":35},[39,121424,121425,121428],{"class":41,"line":42},[39,121426,121427],{"class":74},"which",[39,121429,121430],{"class":237}," nvcc\n",[19,121432,121433],{},[2585,121434],{"alt":35,"src":121435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,121437,121438],{},"所以我进行以下操作：",[30,121440,121442],{"className":119498,"code":121441,"language":119500,"meta":35,"style":35},"sudo vim ~\u002F.bashrc\n",[26,121443,121444],{"__ignoreMap":35},[39,121445,121446,121448,121450],{"class":41,"line":42},[39,121447,25551],{"class":49},[39,121449,119558],{"class":237},[39,121451,121452],{"class":237}," ~\u002F.bashrc\n",[19,121454,121455],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[30,121457,121459],{"className":119498,"code":121458,"language":119500,"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",[26,121460,121461,121473],{"__ignoreMap":35},[39,121462,121463,121465,121468,121470],{"class":41,"line":42},[39,121464,26017],{"class":45},[39,121466,121467],{"class":53}," PATH",[39,121469,1117],{"class":45},[39,121471,121472],{"class":53},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[39,121474,121475,121477,121480,121482],{"class":41,"line":92},[39,121476,26017],{"class":45},[39,121478,121479],{"class":53}," LD_LIBRARY_PATH",[39,121481,1117],{"class":45},[39,121483,121484],{"class":53},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121486,121487],{},[2585,121488],{"alt":35,"src":121489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[30,121491,121493],{"className":119498,"code":121492,"language":119500,"meta":35,"style":35},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[26,121494,121495,121500,121506,121511],{"__ignoreMap":35},[39,121496,121497],{"class":41,"line":42},[39,121498,121499],{"class":128},"# 刷新当前终端的环境变量\n",[39,121501,121502,121504],{"class":41,"line":92},[39,121503,101868],{"class":74},[39,121505,121452],{"class":237},[39,121507,121508],{"class":41,"line":112},[39,121509,121510],{"class":128},"# 验证CUDA是否安装成功\n",[39,121512,121513,121516],{"class":41,"line":118},[39,121514,121515],{"class":49},"nvcc",[39,121517,121518],{"class":74}," -V\n",[19,121520,121521],{},"出现下图这种则安装成功。",[19,121523,121524],{},[2585,121525],{"alt":35,"src":121526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[476,121528,121530],{"id":121529},"_354-安装cudnn","3.5.4 安装cuDNN",[328,121532,121533],{},[331,121534,121535],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121537,121538,121539,121544],{},"前往 NVIDIA cuDNN 下载页面：",[922,121540,121543],{"href":121541,"rel":121542},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24839],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121546,121547],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121549,121550],{},[2585,121551],{"alt":35,"src":121552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121554,121555],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121557,121558],{},[2585,121559],{"alt":35,"src":121560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121562,121563],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121565,121566],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121568,121569],{},[350,121570,121571],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121573,121574],{},"下载好的：",[19,121576,121577],{},[2585,121578],{"alt":35,"src":121579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[328,121581,121582],{"start":92},[331,121583,121584],{},"安装cuDNN",[19,121586,121587],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121589,121590],{},[2585,121591],{"alt":35,"src":121592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121594,121595],{},"解压文件，并复制到对应位置完成安装",[30,121597,121599],{"className":119498,"code":121598,"language":119500,"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",[26,121600,121601,121606,121617,121622,121629,121634,121650,121664,121669,121680,121689,121693,121709],{"__ignoreMap":35},[39,121602,121603],{"class":41,"line":42},[39,121604,121605],{"class":128},"# 解压cuDNN文件\n",[39,121607,121608,121611,121614],{"class":41,"line":92},[39,121609,121610],{"class":49},"tar",[39,121612,121613],{"class":74}," -xvf",[39,121615,121616],{"class":237}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[39,121618,121619],{"class":41,"line":112},[39,121620,121621],{"class":128},"# cd进文件夹\n",[39,121623,121624,121626],{"class":41,"line":118},[39,121625,102251],{"class":74},[39,121627,121628],{"class":237}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[39,121630,121631],{"class":41,"line":125},[39,121632,121633],{"class":128},"# 复制cuDNN文件到CUDA目录\n",[39,121635,121636,121638,121640,121643,121645,121648],{"class":41,"line":132},[39,121637,25551],{"class":49},[39,121639,28836],{"class":237},[39,121641,121642],{"class":237}," include\u002Fcudnn",[39,121644,1717],{"class":74},[39,121646,121647],{"class":237},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[39,121649,3760],{"class":53},[39,121651,121652,121654,121656,121659,121661],{"class":41,"line":138},[39,121653,25551],{"class":49},[39,121655,28836],{"class":237},[39,121657,121658],{"class":237}," lib\u002Flibcudnn",[39,121660,1717],{"class":74},[39,121662,121663],{"class":237},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[39,121665,121666],{"class":41,"line":169},[39,121667,121668],{"class":128},"# 对比一下有没有缺文件\n",[39,121670,121671,121673,121676,121678],{"class":41,"line":190},[39,121672,27736],{"class":49},[39,121674,121675],{"class":237}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[39,121677,1717],{"class":74},[39,121679,3760],{"class":53},[39,121681,121682,121684,121687],{"class":41,"line":202},[39,121683,27736],{"class":49},[39,121685,121686],{"class":237}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[39,121688,120223],{"class":74},[39,121690,121691],{"class":41,"line":207},[39,121692,121272],{"class":128},[39,121694,121695,121697,121699,121702,121704,121706],{"class":41,"line":212},[39,121696,25551],{"class":49},[39,121698,25554],{"class":237},[39,121700,121701],{"class":237}," a+r",[39,121703,121675],{"class":237},[39,121705,1717],{"class":74},[39,121707,121708],{"class":53},"   \n",[39,121710,121711,121713,121715,121717,121719],{"class":41,"line":223},[39,121712,25551],{"class":49},[39,121714,25554],{"class":237},[39,121716,121701],{"class":237},[39,121718,121686],{"class":237},[39,121720,120223],{"class":74},[328,121722,121723],{"start":112},[331,121724,121725],{},"检查是否安装成功",[30,121727,121729],{"className":119498,"code":121728,"language":119500,"meta":35,"style":35},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[26,121730,121731,121736],{"__ignoreMap":35},[39,121732,121733],{"class":41,"line":42},[39,121734,121735],{"class":128},"# 检查cuDNN版本命令\n",[39,121737,121738,121741,121744,121746,121748,121751,121754],{"class":41,"line":92},[39,121739,121740],{"class":49},"cat",[39,121742,121743],{"class":237}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[39,121745,26084],{"class":45},[39,121747,31211],{"class":49},[39,121749,121750],{"class":237}," CUDNN_MAJOR",[39,121752,121753],{"class":74}," -A",[39,121755,48698],{"class":74},[19,121757,121758],{},"出现下图这样的就是安装成功了",[19,121760,121761],{},[2585,121762],{"alt":35,"src":121763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[328,121765,121766],{"start":118},[331,121767,121768],{},"软链接(一般不需要)",[30,121770,121772],{"className":119498,"code":121771,"language":119500,"meta":35,"style":35},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[26,121773,121774,121779],{"__ignoreMap":35},[39,121775,121776],{"class":41,"line":42},[39,121777,121778],{"class":128},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[39,121780,121781,121783],{"class":41,"line":92},[39,121782,25551],{"class":49},[39,121784,121785],{"class":237}," ldconfig\n",[19,121787,121788],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[30,121790,121795],{"className":121791,"code":121792,"language":121793,"meta":121794,"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",[26,121796,121797,121802,121807,121812,121817,121822,121827],{"__ignoreMap":35},[39,121798,121799],{"class":41,"line":42},[39,121800,121801],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[39,121803,121804],{"class":41,"line":92},[39,121805,121806],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[39,121808,121809],{"class":41,"line":112},[39,121810,121811],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[39,121813,121814],{"class":41,"line":118},[39,121815,121816],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[39,121818,121819],{"class":41,"line":125},[39,121820,121821],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[39,121823,121824],{"class":41,"line":132},[39,121825,121826],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[39,121828,121829],{"class":41,"line":138},[39,121830,121831],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121833,121834],{},"运行下方的命令",[30,121836,121838],{"className":119498,"code":121837,"language":119500,"meta":35,"style":35},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[26,121839,121840,121845,121852,121857],{"__ignoreMap":35},[39,121841,121842],{"class":41,"line":42},[39,121843,121844],{"class":128},"# cd进入CUDA路径\n",[39,121846,121847,121849],{"class":41,"line":92},[39,121848,102251],{"class":74},[39,121850,121851],{"class":237}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[39,121853,121854],{"class":41,"line":112},[39,121855,121856],{"class":128}," # 查看本路径下的需要软链接的文件名\n",[39,121858,121859],{"class":41,"line":118},[39,121860,121861],{"class":49}," ls\n",[19,121863,121864],{},[2585,121865],{"alt":35,"src":121866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121868,121869,121870,19383,121873,19383,121876,121879],{},"如上图，我需要将",[26,121871,121872],{},"libcudnn_xxx_xxxxx.so.8.9.7",[26,121874,121875],{},"libcudnn_xxx_xxxxx.so.8",[26,121877,121878],{},"libcudnn_xxx_xxxxx.so","软链接",[30,121881,121883],{"className":119498,"code":121882,"language":119500,"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",[26,121884,121885,121890,121906,121920,121934,121948,121962,121976,121990,121995,122001,122006],{"__ignoreMap":35},[39,121886,121887],{"class":41,"line":42},[39,121888,121889],{"class":128},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[39,121891,121892,121894,121897,121900,121903],{"class":41,"line":92},[39,121893,25551],{"class":49},[39,121895,121896],{"class":237}," ln",[39,121898,121899],{"class":74}," -sf",[39,121901,121902],{"class":237}," libcudnn_cnn_train.so.8.9.7",[39,121904,121905],{"class":237}," libcudnn_cnn_train.so.8\n",[39,121907,121908,121910,121912,121914,121917],{"class":41,"line":112},[39,121909,25551],{"class":49},[39,121911,121896],{"class":237},[39,121913,121899],{"class":74},[39,121915,121916],{"class":237}," libcudnn_adv_infer.so.8.9.7",[39,121918,121919],{"class":237}," libcudnn_adv_infer.so.8\n",[39,121921,121922,121924,121926,121928,121931],{"class":41,"line":118},[39,121923,25551],{"class":49},[39,121925,121896],{"class":237},[39,121927,121899],{"class":74},[39,121929,121930],{"class":237}," libcudnn_adv_train.so.8.9.7",[39,121932,121933],{"class":237}," libcudnn_adv_train.so.8\n",[39,121935,121936,121938,121940,121942,121945],{"class":41,"line":125},[39,121937,25551],{"class":49},[39,121939,121896],{"class":237},[39,121941,121899],{"class":74},[39,121943,121944],{"class":237}," libcudnn_cnn_infer.so.8.9.7",[39,121946,121947],{"class":237}," libcudnn_cnn_infer.so.8\n",[39,121949,121950,121952,121954,121956,121959],{"class":41,"line":132},[39,121951,25551],{"class":49},[39,121953,121896],{"class":237},[39,121955,121899],{"class":74},[39,121957,121958],{"class":237}," libcudnn.so.8.9.7",[39,121960,121961],{"class":237}," libcudnn.so.8\n",[39,121963,121964,121966,121968,121970,121973],{"class":41,"line":138},[39,121965,25551],{"class":49},[39,121967,121896],{"class":237},[39,121969,121899],{"class":74},[39,121971,121972],{"class":237}," libcudnn_ops_infer.so.8.9.7",[39,121974,121975],{"class":237}," libcudnn_ops_infer.so.8\n",[39,121977,121978,121980,121982,121984,121987],{"class":41,"line":169},[39,121979,25551],{"class":49},[39,121981,121896],{"class":237},[39,121983,121899],{"class":74},[39,121985,121986],{"class":237}," libcudnn_ops_train.so.8.9.7",[39,121988,121989],{"class":237}," libcudnn_ops_train.so.8\n",[39,121991,121992],{"class":41,"line":190},[39,121993,121994],{"class":128},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[39,121996,121997,121999],{"class":41,"line":202},[39,121998,25551],{"class":49},[39,122000,121785],{"class":237},[39,122002,122003],{"class":41,"line":207},[39,122004,122005],{"class":128},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[39,122007,122008,122010,122013,122016,122018,122021],{"class":41,"line":212},[39,122009,27736],{"class":49},[39,122011,122012],{"class":74}," -l",[39,122014,122015],{"class":237}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[39,122017,1717],{"class":74},[39,122019,122020],{"class":237},".so",[39,122022,120223],{"class":74},[476,122024,122026],{"id":122025},"_355-常见问题","3.5.5 常见问题",[328,122028,122029],{},[331,122030,122031],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[30,122033,122035],{"className":119498,"code":122034,"language":119500,"meta":35,"style":35},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[26,122036,122037],{"__ignoreMap":35},[39,122038,122039,122041,122043],{"class":41,"line":42},[39,122040,25551],{"class":49},[39,122042,119558],{"class":237},[39,122044,122045],{"class":237}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122047,122048],{},"blacklist-nouveau.conf文件内容如下：",[30,122050,122052],{"className":119498,"code":122051,"language":119500,"meta":35,"style":35},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[26,122053,122054,122062,122069,122081,122091],{"__ignoreMap":35},[39,122055,122056,122059],{"class":41,"line":42},[39,122057,122058],{"class":49},"blacklist",[39,122060,122061],{"class":237}," nouveau\n",[39,122063,122064,122066],{"class":41,"line":92},[39,122065,122058],{"class":49},[39,122067,122068],{"class":237}," lbm-nouveau\n",[39,122070,122071,122073,122076,122079],{"class":41,"line":112},[39,122072,116905],{"class":49},[39,122074,122075],{"class":237}," nouveau",[39,122077,122078],{"class":237}," modeset=",[39,122080,4168],{"class":74},[39,122082,122083,122086,122088],{"class":41,"line":118},[39,122084,122085],{"class":74},"alias",[39,122087,122075],{"class":237},[39,122089,122090],{"class":237}," off\n",[39,122092,122093,122095,122098],{"class":41,"line":125},[39,122094,122085],{"class":74},[39,122096,122097],{"class":237}," lbm-nouveau",[39,122099,122090],{"class":237},[19,122101,122102],{},"接着运行下方命令",[30,122104,122106],{"className":119498,"code":122105,"language":119500,"meta":35,"style":35},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[26,122107,122108,122118,122123],{"__ignoreMap":35},[39,122109,122110,122112,122115],{"class":41,"line":42},[39,122111,25551],{"class":49},[39,122113,122114],{"class":237}," update-initramfs",[39,122116,122117],{"class":74}," -u\n",[39,122119,122120],{"class":41,"line":92},[39,122121,122122],{"class":49},"或者\n",[39,122124,122125,122127,122130],{"class":41,"line":112},[39,122126,25551],{"class":49},[39,122128,122129],{"class":237}," dracut",[39,122131,122132],{"class":74}," --force\n",[19,122134,122135],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[30,122137,122139],{"className":119498,"code":122138,"language":119500,"meta":35,"style":35},"lsmod | grep nouveau\n",[26,122140,122141],{"__ignoreMap":35},[39,122142,122143,122146,122148,122150],{"class":41,"line":42},[39,122144,122145],{"class":49},"lsmod",[39,122147,26084],{"class":45},[39,122149,31211],{"class":49},[39,122151,122061],{"class":237},[328,122153,122154],{"start":92},[331,122155,122156],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[30,122158,122160],{"className":119498,"code":122159,"language":119500,"meta":35,"style":35},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[26,122161,122162],{"__ignoreMap":35},[39,122163,122164,122166,122168],{"class":41,"line":42},[39,122165,25551],{"class":49},[39,122167,119558],{"class":237},[39,122169,122170],{"class":237}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122172,122173],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[30,122175,122177],{"className":119498,"code":122176,"language":119500,"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",[26,122178,122179,122187,122195,122203,122210,122218,122228,122236],{"__ignoreMap":35},[39,122180,122181,122184],{"class":41,"line":42},[39,122182,122183],{"class":49},"Section",[39,122185,122186],{"class":237}," \"OutputClass\"\n",[39,122188,122189,122192],{"class":41,"line":92},[39,122190,122191],{"class":49},"   Identifier",[39,122193,122194],{"class":237}," \"nvidia\"\n",[39,122196,122197,122200],{"class":41,"line":112},[39,122198,122199],{"class":49},"   MatchDriver",[39,122201,122202],{"class":237}," \"nvidia-drm\"\n",[39,122204,122205,122208],{"class":41,"line":118},[39,122206,122207],{"class":49},"   Driver",[39,122209,122194],{"class":237},[39,122211,122212,122215],{"class":41,"line":125},[39,122213,122214],{"class":49},"   Option",[39,122216,122217],{"class":237}," \"AllowEmptyInitialConfiguration\"\n",[39,122219,122220,122222,122225],{"class":41,"line":132},[39,122221,122214],{"class":49},[39,122223,122224],{"class":237}," \"PrimaryGPU\"",[39,122226,122227],{"class":237}," \"yes\"\n",[39,122229,122230,122233],{"class":41,"line":138},[39,122231,122232],{"class":49},"   ModulePath",[39,122234,122235],{"class":237}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[39,122237,122238],{"class":41,"line":169},[39,122239,122240],{"class":49},"EndSection\n",[328,122242,122243],{"start":112},[331,122244,122245],{},"安装N卡驱动提示错误",[30,122247,122249],{"className":121791,"code":122248,"language":121793,"meta":121794,"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",[26,122250,122251],{"__ignoreMap":35},[39,122252,122253],{"class":41,"line":42},[39,122254,122248],{},[328,122256,122257],{},[331,122258,122259],{},"检查当前运行的内核版本：",[19,122261,122262],{},"运行以下命令以查看你当前正在使用的内核版本：",[30,122264,122266],{"className":118271,"code":122265,"language":118273,"meta":35,"style":35},"uname -r\n",[26,122267,122268],{"__ignoreMap":35},[39,122269,122270,122272],{"class":41,"line":42},[39,122271,71179],{"class":49},[39,122273,122274],{"class":74}," -r\n",[328,122276,122277],{"start":92},[331,122278,122279],{},"安装内核开发文件：",[19,122281,122282,122283,122286],{},"确保你已经安装了与当前内核版本相匹配的 ",[26,122284,122285],{},"kernel-devel"," 包。运行以下命令来安装：",[30,122288,122290],{"className":118271,"code":122289,"language":118273,"meta":35,"style":35},"sudo dnf install kernel-devel-$(uname -r)\n",[26,122291,122292],{"__ignoreMap":35},[39,122293,122294,122296,122298,122300,122303,122305,122307,122309],{"class":41,"line":42},[39,122295,25551],{"class":49},[39,122297,27290],{"class":237},[39,122299,24808],{"class":237},[39,122301,122302],{"class":237}," kernel-devel-",[39,122304,26074],{"class":53},[39,122306,71179],{"class":49},[39,122308,120614],{"class":74},[39,122310,574],{"class":53},[19,122312,122313],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[328,122315,122316],{"start":112},[331,122317,122318],{},"安装内核源代码（如果需要）：",[19,122320,122321],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[30,122323,122325],{"className":118271,"code":122324,"language":118273,"meta":35,"style":35},"sudo dnf install kernel-headers kernel-source\n",[26,122326,122327],{"__ignoreMap":35},[39,122328,122329,122331,122333,122335,122338],{"class":41,"line":42},[39,122330,25551],{"class":49},[39,122332,27290],{"class":237},[39,122334,24808],{"class":237},[39,122336,122337],{"class":237}," kernel-headers",[39,122339,122340],{"class":237}," kernel-source\n",[328,122342,122343],{"start":118},[331,122344,122345],{},"检查安装：",[19,122347,122348,122349,122352],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[26,122350,122351],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[30,122354,122356],{"className":118271,"code":122355,"language":118273,"meta":35,"style":35},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[26,122357,122358],{"__ignoreMap":35},[39,122359,122360,122362],{"class":41,"line":42},[39,122361,27736],{"class":49},[39,122363,122364],{"class":237}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122366,122367,122368,122371],{},"如果仍然遇到问题，可以通过 ",[26,122369,122370],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1192,122373,122374],{},"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":92,"depth":92,"links":122376},[122377,122381,122391,122395,122396],{"id":119474,"depth":92,"text":119475,"children":122378},[122379,122380],{"id":119484,"depth":112,"text":119485},{"id":119494,"depth":112,"text":119495},{"id":119694,"depth":92,"text":119695,"children":122382},[122383,122384,122385,122386,122387,122388,122389,122390],{"id":119698,"depth":112,"text":119699},{"id":119768,"depth":112,"text":119769},{"id":119857,"depth":112,"text":119858},{"id":120102,"depth":112,"text":120103},{"id":120172,"depth":112,"text":120173},{"id":120239,"depth":112,"text":120240},{"id":120274,"depth":112,"text":120275},{"id":120329,"depth":112,"text":120330},{"id":120380,"depth":92,"text":120381,"children":122392},[122393,122394],{"id":120384,"depth":112,"text":120385},{"id":120464,"depth":112,"text":120465},{"id":120650,"depth":92,"text":120651},{"id":120823,"depth":92,"text":120824,"children":122397},[122398,122399,122400,122401,122402],{"id":120827,"depth":112,"text":120828},{"id":120868,"depth":112,"text":120869},{"id":121155,"depth":112,"text":121156},{"id":121529,"depth":112,"text":121530},{"id":122025,"depth":112,"text":122026},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119466,"description":24350},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122409,"title":122410,"body":122411,"description":24350,"extension":1203,"meta":122751,"navigation":121,"path":122752,"seo":122753,"stem":122754,"__hash__":122755},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122412,"toc":122749},[122413,122416,122421,122424,122670,122675,122678,122714,122717,122746],[10,122414,122410],{"id":122415},"_4-命令教程长期积累",[328,122417,122418],{},[331,122419,122420],{},"大多数命令",[19,122422,122423],{},"常用 Linux 命令速查：",[30,122425,122427],{"className":118271,"code":122426,"language":118273,"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",[26,122428,122429,122434,122441,122448,122456,122463,122470,122478,122486,122493,122500,122508,122512,122517,122524,122532,122539,122543,122548,122555,122563,122571,122579,122587,122591,122596,122604,122611,122618,122626,122634,122638,122643,122652,122661],{"__ignoreMap":35},[39,122430,122431],{"class":41,"line":42},[39,122432,122433],{"class":128},"# 文件与目录\n",[39,122435,122436,122438],{"class":41,"line":92},[39,122437,27736],{"class":49},[39,122439,122440],{"class":128},"        # 列出目录内容\n",[39,122442,122443,122445],{"class":41,"line":112},[39,122444,102251],{"class":74},[39,122446,122447],{"class":128},"        # 切换目录\n",[39,122449,122450,122453],{"class":41,"line":118},[39,122451,122452],{"class":74},"pwd",[39,122454,122455],{"class":128},"       # 显示当前路径\n",[39,122457,122458,122460],{"class":41,"line":125},[39,122459,102241],{"class":49},[39,122461,122462],{"class":128},"     # 创建目录\n",[39,122464,122465,122467],{"class":41,"line":132},[39,122466,26297],{"class":49},[39,122468,122469],{"class":128},"        # 删除文件或目录\n",[39,122471,122472,122475],{"class":41,"line":138},[39,122473,122474],{"class":49},"cp",[39,122476,122477],{"class":128},"        # 复制文件或目录\n",[39,122479,122480,122483],{"class":41,"line":169},[39,122481,122482],{"class":49},"mv",[39,122484,122485],{"class":128},"        # 移动\u002F重命名文件或目录\n",[39,122487,122488,122490],{"class":41,"line":190},[39,122489,102258],{"class":49},[39,122491,122492],{"class":128},"     # 创建空文件\n",[39,122494,122495,122497],{"class":41,"line":202},[39,122496,121740],{"class":49},[39,122498,122499],{"class":128},"       # 查看文件内容\n",[39,122501,122502,122505],{"class":41,"line":207},[39,122503,122504],{"class":49},"head\u002Ftail",[39,122506,122507],{"class":128}," # 查看文件头部\u002F尾部\n",[39,122509,122510],{"class":41,"line":212},[39,122511,122],{"emptyLinePlaceholder":121},[39,122513,122514],{"class":41,"line":223},[39,122515,122516],{"class":128},"# 权限管理\n",[39,122518,122519,122521],{"class":41,"line":228},[39,122520,25586],{"class":49},[39,122522,122523],{"class":128},"     # 修改文件权限\n",[39,122525,122526,122529],{"class":41,"line":263},[39,122527,122528],{"class":49},"chown",[39,122530,122531],{"class":128},"     # 修改文件所有者\n",[39,122533,122534,122536],{"class":41,"line":287},[39,122535,25551],{"class":49},[39,122537,122538],{"class":128},"      # 以管理员身份执行\n",[39,122540,122541],{"class":41,"line":292},[39,122542,122],{"emptyLinePlaceholder":121},[39,122544,122545],{"class":41,"line":305},[39,122546,122547],{"class":128},"# 系统信息\n",[39,122549,122550,122552],{"class":41,"line":310},[39,122551,71179],{"class":49},[39,122553,122554],{"class":128},"     # 系统信息\n",[39,122556,122557,122560],{"class":41,"line":321},[39,122558,122559],{"class":49},"df",[39,122561,122562],{"class":128},"        # 磁盘使用情况\n",[39,122564,122565,122568],{"class":41,"line":713},[39,122566,122567],{"class":49},"free",[39,122569,122570],{"class":128},"      # 内存使用情况\n",[39,122572,122573,122576],{"class":41,"line":718},[39,122574,122575],{"class":49},"top\u002Fhtop",[39,122577,122578],{"class":128},"  # 进程监控\n",[39,122580,122581,122584],{"class":41,"line":723},[39,122582,122583],{"class":49},"ps",[39,122585,122586],{"class":128},"        # 查看进程\n",[39,122588,122589],{"class":41,"line":729},[39,122590,122],{"emptyLinePlaceholder":121},[39,122592,122593],{"class":41,"line":735},[39,122594,122595],{"class":128},"# 网络\n",[39,122597,122598,122601],{"class":41,"line":741},[39,122599,122600],{"class":49},"ping",[39,122602,122603],{"class":128},"      # 测试网络连通性\n",[39,122605,122606,122608],{"class":41,"line":747},[39,122607,27824],{"class":49},[39,122609,122610],{"class":128},"      # 发送 HTTP 请求\n",[39,122612,122613,122615],{"class":41,"line":753},[39,122614,121264],{"class":49},[39,122616,122617],{"class":128},"      # 下载文件\n",[39,122619,122620,122623],{"class":41,"line":758},[39,122621,122622],{"class":49},"ssh",[39,122624,122625],{"class":128},"       # 远程登录\n",[39,122627,122628,122631],{"class":41,"line":763},[39,122629,122630],{"class":49},"scp",[39,122632,122633],{"class":128},"       # 远程文件传输\n",[39,122635,122636],{"class":41,"line":772},[39,122637,122],{"emptyLinePlaceholder":121},[39,122639,122640],{"class":41,"line":777},[39,122641,122642],{"class":128},"# 包管理（Debian\u002FUbuntu）\n",[39,122644,122645,122647,122649],{"class":41,"line":785},[39,122646,118343],{"class":49},[39,122648,118322],{"class":237},[39,122650,122651],{"class":128},"   # 更新软件源\n",[39,122653,122654,122656,122658],{"class":41,"line":796},[39,122655,118343],{"class":49},[39,122657,24808],{"class":237},[39,122659,122660],{"class":128},"  # 安装软件包\n",[39,122662,122663,122665,122667],{"class":41,"line":808},[39,122664,118343],{"class":49},[39,122666,27054],{"class":237},[39,122668,122669],{"class":128},"   # 卸载软件包\n",[328,122671,122672],{"start":92},[331,122673,122674],{},"KDE Dolphin 以root打开",[19,122676,122677],{},"kde5",[30,122679,122681],{"className":118271,"code":122680,"language":118273,"meta":35,"style":35},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[26,122682,122683],{"__ignoreMap":35},[39,122684,122685,122688,122691,122694,122696,122698,122701,122704,122706,122709,122711],{"class":41,"line":42},[39,122686,122687],{"class":49},"pkexec",[39,122689,122690],{"class":237}," env",[39,122692,122693],{"class":237}," DISPLAY=",[39,122695,29118],{"class":53},[39,122697,29176],{"class":237},[39,122699,122700],{"class":53},"$XAUTHORITY ",[39,122702,122703],{"class":237},"KDE_SESSION_VERSION=",[39,122705,1583],{"class":74},[39,122707,122708],{"class":237}," KDE_FULL_SESSION=",[39,122710,2487],{"class":74},[39,122712,122713],{"class":237}," dolphin\n",[19,122715,122716],{},"kde6",[30,122718,122720],{"className":118271,"code":122719,"language":118273,"meta":35,"style":35},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[26,122721,122722],{"__ignoreMap":35},[39,122723,122724,122726,122728,122730,122732,122734,122736,122738,122740,122742,122744],{"class":41,"line":42},[39,122725,122687],{"class":49},[39,122727,122690],{"class":237},[39,122729,122693],{"class":237},[39,122731,29118],{"class":53},[39,122733,29176],{"class":237},[39,122735,122700],{"class":53},[39,122737,122703],{"class":237},[39,122739,1608],{"class":74},[39,122741,122708],{"class":237},[39,122743,2487],{"class":74},[39,122745,122713],{"class":237},[1192,122747,122748],{},"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":92,"depth":92,"links":122750},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122410,"description":24350},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122757,"title":122758,"body":122759,"description":24350,"extension":1203,"meta":122773,"navigation":121,"path":122774,"seo":122775,"stem":122776,"__hash__":122777},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122760,"toc":122771},[122761,122764],[10,122762,122758],{"id":122763},"_5-各种环境配置",[19,122765,122766],{},[922,122767,122770],{"href":122768,"rel":122769},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24839],"电控组环境搭建大全",{"title":35,"searchDepth":92,"depth":92,"links":122772},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122758,"description":24350},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122779,"title":122780,"body":122781,"description":24350,"extension":1203,"meta":123129,"navigation":121,"path":123130,"seo":123131,"stem":123132,"__hash__":123133},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122782,"toc":123121},[122783,122786,122790,122794,122798,122803,122810,122814,123107,123111,123118],[10,122784,122780],{"id":122785},"_6-拓展功能",[14,122787,122789],{"id":122788},"_61-wine","6.1 Wine",[14,122791,122793],{"id":122792},"_62-android","6.2 Android",[476,122795,122797],{"id":122796},"_621-i卡a卡","6.2.1 I卡、A卡",[328,122799,122800],{},[331,122801,122802],{},"Wayland-Waydroid(体验超级好)",[19,122804,122805,122806],{},"Waydroid 官网与安装指南：",[922,122807,122808],{"href":122808,"rel":122809},"https:\u002F\u002Fwaydro.id\u002F",[24839],[476,122811,122813],{"id":122812},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[328,122815,122816],{},[331,122817,122818,122819,122821,122822,122826,122828,122831,122836,123033],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54691,122820],{},"BlissOS 官网下载：",[922,122823,122824],{"href":122824,"rel":122825},"https:\u002F\u002Fblissos.org\u002F",[24839],[54691,122827],{},[2585,122829],{"alt":35,"src":122830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[328,122832,122833],{"start":112},[331,122834,122835],{},"比较推荐的配置",[30,122837,122839],{"className":118271,"code":122838,"language":118273,"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",[26,122840,122841,122848,122858,122868,122878,122890,122900,122907,122917,122926,122935,122945,122955,122964,122974,122984,122996,123006,123015,123025],{"__ignoreMap":35},[39,122842,122843,122846],{"class":41,"line":42},[39,122844,122845],{"class":49},"qemu-system-x86_64",[39,122847,25653],{"class":74},[39,122849,122850,122853,122856],{"class":41,"line":92},[39,122851,122852],{"class":74},"        -M",[39,122854,122855],{"class":237}," q35,vmport=off",[39,122857,25653],{"class":74},[39,122859,122860,122863,122866],{"class":41,"line":112},[39,122861,122862],{"class":74},"        -accel",[39,122864,122865],{"class":237}," kvm",[39,122867,25653],{"class":74},[39,122869,122870,122873,122876],{"class":41,"line":118},[39,122871,122872],{"class":74},"        -cpu",[39,122874,122875],{"class":237}," qemu64,+sse3,+sse4.2",[39,122877,25653],{"class":74},[39,122879,122880,122883,122886,122888],{"class":41,"line":125},[39,122881,122882],{"class":74},"        -smp",[39,122884,122885],{"class":237}," 8,cores=",[39,122887,1558],{"class":74},[39,122889,25653],{"class":74},[39,122891,122892,122895,122898],{"class":41,"line":132},[39,122893,122894],{"class":74},"        -m",[39,122896,122897],{"class":237}," 6G",[39,122899,25653],{"class":74},[39,122901,122902,122905],{"class":41,"line":138},[39,122903,122904],{"class":74},"        -usb",[39,122906,25653],{"class":74},[39,122908,122909,122912,122915],{"class":41,"line":169},[39,122910,122911],{"class":74},"        -device",[39,122913,122914],{"class":237}," virtio-tablet",[39,122916,25653],{"class":74},[39,122918,122919,122921,122924],{"class":41,"line":190},[39,122920,122911],{"class":74},[39,122922,122923],{"class":237}," virtio-keyboard",[39,122925,25653],{"class":74},[39,122927,122928,122930,122933],{"class":41,"line":202},[39,122929,122911],{"class":74},[39,122931,122932],{"class":237}," usb-tablet",[39,122934,25653],{"class":74},[39,122936,122937,122940,122943],{"class":41,"line":207},[39,122938,122939],{"class":74},"        -bios",[39,122941,122942],{"class":237}," OVMF-pure-efi64.fd",[39,122944,25653],{"class":74},[39,122946,122947,122950,122953],{"class":41,"line":212},[39,122948,122949],{"class":74},"        -net",[39,122951,122952],{"class":237}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[39,122954,25653],{"class":74},[39,122956,122957,122959,122962],{"class":41,"line":223},[39,122958,122949],{"class":74},[39,122960,122961],{"class":237}," nic,model=virtio",[39,122963,25653],{"class":74},[39,122965,122966,122969,122972],{"class":41,"line":228},[39,122967,122968],{"class":74},"        -audio",[39,122970,122971],{"class":237}," sdl,model=hda",[39,122973,25653],{"class":74},[39,122975,122976,122979,122982],{"class":41,"line":263},[39,122977,122978],{"class":74},"        -display",[39,122980,122981],{"class":237}," sdl,gl=on,show-cursor=on",[39,122983,25653],{"class":74},[39,122985,122986,122988,122991,122994],{"class":41,"line":287},[39,122987,122911],{"class":74},[39,122989,122990],{"class":237}," virtio-vga-gl,xres=1920,yres=",[39,122992,122993],{"class":74},"1080",[39,122995,25653],{"class":74},[39,122997,122998,123001,123004],{"class":41,"line":292},[39,122999,123000],{"class":74},"        -drive",[39,123002,123003],{"class":237}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[39,123005,25653],{"class":74},[39,123007,123008,123010,123013],{"class":41,"line":305},[39,123009,123000],{"class":74},[39,123011,123012],{"class":237}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[39,123014,25653],{"class":74},[39,123016,123017,123020,123023],{"class":41,"line":310},[39,123018,123019],{"class":74},"        -monitor",[39,123021,123022],{"class":237}," stdio",[39,123024,25653],{"class":74},[39,123026,123027,123030],{"class":41,"line":321},[39,123028,123029],{"class":74},"        -serial",[39,123031,123032],{"class":237}," none\n",[328,123034,123035],{"start":125},[331,123036,123037,123038],{},"常用操作：",[328,123039,123040,123043,123099],{},[331,123041,123042],{},"全屏：Ctrl+Alt+F",[331,123044,123045,123046,123051],{},"adb调试",[328,123047,123048],{},[331,123049,123050],{},"使Linux与Android用ADB连接。",[30,123052,123054],{"className":118271,"code":123053,"language":118273,"meta":35,"style":35},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[26,123055,123056,123061,123072,123077,123089,123094],{"__ignoreMap":35},[39,123057,123058],{"class":41,"line":42},[39,123059,123060],{"class":128},"# 连接安卓\n",[39,123062,123063,123066,123069],{"class":41,"line":92},[39,123064,123065],{"class":49},"adb",[39,123067,123068],{"class":237}," connect",[39,123070,123071],{"class":74}," 127.0.0.1\n",[39,123073,123074],{"class":41,"line":112},[39,123075,123076],{"class":128},"# 打开shell\n",[39,123078,123079,123081,123083,123086],{"class":41,"line":118},[39,123080,123065],{"class":49},[39,123082,27858],{"class":74},[39,123084,123085],{"class":237}," 127.0.0.1:5555",[39,123087,123088],{"class":237}," shell\n",[39,123090,123091],{"class":41,"line":125},[39,123092,123093],{"class":128},"# 使用root权限\n",[39,123095,123096],{"class":41,"line":132},[39,123097,123098],{"class":49},"su\n",[331,123100,123101,123102],{},"中文输入法",[328,123103,123104],{},[331,123105,123106],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123108,123110],{"id":123109},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123112,123113,123114],{},"rEFInd 官网与文档：",[922,123115,123116],{"href":123116,"rel":123117},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24839],[1192,123119,123120],{},"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":92,"depth":92,"links":123122},[123123,123124,123128],{"id":122788,"depth":92,"text":122789},{"id":122792,"depth":92,"text":122793,"children":123125},[123126,123127],{"id":122796,"depth":112,"text":122797},{"id":122812,"depth":112,"text":122813},{"id":123109,"depth":92,"text":123110},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122780,"description":24350},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123135,"title":123136,"body":123137,"description":24350,"extension":1203,"meta":126436,"navigation":121,"path":126437,"seo":126438,"stem":126439,"__hash__":126440},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123138,"toc":126410},[123139,123142,123146,123149,123156,123406,123409,123481,123484,123488,123492,123497,123500,123503,123506,123511,123514,123517,123520,123525,123528,123533,123536,123539,123544,123547,123552,123555,123559,123563,123566,123571,123574,123588,123591,123594,123603,123606,123615,123618,123621,123630,123633,123642,123645,123648,123657,123660,123663,123678,123681,123684,123693,123698,123701,123704,123713,123716,123725,123728,123737,123740,123749,123754,123757,123765,123770,123773,123782,123785,123793,123798,123801,123810,123813,123816,123820,123823,123828,123831,123836,123850,123855,123860,123871,123876,123882,123887,123902,123907,123910,123915,123920,123925,123933,123938,123945,123950,123961,123966,123969,123973,123976,123979,123984,123987,124006,124011,124014,124023,124028,124031,124053,124056,124086,124089,124094,124097,124111,124116,124135,124138,124141,124146,124158,124163,124168,124171,124176,124179,124194,124197,124202,124207,124211,124216,124256,124259,124263,124269,124275,124280,124283,124290,124295,124302,124305,124308,124315,124329,124332,124392,124395,124409,124421,124424,124427,124430,124494,124497,124500,124503,124523,124526,124531,124538,124542,124545,124549,124554,124559,124563,124566,124569,124611,124616,124619,124641,124656,124658,124663,124675,124735,124737,124739,124793,124795,124797,124803,124808,124811,124816,124820,124823,124885,124890,124893,124895,124899,124911,124993,124995,124997,125051,125057,125059,125063,125068,125070,125075,125079,125099,125134,125138,125141,125144,125147,125154,125157,125169,125172,125187,125190,125209,125257,125260,125277,125280,125294,125299,125302,125311,125326,125338,125376,125381,125390,125395,125400,125426,125435,125439,125443,125448,125451,125455,125459,125464,125467,125472,125475,125480,125483,125488,125491,125495,125500,125503,125508,125511,125515,125520,125523,125528,125531,125536,125539,125543,125548,125551,125556,125559,125564,125567,125571,125576,125579,125584,125587,125592,125595,125600,125603,125608,125611,125616,125619,125623,125628,125631,125636,125643,125647,125652,125655,125660,125663,125667,125672,125675,125678,125681,125684,125687,125691,125694,125704,125709,125714,125736,125741,125746,125753,125757,125762,125765,125768,125773,125776,125779,125782,125785,125788,125791,125794,125797,125800,125803,125806,125809,125814,125819,125824,125829,125834,125839,125844,125847,125851,125854,125858,125863,125868,125873,125878,125882,125888,125896,125901,125904,125909,125924,125927,125932,125966,125981,125984,126039,126065,126077,126080,126089,126092,126107,126112,126115,126121,126126,126129,126134,126137,126142,126147,126154,126157,126172,126175,126210,126215,126223,126261,126264,126267,126272,126275,126280,126291,126325,126330,126333,126342,126347,126353,126356,126361,126370,126375,126378,126381,126386,126394,126397,126402,126407],[10,123140,123136],{"id":123141},"_7-其他操作",[14,123143,123145],{"id":123144},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123147,123148],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123150,123151,123152,123155],{},"进入工控机的硬盘目录，进入",[26,123153,123154],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[30,123157,123161],{"className":123158,"code":123159,"language":123160,"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",[26,123162,123163,123171,123182,123189,123196,123208,123215,123227,123238,123249,123256,123263,123270,123282,123294,123301,123313,123325,123332,123344,123356,123368,123379,123386,123397],{"__ignoreMap":35},[39,123164,123165,123168],{"class":41,"line":42},[39,123166,123167],{"class":52275},"network",[39,123169,123170],{"class":53},": \n",[39,123172,123173,123176,123178,123180],{"class":41,"line":92},[39,123174,123175],{"class":52275},"  version",[39,123177,52412],{"class":53},[39,123179,1345],{"class":74},[39,123181,3760],{"class":53},[39,123183,123184,123187],{"class":41,"line":112},[39,123185,123186],{"class":52275},"  wifis",[39,123188,123170],{"class":53},[39,123190,123191,123194],{"class":41,"line":118},[39,123192,123193],{"class":52275},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[39,123195,123170],{"class":53},[39,123197,123198,123201,123203,123206],{"class":41,"line":125},[39,123199,123200],{"class":52275},"      renderer",[39,123202,52412],{"class":53},[39,123204,123205],{"class":237},"NetworkManager",[39,123207,3760],{"class":53},[39,123209,123210,123213],{"class":41,"line":132},[39,123211,123212],{"class":52275},"      match",[39,123214,123170],{"class":53},[39,123216,123217,123220,123222,123225],{"class":41,"line":138},[39,123218,123219],{"class":52275},"        name",[39,123221,52412],{"class":53},[39,123223,123224],{"class":237},"\"wlan0\"",[39,123226,3760],{"class":53},[39,123228,123229,123232,123234,123236],{"class":41,"line":169},[39,123230,123231],{"class":52275},"      dhcp4",[39,123233,52412],{"class":53},[39,123235,2487],{"class":74},[39,123237,3760],{"class":53},[39,123239,123240,123243,123245,123247],{"class":41,"line":190},[39,123241,123242],{"class":52275},"      dhcp6",[39,123244,52412],{"class":53},[39,123246,2487],{"class":74},[39,123248,3760],{"class":53},[39,123250,123251,123254],{"class":41,"line":202},[39,123252,123253],{"class":52275},"      access-points",[39,123255,123170],{"class":53},[39,123257,123258,123261],{"class":41,"line":207},[39,123259,123260],{"class":237},"        \"EMIS_Vinci_Robocon_5G\"",[39,123262,123170],{"class":53},[39,123264,123265,123268],{"class":41,"line":212},[39,123266,123267],{"class":52275},"          auth",[39,123269,123170],{"class":53},[39,123271,123272,123275,123277,123280],{"class":41,"line":223},[39,123273,123274],{"class":52275},"            key-management",[39,123276,52412],{"class":53},[39,123278,123279],{"class":237},"\"psk\"",[39,123281,3760],{"class":53},[39,123283,123284,123287,123289,123292],{"class":41,"line":228},[39,123285,123286],{"class":52275},"            password",[39,123288,52412],{"class":53},[39,123290,123291],{"class":237},"\"vinci666\"",[39,123293,3760],{"class":53},[39,123295,123296,123299],{"class":41,"line":263},[39,123297,123298],{"class":52275},"          networkmanager",[39,123300,123170],{"class":53},[39,123302,123303,123306,123308,123311],{"class":41,"line":287},[39,123304,123305],{"class":52275},"            uuid",[39,123307,52412],{"class":53},[39,123309,123310],{"class":237},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[39,123312,3760],{"class":53},[39,123314,123315,123318,123320,123323],{"class":41,"line":292},[39,123316,123317],{"class":52275},"            name",[39,123319,52412],{"class":53},[39,123321,123322],{"class":237},"\"EMIS_Vinci_Robocon_5G\"",[39,123324,3760],{"class":53},[39,123326,123327,123330],{"class":41,"line":305},[39,123328,123329],{"class":52275},"            passthrough",[39,123331,123170],{"class":53},[39,123333,123334,123337,123339,123342],{"class":41,"line":310},[39,123335,123336],{"class":52275},"              wifi-security.auth-alg",[39,123338,52412],{"class":53},[39,123340,123341],{"class":237},"\"open\"",[39,123343,3760],{"class":53},[39,123345,123346,123349,123351,123354],{"class":41,"line":321},[39,123347,123348],{"class":52275},"              ipv6.addr-gen-mode",[39,123350,52412],{"class":53},[39,123352,123353],{"class":237},"\"default\"",[39,123355,3760],{"class":53},[39,123357,123358,123361,123363,123366],{"class":41,"line":713},[39,123359,123360],{"class":52275},"              ipv6.ip6-privacy",[39,123362,52412],{"class":53},[39,123364,123365],{"class":237},"\"-1\"",[39,123367,3760],{"class":53},[39,123369,123370,123373,123375,123377],{"class":41,"line":718},[39,123371,123372],{"class":52275},"              proxy._",[39,123374,52412],{"class":53},[39,123376,8726],{"class":237},[39,123378,3760],{"class":53},[39,123380,123381,123384],{"class":41,"line":723},[39,123382,123383],{"class":52275},"      networkmanager",[39,123385,123170],{"class":53},[39,123387,123388,123391,123393,123395],{"class":41,"line":729},[39,123389,123390],{"class":52275},"        uuid",[39,123392,52412],{"class":53},[39,123394,123310],{"class":237},[39,123396,3760],{"class":53},[39,123398,123399,123401,123403],{"class":41,"line":735},[39,123400,123219],{"class":52275},[39,123402,52412],{"class":53},[39,123404,123405],{"class":237},"\"EMIS_Vinci_Robocon_5G\"\n",[19,123407,123408],{},"将其改为新wifi的名和密码：",[30,123410,123412],{"className":123158,"code":123411,"language":123160,"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",[26,123413,123414,123420,123429,123435,123442,123451,123459,123465,123471],{"__ignoreMap":35},[39,123415,123416,123418],{"class":41,"line":42},[39,123417,123167],{"class":52275},[39,123419,4822],{"class":53},[39,123421,123422,123424,123426],{"class":41,"line":92},[39,123423,123175],{"class":52275},[39,123425,52412],{"class":53},[39,123427,123428],{"class":74},"2\n",[39,123430,123431,123433],{"class":41,"line":112},[39,123432,123186],{"class":52275},[39,123434,4822],{"class":53},[39,123436,123437,123440],{"class":41,"line":118},[39,123438,123439],{"class":52275},"    wlan0",[39,123441,4822],{"class":53},[39,123443,123444,123446,123448],{"class":41,"line":125},[39,123445,123231],{"class":52275},[39,123447,52412],{"class":53},[39,123449,123450],{"class":74},"true\n",[39,123452,123453,123455,123457],{"class":41,"line":132},[39,123454,123242],{"class":52275},[39,123456,52412],{"class":53},[39,123458,123450],{"class":74},[39,123460,123461,123463],{"class":41,"line":138},[39,123462,123253],{"class":52275},[39,123464,4822],{"class":53},[39,123466,123467,123469],{"class":41,"line":169},[39,123468,123260],{"class":237},[39,123470,4822],{"class":53},[39,123472,123473,123476,123478],{"class":41,"line":190},[39,123474,123475],{"class":52275},"          password",[39,123477,52412],{"class":53},[39,123479,123480],{"class":237},"\"vinci666\"\n",[19,123482,123483],{},"工控机开机即可连上网。",[14,123485,123487],{"id":123486},"_72-ssh远程开发","7.2 SSH远程开发",[476,123489,123491],{"id":123490},"_721-环境准备","7.2.1 环境准备",[19,123493,123494],{},[350,123495,123496],{},"1.硬件准备",[19,123498,123499],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123501,123502],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123504,123505],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123507,123508],{},[350,123509,123510],{},"2.设置固定IP",[19,123512,123513],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123515,123516],{},"1.进入设置界面",[19,123518,123519],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123521,123522],{},[2585,123523],{"alt":35,"src":123524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123526,123527],{},"2.配置所连接的网络",[19,123529,123530],{},[2585,123531],{"alt":35,"src":123532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123534,123535],{},"3.设置固定IP",[19,123537,123538],{},"查看当前IP地址。",[19,123540,123541],{},[2585,123542],{"alt":35,"src":123543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123545,123546],{},"设置固定IP。",[19,123548,123549],{},[2585,123550],{"alt":35,"src":123551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123553,123554],{},"至此，IP配置完毕。",[476,123556,123558],{"id":123557},"_722-环境搭建","7.2.2 环境搭建",[19,123560,123561],{},[350,123562,26728],{},[19,123564,123565],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123567,123568],{},[350,123569,123570],{},"实现",[19,123572,123573],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[328,123575,123576,123579,123582,123585],{},[331,123577,123578],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[331,123580,123581],{},"远程主机启动SSH服务；",[331,123583,123584],{},"本地主机登陆远程主机；",[331,123586,123587],{},"实现数据传输。",[19,123589,123590],{},"1.安装SSH客户端与服务端",[19,123592,123593],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[30,123595,123597],{"className":121791,"code":123596,"language":121793,"meta":121794,"style":35}," sudo apt install openssh-server\n",[26,123598,123599],{"__ignoreMap":35},[39,123600,123601],{"class":41,"line":42},[39,123602,123596],{},[19,123604,123605],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[30,123607,123609],{"className":121791,"code":123608,"language":121793,"meta":121794,"style":35},"sudo apt install openssh-client\n",[26,123610,123611],{"__ignoreMap":35},[39,123612,123613],{"class":41,"line":42},[39,123614,123608],{},[19,123616,123617],{},"2.远程主机启动SSH服务",[19,123619,123620],{},"远程主机启动 ssh 服务命令如下：",[30,123622,123624],{"className":121791,"code":123623,"language":121793,"meta":121794,"style":35},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[26,123625,123626],{"__ignoreMap":35},[39,123627,123628],{"class":41,"line":42},[39,123629,123623],{},[19,123631,123632],{},"启动后可使用如下命令查看服务是否正常运行：",[30,123634,123636],{"className":121791,"code":123635,"language":121793,"meta":121794,"style":35},"ps -e | grep ssh\n",[26,123637,123638],{"__ignoreMap":35},[39,123639,123640],{"class":41,"line":42},[39,123641,123635],{},[19,123643,123644],{},"如果启动成功，会包含 sshd 程序。",[19,123646,123647],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[30,123649,123651],{"className":121791,"code":123650,"language":121793,"meta":121794,"style":35},"sudo systemctl enable ssh\n",[26,123652,123653],{"__ignoreMap":35},[39,123654,123655],{"class":41,"line":42},[39,123656,123650],{},[19,123658,123659],{},"3.本地远程登录",[19,123661,123662],{},"登录远程主机可以调用如下命令:",[30,123664,123666],{"className":118271,"code":123665,"language":118273,"meta":35,"style":35},"ssh -X 用户名@ip地址\n",[26,123667,123668],{"__ignoreMap":35},[39,123669,123670,123672,123675],{"class":41,"line":42},[39,123671,122622],{"class":49},[39,123673,123674],{"class":74}," -X",[39,123676,123677],{"class":237}," 用户名@ip地址\n",[19,123679,123680],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123682,123683],{},"如果退出，可以调用exit命令：",[30,123685,123687],{"className":121791,"code":123686,"language":121793,"meta":121794,"style":35},"exit\n",[26,123688,123689],{"__ignoreMap":35},[39,123690,123691],{"class":41,"line":42},[39,123692,123686],{},[19,123694,123695],{},[350,123696,123697],{},"4.实现数据传输",[19,123699,123700],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123702,123703],{},"上传文件指令格式如下：",[30,123705,123707],{"className":121791,"code":123706,"language":121793,"meta":121794,"style":35},"scp 本地文件路径 账号@ip:路径\n",[26,123708,123709],{"__ignoreMap":35},[39,123710,123711],{"class":41,"line":42},[39,123712,123706],{},[19,123714,123715],{},"上传文件夹指令格式如下：",[30,123717,123719],{"className":121791,"code":123718,"language":121793,"meta":121794,"style":35},"scp -r 本地文件夹路径 账号@ip:路径\n",[26,123720,123721],{"__ignoreMap":35},[39,123722,123723],{"class":41,"line":42},[39,123724,123718],{},[19,123726,123727],{},"下载文件指令格式如下：",[30,123729,123731],{"className":121791,"code":123730,"language":121793,"meta":121794,"style":35},"scp 账号@ip:路径 本地文件夹路径\n",[26,123732,123733],{"__ignoreMap":35},[39,123734,123735],{"class":41,"line":42},[39,123736,123730],{},[19,123738,123739],{},"下载文件夹指令格式如下：",[30,123741,123743],{"className":121791,"code":123742,"language":121793,"meta":121794,"style":35},"scp -r 账号@ip:路径 本地文件夹路径\n",[26,123744,123745],{"__ignoreMap":35},[39,123746,123747],{"class":41,"line":42},[39,123748,123742],{},[19,123750,123751],{},[350,123752,123753],{},"优化",[19,123755,123756],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[328,123758,123759,123762],{},[331,123760,123761],{},"本地生成密钥对；",[331,123763,123764],{},"将公钥上传至远程主机。",[19,123766,123767],{},[350,123768,123769],{},"1.生成密钥对",[19,123771,123772],{},"本地客户端生成公私钥：（一路回车默认即可）",[30,123774,123776],{"className":121791,"code":123775,"language":121793,"meta":121794,"style":35},"ssh-keygen\n",[26,123777,123778],{"__ignoreMap":35},[39,123779,123780],{"class":41,"line":42},[39,123781,123775],{},[19,123783,123784],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[328,123786,123787,123790],{},[331,123788,123789],{},"id_rsa （私钥）；",[331,123791,123792],{},"id_rsa.pub (公钥)。",[19,123794,123795],{},[350,123796,123797],{},"2.公钥上传",[19,123799,123800],{},"上传指令如下：",[30,123802,123804],{"className":121791,"code":123803,"language":121793,"meta":121794,"style":35},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[26,123805,123806],{"__ignoreMap":35},[39,123807,123808],{"class":41,"line":42},[39,123809,123803],{},[19,123811,123812],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123814,123815],{},"以后再远程登录就无需录入密码了。",[476,123817,123819],{"id":123818},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123821,123822],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123824,123825],{},[350,123826,123827],{},"1.准备工作",[19,123829,123830],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123832,123833],{},[350,123834,123835],{},"2.为VScode安装远程开发插件",[19,123837,123838,123839,123842,123843,123846,123847,29360],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[26,123840,123841],{},"扩展：商店","的搜索栏输入",[26,123844,123845],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[26,123848,123849],{},"安装",[19,123851,123852],{},[2585,123853],{"alt":35,"src":123854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123856,123857],{},[350,123858,123859],{},"3.配置远程连接",[19,123861,123862,123863,123866,123867,123870],{},"步骤1：使用快捷键",[26,123864,123865],{},"ctrl + shift + p","打开命令输入窗口，并输入",[26,123868,123869],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123872,123873],{},[2585,123874],{"alt":35,"src":123875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123877,123878,123879,29360],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[26,123880,123881],{},"Add New SSH Host",[19,123883,123884],{},[2585,123885],{"alt":35,"src":123886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123888,123889,123890,123893,123894,123897,123898,123901],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[26,123891,123892],{},"ssh +X ubuntu@192.168.43.164","，其中，",[26,123895,123896],{},"ubuntu","需要替换为你的登录用户名，",[26,123899,123900],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123903,123904],{},[2585,123905],{"alt":35,"src":123906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123908,123909],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123911,123912],{},[2585,123913],{"alt":35,"src":123914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123916,123917],{},[2585,123918],{"alt":35,"src":123919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123921,123922],{},[350,123923,123924],{},"4.使用",[19,123926,123927,123928,123866,123930,123932],{},"步骤1：继续使用快捷键",[26,123929,123865],{},[26,123931,123869],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123934,123935],{},[2585,123936],{"alt":35,"src":123937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123939,123940,123941,123944],{},"或者，也可以点击侧边栏的",[26,123942,123943],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123946,123947],{},[2585,123948],{"alt":35,"src":123949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123951,123952,123953,123956,123957,123960],{},"步骤2：选择菜单栏的",[26,123954,123955],{},"文件","下的",[26,123958,123959],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123962,123963],{},[2585,123964],{"alt":35,"src":123965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123967,123968],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123970,123972],{"id":123971},"_73-远程桌面","7.3 远程桌面",[19,123974,123975],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123977,123978],{},"我们选择使用VNC来看。",[328,123980,123981],{},[331,123982,123983],{},"安装VNC服务器：",[19,123985,123986],{},"这里以TigerVNC为例进行安装：",[30,123988,123990],{"className":118271,"code":123989,"language":118273,"meta":35,"style":35},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[26,123991,123992],{"__ignoreMap":35},[39,123993,123994,123996,123998,124000,124003],{"class":41,"line":42},[39,123995,25551],{"class":49},[39,123997,118292],{"class":237},[39,123999,24808],{"class":237},[39,124001,124002],{"class":237}," tigervnc-standalone-server",[39,124004,124005],{"class":237}," tigervnc-common\n",[328,124007,124008],{"start":92},[331,124009,124010],{},"设置VNC密码：",[19,124012,124013],{},"为VNC用户设置密码，运行以下命令：",[30,124015,124017],{"className":118271,"code":124016,"language":118273,"meta":35,"style":35},"vncpasswd\n",[26,124018,124019],{"__ignoreMap":35},[39,124020,124021],{"class":41,"line":42},[39,124022,124016],{"class":49},[328,124024,124025],{"start":112},[331,124026,124027],{},"配置VNC启动脚本:",[19,124029,124030],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[30,124032,124034],{"className":118271,"code":124033,"language":118273,"meta":35,"style":35},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[26,124035,124036,124045],{"__ignoreMap":35},[39,124037,124038,124040,124042],{"class":41,"line":42},[39,124039,102241],{"class":49},[39,124041,30191],{"class":74},[39,124043,124044],{"class":237}," ~\u002F.vnc\n",[39,124046,124047,124050],{"class":41,"line":92},[39,124048,124049],{"class":49},"nano",[39,124051,124052],{"class":237}," ~\u002F.vnc\u002Fxstartup\n",[19,124054,124055],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[30,124057,124059],{"className":118271,"code":124058,"language":118273,"meta":35,"style":35},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[26,124060,124061,124066,124074,124081],{"__ignoreMap":35},[39,124062,124063],{"class":41,"line":42},[39,124064,124065],{"class":128},"#!\u002Fbin\u002Fsh\n",[39,124067,124068,124071],{"class":41,"line":92},[39,124069,124070],{"class":74},"unset",[39,124072,124073],{"class":237}," SESSION_MANAGER\n",[39,124075,124076,124078],{"class":41,"line":112},[39,124077,124070],{"class":74},[39,124079,124080],{"class":237}," DBUS_SESSION_BUS_ADDRESS\n",[39,124082,124083],{"class":41,"line":118},[39,124084,124085],{"class":49},"gnome-session\n",[19,124087,124088],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[328,124090,124091],{"start":118},[331,124092,124093],{},"给予执行权限：",[19,124095,124096],{},"为xstartup文件设置执行权限：",[30,124098,124100],{"className":118271,"code":124099,"language":118273,"meta":35,"style":35},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[26,124101,124102],{"__ignoreMap":35},[39,124103,124104,124106,124109],{"class":41,"line":42},[39,124105,25586],{"class":49},[39,124107,124108],{"class":237}," +x",[39,124110,124052],{"class":237},[328,124112,124113],{"start":125},[331,124114,124115],{},"启动VNC服务器：",[30,124117,124119],{"className":118271,"code":124118,"language":118273,"meta":35,"style":35},"vncserver -geometry 1920x1080 -localhost=0\n",[26,124120,124121],{"__ignoreMap":35},[39,124122,124123,124126,124129,124132],{"class":41,"line":42},[39,124124,124125],{"class":49},"vncserver",[39,124127,124128],{"class":74}," -geometry",[39,124130,124131],{"class":237}," 1920x1080",[39,124133,124134],{"class":74}," -localhost=0\n",[19,124136,124137],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124139,124140],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[328,124142,124143],{"start":132},[331,124144,124145],{},"查看已开启的VNC服务器：",[30,124147,124149],{"className":118271,"code":124148,"language":118273,"meta":35,"style":35},"vncserver -list\n",[26,124150,124151],{"__ignoreMap":35},[39,124152,124153,124155],{"class":41,"line":42},[39,124154,124125],{"class":49},[39,124156,124157],{"class":74}," -list\n",[19,124159,124160],{},[2585,124161],{"alt":35,"src":124162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[328,124164,124165],{"start":138},[331,124166,124167],{},"连接到VNC服务器：",[19,124169,124170],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[328,124172,124173],{"start":169},[331,124174,124175],{},"停止VNC服务器：",[19,124177,124178],{},"如果需要停止VNC服务器，可以使用以下命令：",[30,124180,124182],{"className":118271,"code":124181,"language":118273,"meta":35,"style":35},"vncserver -kill :1\n",[26,124183,124184],{"__ignoreMap":35},[39,124185,124186,124188,124191],{"class":41,"line":42},[39,124187,124125],{"class":49},[39,124189,124190],{"class":74}," -kill",[39,124192,124193],{"class":237}," :1\n",[19,124195,124196],{},"将:1替换为你实际使用的显示编号。",[19,124198,124199],{},[2585,124200],{"alt":35,"src":124201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124203,124204],{},[2585,124205],{"alt":35,"src":124206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124208,124210],{"id":124209},"_74-usb端口设置","7.4 USB端口设置",[19,124212,124213],{},[350,124214,124215],{},"首先先配置好权限",[30,124217,124219],{"className":118271,"code":124218,"language":118273,"meta":35,"style":35},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[26,124220,124221,124226,124239,124246,124251],{"__ignoreMap":35},[39,124222,124223],{"class":41,"line":42},[39,124224,124225],{"class":128},"# 将用户权限提高\n",[39,124227,124228,124230,124232,124234,124237],{"class":41,"line":92},[39,124229,25551],{"class":49},[39,124231,27549],{"class":237},[39,124233,27552],{"class":74},[39,124235,124236],{"class":237}," dialout",[39,124238,27557],{"class":53},[39,124240,124241,124243],{"class":41,"line":112},[39,124242,27576],{"class":49},[39,124244,124245],{"class":237}," dialout\n",[39,124247,124248],{"class":41,"line":118},[39,124249,124250],{"class":128},"# 查看下面命令是否输出dialout（若输出才正常）\n",[39,124252,124253],{"class":41,"line":125},[39,124254,124255],{"class":49},"groups\n",[19,124257,124258],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[476,124260,124262],{"id":124261},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124264,124265,124268],{},[350,124266,124267],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124270,124271,124274],{},[350,124272,124273],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124276,124277],{},[350,124278,124279],{},"流程如下：",[19,124281,124282],{},"（1）.查找设备idVendor和idProduct",[19,124284,124285,124286,124289],{},"接入两个USB设备，在终端调用指令",[26,124287,124288],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124291,124292],{},[2585,124293],{"alt":35,"src":124294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124296,124297,124298,124301],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[26,124299,124300],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124303,124304],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124306,124307],{},"（2）.编写映射规则",[19,124309,124310,124311,124314],{},"在",[26,124312,124313],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[30,124316,124318],{"className":118271,"code":124317,"language":118273,"meta":35,"style":35},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[26,124319,124320],{"__ignoreMap":35},[39,124321,124322,124324,124326],{"class":41,"line":42},[39,124323,25551],{"class":49},[39,124325,119558],{"class":237},[39,124327,124328],{"class":237}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124330,124331],{},"输入如下内容：",[30,124333,124335],{"className":118271,"code":124334,"language":118273,"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",[26,124336,124337,124367],{"__ignoreMap":35},[39,124338,124339,124342,124344,124347,124350,124353,124356,124358,124361,124364],{"class":41,"line":42},[39,124340,124341],{"class":53},"KERNEL",[39,124343,1117],{"class":45},[39,124345,124346],{"class":237},"=\"ttyUSB*\",",[39,124348,124349],{"class":49}," ATTRS",[39,124351,124352],{"class":237},"{idVendor}==",[39,124354,124355],{"class":49},"\"10c4\"",[39,124357,426],{"class":49},[39,124359,124360],{"class":237}," ATTRS{idProduct}==\"ea60\",",[39,124362,124363],{"class":237}," MODE:=\"0777\",",[39,124365,124366],{"class":237}," SYMLINK+=\"mylidar\"\n",[39,124368,124369,124371,124373,124375,124377,124379,124382,124384,124387,124389],{"class":41,"line":92},[39,124370,124341],{"class":53},[39,124372,1117],{"class":45},[39,124374,124346],{"class":237},[39,124376,124349],{"class":49},[39,124378,124352],{"class":237},[39,124380,124381],{"class":49},"\"1a86\"",[39,124383,426],{"class":49},[39,124385,124386],{"class":237}," ATTRS{idProduct}==\"7523\",",[39,124388,124363],{"class":237},[39,124390,124391],{"class":237}," SYMLINK+=\"mycar\"\n",[19,124393,124394],{},"代码解释：",[489,124396,124397,124400,124403,124406],{},[331,124398,124399],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[331,124401,124402],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[331,124404,124405],{},"SYMLINK是符号连接，即绑定的别名；",[331,124407,124408],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,124410,124411,124412,124415,124418],{},"***小提示：***",[24527,124413,124414],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[26,124416,124417],{},"\u002Fetc\u002Fudev\u002Frule.d",[24527,124419,124420],{},"目录即可。",[19,124422,124423],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,124425,124426],{},"（3）.使规则生效",[19,124428,124429],{},"在终端下输入如下指令：",[30,124431,124433],{"className":118271,"code":124432,"language":118273,"meta":35,"style":35},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[26,124434,124435,124440,124452,124463,124467,124472,124485],{"__ignoreMap":35},[39,124436,124437],{"class":41,"line":42},[39,124438,124439],{"class":128},"# Ubuntu用下方命令\n",[39,124441,124442,124444,124446,124449],{"class":41,"line":92},[39,124443,25551],{"class":49},[39,124445,121023],{"class":237},[39,124447,124448],{"class":237}," udev",[39,124450,124451],{"class":237}," reload\n",[39,124453,124454,124456,124458,124460],{"class":41,"line":112},[39,124455,25551],{"class":49},[39,124457,121023],{"class":237},[39,124459,124448],{"class":237},[39,124461,124462],{"class":237}," restart\n",[39,124464,124465],{"class":41,"line":118},[39,124466,122],{"emptyLinePlaceholder":121},[39,124468,124469],{"class":41,"line":125},[39,124470,124471],{"class":128},"#Fedora用下方命令\n",[39,124473,124474,124476,124479,124482],{"class":41,"line":132},[39,124475,25551],{"class":49},[39,124477,124478],{"class":237}," udevadm",[39,124480,124481],{"class":237}," control",[39,124483,124484],{"class":74}," --reload\n",[39,124486,124487,124489,124491],{"class":41,"line":138},[39,124488,25551],{"class":49},[39,124490,124478],{"class":237},[39,124492,124493],{"class":237}," trigger\n",[19,124495,124496],{},"再重新插拔设备即可。",[19,124498,124499],{},"（4）.测试",[19,124501,124502],{},"终端下输入如下指令",[30,124504,124506],{"className":118271,"code":124505,"language":118273,"meta":35,"style":35},"ll \u002Fdev | grep ttyUSB\n",[26,124507,124508],{"__ignoreMap":35},[39,124509,124510,124513,124516,124518,124520],{"class":41,"line":42},[39,124511,124512],{"class":49},"ll",[39,124514,124515],{"class":237}," \u002Fdev",[39,124517,26084],{"class":45},[39,124519,31211],{"class":49},[39,124521,124522],{"class":237}," ttyUSB\n",[19,124524,124525],{},"运行结果如下：",[19,124527,124528],{},[2585,124529],{"alt":35,"src":124530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124532,124533,124534,124537],{},"也可以多次插拔USB设备，会发现设备端口",[26,124535,124536],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124539,124540],{},[350,124541,118939],{},[19,124543,124544],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[476,124546,124548],{"id":124547},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124550,124551,124553],{},[350,124552,124267],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124555,124556,124558],{},[350,124557,124273],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124560,124561],{},[350,124562,124279],{},[19,124564,124565],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124567,124568],{},"调用如下指令查看第一台雷达的USB信息：",[30,124570,124572],{"className":118271,"code":124571,"language":118273,"meta":35,"style":35},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[26,124573,124574,124594],{"__ignoreMap":35},[39,124575,124576,124579,124581,124584,124587,124589,124591],{"class":41,"line":42},[39,124577,124578],{"class":49},"udevadm",[39,124580,70796],{"class":237},[39,124582,124583],{"class":74}," --attribute-walk",[39,124585,124586],{"class":74}," --name=\u002Fdev\u002FttyUSB0",[39,124588,26084],{"class":45},[39,124590,31211],{"class":49},[39,124592,124593],{"class":237}," KERNELS\n",[39,124595,124596,124598,124600,124602,124605,124607,124609],{"class":41,"line":92},[39,124597,124578],{"class":49},[39,124599,70796],{"class":237},[39,124601,124583],{"class":74},[39,124603,124604],{"class":74}," --name=\u002Fdev\u002FttyACM0",[39,124606,26084],{"class":45},[39,124608,31211],{"class":49},[39,124610,124593],{"class":237},[19,124612,124613],{},[2585,124614],{"alt":35,"src":124615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124617,124618],{},"调用如下指令查看第二台雷达的USB信息：",[30,124620,124622],{"className":118271,"code":124621,"language":118273,"meta":35,"style":35},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[26,124623,124624],{"__ignoreMap":35},[39,124625,124626,124628,124630,124632,124635,124637,124639],{"class":41,"line":42},[39,124627,124578],{"class":49},[39,124629,70796],{"class":237},[39,124631,124583],{"class":74},[39,124633,124634],{"class":74}," --name=\u002Fdev\u002FttyUSB1",[39,124636,26084],{"class":45},[39,124638,31211],{"class":49},[39,124640,124593],{"class":237},[19,124642,124643,124644,124647,124648,124651,124652,124655],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[26,124645,124646],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[26,124649,124650],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[350,124653,124654],{},"唯一性标识","”。",[19,124657,124307],{},[19,124659,124310,124660,124662],{},[26,124661,124313],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[30,124664,124665],{"className":118271,"code":124317,"language":118273,"meta":35,"style":35},[26,124666,124667],{"__ignoreMap":35},[39,124668,124669,124671,124673],{"class":41,"line":42},[39,124670,25551],{"class":49},[39,124672,119558],{"class":237},[39,124674,124328],{"class":237},[30,124676,124678],{"className":118271,"code":124677,"language":118273,"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",[26,124679,124680,124709],{"__ignoreMap":35},[39,124681,124682,124684,124686,124688,124691,124693,124696,124699,124701,124704,124706],{"class":41,"line":42},[39,124683,124341],{"class":53},[39,124685,1117],{"class":45},[39,124687,124346],{"class":237},[39,124689,124690],{"class":53}," KERNELS",[39,124692,1117],{"class":45},[39,124694,124695],{"class":237},"=\"1-1.3:1.0\",",[39,124697,124698],{"class":49}," MODE:",[39,124700,1117],{"class":237},[39,124702,124703],{"class":49},"\"0777\"",[39,124705,426],{"class":49},[39,124707,124708],{"class":237}," SYMLINK+=\"rplidar_front\"\n",[39,124710,124711,124713,124715,124717,124719,124721,124724,124726,124728,124730,124732],{"class":41,"line":92},[39,124712,124341],{"class":53},[39,124714,1117],{"class":45},[39,124716,124346],{"class":237},[39,124718,124690],{"class":53},[39,124720,1117],{"class":45},[39,124722,124723],{"class":237},"=\"1-1.4:1.0\",",[39,124725,124698],{"class":49},[39,124727,1117],{"class":237},[39,124729,124703],{"class":49},[39,124731,426],{"class":49},[39,124733,124734],{"class":237}," SYMLINK+=\"rplidar_back\"\n",[19,124736,124426],{},[19,124738,124429],{},[30,124740,124741],{"className":118271,"code":124432,"language":118273,"meta":35,"style":35},[26,124742,124743,124747,124757,124767,124771,124775,124785],{"__ignoreMap":35},[39,124744,124745],{"class":41,"line":42},[39,124746,124439],{"class":128},[39,124748,124749,124751,124753,124755],{"class":41,"line":92},[39,124750,25551],{"class":49},[39,124752,121023],{"class":237},[39,124754,124448],{"class":237},[39,124756,124451],{"class":237},[39,124758,124759,124761,124763,124765],{"class":41,"line":112},[39,124760,25551],{"class":49},[39,124762,121023],{"class":237},[39,124764,124448],{"class":237},[39,124766,124462],{"class":237},[39,124768,124769],{"class":41,"line":118},[39,124770,122],{"emptyLinePlaceholder":121},[39,124772,124773],{"class":41,"line":125},[39,124774,124471],{"class":128},[39,124776,124777,124779,124781,124783],{"class":41,"line":132},[39,124778,25551],{"class":49},[39,124780,124478],{"class":237},[39,124782,124481],{"class":237},[39,124784,124484],{"class":74},[39,124786,124787,124789,124791],{"class":41,"line":138},[39,124788,25551],{"class":49},[39,124790,124478],{"class":237},[39,124792,124493],{"class":237},[19,124794,124496],{},[19,124796,124499],{},[19,124798,124502,124799,124802],{},[26,124800,124801],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124804,124805],{},[2585,124806],{"alt":35,"src":124807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124809,124810],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124812,124813,124815],{},[350,124814,118939],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[476,124817,124819],{"id":124818},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124821,124822],{},"（1）.查看所连接的主机USB接口的信息",[30,124824,124826],{"className":118271,"code":124825,"language":118273,"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",[26,124827,124828,124858],{"__ignoreMap":35},[39,124829,124830,124832,124834,124837,124839,124841,124843,124845,124848,124851,124853,124856],{"class":41,"line":42},[39,124831,124578],{"class":49},[39,124833,70796],{"class":237},[39,124835,124836],{"class":74}," -a",[39,124838,30191],{"class":74},[39,124840,29397],{"class":53},[39,124842,124578],{"class":49},[39,124844,70796],{"class":237},[39,124846,124847],{"class":74}," -q",[39,124849,124850],{"class":237}," path",[39,124852,26090],{"class":74},[39,124854,124855],{"class":237}," \u002Fdev\u002FttyACM0",[39,124857,574],{"class":53},[39,124859,124860,124862,124864,124866,124868,124870,124872,124874,124876,124878,124880,124883],{"class":41,"line":92},[39,124861,124578],{"class":49},[39,124863,70796],{"class":237},[39,124865,124836],{"class":74},[39,124867,30191],{"class":74},[39,124869,29397],{"class":53},[39,124871,124578],{"class":49},[39,124873,70796],{"class":237},[39,124875,124847],{"class":74},[39,124877,124850],{"class":237},[39,124879,26090],{"class":74},[39,124881,124882],{"class":237}," \u002Fdev\u002FttyUSB0",[39,124884,574],{"class":53},[19,124886,124887],{},[2585,124888],{"alt":35,"src":124889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124891,124892],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124894,124307],{},[19,124896,124310,124897,124662],{},[26,124898,124313],{},[30,124900,124901],{"className":118271,"code":124317,"language":118273,"meta":35,"style":35},[26,124902,124903],{"__ignoreMap":35},[39,124904,124905,124907,124909],{"class":41,"line":42},[39,124906,25551],{"class":49},[39,124908,119558],{"class":237},[39,124910,124328],{"class":237},[30,124912,124914],{"className":118271,"code":124913,"language":118273,"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",[26,124915,124916,124944,124970],{"__ignoreMap":35},[39,124917,124918,124920,124922,124925,124927,124929,124931,124933,124936,124939,124941],{"class":41,"line":42},[39,124919,124341],{"class":53},[39,124921,1117],{"class":45},[39,124923,124924],{"class":237},"=\"ttyACM*\",",[39,124926,124349],{"class":49},[39,124928,124352],{"class":237},[39,124930,124381],{"class":49},[39,124932,426],{"class":49},[39,124934,124935],{"class":237}," ATTRS{idProduct}==\"55d4\",",[39,124937,124938],{"class":237}," ATTRS{serial}==\"0001\",",[39,124940,124363],{"class":237},[39,124942,124943],{"class":237}," SYMLINK+=\"ttyACM_MCU\"\n",[39,124945,124946,124948,124950,124952,124954,124956,124958,124960,124962,124965,124967],{"class":41,"line":92},[39,124947,124341],{"class":53},[39,124949,1117],{"class":45},[39,124951,124924],{"class":237},[39,124953,124349],{"class":49},[39,124955,124352],{"class":237},[39,124957,124381],{"class":49},[39,124959,426],{"class":49},[39,124961,124935],{"class":237},[39,124963,124964],{"class":237}," ATTRS{serial}==\"0002\",",[39,124966,124363],{"class":237},[39,124968,124969],{"class":237}," SYMLINK+=\"ttyACM_Lidar\"\n",[39,124971,124972,124974,124976,124978,124980,124982,124984,124986,124988,124990],{"class":41,"line":112},[39,124973,124341],{"class":53},[39,124975,1117],{"class":45},[39,124977,124346],{"class":237},[39,124979,124349],{"class":49},[39,124981,124352],{"class":237},[39,124983,124381],{"class":49},[39,124985,426],{"class":49},[39,124987,124386],{"class":237},[39,124989,124363],{"class":237},[39,124991,124992],{"class":237}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124994,124426],{},[19,124996,124429],{},[30,124998,124999],{"className":118271,"code":124432,"language":118273,"meta":35,"style":35},[26,125000,125001,125005,125015,125025,125029,125033,125043],{"__ignoreMap":35},[39,125002,125003],{"class":41,"line":42},[39,125004,124439],{"class":128},[39,125006,125007,125009,125011,125013],{"class":41,"line":92},[39,125008,25551],{"class":49},[39,125010,121023],{"class":237},[39,125012,124448],{"class":237},[39,125014,124451],{"class":237},[39,125016,125017,125019,125021,125023],{"class":41,"line":112},[39,125018,25551],{"class":49},[39,125020,121023],{"class":237},[39,125022,124448],{"class":237},[39,125024,124462],{"class":237},[39,125026,125027],{"class":41,"line":118},[39,125028,122],{"emptyLinePlaceholder":121},[39,125030,125031],{"class":41,"line":125},[39,125032,124471],{"class":128},[39,125034,125035,125037,125039,125041],{"class":41,"line":132},[39,125036,25551],{"class":49},[39,125038,124478],{"class":237},[39,125040,124481],{"class":237},[39,125042,124484],{"class":74},[39,125044,125045,125047,125049],{"class":41,"line":138},[39,125046,25551],{"class":49},[39,125048,124478],{"class":237},[39,125050,124493],{"class":237},[19,125052,125053,125054],{},"再重新插拔设备即可，或者 ",[350,125055,125056],{},"直接重启系统。",[19,125058,124499],{},[19,125060,124502,125061,124802],{},[26,125062,124801],{},[19,125064,125065],{},[2585,125066],{"alt":35,"src":125067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125069,124810],{},[19,125071,125072,125074],{},[350,125073,118939],{}," 一些设备可能没有串口号等。",[476,125076,125078],{"id":125077},"_744-其他注意事项","7.4.4 其他注意事项",[19,125080,125081,125082,125084,125085,125088,125089,19383,125092,125095,125096,125098],{},"并非所有的USB设备端口号都是",[26,125083,124536],{},"的格式，比如Arduino的端口号可能是",[26,125086,125087],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[26,125090,125091],{},"videon",[26,125093,125094],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[26,125097,125091],{},"端口，绑定时需要关联的也是该接口。",[19,125100,125101,125102,125105,125106,125109,125110,125112,125113,125116,125117,125120,125121,125124,125125,125124,125128,125124,125131,29360],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[26,125103,125104],{},"KERNEL==\"ttyUSB*\"","修改为",[26,125107,125108],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[26,125111,125104],{},"修改为类似于",[26,125114,125115],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[26,125118,125119],{},"video[0,2,4,6]","表示可以绑定的端口为",[26,125122,125123],{},"video0","或",[26,125126,125127],{},"video2",[26,125129,125130],{},"video4",[26,125132,125133],{},"video6",[14,125135,125137],{"id":125136},"_75-挂载内网网页","7.5 挂载内网网页",[19,125139,125140],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125142,125143],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125145,125146],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125148,125149,125150],{},"Termux 下载地址（F-Droid）：",[922,125151,125152],{"href":125152,"rel":125153},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24839],[19,125155,125156],{},"首先打开app后，先更新软件缓存：",[30,125158,125160],{"className":118271,"code":125159,"language":118273,"meta":35,"style":35},"pkg update\n",[26,125161,125162],{"__ignoreMap":35},[39,125163,125164,125167],{"class":41,"line":42},[39,125165,125166],{"class":49},"pkg",[39,125168,27217],{"class":237},[19,125170,125171],{},"然后换源",[30,125173,125175],{"className":118271,"code":125174,"language":118273,"meta":35,"style":35},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[26,125176,125177],{"__ignoreMap":35},[39,125178,125179,125181,125184],{"class":41,"line":42},[39,125180,124049],{"class":49},[39,125182,125183],{"class":53}," $PREFIX",[39,125185,125186],{"class":237},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125188,125189],{},"将该文件内容替换为下面：",[30,125191,125193],{"className":118271,"code":125192,"language":118273,"meta":35,"style":35},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[26,125194,125195],{"__ignoreMap":35},[39,125196,125197,125200,125203,125206],{"class":41,"line":42},[39,125198,125199],{"class":49},"deb",[39,125201,125202],{"class":237}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[39,125204,125205],{"class":237}," stable",[39,125207,125208],{"class":237}," main\n",[489,125210,125211,125238],{},[331,125212,125213,125214,125216,125217],{},"如果你使用的是",[26,125215,124049],{},"编辑器：",[489,125218,125219,125226,125232],{},[331,125220,125221,125222,125225],{},"按 ",[26,125223,125224],{},"Ctrl+O"," 保存文件。",[331,125227,125221,125228,125231],{},[26,125229,125230],{},"Enter"," 确认文件名。",[331,125233,125221,125234,125237],{},[26,125235,125236],{},"Ctrl+X"," 退出编辑器。",[331,125239,125213,125240,125216,125243],{},[26,125241,125242],{},"vim",[489,125244,125245,125251],{},[331,125246,125221,125247,125250],{},[26,125248,125249],{},"Esc"," 退出编辑模式。",[331,125252,125253,125254,125256],{},"输入 ",[26,125255,120196],{}," 保存并退出。",[19,125258,125259],{},"接下来重新更新软件源：",[30,125261,125263],{"className":118271,"code":125262,"language":118273,"meta":35,"style":35},"pkg update && pkg upgrade\n",[26,125264,125265],{"__ignoreMap":35},[39,125266,125267,125269,125271,125273,125275],{"class":41,"line":42},[39,125268,125166],{"class":49},[39,125270,118322],{"class":237},[39,125272,27165],{"class":53},[39,125274,125166],{"class":49},[39,125276,118308],{"class":237},[19,125278,125279],{},"安装python：",[30,125281,125283],{"className":118271,"code":125282,"language":118273,"meta":35,"style":35},"pkg install python\n",[26,125284,125285],{"__ignoreMap":35},[39,125286,125287,125289,125291],{"class":41,"line":42},[39,125288,125166],{"class":49},[39,125290,24808],{"class":237},[39,125292,125293],{"class":237}," python\n",[19,125295,125296,27448],{},[350,125297,125298],{},"通过Termux访问设备存储",[19,125300,125301],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[30,125303,125305],{"className":118271,"code":125304,"language":118273,"meta":35,"style":35},"termux-setup-storage\n",[26,125306,125307],{"__ignoreMap":35},[39,125308,125309],{"class":41,"line":42},[39,125310,125304],{"class":49},[328,125312,125313],{},[331,125314,125315,27448,125318],{},[350,125316,125317],{},"进入HTML文件所在的目录",[328,125319,125320],{},[331,125321,125322,125323,125325],{},"使用",[26,125324,102251],{},"命令进入HTML文件所在的目录：",[30,125327,125329],{"className":118271,"code":125328,"language":118273,"meta":35,"style":35},"cd ~\u002Fyour_html_folder\n",[26,125330,125331],{"__ignoreMap":35},[39,125332,125333,125335],{"class":41,"line":42},[39,125334,102251],{"class":74},[39,125336,125337],{"class":237}," ~\u002Fyour_html_folder\n",[328,125339,125340],{"start":92},[331,125341,125342,27448,125345,125350,125367],{},[350,125343,125344],{},"启动Python HTTP服务器",[328,125346,125347],{},[331,125348,125349],{},"运行以下命令启动一个简单的HTTP服务器：",[30,125351,125353],{"className":118271,"code":125352,"language":118273,"meta":35,"style":35},"python -m http.server 8000\n",[26,125354,125355],{"__ignoreMap":35},[39,125356,125357,125359,125361,125364],{"class":41,"line":42},[39,125358,31355],{"class":49},[39,125360,101857],{"class":74},[39,125362,125363],{"class":237}," http.server",[39,125365,125366],{"class":74}," 8000\n",[328,125368,125369],{"start":112},[331,125370,125371,125372,125375],{},"这会在端口",[26,125373,125374],{},"8000","上启动一个Web服务器。",[489,125377,125378],{},[331,125379,125380],{},"启动服务器后，Termux会显示日志信息，例如：",[30,125382,125384],{"className":121791,"code":125383,"language":121793,"meta":121794,"style":35},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[26,125385,125386],{"__ignoreMap":35},[39,125387,125388],{"class":41,"line":42},[39,125389,125383],{},[489,125391,125392],{},[331,125393,125394],{},"这表示服务器已成功启动。",[19,125396,125397],{},[350,125398,125399],{},"在浏览器中访问HTML文件",[328,125401,125402],{},[331,125403,125404,27448,125407,125412],{},[350,125405,125406],{},"在同一设备上访问",[328,125408,125409],{},[331,125410,125411],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[30,125413,125416],{"className":125414,"code":125415,"language":72639,"meta":35,"style":35},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[26,125417,125418],{"__ignoreMap":35},[39,125419,125420,125423],{"class":41,"line":42},[39,125421,125422],{"class":53},"http:",[39,125424,125425],{"class":128},"\u002F\u002Flocalhost:8000\n",[489,125427,125428],{},[331,125429,125430,125431,125434],{},"如果HTML文件中有",[26,125432,125433],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125436,125438],{"id":125437},"_76-linux重点知识","7.6 Linux重点知识",[476,125440,125442],{"id":125441},"_761-关于点的说明","7.6.1 关于点的说明",[19,125444,125445],{},[2585,125446],{"alt":35,"src":125447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125449,125450],{},"一点本目录，两点上目录",[476,125452,125454],{"id":125453},"_762-目录","7.6.2 目录",[22971,125456,125458],{"id":125457},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125460,125461],{},[350,125462,125463],{},"\u002Fboot:",[19,125465,125466],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125468,125469],{},[350,125470,125471],{},"\u002Fetc:",[19,125473,125474],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125476,125477],{},[350,125478,125479],{},"\u002Flib：",[19,125481,125482],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125484,125485],{},[350,125486,125487],{},"\u002Fsys:",[19,125489,125490],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22971,125492,125494],{"id":125493},"_7622-指令集合","7.6.2.2 指令集合",[19,125496,125497],{},[350,125498,125499],{},"\u002Fbin:",[19,125501,125502],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125504,125505],{},[350,125506,125507],{},"\u002Fsbin:",[19,125509,125510],{},"只有系统管理员才能使用的程序和指令",[22971,125512,125514],{"id":125513},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125516,125517],{},[350,125518,125519],{},"\u002Fdev:",[19,125521,125522],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125524,125525],{},[350,125526,125527],{},"\u002Fmedia:",[19,125529,125530],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125532,125533],{},[350,125534,125535],{},"\u002Fmnt:",[19,125537,125538],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22971,125540,125542],{"id":125541},"_7624-临时文件","7.6.2.4 临时文件",[19,125544,125545],{},[350,125546,125547],{},"\u002Frun:",[19,125549,125550],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125552,125553],{},[350,125554,125555],{},"\u002Flost+found:",[19,125557,125558],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125560,125561],{},[350,125562,125563],{},"\u002Ftmp:",[19,125565,125566],{},"这个目录是用来存放一些临时文件的",[22971,125568,125570],{"id":125569},"_7625-账户","7.6.2.5 账户",[19,125572,125573],{},[350,125574,125575],{},"\u002Froot：",[19,125577,125578],{},"系统管理员的用户主目录",[19,125580,125581,27448],{},[350,125582,125583],{},"\u002Fhome",[19,125585,125586],{},"用户的主目录，以用户的账号命名的",[19,125588,125589,27448],{},[350,125590,125591],{},"\u002Fusr",[19,125593,125594],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125596,125597],{},[350,125598,125599],{},"\u002Fusr\u002Fbin：",[19,125601,125602],{},"系统用户使用的应用程序与指令",[19,125604,125605],{},[350,125606,125607],{},"\u002Fusr\u002Fsbin：",[19,125609,125610],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125612,125613],{},[350,125614,125615],{},"\u002Fusr\u002Fsrc：",[19,125617,125618],{},"内核源代码默认的放置目录",[22971,125620,125622],{"id":125621},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125624,125625],{},[350,125626,125627],{},"\u002Fvar：",[19,125629,125630],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125632,125633],{},[350,125634,125635],{},"\u002Fproc:",[19,125637,125638,125639,125642],{},"管理 ",[350,125640,125641],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22971,125644,125646],{"id":125645},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125648,125649],{},[350,125650,125651],{},"\u002Fopt:",[19,125653,125654],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125656,125657],{},[350,125658,125659],{},"\u002Fsrv:",[19,125661,125662],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[476,125664,125666],{"id":125665},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125668,125669],{},[2585,125670],{"alt":35,"src":125671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125673,125674],{},"windows-->linux:",[19,125676,125677],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125679,125680],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125682,125683],{},"linux传输文件到windows",[19,125685,125686],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[476,125688,125690],{"id":125689},"_764-易忘知识","7.6.4 易忘知识",[19,125692,125693],{},"操作系统内核查看",[30,125695,125696],{"className":118271,"code":122265,"language":118273,"meta":35,"style":35},[26,125697,125698],{"__ignoreMap":35},[39,125699,125700,125702],{"class":41,"line":42},[39,125701,71179],{"class":49},[39,125703,122274],{"class":74},[19,125705,125706],{},[2585,125707],{"alt":35,"src":125708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125710,125711],{},[2585,125712],{"alt":35,"src":125713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[30,125715,125717],{"className":118271,"code":125716,"language":118273,"meta":35,"style":35},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[26,125718,125719,125731],{"__ignoreMap":35},[39,125720,125721,125723,125726,125729],{"class":41,"line":42},[39,125722,122482],{"class":49},[39,125724,125725],{"class":237}," mvtest",[39,125727,125728],{"class":237}," mvtest2",[39,125730,3760],{"class":53},[39,125732,125733],{"class":41,"line":92},[39,125734,125735],{"class":49},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125737,125738],{},[2585,125739],{"alt":35,"src":125740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125742,125743],{},[2585,125744],{"alt":35,"src":125745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125747,125748,125749,125752],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[26,125750,125751],{},"du -a"," 可以快速查看磁盘使用细节。",[476,125754,125756],{"id":125755},"_765-vim","7.6.5 Vim",[19,125758,125759],{},[2585,125760],{"alt":35,"src":125761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,125763,125764],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,125766,125767],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,125769,125770],{},[350,125771,125772],{},"1.命令模式：",[19,125774,125775],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,125777,125778],{},"x 删除当前光标所在处的字符",[19,125780,125781],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125783,125784],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125786,125787],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125789,125790],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125792,125793],{},"dd 剪切当前行",[19,125795,125796],{},"yy 复制当前行",[19,125798,125799],{},"p 粘贴剪贴板内容到光标下方",[19,125801,125802],{},"P 粘贴剪贴板内容到光标上方",[19,125804,125805],{},"u 撤销上一次操作",[19,125807,125808],{},"ctrl+r 重做上一次操作",[19,125810,125811,125813],{},[2055,125812],{}," 保存文件",[19,125815,125816,125818],{},[1906,125817],{}," 退出Vim编辑器",[19,125820,125821,125823],{},[1906,125822],{},"! 强制退出Vim编辑器，不保存修改",[19,125825,125826],{},[350,125827,125828],{},"2.输入模式：",[19,125830,125831],{},[2585,125832],{"alt":35,"src":125833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125835,125836],{},[350,125837,125838],{},"3.底线命令模式：",[19,125840,125841],{},[2585,125842],{"alt":35,"src":125843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125845,125846],{},"按下esc可以退出底线命令模式",[476,125848,125850],{"id":125849},"_766-apt","7.6.6 apt",[19,125852,125853],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[476,125855,125857],{"id":125856},"_767-home与root的区别","7.6.7 home与root的区别",[19,125859,125860],{},[2585,125861],{"alt":35,"src":125862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125864,125865],{},[2585,125866],{"alt":35,"src":125867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125869,125870],{},[2585,125871],{"alt":35,"src":125872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125874,125875],{},[2585,125876],{"alt":35,"src":125877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[476,125879,125881],{"id":125880},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125883,125884],{},[922,125885,125886],{"href":125886,"rel":125887},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24839],[328,125889,125890,125893],{},[331,125891,125892],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[331,125894,125895],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125897,125898],{},[2585,125899],{"alt":35,"src":125900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125902,125903],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125905,125906],{},[2585,125907],{"alt":35,"src":125908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[30,125910,125912],{"className":121791,"code":125911,"language":121793,"meta":121794,"style":35},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[26,125913,125914,125919],{"__ignoreMap":35},[39,125915,125916],{"class":41,"line":42},[39,125917,125918],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[39,125920,125921],{"class":41,"line":92},[39,125922,125923],{},".\u002Fpycharm.sh\n",[19,125925,125926],{},"3️⃣创建.desktop文件",[19,125928,125929],{},[350,125930,125931],{},"原理：",[489,125933,125934,125944],{},[331,125935,125936,125937,125943],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[350,125938,125939,125942],{},[26,125940,125941],{},".desktop"," 文件"," 来识别应用。",[331,125945,125946,125948,125949],{},[26,125947,125941],{}," 文件相当于一个“应用注册表”，告诉系统：",[489,125950,125951,125954,125957,125960,125963],{},[331,125952,125953],{},"应用名字（Name）",[331,125955,125956],{},"图标（Icon）",[331,125958,125959],{},"执行命令（Exec）",[331,125961,125962],{},"分类（Categories）",[331,125964,125965],{},"是否需要终端（Terminal）",[30,125967,125969],{"className":121791,"code":125968,"language":121793,"meta":121794,"style":35},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[26,125970,125971,125976],{"__ignoreMap":35},[39,125972,125973],{"class":41,"line":42},[39,125974,125975],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[39,125977,125978],{"class":41,"line":92},[39,125979,125980],{},"nano pycharm.desktop\n",[19,125982,125983],{},"nano是一个命令行下的编辑器，也可以使用vim",[30,125985,125987],{"className":121791,"code":125986,"language":121793,"meta":121794,"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",[26,125988,125989,125994,125999,126004,126009,126014,126019,126024,126029,126034],{"__ignoreMap":35},[39,125990,125991],{"class":41,"line":42},[39,125992,125993],{},"[Desktop Entry]\n",[39,125995,125996],{"class":41,"line":92},[39,125997,125998],{},"Version=1.0\n",[39,126000,126001],{"class":41,"line":112},[39,126002,126003],{},"Type=Application\n",[39,126005,126006],{"class":41,"line":118},[39,126007,126008],{},"Name=PyCharm\n",[39,126010,126011],{"class":41,"line":125},[39,126012,126013],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[39,126015,126016],{"class":41,"line":132},[39,126017,126018],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[39,126020,126021],{"class":41,"line":138},[39,126022,126023],{},"Comment=JetBrains PyCharm IDE\n",[39,126025,126026],{"class":41,"line":169},[39,126027,126028],{},"Categories=Development;IDE;\n",[39,126030,126031],{"class":41,"line":190},[39,126032,126033],{},"Terminal=false\n",[39,126035,126036],{"class":41,"line":202},[39,126037,126038],{},"StartupWMClass=jetbrains-pycharm\n",[489,126040,126041,126047,126053,126059],{},[331,126042,126043,126046],{},[26,126044,126045],{},"Exec"," → 点击图标时执行的命令",[331,126048,126049,126052],{},[26,126050,126051],{},"Icon"," → 显示在菜单和桌面上的图标",[331,126054,126055,126058],{},[26,126056,126057],{},"Terminal=false"," → 不打开终端",[331,126060,126061,126064],{},[26,126062,126063],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126066,126067,126068],"blockquote",{},[19,126069,126070,126071,126073,126074],{},"可以理解成 ",[26,126072,125941],{}," 文件是 Linux 的 ",[350,126075,126076],{},"快捷方式配置文件",[19,126078,126079],{},"4️⃣设置可执行权限",[30,126081,126083],{"className":121791,"code":126082,"language":121793,"meta":121794,"style":35},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[26,126084,126085],{"__ignoreMap":35},[39,126086,126087],{"class":41,"line":42},[39,126088,126082],{},[19,126090,126091],{},"5️⃣桌面图标启动的话如下：",[30,126093,126095],{"className":121791,"code":126094,"language":121793,"meta":121794,"style":35},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,126096,126097,126102],{"__ignoreMap":35},[39,126098,126099],{"class":41,"line":42},[39,126100,126101],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[39,126103,126104],{"class":41,"line":92},[39,126105,126106],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[328,126108,126109],{"start":112},[331,126110,126111],{},"下载Appimage文件实现软件的安装",[19,126113,126114],{},"1️⃣先下载appimage",[19,126116,126117],{},[922,126118,126119],{"href":126119,"rel":126120},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24839],[19,126122,126123],{},[2585,126124],{"alt":35,"src":126125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126127,126128],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126130,126131],{},[2585,126132],{"alt":35,"src":126133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126135,126136],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126138,126139],{},[2585,126140],{"alt":35,"src":126141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126143,126144],{},[2585,126145],{"alt":35,"src":126146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126148,126149,126150,126153],{},"3️⃣给他们放在",[26,126151,126152],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126155,126156],{},"4️⃣给软件执行权限",[30,126158,126160],{"className":121791,"code":126159,"language":121793,"meta":121794,"style":35},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[26,126161,126162,126167],{"__ignoreMap":35},[39,126163,126164],{"class":41,"line":42},[39,126165,126166],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[39,126168,126169],{"class":41,"line":92},[39,126170,126171],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126173,126174],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[30,126176,126178],{"className":118271,"code":126177,"language":118273,"meta":35,"style":35},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[26,126179,126180,126187,126194,126200],{"__ignoreMap":35},[39,126181,126182,126184],{"class":41,"line":42},[39,126183,102251],{"class":74},[39,126185,126186],{"class":237}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[39,126188,126189,126191],{"class":41,"line":92},[39,126190,102258],{"class":49},[39,126192,126193],{"class":237}," .\u002Fqqmusic.desktop\n",[39,126195,126196,126198],{"class":41,"line":112},[39,126197,125242],{"class":49},[39,126199,126193],{"class":237},[39,126201,126202,126204,126206,126208],{"class":41,"line":118},[39,126203,25551],{"class":49},[39,126205,25554],{"class":237},[39,126207,124108],{"class":237},[39,126209,126193],{"class":237},[19,126211,126212,126214],{},[26,126213,102258],{},"：一个 Linux 命令，主要功能是：",[489,126216,126217,126220],{},[331,126218,126219],{},"如果文件不存在，就创建一个新的空文件",[331,126221,126222],{},"如果文件已存在，就更新该文件的最后修改时间",[30,126224,126226],{"className":121791,"code":126225,"language":121793,"meta":121794,"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",[26,126227,126228,126232,126237,126242,126247,126251,126256],{"__ignoreMap":35},[39,126229,126230],{"class":41,"line":42},[39,126231,125993],{},[39,126233,126234],{"class":41,"line":92},[39,126235,126236],{},"Name=QQ音乐\n",[39,126238,126239],{"class":41,"line":112},[39,126240,126241],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[39,126243,126244],{"class":41,"line":118},[39,126245,126246],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[39,126248,126249],{"class":41,"line":125},[39,126250,126003],{},[39,126252,126253],{"class":41,"line":132},[39,126254,126255],{},"Categories=Audio;Music;Player;\n",[39,126257,126258],{"class":41,"line":138},[39,126259,126260],{},"Comment=QQ Music Client for Linux\n",[19,126262,126263],{},"将文件复制进去",[19,126265,126266],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126268,126269],{},[2585,126270],{"alt":35,"src":126271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126273,126274],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126276,126277],{},[2585,126278],{"alt":35,"src":126279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126281,126282,126283,126286,126287,126290],{},"如果你用的不是KDE，那么也可以直接修改",[26,126284,126285],{},"qqmuic.desktop","：在exec的末尾加上",[26,126288,126289],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[30,126292,126294],{"className":121791,"code":126293,"language":121793,"meta":121794,"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",[26,126295,126296,126300,126304,126309,126313,126317,126321],{"__ignoreMap":35},[39,126297,126298],{"class":41,"line":42},[39,126299,125993],{},[39,126301,126302],{"class":41,"line":92},[39,126303,126236],{},[39,126305,126306],{"class":41,"line":112},[39,126307,126308],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[39,126310,126311],{"class":41,"line":118},[39,126312,126246],{},[39,126314,126315],{"class":41,"line":125},[39,126316,126003],{},[39,126318,126319],{"class":41,"line":132},[39,126320,126255],{},[39,126322,126323],{"class":41,"line":138},[39,126324,126260],{},[19,126326,126327],{},[2585,126328],{"alt":35,"src":126329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126331,126332],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[30,126334,126336],{"className":121791,"code":126335,"language":121793,"meta":121794,"style":35},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[26,126337,126338],{"__ignoreMap":35},[39,126339,126340],{"class":41,"line":42},[39,126341,126335],{},[328,126343,126344],{"start":118},[331,126345,126346],{},"去Flathub上安装软件",[19,126348,126349],{},[922,126350,126351],{"href":126351,"rel":126352},"https:\u002F\u002Fflathub.org\u002F",[24839],[19,126354,126355],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126357,126358],{},[2585,126359],{"alt":35,"src":126360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[30,126362,126364],{"className":121791,"code":126363,"language":121793,"meta":121794,"style":35},"flatpak install flathub com.obsproject.Studio\n",[26,126365,126366],{"__ignoreMap":35},[39,126367,126368],{"class":41,"line":42},[39,126369,126363],{},[19,126371,126372],{},[2585,126373],{"alt":35,"src":126374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126376,126377],{},"2️⃣运行软件",[19,126379,126380],{},"a.官方方式：",[19,126382,126383],{},[2585,126384],{"alt":35,"src":126385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[30,126387,126388],{"className":121791,"code":126363,"language":121793,"meta":121794,"style":35},[26,126389,126390],{"__ignoreMap":35},[39,126391,126392],{"class":41,"line":42},[39,126393,126363],{},[19,126395,126396],{},"b.当普通软件运行：",[19,126398,126399],{},[2585,126400],{"alt":35,"src":126401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,126403,126404],{},[2585,126405],{"alt":35,"src":126406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1192,126408,126409],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":92,"depth":92,"links":126411},[126412,126413,126418,126419,126425,126426],{"id":123144,"depth":92,"text":123145},{"id":123486,"depth":92,"text":123487,"children":126414},[126415,126416,126417],{"id":123490,"depth":112,"text":123491},{"id":123557,"depth":112,"text":123558},{"id":123818,"depth":112,"text":123819},{"id":123971,"depth":92,"text":123972},{"id":124209,"depth":92,"text":124210,"children":126420},[126421,126422,126423,126424],{"id":124261,"depth":112,"text":124262},{"id":124547,"depth":112,"text":124548},{"id":124818,"depth":112,"text":124819},{"id":125077,"depth":112,"text":125078},{"id":125136,"depth":92,"text":125137},{"id":125437,"depth":92,"text":125438,"children":126427},[126428,126429,126430,126431,126432,126433,126434,126435],{"id":125441,"depth":112,"text":125442},{"id":125453,"depth":112,"text":125454},{"id":125665,"depth":112,"text":125666},{"id":125689,"depth":112,"text":125690},{"id":125755,"depth":112,"text":125756},{"id":125849,"depth":112,"text":125850},{"id":125856,"depth":112,"text":125857},{"id":125880,"depth":112,"text":125881},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123136,"description":24350},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126442,"title":126443,"body":126444,"description":24350,"extension":1203,"meta":126448,"navigation":121,"path":126449,"seo":126450,"stem":126451,"__hash__":126452},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126445,"toc":126446},[],{"title":35,"searchDepth":92,"depth":92,"links":126447},[],{"category":31238},"\u002Fwiki\u002F2025-01-27-linux",{"title":126443,"description":24350},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126454,"title":126455,"body":126456,"description":126460,"extension":1203,"meta":126851,"navigation":121,"path":126852,"seo":126853,"stem":126854,"__hash__":126855},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126457,"toc":126849},[126458,126461,126465,126482,126485,126538,126542,126544,126584,126593,126597,126600,126841,126846],[19,126459,126460],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126462,126464],{"id":126463},"_1ubuntu环境配置","1.Ubuntu环境配置",[328,126466,126467,126470,126473,126476,126479],{},[331,126468,126469],{},"ubuntu环境换源",[331,126471,126472],{},"安装cuda",[331,126474,126475],{},"安装miniconda",[331,126477,126478],{},"安装pytorch",[331,126480,126481],{},"安装genesis",[19,126483,126484],{},"参考链接：",[30,126486,126488],{"className":24796,"code":126487,"language":24798,"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",[26,126489,126490],{"__ignoreMap":35},[39,126491,126492,126495,126498,126501,126503,126506,126509,126511,126514,126517,126519,126522,126525,126527,126530,126533,126535],{"class":41,"line":42},[39,126493,126494],{"class":49},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[39,126496,126497],{"class":237},"=blogdetail",[39,126499,126500],{"class":53},"&sharetype",[39,126502,1117],{"class":45},[39,126504,126505],{"class":237},"blogdetail",[39,126507,126508],{"class":53},"&sharerId",[39,126510,1117],{"class":45},[39,126512,126513],{"class":237},"144728092",[39,126515,126516],{"class":53},"&sharerefer",[39,126518,1117],{"class":45},[39,126520,126521],{"class":237},"PC",[39,126523,126524],{"class":53},"&sharesource",[39,126526,1117],{"class":45},[39,126528,126529],{"class":237},"qq_69379513",[39,126531,126532],{"class":53},"&sharefrom",[39,126534,1117],{"class":45},[39,126536,126537],{"class":237},"from_link\n",[10,126539,126541],{"id":126540},"_2genesis-报错issue","2.Genesis 报错issue",[19,126543,126484],{},[30,126545,126546],{"className":24796,"code":126487,"language":24798,"meta":35,"style":35},[26,126547,126548],{"__ignoreMap":35},[39,126549,126550,126552,126554,126556,126558,126560,126562,126564,126566,126568,126570,126572,126574,126576,126578,126580,126582],{"class":41,"line":42},[39,126551,126494],{"class":49},[39,126553,126497],{"class":237},[39,126555,126500],{"class":53},[39,126557,1117],{"class":45},[39,126559,126505],{"class":237},[39,126561,126508],{"class":53},[39,126563,1117],{"class":45},[39,126565,126513],{"class":237},[39,126567,126516],{"class":53},[39,126569,1117],{"class":45},[39,126571,126521],{"class":237},[39,126573,126524],{"class":53},[39,126575,1117],{"class":45},[39,126577,126529],{"class":237},[39,126579,126532],{"class":53},[39,126581,1117],{"class":45},[39,126583,126537],{"class":237},[30,126585,126587],{"className":24796,"code":126586,"language":24798,"meta":35,"style":35},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[26,126588,126589],{"__ignoreMap":35},[39,126590,126591],{"class":41,"line":42},[39,126592,126586],{"class":49},[10,126594,126596],{"id":126595},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126598,126599],{},"hello_robot.py",[30,126601,126603],{"className":31353,"code":126602,"language":31355,"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",[26,126604,126605,126611,126626,126630,126642,126654,126658,126671,126675,126694,126704,126714,126728,126732,126736,126741,126745,126755,126762,126776,126783,126793,126798,126802,126820,126825,126829,126836],{"__ignoreMap":35},[39,126606,126607,126609],{"class":41,"line":42},[39,126608,31367],{"class":45},[39,126610,46280],{"class":53},[39,126612,126613,126616,126619,126621,126623],{"class":41,"line":92},[39,126614,126615],{"class":53},"os.environ[",[39,126617,126618],{"class":237},"'PYOPENGL_PLATFORM'",[39,126620,5524],{"class":53},[39,126622,1117],{"class":45},[39,126624,126625],{"class":237}," 'glx'\n",[39,126627,126628],{"class":41,"line":112},[39,126629,122],{"emptyLinePlaceholder":121},[39,126631,126632,126634,126637,126639],{"class":41,"line":118},[39,126633,31367],{"class":45},[39,126635,126636],{"class":53}," genesis ",[39,126638,32358],{"class":45},[39,126640,126641],{"class":53}," gs\n",[39,126643,126644,126646,126649,126651],{"class":41,"line":125},[39,126645,31712],{"class":45},[39,126647,126648],{"class":53}," pynput ",[39,126650,31367],{"class":45},[39,126652,126653],{"class":53}," keyboard\n",[39,126655,126656],{"class":41,"line":132},[39,126657,122],{"emptyLinePlaceholder":121},[39,126659,126660,126663,126666,126668],{"class":41,"line":138},[39,126661,126662],{"class":53},"gs.init(",[39,126664,126665],{"class":59},"backend",[39,126667,1117],{"class":45},[39,126669,126670],{"class":53},"gs.gpu)\n",[39,126672,126673],{"class":41,"line":169},[39,126674,122],{"emptyLinePlaceholder":121},[39,126676,126677,126680,126682,126685,126688,126690,126692],{"class":41,"line":190},[39,126678,126679],{"class":53},"scene ",[39,126681,1117],{"class":45},[39,126683,126684],{"class":53}," gs.Scene(",[39,126686,126687],{"class":59},"show_viewer",[39,126689,1117],{"class":45},[39,126691,32451],{"class":74},[39,126693,574],{"class":53},[39,126695,126696,126699,126701],{"class":41,"line":202},[39,126697,126698],{"class":53},"plane ",[39,126700,1117],{"class":45},[39,126702,126703],{"class":53}," scene.add_entity(gs.morphs.Plane())\n",[39,126705,126706,126709,126711],{"class":41,"line":207},[39,126707,126708],{"class":53},"franka ",[39,126710,1117],{"class":45},[39,126712,126713],{"class":53}," scene.add_entity(\n",[39,126715,126716,126719,126721,126723,126726],{"class":41,"line":212},[39,126717,126718],{"class":53},"    gs.morphs.MJCF(",[39,126720,46329],{"class":59},[39,126722,1117],{"class":45},[39,126724,126725],{"class":237},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[39,126727,39022],{"class":53},[39,126729,126730],{"class":41,"line":223},[39,126731,574],{"class":53},[39,126733,126734],{"class":41,"line":228},[39,126735,122],{"emptyLinePlaceholder":121},[39,126737,126738],{"class":41,"line":263},[39,126739,126740],{"class":53},"scene.build()\n",[39,126742,126743],{"class":41,"line":287},[39,126744,122],{"emptyLinePlaceholder":121},[39,126746,126747,126749,126752],{"class":41,"line":292},[39,126748,32922],{"class":45},[39,126750,126751],{"class":49}," on_press",[39,126753,126754],{"class":53},"(key):\n",[39,126756,126757,126760],{"class":41,"line":305},[39,126758,126759],{"class":45},"    try",[39,126761,4822],{"class":53},[39,126763,126764,126766,126769,126771,126774],{"class":41,"line":310},[39,126765,3590],{"class":45},[39,126767,126768],{"class":53}," key.char ",[39,126770,4032],{"class":45},[39,126772,126773],{"class":237}," 'q'",[39,126775,4822],{"class":53},[39,126777,126778,126780],{"class":41,"line":321},[39,126779,16705],{"class":45},[39,126781,126782],{"class":74}," False\n",[39,126784,126785,126788,126791],{"class":41,"line":713},[39,126786,126787],{"class":45},"    except",[39,126789,126790],{"class":74}," AttributeError",[39,126792,4822],{"class":53},[39,126794,126795],{"class":41,"line":718},[39,126796,126797],{"class":45},"        pass\n",[39,126799,126800],{"class":41,"line":723},[39,126801,122],{"emptyLinePlaceholder":121},[39,126803,126804,126807,126809,126812,126815,126817],{"class":41,"line":729},[39,126805,126806],{"class":53},"listener ",[39,126808,1117],{"class":45},[39,126810,126811],{"class":53}," keyboard.Listener(",[39,126813,126814],{"class":59},"on_press",[39,126816,1117],{"class":45},[39,126818,126819],{"class":53},"on_press)\n",[39,126821,126822],{"class":41,"line":735},[39,126823,126824],{"class":53},"listener.start()\n",[39,126826,126827],{"class":41,"line":741},[39,126828,122],{"emptyLinePlaceholder":121},[39,126830,126831,126833],{"class":41,"line":747},[39,126832,109638],{"class":45},[39,126834,126835],{"class":53}," listener.running:\n",[39,126837,126838],{"class":41,"line":753},[39,126839,126840],{"class":53},"    scene.step()\n",[19,126842,126843],{},[2585,126844],{"alt":35,"src":126845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1192,126847,126848],{},"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":92,"depth":92,"links":126850},[],{"category":24352},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126455,"description":126460},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126857,"title":126858,"body":126859,"description":24350,"extension":1203,"meta":126874,"navigation":121,"path":126875,"seo":126876,"stem":126877,"__hash__":126878},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126860,"toc":126871},[126861,126864,126868],[10,126862,126858],{"id":126863},"_1-基础知识",[14,126865,126867],{"id":126866},"_11-js的组成","1.1 js的组成",[19,126869,126870],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":35,"searchDepth":92,"depth":92,"links":126872},[126873],{"id":126866,"depth":92,"text":126867},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126858,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126880,"title":126881,"body":126882,"description":24350,"extension":1203,"meta":127021,"navigation":121,"path":127022,"seo":127023,"stem":127024,"__hash__":127025},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126883,"toc":127009},[126884,126887,126891,126894,126898,126908,126912,126915,126918,126921,126925,126932,126938,126942,126948,126959,126963,126966,126970,126973,126977,126980,126984,126987,126991,126994,126997,127000,127003,127006],[10,126885,126881],{"id":126886},"_2-vscode必备内容",[14,126888,126890],{"id":126889},"_21-标签分类","2.1 标签分类",[19,126892,126893],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126895,126897],{"id":126896},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126899,126900,126901,126903,126904,126907],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[26,126902,1492],{}," 然后按 ",[26,126905,126906],{},"Tab","，快速自动生成基本结构。",[14,126909,126911],{"id":126910},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126913,126914],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126916,126917],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126919,126920],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126922,126924],{"id":126923},"_24-视图缩放","2.4 视图缩放",[19,126926,126927,126928,126931],{},"缩放视图 ",[26,126929,126930],{},"ctrl+"," 可实现代码增大。",[19,126933,126934,126937],{},[26,126935,126936],{},"ctrl-"," 可实现代码减小。",[14,126939,126941],{"id":126940},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126943,126944,126945,29360],{},"VSCode 新建文件快捷键为 ",[26,126946,126947],{},"ctrl+N",[19,126949,126950,126951,126954,126955,126958],{},"保存快捷键为 ",[26,126952,126953],{},"ctrl+S","，将文本保存为 ",[26,126956,126957],{},".html"," 文件。",[14,126960,126962],{"id":126961},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126964,126965],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126967,126969],{"id":126968},"_27-vscode-icons","2.7 vscode-icons",[19,126971,126972],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126974,126976],{"id":126975},"_28-easy-less","2.8 Easy LESS",[19,126978,126979],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126981,126983],{"id":126982},"_29-会了吧插件","2.9 会了吧插件",[19,126985,126986],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126988,126990],{"id":126989},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126992,126993],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126995,126996],{},"②选定多个相同的单词:ctrl+D",[19,126998,126999],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127001,127002],{},"④全局替换某些单词:ctrl+h",[19,127004,127005],{},"⑤快速定位到某一行:ctrl+g",[19,127007,127008],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":35,"searchDepth":92,"depth":92,"links":127010},[127011,127012,127013,127014,127015,127016,127017,127018,127019,127020],{"id":126889,"depth":92,"text":126890},{"id":126896,"depth":92,"text":126897},{"id":126910,"depth":92,"text":126911},{"id":126923,"depth":92,"text":126924},{"id":126940,"depth":92,"text":126941},{"id":126961,"depth":92,"text":126962},{"id":126968,"depth":92,"text":126969},{"id":126975,"depth":92,"text":126976},{"id":126982,"depth":92,"text":126983},{"id":126989,"depth":92,"text":126990},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126881,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127027,"title":127028,"body":127029,"description":24350,"extension":1203,"meta":127188,"navigation":121,"path":127189,"seo":127190,"stem":127191,"__hash__":127192},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127030,"toc":127180},[127031,127034,127038,127048,127054,127060,127064,127073,127077,127082,127085,127088,127092,127095,127105,127114,127123,127132,127142,127149,127154,127159,127172],[10,127032,127028],{"id":127033},"_3-html文本与容器标签",[14,127035,127037],{"id":127036},"_31-标题标签","3.1 标题标签",[19,127039,127040,127043,127044,127047],{},[26,127041,127042],{},"\u003Ch1>","我是一级标签",[26,127045,127046],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127049,127050,127043,127052],{},[26,127051,127042],{},[26,127053,127046],{},[19,127055,124310,127056,127059],{},[26,127057,127058],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127061,127063],{"id":127062},"_32-段落标签","3.2 段落标签",[19,127065,127066,127069,127070],{},[26,127067,127068],{},"\u003Cp>","....",[26,127071,127072],{},"\u003C\u002Fp>",[14,127074,127076],{"id":127075},"_33-换行标签","3.3 换行标签",[19,127078,127079],{},[26,127080,127081],{},"\u003Cbr \u002F>",[19,127083,127084],{},"具有强制换行的作用",[19,127086,127087],{},"单标签",[14,127089,127091],{"id":127090},"_34-文本格式化标签","3.4 文本格式化标签",[19,127093,127094],{},"提供粗体、斜体和下划线等效果",[19,127096,127097,127098,83514,127101,127104],{},"加粗：",[26,127099,127100],{},"\u003Cstrong>...\u003C\u002Fstrong>",[26,127102,127103],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127106,127107,127108,83514,127111,127104],{},"斜体：",[26,127109,127110],{},"\u003Cem>...\u003C\u002Fem>",[26,127112,127113],{},"\u003Ci>...\u003C\u002Fi>",[19,127115,127116,127117,83514,127120,127104],{},"删除线：",[26,127118,127119],{},"\u003Cdel>...\u003C\u002Fdel>",[26,127121,127122],{},"\u003Cs>...\u003C\u002Fs>",[19,127124,127125,127126,83514,127129,127104],{},"下划线：",[26,127127,127128],{},"\u003Cins>...\u003C\u002Fins>",[26,127130,127131],{},"\u003Cu>...\u003C\u002Fu>",[14,127133,127135,127136,19383,127139,103668],{"id":127134},"_35-div和span标签","3.5 ",[26,127137,127138],{},"\u003Cdiv>",[26,127140,127141],{},"\u003Cspan>",[19,127143,127144,101993,127146,127148],{},[26,127145,127138],{},[26,127147,127141],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127150,127151],{},[26,127152,127153],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127155,127156],{},[26,127157,127158],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127160,127161,127162,127164,127165,127167,127168,127171],{},"两者特点：①",[26,127163,127138],{}," 标签用来布局，但一行通常只放一个 ",[26,127166,127138],{},"。可以理解为一个大盒子，独占一行，在 ",[26,127169,127170],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127173,78224,127174,127176,127177,127179],{},[26,127175,127141],{}," 标签也可用于布局，一行可以放多个 ",[26,127178,127141],{},"，可理解为小盒子。",{"title":35,"searchDepth":92,"depth":92,"links":127181},[127182,127183,127184,127185,127186],{"id":127036,"depth":92,"text":127037},{"id":127062,"depth":92,"text":127063},{"id":127075,"depth":92,"text":127076},{"id":127090,"depth":92,"text":127091},{"id":127134,"depth":92,"text":127187},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127028,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127194,"title":127195,"body":127196,"description":24350,"extension":1203,"meta":127393,"navigation":121,"path":127394,"seo":127395,"stem":127396,"__hash__":127397},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127197,"toc":127385},[127198,127201,127205,127208,127214,127221,127227,127233,127236,127239,127242,127245,127248,127251,127254,127258,127261,127264,127267,127273,127279,127285,127292,127296,127302,127308,127311,127314,127320,127326,127332,127335,127338,127342,127345,127355,127361,127365,127374,127378,127381],[10,127199,127195],{"id":127200},"_4-html图像与链接",[14,127202,127204],{"id":127203},"_41-图像标签","4.1 图像标签",[19,127206,127207],{},"（1）标签",[19,127209,127210,127213],{},[26,127211,127212],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127215,127216,127217,127220],{},"src是",[26,127218,127219],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127222,127223,127224],{},"alt:文本，替换文本。图像不能显示的文字 ",[26,127225,127226],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127228,127229,127230],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[26,127231,127232],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127234,127235],{},"width:像素，设置图像的宽度",[19,127237,127238],{},"height:像素，设置图像的高度",[19,127240,127241],{},"border：像素，设置图像的边框粗细",[19,127243,127244],{},"（2）图像标签属性的注意点：",[19,127246,127247],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127249,127250],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127252,127253],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127255,127257],{"id":127256},"_42-路径注意要点","4.2 路径注意要点：",[19,127259,127260],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127262,127263],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127265,127266],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127268,127269,127270],{},"①同一级路径：图像文件位于HTML文件同一级，如",[26,127271,127272],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127274,127275,127276],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[26,127277,127278],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127280,127281,127282],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[26,127283,127284],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127286,127287,127288,1516],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[922,127289,127290],{"href":127290,"rel":127291},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24839],[14,127293,127295],{"id":127294},"_43-超链接标签","4.3 超链接标签",[19,127297,127298,127301],{},[26,127299,127300],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127303,127304,127305],{},"①语法格式：",[26,127306,127307],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127309,127310],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127312,127313],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127315,127316,127317],{},"③链接分类：外部链接：",[26,127318,127319],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127321,127322,127323],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[26,127324,127325],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127327,127328,127329],{},"空链接：如果当时没有确定链接目标时，",[26,127330,127331],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127333,127334],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127336,127337],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127339,127341],{"id":127340},"_44-锚点链接","4.4 锚点链接",[19,127343,127344],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127346,127347,127348,127351,127352],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[26,127349,127350],{},"\u003Ca href=\"#two\">","第二级",[26,127353,127354],{},"\u003C\u002Fa>",[19,127356,127357,127358],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[26,127359,127360],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127362,127364],{"id":127363},"_45-注释标签","4.5 注释标签",[19,127366,127367,127370,127371],{},[26,127368,127369],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[26,127372,127373],{},"ctrl+\u002F",[14,127375,127377],{"id":127376},"_46-特殊字符","4.6 特殊字符",[19,127379,127380],{},"可以实现添加多个空格",[2585,127382],{"style":127383,"src":127384},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":35,"searchDepth":92,"depth":92,"links":127386},[127387,127388,127389,127390,127391,127392],{"id":127203,"depth":92,"text":127204},{"id":127256,"depth":92,"text":127257},{"id":127294,"depth":92,"text":127295},{"id":127340,"depth":92,"text":127341},{"id":127363,"depth":92,"text":127364},{"id":127376,"depth":92,"text":127377},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127195,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127399,"title":127400,"body":127401,"description":24350,"extension":1203,"meta":127694,"navigation":121,"path":127695,"seo":127696,"stem":127697,"__hash__":127698},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127402,"toc":127685},[127403,127406,127410,127413,127416,127419,127422,127425,127428,127431,127434,127437,127457,127463,127467,127470,127473,127476,127479,127482,127485,127489,127492,127495,127498,127501,127514,127519,127522,127525,127540,127543,127546,127549,127552,127555,127559,127562,127569,127572,127575,127578,127581,127584,127590,127593,127596,127602,127605,127608,127611,127617,127620,127623,127637,127644,127647,127650,127657,127666,127669,127672,127675,127679,127682],[10,127404,127400],{"id":127405},"_5-html表格列表与表单",[14,127407,127409],{"id":127408},"_51-表格标签","5.1 表格标签",[19,127411,127412],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,127414,127415],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,127417,127418],{},"②表格基本语法：",[2585,127420],{"style":127383,"src":127421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,127423,127424],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[2585,127426],{"style":127383,"src":127427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,127429,127430],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[2585,127432],{"style":127383,"src":127433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,127435,127436],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127438,127439,127442,127443,127445,127446,127449,127450,127452,127453,127456],{},[26,127440,127441],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[26,127444,127441],{},"内部必须拥有",[26,127447,127448],{},"\u003Ctr>","标签，一般位于第一行，",[26,127451,127441],{},"比",[26,127454,127455],{},"\u003Cth>","范围广",[19,127458,127459,127462],{},[26,127460,127461],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127464,127466],{"id":127465},"_52-合并单元格","5.2 合并单元格",[19,127468,127469],{},"（1）合并单元格方式：",[19,127471,127472],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127474,127475],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127477,127478],{},"（2）目标单元格：",[19,127480,127481],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127483,127484],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127486,127488],{"id":127487},"_53-列表标签","5.3 列表标签",[19,127490,127491],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127493,127494],{},"①无序列表：",[2585,127496],{"style":127383,"src":127497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127499,127500],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127502,127503,127506,127507,127510,127511,127513],{},[26,127504,127505],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[26,127508,127509],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[26,127512,127505],{},"中输入其他标签或文字是不对的",[19,127515,127516,127518],{},[26,127517,127509],{},"之间相当于一个容器，可以容纳所有元素",[19,127520,127521],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127523,127524],{},"在css中去除前边的小圆点采用如下代码:",[30,127526,127530],{"className":127527,"code":127528,"language":127529,"meta":35,"style":35},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[26,127531,127532],{"__ignoreMap":35},[39,127533,127534,127537],{"class":41,"line":42},[39,127535,127536],{"class":52275},"list-style",[39,127538,127539],{"class":53},": none;\n",[19,127541,127542],{},"②有序列表：",[2585,127544],{"style":127383,"src":127545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127547,127548],{},"③自定义列表：",[2585,127550],{"style":127383,"src":127551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[2585,127553],{"style":127383,"src":127554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127556,127558],{"id":127557},"_54-表单标签","5.4 表单标签",[19,127560,127561],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127563,127564,127565,127568],{},"（1）表单域：包含单元素的区域，",[26,127566,127567],{},"\u003Cform>","标签可以实现信息的收集和传递。",[2585,127570],{"style":127383,"src":127571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127573,127574],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127576,127577],{},"表单元素提交必须有name属性",[19,127579,127580],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127582,127583],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127585,78201,127586,127589],{},[26,127587,127588],{},"\u003Cinput>","输入表单元素",[2585,127591],{"style":127383,"src":127592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[2585,127594],{"style":127383,"src":127595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127597,127598,127599],{},"单选按钮：",[26,127600,127601],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[2585,127603],{"style":127383,"src":127604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127606,127607],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[2585,127609],{"style":127383,"src":127610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127612,127613,127616],{},[350,127614,127615],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127618,127619],{},"②select下拉表单元素：可以节约页面控件",[2585,127621],{"style":127383,"src":127622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127624,127625,352,127627,127630,127631,127633,127634,127636],{},[350,127626,1301],{},[26,127628,127629],{},"\u003Cselect>","中至少包含一对",[26,127632,103689],{},"；在",[26,127635,103689],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127638,127639,127640,127643],{},"③",[26,127641,127642],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[2585,127645],{"style":127383,"src":127646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127648,127649],{},"3行20列",[14,127651,127653,127654,103668],{"id":127652},"_55-lable标签","5.5 ",[26,127655,127656],{},"\u003Clable>",[19,127658,127659,127660,127662,127663,127665],{},"它不是表单标签，但常常与表单标签搭配使用，",[26,127661,127656],{},"标签用于绑定一个表单标签，当点击",[26,127664,127656],{},"标签内的文本",[19,127667,127668],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[2585,127670],{"style":127383,"src":127671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[2585,127673],{"style":127383,"src":127674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127676,127678],{"id":127677},"_56-实例","5.6 实例",[2585,127680],{"style":127383,"src":127681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1192,127683,127684],{},"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":92,"depth":92,"links":127686},[127687,127688,127689,127690,127691,127693],{"id":127408,"depth":92,"text":127409},{"id":127465,"depth":92,"text":127466},{"id":127487,"depth":92,"text":127488},{"id":127557,"depth":92,"text":127558},{"id":127652,"depth":92,"text":127692},"5.5 \u003Clable>标签",{"id":127677,"depth":92,"text":127678},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127400,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127700,"title":127701,"body":127702,"description":24350,"extension":1203,"meta":128251,"navigation":121,"path":128252,"seo":128253,"stem":128254,"__hash__":128255},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127703,"toc":128226},[127704,127707,127711,127714,127717,127721,127724,127727,127730,127733,127736,127739,127742,127746,127749,127753,127756,127759,127762,127766,127769,127772,127775,127781,127784,127787,127790,127793,127796,127799,127802,127835,127839,127842,127845,127848,127852,127855,127858,127861,127864,127867,127871,127874,127877,127880,127884,127887,127891,127894,127898,127901,127906,127910,127913,127917,127920,127923,127926,127929,127956,127959,127963,127966,127969,127974,127977,127980,127984,127987,127992,127995,127998,128001,128005,128008,128011,128014,128018,128021,128024,128027,128031,128035,128038,128078,128081,128085,128092,128095,128099,128102,128148,128152,128155,128158,128161,128189,128193,128196,128223],[10,127705,127701],{"id":127706},"_6-css语法与文本样式",[14,127708,127710],{"id":127709},"_61-css语法规范","6.1 css语法规范",[19,127712,127713],{},"由两部分组成，选择器及一条或多条声明",[2585,127715],{"style":127383,"src":127716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,127718,127719],{},[350,127720,1301],{},[19,127722,127723],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,127725,127726],{},"②属性与属性值以“键值对”的形式出现",[19,127728,127729],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,127731,127732],{},"④属性和属性值之间用英文“;”分开",[2585,127734],{"style":127383,"src":127735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[2585,127737],{"style":127383,"src":127738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[2585,127740],{"style":127383,"src":127741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127743,127745],{"id":127744},"_62-css选择器","6.2 css选择器",[19,127747,127748],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[476,127750,127752],{"id":127751},"_621-标签选择器","6.2.1 标签选择器",[19,127754,127755],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,127757,127758],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[2585,127760],{"style":127383,"src":127761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[476,127763,127765],{"id":127764},"_622-类选择器","6.2.2 类选择器",[19,127767,127768],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,127770,127771],{},"②样例",[2585,127773],{"style":127383,"src":127774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,127776,127777,127778,127780],{},"③ ",[350,127779,127615],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,127782,127783],{},"可以理解为给这个标签起了个名字，来表示；",[19,127785,127786],{},"长名称或词组可以使用横线来为选择器命名；",[19,127788,127789],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,127791,127792],{},"命名要有意义；",[2585,127794],{"style":127383,"src":127795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,127797,127798],{},"类选择器也可以指定特殊的元素p.center{}",[19,127800,127801],{},"p.center和.center都对",[30,127803,127805],{"className":127527,"code":127804,"language":127529,"meta":35,"style":35},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[26,127806,127807,127812,127821,127831],{"__ignoreMap":35},[39,127808,127809],{"class":41,"line":42},[39,127810,127811],{"class":128},"\u002F* 类选择器指定特殊元素 *\u002F\n",[39,127813,127814,127816,127819],{"class":41,"line":92},[39,127815,19],{"class":52275},[39,127817,127818],{"class":49},".center",[39,127820,16545],{"class":53},[39,127822,127823,127825,127827,127829],{"class":41,"line":112},[39,127824,71501],{"class":74},[39,127826,52412],{"class":53},[39,127828,52567],{"class":74},[39,127830,318],{"class":53},[39,127832,127833],{"class":41,"line":118},[39,127834,115],{"class":53},[476,127836,127838],{"id":127837},"_623-多类名使用","6.2.3 多类名使用",[19,127840,127841],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[2585,127843],{"style":127383,"src":127844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127846,127847],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[476,127849,127851],{"id":127850},"_624-id选择器","6.2.4 id选择器",[19,127853,127854],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,127856,127857],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[2585,127859],{"style":127383,"src":127860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,127862,127863],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,127865,127866],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[476,127868,127870],{"id":127869},"_625-通配符选择器","6.2.5 通配符选择器",[19,127872,127873],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127875,127876],{},"* {",[19,127878,127879],{},"color=\"red\"}",[476,127881,127883],{"id":127882},"_626-总结","6.2.6 总结",[2585,127885],{"style":127383,"src":127886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127888,127890],{"id":127889},"_63-css字体属性","6.3 css字体属性",[19,127892,127893],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[476,127895,127897],{"id":127896},"_631-字体系列","6.3.1 字体系列",[19,127899,127900],{},"font-family: '宋体';",[19,127902,127903,127905],{},[350,127904,1301],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[476,127907,127909],{"id":127908},"_632-字体大小","6.3.2 字体大小",[19,127911,127912],{},"font-size: 20px",[19,127914,127915,27448],{},[350,127916,127615],{},[19,127918,127919],{},"①px（像素）大小是网页的最常用单位",[19,127921,127922],{},"②谷歌浏览器默认为16px",[19,127924,127925],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127927,127928],{},"④可以给body指定整个页面的大小：会自动引用",[30,127930,127932],{"className":127527,"code":127931,"language":127529,"meta":35,"style":35},"body {\n  font-size: 16px;\n}\n",[26,127933,127934,127940,127952],{"__ignoreMap":35},[39,127935,127936,127938],{"class":41,"line":42},[39,127937,52775],{"class":52275},[39,127939,16545],{"class":53},[39,127941,127942,127944,127946,127948,127950],{"class":41,"line":92},[39,127943,71601],{"class":74},[39,127945,52412],{"class":53},[39,127947,1862],{"class":74},[39,127949,52467],{"class":45},[39,127951,318],{"class":53},[39,127953,127954],{"class":41,"line":112},[39,127955,115],{"class":53},[19,127957,127958],{},"⑤标题标签比较特殊，需要单独指定大小",[476,127960,127962],{"id":127961},"_633-字体粗细","6.3.3 字体粗细",[19,127964,127965],{},"font-weight: bold;",[19,127967,127968],{},"font-weight: 100；",[19,127970,127971,127973],{},[350,127972,1301],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127975,127976],{},"font-weight= 400;",[19,127978,127979],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[476,127981,127983],{"id":127982},"_634-文字样式","6.3.4 文字样式",[19,127985,127986],{},"font-style: normal；",[19,127988,127989,27448],{},[350,127990,127991],{},"属性值",[19,127993,127994],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127996,127997],{},"②italic：浏览器会显示斜体的字体样式",[2585,127999],{"style":127383,"src":128000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[476,128002,128004],{"id":128003},"_635-字体符合属性","6.3.5 字体符合属性",[2585,128006],{"style":127383,"src":128007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[2585,128009],{"style":127383,"src":128010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128012,128013],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128015,128016,27448],{},[350,128017,127615],{},[19,128019,128020],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128022,128023],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128025,128026],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128028,128030],{"id":128029},"_64-css-test文本属性","6.4 css test文本属性",[476,128032,128034],{"id":128033},"_641-文本颜色","6.4.1 文本颜色",[19,128036,128037],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[30,128039,128041],{"className":127527,"code":128040,"language":127529,"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",[26,128042,128043,128048,128054,128064,128069,128074],{"__ignoreMap":35},[39,128044,128045],{"class":41,"line":42},[39,128046,128047],{"class":128},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[39,128049,128050,128052],{"class":41,"line":92},[39,128051,19],{"class":52275},[39,128053,16545],{"class":53},[39,128055,128056,128058,128060,128062],{"class":41,"line":112},[39,128057,71880],{"class":74},[39,128059,52412],{"class":53},[39,128061,58396],{"class":74},[39,128063,318],{"class":53},[39,128065,128066],{"class":41,"line":118},[39,128067,128068],{"class":128},"  \u002F* color: #ff0000; *\u002F\n",[39,128070,128071],{"class":41,"line":125},[39,128072,128073],{"class":128},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[39,128075,128076],{"class":41,"line":132},[39,128077,115],{"class":53},[2585,128079],{"style":127383,"src":128080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[476,128082,128084],{"id":128083},"_642-对齐文本","6.4.2 对齐文本",[19,128086,128087,128088,128091],{},"text-align属于用于设置元素内文本内容的 ",[350,128089,128090],{},"水平对齐"," 方式",[19,128093,128094],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[476,128096,128098],{"id":128097},"_643-装饰文本","6.4.3 装饰文本",[19,128100,128101],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[30,128103,128105],{"className":127527,"code":128104,"language":127529,"meta":35,"style":35},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[26,128106,128107,128113,128123,128127,128133,128144],{"__ignoreMap":35},[39,128108,128109,128111],{"class":41,"line":42},[39,128110,922],{"class":52275},[39,128112,16545],{"class":53},[39,128114,128115,128117,128119,128121],{"class":41,"line":92},[39,128116,71477],{"class":74},[39,128118,52412],{"class":53},[39,128120,55712],{"class":74},[39,128122,318],{"class":53},[39,128124,128125],{"class":41,"line":112},[39,128126,115],{"class":53},[39,128128,128129,128131],{"class":41,"line":118},[39,128130,19],{"class":52275},[39,128132,16545],{"class":53},[39,128134,128135,128137,128139,128142],{"class":41,"line":125},[39,128136,71477],{"class":74},[39,128138,52412],{"class":53},[39,128140,128141],{"class":74},"underline",[39,128143,318],{"class":53},[39,128145,128146],{"class":41,"line":132},[39,128147,115],{"class":53},[476,128149,128151],{"id":128150},"_644-文本缩进","6.4.4 文本缩进",[19,128153,128154],{},"实现文本的第一行首行缩进自己指定的距离",[19,128156,128157],{},"20px往右边走；-20px往左边走",[19,128159,128160],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[30,128162,128164],{"className":127527,"code":128163,"language":127529,"meta":35,"style":35},"p {\n  text-indent: 2em;\n}\n",[26,128165,128166,128172,128185],{"__ignoreMap":35},[39,128167,128168,128170],{"class":41,"line":42},[39,128169,19],{"class":52275},[39,128171,16545],{"class":53},[39,128173,128174,128177,128179,128181,128183],{"class":41,"line":92},[39,128175,128176],{"class":74},"  text-indent",[39,128178,52412],{"class":53},[39,128180,1345],{"class":74},[39,128182,24527],{"class":45},[39,128184,318],{"class":53},[39,128186,128187],{"class":41,"line":112},[39,128188,115],{"class":53},[476,128190,128192],{"id":128191},"_645-行间距","6.4.5 行间距",[19,128194,128195],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[30,128197,128199],{"className":127527,"code":128198,"language":127529,"meta":35,"style":35},"p {\n  line-height: 1.6;\n}\n",[26,128200,128201,128207,128219],{"__ignoreMap":35},[39,128202,128203,128205],{"class":41,"line":42},[39,128204,19],{"class":52275},[39,128206,16545],{"class":53},[39,128208,128209,128212,128214,128217],{"class":41,"line":92},[39,128210,128211],{"class":74},"  line-height",[39,128213,52412],{"class":53},[39,128215,128216],{"class":74},"1.6",[39,128218,318],{"class":53},[39,128220,128221],{"class":41,"line":112},[39,128222,115],{"class":53},[1192,128224,128225],{},"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":92,"depth":92,"links":128227},[128228,128229,128237,128244],{"id":127709,"depth":92,"text":127710},{"id":127744,"depth":92,"text":127745,"children":128230},[128231,128232,128233,128234,128235,128236],{"id":127751,"depth":112,"text":127752},{"id":127764,"depth":112,"text":127765},{"id":127837,"depth":112,"text":127838},{"id":127850,"depth":112,"text":127851},{"id":127869,"depth":112,"text":127870},{"id":127882,"depth":112,"text":127883},{"id":127889,"depth":92,"text":127890,"children":128238},[128239,128240,128241,128242,128243],{"id":127896,"depth":112,"text":127897},{"id":127908,"depth":112,"text":127909},{"id":127961,"depth":112,"text":127962},{"id":127982,"depth":112,"text":127983},{"id":128003,"depth":112,"text":128004},{"id":128029,"depth":92,"text":128030,"children":128245},[128246,128247,128248,128249,128250],{"id":128033,"depth":112,"text":128034},{"id":128083,"depth":112,"text":128084},{"id":128097,"depth":112,"text":128098},{"id":128150,"depth":112,"text":128151},{"id":128191,"depth":112,"text":128192},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127701,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128257,"title":128258,"body":128259,"description":24350,"extension":1203,"meta":128908,"navigation":121,"path":128909,"seo":128910,"stem":128911,"__hash__":128912},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128260,"toc":128889},[128261,128264,128268,128272,128332,128336,128346,128349,128352,128356,128381,128385,128388,128391,128394,128397,128400,128404,128407,128410,128452,128455,128481,128487,128490,128494,128498,128504,128507,128510,128513,128516,128519,128522,128567,128571,128574,128577,128581,128585,128614,128617,128622,128625,128628,128631,128634,128638,128642,128645,128647,128650,128654,128657,128661,128664,128667,128670,128674,128678,128684,128694,128697,128700,128703,128706,128709,128832,128840,128848,128886],[10,128262,128258],{"id":128263},"_7-css引入方式与选择器进阶",[14,128265,128267],{"id":128266},"_71-css引入方式","7.1 css引入方式",[476,128269,128271],{"id":128270},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[30,128273,128277],{"className":128274,"code":128275,"language":128276,"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",[26,128278,128279,128287,128294,128306,128319,128324],{"__ignoreMap":35},[39,128280,128281,128283,128285],{"class":41,"line":42},[39,128282,2170],{"class":53},[39,128284,1192],{"class":52275},[39,128286,52282],{"class":53},[39,128288,128289,128292],{"class":41,"line":92},[39,128290,128291],{"class":52275},"  h1",[39,128293,16545],{"class":53},[39,128295,128296,128299,128301,128304],{"class":41,"line":112},[39,128297,128298],{"class":74},"    color",[39,128300,52412],{"class":53},[39,128302,128303],{"class":74},"blue",[39,128305,318],{"class":53},[39,128307,128308,128311,128313,128315,128317],{"class":41,"line":118},[39,128309,128310],{"class":74},"    font-size",[39,128312,52412],{"class":53},[39,128314,2060],{"class":74},[39,128316,52467],{"class":45},[39,128318,318],{"class":53},[39,128320,128321],{"class":41,"line":125},[39,128322,128323],{"class":53},"  }\n",[39,128325,128326,128328,128330],{"class":41,"line":132},[39,128327,52760],{"class":53},[39,128329,1192],{"class":52275},[39,128331,52282],{"class":53},[19,128333,128334,27448],{},[350,128335,127615],{},[19,128337,78201,128338,128341,128342,128345],{},[26,128339,128340],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[26,128343,128344],{},"\u003Chead>","标签中",[19,128347,128348],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128350,128351],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[476,128353,128355],{"id":128354},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[30,128357,128359],{"className":128274,"code":128358,"language":128276,"meta":35,"style":35},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[26,128360,128361],{"__ignoreMap":35},[39,128362,128363,128365,128367,128369,128371,128374,128377,128379],{"class":41,"line":42},[39,128364,2170],{"class":53},[39,128366,19],{"class":52275},[39,128368,63601],{"class":49},[39,128370,1117],{"class":53},[39,128372,128373],{"class":237},"\"color: red; font-size: 16px;\"",[39,128375,128376],{"class":53},">这是一个段落\u003C\u002F",[39,128378,19],{"class":52275},[39,128380,52282],{"class":53},[19,128382,128383,27448],{},[350,128384,127615],{},[19,128386,128387],{},"①style其实就是标签的属性",[19,128389,128390],{},"②在双引号中间，写法要符合css规范",[19,128392,128393],{},"③可以控制当前的标签设置样式",[19,128395,128396],{},"④书写繁琐，简单时才用",[19,128398,128399],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[476,128401,128403],{"id":128402},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,128405,128406],{},"使用最多，单独建一个css文件，然后html引用",[19,128408,128409],{},"①css文件部分： style.css",[30,128411,128413],{"className":127527,"code":128412,"language":127529,"meta":35,"style":35},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[26,128414,128415,128420,128426,128436,128448],{"__ignoreMap":35},[39,128416,128417],{"class":41,"line":42},[39,128418,128419],{"class":128},"\u002F* style.css *\u002F\n",[39,128421,128422,128424],{"class":41,"line":92},[39,128423,10],{"class":52275},[39,128425,16545],{"class":53},[39,128427,128428,128430,128432,128434],{"class":41,"line":112},[39,128429,71880],{"class":74},[39,128431,52412],{"class":53},[39,128433,128303],{"class":74},[39,128435,318],{"class":53},[39,128437,128438,128440,128442,128444,128446],{"class":41,"line":118},[39,128439,71601],{"class":74},[39,128441,52412],{"class":53},[39,128443,2060],{"class":74},[39,128445,52467],{"class":45},[39,128447,318],{"class":53},[39,128449,128450],{"class":41,"line":125},[39,128451,115],{"class":53},[19,128453,128454],{},"②html部分",[30,128456,128458],{"className":128274,"code":128457,"language":128276,"meta":35,"style":35},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[26,128459,128460],{"__ignoreMap":35},[39,128461,128462,128464,128466,128468,128470,128472,128474,128476,128479],{"class":41,"line":42},[39,128463,2170],{"class":53},[39,128465,69980],{"class":52275},[39,128467,69983],{"class":49},[39,128469,1117],{"class":53},[39,128471,69988],{"class":237},[39,128473,62032],{"class":49},[39,128475,1117],{"class":53},[39,128477,128478],{"class":237},"\"style.css\"",[39,128480,52282],{"class":53},[19,128482,128483,128486],{},[26,128484,128485],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128488,128489],{},"ctrl+0回到页面原来大小",[14,128491,128493],{"id":128492},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[476,128495,128497],{"id":128496},"_721-快速生成html","7.2.1 快速生成html",[19,128499,128500,128501],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[26,128502,128503],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128505,128506],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128508,128509],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128511,128512],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128514,128515],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128517,128518],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128520,128521],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[30,128523,128525],{"className":128274,"code":128524,"language":128276,"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",[26,128526,128527,128532,128537,128542,128547,128552,128557,128562],{"__ignoreMap":35},[39,128528,128529],{"class":41,"line":42},[39,128530,128531],{"class":128},"\u003C!-- Emmet 语法示例 -->\n",[39,128533,128534],{"class":41,"line":92},[39,128535,128536],{"class":128},"\u003C!-- div*3        → 生成3个div -->\n",[39,128538,128539],{"class":41,"line":112},[39,128540,128541],{"class":128},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[39,128543,128544],{"class":41,"line":118},[39,128545,128546],{"class":128},"\u003C!-- div+p        → 兄弟div和p -->\n",[39,128548,128549],{"class":41,"line":125},[39,128550,128551],{"class":128},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[39,128553,128554],{"class":41,"line":132},[39,128555,128556],{"class":128},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[39,128558,128559],{"class":41,"line":138},[39,128560,128561],{"class":128},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[39,128563,128564],{"class":41,"line":169},[39,128565,128566],{"class":128},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[476,128568,128570],{"id":128569},"_722-快速生成css","7.2.2 快速生成css",[19,128572,128573],{},"简写开头",[19,128575,128576],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128578,128580],{"id":128579},"_73-css复合选择器","7.3 css复合选择器",[476,128582,128584],{"id":128583},"_731-后代选择器","7.3.1 后代选择器",[30,128586,128588],{"className":127527,"code":128587,"language":127529,"meta":35,"style":35},".parent .child {\n  color: blue;\n}\n",[26,128589,128590,128600,128610],{"__ignoreMap":35},[39,128591,128592,128595,128598],{"class":41,"line":42},[39,128593,128594],{"class":49},".parent",[39,128596,128597],{"class":49}," .child",[39,128599,16545],{"class":53},[39,128601,128602,128604,128606,128608],{"class":41,"line":92},[39,128603,71880],{"class":74},[39,128605,52412],{"class":53},[39,128607,128303],{"class":74},[39,128609,318],{"class":53},[39,128611,128612],{"class":41,"line":112},[39,128613,115],{"class":53},[19,128615,128616],{},"元素1 元素2 {样式声明}",[19,128618,128619],{},[350,128620,128621],{},"注意点:",[19,128623,128624],{},"①元素1和元素2中间用空格隔开",[19,128626,128627],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128629,128630],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128632,128633],{},"④元素1和元素2可以是任意基础选择器",[476,128635,128637],{"id":128636},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128639,128640],{},[350,128641,128621],{},[19,128643,128644],{},"①元素1和元素2中间用大于号隔开",[19,128646,128627],{},[19,128648,128649],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[476,128651,128653],{"id":128652},"_733-并集选择器","7.3.3 并集选择器",[19,128655,128656],{},"元素1，元素2 {样式声明}",[19,128658,128659],{},[350,128660,128621],{},[19,128662,128663],{},"①元素1和元素2中间用逗号隔开",[19,128665,128666],{},"②逗号可以理解为和的意思",[19,128668,128669],{},"③并集选择器通常用于集体声明",[476,128671,128673],{"id":128672},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128675,128676],{},[350,128677,128621],{},[19,128679,128680,128681,128683],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69980,128682],{},"－:visited－:hover－:active。",[19,128685,128686,128687,128690,128691,26715],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128688,128689],"hover",{}," 、 ",[128692,128693],"first-child",{},[19,128695,128696],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128698,128699],{},"link对没访问的进行设置",[19,128701,128702],{},"vistied对已访问的进行改变",[19,128704,128705],{},"hover鼠标经过就会变",[19,128707,128708],{},"active常按(点)就会变",[30,128710,128712],{"className":127527,"code":128711,"language":127529,"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",[26,128713,128714,128719,128728,128738,128748,128752,128761,128772,128776,128784,128794,128804,128808,128817,128828],{"__ignoreMap":35},[39,128715,128716],{"class":41,"line":42},[39,128717,128718],{"class":128},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[39,128720,128721,128723,128726],{"class":41,"line":92},[39,128722,922],{"class":52275},[39,128724,128725],{"class":49},":link",[39,128727,16545],{"class":53},[39,128729,128730,128732,128734,128736],{"class":41,"line":112},[39,128731,71880],{"class":74},[39,128733,52412],{"class":53},[39,128735,63344],{"class":74},[39,128737,318],{"class":53},[39,128739,128740,128742,128744,128746],{"class":41,"line":118},[39,128741,71477],{"class":74},[39,128743,52412],{"class":53},[39,128745,55712],{"class":74},[39,128747,318],{"class":53},[39,128749,128750],{"class":41,"line":125},[39,128751,115],{"class":53},[39,128753,128754,128756,128759],{"class":41,"line":132},[39,128755,922],{"class":52275},[39,128757,128758],{"class":49},":visited",[39,128760,16545],{"class":53},[39,128762,128763,128765,128767,128770],{"class":41,"line":138},[39,128764,71880],{"class":74},[39,128766,52412],{"class":53},[39,128768,128769],{"class":74},"purple",[39,128771,318],{"class":53},[39,128773,128774],{"class":41,"line":169},[39,128775,115],{"class":53},[39,128777,128778,128780,128782],{"class":41,"line":190},[39,128779,922],{"class":52275},[39,128781,61915],{"class":49},[39,128783,16545],{"class":53},[39,128785,128786,128788,128790,128792],{"class":41,"line":202},[39,128787,71880],{"class":74},[39,128789,52412],{"class":53},[39,128791,55864],{"class":74},[39,128793,318],{"class":53},[39,128795,128796,128798,128800,128802],{"class":41,"line":207},[39,128797,71477],{"class":74},[39,128799,52412],{"class":53},[39,128801,128141],{"class":74},[39,128803,318],{"class":53},[39,128805,128806],{"class":41,"line":212},[39,128807,115],{"class":53},[39,128809,128810,128812,128815],{"class":41,"line":223},[39,128811,922],{"class":52275},[39,128813,128814],{"class":49},":active",[39,128816,16545],{"class":53},[39,128818,128819,128821,128823,128826],{"class":41,"line":228},[39,128820,71880],{"class":74},[39,128822,52412],{"class":53},[39,128824,128825],{"class":74},"green",[39,128827,318],{"class":53},[39,128829,128830],{"class":41,"line":263},[39,128831,115],{"class":53},[476,128833,128835,128836,128839],{"id":128834},"_735-伪类选择器","7.3.5 ",[128837,128838],"focus",{},"伪类选择器",[19,128841,128842,128844,128845,128847],{},[128837,128843],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[26,128846,127588],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[30,128849,128851],{"className":127527,"code":128850,"language":127529,"meta":35,"style":35},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[26,128852,128853,128861,128872,128882],{"__ignoreMap":35},[39,128854,128855,128857,128859],{"class":41,"line":42},[39,128856,54796],{"class":52275},[39,128858,62875],{"class":49},[39,128860,16545],{"class":53},[39,128862,128863,128866,128868,128870],{"class":41,"line":92},[39,128864,128865],{"class":74},"  border-color",[39,128867,52412],{"class":53},[39,128869,55864],{"class":74},[39,128871,318],{"class":53},[39,128873,128874,128876,128878,128880],{"class":41,"line":112},[39,128875,71773],{"class":74},[39,128877,52412],{"class":53},[39,128879,55712],{"class":74},[39,128881,318],{"class":53},[39,128883,128884],{"class":41,"line":118},[39,128885,115],{"class":53},[1192,128887,128888],{},"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":92,"depth":92,"links":128890},[128891,128896,128900],{"id":128266,"depth":92,"text":128267,"children":128892},[128893,128894,128895],{"id":128270,"depth":112,"text":128271},{"id":128354,"depth":112,"text":128355},{"id":128402,"depth":112,"text":128403},{"id":128492,"depth":92,"text":128493,"children":128897},[128898,128899],{"id":128496,"depth":112,"text":128497},{"id":128569,"depth":112,"text":128570},{"id":128579,"depth":92,"text":128580,"children":128901},[128902,128903,128904,128905,128906],{"id":128583,"depth":112,"text":128584},{"id":128636,"depth":112,"text":128637},{"id":128652,"depth":112,"text":128653},{"id":128672,"depth":112,"text":128673},{"id":128834,"depth":112,"text":128907},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128258,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128914,"title":128915,"body":128916,"description":24350,"extension":1203,"meta":130839,"navigation":121,"path":130840,"seo":130841,"stem":130842,"__hash__":130843},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128917,"toc":130813},[128918,128921,128925,128934,128938,128964,128969,128972,128975,128978,128981,128985,128988,128998,129006,129010,129045,129050,129053,129056,129059,129062,129066,129069,129078,129082,129095,129100,129103,129106,129109,129113,129116,129120,129123,129178,129181,129212,129215,129269,129273,129276,129442,129565,129568,129571,129574,129577,129581,129584,129588,129591,129594,129598,129601,129632,129659,129687,129690,129694,129720,129763,129767,129861,129864,129891,129894,129897,129900,129903,129906,129909,129912,129915,129918,129922,129979,130006,130010,130058,130062,130103,130105,130108,130111,130114,130117,130121,130213,130216,130219,130222,130226,130349,130550,130554,130558,130561,130564,130567,130571,130574,130577,130602,130605,130608,130611,130614,130617,130621,130629,130691,130694,130752,130755,130758,130761,130764,130767,130770,130773,130810],[10,128919,128915],{"id":128920},"_8-css显示模式与背景特性",[14,128922,128924],{"id":128923},"_81-css元素显示模式","8.1 css元素显示模式",[19,128926,128927,128928,128930,128931,128933],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[26,128929,127138],{},"自己占一行，比如一行可以放多个",[26,128932,127141],{},"，HTML 元素一般分为块元素和行内元素两种类型",[476,128935,128937],{"id":128936},"_811-块元素","8.1.1 块元素",[19,128939,128940,128941,128943,128944,1478,128947,1478,128949,1478,128951,1478,128954,1478,128957,128960,128961,128963],{},"常见的块元素有",[26,128942,127042],{},"~",[26,128945,128946],{},"\u003Ch6>",[26,128948,127068],{},[26,128950,127138],{},[26,128952,128953],{},"\u003Cul>",[26,128955,128956],{},"\u003Col>",[26,128958,128959],{},"\u003Cli>","等，其中 ",[26,128962,127138],{}," 标签是最典型的块元素",[19,128965,128966],{},[350,128967,128968],{},"块级元素的特点：",[19,128970,128971],{},"① 比较霸道，自己独占一行。",[19,128973,128974],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128976,128977],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128979,128980],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128982,128983],{},[350,128984,1301],{},[19,128986,128987],{},"①文字类的元素内不能使用块级元素",[19,128989,78224,128990,128992,128993,128995,128996],{},[26,128991,127068],{}," 标签主要用于存放文字，因此 ",[26,128994,127068],{}," 里面不能放块级元素，特别是不能放",[26,128997,127138],{},[19,128999,129000,129001,128943,129003,129005],{},"⑥同理， ",[26,129002,127042],{},[26,129004,128946],{},"等都是文字类块级标签，里面也不能放其他块级元素",[476,129007,129009],{"id":129008},"_812-行内元素","8.1.2 行内元素",[19,129011,129012,129013,1478,129015,1478,129018,1478,129021,1478,129024,1478,129027,1478,129030,1478,129033,1478,129036,1478,129039,129041,129042,129044],{},"常见的行内元素有 ",[26,129014,127300],{},[26,129016,129017],{},"\u003Cstrong>",[26,129019,129020],{},"\u003Cb>",[26,129022,129023],{},"\u003Cem>",[26,129025,129026],{},"\u003Ci>",[26,129028,129029],{},"\u003Cdel>",[26,129031,129032],{},"\u003Cs>",[26,129034,129035],{},"\u003Cins>",[26,129037,129038],{},"\u003Cu>",[26,129040,127141],{}," 等，其中 ",[26,129043,127141],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129046,129047],{},[350,129048,129049],{},"特点：",[19,129051,129052],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129054,129055],{},"② 高、宽直接设置是无效的。",[19,129057,129058],{},"③ 默认宽度就是它本身内容的宽度。",[19,129060,129061],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129063,129064],{},[350,129065,1301],{},[19,129067,129068],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129070,129071,129072,129074,129075,129077],{},"②特殊情况链接 ",[26,129073,127300],{}," 里面可以放块级元素，但是给 ",[26,129076,127300],{}," 转换一下块级模式最安全",[476,129079,129081],{"id":129080},"_813-行内块元素","8.1.3 行内块元素",[19,129083,129084,129085,1478,129088,1478,129091,129094],{},"在行内元素中有几个特殊的标签 —— ",[26,129086,129087],{},"\u003Cimg \u002F>",[26,129089,129090],{},"\u003Cinput \u002F>",[26,129092,129093],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129096,129097],{},[350,129098,129099],{},"行内块元素的特点：",[19,129101,129102],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129104,129105],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129107,129108],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[476,129110,129112],{"id":129111},"_814-总结","8.1.4 总结",[2585,129114],{"style":127383,"src":129115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[476,129117,129119],{"id":129118},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129121,129122],{},"①转换为块元素：display:block;",[30,129124,129126],{"className":127527,"code":129125,"language":127529,"meta":35,"style":35},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[26,129127,129128,129133,129139,129150,129162,129174],{"__ignoreMap":35},[39,129129,129130],{"class":41,"line":42},[39,129131,129132],{"class":128},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[39,129134,129135,129137],{"class":41,"line":92},[39,129136,922],{"class":52275},[39,129138,16545],{"class":53},[39,129140,129141,129144,129146,129148],{"class":41,"line":112},[39,129142,129143],{"class":74},"  display",[39,129145,52412],{"class":53},[39,129147,61844],{"class":74},[39,129149,318],{"class":53},[39,129151,129152,129154,129156,129158,129160],{"class":41,"line":118},[39,129153,71543],{"class":74},[39,129155,52412],{"class":53},[39,129157,278],{"class":74},[39,129159,52467],{"class":45},[39,129161,318],{"class":53},[39,129163,129164,129166,129168,129170,129172],{"class":41,"line":125},[39,129165,71763],{"class":74},[39,129167,52412],{"class":53},[39,129169,1664],{"class":74},[39,129171,52467],{"class":45},[39,129173,318],{"class":53},[39,129175,129176],{"class":41,"line":132},[39,129177,115],{"class":53},[19,129179,129180],{},"②转换为行内元素：display:inline;",[30,129182,129184],{"className":127527,"code":129183,"language":127529,"meta":35,"style":35},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[26,129185,129186,129191,129197,129208],{"__ignoreMap":35},[39,129187,129188],{"class":41,"line":42},[39,129189,129190],{"class":128},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[39,129192,129193,129195],{"class":41,"line":92},[39,129194,52586],{"class":52275},[39,129196,16545],{"class":53},[39,129198,129199,129201,129203,129206],{"class":41,"line":112},[39,129200,129143],{"class":74},[39,129202,52412],{"class":53},[39,129204,129205],{"class":74},"inline",[39,129207,318],{"class":53},[39,129209,129210],{"class":41,"line":118},[39,129211,115],{"class":53},[19,129213,129214],{},"③转换为行内块：display:inline-block;",[30,129216,129218],{"className":127527,"code":129217,"language":127529,"meta":35,"style":35},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[26,129219,129220,129225,129231,129241,129253,129265],{"__ignoreMap":35},[39,129221,129222],{"class":41,"line":42},[39,129223,129224],{"class":128},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[39,129226,129227,129229],{"class":41,"line":92},[39,129228,39],{"class":52275},[39,129230,16545],{"class":53},[39,129232,129233,129235,129237,129239],{"class":41,"line":112},[39,129234,129143],{"class":74},[39,129236,52412],{"class":53},[39,129238,73358],{"class":74},[39,129240,318],{"class":53},[39,129242,129243,129245,129247,129249,129251],{"class":41,"line":118},[39,129244,71543],{"class":74},[39,129246,52412],{"class":53},[39,129248,1873],{"class":74},[39,129250,52467],{"class":45},[39,129252,318],{"class":53},[39,129254,129255,129257,129259,129261,129263],{"class":41,"line":125},[39,129256,71763],{"class":74},[39,129258,52412],{"class":53},[39,129260,2211],{"class":74},[39,129262,52467],{"class":45},[39,129264,318],{"class":53},[39,129266,129267],{"class":41,"line":132},[39,129268,115],{"class":53},[476,129270,129272],{"id":129271},"_816-小米侧边栏","8.1.6 小米侧边栏",[2585,129274],{"style":127383,"src":129275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[30,129277,129279],{"className":128274,"code":129278,"language":128276,"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",[26,129280,129281,129286,129301,129320,129339,129358,129377,129396,129415,129434],{"__ignoreMap":35},[39,129282,129283],{"class":41,"line":42},[39,129284,129285],{"class":128},"\u003C!-- 小米侧边栏案例 -->\n",[39,129287,129288,129290,129292,129294,129296,129299],{"class":41,"line":92},[39,129289,2170],{"class":53},[39,129291,52586],{"class":52275},[39,129293,54461],{"class":49},[39,129295,1117],{"class":53},[39,129297,129298],{"class":237},"\"sidebar\"",[39,129300,52282],{"class":53},[39,129302,129303,129305,129307,129309,129311,129313,129316,129318],{"class":41,"line":112},[39,129304,53119],{"class":53},[39,129306,922],{"class":52275},[39,129308,62032],{"class":49},[39,129310,1117],{"class":53},[39,129312,62037],{"class":237},[39,129314,129315],{"class":53},">手机 电话卡\u003C\u002F",[39,129317,922],{"class":52275},[39,129319,52282],{"class":53},[39,129321,129322,129324,129326,129328,129330,129332,129335,129337],{"class":41,"line":118},[39,129323,53119],{"class":53},[39,129325,922],{"class":52275},[39,129327,62032],{"class":49},[39,129329,1117],{"class":53},[39,129331,62037],{"class":237},[39,129333,129334],{"class":53},">电视 盒子\u003C\u002F",[39,129336,922],{"class":52275},[39,129338,52282],{"class":53},[39,129340,129341,129343,129345,129347,129349,129351,129354,129356],{"class":41,"line":125},[39,129342,53119],{"class":53},[39,129344,922],{"class":52275},[39,129346,62032],{"class":49},[39,129348,1117],{"class":53},[39,129350,62037],{"class":237},[39,129352,129353],{"class":53},">笔记本 平板\u003C\u002F",[39,129355,922],{"class":52275},[39,129357,52282],{"class":53},[39,129359,129360,129362,129364,129366,129368,129370,129373,129375],{"class":41,"line":132},[39,129361,53119],{"class":53},[39,129363,922],{"class":52275},[39,129365,62032],{"class":49},[39,129367,1117],{"class":53},[39,129369,62037],{"class":237},[39,129371,129372],{"class":53},">出行 穿戴\u003C\u002F",[39,129374,922],{"class":52275},[39,129376,52282],{"class":53},[39,129378,129379,129381,129383,129385,129387,129389,129392,129394],{"class":41,"line":138},[39,129380,53119],{"class":53},[39,129382,922],{"class":52275},[39,129384,62032],{"class":49},[39,129386,1117],{"class":53},[39,129388,62037],{"class":237},[39,129390,129391],{"class":53},">智能 路由器\u003C\u002F",[39,129393,922],{"class":52275},[39,129395,52282],{"class":53},[39,129397,129398,129400,129402,129404,129406,129408,129411,129413],{"class":41,"line":169},[39,129399,53119],{"class":53},[39,129401,922],{"class":52275},[39,129403,62032],{"class":49},[39,129405,1117],{"class":53},[39,129407,62037],{"class":237},[39,129409,129410],{"class":53},">健康 儿童\u003C\u002F",[39,129412,922],{"class":52275},[39,129414,52282],{"class":53},[39,129416,129417,129419,129421,129423,129425,129427,129430,129432],{"class":41,"line":190},[39,129418,53119],{"class":53},[39,129420,922],{"class":52275},[39,129422,62032],{"class":49},[39,129424,1117],{"class":53},[39,129426,62037],{"class":237},[39,129428,129429],{"class":53},">耳机 音响\u003C\u002F",[39,129431,922],{"class":52275},[39,129433,52282],{"class":53},[39,129435,129436,129438,129440],{"class":41,"line":202},[39,129437,52760],{"class":53},[39,129439,52586],{"class":52275},[39,129441,52282],{"class":53},[30,129443,129445],{"className":127527,"code":129444,"language":127529,"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",[26,129446,129447,129456,129466,129479,129491,129503,129515,129525,129536,129540,129550,129561],{"__ignoreMap":35},[39,129448,129449,129452,129454],{"class":41,"line":42},[39,129450,129451],{"class":49},".sidebar",[39,129453,60],{"class":52275},[39,129455,16545],{"class":53},[39,129457,129458,129460,129462,129464],{"class":41,"line":92},[39,129459,129143],{"class":74},[39,129461,52412],{"class":53},[39,129463,61844],{"class":74},[39,129465,318],{"class":53},[39,129467,129468,129470,129472,129475,129477],{"class":41,"line":112},[39,129469,71543],{"class":74},[39,129471,52412],{"class":53},[39,129473,129474],{"class":74},"234",[39,129476,52467],{"class":45},[39,129478,318],{"class":53},[39,129480,129481,129483,129485,129487,129489],{"class":41,"line":118},[39,129482,71763],{"class":74},[39,129484,52412],{"class":53},[39,129486,1714],{"class":74},[39,129488,52467],{"class":45},[39,129490,318],{"class":53},[39,129492,129493,129495,129497,129499,129501],{"class":41,"line":125},[39,129494,128211],{"class":74},[39,129496,52412],{"class":53},[39,129498,1714],{"class":74},[39,129500,52467],{"class":45},[39,129502,318],{"class":53},[39,129504,129505,129507,129509,129511,129513],{"class":41,"line":132},[39,129506,71798],{"class":74},[39,129508,52412],{"class":53},[39,129510,2211],{"class":74},[39,129512,52467],{"class":45},[39,129514,318],{"class":53},[39,129516,129517,129519,129521,129523],{"class":41,"line":138},[39,129518,71880],{"class":74},[39,129520,52412],{"class":53},[39,129522,61817],{"class":74},[39,129524,318],{"class":53},[39,129526,129527,129529,129531,129534],{"class":41,"line":169},[39,129528,71853],{"class":74},[39,129530,52412],{"class":53},[39,129532,129533],{"class":74},"#55585a",[39,129535,318],{"class":53},[39,129537,129538],{"class":41,"line":190},[39,129539,115],{"class":53},[39,129541,129542,129544,129546,129548],{"class":41,"line":202},[39,129543,129451],{"class":49},[39,129545,60],{"class":52275},[39,129547,61915],{"class":49},[39,129549,16545],{"class":53},[39,129551,129552,129554,129556,129559],{"class":41,"line":207},[39,129553,71853],{"class":74},[39,129555,52412],{"class":53},[39,129557,129558],{"class":74},"#ff6700",[39,129560,318],{"class":53},[39,129562,129563],{"class":41,"line":212},[39,129564,115],{"class":53},[2585,129566],{"style":127383,"src":129567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129569,129570],{},"行高=盒子高度：实现文字的垂直居中",[19,129572,129573],{},"原理讲解：",[2585,129575],{"style":127383,"src":129576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129578,129580],{"id":129579},"_82-css背景","8.2 css背景",[19,129582,129583],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[476,129585,129587],{"id":129586},"_821-背景颜色","8.2.1 背景颜色",[19,129589,129590],{},"background-color:颜色值;",[19,129592,129593],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[476,129595,129597],{"id":129596},"_822-背景图片","8.2.2 背景图片",[19,129599,129600],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[30,129602,129604],{"className":127527,"code":129603,"language":127529,"meta":35,"style":35},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[26,129605,129606,129612,129628],{"__ignoreMap":35},[39,129607,129608,129610],{"class":41,"line":42},[39,129609,52586],{"class":52275},[39,129611,16545],{"class":53},[39,129613,129614,129617,129619,129621,129623,129626],{"class":41,"line":92},[39,129615,129616],{"class":74},"  background-image",[39,129618,52412],{"class":53},[39,129620,62701],{"class":74},[39,129622,54],{"class":53},[39,129624,129625],{"class":59},"images\u002Fbg.png",[39,129627,166],{"class":53},[39,129629,129630],{"class":41,"line":112},[39,129631,115],{"class":53},[1404,129633,129634,129643],{},[1407,129635,129636],{},[1410,129637,129638,129641],{},[1413,129639,129640],{"align":24710},"参数值",[1413,129642,103671],{"align":24710},[1450,129644,129645,129652],{},[1410,129646,129647,129649],{},[1455,129648,55712],{"align":24710},[1455,129650,129651],{"align":24710},"无背景图（默认的）",[1410,129653,129654,129656],{},[1455,129655,62701],{"align":24710},[1455,129657,129658],{"align":24710},"使用绝对或相对地址指定背景图像",[30,129660,129661],{"className":127527,"code":129603,"language":127529,"meta":35,"style":35},[26,129662,129663,129669,129683],{"__ignoreMap":35},[39,129664,129665,129667],{"class":41,"line":42},[39,129666,52586],{"class":52275},[39,129668,16545],{"class":53},[39,129670,129671,129673,129675,129677,129679,129681],{"class":41,"line":92},[39,129672,129616],{"class":74},[39,129674,52412],{"class":53},[39,129676,62701],{"class":74},[39,129678,54],{"class":53},[39,129680,129625],{"class":59},[39,129682,166],{"class":53},[39,129684,129685],{"class":41,"line":112},[39,129686,115],{"class":53},[19,129688,129689],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[476,129691,129693],{"id":129692},"_823-背景平铺","8.2.3 背景平铺",[30,129695,129697],{"className":127527,"code":129696,"language":127529,"meta":35,"style":35},"div {\n  background-repeat: no-repeat;\n}\n",[26,129698,129699,129705,129716],{"__ignoreMap":35},[39,129700,129701,129703],{"class":41,"line":42},[39,129702,52586],{"class":52275},[39,129704,16545],{"class":53},[39,129706,129707,129710,129712,129714],{"class":41,"line":92},[39,129708,129709],{"class":74},"  background-repeat",[39,129711,52412],{"class":53},[39,129713,62711],{"class":74},[39,129715,318],{"class":53},[39,129717,129718],{"class":41,"line":112},[39,129719,115],{"class":53},[1404,129721,129722,129730],{},[1407,129723,129724],{},[1410,129725,129726,129728],{},[1413,129727,129640],{"align":24710},[1413,129729,103671],{"align":24710},[1450,129731,129732,129740,129747,129755],{},[1410,129733,129734,129737],{},[1455,129735,129736],{"align":24710},"repeat",[1455,129738,129739],{"align":24710},"背景图像在纵向和横向上平铺（默认的）",[1410,129741,129742,129744],{},[1455,129743,62711],{"align":24710},[1455,129745,129746],{"align":24710},"背景图像不平铺",[1410,129748,129749,129752],{},[1455,129750,129751],{"align":24710},"repeat-x",[1455,129753,129754],{"align":24710},"背景图像在横向上平铺",[1410,129756,129757,129760],{},[1455,129758,129759],{"align":24710},"repeat-y",[1455,129761,129762],{"align":24710},"背景图像在纵向平铺",[476,129764,129766],{"id":129765},"_824-背景图片位置","8.2.4 背景图片位置",[30,129768,129770],{"className":127527,"code":129769,"language":127529,"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",[26,129771,129772,129777,129783,129797,129801,129806,129812,129828,129832,129837,129843,129857],{"__ignoreMap":35},[39,129773,129774],{"class":41,"line":42},[39,129775,129776],{"class":128},"\u002F* 方位名词 *\u002F\n",[39,129778,129779,129781],{"class":41,"line":92},[39,129780,52586],{"class":52275},[39,129782,16545],{"class":53},[39,129784,129785,129788,129790,129792,129795],{"class":41,"line":112},[39,129786,129787],{"class":74},"  background-position",[39,129789,52412],{"class":53},[39,129791,52567],{"class":74},[39,129793,129794],{"class":74}," top",[39,129796,318],{"class":53},[39,129798,129799],{"class":41,"line":118},[39,129800,115],{"class":53},[39,129802,129803],{"class":41,"line":125},[39,129804,129805],{"class":128},"\u002F* 精确单位 *\u002F\n",[39,129807,129808,129810],{"class":41,"line":132},[39,129809,52586],{"class":52275},[39,129811,16545],{"class":53},[39,129813,129814,129816,129818,129820,129822,129824,129826],{"class":41,"line":138},[39,129815,129787],{"class":74},[39,129817,52412],{"class":53},[39,129819,248],{"class":74},[39,129821,52467],{"class":45},[39,129823,58479],{"class":74},[39,129825,52467],{"class":45},[39,129827,318],{"class":53},[39,129829,129830],{"class":41,"line":169},[39,129831,115],{"class":53},[39,129833,129834],{"class":41,"line":190},[39,129835,129836],{"class":128},"\u002F* 混合单位 *\u002F\n",[39,129838,129839,129841],{"class":41,"line":202},[39,129840,52586],{"class":52275},[39,129842,16545],{"class":53},[39,129844,129845,129847,129849,129851,129853,129855],{"class":41,"line":207},[39,129846,129787],{"class":74},[39,129848,52412],{"class":53},[39,129850,248],{"class":74},[39,129852,52467],{"class":45},[39,129854,18117],{"class":74},[39,129856,318],{"class":53},[39,129858,129859],{"class":41,"line":212},[39,129860,115],{"class":53},[19,129862,129863],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1404,129865,129866,129874],{},[1407,129867,129868],{},[1410,129869,129870,129872],{},[1413,129871,129640],{"align":24710},[1413,129873,26844],{"align":24710},[1450,129875,129876,129883],{},[1410,129877,129878,129880],{},[1455,129879,52943],{"align":24710},[1455,129881,129882],{"align":24710},"百分数|由浮点数和单位标识符组成的长度值",[1410,129884,129885,129888],{},[1455,129886,129887],{"align":24710},"position",[1455,129889,129890],{"align":24710},"top|center|bottom|left|center|right 方位名词",[19,129892,129893],{},"其他说明：",[19,129895,129896],{},"①参数是方位名词",[19,129898,129899],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129901,129902],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129904,129905],{},"②参数是精确单位",[19,129907,129908],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129910,129911],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129913,129914],{},"③参数是混合单位",[19,129916,129917],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[476,129919,129921],{"id":129920},"_825-背景图片固定","8.2.5 背景图片固定",[30,129923,129925],{"className":127527,"code":129924,"language":127529,"meta":35,"style":35},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[26,129926,129927,129932,129938,129950,129954,129959,129965,129975],{"__ignoreMap":35},[39,129928,129929],{"class":41,"line":42},[39,129930,129931],{"class":128},"\u002F* 背景滚动（默认） *\u002F\n",[39,129933,129934,129936],{"class":41,"line":92},[39,129935,52586],{"class":52275},[39,129937,16545],{"class":53},[39,129939,129940,129943,129945,129948],{"class":41,"line":112},[39,129941,129942],{"class":74},"  background-attachment",[39,129944,52412],{"class":53},[39,129946,129947],{"class":74},"scroll",[39,129949,318],{"class":53},[39,129951,129952],{"class":41,"line":118},[39,129953,115],{"class":53},[39,129955,129956],{"class":41,"line":125},[39,129957,129958],{"class":128},"\u002F* 背景固定 *\u002F\n",[39,129960,129961,129963],{"class":41,"line":132},[39,129962,52586],{"class":52275},[39,129964,16545],{"class":53},[39,129966,129967,129969,129971,129973],{"class":41,"line":138},[39,129968,129942],{"class":74},[39,129970,52412],{"class":53},[39,129972,87208],{"class":74},[39,129974,318],{"class":53},[39,129976,129977],{"class":41,"line":169},[39,129978,115],{"class":53},[1404,129980,129981,129990],{},[1407,129982,129983],{},[1410,129984,129985,129988],{},[1413,129986,129987],{"align":24710},"参数",[1413,129989,103671],{"align":24710},[1450,129991,129992,129999],{},[1410,129993,129994,129996],{},[1455,129995,129947],{"align":24710},[1455,129997,129998],{"align":24710},"背景图像是随对象内容滚动",[1410,130000,130001,130003],{},[1455,130002,87208],{"align":24710},[1455,130004,130005],{"align":24710},"背景图像固定",[476,130007,130009],{"id":130008},"_826-背景样式合写","8.2.6 背景样式合写",[30,130011,130013],{"className":127527,"code":130012,"language":127529,"meta":35,"style":35},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[26,130014,130015,130020,130026,130054],{"__ignoreMap":35},[39,130016,130017],{"class":41,"line":42},[39,130018,130019],{"class":128},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[39,130021,130022,130024],{"class":41,"line":92},[39,130023,52586],{"class":52275},[39,130025,16545],{"class":53},[39,130027,130028,130030,130032,130034,130037,130039,130041,130043,130045,130048,130050,130052],{"class":41,"line":112},[39,130029,71586],{"class":74},[39,130031,52412],{"class":53},[39,130033,61817],{"class":74},[39,130035,130036],{"class":74}," url",[39,130038,54],{"class":53},[39,130040,129625],{"class":59},[39,130042,255],{"class":53},[39,130044,62711],{"class":74},[39,130046,130047],{"class":74}," fixed",[39,130049,18117],{"class":74},[39,130051,129794],{"class":74},[39,130053,318],{"class":53},[39,130055,130056],{"class":41,"line":118},[39,130057,115],{"class":53},[476,130059,130061],{"id":130060},"_827-背景色半透明","8.2.7 背景色半透明",[30,130063,130065],{"className":127527,"code":130064,"language":127529,"meta":35,"style":35},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[26,130066,130067,130073,130099],{"__ignoreMap":35},[39,130068,130069,130071],{"class":41,"line":42},[39,130070,52586],{"class":52275},[39,130072,16545],{"class":53},[39,130074,130075,130077,130079,130081,130083,130085,130087,130089,130091,130093,130095,130097],{"class":41,"line":92},[39,130076,71586],{"class":74},[39,130078,52412],{"class":53},[39,130080,56085],{"class":74},[39,130082,54],{"class":53},[39,130084,1457],{"class":74},[39,130086,63],{"class":53},[39,130088,1457],{"class":74},[39,130090,63],{"class":53},[39,130092,1457],{"class":74},[39,130094,63],{"class":53},[39,130096,101496],{"class":74},[39,130098,166],{"class":53},[39,130100,130101],{"class":41,"line":112},[39,130102,115],{"class":53},[19,130104,100371],{},[19,130106,130107],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130109,130110],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130112,130113],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130115,130116],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[476,130118,130120],{"id":130119},"_828-总结","8.2.8 总结",[1404,130122,130123,130134],{},[1407,130124,130125],{},[1410,130126,130127,130130,130132],{},[1413,130128,130129],{"align":24710},"属性",[1413,130131,103671],{"align":24710},[1413,130133,1418],{"align":24710},[1450,130135,130136,130147,130158,130169,130180,130191,130202],{},[1410,130137,130138,130141,130144],{},[1455,130139,130140],{"align":24710},"background-color",[1455,130142,130143],{"align":24710},"背景颜色",[1455,130145,130146],{"align":24710},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1410,130148,130149,130152,130155],{},[1455,130150,130151],{"align":24710},"background-image",[1455,130153,130154],{"align":24710},"背景图片",[1455,130156,130157],{"align":24710},"url(图片路径)",[1410,130159,130160,130163,130166],{},[1455,130161,130162],{"align":24710},"background-repeat",[1455,130164,130165],{"align":24710},"是否平铺",[1455,130167,130168],{"align":24710},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1410,130170,130171,130174,130177],{},[1455,130172,130173],{"align":24710},"background-position",[1455,130175,130176],{"align":24710},"背景位置",[1455,130178,130179],{"align":24710},"length\u002Fposition 分别是x和y坐标",[1410,130181,130182,130185,130188],{},[1455,130183,130184],{"align":24710},"background-attachment",[1455,130186,130187],{"align":24710},"背景附着",[1455,130189,130190],{"align":24710},"scroll(背景滚动) \u002Ffixed (背景固定)",[1410,130192,130193,130196,130199],{},[1455,130194,130195],{"align":24710},"背景简写",[1455,130197,130198],{"align":24710},"书写更简单",[1455,130200,130201],{"align":24710},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1410,130203,130204,130207,130210],{},[1455,130205,130206],{"align":24710},"背景半透明",[1455,130208,130209],{"align":24710},"背景颜色半透明",[1455,130211,130212],{"align":24710},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130214,130215],{},"颜色渐变：",[2585,130217],{"style":127383,"src":130218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[2585,130220],{"style":127383,"src":130221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[476,130223,130225],{"id":130224},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[30,130227,130229],{"className":128274,"code":130228,"language":128276,"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",[26,130230,130231,130246,130265,130284,130303,130322,130341],{"__ignoreMap":35},[39,130232,130233,130235,130237,130239,130241,130244],{"class":41,"line":42},[39,130234,2170],{"class":53},[39,130236,52586],{"class":52275},[39,130238,54461],{"class":49},[39,130240,1117],{"class":53},[39,130242,130243],{"class":237},"\"nav\"",[39,130245,52282],{"class":53},[39,130247,130248,130250,130252,130254,130256,130258,130261,130263],{"class":41,"line":92},[39,130249,53119],{"class":53},[39,130251,922],{"class":52275},[39,130253,62032],{"class":49},[39,130255,1117],{"class":53},[39,130257,62037],{"class":237},[39,130259,130260],{"class":53},">五彩导航1\u003C\u002F",[39,130262,922],{"class":52275},[39,130264,52282],{"class":53},[39,130266,130267,130269,130271,130273,130275,130277,130280,130282],{"class":41,"line":112},[39,130268,53119],{"class":53},[39,130270,922],{"class":52275},[39,130272,62032],{"class":49},[39,130274,1117],{"class":53},[39,130276,62037],{"class":237},[39,130278,130279],{"class":53},">五彩导航2\u003C\u002F",[39,130281,922],{"class":52275},[39,130283,52282],{"class":53},[39,130285,130286,130288,130290,130292,130294,130296,130299,130301],{"class":41,"line":118},[39,130287,53119],{"class":53},[39,130289,922],{"class":52275},[39,130291,62032],{"class":49},[39,130293,1117],{"class":53},[39,130295,62037],{"class":237},[39,130297,130298],{"class":53},">五彩导航3\u003C\u002F",[39,130300,922],{"class":52275},[39,130302,52282],{"class":53},[39,130304,130305,130307,130309,130311,130313,130315,130318,130320],{"class":41,"line":125},[39,130306,53119],{"class":53},[39,130308,922],{"class":52275},[39,130310,62032],{"class":49},[39,130312,1117],{"class":53},[39,130314,62037],{"class":237},[39,130316,130317],{"class":53},">五彩导航4\u003C\u002F",[39,130319,922],{"class":52275},[39,130321,52282],{"class":53},[39,130323,130324,130326,130328,130330,130332,130334,130337,130339],{"class":41,"line":132},[39,130325,53119],{"class":53},[39,130327,922],{"class":52275},[39,130329,62032],{"class":49},[39,130331,1117],{"class":53},[39,130333,62037],{"class":237},[39,130335,130336],{"class":53},">五彩导航5\u003C\u002F",[39,130338,922],{"class":52275},[39,130340,52282],{"class":53},[39,130342,130343,130345,130347],{"class":41,"line":138},[39,130344,52760],{"class":53},[39,130346,52586],{"class":52275},[39,130348,52282],{"class":53},[30,130350,130352],{"className":127527,"code":130351,"language":127529,"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",[26,130353,130354,130363,130373,130385,130397,130407,130419,130429,130433,130458,130481,130504,130527],{"__ignoreMap":35},[39,130355,130356,130359,130361],{"class":41,"line":42},[39,130357,130358],{"class":49},".nav",[39,130360,60],{"class":52275},[39,130362,16545],{"class":53},[39,130364,130365,130367,130369,130371],{"class":41,"line":92},[39,130366,129143],{"class":74},[39,130368,52412],{"class":53},[39,130370,73358],{"class":74},[39,130372,318],{"class":53},[39,130374,130375,130377,130379,130381,130383],{"class":41,"line":112},[39,130376,71543],{"class":74},[39,130378,52412],{"class":53},[39,130380,2077],{"class":74},[39,130382,52467],{"class":45},[39,130384,318],{"class":53},[39,130386,130387,130389,130391,130393,130395],{"class":41,"line":118},[39,130388,71763],{"class":74},[39,130390,52412],{"class":53},[39,130392,2116],{"class":74},[39,130394,52467],{"class":45},[39,130396,318],{"class":53},[39,130398,130399,130401,130403,130405],{"class":41,"line":125},[39,130400,71501],{"class":74},[39,130402,52412],{"class":53},[39,130404,52567],{"class":74},[39,130406,318],{"class":53},[39,130408,130409,130411,130413,130415,130417],{"class":41,"line":132},[39,130410,128211],{"class":74},[39,130412,52412],{"class":53},[39,130414,2116],{"class":74},[39,130416,52467],{"class":45},[39,130418,318],{"class":53},[39,130420,130421,130423,130425,130427],{"class":41,"line":138},[39,130422,71880],{"class":74},[39,130424,52412],{"class":53},[39,130426,61817],{"class":74},[39,130428,318],{"class":53},[39,130430,130431],{"class":41,"line":169},[39,130432,115],{"class":53},[39,130434,130435,130437,130439,130442,130444,130446,130449,130451,130453,130455],{"class":41,"line":190},[39,130436,130358],{"class":49},[39,130438,60],{"class":52275},[39,130440,130441],{"class":49},":nth-child",[39,130443,54],{"class":53},[39,130445,1483],{"class":74},[39,130447,130448],{"class":53},") { ",[39,130450,130140],{"class":74},[39,130452,52412],{"class":53},[39,130454,129558],{"class":74},[39,130456,130457],{"class":53},"; }\n",[39,130459,130460,130462,130464,130466,130468,130470,130472,130474,130476,130479],{"class":41,"line":202},[39,130461,130358],{"class":49},[39,130463,60],{"class":52275},[39,130465,130441],{"class":49},[39,130467,54],{"class":53},[39,130469,1345],{"class":74},[39,130471,130448],{"class":53},[39,130473,130140],{"class":74},[39,130475,52412],{"class":53},[39,130477,130478],{"class":74},"#ff0000",[39,130480,130457],{"class":53},[39,130482,130483,130485,130487,130489,130491,130493,130495,130497,130499,130502],{"class":41,"line":207},[39,130484,130358],{"class":49},[39,130486,60],{"class":52275},[39,130488,130441],{"class":49},[39,130490,54],{"class":53},[39,130492,1339],{"class":74},[39,130494,130448],{"class":53},[39,130496,130140],{"class":74},[39,130498,52412],{"class":53},[39,130500,130501],{"class":74},"#00a4ff",[39,130503,130457],{"class":53},[39,130505,130506,130508,130510,130512,130514,130516,130518,130520,130522,130525],{"class":41,"line":212},[39,130507,130358],{"class":49},[39,130509,60],{"class":52275},[39,130511,130441],{"class":49},[39,130513,54],{"class":53},[39,130515,1558],{"class":74},[39,130517,130448],{"class":53},[39,130519,130140],{"class":74},[39,130521,52412],{"class":53},[39,130523,130524],{"class":74},"#ff00ff",[39,130526,130457],{"class":53},[39,130528,130529,130531,130533,130535,130537,130539,130541,130543,130545,130548],{"class":41,"line":223},[39,130530,130358],{"class":49},[39,130532,60],{"class":52275},[39,130534,130441],{"class":49},[39,130536,54],{"class":53},[39,130538,1583],{"class":74},[39,130540,130448],{"class":53},[39,130542,130140],{"class":74},[39,130544,52412],{"class":53},[39,130546,130547],{"class":74},"#00ff00",[39,130549,130457],{"class":53},[14,130551,130553],{"id":130552},"_83-css三大特性","8.3 css三大特性",[476,130555,130557],{"id":130556},"_831-层叠性","8.3.1 层叠性",[19,130559,130560],{},"为了解决样式冲突问题",[19,130562,130563],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130565,130566],{},"   ②样式不冲突，不会层叠",[476,130568,130570],{"id":130569},"_832-继承性","8.3.2 继承性",[19,130572,130573],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130575,130576],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[30,130578,130580],{"className":127527,"code":130579,"language":127529,"meta":35,"style":35},"p {\n  color: #333;\n}\n",[26,130581,130582,130588,130598],{"__ignoreMap":35},[39,130583,130584,130586],{"class":41,"line":42},[39,130585,19],{"class":52275},[39,130587,16545],{"class":53},[39,130589,130590,130592,130594,130596],{"class":41,"line":92},[39,130591,71880],{"class":74},[39,130593,52412],{"class":53},[39,130595,63344],{"class":74},[39,130597,318],{"class":53},[39,130599,130600],{"class":41,"line":112},[39,130601,115],{"class":53},[2585,130603],{"style":127383,"src":130604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130606,130607],{},"解释：①行高可以跟单位也可以不跟单位",[19,130609,130610],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130612,130613],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130615,130616],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[476,130618,130620],{"id":130619},"_833-优先级","8.3.3 优先级",[328,130622,130623,130626],{},[331,130624,130625],{},"选择器相同，则执行层叠性",[331,130627,130628],{},"选择器不同，则根据选择器权重执行",[1404,130630,130631,130641],{},[1407,130632,130633],{},[1410,130634,130635,130638],{},[1413,130636,130637],{"align":24710},"选择器",[1413,130639,130640],{"align":24710},"选择器权重",[1450,130642,130643,130651,130659,130667,130675,130683],{},[1410,130644,130645,130648],{},[1455,130646,130647],{"align":24710},"继承 或者*",[1455,130649,130650],{"align":24710},"0，0，0，0",[1410,130652,130653,130656],{},[1455,130654,130655],{"align":24710},"标签选择器",[1455,130657,130658],{"align":24710},"0，0，0，1",[1410,130660,130661,130664],{},[1455,130662,130663],{"align":24710},"类选择器，伪类选择器",[1455,130665,130666],{"align":24710},"0，0，1，0",[1410,130668,130669,130672],{},[1455,130670,130671],{"align":24710},"ID选择器",[1455,130673,130674],{"align":24710},"0，1，0，0",[1410,130676,130677,130680],{},[1455,130678,130679],{"align":24710},"行内样式",[1455,130681,130682],{"align":24710},"1，0，0，0",[1410,130684,130685,130688],{},[1455,130686,130687],{"align":24710},"！important",[1455,130689,130690],{"align":24710},"无穷大",[19,130692,130693],{},"! important用法：",[30,130695,130697],{"className":127527,"code":130696,"language":127529,"meta":35,"style":35},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[26,130698,130699,130704,130710,130723,130727,130732,130738,130748],{"__ignoreMap":35},[39,130700,130701],{"class":41,"line":42},[39,130702,130703],{"class":128},"\u002F* !important 拥有最高优先级 *\u002F\n",[39,130705,130706,130708],{"class":41,"line":92},[39,130707,52586],{"class":52275},[39,130709,16545],{"class":53},[39,130711,130712,130714,130716,130718,130721],{"class":41,"line":112},[39,130713,71880],{"class":74},[39,130715,52412],{"class":53},[39,130717,52620],{"class":74},[39,130719,130720],{"class":45}," !important",[39,130722,318],{"class":53},[39,130724,130725],{"class":41,"line":118},[39,130726,115],{"class":53},[39,130728,130729],{"class":41,"line":125},[39,130730,130731],{"class":128},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[39,130733,130734,130736],{"class":41,"line":132},[39,130735,52586],{"class":52275},[39,130737,16545],{"class":53},[39,130739,130740,130742,130744,130746],{"class":41,"line":138},[39,130741,71880],{"class":74},[39,130743,52412],{"class":53},[39,130745,58396],{"class":74},[39,130747,318],{"class":53},[39,130749,130750],{"class":41,"line":169},[39,130751,115],{"class":53},[19,130753,130754],{},"优先级注意点：",[19,130756,130757],{},"①权重是有4组数字组成,但是不会有进位",[19,130759,130760],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,130762,130763],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,130765,130766],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,130768,130769],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,130771,130772],{},"⑥复合选择器",[1404,130774,130775,130785],{},[1407,130776,130777],{},[1410,130778,130779,130782],{},[1413,130780,130781],{"align":24710},"div ul li",[1413,130783,130784],{"align":24710},"0,0,0,3",[1450,130786,130787,130795,130803],{},[1410,130788,130789,130792],{},[1455,130790,130791],{"align":24710},".nav ul li",[1455,130793,130794],{"align":24710},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1410,130796,130797,130800],{},[1455,130798,130799],{"align":24710},"a:hover",[1455,130801,130802],{"align":24710},"0,0,1,1",[1410,130804,130805,130808],{},[1455,130806,130807],{"align":24710},".nav a",[1455,130809,130802],{"align":24710},[1192,130811,130812],{},"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":92,"depth":92,"links":130814},[130815,130823,130834],{"id":128923,"depth":92,"text":128924,"children":130816},[130817,130818,130819,130820,130821,130822],{"id":128936,"depth":112,"text":128937},{"id":129008,"depth":112,"text":129009},{"id":129080,"depth":112,"text":129081},{"id":129111,"depth":112,"text":129112},{"id":129118,"depth":112,"text":129119},{"id":129271,"depth":112,"text":129272},{"id":129579,"depth":92,"text":129580,"children":130824},[130825,130826,130827,130828,130829,130830,130831,130832,130833],{"id":129586,"depth":112,"text":129587},{"id":129596,"depth":112,"text":129597},{"id":129692,"depth":112,"text":129693},{"id":129765,"depth":112,"text":129766},{"id":129920,"depth":112,"text":129921},{"id":130008,"depth":112,"text":130009},{"id":130060,"depth":112,"text":130061},{"id":130119,"depth":112,"text":130120},{"id":130224,"depth":112,"text":130225},{"id":130552,"depth":92,"text":130553,"children":130835},[130836,130837,130838],{"id":130556,"depth":112,"text":130557},{"id":130569,"depth":112,"text":130570},{"id":130619,"depth":112,"text":130620},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128915,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130845,"title":130846,"body":130847,"description":24350,"extension":1203,"meta":132437,"navigation":121,"path":132438,"seo":132439,"stem":132440,"__hash__":132441},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130848,"toc":132416},[130849,130852,130856,130859,130862,130865,130868,130871,130874,130877,130881,130889,130926,130962,130965,130979,130984,131018,131021,131114,131119,131122,131152,131155,131160,131168,131172,131179,131225,131269,131274,131277,131280,131283,131286,131289,131292,131294,131297,131301,131306,131350,131355,131358,131361,131398,131403,131406,131409,131412,131415,131447,131450,131453,131456,131488,131491,131494,131497,131501,131504,131536,131539,131543,131563,131566,131574,131577,131581,131586,131589,131621,131626,131629,131667,131671,131676,131679,131682,131713,131716,131733,131738,131790,131850,131855,131909,131947,131951,131955,131958,131962,131970,131973,131975,131986,131991,132039,132073,132076,132079,132082,132085,132129,132132,132135,132138,132141,132144,132147,132191,132194,132197,132200,132203,132206,132209,132215,132218,132262,132265,132268,132271,132274,132277,132321,132324,132326,132329,132333,132337,132375,132379,132382,132385,132389,132397,132401,132404,132407,132410,132413],[10,130850,130846],{"id":130851},"_9-css盒模型浮动与切图",[14,130853,130855],{"id":130854},"_91-盒子模型","9.1 盒子模型",[19,130857,130858],{},"利用盒子来设计网页",[19,130860,130861],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130863,130864],{},"网页布局设置：",[19,130866,130867],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130869,130870],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130872,130873],{},"③往盒子里装内容",[2585,130875],{"style":127383,"src":130876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[476,130878,130880],{"id":130879},"_911-边框border","9.1.1 边框（border）",[328,130882,130883,130886],{},[331,130884,130885],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[331,130887,130888],{},"语法",[30,130890,130892],{"className":127527,"code":130891,"language":127529,"meta":35,"style":35},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[26,130893,130894,130899,130905,130922],{"__ignoreMap":35},[39,130895,130896],{"class":41,"line":42},[39,130897,130898],{"class":128},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[39,130900,130901,130903],{"class":41,"line":92},[39,130902,52586],{"class":52275},[39,130904,16545],{"class":53},[39,130906,130907,130909,130911,130913,130915,130917,130920],{"class":41,"line":112},[39,130908,71871],{"class":74},[39,130910,52412],{"class":53},[39,130912,1483],{"class":74},[39,130914,52467],{"class":45},[39,130916,52496],{"class":74},[39,130918,130919],{"class":74}," #ccc",[39,130921,318],{"class":53},[39,130923,130924],{"class":41,"line":118},[39,130925,115],{"class":53},[1404,130927,130928,130936],{},[1407,130929,130930],{},[1410,130931,130932,130934],{},[1413,130933,130129],{"align":24710},[1413,130935,103671],{"align":24710},[1450,130937,130938,130946,130954],{},[1410,130939,130940,130943],{},[1455,130941,130942],{"align":24710},"border-width",[1455,130944,130945],{"align":24710},"定义边框粗细，单位是px",[1410,130947,130948,130951],{},[1455,130949,130950],{"align":24710},"border-style",[1455,130952,130953],{"align":24710},"边框的样式",[1410,130955,130956,130959],{},[1455,130957,130958],{"align":24710},"border-color",[1455,130960,130961],{"align":24710},"边框的颜色",[19,130963,130964],{},"边框样式 border-style 可以设置如下值：",[489,130966,130967,130970,130973,130976],{},[331,130968,130969],{},"none：没有边框即忽略所有边框的宽度（默认值）",[331,130971,130972],{},"solid：边框为单实线(最为常用的)",[331,130974,130975],{},"dashed：边框为虚线",[331,130977,130978],{},"dotted：边框为点线",[328,130980,130981],{"start":112},[331,130982,130983],{},"边框的合写分写",[30,130985,130986],{"className":127527,"code":130891,"language":127529,"meta":35,"style":35},[26,130987,130988,130992,130998,131014],{"__ignoreMap":35},[39,130989,130990],{"class":41,"line":42},[39,130991,130898],{"class":128},[39,130993,130994,130996],{"class":41,"line":92},[39,130995,52586],{"class":52275},[39,130997,16545],{"class":53},[39,130999,131000,131002,131004,131006,131008,131010,131012],{"class":41,"line":112},[39,131001,71871],{"class":74},[39,131003,52412],{"class":53},[39,131005,1483],{"class":74},[39,131007,52467],{"class":45},[39,131009,52496],{"class":74},[39,131011,130919],{"class":74},[39,131013,318],{"class":53},[39,131015,131016],{"class":41,"line":118},[39,131017,115],{"class":53},[19,131019,131020],{},"边框分开写法：",[30,131022,131024],{"className":127527,"code":131023,"language":127529,"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",[26,131025,131026,131031,131037,131055,131073,131092,131110],{"__ignoreMap":35},[39,131027,131028],{"class":41,"line":42},[39,131029,131030],{"class":128},"\u002F* 边框分开写法 *\u002F\n",[39,131032,131033,131035],{"class":41,"line":92},[39,131034,52586],{"class":52275},[39,131036,16545],{"class":53},[39,131038,131039,131042,131044,131046,131048,131050,131053],{"class":41,"line":112},[39,131040,131041],{"class":74},"  border-top",[39,131043,52412],{"class":53},[39,131045,1483],{"class":74},[39,131047,52467],{"class":45},[39,131049,52496],{"class":74},[39,131051,131052],{"class":74}," #000",[39,131054,318],{"class":53},[39,131056,131057,131060,131062,131064,131066,131068,131071],{"class":41,"line":118},[39,131058,131059],{"class":74},"  border-right",[39,131061,52412],{"class":53},[39,131063,1345],{"class":74},[39,131065,52467],{"class":45},[39,131067,63216],{"class":74},[39,131069,131070],{"class":74}," #333",[39,131072,318],{"class":53},[39,131074,131075,131078,131080,131082,131084,131087,131090],{"class":41,"line":125},[39,131076,131077],{"class":74},"  border-bottom",[39,131079,52412],{"class":53},[39,131081,1339],{"class":74},[39,131083,52467],{"class":45},[39,131085,131086],{"class":74}," dotted",[39,131088,131089],{"class":74}," #666",[39,131091,318],{"class":53},[39,131093,131094,131097,131099,131101,131103,131105,131108],{"class":41,"line":132},[39,131095,131096],{"class":74},"  border-left",[39,131098,52412],{"class":53},[39,131100,1483],{"class":74},[39,131102,52467],{"class":45},[39,131104,52496],{"class":74},[39,131106,131107],{"class":74}," #999",[39,131109,318],{"class":53},[39,131111,131112],{"class":41,"line":138},[39,131113,115],{"class":53},[328,131115,131116],{"start":118},[331,131117,131118],{},"表格的细线边框",[19,131120,131121],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[30,131123,131125],{"className":127527,"code":131124,"language":127529,"meta":35,"style":35},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[26,131126,131127,131132,131138,131148],{"__ignoreMap":35},[39,131128,131129],{"class":41,"line":42},[39,131130,131131],{"class":128},"\u002F* 表格细线边框合并 *\u002F\n",[39,131133,131134,131136],{"class":41,"line":92},[39,131135,1404],{"class":52275},[39,131137,16545],{"class":53},[39,131139,131140,131142,131144,131146],{"class":41,"line":112},[39,131141,71553],{"class":74},[39,131143,52412],{"class":53},[39,131145,66010],{"class":74},[39,131147,318],{"class":53},[39,131149,131150],{"class":41,"line":118},[39,131151,115],{"class":53},[19,131153,131154],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[328,131156,131157],{"start":125},[331,131158,131159],{},"解决边框额外增加盒子的实际大小的方法：",[489,131161,131162,131165],{},[331,131163,131164],{},"测量盒子大小的时候,不量边框",[331,131166,131167],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[476,131169,131171],{"id":131170},"_912-内边距","9.1.2 内边距",[328,131173,131174,131177],{},[331,131175,131176],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[331,131178,130888],{},[1404,131180,131181,131191],{},[1407,131182,131183],{},[1410,131184,131185,131188],{},[1413,131186,131187],{"align":24710},"值的个数",[1413,131189,131190],{"align":24710},"表达意思",[1450,131192,131193,131201,131209,131217],{},[1410,131194,131195,131198],{},[1455,131196,131197],{"align":24710},"padding: 5px;",[1455,131199,131200],{"align":24710},"1个值，代表上下左右都有5个元素",[1410,131202,131203,131206],{},[1455,131204,131205],{"align":24710},"padding: 5px 10px;",[1455,131207,131208],{"align":24710},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1410,131210,131211,131214],{},[1455,131212,131213],{"align":24710},"padding: 5px 10px 20px;",[1455,131215,131216],{"align":24710},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1410,131218,131219,131222],{},[1455,131220,131221],{"align":24710},"padding: 5px 10px 20px 30px;",[1455,131223,131224],{"align":24710},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1404,131226,131227,131235],{},[1407,131228,131229],{},[1410,131230,131231,131233],{},[1413,131232,130129],{"align":24710},[1413,131234,103671],{"align":24710},[1450,131236,131237,131245,131253,131261],{},[1410,131238,131239,131242],{},[1455,131240,131241],{"align":24710},"padding-left",[1455,131243,131244],{"align":24710},"左内边距",[1410,131246,131247,131250],{},[1455,131248,131249],{"align":24710},"padding-right",[1455,131251,131252],{"align":24710},"右内边距",[1410,131254,131255,131258],{},[1455,131256,131257],{"align":24710},"padding-top",[1455,131259,131260],{"align":24710},"上内边距",[1410,131262,131263,131266],{},[1455,131264,131265],{"align":24710},"padding-bottom",[1455,131267,131268],{"align":24710},"下内边距",[328,131270,131271],{"start":112},[331,131272,131273],{},"内边距会影响盒子的实际大小",[19,131275,131276],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131278,131279],{},"①内容和边框有了距离，添加了内边距",[19,131281,131282],{},"②padding影响了盒子实际大小",[19,131284,131285],{},"内边距对盒子大小的影响：",[19,131287,131288],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131290,131291],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131293,96195],{},[19,131295,131296],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[476,131298,131300],{"id":131299},"_913-外边距","9.1.3 外边距",[328,131302,131303],{},[331,131304,131305],{},"控制盒子与盒子之间的距离",[1404,131307,131308,131316],{},[1407,131309,131310],{},[1410,131311,131312,131314],{},[1413,131313,130129],{"align":24710},[1413,131315,103671],{"align":24710},[1450,131317,131318,131326,131334,131342],{},[1410,131319,131320,131323],{},[1455,131321,131322],{"align":24710},"margin-left",[1455,131324,131325],{"align":24710},"左外边距",[1410,131327,131328,131331],{},[1455,131329,131330],{"align":24710},"margin-right",[1455,131332,131333],{"align":24710},"右外边距",[1410,131335,131336,131339],{},[1455,131337,131338],{"align":24710},"margin-top",[1455,131340,131341],{"align":24710},"上外边距",[1410,131343,131344,131347],{},[1455,131345,131346],{"align":24710},"margin-bottom",[1455,131348,131349],{"align":24710},"下外边距",[328,131351,131352],{"start":92},[331,131353,131354],{},"外边距可以让块级盒子水平居中的两个条件：",[19,131356,131357],{},"①盒子必须指定了宽度（width）",[19,131359,131360],{},"②盒子左右的外边距都设置为 auto",[30,131362,131364],{"className":127527,"code":131363,"language":127529,"meta":35,"style":35},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[26,131365,131366,131371,131378,131394],{"__ignoreMap":35},[39,131367,131368],{"class":41,"line":42},[39,131369,131370],{"class":128},"\u002F* margin 复合写法（同上） *\u002F\n",[39,131372,131373,131376],{"class":41,"line":92},[39,131374,131375],{"class":49},".box",[39,131377,16545],{"class":53},[39,131379,131380,131382,131384,131386,131388,131391],{"class":41,"line":112},[39,131381,71445],{"class":74},[39,131383,52412],{"class":53},[39,131385,1457],{"class":74},[39,131387,52531],{"class":74},[39,131389,131390],{"class":53},";  ",[39,131392,131393],{"class":128},"\u002F* 块级盒子水平居中 *\u002F\n",[39,131395,131396],{"class":41,"line":118},[39,131397,115],{"class":53},[328,131399,131400],{"start":112},[331,131401,131402],{},"外边距塌陷问题",[19,131404,131405],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[2585,131407],{"style":127383,"src":131408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,131410,131411],{},"解决方案：",[19,131413,131414],{},"①可以为父亲元素定义上边距",[30,131416,131417],{"className":127527,"code":131363,"language":127529,"meta":35,"style":35},[26,131418,131419,131423,131429,131443],{"__ignoreMap":35},[39,131420,131421],{"class":41,"line":42},[39,131422,131370],{"class":128},[39,131424,131425,131427],{"class":41,"line":92},[39,131426,131375],{"class":49},[39,131428,16545],{"class":53},[39,131430,131431,131433,131435,131437,131439,131441],{"class":41,"line":112},[39,131432,71445],{"class":74},[39,131434,52412],{"class":53},[39,131436,1457],{"class":74},[39,131438,52531],{"class":74},[39,131440,131390],{"class":53},[39,131442,131393],{"class":128},[39,131444,131445],{"class":41,"line":118},[39,131446,115],{"class":53},[19,131448,131449],{},"②可以为父亲元素定义上内边距",[19,131451,131452],{},"③可以为父亲元素添加overflow:hidden",[2585,131454],{"style":127383,"src":131455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[30,131457,131458],{"className":127527,"code":131363,"language":127529,"meta":35,"style":35},[26,131459,131460,131464,131470,131484],{"__ignoreMap":35},[39,131461,131462],{"class":41,"line":42},[39,131463,131370],{"class":128},[39,131465,131466,131468],{"class":41,"line":92},[39,131467,131375],{"class":49},[39,131469,16545],{"class":53},[39,131471,131472,131474,131476,131478,131480,131482],{"class":41,"line":112},[39,131473,71445],{"class":74},[39,131475,52412],{"class":53},[39,131477,1457],{"class":74},[39,131479,52531],{"class":74},[39,131481,131390],{"class":53},[39,131483,131393],{"class":128},[39,131485,131486],{"class":41,"line":118},[39,131487,115],{"class":53},[2585,131489],{"style":127383,"src":131490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131492,131493],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131495,131496],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[476,131498,131500],{"id":131499},"_914-清除内外边距","9.1.4 清除内外边距",[19,131502,131503],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[30,131505,131506],{"className":127527,"code":131363,"language":127529,"meta":35,"style":35},[26,131507,131508,131512,131518,131532],{"__ignoreMap":35},[39,131509,131510],{"class":41,"line":42},[39,131511,131370],{"class":128},[39,131513,131514,131516],{"class":41,"line":92},[39,131515,131375],{"class":49},[39,131517,16545],{"class":53},[39,131519,131520,131522,131524,131526,131528,131530],{"class":41,"line":112},[39,131521,71445],{"class":74},[39,131523,52412],{"class":53},[39,131525,1457],{"class":74},[39,131527,52531],{"class":74},[39,131529,131390],{"class":53},[39,131531,131393],{"class":128},[39,131533,131534],{"class":41,"line":118},[39,131535,115],{"class":53},[19,131537,131538],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[476,131540,131542],{"id":131541},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[489,131544,131545,131548,131551,131554,131557,131560],{},[331,131546,131547],{},"文件→打开 ：可以打开我们要测量的图片",[331,131549,131550],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[331,131552,131553],{},"右击标尺，把里面的单位改为像素",[331,131555,131556],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[331,131558,131559],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[331,131561,131562],{},"用选区拖动 可以测量大小",[2585,131564],{"style":127383,"src":131565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[489,131567,131568,131571],{},[331,131569,131570],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[331,131572,131573],{},"吸管取色工具",[2585,131575],{"style":127383,"src":131576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[476,131578,131580],{"id":131579},"_916-案例","9.1.6 案例",[328,131582,131583],{},[331,131584,131585],{},"小米商品",[2585,131587],{"style":127383,"src":131588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[30,131590,131591],{"className":127527,"code":131363,"language":127529,"meta":35,"style":35},[26,131592,131593,131597,131603,131617],{"__ignoreMap":35},[39,131594,131595],{"class":41,"line":42},[39,131596,131370],{"class":128},[39,131598,131599,131601],{"class":41,"line":92},[39,131600,131375],{"class":49},[39,131602,16545],{"class":53},[39,131604,131605,131607,131609,131611,131613,131615],{"class":41,"line":112},[39,131606,71445],{"class":74},[39,131608,52412],{"class":53},[39,131610,1457],{"class":74},[39,131612,52531],{"class":74},[39,131614,131390],{"class":53},[39,131616,131393],{"class":128},[39,131618,131619],{"class":41,"line":118},[39,131620,115],{"class":53},[328,131622,131623],{"start":92},[331,131624,131625],{},"快报模块",[2585,131627],{"style":127383,"src":131628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[30,131630,131632],{"className":128274,"code":131631,"language":128276,"meta":35,"style":35},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[26,131633,131634,131639,131654,131659],{"__ignoreMap":35},[39,131635,131636],{"class":41,"line":42},[39,131637,131638],{"class":128},"\u003C!-- HTML 代码示例 -->\n",[39,131640,131641,131643,131645,131647,131649,131652],{"class":41,"line":92},[39,131642,2170],{"class":53},[39,131644,52586],{"class":52275},[39,131646,54461],{"class":49},[39,131648,1117],{"class":53},[39,131650,131651],{"class":237},"\"example\"",[39,131653,52282],{"class":53},[39,131655,131656],{"class":41,"line":112},[39,131657,131658],{"class":53},"  示例内容\n",[39,131660,131661,131663,131665],{"class":41,"line":118},[39,131662,52760],{"class":53},[39,131664,52586],{"class":52275},[39,131666,52282],{"class":53},[476,131668,131670],{"id":131669},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[328,131672,131673],{},[331,131674,131675],{},"圆角边框",[19,131677,131678],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[2585,131680],{"style":127383,"src":131681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[30,131683,131685],{"className":127527,"code":131684,"language":127529,"meta":35,"style":35},"div {\n  border: 1px solid #ccc;\n}\n",[26,131686,131687,131693,131709],{"__ignoreMap":35},[39,131688,131689,131691],{"class":41,"line":42},[39,131690,52586],{"class":52275},[39,131692,16545],{"class":53},[39,131694,131695,131697,131699,131701,131703,131705,131707],{"class":41,"line":92},[39,131696,71871],{"class":74},[39,131698,52412],{"class":53},[39,131700,1483],{"class":74},[39,131702,52467],{"class":45},[39,131704,52496],{"class":74},[39,131706,130919],{"class":74},[39,131708,318],{"class":53},[39,131710,131711],{"class":41,"line":112},[39,131712,115],{"class":53},[19,131714,131715],{},"解释:",[489,131717,131718,131721,131724,131727,131730],{},[331,131719,131720],{},"参数值可以为数值或百分比的形式",[331,131722,131723],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[331,131725,131726],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[331,131728,131729],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[331,131731,131732],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[328,131734,131735],{"start":92},[331,131736,131737],{},"盒子阴影",[30,131739,131741],{"className":127527,"code":131740,"language":127529,"meta":35,"style":35},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[26,131742,131743,131749,131786],{"__ignoreMap":35},[39,131744,131745,131747],{"class":41,"line":42},[39,131746,52586],{"class":52275},[39,131748,16545],{"class":53},[39,131750,131751,131754,131756,131758,131760,131762,131764,131766,131768,131770,131772,131774,131776,131778,131780,131782,131784],{"class":41,"line":92},[39,131752,131753],{"class":74},"  box-shadow",[39,131755,52412],{"class":53},[39,131757,1457],{"class":74},[39,131759,15728],{"class":74},[39,131761,52467],{"class":45},[39,131763,75],{"class":74},[39,131765,52467],{"class":45},[39,131767,79742],{"class":74},[39,131769,54],{"class":53},[39,131771,1457],{"class":74},[39,131773,63],{"class":53},[39,131775,1457],{"class":74},[39,131777,63],{"class":53},[39,131779,1457],{"class":74},[39,131781,63],{"class":53},[39,131783,87185],{"class":74},[39,131785,166],{"class":53},[39,131787,131788],{"class":41,"line":112},[39,131789,115],{"class":53},[1404,131791,131792,131800],{},[1407,131793,131794],{},[1410,131795,131796,131798],{},[1413,131797,1418],{"align":24710},[1413,131799,28464],{"align":24710},[1450,131801,131802,131810,131818,131826,131834,131842],{},[1410,131803,131804,131807],{},[1455,131805,131806],{"align":24710},"h-shadow",[1455,131808,131809],{"align":24710},"必需,水平阴影的位置,允许负值",[1410,131811,131812,131815],{},[1455,131813,131814],{"align":24710},"v-shadow",[1455,131816,131817],{"align":24710},"必需,垂直阴影的位置,允许负值",[1410,131819,131820,131823],{},[1455,131821,131822],{"align":24710},"blur",[1455,131824,131825],{"align":24710},"可选,模糊距离,就是影子的虚实",[1410,131827,131828,131831],{},[1455,131829,131830],{"align":24710},"spread",[1455,131832,131833],{"align":24710},"可选,阴影尺寸",[1410,131835,131836,131839],{},[1455,131837,131838],{"align":24710},"color",[1455,131840,131841],{"align":24710},"可选,阴影的颜色",[1410,131843,131844,131847],{},[1455,131845,131846],{"align":24710},"inset",[1455,131848,131849],{"align":24710},"可选,将外部阴影(outset)改为内部阴影",[328,131851,131852],{"start":112},[331,131853,131854],{},"文字阴影",[30,131856,131858],{"className":127527,"code":131857,"language":127529,"meta":35,"style":35},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[26,131859,131860,131866,131905],{"__ignoreMap":35},[39,131861,131862,131864],{"class":41,"line":42},[39,131863,19],{"class":52275},[39,131865,16545],{"class":53},[39,131867,131868,131871,131873,131875,131877,131879,131881,131883,131885,131887,131889,131891,131893,131895,131897,131899,131901,131903],{"class":41,"line":92},[39,131869,131870],{"class":74},"  text-shadow",[39,131872,52412],{"class":53},[39,131874,1483],{"class":74},[39,131876,52467],{"class":45},[39,131878,26093],{"class":74},[39,131880,52467],{"class":45},[39,131882,15728],{"class":74},[39,131884,52467],{"class":45},[39,131886,79742],{"class":74},[39,131888,54],{"class":53},[39,131890,1457],{"class":74},[39,131892,63],{"class":53},[39,131894,1457],{"class":74},[39,131896,63],{"class":53},[39,131898,1457],{"class":74},[39,131900,63],{"class":53},[39,131902,101496],{"class":74},[39,131904,166],{"class":53},[39,131906,131907],{"class":41,"line":112},[39,131908,115],{"class":53},[1404,131910,131911,131919],{},[1407,131912,131913],{},[1410,131914,131915,131917],{},[1413,131916,1418],{"align":24710},[1413,131918,28464],{"align":24710},[1450,131920,131921,131927,131934,131941],{},[1410,131922,131923,131925],{},[1455,131924,131806],{"align":24710},[1455,131926,131809],{"align":24710},[1410,131928,131929,131931],{},[1455,131930,131814],{"align":24710},[1455,131932,131933],{"align":24710},"必需,垂直阴影位置,允许负值",[1410,131935,131936,131938],{},[1455,131937,131822],{"align":24710},[1455,131939,131940],{"align":24710},"可选,模糊的距离",[1410,131942,131943,131945],{},[1455,131944,131838],{"align":24710},[1455,131946,131841],{"align":24710},[14,131948,131950],{"id":131949},"_92-浮动","9.2 浮动",[476,131952,131954],{"id":131953},"_921-浮动介绍","9.2.1 浮动介绍",[19,131956,131957],{},"在16.2中详细介绍",[476,131959,131961],{"id":131960},"_922-清除浮动","9.2.2 清除浮动",[328,131963,131964,131967],{},[331,131965,131966],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[331,131968,131969],{},"清除浮动的本质",[19,131971,131972],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131974,10093],{},[489,131976,131977,131980,131983],{},[331,131978,131979],{},"如果父盒子本身有高度，则不需要清除浮动",[331,131981,131982],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[331,131984,131985],{},"父级有了高度，就不会影响下面的标准流了",[328,131987,131988],{"start":112},[331,131989,131990],{},"清除浮动样式",[30,131992,131994],{"className":127527,"code":131993,"language":127529,"meta":35,"style":35},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[26,131995,131996,132003,132014,132018,132025,132035],{"__ignoreMap":35},[39,131997,131998,132001],{"class":41,"line":42},[39,131999,132000],{"class":49},".left",[39,132002,16545],{"class":53},[39,132004,132005,132008,132010,132012],{"class":41,"line":92},[39,132006,132007],{"class":74},"  float",[39,132009,52412],{"class":53},[39,132011,24710],{"class":74},[39,132013,318],{"class":53},[39,132015,132016],{"class":41,"line":112},[39,132017,115],{"class":53},[39,132019,132020,132023],{"class":41,"line":118},[39,132021,132022],{"class":49},".right",[39,132024,16545],{"class":53},[39,132026,132027,132029,132031,132033],{"class":41,"line":125},[39,132028,132007],{"class":74},[39,132030,52412],{"class":53},[39,132032,73497],{"class":74},[39,132034,318],{"class":53},[39,132036,132037],{"class":41,"line":132},[39,132038,115],{"class":53},[1404,132040,132041,132049],{},[1407,132042,132043],{},[1410,132044,132045,132047],{},[1413,132046,127991],{"align":24710},[1413,132048,28464],{"align":24710},[1450,132050,132051,132058,132065],{},[1410,132052,132053,132055],{},[1455,132054,24710],{"align":24710},[1455,132056,132057],{"align":24710},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1410,132059,132060,132062],{},[1455,132061,73497],{"align":24710},[1455,132063,132064],{"align":24710},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1410,132066,132067,132070],{},[1455,132068,132069],{"align":24710},"both",[1455,132071,132072],{"align":24710},"同时清除左右侧浮动的影响",[19,132074,132075],{},"法一",[19,132077,132078],{},"额外标签法也称为隔墙法",[19,132080,132081],{},"使用方式：",[19,132083,132084],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[30,132086,132087],{"className":127527,"code":131993,"language":127529,"meta":35,"style":35},[26,132088,132089,132095,132105,132109,132115,132125],{"__ignoreMap":35},[39,132090,132091,132093],{"class":41,"line":42},[39,132092,132000],{"class":49},[39,132094,16545],{"class":53},[39,132096,132097,132099,132101,132103],{"class":41,"line":92},[39,132098,132007],{"class":74},[39,132100,52412],{"class":53},[39,132102,24710],{"class":74},[39,132104,318],{"class":53},[39,132106,132107],{"class":41,"line":112},[39,132108,115],{"class":53},[39,132110,132111,132113],{"class":41,"line":118},[39,132112,132022],{"class":49},[39,132114,16545],{"class":53},[39,132116,132117,132119,132121,132123],{"class":41,"line":125},[39,132118,132007],{"class":74},[39,132120,52412],{"class":53},[39,132122,73497],{"class":74},[39,132124,318],{"class":53},[39,132126,132127],{"class":41,"line":132},[39,132128,115],{"class":53},[19,132130,132131],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132133,132134],{},"优点： 通俗易懂，书写方便",[19,132136,132137],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132139,132140],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132142,132143],{},"法二",[19,132145,132146],{},"父级添加overflow属性",[30,132148,132149],{"className":127527,"code":131993,"language":127529,"meta":35,"style":35},[26,132150,132151,132157,132167,132171,132177,132187],{"__ignoreMap":35},[39,132152,132153,132155],{"class":41,"line":42},[39,132154,132000],{"class":49},[39,132156,16545],{"class":53},[39,132158,132159,132161,132163,132165],{"class":41,"line":92},[39,132160,132007],{"class":74},[39,132162,52412],{"class":53},[39,132164,24710],{"class":74},[39,132166,318],{"class":53},[39,132168,132169],{"class":41,"line":112},[39,132170,115],{"class":53},[39,132172,132173,132175],{"class":41,"line":118},[39,132174,132022],{"class":49},[39,132176,16545],{"class":53},[39,132178,132179,132181,132183,132185],{"class":41,"line":125},[39,132180,132007],{"class":74},[39,132182,52412],{"class":53},[39,132184,73497],{"class":74},[39,132186,318],{"class":53},[39,132188,132189],{"class":41,"line":132},[39,132190,115],{"class":53},[19,132192,132193],{},"overflow: hidden;",[19,132195,132196],{},"优点：代码简洁",[19,132198,132199],{},"缺点：无法显示溢出的部分",[19,132201,132202],{},"注意：是给父元素添加代码",[19,132204,132205],{},"法三",[19,132207,132208],{},"父级添加after伪元素",[19,132210,132211,132214],{},[132212,132213],"after",{}," 方式是额外标签法的升级版",[19,132216,132217],{},"使用的时候复制就可以",[30,132219,132220],{"className":127527,"code":131993,"language":127529,"meta":35,"style":35},[26,132221,132222,132228,132238,132242,132248,132258],{"__ignoreMap":35},[39,132223,132224,132226],{"class":41,"line":42},[39,132225,132000],{"class":49},[39,132227,16545],{"class":53},[39,132229,132230,132232,132234,132236],{"class":41,"line":92},[39,132231,132007],{"class":74},[39,132233,52412],{"class":53},[39,132235,24710],{"class":74},[39,132237,318],{"class":53},[39,132239,132240],{"class":41,"line":112},[39,132241,115],{"class":53},[39,132243,132244,132246],{"class":41,"line":118},[39,132245,132022],{"class":49},[39,132247,16545],{"class":53},[39,132249,132250,132252,132254,132256],{"class":41,"line":125},[39,132251,132007],{"class":74},[39,132253,52412],{"class":53},[39,132255,73497],{"class":74},[39,132257,318],{"class":53},[39,132259,132260],{"class":41,"line":132},[39,132261,115],{"class":53},[19,132263,132264],{},"优点：没有增加标签，结构更简单",[19,132266,132267],{},"缺点：照顾低版本浏览器",[19,132269,132270],{},"代表网站： 百度、淘宝网、网易等",[19,132272,132273],{},"法四",[19,132275,132276],{},"父级添加双伪元素",[30,132278,132279],{"className":127527,"code":131993,"language":127529,"meta":35,"style":35},[26,132280,132281,132287,132297,132301,132307,132317],{"__ignoreMap":35},[39,132282,132283,132285],{"class":41,"line":42},[39,132284,132000],{"class":49},[39,132286,16545],{"class":53},[39,132288,132289,132291,132293,132295],{"class":41,"line":92},[39,132290,132007],{"class":74},[39,132292,52412],{"class":53},[39,132294,24710],{"class":74},[39,132296,318],{"class":53},[39,132298,132299],{"class":41,"line":112},[39,132300,115],{"class":53},[39,132302,132303,132305],{"class":41,"line":118},[39,132304,132022],{"class":49},[39,132306,16545],{"class":53},[39,132308,132309,132311,132313,132315],{"class":41,"line":125},[39,132310,132007],{"class":74},[39,132312,52412],{"class":53},[39,132314,73497],{"class":74},[39,132316,318],{"class":53},[39,132318,132319],{"class":41,"line":132},[39,132320,115],{"class":53},[19,132322,132323],{},"优点：代码更简洁",[19,132325,132267],{},[19,132327,132328],{},"代表网站：小米、腾讯等",[14,132330,132332],{"id":132331},"_93-ps切图","9.3 PS切图",[476,132334,132336],{"id":132335},"_931-常见图片格式","9.3.1 常见图片格式",[1404,132338,132339,132349],{},[1407,132340,132341],{},[1410,132342,132343,132346],{},[1413,132344,132345],{"align":24710},"jpg图像格式",[1413,132347,132348],{"align":24710},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1450,132350,132351,132359,132367],{},[1410,132352,132353,132356],{},[1455,132354,132355],{"align":24710},"gif图像格式",[1455,132357,132358],{"align":24710},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1410,132360,132361,132364],{},[1455,132362,132363],{"align":24710},"png图像格式",[1455,132365,132366],{"align":24710},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1410,132368,132369,132372],{},[1455,132370,132371],{"align":24710},"PSD图像格式",[1455,132373,132374],{"align":24710},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[476,132376,132378],{"id":132377},"_932-图层切图","9.3.2 图层切图",[19,132380,132381],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,132383,132384],{},"按住shift选中两个图层->图层菜单->合并图层",[476,132386,132388],{"id":132387},"_933-切片切图","9.3.3 切片切图",[489,132390,132391,132394],{},[331,132392,132393],{},"利用切片工具手动划出",[331,132395,132396],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[476,132398,132400],{"id":132399},"_934-切图步骤","9.3.4 切图步骤",[19,132402,132403],{},"用切片工具选中：",[2585,132405],{"style":127383,"src":132406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,132408,132409],{},"文件 -> 导出",[2585,132411],{"style":127383,"src":132412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1192,132414,132415],{},"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":92,"depth":92,"links":132417},[132418,132427,132431],{"id":130854,"depth":92,"text":130855,"children":132419},[132420,132421,132422,132423,132424,132425,132426],{"id":130879,"depth":112,"text":130880},{"id":131170,"depth":112,"text":131171},{"id":131299,"depth":112,"text":131300},{"id":131499,"depth":112,"text":131500},{"id":131541,"depth":112,"text":131542},{"id":131579,"depth":112,"text":131580},{"id":131669,"depth":112,"text":131670},{"id":131949,"depth":92,"text":131950,"children":132428},[132429,132430],{"id":131953,"depth":112,"text":131954},{"id":131960,"depth":112,"text":131961},{"id":132331,"depth":92,"text":132332,"children":132432},[132433,132434,132435,132436],{"id":132335,"depth":112,"text":132336},{"id":132377,"depth":112,"text":132378},{"id":132387,"depth":112,"text":132388},{"id":132399,"depth":112,"text":132400},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130846,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132443,"title":132444,"body":132445,"description":24350,"extension":1203,"meta":133086,"navigation":121,"path":133087,"seo":133088,"stem":133089,"__hash__":133090},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132446,"toc":133074},[132447,132450,132454,132480,132514,132518,132522,132525,132567,132574,132584,132592,132594,132597,132600,132603,132610,132624,132628,132631,132660,132664,132667,132681,132685,132688,132716,132720,132723,132749,132753,132758,132791,132796,132824,132828,132845,132891,132896,132940,132957,133064,133072],[10,132448,132444],{"id":132449},"_10-css规范与学成在线案例",[14,132451,132453],{"id":132452},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[328,132455,132456,132462,132468,132474],{},[331,132457,132458,132461],{},[350,132459,132460],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[331,132463,132464,132467],{},[350,132465,132466],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[331,132469,132470,132473],{},[350,132471,132472],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[331,132475,132476,132479],{},[350,132477,132478],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[30,132481,132482],{"className":127527,"code":130891,"language":127529,"meta":35,"style":35},[26,132483,132484,132488,132494,132510],{"__ignoreMap":35},[39,132485,132486],{"class":41,"line":42},[39,132487,130898],{"class":128},[39,132489,132490,132492],{"class":41,"line":92},[39,132491,52586],{"class":52275},[39,132493,16545],{"class":53},[39,132495,132496,132498,132500,132502,132504,132506,132508],{"class":41,"line":112},[39,132497,71871],{"class":74},[39,132499,52412],{"class":53},[39,132501,1483],{"class":74},[39,132503,52467],{"class":45},[39,132505,52496],{"class":74},[39,132507,130919],{"class":74},[39,132509,318],{"class":53},[39,132511,132512],{"class":41,"line":118},[39,132513,115],{"class":53},[14,132515,132517],{"id":132516},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[476,132519,132521],{"id":132520},"_1021-header头部制作","10.2.1 header头部制作",[2585,132523],{"style":127383,"src":132524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[489,132526,132527,132534,132541,132547,132554,132561],{},[331,132528,132529,132530,132533],{},"1号是版心盒子 ",[350,132531,132532],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[331,132535,132536,132537,132540],{},"版心盒子 里面包含 2号盒子 ",[350,132538,132539],{},"logo"," 图标",[331,132542,132543,132544,132546],{},"版心盒子 里面包含 3号盒子 ",[350,132545,54688],{}," 导航栏",[331,132548,132549,132550,132553],{},"版心盒子 里面包含 4号盒子 ",[350,132551,132552],{},"search"," 搜索框",[331,132555,132556,132557,132560],{},"版心盒子 里面包含 5号盒子 ",[350,132558,132559],{},"user"," 个人信息",[331,132562,132563,132564],{},"注意，要求里面的 ",[350,132565,132566],{},"4个子盒子 必须都浮动",[328,132568,132569],{},[331,132570,132571],{},[350,132572,132573],{},"导航栏注意点:",[19,132575,132576,132577,132580,132581],{},"实际开发中， ",[350,132578,132579],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[350,132582,132583],{},"用 li 包含链接(li+a)的做法",[489,132585,132586,132589],{},[331,132587,132588],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[331,132590,132591],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132593,10093],{},[19,132595,132596],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132598,132599],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132601,132602],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[328,132604,132605],{"start":92},[331,132606,132607],{},[350,132608,132609],{},"4号盒子search的细节：",[489,132611,132612,132615,132618],{},[331,132613,132614],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[331,132616,132617],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[331,132619,132620,132623],{},[26,132621,132622],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[476,132625,132627],{"id":132626},"_1022-banner制作","10.2.2 banner制作",[2585,132629],{"style":127383,"src":132630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[489,132632,132633,132640,132646,132653],{},[331,132634,132635,132636,132639],{},"1号盒子是通栏的大盒子 ",[350,132637,132638],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[331,132641,132642,132643,132645],{},"2号盒子是版心 ",[350,132644,2055],{}," ， 要水平居中对齐",[331,132647,132648,132649,132652],{},"3号盒子版心内，左对齐 ",[350,132650,132651],{},"subnav"," 侧导航栏",[331,132654,132655,132656,132659],{},"4号盒子版心内，右对齐 ",[350,132657,132658],{},"course"," 课程",[476,132661,132663],{"id":132662},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[2585,132665],{"style":127383,"src":132666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[489,132668,132669,132672,132675,132678],{},[331,132670,132671],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[331,132673,132674],{},"1号盒子是标题 H3 左侧浮动",[331,132676,132677],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[331,132679,132680],{},"3号盒子 右浮动 mod 修改",[476,132682,132684],{"id":132683},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[2585,132686],{"style":127383,"src":132687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[489,132689,132690,132696,132703,132710,132713],{},[331,132691,132692,132693,132695],{},"1号盒子为最大的盒子 ",[350,132694,54689],{}," 版心水平居中对齐",[331,132697,132698,132699,132702],{},"2号盒子为上面部分 ",[350,132700,132701],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[331,132704,132705,132706,132709],{},"3号盒子为底下部分 ",[350,132707,132708],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[331,132711,132712],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[331,132714,132715],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[476,132717,132719],{"id":132718},"_1025-底部模块制作","10.2.5 底部模块制作",[2585,132721],{"style":127383,"src":132722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[489,132724,132725,132732,132735,132742],{},[331,132726,132727,132728,132731],{},"1号盒子通栏大盒子 底部 ",[350,132729,132730],{},"footer"," 给高度 底色是白色",[331,132733,132734],{},"2号盒子版心水平居中",[331,132736,132737,132738,132741],{},"3号盒子版权 ",[350,132739,132740],{},"copyright"," 左对齐",[331,132743,132744,132745,132748],{},"4号盒子 链接组 ",[350,132746,132747],{},"links"," 右对齐",[476,132750,132752],{"id":132751},"_1026-代码模块","10.2.6 代码模块",[328,132754,132755],{},[331,132756,132757],{},"html部分",[30,132759,132761],{"className":128274,"code":132760,"language":128276,"meta":35,"style":35},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[26,132762,132763],{"__ignoreMap":35},[39,132764,132765,132767,132769,132771,132773,132776,132779,132781,132784,132787,132789],{"class":41,"line":42},[39,132766,2170],{"class":53},[39,132768,922],{"class":52275},[39,132770,62032],{"class":49},[39,132772,1117],{"class":53},[39,132774,132775],{"class":237},"\"https:\u002F\u002Fexample.com\"",[39,132777,132778],{"class":49}," target",[39,132780,1117],{"class":53},[39,132782,132783],{"class":237},"\"_blank\"",[39,132785,132786],{"class":53},">链接文字\u003C\u002F",[39,132788,922],{"class":52275},[39,132790,52282],{"class":53},[328,132792,132793],{"start":92},[331,132794,132795],{},"css部分",[30,132797,132798],{"className":128274,"code":132760,"language":128276,"meta":35,"style":35},[26,132799,132800],{"__ignoreMap":35},[39,132801,132802,132804,132806,132808,132810,132812,132814,132816,132818,132820,132822],{"class":41,"line":42},[39,132803,2170],{"class":53},[39,132805,922],{"class":52275},[39,132807,62032],{"class":49},[39,132809,1117],{"class":53},[39,132811,132775],{"class":237},[39,132813,132778],{"class":49},[39,132815,1117],{"class":53},[39,132817,132783],{"class":237},[39,132819,132786],{"class":53},[39,132821,922],{"class":52275},[39,132823,52282],{"class":53},[476,132825,132827],{"id":132826},"_1027-收获","10.2.7 收获",[328,132829,132830,132833,132836,132839,132842],{},[331,132831,132832],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[331,132834,132835],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[331,132837,132838],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[331,132840,132841],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[331,132843,132844],{},"遗忘代码",[30,132846,132848],{"className":127527,"code":132847,"language":127529,"meta":35,"style":35},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[26,132849,132850,132872,132877,132887],{"__ignoreMap":35},[39,132851,132852,132854,132856,132858,132860,132862,132864,132866,132868,132870],{"class":41,"line":42},[39,132853,52586],{"class":52275},[39,132855,63],{"class":53},[39,132857,19],{"class":52275},[39,132859,63],{"class":53},[39,132861,10],{"class":52275},[39,132863,63],{"class":53},[39,132865,489],{"class":52275},[39,132867,63],{"class":53},[39,132869,331],{"class":52275},[39,132871,16545],{"class":53},[39,132873,132874],{"class":41,"line":92},[39,132875,132876],{"class":128},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[39,132878,132879,132881,132883,132885],{"class":41,"line":112},[39,132880,129143],{"class":74},[39,132882,52412],{"class":53},[39,132884,61844],{"class":74},[39,132886,318],{"class":53},[39,132888,132889],{"class":41,"line":118},[39,132890,115],{"class":53},[328,132892,132893],{"start":132},[331,132894,132895],{},"html引css的程序",[30,132897,132898],{"className":127527,"code":132847,"language":127529,"meta":35,"style":35},[26,132899,132900,132922,132926,132936],{"__ignoreMap":35},[39,132901,132902,132904,132906,132908,132910,132912,132914,132916,132918,132920],{"class":41,"line":42},[39,132903,52586],{"class":52275},[39,132905,63],{"class":53},[39,132907,19],{"class":52275},[39,132909,63],{"class":53},[39,132911,10],{"class":52275},[39,132913,63],{"class":53},[39,132915,489],{"class":52275},[39,132917,63],{"class":53},[39,132919,331],{"class":52275},[39,132921,16545],{"class":53},[39,132923,132924],{"class":41,"line":92},[39,132925,132876],{"class":128},[39,132927,132928,132930,132932,132934],{"class":41,"line":112},[39,132929,129143],{"class":74},[39,132931,52412],{"class":53},[39,132933,61844],{"class":74},[39,132935,318],{"class":53},[39,132937,132938],{"class":41,"line":118},[39,132939,115],{"class":53},[328,132941,132942,132945,132948,132951,132954],{"start":138},[331,132943,132944],{},"浮动的盒子不会有外边距合并问题",[331,132946,132947],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[331,132949,132950],{},"ctrl+g快速定位行；shift+alt多个光标",[331,132952,132953],{},"学习上方各个模块的选择器起名方法，以后就这样用",[331,132955,132956],{},"在写选择器时尽量写全一些，例如",[30,132958,132960],{"className":127527,"code":132959,"language":127529,"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",[26,132961,132962,132967,132983,132988,133003,133008,133023,133028,133043,133048],{"__ignoreMap":35},[39,132963,132964],{"class":41,"line":42},[39,132965,132966],{"class":128},"\u002F* 静态定位（默认） *\u002F\n",[39,132968,132969,132972,132974,132976,132978,132981],{"class":41,"line":92},[39,132970,132971],{"class":49},".static",[39,132973,80782],{"class":53},[39,132975,129887],{"class":74},[39,132977,52412],{"class":53},[39,132979,132980],{"class":74},"static",[39,132982,130457],{"class":53},[39,132984,132985],{"class":41,"line":112},[39,132986,132987],{"class":128},"\u002F* 相对定位 *\u002F\n",[39,132989,132990,132993,132995,132997,132999,133001],{"class":41,"line":118},[39,132991,132992],{"class":49},".relative",[39,132994,80782],{"class":53},[39,132996,129887],{"class":74},[39,132998,52412],{"class":53},[39,133000,55739],{"class":74},[39,133002,130457],{"class":53},[39,133004,133005],{"class":41,"line":125},[39,133006,133007],{"class":128},"\u002F* 绝对定位 *\u002F\n",[39,133009,133010,133013,133015,133017,133019,133021],{"class":41,"line":132},[39,133011,133012],{"class":49},".absolute",[39,133014,80782],{"class":53},[39,133016,129887],{"class":74},[39,133018,52412],{"class":53},[39,133020,55806],{"class":74},[39,133022,130457],{"class":53},[39,133024,133025],{"class":41,"line":138},[39,133026,133027],{"class":128},"\u002F* 固定定位 *\u002F\n",[39,133029,133030,133033,133035,133037,133039,133041],{"class":41,"line":169},[39,133031,133032],{"class":49},".fixed",[39,133034,80782],{"class":53},[39,133036,129887],{"class":74},[39,133038,52412],{"class":53},[39,133040,87208],{"class":74},[39,133042,130457],{"class":53},[39,133044,133045],{"class":41,"line":190},[39,133046,133047],{"class":128},"\u002F* 粘性定位 *\u002F\n",[39,133049,133050,133053,133055,133057,133059,133062],{"class":41,"line":202},[39,133051,133052],{"class":49},".sticky",[39,133054,80782],{"class":53},[39,133056,129887],{"class":74},[39,133058,52412],{"class":53},[39,133060,133061],{"class":74},"sticky",[39,133063,130457],{"class":53},[328,133065,133066,133069],{"start":212},[331,133067,133068],{},"一定要用好注释",[331,133070,133071],{},"浮动的盒子不会有外边距合并的问题",[1192,133073,132415],{},{"title":35,"searchDepth":92,"depth":92,"links":133075},[133076,133077],{"id":132452,"depth":92,"text":132453},{"id":132516,"depth":92,"text":132517,"children":133078},[133079,133080,133081,133082,133083,133084,133085],{"id":132520,"depth":112,"text":132521},{"id":132626,"depth":112,"text":132627},{"id":132662,"depth":112,"text":132663},{"id":132683,"depth":112,"text":132684},{"id":132718,"depth":112,"text":132719},{"id":132751,"depth":112,"text":132752},{"id":132826,"depth":112,"text":132827},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132444,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133092,"title":133093,"body":133094,"description":24350,"extension":1203,"meta":134580,"navigation":121,"path":134581,"seo":134582,"stem":134583,"__hash__":134584},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133095,"toc":134572},[133096,133099,133103,133107,133118,133122,133139,133183,133216,133219,133236,133239,133242,133286,133290,133294,133297,133300,133304,133307,133318,133381,133422,133425,133440,133494,133502,133505,133516,133570,133596,133599,133612,133666,133698,133752,133775,133829,133832,133835,133842,133896,133917,133971,133974,133977,134062,134070,134127,134150,134154,134157,134175,134179,134198,134252,134290,134294,134297,134300,134322,134326,134334,134337,134342,134353,134356,134360,134374,134418,134421,134425,134428,134433,134459,134464,134541,134544,134548,134551,134554,134557,134560,134563,134566,134569],[10,133097,133093],{"id":133098},"_11-传统布局与定位体系",[14,133100,133102],{"id":133101},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[476,133104,133106],{"id":133105},"_1111-普通流标准流","11.1.1 普通流（标准流）",[489,133108,133109,133112,133115],{},[331,133110,133111],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[331,133113,133114],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[331,133116,133117],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[476,133119,133121],{"id":133120},"_1112-浮动","11.1.2 浮动",[489,133123,133124,133127,133130,133133,133136],{},[331,133125,133126],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[331,133128,133129],{},"浮动可以改变元素标签默认的排列方式",[331,133131,133132],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[331,133134,133135],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[331,133137,133138],{},"在使用行内块转换时盒子之间是有空隙的",[30,133140,133141],{"className":127527,"code":131993,"language":127529,"meta":35,"style":35},[26,133142,133143,133149,133159,133163,133169,133179],{"__ignoreMap":35},[39,133144,133145,133147],{"class":41,"line":42},[39,133146,132000],{"class":49},[39,133148,16545],{"class":53},[39,133150,133151,133153,133155,133157],{"class":41,"line":92},[39,133152,132007],{"class":74},[39,133154,52412],{"class":53},[39,133156,24710],{"class":74},[39,133158,318],{"class":53},[39,133160,133161],{"class":41,"line":112},[39,133162,115],{"class":53},[39,133164,133165,133167],{"class":41,"line":118},[39,133166,132022],{"class":49},[39,133168,16545],{"class":53},[39,133170,133171,133173,133175,133177],{"class":41,"line":125},[39,133172,132007],{"class":74},[39,133174,52412],{"class":53},[39,133176,73497],{"class":74},[39,133178,318],{"class":53},[39,133180,133181],{"class":41,"line":132},[39,133182,115],{"class":53},[1404,133184,133185,133193],{},[1407,133186,133187],{},[1410,133188,133189,133191],{},[1413,133190,127991],{"align":24710},[1413,133192,28464],{"align":24710},[1450,133194,133195,133202,133209],{},[1410,133196,133197,133199],{},[1455,133198,55712],{"align":24710},[1455,133200,133201],{"align":24710},"元素不浮动（默认值）",[1410,133203,133204,133206],{},[1455,133205,24710],{"align":24710},[1455,133207,133208],{"align":24710},"元素向左浮动",[1410,133210,133211,133213],{},[1455,133212,73497],{"align":24710},[1455,133214,133215],{"align":24710},"元素向右浮动",[19,133217,133218],{},"浮动重点：",[489,133220,133221,133224,133227,133230,133233],{},[331,133222,133223],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[331,133225,133226],{},"浮动的元素会一行内显示并且元素顶部对齐",[331,133228,133229],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[331,133231,133232],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[331,133234,133235],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133237,133238],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133240,133241],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[30,133243,133244],{"className":127527,"code":131993,"language":127529,"meta":35,"style":35},[26,133245,133246,133252,133262,133266,133272,133282],{"__ignoreMap":35},[39,133247,133248,133250],{"class":41,"line":42},[39,133249,132000],{"class":49},[39,133251,16545],{"class":53},[39,133253,133254,133256,133258,133260],{"class":41,"line":92},[39,133255,132007],{"class":74},[39,133257,52412],{"class":53},[39,133259,24710],{"class":74},[39,133261,318],{"class":53},[39,133263,133264],{"class":41,"line":112},[39,133265,115],{"class":53},[39,133267,133268,133270],{"class":41,"line":118},[39,133269,132022],{"class":49},[39,133271,16545],{"class":53},[39,133273,133274,133276,133278,133280],{"class":41,"line":125},[39,133275,132007],{"class":74},[39,133277,52412],{"class":53},[39,133279,73497],{"class":74},[39,133281,318],{"class":53},[39,133283,133284],{"class":41,"line":132},[39,133285,115],{"class":53},[476,133287,133289],{"id":133288},"_1113-定位","11.1.3 定位",[22971,133291,133293],{"id":133292},"_11131-使用场景","11.1.3.1 使用场景",[19,133295,133296],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133298,133299],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22971,133301,133303],{"id":133302},"_11132-定位组成","11.1.3.2 定位组成",[19,133305,133306],{},"定位 = 定位模式 + 边偏移",[328,133308,133309],{},[331,133310,133311,133314,133315],{},[350,133312,133313],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[350,133316,133317],{},"定位模式",[30,133319,133321],{"className":127527,"code":133320,"language":127529,"meta":35,"style":35},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[26,133322,133323,133329,133343,133360,133377],{"__ignoreMap":35},[39,133324,133325,133327],{"class":41,"line":42},[39,133326,131375],{"class":49},[39,133328,16545],{"class":53},[39,133330,133331,133334,133336,133338,133340],{"class":41,"line":92},[39,133332,133333],{"class":74},"  position",[39,133335,52412],{"class":53},[39,133337,55739],{"class":74},[39,133339,131390],{"class":53},[39,133341,133342],{"class":128},"\u002F* 定位模式 *\u002F\n",[39,133344,133345,133348,133350,133352,133354,133357],{"class":41,"line":112},[39,133346,133347],{"class":74},"  top",[39,133349,52412],{"class":53},[39,133351,423],{"class":74},[39,133353,52467],{"class":45},[39,133355,133356],{"class":53},";           ",[39,133358,133359],{"class":128},"\u002F* 边偏移：上 *\u002F\n",[39,133361,133362,133365,133367,133369,133371,133374],{"class":41,"line":118},[39,133363,133364],{"class":74},"  left",[39,133366,52412],{"class":53},[39,133368,248],{"class":74},[39,133370,52467],{"class":45},[39,133372,133373],{"class":53},";          ",[39,133375,133376],{"class":128},"\u002F* 边偏移：左 *\u002F\n",[39,133378,133379],{"class":41,"line":125},[39,133380,115],{"class":53},[1404,133382,133383,133392],{},[1407,133384,133385],{},[1410,133386,133387,133389],{},[1413,133388,1418],{"align":24710},[1413,133390,133391],{"align":24710},"语义",[1450,133393,133394,133401,133408,133415],{},[1410,133395,133396,133398],{},[1455,133397,132980],{"align":24710},[1455,133399,133400],{"align":24710},"静态定位",[1410,133402,133403,133405],{},[1455,133404,55739],{"align":24710},[1455,133406,133407],{"align":24710},"相对定位",[1410,133409,133410,133412],{},[1455,133411,55806],{"align":24710},[1455,133413,133414],{"align":24710},"绝对定位",[1410,133416,133417,133419],{},[1455,133418,87208],{"align":24710},[1455,133420,133421],{"align":24710},"固定定位",[19,133423,133424],{},"（1）静态定位：",[489,133426,133427,133438],{},[331,133428,133429,133430,133433,133434,133437],{},"静态定位是元素的 ",[350,133431,133432],{},"默认定位方式"," ， ",[350,133435,133436],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[331,133439,24],{},[30,133441,133442],{"className":127527,"code":133320,"language":127529,"meta":35,"style":35},[26,133443,133444,133450,133462,133476,133490],{"__ignoreMap":35},[39,133445,133446,133448],{"class":41,"line":42},[39,133447,131375],{"class":49},[39,133449,16545],{"class":53},[39,133451,133452,133454,133456,133458,133460],{"class":41,"line":92},[39,133453,133333],{"class":74},[39,133455,52412],{"class":53},[39,133457,55739],{"class":74},[39,133459,131390],{"class":53},[39,133461,133342],{"class":128},[39,133463,133464,133466,133468,133470,133472,133474],{"class":41,"line":112},[39,133465,133347],{"class":74},[39,133467,52412],{"class":53},[39,133469,423],{"class":74},[39,133471,52467],{"class":45},[39,133473,133356],{"class":53},[39,133475,133359],{"class":128},[39,133477,133478,133480,133482,133484,133486,133488],{"class":41,"line":118},[39,133479,133364],{"class":74},[39,133481,52412],{"class":53},[39,133483,248],{"class":74},[39,133485,52467],{"class":45},[39,133487,133373],{"class":53},[39,133489,133376],{"class":128},[39,133491,133492],{"class":41,"line":125},[39,133493,115],{"class":53},[489,133495,133496,133499],{},[331,133497,133498],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[331,133500,133501],{},"静态定位在布局时我们几乎不用的",[19,133503,133504],{},"（2）相对定位",[489,133506,133507,133514],{},[331,133508,133509,133510,133513],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[350,133511,133512],{},"原来的位置"," 来说的（自恋型）",[331,133515,24],{},[30,133517,133518],{"className":127527,"code":133320,"language":127529,"meta":35,"style":35},[26,133519,133520,133526,133538,133552,133566],{"__ignoreMap":35},[39,133521,133522,133524],{"class":41,"line":42},[39,133523,131375],{"class":49},[39,133525,16545],{"class":53},[39,133527,133528,133530,133532,133534,133536],{"class":41,"line":92},[39,133529,133333],{"class":74},[39,133531,52412],{"class":53},[39,133533,55739],{"class":74},[39,133535,131390],{"class":53},[39,133537,133342],{"class":128},[39,133539,133540,133542,133544,133546,133548,133550],{"class":41,"line":112},[39,133541,133347],{"class":74},[39,133543,52412],{"class":53},[39,133545,423],{"class":74},[39,133547,52467],{"class":45},[39,133549,133356],{"class":53},[39,133551,133359],{"class":128},[39,133553,133554,133556,133558,133560,133562,133564],{"class":41,"line":118},[39,133555,133364],{"class":74},[39,133557,52412],{"class":53},[39,133559,248],{"class":74},[39,133561,52467],{"class":45},[39,133563,133373],{"class":53},[39,133565,133376],{"class":128},[39,133567,133568],{"class":41,"line":125},[39,133569,115],{"class":53},[489,133571,133572],{},[331,133573,133574,133575,133577,133578,133580,133581,133584,133585,133588,133589,133591,133592,133595],{},"相对定位的特点：",[54691,133576],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54691,133579],{},"  ② ",[350,133582,133583],{},"原来"," 在标准流的 ",[350,133586,133587],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54691,133590],{},"  ③因此， ",[350,133593,133594],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133597,133598],{},"（3）绝对定位",[489,133600,133601,133610],{},[331,133602,133603,133605,133606,133609],{},[350,133604,133414],{}," 是元素在移动位置的时候，是相对于它 ",[350,133607,133608],{},"祖先元素"," 来说的（拼爹型）",[331,133611,24],{},[30,133613,133614],{"className":127527,"code":133320,"language":127529,"meta":35,"style":35},[26,133615,133616,133622,133634,133648,133662],{"__ignoreMap":35},[39,133617,133618,133620],{"class":41,"line":42},[39,133619,131375],{"class":49},[39,133621,16545],{"class":53},[39,133623,133624,133626,133628,133630,133632],{"class":41,"line":92},[39,133625,133333],{"class":74},[39,133627,52412],{"class":53},[39,133629,55739],{"class":74},[39,133631,131390],{"class":53},[39,133633,133342],{"class":128},[39,133635,133636,133638,133640,133642,133644,133646],{"class":41,"line":112},[39,133637,133347],{"class":74},[39,133639,52412],{"class":53},[39,133641,423],{"class":74},[39,133643,52467],{"class":45},[39,133645,133356],{"class":53},[39,133647,133359],{"class":128},[39,133649,133650,133652,133654,133656,133658,133660],{"class":41,"line":118},[39,133651,133364],{"class":74},[39,133653,52412],{"class":53},[39,133655,248],{"class":74},[39,133657,52467],{"class":45},[39,133659,133373],{"class":53},[39,133661,133376],{"class":128},[39,133663,133664],{"class":41,"line":125},[39,133665,115],{"class":53},[489,133667,133668,133683,133692,133695],{},[331,133669,133670,133671,133673,133674,133676,133677,133679,133680,133682],{},"绝对定位的特点：",[54691,133672],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54691,133675],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54691,133678],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54691,133681],{},"  (4)固定定位",[331,133684,133685,133687,133688,133691],{},[350,133686,133421],{}," 是元素 ",[350,133689,133690],{},"固定于浏览器可视区的位置"," 。（认死理型）",[331,133693,133694],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[331,133696,133697],{},"语法:",[30,133699,133700],{"className":127527,"code":133320,"language":127529,"meta":35,"style":35},[26,133701,133702,133708,133720,133734,133748],{"__ignoreMap":35},[39,133703,133704,133706],{"class":41,"line":42},[39,133705,131375],{"class":49},[39,133707,16545],{"class":53},[39,133709,133710,133712,133714,133716,133718],{"class":41,"line":92},[39,133711,133333],{"class":74},[39,133713,52412],{"class":53},[39,133715,55739],{"class":74},[39,133717,131390],{"class":53},[39,133719,133342],{"class":128},[39,133721,133722,133724,133726,133728,133730,133732],{"class":41,"line":112},[39,133723,133347],{"class":74},[39,133725,52412],{"class":53},[39,133727,423],{"class":74},[39,133729,52467],{"class":45},[39,133731,133356],{"class":53},[39,133733,133359],{"class":128},[39,133735,133736,133738,133740,133742,133744,133746],{"class":41,"line":118},[39,133737,133364],{"class":74},[39,133739,52412],{"class":53},[39,133741,248],{"class":74},[39,133743,52467],{"class":45},[39,133745,133373],{"class":53},[39,133747,133376],{"class":128},[39,133749,133750],{"class":41,"line":125},[39,133751,115],{"class":53},[489,133753,133754,133763],{},[331,133755,133756,133757,133759,133760,133762],{},"特点:",[54691,133758],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54691,133761],{},"  ②固定定位不再占有原先的位置,完全脱标",[331,133764,133765,133766,133768,133769,133771,133772,133774],{},"固定在版心位置的方法:",[54691,133767],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54691,133770],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54691,133773],{},"  实例：",[30,133776,133777],{"className":127527,"code":133320,"language":127529,"meta":35,"style":35},[26,133778,133779,133785,133797,133811,133825],{"__ignoreMap":35},[39,133780,133781,133783],{"class":41,"line":42},[39,133782,131375],{"class":49},[39,133784,16545],{"class":53},[39,133786,133787,133789,133791,133793,133795],{"class":41,"line":92},[39,133788,133333],{"class":74},[39,133790,52412],{"class":53},[39,133792,55739],{"class":74},[39,133794,131390],{"class":53},[39,133796,133342],{"class":128},[39,133798,133799,133801,133803,133805,133807,133809],{"class":41,"line":112},[39,133800,133347],{"class":74},[39,133802,52412],{"class":53},[39,133804,423],{"class":74},[39,133806,52467],{"class":45},[39,133808,133356],{"class":53},[39,133810,133359],{"class":128},[39,133812,133813,133815,133817,133819,133821,133823],{"class":41,"line":118},[39,133814,133364],{"class":74},[39,133816,52412],{"class":53},[39,133818,248],{"class":74},[39,133820,52467],{"class":45},[39,133822,133373],{"class":53},[39,133824,133376],{"class":128},[39,133826,133827],{"class":41,"line":125},[39,133828,115],{"class":53},[2585,133830],{"style":127383,"src":133831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133833,133834],{},"(5)粘性定位",[489,133836,133837,133840],{},[331,133838,133839],{},"粘性定位可以被认为是相对定位和固定定位的混合",[331,133841,24],{},[30,133843,133844],{"className":127527,"code":133320,"language":127529,"meta":35,"style":35},[26,133845,133846,133852,133864,133878,133892],{"__ignoreMap":35},[39,133847,133848,133850],{"class":41,"line":42},[39,133849,131375],{"class":49},[39,133851,16545],{"class":53},[39,133853,133854,133856,133858,133860,133862],{"class":41,"line":92},[39,133855,133333],{"class":74},[39,133857,52412],{"class":53},[39,133859,55739],{"class":74},[39,133861,131390],{"class":53},[39,133863,133342],{"class":128},[39,133865,133866,133868,133870,133872,133874,133876],{"class":41,"line":112},[39,133867,133347],{"class":74},[39,133869,52412],{"class":53},[39,133871,423],{"class":74},[39,133873,52467],{"class":45},[39,133875,133356],{"class":53},[39,133877,133359],{"class":128},[39,133879,133880,133882,133884,133886,133888,133890],{"class":41,"line":118},[39,133881,133364],{"class":74},[39,133883,52412],{"class":53},[39,133885,248],{"class":74},[39,133887,52467],{"class":45},[39,133889,133373],{"class":53},[39,133891,133376],{"class":128},[39,133893,133894],{"class":41,"line":125},[39,133895,115],{"class":53},[489,133897,133898],{},[331,133899,133900,133901,133903,133904,133906,133907,133909,133910,133913,133914,133916],{},"粘性定位的特点：",[54691,133902],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54691,133905],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54691,133908],{},"  ③必须添加 top 、left、right、bottom ",[350,133911,133912],{},"其中一个"," 才有效",[54691,133915],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[30,133918,133919],{"className":127527,"code":133320,"language":127529,"meta":35,"style":35},[26,133920,133921,133927,133939,133953,133967],{"__ignoreMap":35},[39,133922,133923,133925],{"class":41,"line":42},[39,133924,131375],{"class":49},[39,133926,16545],{"class":53},[39,133928,133929,133931,133933,133935,133937],{"class":41,"line":92},[39,133930,133333],{"class":74},[39,133932,52412],{"class":53},[39,133934,55739],{"class":74},[39,133936,131390],{"class":53},[39,133938,133342],{"class":128},[39,133940,133941,133943,133945,133947,133949,133951],{"class":41,"line":112},[39,133942,133347],{"class":74},[39,133944,52412],{"class":53},[39,133946,423],{"class":74},[39,133948,52467],{"class":45},[39,133950,133356],{"class":53},[39,133952,133359],{"class":128},[39,133954,133955,133957,133959,133961,133963,133965],{"class":41,"line":118},[39,133956,133364],{"class":74},[39,133958,52412],{"class":53},[39,133960,248],{"class":74},[39,133962,52467],{"class":45},[39,133964,133373],{"class":53},[39,133966,133376],{"class":128},[39,133968,133969],{"class":41,"line":125},[39,133970,115],{"class":53},[2585,133972],{"style":127383,"src":133973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133975,133976],{},"(6)总结",[1404,133978,133979,133994],{},[1407,133980,133981],{},[1410,133982,133983,133985,133988,133991],{},[1413,133984,133317],{"align":24710},[1413,133986,133987],{"align":24710},"是否脱标",[1413,133989,133990],{"align":24710},"移动位置",[1413,133992,133993],{"align":24710},"是否常用",[1450,133995,133996,134009,134023,134037,134050],{},[1410,133997,133998,134001,134003,134006],{},[1455,133999,134000],{"align":24710},"Static 静态定位",[1455,134002,105653],{"align":24710},[1455,134004,134005],{"align":24710},"不能使用边偏移",[1455,134007,134008],{"align":24710},"很少",[1410,134010,134011,134014,134017,134020],{},[1455,134012,134013],{"align":24710},"Relative 相对定位",[1455,134015,134016],{"align":24710},"否(占有位置)",[1455,134018,134019],{"align":24710},"相对于自身位置移动",[1455,134021,134022],{"align":24710},"基本单独使用",[1410,134024,134025,134028,134031,134034],{},[1455,134026,134027],{"align":24710},"Absolute 绝对定位",[1455,134029,134030],{"align":24710},"是(不占有位置)",[1455,134032,134033],{"align":24710},"带有定位的父级",[1455,134035,134036],{"align":24710},"要和定位父级元素搭配使用",[1410,134038,134039,134042,134044,134047],{},[1455,134040,134041],{"align":24710},"Fixed 固定定位",[1455,134043,134030],{"align":24710},[1455,134045,134046],{"align":24710},"浏览器可视区",[1455,134048,134049],{"align":24710},"单独使用,不需要父级",[1410,134051,134052,134055,134057,134059],{},[1455,134053,134054],{"align":24710},"Sticky 粘性定位",[1455,134056,134016],{"align":24710},[1455,134058,134046],{"align":24710},[1455,134060,134061],{"align":24710},"当前阶段少",[328,134063,134064],{"start":92},[331,134065,134066,134069],{},[350,134067,134068],{},"边偏移"," 则决定了该元素的最终位置",[1404,134071,134072,134083],{},[1407,134073,134074],{},[1410,134075,134076,134079,134081],{},[1413,134077,134078],{"align":24710},"边偏移属性",[1413,134080,28467],{"align":24710},[1413,134082,28464],{"align":24710},[1450,134084,134085,134096,134107,134117],{},[1410,134086,134087,134090,134093],{},[1455,134088,134089],{"align":24710},"top",[1455,134091,134092],{"align":24710},"top: 80px;",[1455,134094,134095],{"align":24710},"顶端偏移量，定义元素相对于父元素上边线的距离",[1410,134097,134098,134101,134104],{},[1455,134099,134100],{"align":24710},"bottom",[1455,134102,134103],{"align":24710},"bottom: 80px ;",[1455,134105,134106],{"align":24710},"底部偏移量，定义元素相对于其父元素下边线的距离",[1410,134108,134109,134111,134114],{},[1455,134110,24710],{"align":24710},[1455,134112,134113],{"align":24710},"left: 80px ;",[1455,134115,134116],{"align":24710},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1410,134118,134119,134121,134124],{},[1455,134120,73497],{"align":24710},[1455,134122,134123],{"align":24710},"right: 80px ;",[1455,134125,134126],{"align":24710},"右侧偏移量，定义元素相对于其父元素右边线的距离",[489,134128,134129],{},[331,134130,10093,134131,134133,134134,134136,134137,134139,134140,134143,134144,134146,134147,134149],{},[54691,134132],{},"  ① ",[350,134135,134068],{}," 需要和 ",[350,134138,133317],{}," 联合使用， ",[350,134141,134142],{},"单独使用无效"," ；",[54691,134145],{},"  ②top和bottom不要同时使用",[54691,134148],{},"  ③left和right不要同时使用",[22971,134151,134153],{"id":134152},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134155,134156],{},"子级是绝对定位的话，父级要用相对定位",[489,134158,134159,134162,134165,134168],{},[331,134160,134161],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[331,134163,134164],{},"父盒子需要加定位限制子盒子在父盒子内显示",[331,134166,134167],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[331,134169,134170,134171,134174],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[350,134172,134173],{},"子绝父绝"," 也会遇到",[22971,134176,134178],{"id":134177},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[489,134180,134181,134196],{},[331,134182,134183,134184,134187,134188,134191,134192,134195],{},"在使用 ",[350,134185,134186],{},"定位"," 布局时，可能会 ",[350,134189,134190],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[350,134193,134194],{},"z-index"," 来控制盒子的前后次序 (z轴)",[331,134197,24],{},[30,134199,134200],{"className":127527,"code":133320,"language":127529,"meta":35,"style":35},[26,134201,134202,134208,134220,134234,134248],{"__ignoreMap":35},[39,134203,134204,134206],{"class":41,"line":42},[39,134205,131375],{"class":49},[39,134207,16545],{"class":53},[39,134209,134210,134212,134214,134216,134218],{"class":41,"line":92},[39,134211,133333],{"class":74},[39,134213,52412],{"class":53},[39,134215,55739],{"class":74},[39,134217,131390],{"class":53},[39,134219,133342],{"class":128},[39,134221,134222,134224,134226,134228,134230,134232],{"class":41,"line":112},[39,134223,133347],{"class":74},[39,134225,52412],{"class":53},[39,134227,423],{"class":74},[39,134229,52467],{"class":45},[39,134231,133356],{"class":53},[39,134233,133359],{"class":128},[39,134235,134236,134238,134240,134242,134244,134246],{"class":41,"line":118},[39,134237,133364],{"class":74},[39,134239,52412],{"class":53},[39,134241,248],{"class":74},[39,134243,52467],{"class":45},[39,134245,133373],{"class":53},[39,134247,133376],{"class":128},[39,134249,134250],{"class":41,"line":125},[39,134251,115],{"class":53},[489,134253,134254],{},[331,134255,134256,134257,134133,134259,134261,134262,128690,134265,83514,134268,134270,134271,134273,134274,134277,134278,134143,134281,134283,134284,134287,134289],{},"z-index的特性",[54691,134258],{},[350,134260,127991],{}," ： ",[350,134263,134264],{},"正整数",[350,134266,134267],{},"负整数",[350,134269,1457],{}," ，默认值是 0，数值越大，盒子越靠上；",[54691,134272],{},"  ②如果 ",[350,134275,134276],{},"属性值相同"," ，则按照书写顺序， ",[350,134279,134280],{},"后来居上",[54691,134282],{},"  ③数字后面 ",[350,134285,134286],{},"不能加单位",[54691,134288],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22971,134291,134293],{"id":134292},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134295,134296],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134298,134299],{},"方法:",[489,134301,134302,134312],{},[331,134303,134304,134305,134308,134309],{},"left: 50%; 让 ",[350,134306,134307],{},"盒子的左侧"," 移动到 ",[350,134310,134311],{},"父级元素的水平中心位置",[331,134313,134314,134315,134318,134319],{},"margin-left: -100px; 让盒子 ",[350,134316,134317],{},"向左"," 移动 ",[350,134320,134321],{},"自身宽度的一半",[22971,134323,134325],{"id":134324},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[328,134327,134328,134331],{},[331,134329,134330],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[331,134332,134333],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134335,134336],{},"也就是说绝对定位和固定定位和浮动类似",[328,134338,134339],{"start":112},[331,134340,134341],{},"display 是显示模式， 可以改变显示模式有以下方式:",[489,134343,134344,134347,134350],{},[331,134345,134346],{},"可以用inline-block 转换为行内块",[331,134348,134349],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[331,134351,134352],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134354,134355],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22971,134357,134359],{"id":134358},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[328,134361,134362,134365,134368,134371],{},[331,134363,134364],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[331,134366,134367],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[331,134369,134370],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[331,134372,134373],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[30,134375,134376],{"className":127527,"code":131993,"language":127529,"meta":35,"style":35},[26,134377,134378,134384,134394,134398,134404,134414],{"__ignoreMap":35},[39,134379,134380,134382],{"class":41,"line":42},[39,134381,132000],{"class":49},[39,134383,16545],{"class":53},[39,134385,134386,134388,134390,134392],{"class":41,"line":92},[39,134387,132007],{"class":74},[39,134389,52412],{"class":53},[39,134391,24710],{"class":74},[39,134393,318],{"class":53},[39,134395,134396],{"class":41,"line":112},[39,134397,115],{"class":53},[39,134399,134400,134402],{"class":41,"line":118},[39,134401,132022],{"class":49},[39,134403,16545],{"class":53},[39,134405,134406,134408,134410,134412],{"class":41,"line":125},[39,134407,132007],{"class":74},[39,134409,52412],{"class":53},[39,134411,73497],{"class":74},[39,134413,318],{"class":53},[39,134415,134416],{"class":41,"line":132},[39,134417,115],{"class":53},[2585,134419],{"style":127383,"src":134420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22971,134422,134424],{"id":134423},"_11138-轮播图","11.1.3.8 轮播图",[2585,134426],{"style":127383,"src":134427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[328,134429,134430],{},[331,134431,134432],{},"制作顺序:",[489,134434,134435,134438,134441,134450],{},[331,134436,134437],{},"大盒子我们类名为： tb-promo 淘宝广告",[331,134439,134440],{},"里面先放一张图片",[331,134442,134443,134444,134446,134447,134449],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54691,134445],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54691,134448],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[331,134451,134452,134453,134455,134456,134458],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54691,134454],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54691,134457],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[328,134460,134461],{"start":92},[331,134462,134463],{},"代码模块",[30,134465,134467],{"className":127527,"code":134466,"language":127529,"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",[26,134468,134469,134474,134481,134491,134501,134511,134515,134520,134527,134537],{"__ignoreMap":35},[39,134470,134471],{"class":41,"line":42},[39,134472,134473],{"class":128},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[39,134475,134476,134479],{"class":41,"line":92},[39,134477,134478],{"class":49},".son",[39,134480,16545],{"class":53},[39,134482,134483,134485,134487,134489],{"class":41,"line":112},[39,134484,133333],{"class":74},[39,134486,52412],{"class":53},[39,134488,55806],{"class":74},[39,134490,318],{"class":53},[39,134492,134493,134495,134497,134499],{"class":41,"line":118},[39,134494,133347],{"class":74},[39,134496,52412],{"class":53},[39,134498,1457],{"class":74},[39,134500,318],{"class":53},[39,134502,134503,134505,134507,134509],{"class":41,"line":125},[39,134504,133364],{"class":74},[39,134506,52412],{"class":53},[39,134508,1457],{"class":74},[39,134510,318],{"class":53},[39,134512,134513],{"class":41,"line":132},[39,134514,115],{"class":53},[39,134516,134517],{"class":41,"line":138},[39,134518,134519],{"class":128},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[39,134521,134522,134525],{"class":41,"line":169},[39,134523,134524],{"class":49},".father",[39,134526,16545],{"class":53},[39,134528,134529,134531,134533,134535],{"class":41,"line":190},[39,134530,133333],{"class":74},[39,134532,52412],{"class":53},[39,134534,55739],{"class":74},[39,134536,318],{"class":53},[39,134538,134539],{"class":41,"line":202},[39,134540,115],{"class":53},[19,134542,134543],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[476,134545,134547],{"id":134546},"_1114-定位数值的移动","11.1.4 定位数值的移动",[2585,134549],{"style":127383,"src":134550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134552,134553],{},"✨ 黄金口诀：",[19,134555,134556],{},"\"TOP正下负上，LEFT正右负左\"",[19,134558,134559],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134561,134562],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134564,134565],{},"✨ 简单记：",[19,134567,134568],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1192,134570,134571],{},"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":92,"depth":92,"links":134573},[134574],{"id":133101,"depth":92,"text":133102,"children":134575},[134576,134577,134578,134579],{"id":133105,"depth":112,"text":133106},{"id":133120,"depth":112,"text":133121},{"id":133288,"depth":112,"text":133289},{"id":134546,"depth":112,"text":134547},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133093,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134586,"title":134587,"body":134588,"description":24350,"extension":1203,"meta":136011,"navigation":121,"path":136012,"seo":136013,"stem":136014,"__hash__":136015},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134589,"toc":135990},[134590,134593,134597,134605,134609,134614,134622,134634,134638,134643,134651,134662,134666,134671,134712,134720,134724,134727,134730,134733,134827,134830,134924,134927,135021,135024,135027,135062,135065,135068,135098,135101,135104,135107,135110,135113,135116,135119,135189,135192,135196,135200,135241,135245,135251,135254,135257,135261,135264,135267,135270,135351,135354,135357,135361,135365,135368,135371,135374,135377,135380,135386,135395,135399,135418,135422,135432,135435,135438,135441,135444,135447,135450,135453,135456,135465,135469,135478,135481,135486,135539,135544,135710,135713,135716,135721,135724,135727,135730,135733,135738,135886,135889,135892,135897,135900,135905,135939,135942,135945,135949,135952,135959,135962,135965,135968,135971,135974,135977,135980,135984,135987],[10,134591,134587],{"id":134592},"_12-显示隐藏与图形资源",[14,134594,134596],{"id":134595},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[489,134598,134599,134602],{},[331,134600,134601],{},"目的:让一个元素在页面中消失或者显示出来",[331,134603,134604],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[476,134606,134608],{"id":134607},"_1211-display-显示","12.1.1 display 显示",[328,134610,134611],{},[331,134612,134613],{},"display 设置或检索对象是否及如何显示",[489,134615,134616,134619],{},[331,134617,134618],{},"display: none;隐藏对象",[331,134620,134621],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[328,134623,134624,134631],{"start":92},[331,134625,134626,134627,134630],{},"特点： display 隐藏元素后， ",[350,134628,134629],{},"不再占"," 有原来的位置",[331,134632,134633],{},"在js中使用非常的广泛",[476,134635,134637],{"id":134636},"_1212-visibility可见性","12.1.2 visibility可见性",[328,134639,134640],{},[331,134641,134642],{},"visibility 属性用于指定一个元素应可见还是隐藏",[489,134644,134645,134648],{},[331,134646,134647],{},"visibility： visible；元素可见",[331,134649,134650],{},"visibility：hidden；元素隐藏",[328,134652,134653,134656,134659],{"start":92},[331,134654,134655],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[331,134657,134658],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[331,134660,134661],{},"隐藏后继续占有原有位置",[476,134663,134665],{"id":134664},"_1213-overflow溢出","12.1.3 overflow溢出",[489,134667,134668],{},[331,134669,134670],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1404,134672,134673,134681],{},[1407,134674,134675],{},[1410,134676,134677,134679],{},[1413,134678,127991],{"align":24710},[1413,134680,28464],{"align":24710},[1450,134682,134683,134691,134698,134705],{},[1410,134684,134685,134688],{},[1455,134686,134687],{"align":24710},"visible",[1455,134689,134690],{"align":24710},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1410,134692,134693,134695],{},[1455,134694,62689],{"align":24710},[1455,134696,134697],{"align":24710},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1410,134699,134700,134702],{},[1455,134701,129947],{"align":24710},[1455,134703,134704],{"align":24710},"不管超出内容否，总是显示滚动条",[1410,134706,134707,134709],{},[1455,134708,73638],{"align":24710},[1455,134710,134711],{"align":24710},"超出自动显示滚动条，不超出不显示滚动条",[489,134713,134714,134717],{},[331,134715,134716],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[331,134718,134719],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[476,134721,134723],{"id":134722},"_1214-案例收获","12.1.4 案例收获",[2585,134725],{"style":127383,"src":134726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134728,134729],{},"问题：没做出来动态效果，使用hover没实现",[19,134731,134732],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[30,134734,134735],{"className":127527,"code":132959,"language":127529,"meta":35,"style":35},[26,134736,134737,134741,134755,134759,134773,134777,134791,134795,134809,134813],{"__ignoreMap":35},[39,134738,134739],{"class":41,"line":42},[39,134740,132966],{"class":128},[39,134742,134743,134745,134747,134749,134751,134753],{"class":41,"line":92},[39,134744,132971],{"class":49},[39,134746,80782],{"class":53},[39,134748,129887],{"class":74},[39,134750,52412],{"class":53},[39,134752,132980],{"class":74},[39,134754,130457],{"class":53},[39,134756,134757],{"class":41,"line":112},[39,134758,132987],{"class":128},[39,134760,134761,134763,134765,134767,134769,134771],{"class":41,"line":118},[39,134762,132992],{"class":49},[39,134764,80782],{"class":53},[39,134766,129887],{"class":74},[39,134768,52412],{"class":53},[39,134770,55739],{"class":74},[39,134772,130457],{"class":53},[39,134774,134775],{"class":41,"line":125},[39,134776,133007],{"class":128},[39,134778,134779,134781,134783,134785,134787,134789],{"class":41,"line":132},[39,134780,133012],{"class":49},[39,134782,80782],{"class":53},[39,134784,129887],{"class":74},[39,134786,52412],{"class":53},[39,134788,55806],{"class":74},[39,134790,130457],{"class":53},[39,134792,134793],{"class":41,"line":138},[39,134794,133027],{"class":128},[39,134796,134797,134799,134801,134803,134805,134807],{"class":41,"line":169},[39,134798,133032],{"class":49},[39,134800,80782],{"class":53},[39,134802,129887],{"class":74},[39,134804,52412],{"class":53},[39,134806,87208],{"class":74},[39,134808,130457],{"class":53},[39,134810,134811],{"class":41,"line":190},[39,134812,133047],{"class":128},[39,134814,134815,134817,134819,134821,134823,134825],{"class":41,"line":202},[39,134816,133052],{"class":49},[39,134818,80782],{"class":53},[39,134820,129887],{"class":74},[39,134822,52412],{"class":53},[39,134824,133061],{"class":74},[39,134826,130457],{"class":53},[19,134828,134829],{},"完整代码：",[30,134831,134832],{"className":127527,"code":132959,"language":127529,"meta":35,"style":35},[26,134833,134834,134838,134852,134856,134870,134874,134888,134892,134906,134910],{"__ignoreMap":35},[39,134835,134836],{"class":41,"line":42},[39,134837,132966],{"class":128},[39,134839,134840,134842,134844,134846,134848,134850],{"class":41,"line":92},[39,134841,132971],{"class":49},[39,134843,80782],{"class":53},[39,134845,129887],{"class":74},[39,134847,52412],{"class":53},[39,134849,132980],{"class":74},[39,134851,130457],{"class":53},[39,134853,134854],{"class":41,"line":112},[39,134855,132987],{"class":128},[39,134857,134858,134860,134862,134864,134866,134868],{"class":41,"line":118},[39,134859,132992],{"class":49},[39,134861,80782],{"class":53},[39,134863,129887],{"class":74},[39,134865,52412],{"class":53},[39,134867,55739],{"class":74},[39,134869,130457],{"class":53},[39,134871,134872],{"class":41,"line":125},[39,134873,133007],{"class":128},[39,134875,134876,134878,134880,134882,134884,134886],{"class":41,"line":132},[39,134877,133012],{"class":49},[39,134879,80782],{"class":53},[39,134881,129887],{"class":74},[39,134883,52412],{"class":53},[39,134885,55806],{"class":74},[39,134887,130457],{"class":53},[39,134889,134890],{"class":41,"line":138},[39,134891,133027],{"class":128},[39,134893,134894,134896,134898,134900,134902,134904],{"class":41,"line":169},[39,134895,133032],{"class":49},[39,134897,80782],{"class":53},[39,134899,129887],{"class":74},[39,134901,52412],{"class":53},[39,134903,87208],{"class":74},[39,134905,130457],{"class":53},[39,134907,134908],{"class":41,"line":190},[39,134909,133047],{"class":128},[39,134911,134912,134914,134916,134918,134920,134922],{"class":41,"line":202},[39,134913,133052],{"class":49},[39,134915,80782],{"class":53},[39,134917,129887],{"class":74},[39,134919,52412],{"class":53},[39,134921,133061],{"class":74},[39,134923,130457],{"class":53},[19,134925,134926],{},"分布思路重点详解：",[30,134928,134929],{"className":127527,"code":132959,"language":127529,"meta":35,"style":35},[26,134930,134931,134935,134949,134953,134967,134971,134985,134989,135003,135007],{"__ignoreMap":35},[39,134932,134933],{"class":41,"line":42},[39,134934,132966],{"class":128},[39,134936,134937,134939,134941,134943,134945,134947],{"class":41,"line":92},[39,134938,132971],{"class":49},[39,134940,80782],{"class":53},[39,134942,129887],{"class":74},[39,134944,52412],{"class":53},[39,134946,132980],{"class":74},[39,134948,130457],{"class":53},[39,134950,134951],{"class":41,"line":112},[39,134952,132987],{"class":128},[39,134954,134955,134957,134959,134961,134963,134965],{"class":41,"line":118},[39,134956,132992],{"class":49},[39,134958,80782],{"class":53},[39,134960,129887],{"class":74},[39,134962,52412],{"class":53},[39,134964,55739],{"class":74},[39,134966,130457],{"class":53},[39,134968,134969],{"class":41,"line":125},[39,134970,133007],{"class":128},[39,134972,134973,134975,134977,134979,134981,134983],{"class":41,"line":132},[39,134974,133012],{"class":49},[39,134976,80782],{"class":53},[39,134978,129887],{"class":74},[39,134980,52412],{"class":53},[39,134982,55806],{"class":74},[39,134984,130457],{"class":53},[39,134986,134987],{"class":41,"line":138},[39,134988,133027],{"class":128},[39,134990,134991,134993,134995,134997,134999,135001],{"class":41,"line":169},[39,134992,133032],{"class":49},[39,134994,80782],{"class":53},[39,134996,129887],{"class":74},[39,134998,52412],{"class":53},[39,135000,87208],{"class":74},[39,135002,130457],{"class":53},[39,135004,135005],{"class":41,"line":190},[39,135006,133047],{"class":128},[39,135008,135009,135011,135013,135015,135017,135019],{"class":41,"line":202},[39,135010,133052],{"class":49},[39,135012,80782],{"class":53},[39,135014,129887],{"class":74},[39,135016,52412],{"class":53},[39,135018,133061],{"class":74},[39,135020,130457],{"class":53},[2585,135022],{"style":127383,"src":135023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135025,135026],{},"图片太大，盒子太小，此时需要修改图片的大小",[30,135028,135030],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[26,135031,135032],{"__ignoreMap":35},[39,135033,135034,135036,135038,135040,135042,135045,135047,135049,135052,135055,135057,135060],{"class":41,"line":42},[39,135035,2170],{"class":53},[39,135037,2585],{"class":52275},[39,135039,56214],{"class":49},[39,135041,1117],{"class":53},[39,135043,135044],{"class":237},"\"images\u002Fpic.jpg\"",[39,135046,56222],{"class":49},[39,135048,1117],{"class":53},[39,135050,135051],{"class":237},"\"描述文字\"",[39,135053,135054],{"class":49}," title",[39,135056,1117],{"class":53},[39,135058,135059],{"class":237},"\"悬停提示\"",[39,135061,52282],{"class":53},[2585,135063],{"style":127383,"src":135064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135066,135067],{},"制造遮罩层",[30,135069,135070],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,135071,135072],{"__ignoreMap":35},[39,135073,135074,135076,135078,135080,135082,135084,135086,135088,135090,135092,135094,135096],{"class":41,"line":42},[39,135075,2170],{"class":53},[39,135077,2585],{"class":52275},[39,135079,56214],{"class":49},[39,135081,1117],{"class":53},[39,135083,135044],{"class":237},[39,135085,56222],{"class":49},[39,135087,1117],{"class":53},[39,135089,135051],{"class":237},[39,135091,135054],{"class":49},[39,135093,1117],{"class":53},[39,135095,135059],{"class":237},[39,135097,52282],{"class":53},[19,135099,135100],{},"此时是这样的为标准流",[2585,135102],{"style":127383,"src":135103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135105,135106],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135108,135109],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135111,135112],{},"让他在中间，用center(background-position)",[19,135114,135115],{},"将需要变的尽可能放到一个盒子中",[19,135117,135118],{},"放大盒子上内部盒子发生变化",[30,135120,135122],{"className":127527,"code":135121,"language":127529,"meta":35,"style":35},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[26,135123,135124,135130,135140,135144,135151,135161,135173,135185],{"__ignoreMap":35},[39,135125,135126,135128],{"class":41,"line":42},[39,135127,128594],{"class":49},[39,135129,16545],{"class":53},[39,135131,135132,135134,135136,135138],{"class":41,"line":92},[39,135133,133333],{"class":74},[39,135135,52412],{"class":53},[39,135137,55739],{"class":74},[39,135139,318],{"class":53},[39,135141,135142],{"class":41,"line":112},[39,135143,115],{"class":53},[39,135145,135146,135149],{"class":41,"line":118},[39,135147,135148],{"class":49},".child",[39,135150,16545],{"class":53},[39,135152,135153,135155,135157,135159],{"class":41,"line":125},[39,135154,133333],{"class":74},[39,135156,52412],{"class":53},[39,135158,55806],{"class":74},[39,135160,318],{"class":53},[39,135162,135163,135165,135167,135169,135171],{"class":41,"line":132},[39,135164,133347],{"class":74},[39,135166,52412],{"class":53},[39,135168,1917],{"class":74},[39,135170,1592],{"class":45},[39,135172,318],{"class":53},[39,135174,135175,135177,135179,135181,135183],{"class":41,"line":138},[39,135176,133364],{"class":74},[39,135178,52412],{"class":53},[39,135180,1917],{"class":74},[39,135182,1592],{"class":45},[39,135184,318],{"class":53},[39,135186,135187],{"class":41,"line":169},[39,135188,115],{"class":53},[19,135190,135191],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135193,135195],{"id":135194},"_122-精灵图","12.2 精灵图",[476,135197,135199],{"id":135198},"_1221-理解","12.2.1 理解",[328,135201,135202,135220],{},[331,135203,135204,135205,133433,135208,135211,135212,135215,135216,135219],{},"目的： ",[350,135206,135207],{},"为了有效地减少服务器接收和发送请求的次数",[350,135209,135210],{},"提高"," 页面的 ",[350,135213,135214],{},"加载速度"," ，出现了 ",[350,135217,135218],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[331,135221,135222,135223,135225,135226,135228,135229,135231,135232,135234,135235,135237,135238,135240],{},"使用精灵图核心：",[54691,135224],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54691,135227],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54691,135230],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54691,135233],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54691,135236],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54691,135239],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[476,135242,135244],{"id":135243},"_1222-扒图","12.2.2 扒图",[30,135246,135249],{"className":135247,"code":135248,"language":6267},[6265],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[26,135250,135248],{"__ignoreMap":35},[2585,135252],{"style":127383,"src":135253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[2585,135255],{"style":127383,"src":135256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[476,135258,135260],{"id":135259},"_1223-精灵图的实现","12.2.3 精灵图的实现",[2585,135262],{"style":127383,"src":135263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135265,135266],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[2585,135268],{"style":127383,"src":135269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[30,135271,135273],{"className":127527,"code":135272,"language":127529,"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",[26,135274,135275,135280,135287,135299,135311,135330,135347],{"__ignoreMap":35},[39,135276,135277],{"class":41,"line":42},[39,135278,135279],{"class":128},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[39,135281,135282,135285],{"class":41,"line":92},[39,135283,135284],{"class":49},".icon",[39,135286,16545],{"class":53},[39,135288,135289,135291,135293,135295,135297],{"class":41,"line":112},[39,135290,71543],{"class":74},[39,135292,52412],{"class":53},[39,135294,248],{"class":74},[39,135296,52467],{"class":45},[39,135298,318],{"class":53},[39,135300,135301,135303,135305,135307,135309],{"class":41,"line":118},[39,135302,71763],{"class":74},[39,135304,52412],{"class":53},[39,135306,248],{"class":74},[39,135308,52467],{"class":45},[39,135310,318],{"class":53},[39,135312,135313,135315,135317,135319,135321,135324,135326,135328],{"class":41,"line":125},[39,135314,71586],{"class":74},[39,135316,52412],{"class":53},[39,135318,62701],{"class":74},[39,135320,54],{"class":53},[39,135322,135323],{"class":59},"sprites.png",[39,135325,255],{"class":53},[39,135327,62711],{"class":74},[39,135329,318],{"class":53},[39,135331,135332,135334,135336,135338,135340,135343,135345],{"class":41,"line":132},[39,135333,129787],{"class":74},[39,135335,52412],{"class":53},[39,135337,52738],{"class":74},[39,135339,52467],{"class":45},[39,135341,135342],{"class":74}," -20",[39,135344,52467],{"class":45},[39,135346,318],{"class":53},[39,135348,135349],{"class":41,"line":138},[39,135350,115],{"class":53},[2585,135352],{"style":127383,"src":135353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135355,135356],{},"在前端中坐标轴的正方向是右和下",[14,135358,135360],{"id":135359},"_123-字体图标","12.3 字体图标",[476,135362,135364],{"id":135363},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135366,135367],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135369,135370],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135372,135373],{},"1.图片文件还是比较大的。",[19,135375,135376],{},"2.图片本身放大和缩小会失真。",[19,135378,135379],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135381,135382,135383,26715],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[350,135384,135385],{},"字体图标 iconfont",[19,135387,135388,135391,135392,29360],{},[350,135389,135390],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[350,135393,135394],{},"展示的是图标，本质属于字体",[476,135396,135398],{"id":135397},"_1232-字体图标的优点","12.3.2 字体图标的优点",[489,135400,135401,135406,135409,135412,135415],{},[331,135402,135403,135405],{},[350,135404,26851],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[331,135407,135408],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[331,135410,135411],{},"兼容性：几乎支持所有的浏览器，请放心使用",[331,135413,135414],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[331,135416,135417],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[476,135419,135421],{"id":135420},"_1233-字体库下载网站","12.3.3 字体库下载网站",[489,135423,135424],{},[331,135425,135426,135427],{},"icomoon字体库：",[922,135428,135431],{"href":135429,"rel":135430},"http:\u002F\u002Ficomoon.io\u002F",[24839],"http:\u002F\u002Ficomoon.io",[19,135433,135434],{},"进去之后点icomoon app",[2585,135436],{"style":127383,"src":135437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135439,135440],{},"可以对其编辑：",[2585,135442],{"style":127383,"src":135443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135445,135446],{},"生成字体：",[2585,135448],{"style":127383,"src":135449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135451,135452],{},"下载：",[2585,135454],{"style":127383,"src":135455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[489,135457,135458],{},[331,135459,135460,135461],{},"阿里iconfont字体库： ",[922,135462,135463],{"href":135463,"rel":135464},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24839],[476,135466,135468],{"id":135467},"_1234-字体图标的引入","12.3.4 字体图标的引入",[328,135470,135471],{},[331,135472,135473,135474,135477],{},"把下载包里面的 ",[350,135475,135476],{},"fonts"," 文件夹放入页面根目录下",[2585,135479],{"style":127383,"src":135480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[328,135482,135483],{"start":92},[331,135484,135485],{},"字体文件格式",[1404,135487,135488,135497],{},[1407,135489,135490],{},[1410,135491,135492,135495],{},[1413,135493,135494],{"align":24710},"格式",[1413,135496,24714],{"align":24710},[1450,135498,135499,135509,135519,135529],{},[1410,135500,135501,135506],{},[1455,135502,135503],{"align":24710},[350,135504,135505],{},".ttf",[1455,135507,135508],{"align":24710},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1410,135510,135511,135516],{},[1455,135512,135513],{"align":24710},[350,135514,135515],{},".woff",[1455,135517,135518],{"align":24710},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1410,135520,135521,135526],{},[1455,135522,135523],{"align":24710},[350,135524,135525],{},".eot",[1455,135527,135528],{"align":24710},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1410,135530,135531,135536],{},[1455,135532,135533],{"align":24710},[350,135534,135535],{},"svg",[1455,135537,135538],{"align":24710},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[328,135540,135541],{"start":112},[331,135542,135543],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[30,135545,135547],{"className":127527,"code":135546,"language":127529,"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",[26,135548,135549,135554,135561,135573,135589,135614,135635,135655,135675,135679,135685,135695,135706],{"__ignoreMap":35},[39,135550,135551],{"class":41,"line":42},[39,135552,135553],{"class":128},"\u002F* 引入字体图标 *\u002F\n",[39,135555,135556,135559],{"class":41,"line":92},[39,135557,135558],{"class":45},"@font-face",[39,135560,16545],{"class":53},[39,135562,135563,135566,135568,135571],{"class":41,"line":112},[39,135564,135565],{"class":74},"  font-family",[39,135567,52412],{"class":53},[39,135569,135570],{"class":237},"'icomoon'",[39,135572,318],{"class":53},[39,135574,135575,135578,135580,135582,135584,135587],{"class":41,"line":118},[39,135576,135577],{"class":74},"  src",[39,135579,52412],{"class":53},[39,135581,62701],{"class":74},[39,135583,54],{"class":53},[39,135585,135586],{"class":237},"'fonts\u002Ficomoon.eot'",[39,135588,166],{"class":53},[39,135590,135591,135593,135595,135597,135599,135602,135604,135607,135609,135612],{"class":41,"line":125},[39,135592,135577],{"class":74},[39,135594,52412],{"class":53},[39,135596,62701],{"class":74},[39,135598,54],{"class":53},[39,135600,135601],{"class":237},"'fonts\u002Ficomoon.eot?#iefix'",[39,135603,255],{"class":53},[39,135605,135606],{"class":74},"format",[39,135608,54],{"class":53},[39,135610,135611],{"class":237},"'embedded-opentype'",[39,135613,39022],{"class":53},[39,135615,135616,135619,135621,135624,135626,135628,135630,135633],{"class":41,"line":132},[39,135617,135618],{"class":74},"       url",[39,135620,54],{"class":53},[39,135622,135623],{"class":237},"'fonts\u002Ficomoon.woff'",[39,135625,255],{"class":53},[39,135627,135606],{"class":74},[39,135629,54],{"class":53},[39,135631,135632],{"class":237},"'woff'",[39,135634,39022],{"class":53},[39,135636,135637,135639,135641,135644,135646,135648,135650,135653],{"class":41,"line":138},[39,135638,135618],{"class":74},[39,135640,54],{"class":53},[39,135642,135643],{"class":237},"'fonts\u002Ficomoon.ttf'",[39,135645,255],{"class":53},[39,135647,135606],{"class":74},[39,135649,54],{"class":53},[39,135651,135652],{"class":237},"'truetype'",[39,135654,39022],{"class":53},[39,135656,135657,135659,135661,135664,135666,135668,135670,135673],{"class":41,"line":169},[39,135658,135618],{"class":74},[39,135660,54],{"class":53},[39,135662,135663],{"class":237},"'fonts\u002Ficomoon.svg#icomoon'",[39,135665,255],{"class":53},[39,135667,135606],{"class":74},[39,135669,54],{"class":53},[39,135671,135672],{"class":237},"'svg'",[39,135674,166],{"class":53},[39,135676,135677],{"class":41,"line":190},[39,135678,115],{"class":53},[39,135680,135681,135683],{"class":41,"line":202},[39,135682,135284],{"class":49},[39,135684,16545],{"class":53},[39,135686,135687,135689,135691,135693],{"class":41,"line":207},[39,135688,135565],{"class":74},[39,135690,52412],{"class":53},[39,135692,135570],{"class":237},[39,135694,318],{"class":53},[39,135696,135697,135700,135702,135704],{"class":41,"line":212},[39,135698,135699],{"class":74},"  font-style",[39,135701,52412],{"class":53},[39,135703,64816],{"class":74},[39,135705,318],{"class":53},[39,135707,135708],{"class":41,"line":223},[39,135709,115],{"class":53},[19,135711,135712],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[2585,135714],{"style":127383,"src":135715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[328,135717,135718],{"start":118},[331,135719,135720],{},"添加字体",[2585,135722],{"style":127383,"src":135723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135725,135726],{},"复制：",[2585,135728],{"style":127383,"src":135729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135731,135732],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[328,135734,135735],{"start":125},[331,135736,135737],{},"代码展示：",[30,135739,135740],{"className":127527,"code":135546,"language":127529,"meta":35,"style":35},[26,135741,135742,135746,135752,135762,135776,135798,135816,135834,135852,135856,135862,135872,135882],{"__ignoreMap":35},[39,135743,135744],{"class":41,"line":42},[39,135745,135553],{"class":128},[39,135747,135748,135750],{"class":41,"line":92},[39,135749,135558],{"class":45},[39,135751,16545],{"class":53},[39,135753,135754,135756,135758,135760],{"class":41,"line":112},[39,135755,135565],{"class":74},[39,135757,52412],{"class":53},[39,135759,135570],{"class":237},[39,135761,318],{"class":53},[39,135763,135764,135766,135768,135770,135772,135774],{"class":41,"line":118},[39,135765,135577],{"class":74},[39,135767,52412],{"class":53},[39,135769,62701],{"class":74},[39,135771,54],{"class":53},[39,135773,135586],{"class":237},[39,135775,166],{"class":53},[39,135777,135778,135780,135782,135784,135786,135788,135790,135792,135794,135796],{"class":41,"line":125},[39,135779,135577],{"class":74},[39,135781,52412],{"class":53},[39,135783,62701],{"class":74},[39,135785,54],{"class":53},[39,135787,135601],{"class":237},[39,135789,255],{"class":53},[39,135791,135606],{"class":74},[39,135793,54],{"class":53},[39,135795,135611],{"class":237},[39,135797,39022],{"class":53},[39,135799,135800,135802,135804,135806,135808,135810,135812,135814],{"class":41,"line":132},[39,135801,135618],{"class":74},[39,135803,54],{"class":53},[39,135805,135623],{"class":237},[39,135807,255],{"class":53},[39,135809,135606],{"class":74},[39,135811,54],{"class":53},[39,135813,135632],{"class":237},[39,135815,39022],{"class":53},[39,135817,135818,135820,135822,135824,135826,135828,135830,135832],{"class":41,"line":138},[39,135819,135618],{"class":74},[39,135821,54],{"class":53},[39,135823,135643],{"class":237},[39,135825,255],{"class":53},[39,135827,135606],{"class":74},[39,135829,54],{"class":53},[39,135831,135652],{"class":237},[39,135833,39022],{"class":53},[39,135835,135836,135838,135840,135842,135844,135846,135848,135850],{"class":41,"line":169},[39,135837,135618],{"class":74},[39,135839,54],{"class":53},[39,135841,135663],{"class":237},[39,135843,255],{"class":53},[39,135845,135606],{"class":74},[39,135847,54],{"class":53},[39,135849,135672],{"class":237},[39,135851,166],{"class":53},[39,135853,135854],{"class":41,"line":190},[39,135855,115],{"class":53},[39,135857,135858,135860],{"class":41,"line":202},[39,135859,135284],{"class":49},[39,135861,16545],{"class":53},[39,135863,135864,135866,135868,135870],{"class":41,"line":207},[39,135865,135565],{"class":74},[39,135867,52412],{"class":53},[39,135869,135570],{"class":237},[39,135871,318],{"class":53},[39,135873,135874,135876,135878,135880],{"class":41,"line":212},[39,135875,135699],{"class":74},[39,135877,52412],{"class":53},[39,135879,64816],{"class":74},[39,135881,318],{"class":53},[39,135883,135884],{"class":41,"line":223},[39,135885,115],{"class":53},[2585,135887],{"style":127383,"src":135888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135890,135891],{},"更加细节展示：",[328,135893,135894],{},[331,135895,135896],{},"html 标签内添加小图标",[2585,135898],{"style":127383,"src":135899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[328,135901,135902],{"start":92},[331,135903,135904],{},"给标签定义字体",[30,135906,135907],{"className":128274,"code":131631,"language":128276,"meta":35,"style":35},[26,135908,135909,135913,135927,135931],{"__ignoreMap":35},[39,135910,135911],{"class":41,"line":42},[39,135912,131638],{"class":128},[39,135914,135915,135917,135919,135921,135923,135925],{"class":41,"line":92},[39,135916,2170],{"class":53},[39,135918,52586],{"class":52275},[39,135920,54461],{"class":49},[39,135922,1117],{"class":53},[39,135924,131651],{"class":237},[39,135926,52282],{"class":53},[39,135928,135929],{"class":41,"line":112},[39,135930,131658],{"class":53},[39,135932,135933,135935,135937],{"class":41,"line":118},[39,135934,52760],{"class":53},[39,135936,52586],{"class":52275},[39,135938,52282],{"class":53},[19,135940,135941],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[2585,135943],{"style":127383,"src":135944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[476,135946,135948],{"id":135947},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135950,135951],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135953,135954,135955,135958],{},"把压缩包里面的 ",[350,135956,135957],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135960,135961],{},"打开网站，点下方：",[2585,135963],{"style":127383,"src":135964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[2585,135966],{"style":127383,"src":135967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[2585,135969],{"style":127383,"src":135970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135972,135973],{},"点yes重新加载",[19,135975,135976],{},"然后重复之前的操作就可以实现了",[19,135978,135979],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[476,135981,135983],{"id":135982},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[2585,135985],{"style":127383,"src":135986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1192,135988,135989],{},"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":92,"depth":92,"links":135991},[135992,135998,136003],{"id":134595,"depth":92,"text":134596,"children":135993},[135994,135995,135996,135997],{"id":134607,"depth":112,"text":134608},{"id":134636,"depth":112,"text":134637},{"id":134664,"depth":112,"text":134665},{"id":134722,"depth":112,"text":134723},{"id":135194,"depth":92,"text":135195,"children":135999},[136000,136001,136002],{"id":135198,"depth":112,"text":135199},{"id":135243,"depth":112,"text":135244},{"id":135259,"depth":112,"text":135260},{"id":135359,"depth":92,"text":135360,"children":136004},[136005,136006,136007,136008,136009,136010],{"id":135363,"depth":112,"text":135364},{"id":135397,"depth":112,"text":135398},{"id":135420,"depth":112,"text":135421},{"id":135467,"depth":112,"text":135468},{"id":135947,"depth":112,"text":135948},{"id":135982,"depth":112,"text":135983},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134587,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136017,"title":136018,"body":136019,"description":24350,"extension":1203,"meta":137246,"navigation":121,"path":137247,"seo":137248,"stem":137249,"__hash__":137250},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136020,"toc":137227},[136021,136024,136028,136031,136045,136113,136143,136146,136150,136154,136256,136303,136307,136310,136313,136347,136350,136353,136356,136359,136362,136365,136368,136370,136373,136376,136379,136382,136385,136388,136391,136419,136422,136426,136429,136436,136439,136442,136468,136471,136475,136478,136481,136488,136492,136495,136497,136529,136532,136535,136547,136553,136556,136559,136562,136564,136568,136571,136574,136577,136622,136626,136628,136631,136638,136680,136683,136687,136692,136706,136710,136713,136716,136719,136722,136725,136759,136762,136765,136819,136822,136825,136828,136831,136883,136886,136889,136938,136942,136944,136947,136950,136953,136956,136959,137017,137020,137026,137029,137032,137064,137067,137071,137075,137078,137110,137114,137117,137161,137165,137168,137171,137174,137177,137180,137183,137186,137188,137191,137193,137196,137199,137202,137205,137210,137213,137215,137218,137221,137224],[10,136022,136018],{"id":136023},"_13-界面样式与布局技巧",[14,136025,136027],{"id":136026},"_131-css三角","13.1 css三角",[19,136029,136030],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[489,136032,136033,136036,136039,136042],{},[331,136034,136035],{},"用css 边框可以模拟三角效果",[331,136037,136038],{},"宽度高度为0",[331,136040,136041],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[331,136043,136044],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[30,136046,136048],{"className":127527,"code":136047,"language":127529,"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",[26,136049,136050,136055,136062,136072,136082,136098,136109],{"__ignoreMap":35},[39,136051,136052],{"class":41,"line":42},[39,136053,136054],{"class":128},"\u002F* CSS 实现三角形 *\u002F\n",[39,136056,136057,136060],{"class":41,"line":92},[39,136058,136059],{"class":49},".triangle",[39,136061,16545],{"class":53},[39,136063,136064,136066,136068,136070],{"class":41,"line":112},[39,136065,71543],{"class":74},[39,136067,52412],{"class":53},[39,136069,1457],{"class":74},[39,136071,318],{"class":53},[39,136073,136074,136076,136078,136080],{"class":41,"line":118},[39,136075,71763],{"class":74},[39,136077,52412],{"class":53},[39,136079,1457],{"class":74},[39,136081,318],{"class":53},[39,136083,136084,136086,136088,136090,136092,136094,136096],{"class":41,"line":125},[39,136085,71871],{"class":74},[39,136087,52412],{"class":53},[39,136089,423],{"class":74},[39,136091,52467],{"class":45},[39,136093,52496],{"class":74},[39,136095,64966],{"class":74},[39,136097,318],{"class":53},[39,136099,136100,136103,136105,136107],{"class":41,"line":132},[39,136101,136102],{"class":74},"  border-bottom-color",[39,136104,52412],{"class":53},[39,136106,63344],{"class":74},[39,136108,318],{"class":53},[39,136110,136111],{"class":41,"line":138},[39,136112,115],{"class":53},[30,136114,136115],{"className":127527,"code":131684,"language":127529,"meta":35,"style":35},[26,136116,136117,136123,136139],{"__ignoreMap":35},[39,136118,136119,136121],{"class":41,"line":42},[39,136120,52586],{"class":52275},[39,136122,16545],{"class":53},[39,136124,136125,136127,136129,136131,136133,136135,136137],{"class":41,"line":92},[39,136126,71871],{"class":74},[39,136128,52412],{"class":53},[39,136130,1483],{"class":74},[39,136132,52467],{"class":45},[39,136134,52496],{"class":74},[39,136136,130919],{"class":74},[39,136138,318],{"class":53},[39,136140,136141],{"class":41,"line":112},[39,136142,115],{"class":53},[2585,136144],{"style":127383,"src":136145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136147,136149],{"id":136148},"_132-css用户界面样式","13.2 css用户界面样式",[476,136151,136153],{"id":136152},"_1321-鼠标样式","13.2.1 鼠标样式",[30,136155,136157],{"className":127527,"code":136156,"language":127529,"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",[26,136158,136159,136164,136183,136201,136220,136237],{"__ignoreMap":35},[39,136160,136161],{"class":41,"line":42},[39,136162,136163],{"class":128},"\u002F* 鼠标样式 *\u002F\n",[39,136165,136166,136168,136170,136173,136175,136177,136180],{"class":41,"line":92},[39,136167,52586],{"class":52275},[39,136169,80782],{"class":53},[39,136171,136172],{"class":74},"cursor",[39,136174,52412],{"class":53},[39,136176,63005],{"class":74},[39,136178,136179],{"class":53},"; }   ",[39,136181,136182],{"class":128},"\u002F* 手型 *\u002F\n",[39,136184,136185,136187,136189,136191,136193,136196,136198],{"class":41,"line":112},[39,136186,52586],{"class":52275},[39,136188,80782],{"class":53},[39,136190,136172],{"class":74},[39,136192,52412],{"class":53},[39,136194,136195],{"class":74},"default",[39,136197,136179],{"class":53},[39,136199,136200],{"class":128},"\u002F* 默认 *\u002F\n",[39,136202,136203,136205,136207,136209,136211,136214,136217],{"class":41,"line":118},[39,136204,52586],{"class":52275},[39,136206,80782],{"class":53},[39,136208,136172],{"class":74},[39,136210,52412],{"class":53},[39,136212,136213],{"class":74},"move",[39,136215,136216],{"class":53},"; }      ",[39,136218,136219],{"class":128},"\u002F* 移动 *\u002F\n",[39,136221,136222,136224,136226,136228,136230,136232,136234],{"class":41,"line":125},[39,136223,52586],{"class":52275},[39,136225,80782],{"class":53},[39,136227,136172],{"class":74},[39,136229,52412],{"class":53},[39,136231,6267],{"class":74},[39,136233,136216],{"class":53},[39,136235,136236],{"class":128},"\u002F* 文本 *\u002F\n",[39,136238,136239,136241,136243,136245,136247,136250,136253],{"class":41,"line":132},[39,136240,52586],{"class":52275},[39,136242,80782],{"class":53},[39,136244,136172],{"class":74},[39,136246,52412],{"class":53},[39,136248,136249],{"class":74},"not-allowed",[39,136251,136252],{"class":53},"; } ",[39,136254,136255],{"class":128},"\u002F* 禁止 *\u002F\n",[1404,136257,136258,136266],{},[1407,136259,136260],{},[1410,136261,136262,136264],{},[1413,136263,127991],{"align":24710},[1413,136265,28464],{"align":24710},[1450,136267,136268,136275,136282,136289,136296],{},[1410,136269,136270,136272],{},[1455,136271,136195],{"align":24710},[1455,136273,136274],{"align":24710},"小白 默认",[1410,136276,136277,136279],{},[1455,136278,63005],{"align":24710},[1455,136280,136281],{"align":24710},"小手",[1410,136283,136284,136286],{},[1455,136285,136213],{"align":24710},[1455,136287,136288],{"align":24710},"移动",[1410,136290,136291,136293],{},[1455,136292,6267],{"align":24710},[1455,136294,136295],{"align":24710},"文本",[1410,136297,136298,136300],{},[1455,136299,136249],{"align":24710},[1455,136301,136302],{"align":24710},"禁止",[476,136304,136306],{"id":136305},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136308,136309],{},"去除表单轮廓线",[19,136311,136312],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[30,136314,136315],{"className":127527,"code":130891,"language":127529,"meta":35,"style":35},[26,136316,136317,136321,136327,136343],{"__ignoreMap":35},[39,136318,136319],{"class":41,"line":42},[39,136320,130898],{"class":128},[39,136322,136323,136325],{"class":41,"line":92},[39,136324,52586],{"class":52275},[39,136326,16545],{"class":53},[39,136328,136329,136331,136333,136335,136337,136339,136341],{"class":41,"line":112},[39,136330,71871],{"class":74},[39,136332,52412],{"class":53},[39,136334,1483],{"class":74},[39,136336,52467],{"class":45},[39,136338,52496],{"class":74},[39,136340,130919],{"class":74},[39,136342,318],{"class":53},[39,136344,136345],{"class":41,"line":118},[39,136346,115],{"class":53},[19,136348,136349],{},"文本域：",[2585,136351],{"style":127383,"src":136352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,136354,136355],{},"此时会有一个空白区域",[2585,136357],{"style":127383,"src":136358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,136360,136361],{},"写在同一行就不会出现这个问题",[2585,136363],{"style":127383,"src":136364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,136366,136367],{},"文本域是行内块元素，一定记住！！！",[19,136369,99208],{},[2585,136371],{"style":127383,"src":136372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,136374,136375],{},"文本域尽量放在一行",[19,136377,136378],{},"知识回顾：cols是列，rols是行",[2585,136380],{"style":127383,"src":136381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,136383,136384],{},"它可以进行拖动，显然这是我们不愿意看到的",[2585,136386],{"style":127383,"src":136387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,136389,136390],{},"使用resize进行解决",[30,136392,136394],{"className":127527,"code":136393,"language":127529,"meta":35,"style":35},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[26,136395,136396,136402,136415],{"__ignoreMap":35},[39,136397,136398,136400],{"class":41,"line":42},[39,136399,54796],{"class":52275},[39,136401,16545],{"class":53},[39,136403,136404,136406,136408,136410,136412],{"class":41,"line":92},[39,136405,71773],{"class":74},[39,136407,52412],{"class":53},[39,136409,55712],{"class":74},[39,136411,131390],{"class":53},[39,136413,136414],{"class":128},"\u002F* 取消表单轮廓线 *\u002F\n",[39,136416,136417],{"class":41,"line":112},[39,136418,115],{"class":53},[19,136420,136421],{},"此时就无法通过右下方实现拖动了",[476,136423,136425],{"id":136424},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,136427,136428],{},"实现一个盒子中的文字和图片对齐",[19,136430,136431,136432,136435],{},"用于设置一个元素的 ",[350,136433,136434],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,136437,136438],{},"图片和文字默认是基线对齐",[2585,136440],{"style":127383,"src":136441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[30,136443,136444],{"className":127527,"code":136393,"language":127529,"meta":35,"style":35},[26,136445,136446,136452,136464],{"__ignoreMap":35},[39,136447,136448,136450],{"class":41,"line":42},[39,136449,54796],{"class":52275},[39,136451,16545],{"class":53},[39,136453,136454,136456,136458,136460,136462],{"class":41,"line":92},[39,136455,71773],{"class":74},[39,136457,52412],{"class":53},[39,136459,55712],{"class":74},[39,136461,131390],{"class":53},[39,136463,136414],{"class":128},[39,136465,136466],{"class":41,"line":112},[39,136467,115],{"class":53},[2585,136469],{"style":127383,"src":136470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22971,136472,136474],{"id":136473},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136476,136477],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[2585,136479],{"style":127383,"src":136480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136482,136483,136484,136487],{},"此时可以给图片、表单这些行内块元素的 ",[350,136485,136486],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22971,136489,136491],{"id":136490},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136493,136494],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136496,15606],{},[30,136498,136500],{"className":127527,"code":136499,"language":127529,"meta":35,"style":35},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[26,136501,136502,136507,136513,136525],{"__ignoreMap":35},[39,136503,136504],{"class":41,"line":42},[39,136505,136506],{"class":128},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[39,136508,136509,136511],{"class":41,"line":92},[39,136510,2585],{"class":52275},[39,136512,16545],{"class":53},[39,136514,136515,136518,136520,136523],{"class":41,"line":112},[39,136516,136517],{"class":74},"  vertical-align",[39,136519,52412],{"class":53},[39,136521,136522],{"class":74},"middle",[39,136524,318],{"class":53},[39,136526,136527],{"class":41,"line":118},[39,136528,115],{"class":53},[2585,136530],{"style":127383,"src":136531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136533,136534],{},"主要解决方法有两种：",[328,136536,136537],{},[331,136538,136539,136542,136543,136546],{},[350,136540,136541],{},"给图片"," 添加 ",[350,136544,136545],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136548,136549,136550],{},"2.把图片转换为块级元素 ",[350,136551,136552],{},"display: block",[19,136554,136555],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136557,136558],{},"img {",[19,136560,136561],{},"vertical-align:middle;",[19,136563,2206],{},[476,136565,136567],{"id":136566},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136569,136570],{},"效果：",[2585,136572],{"style":127383,"src":136573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136575,136576],{},"单行文本溢出显示省略号--必须满足三个条件：",[30,136578,136580],{"className":127527,"code":136579,"language":127529,"meta":35,"style":35},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[26,136581,136582,136587,136593,136603,136608,136618],{"__ignoreMap":35},[39,136583,136584],{"class":41,"line":42},[39,136585,136586],{"class":128},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[39,136588,136589,136591],{"class":41,"line":92},[39,136590,2585],{"class":52275},[39,136592,16545],{"class":53},[39,136594,136595,136597,136599,136601],{"class":41,"line":112},[39,136596,136517],{"class":74},[39,136598,52412],{"class":53},[39,136600,136522],{"class":74},[39,136602,318],{"class":53},[39,136604,136605],{"class":41,"line":118},[39,136606,136607],{"class":128},"  \u002F* 或 *\u002F\n",[39,136609,136610,136612,136614,136616],{"class":41,"line":125},[39,136611,129143],{"class":74},[39,136613,52412],{"class":53},[39,136615,61844],{"class":74},[39,136617,318],{"class":53},[39,136619,136620],{"class":41,"line":132},[39,136621,115],{"class":53},[476,136623,136625],{"id":136624},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136627,136570],{},[2585,136629],{"style":127383,"src":136630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136632,136633,136634,136637],{},"多行文本溢出显示省略号， ",[350,136635,136636],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[30,136639,136640],{"className":127527,"code":136579,"language":127529,"meta":35,"style":35},[26,136641,136642,136646,136652,136662,136666,136676],{"__ignoreMap":35},[39,136643,136644],{"class":41,"line":42},[39,136645,136586],{"class":128},[39,136647,136648,136650],{"class":41,"line":92},[39,136649,2585],{"class":52275},[39,136651,16545],{"class":53},[39,136653,136654,136656,136658,136660],{"class":41,"line":112},[39,136655,136517],{"class":74},[39,136657,52412],{"class":53},[39,136659,136522],{"class":74},[39,136661,318],{"class":53},[39,136663,136664],{"class":41,"line":118},[39,136665,136607],{"class":128},[39,136667,136668,136670,136672,136674],{"class":41,"line":125},[39,136669,129143],{"class":74},[39,136671,52412],{"class":53},[39,136673,61844],{"class":74},[39,136675,318],{"class":53},[39,136677,136678],{"class":41,"line":132},[39,136679,115],{"class":53},[19,136681,136682],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136684,136686],{"id":136685},"_133-常见布局技巧","13.3 常见布局技巧",[19,136688,136689],{},[350,136690,136691],{},"巧妙利用一个技术更快更好的布局：",[328,136693,136694,136697,136700,136703],{},[331,136695,136696],{},"margin负值的运用",[331,136698,136699],{},"文字围绕浮动元素",[331,136701,136702],{},"行内块的巧妙运用",[331,136704,136705],{},"CSS三角强化",[476,136707,136709],{"id":136708},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,136711,136712],{},"应用场景：",[2585,136714],{"style":127383,"src":136715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[2585,136717],{"style":127383,"src":136718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,136720,136721],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,136723,136724],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[30,136726,136727],{"className":127527,"code":130891,"language":127529,"meta":35,"style":35},[26,136728,136729,136733,136739,136755],{"__ignoreMap":35},[39,136730,136731],{"class":41,"line":42},[39,136732,130898],{"class":128},[39,136734,136735,136737],{"class":41,"line":92},[39,136736,52586],{"class":52275},[39,136738,16545],{"class":53},[39,136740,136741,136743,136745,136747,136749,136751,136753],{"class":41,"line":112},[39,136742,71871],{"class":74},[39,136744,52412],{"class":53},[39,136746,1483],{"class":74},[39,136748,52467],{"class":45},[39,136750,52496],{"class":74},[39,136752,130919],{"class":74},[39,136754,318],{"class":53},[39,136756,136757],{"class":41,"line":118},[39,136758,115],{"class":53},[2585,136760],{"style":127383,"src":136761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,136763,136764],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[30,136766,136768],{"className":127527,"code":136767,"language":127529,"meta":35,"style":35},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[26,136769,136770,136775,136781,136791,136803,136815],{"__ignoreMap":35},[39,136771,136772],{"class":41,"line":42},[39,136773,136774],{"class":128},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[39,136776,136777,136779],{"class":41,"line":92},[39,136778,131375],{"class":49},[39,136780,16545],{"class":53},[39,136782,136783,136785,136787,136789],{"class":41,"line":112},[39,136784,133333],{"class":74},[39,136786,52412],{"class":53},[39,136788,55739],{"class":74},[39,136790,318],{"class":53},[39,136792,136793,136795,136797,136799,136801],{"class":41,"line":118},[39,136794,133347],{"class":74},[39,136796,52412],{"class":53},[39,136798,423],{"class":74},[39,136800,52467],{"class":45},[39,136802,318],{"class":53},[39,136804,136805,136807,136809,136811,136813],{"class":41,"line":125},[39,136806,133364],{"class":74},[39,136808,52412],{"class":53},[39,136810,248],{"class":74},[39,136812,52467],{"class":45},[39,136814,318],{"class":53},[39,136816,136817],{"class":41,"line":132},[39,136818,115],{"class":53},[19,136820,136821],{},"加上上述代码会发现：",[2585,136823],{"style":127383,"src":136824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136826,136827],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136829,136830],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[30,136832,136833],{"className":127527,"code":136767,"language":127529,"meta":35,"style":35},[26,136834,136835,136839,136845,136855,136867,136879],{"__ignoreMap":35},[39,136836,136837],{"class":41,"line":42},[39,136838,136774],{"class":128},[39,136840,136841,136843],{"class":41,"line":92},[39,136842,131375],{"class":49},[39,136844,16545],{"class":53},[39,136846,136847,136849,136851,136853],{"class":41,"line":112},[39,136848,133333],{"class":74},[39,136850,52412],{"class":53},[39,136852,55739],{"class":74},[39,136854,318],{"class":53},[39,136856,136857,136859,136861,136863,136865],{"class":41,"line":118},[39,136858,133347],{"class":74},[39,136860,52412],{"class":53},[39,136862,423],{"class":74},[39,136864,52467],{"class":45},[39,136866,318],{"class":53},[39,136868,136869,136871,136873,136875,136877],{"class":41,"line":125},[39,136870,133364],{"class":74},[39,136872,52412],{"class":53},[39,136874,248],{"class":74},[39,136876,52467],{"class":45},[39,136878,318],{"class":53},[39,136880,136881],{"class":41,"line":132},[39,136882,115],{"class":53},[19,136884,136885],{},"解决方式2：",[19,136887,136888],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[30,136890,136892],{"className":127527,"code":136891,"language":127529,"meta":35,"style":35},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[26,136893,136894,136900,136910,136922,136934],{"__ignoreMap":35},[39,136895,136896,136898],{"class":41,"line":42},[39,136897,52586],{"class":52275},[39,136899,16545],{"class":53},[39,136901,136902,136904,136906,136908],{"class":41,"line":92},[39,136903,133333],{"class":74},[39,136905,52412],{"class":53},[39,136907,55739],{"class":74},[39,136909,318],{"class":53},[39,136911,136912,136914,136916,136918,136920],{"class":41,"line":112},[39,136913,133347],{"class":74},[39,136915,52412],{"class":53},[39,136917,423],{"class":74},[39,136919,52467],{"class":45},[39,136921,318],{"class":53},[39,136923,136924,136926,136928,136930,136932],{"class":41,"line":118},[39,136925,133364],{"class":74},[39,136927,52412],{"class":53},[39,136929,248],{"class":74},[39,136931,52467],{"class":45},[39,136933,318],{"class":53},[39,136935,136936],{"class":41,"line":125},[39,136937,115],{"class":53},[476,136939,136941],{"id":136940},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136943,136712],{},[2585,136945],{"style":127383,"src":136946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136948,136949],{},"实现结构图：",[2585,136951],{"style":127383,"src":136952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136954,136955],{},"巧妙运用浮动元素不会压住文字的特性",[19,136957,136958],{},"代码显示：",[30,136960,136962],{"className":127527,"code":136961,"language":127529,"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",[26,136963,136964,136970,136980,136984,136989,136993,136999,137013],{"__ignoreMap":35},[39,136965,136966,136968],{"class":41,"line":42},[39,136967,131375],{"class":49},[39,136969,16545],{"class":53},[39,136971,136972,136974,136976,136978],{"class":41,"line":92},[39,136973,132007],{"class":74},[39,136975,52412],{"class":53},[39,136977,24710],{"class":74},[39,136979,318],{"class":53},[39,136981,136982],{"class":41,"line":112},[39,136983,115],{"class":53},[39,136985,136986],{"class":41,"line":118},[39,136987,136988],{"class":53},"```Css\n",[39,136990,136991],{"class":41,"line":125},[39,136992,131370],{"class":128},[39,136994,136995,136997],{"class":41,"line":132},[39,136996,131375],{"class":49},[39,136998,16545],{"class":53},[39,137000,137001,137003,137005,137007,137009,137011],{"class":41,"line":138},[39,137002,71445],{"class":74},[39,137004,52412],{"class":53},[39,137006,1457],{"class":74},[39,137008,52531],{"class":74},[39,137010,131390],{"class":53},[39,137012,131393],{"class":128},[39,137014,137015],{"class":41,"line":169},[39,137016,115],{"class":53},[19,137018,137019],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[30,137021,137024],{"className":137022,"code":137023,"language":6267},[6265],"\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",[26,137025,137023],{"__ignoreMap":35},[2585,137027],{"style":127383,"src":137028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137030,137031],{},"最终展示结果：",[30,137033,137034],{"className":127527,"code":131363,"language":127529,"meta":35,"style":35},[26,137035,137036,137040,137046,137060],{"__ignoreMap":35},[39,137037,137038],{"class":41,"line":42},[39,137039,131370],{"class":128},[39,137041,137042,137044],{"class":41,"line":92},[39,137043,131375],{"class":49},[39,137045,16545],{"class":53},[39,137047,137048,137050,137052,137054,137056,137058],{"class":41,"line":112},[39,137049,71445],{"class":74},[39,137051,52412],{"class":53},[39,137053,1457],{"class":74},[39,137055,52531],{"class":74},[39,137057,131390],{"class":53},[39,137059,131393],{"class":128},[39,137061,137062],{"class":41,"line":118},[39,137063,115],{"class":53},[2585,137065],{"style":127383,"src":137066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137068,137070],{"id":137069},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[476,137072,137074],{"id":137073},"_1341-原理","13.4.1 原理",[2585,137076],{"style":127383,"src":137077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[30,137079,137080],{"className":127527,"code":131363,"language":127529,"meta":35,"style":35},[26,137081,137082,137086,137092,137106],{"__ignoreMap":35},[39,137083,137084],{"class":41,"line":42},[39,137085,131370],{"class":128},[39,137087,137088,137090],{"class":41,"line":92},[39,137089,131375],{"class":49},[39,137091,16545],{"class":53},[39,137093,137094,137096,137098,137100,137102,137104],{"class":41,"line":112},[39,137095,71445],{"class":74},[39,137097,52412],{"class":53},[39,137099,1457],{"class":74},[39,137101,52531],{"class":74},[39,137103,131390],{"class":53},[39,137105,131393],{"class":128},[39,137107,137108],{"class":41,"line":118},[39,137109,115],{"class":53},[476,137111,137113],{"id":137112},"_1342-实例","13.4.2 实例",[2585,137115],{"style":127383,"src":137116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[30,137118,137119],{"className":127527,"code":131993,"language":127529,"meta":35,"style":35},[26,137120,137121,137127,137137,137141,137147,137157],{"__ignoreMap":35},[39,137122,137123,137125],{"class":41,"line":42},[39,137124,132000],{"class":49},[39,137126,16545],{"class":53},[39,137128,137129,137131,137133,137135],{"class":41,"line":92},[39,137130,132007],{"class":74},[39,137132,52412],{"class":53},[39,137134,24710],{"class":74},[39,137136,318],{"class":53},[39,137138,137139],{"class":41,"line":112},[39,137140,115],{"class":53},[39,137142,137143,137145],{"class":41,"line":118},[39,137144,132022],{"class":49},[39,137146,16545],{"class":53},[39,137148,137149,137151,137153,137155],{"class":41,"line":125},[39,137150,132007],{"class":74},[39,137152,52412],{"class":53},[39,137154,73497],{"class":74},[39,137156,318],{"class":53},[39,137158,137159],{"class":41,"line":132},[39,137160,115],{"class":53},[14,137162,137164],{"id":137163},"_135-css的初始化","13.5 css的初始化",[19,137166,137167],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137169,137170],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137172,137173],{},"每个网页都必须首先进行 CSS初始化。",[19,137175,137176],{},"这里我们以 京东CSS初始化代码为例。",[19,137178,137179],{},"在网页右键查看网页源代码",[19,137181,137182],{},"找到css的link引入语句",[19,137184,137185],{},"然后ctrl+f 输入body",[19,137187,78201],{},[2585,137189],{"style":127383,"src":137190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137192,78224],{},[2585,137194],{"style":127383,"src":137195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137197,137198],{},"③打开了网页上传压缩的代码",[2585,137200],{"style":127383,"src":137201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137203,137204],{},"④从body前可以查看这个网页的初始化代码",[19,137206,137207],{},[350,137208,137209],{},"Unicode编码字体：",[19,137211,137212],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137214,84182],{},[19,137216,137217],{},"黑体 \\9ED1\\4F53",[19,137219,137220],{},"宋体 \\5B8B\\4F53",[19,137222,137223],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1192,137225,137226],{},"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":92,"depth":92,"links":137228},[137229,137230,137237,137241,137245],{"id":136026,"depth":92,"text":136027},{"id":136148,"depth":92,"text":136149,"children":137231},[137232,137233,137234,137235,137236],{"id":136152,"depth":112,"text":136153},{"id":136305,"depth":112,"text":136306},{"id":136424,"depth":112,"text":136425},{"id":136566,"depth":112,"text":136567},{"id":136624,"depth":112,"text":136625},{"id":136685,"depth":92,"text":136686,"children":137238},[137239,137240],{"id":136708,"depth":112,"text":136709},{"id":136940,"depth":112,"text":136941},{"id":137069,"depth":92,"text":137070,"children":137242},[137243,137244],{"id":137073,"depth":112,"text":137074},{"id":137112,"depth":112,"text":137113},{"id":137163,"depth":92,"text":137164},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136018,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137252,"title":137253,"body":137254,"description":24350,"extension":1203,"meta":138940,"navigation":121,"path":138941,"seo":138942,"stem":138943,"__hash__":138944},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137255,"toc":138929},[137256,137259,137263,137267,137270,137277,137280,137283,137321,137324,137326,137340,137344,137353,137357,137362,137365,137368,137371,137406,137411,137414,137444,137447,137452,137455,137458,137488,137491,137545,137548,137552,137557,137569,137572,137576,137606,137609,137614,137617,137647,137650,137654,137671,137675,137679,137682,137715,137718,137722,137725,137728,137731,137734,137737,137848,137851,137854,137857,137959,137962,137966,137970,137974,137977,138017,138020,138022,138038,138042,138045,138050,138131,138134,138137,138263,138268,138271,138279,138282,138287,138372,138375,138379,138382,138385,138389,138409,138414,138498,138501,138506,138509,138512,138590,138593,138596,138599,138602,138605,138610,138613,138616,138688,138691,138696,138699,138796,138799,138805,138808,138811,138814,138817,138820,138823,138826,138829,138833,138838,138841,138874,138879,138882,138923,138926],[10,137257,137253],{"id":137258},"_14-html5与css3新特性",[14,137260,137262],{"id":137261},"_141-html5的新特性","14.1 HTML5的新特性",[476,137264,137266],{"id":137265},"_1411-基本标签","14.1.1 基本标签",[19,137268,137269],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137271,137272,137273,137276],{},"这些新特性都有兼容性问题，基本是 ",[350,137274,137275],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137278,137279],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137281,137282],{},"现在使用的是新特性：",[489,137284,137285,137291,137297,137303,137309,137315],{},[331,137286,137287,137290],{},[26,137288,137289],{},"\u003Cheader>"," 头部标签",[331,137292,137293,137296],{},[26,137294,137295],{},"\u003Cnav>"," 导航标签",[331,137298,137299,137302],{},[26,137300,137301],{},"\u003Carticle>"," 内容标签",[331,137304,137305,137308],{},[26,137306,137307],{},"\u003Csection>"," 定义文档某个区域",[331,137310,137311,137314],{},[26,137312,137313],{},"\u003Caside>"," 侧边栏标签",[331,137316,137317,137320],{},[26,137318,137319],{},"\u003Cfooter>"," 尾部标签",[2585,137322],{"style":127383,"src":137323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137325,1301],{},[489,137327,137328,137331,137334,137337],{},[331,137329,137330],{},"这种语义化标准主要是针对搜索引擎的",[331,137332,137333],{},"这些标签页面中可以经常使用",[331,137335,137336],{},"在IE9中，需要把这些元素转换为块级元素",[331,137338,137339],{},"移动端更喜欢使用这些标签",[476,137341,137343],{"id":137342},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137345,137346,137347,137349,137350,137352],{},"音频 ",[350,137348,29149],{}," 和视频 ",[350,137351,29158],{}," 两个标签",[22971,137354,137356],{"id":137355},"_14121-视频标签-video","14.1.2.1 视频标签- video",[328,137358,137359],{},[331,137360,137361],{},"支持格式：",[2585,137363],{"style":127383,"src":137364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137366,137367],{},"尽量使用MP4，兼容性好",[19,137369,137370],{},"用MP4就可以",[30,137372,137374],{"className":128274,"code":137373,"language":128276,"meta":35,"style":35},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[26,137375,137376],{"__ignoreMap":35},[39,137377,137378,137380,137382,137384,137386,137389,137391,137394,137397,137400,137402,137404],{"class":41,"line":42},[39,137379,2170],{"class":53},[39,137381,29158],{"class":52275},[39,137383,56214],{"class":49},[39,137385,1117],{"class":53},[39,137387,137388],{"class":237},"\"movie.mp4\"",[39,137390,93398],{"class":49},[39,137392,137393],{"class":49}," autoplay",[39,137395,137396],{"class":49}," muted",[39,137398,137399],{"class":49}," loop",[39,137401,56289],{"class":53},[39,137403,29158],{"class":52275},[39,137405,52282],{"class":53},[328,137407,137408],{"start":92},[331,137409,137410],{},"兼容写法",[19,137412,137413],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[30,137415,137416],{"className":128274,"code":137373,"language":128276,"meta":35,"style":35},[26,137417,137418],{"__ignoreMap":35},[39,137419,137420,137422,137424,137426,137428,137430,137432,137434,137436,137438,137440,137442],{"class":41,"line":42},[39,137421,2170],{"class":53},[39,137423,29158],{"class":52275},[39,137425,56214],{"class":49},[39,137427,1117],{"class":53},[39,137429,137388],{"class":237},[39,137431,93398],{"class":49},[39,137433,137393],{"class":49},[39,137435,137396],{"class":49},[39,137437,137399],{"class":49},[39,137439,56289],{"class":53},[39,137441,29158],{"class":52275},[39,137443,52282],{"class":53},[19,137445,137446],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[328,137448,137449],{"start":112},[331,137450,137451],{},"video常用属性",[2585,137453],{"style":127383,"src":137454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137456,137457],{},"poster属性后面是跟的等待加载图片的地址",[30,137459,137460],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,137461,137462],{"__ignoreMap":35},[39,137463,137464,137466,137468,137470,137472,137474,137476,137478,137480,137482,137484,137486],{"class":41,"line":42},[39,137465,2170],{"class":53},[39,137467,2585],{"class":52275},[39,137469,56214],{"class":49},[39,137471,1117],{"class":53},[39,137473,135044],{"class":237},[39,137475,56222],{"class":49},[39,137477,1117],{"class":53},[39,137479,135051],{"class":237},[39,137481,135054],{"class":49},[39,137483,1117],{"class":53},[39,137485,135059],{"class":237},[39,137487,52282],{"class":53},[19,137489,137490],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[30,137492,137494],{"className":127527,"code":137493,"language":127529,"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",[26,137495,137496,137501,137507,137531,137536,137541],{"__ignoreMap":35},[39,137497,137498],{"class":41,"line":42},[39,137499,137500],{"class":128},"\u002F* 2D 位移 *\u002F\n",[39,137502,137503,137505],{"class":41,"line":92},[39,137504,52586],{"class":52275},[39,137506,16545],{"class":53},[39,137508,137509,137512,137514,137517,137519,137521,137523,137525,137527,137529],{"class":41,"line":112},[39,137510,137511],{"class":74},"  transform",[39,137513,52412],{"class":53},[39,137515,137516],{"class":74},"translate",[39,137518,54],{"class":53},[39,137520,278],{"class":74},[39,137522,52467],{"class":45},[39,137524,63],{"class":53},[39,137526,1917],{"class":74},[39,137528,52467],{"class":45},[39,137530,166],{"class":53},[39,137532,137533],{"class":41,"line":118},[39,137534,137535],{"class":128},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[39,137537,137538],{"class":41,"line":125},[39,137539,137540],{"class":128},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[39,137542,137543],{"class":41,"line":132},[39,137544,115],{"class":53},[19,137546,137547],{},"muted:自动静音属性",[22971,137549,137551],{"id":137550},"_14122-音频标签audio","14.1.2.2 音频标签audio",[328,137553,137554],{},[331,137555,137556],{},"基本使用",[19,137558,137559,137560,137565,137566],{},"当前 ",[350,137561,137562],{},[26,137563,137564],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[350,137567,137568],{},"mp3格式",[2585,137570],{"style":127383,"src":137571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[328,137573,137574],{"start":92},[331,137575,137410],{},[30,137577,137578],{"className":128274,"code":137373,"language":128276,"meta":35,"style":35},[26,137579,137580],{"__ignoreMap":35},[39,137581,137582,137584,137586,137588,137590,137592,137594,137596,137598,137600,137602,137604],{"class":41,"line":42},[39,137583,2170],{"class":53},[39,137585,29158],{"class":52275},[39,137587,56214],{"class":49},[39,137589,1117],{"class":53},[39,137591,137388],{"class":237},[39,137593,93398],{"class":49},[39,137595,137393],{"class":49},[39,137597,137396],{"class":49},[39,137599,137399],{"class":49},[39,137601,56289],{"class":53},[39,137603,29158],{"class":52275},[39,137605,52282],{"class":53},[19,137607,137608],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[328,137610,137611],{"start":112},[331,137612,137613],{},"常用属性",[2585,137615],{"style":127383,"src":137616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[30,137618,137619],{"className":128274,"code":137373,"language":128276,"meta":35,"style":35},[26,137620,137621],{"__ignoreMap":35},[39,137622,137623,137625,137627,137629,137631,137633,137635,137637,137639,137641,137643,137645],{"class":41,"line":42},[39,137624,2170],{"class":53},[39,137626,29158],{"class":52275},[39,137628,56214],{"class":49},[39,137630,1117],{"class":53},[39,137632,137388],{"class":237},[39,137634,93398],{"class":49},[39,137636,137393],{"class":49},[39,137638,137396],{"class":49},[39,137640,137399],{"class":49},[39,137642,56289],{"class":53},[39,137644,29158],{"class":52275},[39,137646,52282],{"class":53},[19,137648,137649],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22971,137651,137653],{"id":137652},"_14123-总结","14.1.2.3 总结",[489,137655,137656,137659,137662,137665,137668],{},[331,137657,137658],{},"音频标签和视频标签使用方式基本一致",[331,137660,137661],{},"浏览器支持情况不同",[331,137663,137664],{},"谷歌浏览器把音频和视频自动播放禁止了",[331,137666,137667],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[331,137669,137670],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[476,137672,137674],{"id":137673},"_1413-表单元素","14.1.3 表单元素",[22971,137676,137678],{"id":137677},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[2585,137680],{"style":127383,"src":137681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[30,137683,137685],{"className":128274,"code":137684,"language":128276,"meta":35,"style":35},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[26,137686,137687],{"__ignoreMap":35},[39,137688,137689,137691,137693,137695,137697,137699,137701,137703,137706,137708,137710,137713],{"class":41,"line":42},[39,137690,2170],{"class":53},[39,137692,54796],{"class":52275},[39,137694,54799],{"class":49},[39,137696,1117],{"class":53},[39,137698,63674],{"class":237},[39,137700,15893],{"class":49},[39,137702,1117],{"class":53},[39,137704,137705],{"class":237},"\"username\"",[39,137707,61995],{"class":49},[39,137709,1117],{"class":53},[39,137711,137712],{"class":237},"\"请输入用户名\"",[39,137714,52282],{"class":53},[2585,137716],{"style":127383,"src":137717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22971,137719,137721],{"id":137720},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[2585,137723],{"style":127383,"src":137724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137726,137727],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137729,137730],{},"快捷操作：",[2585,137732],{"style":127383,"src":137733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,137735,137736],{},"例子1：",[30,137738,137740],{"className":128274,"code":137739,"language":128276,"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",[26,137741,137742,137765,137792,137821,137840],{"__ignoreMap":35},[39,137743,137744,137746,137748,137750,137752,137755,137758,137760,137763],{"class":41,"line":42},[39,137745,2170],{"class":53},[39,137747,67600],{"class":52275},[39,137749,67603],{"class":49},[39,137751,1117],{"class":53},[39,137753,137754],{"class":237},"\"\u002Fsubmit\"",[39,137756,137757],{"class":49}," method",[39,137759,1117],{"class":53},[39,137761,137762],{"class":237},"\"post\"",[39,137764,52282],{"class":53},[39,137766,137767,137769,137771,137773,137775,137777,137779,137781,137783,137785,137787,137790],{"class":41,"line":92},[39,137768,53119],{"class":53},[39,137770,54796],{"class":52275},[39,137772,54799],{"class":49},[39,137774,1117],{"class":53},[39,137776,63674],{"class":237},[39,137778,15893],{"class":49},[39,137780,1117],{"class":53},[39,137782,137705],{"class":237},[39,137784,61995],{"class":49},[39,137786,1117],{"class":53},[39,137788,137789],{"class":237},"\"用户名\"",[39,137791,52282],{"class":53},[39,137793,137794,137796,137798,137800,137802,137805,137807,137809,137812,137814,137816,137819],{"class":41,"line":112},[39,137795,53119],{"class":53},[39,137797,54796],{"class":52275},[39,137799,54799],{"class":49},[39,137801,1117],{"class":53},[39,137803,137804],{"class":237},"\"password\"",[39,137806,15893],{"class":49},[39,137808,1117],{"class":53},[39,137810,137811],{"class":237},"\"pwd\"",[39,137813,61995],{"class":49},[39,137815,1117],{"class":53},[39,137817,137818],{"class":237},"\"密码\"",[39,137820,52282],{"class":53},[39,137822,137823,137825,137827,137829,137831,137833,137836,137838],{"class":41,"line":118},[39,137824,53119],{"class":53},[39,137826,54862],{"class":52275},[39,137828,54799],{"class":49},[39,137830,1117],{"class":53},[39,137832,67623],{"class":237},[39,137834,137835],{"class":53},">提交\u003C\u002F",[39,137837,54862],{"class":52275},[39,137839,52282],{"class":53},[39,137841,137842,137844,137846],{"class":41,"line":125},[39,137843,52760],{"class":53},[39,137845,67600],{"class":52275},[39,137847,52282],{"class":53},[2585,137849],{"style":127383,"src":137850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137852,137853],{},"value是表单域的内容",[19,137855,137856],{},"例子2：",[30,137858,137859],{"className":128274,"code":137739,"language":128276,"meta":35,"style":35},[26,137860,137861,137881,137907,137933,137951],{"__ignoreMap":35},[39,137862,137863,137865,137867,137869,137871,137873,137875,137877,137879],{"class":41,"line":42},[39,137864,2170],{"class":53},[39,137866,67600],{"class":52275},[39,137868,67603],{"class":49},[39,137870,1117],{"class":53},[39,137872,137754],{"class":237},[39,137874,137757],{"class":49},[39,137876,1117],{"class":53},[39,137878,137762],{"class":237},[39,137880,52282],{"class":53},[39,137882,137883,137885,137887,137889,137891,137893,137895,137897,137899,137901,137903,137905],{"class":41,"line":92},[39,137884,53119],{"class":53},[39,137886,54796],{"class":52275},[39,137888,54799],{"class":49},[39,137890,1117],{"class":53},[39,137892,63674],{"class":237},[39,137894,15893],{"class":49},[39,137896,1117],{"class":53},[39,137898,137705],{"class":237},[39,137900,61995],{"class":49},[39,137902,1117],{"class":53},[39,137904,137789],{"class":237},[39,137906,52282],{"class":53},[39,137908,137909,137911,137913,137915,137917,137919,137921,137923,137925,137927,137929,137931],{"class":41,"line":112},[39,137910,53119],{"class":53},[39,137912,54796],{"class":52275},[39,137914,54799],{"class":49},[39,137916,1117],{"class":53},[39,137918,137804],{"class":237},[39,137920,15893],{"class":49},[39,137922,1117],{"class":53},[39,137924,137811],{"class":237},[39,137926,61995],{"class":49},[39,137928,1117],{"class":53},[39,137930,137818],{"class":237},[39,137932,52282],{"class":53},[39,137934,137935,137937,137939,137941,137943,137945,137947,137949],{"class":41,"line":118},[39,137936,53119],{"class":53},[39,137938,54862],{"class":52275},[39,137940,54799],{"class":49},[39,137942,1117],{"class":53},[39,137944,67623],{"class":237},[39,137946,137835],{"class":53},[39,137948,54862],{"class":52275},[39,137950,52282],{"class":53},[39,137952,137953,137955,137957],{"class":41,"line":125},[39,137954,52760],{"class":53},[39,137956,67600],{"class":52275},[39,137958,52282],{"class":53},[2585,137960],{"style":127383,"src":137961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137963,137965],{"id":137964},"_142-css新特性","14.2 CSS新特性",[476,137967,137969],{"id":137968},"_1421-新增选择器","14.2.1 新增选择器",[22971,137971,137973],{"id":137972},"_14211-属性选择器","14.2.1.1 属性选择器",[2585,137975],{"style":127383,"src":137976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[30,137978,137980],{"className":127527,"code":137979,"language":127529,"meta":35,"style":35},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[26,137981,137982,137997,138013],{"__ignoreMap":35},[39,137983,137984,137986,137988,137990,137992,137994],{"class":41,"line":42},[39,137985,54796],{"class":52275},[39,137987,2150],{"class":53},[39,137989,104082],{"class":49},[39,137991,1117],{"class":45},[39,137993,63674],{"class":237},[39,137995,137996],{"class":53},"] {\n",[39,137998,137999,138001,138003,138005,138007,138009,138011],{"class":41,"line":92},[39,138000,71871],{"class":74},[39,138002,52412],{"class":53},[39,138004,1483],{"class":74},[39,138006,52467],{"class":45},[39,138008,52496],{"class":74},[39,138010,131107],{"class":74},[39,138012,318],{"class":53},[39,138014,138015],{"class":41,"line":112},[39,138016,115],{"class":53},[2585,138018],{"style":127383,"src":138019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138021,1301],{},[489,138023,138024,138027,138030,138033],{},[331,138025,138026],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[331,138028,138029],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[331,138031,138032],{},"属性选择器也可以选择出来自定义的属性",[331,138034,138035,138037],{},[350,138036,10093],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22971,138039,138041],{"id":138040},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[2585,138043],{"style":127383,"src":138044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[328,138046,138047],{},[331,138048,138049],{},"fist-child",[30,138051,138053],{"className":127527,"code":138052,"language":127529,"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",[26,138054,138055,138060,138075,138095,138113],{"__ignoreMap":35},[39,138056,138057],{"class":41,"line":42},[39,138058,138059],{"class":128},"\u002F* 属性选择器 *\u002F\n",[39,138061,138062,138064,138066,138068,138070,138072],{"class":41,"line":92},[39,138063,54796],{"class":52275},[39,138065,2150],{"class":53},[39,138067,104082],{"class":49},[39,138069,1117],{"class":45},[39,138071,63674],{"class":237},[39,138073,138074],{"class":53},"] { }\n",[39,138076,138077,138079,138081,138083,138086,138089,138092],{"class":41,"line":112},[39,138078,54796],{"class":52275},[39,138080,2150],{"class":53},[39,138082,15667],{"class":49},[39,138084,138085],{"class":45},"^=",[39,138087,138088],{"class":237},"\"icon\"",[39,138090,138091],{"class":53},"] { }  ",[39,138093,138094],{"class":128},"\u002F* 以 icon 开头 *\u002F\n",[39,138096,138097,138099,138101,138103,138106,138108,138110],{"class":41,"line":118},[39,138098,54796],{"class":52275},[39,138100,2150],{"class":53},[39,138102,15667],{"class":49},[39,138104,138105],{"class":45},"$=",[39,138107,138088],{"class":237},[39,138109,138091],{"class":53},[39,138111,138112],{"class":128},"\u002F* 以 icon 结尾 *\u002F\n",[39,138114,138115,138117,138119,138121,138124,138126,138128],{"class":41,"line":125},[39,138116,54796],{"class":52275},[39,138118,2150],{"class":53},[39,138120,15667],{"class":49},[39,138122,138123],{"class":45},"*=",[39,138125,138088],{"class":237},[39,138127,138091],{"class":53},[39,138129,138130],{"class":128},"\u002F* 包含 icon *\u002F\n",[19,138132,138133],{},"ul的第一个儿子文本为红色",[19,138135,138136],{},"一定要在冒号前加空格，不然就是选中所有的了",[30,138138,138140],{"className":127527,"code":138139,"language":127529,"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",[26,138141,138142,138148,138158,138162,138166,138171,138184,138197,138213,138230,138247],{"__ignoreMap":35},[39,138143,138144,138146],{"class":41,"line":42},[39,138145,127818],{"class":49},[39,138147,16545],{"class":53},[39,138149,138150,138152,138154,138156],{"class":41,"line":92},[39,138151,71880],{"class":74},[39,138153,52412],{"class":53},[39,138155,58396],{"class":74},[39,138157,318],{"class":53},[39,138159,138160],{"class":41,"line":112},[39,138161,115],{"class":53},[39,138163,138164],{"class":41,"line":118},[39,138165,136988],{"class":53},[39,138167,138168],{"class":41,"line":125},[39,138169,138170],{"class":128},"\u002F* 结构伪类选择器 *\u002F\n",[39,138172,138173,138175,138178,138181],{"class":41,"line":132},[39,138174,331],{"class":52275},[39,138176,138177],{"class":49},":first-child",[39,138179,138180],{"class":53}," { }           ",[39,138182,138183],{"class":128},"\u002F* 第一个 *\u002F\n",[39,138185,138186,138188,138191,138194],{"class":41,"line":138},[39,138187,331],{"class":52275},[39,138189,138190],{"class":49},":last-child",[39,138192,138193],{"class":53}," { }            ",[39,138195,138196],{"class":128},"\u002F* 最后一个 *\u002F\n",[39,138198,138199,138201,138203,138205,138207,138210],{"class":41,"line":169},[39,138200,331],{"class":52275},[39,138202,130441],{"class":49},[39,138204,54],{"class":53},[39,138206,1345],{"class":74},[39,138208,138209],{"class":53},") { }          ",[39,138211,138212],{"class":128},"\u002F* 第2个 *\u002F\n",[39,138214,138215,138217,138219,138221,138224,138227],{"class":41,"line":190},[39,138216,331],{"class":52275},[39,138218,130441],{"class":49},[39,138220,54],{"class":53},[39,138222,138223],{"class":74},"2n",[39,138225,138226],{"class":53},") { }         ",[39,138228,138229],{"class":128},"\u002F* 偶数 *\u002F\n",[39,138231,138232,138234,138236,138238,138241,138244],{"class":41,"line":202},[39,138233,331],{"class":52275},[39,138235,130441],{"class":49},[39,138237,54],{"class":53},[39,138239,138240],{"class":74},"2n+1",[39,138242,138243],{"class":53},") { }       ",[39,138245,138246],{"class":128},"\u002F* 奇数 *\u002F\n",[39,138248,138249,138251,138253,138255,138258,138260],{"class":41,"line":207},[39,138250,331],{"class":52275},[39,138252,130441],{"class":49},[39,138254,54],{"class":53},[39,138256,138257],{"class":74},"-n+3",[39,138259,138243],{"class":53},[39,138261,138262],{"class":128},"\u002F* 前3个 *\u002F\n",[52586,138264,138267],{"className":138265},[138266],"example","\n  示例内容\n",[19,138269,138270],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[489,138272,138273],{},[331,138274,138275,138278],{},[26,138276,138277],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138280,138281],{},"也就是说它选择的是熊大",[328,138283,138284],{"start":132},[331,138285,138286],{},"权重",[30,138288,138290],{"className":127527,"code":138289,"language":127529,"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",[26,138291,138292,138296,138306,138316,138330,138344,138358],{"__ignoreMap":35},[39,138293,138294],{"class":41,"line":42},[39,138295,138170],{"class":128},[39,138297,138298,138300,138302,138304],{"class":41,"line":92},[39,138299,331],{"class":52275},[39,138301,138177],{"class":49},[39,138303,138180],{"class":53},[39,138305,138183],{"class":128},[39,138307,138308,138310,138312,138314],{"class":41,"line":112},[39,138309,331],{"class":52275},[39,138311,138190],{"class":49},[39,138313,138193],{"class":53},[39,138315,138196],{"class":128},[39,138317,138318,138320,138322,138324,138326,138328],{"class":41,"line":118},[39,138319,331],{"class":52275},[39,138321,130441],{"class":49},[39,138323,54],{"class":53},[39,138325,1345],{"class":74},[39,138327,138209],{"class":53},[39,138329,138212],{"class":128},[39,138331,138332,138334,138336,138338,138340,138342],{"class":41,"line":125},[39,138333,331],{"class":52275},[39,138335,130441],{"class":49},[39,138337,54],{"class":53},[39,138339,138223],{"class":74},[39,138341,138226],{"class":53},[39,138343,138229],{"class":128},[39,138345,138346,138348,138350,138352,138354,138356],{"class":41,"line":132},[39,138347,331],{"class":52275},[39,138349,130441],{"class":49},[39,138351,54],{"class":53},[39,138353,138240],{"class":74},[39,138355,138243],{"class":53},[39,138357,138246],{"class":128},[39,138359,138360,138362,138364,138366,138368,138370],{"class":41,"line":138},[39,138361,331],{"class":52275},[39,138363,130441],{"class":49},[39,138365,54],{"class":53},[39,138367,138257],{"class":74},[39,138369,138243],{"class":53},[39,138371,138262],{"class":128},[19,138373,138374],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22971,138376,138378],{"id":138377},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138380,138381],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[2585,138383],{"style":127383,"src":138384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[328,138386,138387],{},[331,138388,1301],{},[489,138390,138391,138394,138397,138400,138403,138406],{},[331,138392,138393],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[331,138395,138396],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[331,138398,138399],{},"语法： element::before {}",[331,138401,138402],{},"before 和 after 必须有 content 属性",[331,138404,138405],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[331,138407,138408],{},"伪元素选择器和标签选择器一样，权重为 1",[328,138410,138411],{"start":92},[331,138412,138413],{},"实例",[30,138415,138416],{"className":127527,"code":138289,"language":127529,"meta":35,"style":35},[26,138417,138418,138422,138432,138442,138456,138470,138484],{"__ignoreMap":35},[39,138419,138420],{"class":41,"line":42},[39,138421,138170],{"class":128},[39,138423,138424,138426,138428,138430],{"class":41,"line":92},[39,138425,331],{"class":52275},[39,138427,138177],{"class":49},[39,138429,138180],{"class":53},[39,138431,138183],{"class":128},[39,138433,138434,138436,138438,138440],{"class":41,"line":112},[39,138435,331],{"class":52275},[39,138437,138190],{"class":49},[39,138439,138193],{"class":53},[39,138441,138196],{"class":128},[39,138443,138444,138446,138448,138450,138452,138454],{"class":41,"line":118},[39,138445,331],{"class":52275},[39,138447,130441],{"class":49},[39,138449,54],{"class":53},[39,138451,1345],{"class":74},[39,138453,138209],{"class":53},[39,138455,138212],{"class":128},[39,138457,138458,138460,138462,138464,138466,138468],{"class":41,"line":125},[39,138459,331],{"class":52275},[39,138461,130441],{"class":49},[39,138463,54],{"class":53},[39,138465,138223],{"class":74},[39,138467,138226],{"class":53},[39,138469,138229],{"class":128},[39,138471,138472,138474,138476,138478,138480,138482],{"class":41,"line":132},[39,138473,331],{"class":52275},[39,138475,130441],{"class":49},[39,138477,54],{"class":53},[39,138479,138240],{"class":74},[39,138481,138243],{"class":53},[39,138483,138246],{"class":128},[39,138485,138486,138488,138490,138492,138494,138496],{"class":41,"line":138},[39,138487,331],{"class":52275},[39,138489,130441],{"class":49},[39,138491,54],{"class":53},[39,138493,138257],{"class":74},[39,138495,138243],{"class":53},[39,138497,138262],{"class":128},[2585,138499],{"style":127383,"src":138500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[328,138502,138503],{"start":112},[331,138504,138505],{},"使用场景1",[2585,138507],{"style":127383,"src":138508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138510,138511],{},"不需要再加盒子来整红色那部分了",[30,138513,138515],{"className":127527,"code":138514,"language":127529,"meta":35,"style":35},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[26,138516,138517,138522,138531,138542,138552,138556,138565,138576,138586],{"__ignoreMap":35},[39,138518,138519],{"class":41,"line":42},[39,138520,138521],{"class":128},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[39,138523,138524,138526,138529],{"class":41,"line":92},[39,138525,52586],{"class":52275},[39,138527,138528],{"class":49},"::before",[39,138530,16545],{"class":53},[39,138532,138533,138536,138538,138540],{"class":41,"line":112},[39,138534,138535],{"class":74},"  content",[39,138537,52412],{"class":53},[39,138539,8726],{"class":237},[39,138541,318],{"class":53},[39,138543,138544,138546,138548,138550],{"class":41,"line":118},[39,138545,129143],{"class":74},[39,138547,52412],{"class":53},[39,138549,61844],{"class":74},[39,138551,318],{"class":53},[39,138553,138554],{"class":41,"line":125},[39,138555,115],{"class":53},[39,138557,138558,138560,138563],{"class":41,"line":132},[39,138559,52586],{"class":52275},[39,138561,138562],{"class":49},"::after",[39,138564,16545],{"class":53},[39,138566,138567,138569,138571,138574],{"class":41,"line":138},[39,138568,138535],{"class":74},[39,138570,52412],{"class":53},[39,138572,138573],{"class":237},"\"→\"",[39,138575,318],{"class":53},[39,138577,138578,138580,138582,138584],{"class":41,"line":169},[39,138579,71880],{"class":74},[39,138581,52412],{"class":53},[39,138583,63045],{"class":74},[39,138585,318],{"class":53},[39,138587,138588],{"class":41,"line":190},[39,138589,115],{"class":53},[2585,138591],{"style":127383,"src":138592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138594,138595],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[2585,138597],{"style":127383,"src":138598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138600,138601],{},"但是在引用时需要先转义一下",[19,138603,138604],{},"content='\\e930'",[328,138606,138607],{"start":118},[331,138608,138609],{},"使用场景2",[19,138611,138612],{},"仿土豆效果",[19,138614,138615],{},"通过使用伪元素选择器可以减少body中盒子的数量",[30,138617,138618],{"className":127527,"code":138514,"language":127529,"meta":35,"style":35},[26,138619,138620,138624,138632,138642,138652,138656,138664,138674,138684],{"__ignoreMap":35},[39,138621,138622],{"class":41,"line":42},[39,138623,138521],{"class":128},[39,138625,138626,138628,138630],{"class":41,"line":92},[39,138627,52586],{"class":52275},[39,138629,138528],{"class":49},[39,138631,16545],{"class":53},[39,138633,138634,138636,138638,138640],{"class":41,"line":112},[39,138635,138535],{"class":74},[39,138637,52412],{"class":53},[39,138639,8726],{"class":237},[39,138641,318],{"class":53},[39,138643,138644,138646,138648,138650],{"class":41,"line":118},[39,138645,129143],{"class":74},[39,138647,52412],{"class":53},[39,138649,61844],{"class":74},[39,138651,318],{"class":53},[39,138653,138654],{"class":41,"line":125},[39,138655,115],{"class":53},[39,138657,138658,138660,138662],{"class":41,"line":132},[39,138659,52586],{"class":52275},[39,138661,138562],{"class":49},[39,138663,16545],{"class":53},[39,138665,138666,138668,138670,138672],{"class":41,"line":138},[39,138667,138535],{"class":74},[39,138669,52412],{"class":53},[39,138671,138573],{"class":237},[39,138673,318],{"class":53},[39,138675,138676,138678,138680,138682],{"class":41,"line":169},[39,138677,71880],{"class":74},[39,138679,52412],{"class":53},[39,138681,63045],{"class":74},[39,138683,318],{"class":53},[39,138685,138686],{"class":41,"line":190},[39,138687,115],{"class":53},[2585,138689],{"style":127383,"src":138690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[328,138692,138693],{"start":125},[331,138694,138695],{},"使用场景3",[19,138697,138698],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[30,138700,138702],{"className":127527,"code":138701,"language":127529,"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",[26,138703,138704,138710,138720,138724,138728,138732,138740,138750,138760,138764,138772,138782,138792],{"__ignoreMap":35},[39,138705,138706,138708],{"class":41,"line":42},[39,138707,131375],{"class":49},[39,138709,16545],{"class":53},[39,138711,138712,138714,138716,138718],{"class":41,"line":92},[39,138713,132007],{"class":74},[39,138715,52412],{"class":53},[39,138717,24710],{"class":74},[39,138719,318],{"class":53},[39,138721,138722],{"class":41,"line":112},[39,138723,115],{"class":53},[39,138725,138726],{"class":41,"line":118},[39,138727,136988],{"class":53},[39,138729,138730],{"class":41,"line":125},[39,138731,138521],{"class":128},[39,138733,138734,138736,138738],{"class":41,"line":132},[39,138735,52586],{"class":52275},[39,138737,138528],{"class":49},[39,138739,16545],{"class":53},[39,138741,138742,138744,138746,138748],{"class":41,"line":138},[39,138743,138535],{"class":74},[39,138745,52412],{"class":53},[39,138747,8726],{"class":237},[39,138749,318],{"class":53},[39,138751,138752,138754,138756,138758],{"class":41,"line":169},[39,138753,129143],{"class":74},[39,138755,52412],{"class":53},[39,138757,61844],{"class":74},[39,138759,318],{"class":53},[39,138761,138762],{"class":41,"line":190},[39,138763,115],{"class":53},[39,138765,138766,138768,138770],{"class":41,"line":202},[39,138767,52586],{"class":52275},[39,138769,138562],{"class":49},[39,138771,16545],{"class":53},[39,138773,138774,138776,138778,138780],{"class":41,"line":207},[39,138775,138535],{"class":74},[39,138777,52412],{"class":53},[39,138779,138573],{"class":237},[39,138781,318],{"class":53},[39,138783,138784,138786,138788,138790],{"class":41,"line":212},[39,138785,71880],{"class":74},[39,138787,52412],{"class":53},[39,138789,63045],{"class":74},[39,138791,318],{"class":53},[39,138793,138794],{"class":41,"line":223},[39,138795,115],{"class":53},[19,138797,138798],{},"div {\nmargin: 0 auto;\n}",[30,138800,138803],{"className":138801,"code":138802,"language":6267},[6265],"\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",[26,138804,138802],{"__ignoreMap":35},[19,138806,138807],{},"如果想让多个元素都发生变化",[19,138809,138810],{},"不能如下操作：",[19,138812,138813],{},"transition: width 2s ease 0.5s;",[19,138815,138816],{},"transition: height 2s ease 0.5s;不对！！！",[19,138818,138819],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138821,138822],{},"使用如下：加逗号隔开",[19,138824,138825],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138827,138828],{},"transition all 2s ease;",[476,138830,138832],{"id":138831},"_1426-过渡练习","14.2.6 过渡练习",[328,138834,138835],{},[331,138836,138837],{},"进度条",[2585,138839],{"style":127383,"src":138840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[30,138842,138844],{"className":127527,"code":138843,"language":127529,"meta":35,"style":35},"div {\n  transition: all 0.3s ease;\n}\n",[26,138845,138846,138852,138870],{"__ignoreMap":35},[39,138847,138848,138850],{"class":41,"line":42},[39,138849,52586],{"class":52275},[39,138851,16545],{"class":53},[39,138853,138854,138857,138859,138861,138864,138866,138868],{"class":41,"line":92},[39,138855,138856],{"class":74},"  transition",[39,138858,52412],{"class":53},[39,138860,29096],{"class":74},[39,138862,138863],{"class":74}," 0.3",[39,138865,1956],{"class":45},[39,138867,79655],{"class":74},[39,138869,318],{"class":53},[39,138871,138872],{"class":41,"line":112},[39,138873,115],{"class":53},[328,138875,138876],{"start":92},[331,138877,138878],{},"小米logo",[19,138880,138881],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[30,138883,138885],{"className":127527,"code":138884,"language":127529,"meta":35,"style":35},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[26,138886,138887,138892,138898,138914,138919],{"__ignoreMap":35},[39,138888,138889],{"class":41,"line":42},[39,138890,138891],{"class":128},"\u002F* CSS3 过渡 *\u002F\n",[39,138893,138894,138896],{"class":41,"line":92},[39,138895,52586],{"class":52275},[39,138897,16545],{"class":53},[39,138899,138900,138902,138904,138906,138908,138910,138912],{"class":41,"line":112},[39,138901,138856],{"class":74},[39,138903,52412],{"class":53},[39,138905,29096],{"class":74},[39,138907,138863],{"class":74},[39,138909,1956],{"class":45},[39,138911,79655],{"class":74},[39,138913,318],{"class":53},[39,138915,138916],{"class":41,"line":118},[39,138917,138918],{"class":128},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[39,138920,138921],{"class":41,"line":125},[39,138922,115],{"class":53},[19,138924,138925],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1192,138927,138928],{},"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":92,"depth":92,"links":138930},[138931,138936],{"id":137261,"depth":92,"text":137262,"children":138932},[138933,138934,138935],{"id":137265,"depth":112,"text":137266},{"id":137342,"depth":112,"text":137343},{"id":137673,"depth":112,"text":137674},{"id":137964,"depth":92,"text":137965,"children":138937},[138938,138939],{"id":137968,"depth":112,"text":137969},{"id":138831,"depth":112,"text":138832},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137253,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138946,"title":138947,"body":138948,"description":24350,"extension":1203,"meta":140692,"navigation":121,"path":140693,"seo":140694,"stem":140695,"__hash__":140696},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138949,"toc":140673},[138950,138953,138957,138960,138966,138972,138976,138978,138981,138984,138987,138990,138993,138996,138999,139003,139007,139010,139013,139016,139020,139023,139026,139031,139034,139037,139040,139044,139047,139056,139059,139062,139066,139069,139072,139077,139084,139098,139106,139113,139118,139121,139124,139127,139134,139138,139144,139150,139153,139156,139161,139167,139169,139177,139182,139185,139191,139193,139198,139203,139206,139208,139213,139216,139221,139226,139260,139264,139268,139271,139275,139278,139364,139367,139404,139407,139443,139447,139452,139465,139519,139521,139549,139551,139579,139585,139599,139601,139645,139647,139691,139694,139701,139712,139714,139741,139743,139769,139776,139792,139794,139888,139890,139984,139991,139994,139999,140005,140079,140082,140084,140120,140122,140158,140161,140168,140187,140190,140193,140195,140220,140222,140246,140249,140252,140282,140286,140289,140352,140354,140420,140422,140486,140489,140521,140523,140549,140551,140577,140580,140611,140613,140639,140641,140667,140670],[10,138951,138947],{"id":138952},"_15-品优购项目上篇-搭建与公共模块",[14,138954,138956],{"id":138955},"_151-项目规划","15.1 项目规划",[2585,138958],{"style":127383,"src":138959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138961,138962,138965],{},[350,138963,138964],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138967,138968,138971],{},[350,138969,138970],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138973,138975],{"id":138974},"_152-项目介绍","15.2 项目介绍",[19,138977,138964],{},[2585,138979],{"style":127383,"src":138980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138982,138983],{},"主页：",[2585,138985],{"style":127383,"src":138986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138988,138989],{},"列表页：",[2585,138991],{"style":127383,"src":138992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138994,138995],{},"注册页：",[2585,138997],{"style":127383,"src":138998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139000,139002],{"id":139001},"_153-项目搭建工作","15.3 项目搭建工作",[476,139004,139006],{"id":139005},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[2585,139008],{"style":127383,"src":139009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139011,139012],{},"经常更换的图片要放到upload文件夹中",[19,139014,139015],{},"不经常换的放到images文件夹中",[476,139017,139019],{"id":139018},"_1532-创建文件如下","15.3.2 创建文件如下",[2585,139021],{"style":127383,"src":139022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[2585,139024],{"style":127383,"src":139025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139027,139028],{},[350,139029,139030],{},"初始化样式：",[19,139032,139033],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139035,139036],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139038,139039],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[476,139041,139043],{"id":139042},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139045,139046],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139048,139049,139050,139055],{},"这里最典型的应用就是 ",[350,139051,139052],{},[26,139053,139054],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[2585,139057],{"style":127383,"src":139058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139060,139061],{},"通过link方法来引入",[476,139063,139065],{"id":139064},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[2585,139067],{"style":127383,"src":139068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139070,139071],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[328,139073,139074],{},[331,139075,139076],{},"制作favicon图标",[19,139078,139079,139080,139083],{},"①把品优购图标切成 ",[26,139081,139082],{},"png"," 图片",[19,139085,139086,139087,139089,139090,139093,139094],{},"②把 ",[26,139088,139082],{}," 图片转换为 ",[26,139091,139092],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[922,139095,139096],{"href":139096,"rel":139097},"http:\u002F\u002Fwww.bitbug.net\u002F",[24839],[328,139099,139100,139103],{"start":92},[331,139101,139102],{},"favicon图标放到网站根目录下",[331,139104,139105],{},"HTML页面引入favicon",[19,139107,139108,139109,139112],{},"在html 页面里面的 ",[26,139110,139111],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139114,139115],{},[26,139116,139117],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139119,139120],{},"复制这行代码或者在生成这个的网站进行复制",[2585,139122],{"style":127383,"src":139123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139125,139126],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139128,139129,139130],{},"例如:",[922,139131,139132],{"href":139132,"rel":139133},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24839],[476,139135,139137],{"id":139136},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139139,139140,139143],{},[350,139141,139142],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139145,139146,139149],{},[350,139147,139148],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139151,139152],{},"页面必须有三个标签用来符合 SEO 优化",[2585,139154],{"style":127383,"src":139155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[328,139157,139158],{},[331,139159,139160],{},"title网站标题",[19,139162,139163,139166],{},[350,139164,139165],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139168,69765],{},[489,139170,139171,139174],{},[331,139172,139173],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[331,139175,139176],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[328,139178,139179],{"start":92},[331,139180,139181],{},"description网站描述",[19,139183,139184],{},"简要说明我们网站主要是做什么的",[19,139186,139187,139190],{},[350,139188,139189],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139192,69765],{},[19,139194,139195],{},[26,139196,139197],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[328,139199,139200],{"start":112},[331,139201,139202],{},"keywords关键词",[19,139204,139205],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139207,69765],{},[19,139209,139210],{},[26,139211,139212],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139214,139215],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139217,139218],{},[350,139219,139220],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[328,139222,139223],{"start":118},[331,139224,139225],{},"代码总结",[30,139227,139228],{"className":128274,"code":131631,"language":128276,"meta":35,"style":35},[26,139229,139230,139234,139248,139252],{"__ignoreMap":35},[39,139231,139232],{"class":41,"line":42},[39,139233,131638],{"class":128},[39,139235,139236,139238,139240,139242,139244,139246],{"class":41,"line":92},[39,139237,2170],{"class":53},[39,139239,52586],{"class":52275},[39,139241,54461],{"class":49},[39,139243,1117],{"class":53},[39,139245,131651],{"class":237},[39,139247,52282],{"class":53},[39,139249,139250],{"class":41,"line":112},[39,139251,131658],{"class":53},[39,139253,139254,139256,139258],{"class":41,"line":118},[39,139255,52760],{"class":53},[39,139257,52586],{"class":52275},[39,139259,52282],{"class":53},[14,139261,139263],{"id":139262},"_154-项目公共部分制作","15.4 项目公共部分制作",[476,139265,139267],{"id":139266},"_1541-常用模块类命名","15.4.1 常用模块类命名",[2585,139269],{"style":127383,"src":139270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[476,139272,139274],{"id":139273},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139276,139277],{},"布局思路：",[489,139279,139280,139283,139286,139308,139341],{},[331,139281,139282],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[331,139284,139285],{},"里面包含版心的盒子",[331,139287,139288,139289],{},"版心盒子里面包含 1 号左侧盒子左浮动",[489,139290,139291,139299,139305],{},[331,139292,139293,139294,22473,139296,139298],{},"1 号盒子 里面包含一个",[26,139295,489],{},[26,139297,489],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[331,139300,139301,139302,139304],{},"里面的内容是水平排列，所以需要给",[26,139303,331],{},"设置浮动",[331,139306,139307],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[331,139309,139310,139311],{},"版心盒子里面包含 2 号右侧盒子右浮动",[489,139312,139313,139327,139332],{},[331,139314,139315,139316,22473,139318,139320,139321,139323,139324,139326],{},"2 号盒子 里面包含一个",[26,139317,489],{},[26,139319,489],{},"包裹",[26,139322,331],{},"，中间的",[26,139325,2181],{},"可以用样式去设置，也可以用字符 |",[331,139328,139329,139330,139304],{},"里面内容水平排列，给",[26,139331,331],{},[331,139333,139334,139335,139337,139338,139340],{},"找到里面所有偶数的 ",[26,139336,331],{}," 设置样式（偶数的 ",[26,139339,331],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[331,139342,139343,139344],{},"需要用到字体图标",[489,139345,139346,139352,139355,139358,139361],{},[331,139347,139348,139349],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[26,139350,139351],{},"arrow-icon",[331,139353,139354],{},"先要引入字体图片的资源",[331,139356,139357],{},"在样式里面利用 font-face 来进行声明",[331,139359,139360],{},"在伪元素的 content属性设置 图标的编码",[331,139362,139363],{},"给伪元素设置font-family属性",[19,139365,139366],{},"结构实例代码：",[30,139368,139370],{"className":127527,"code":139369,"language":127529,"meta":35,"style":35},"div::before {\n  content: \"\";\n  display: block;\n}\n",[26,139371,139372,139380,139390,139400],{"__ignoreMap":35},[39,139373,139374,139376,139378],{"class":41,"line":42},[39,139375,52586],{"class":52275},[39,139377,138528],{"class":49},[39,139379,16545],{"class":53},[39,139381,139382,139384,139386,139388],{"class":41,"line":92},[39,139383,138535],{"class":74},[39,139385,52412],{"class":53},[39,139387,8726],{"class":237},[39,139389,318],{"class":53},[39,139391,139392,139394,139396,139398],{"class":41,"line":112},[39,139393,129143],{"class":74},[39,139395,52412],{"class":53},[39,139397,61844],{"class":74},[39,139399,318],{"class":53},[39,139401,139402],{"class":41,"line":118},[39,139403,115],{"class":53},[19,139405,139406],{},"样式实例代码：",[30,139408,139409],{"className":127527,"code":139369,"language":127529,"meta":35,"style":35},[26,139410,139411,139419,139429,139439],{"__ignoreMap":35},[39,139412,139413,139415,139417],{"class":41,"line":42},[39,139414,52586],{"class":52275},[39,139416,138528],{"class":49},[39,139418,16545],{"class":53},[39,139420,139421,139423,139425,139427],{"class":41,"line":92},[39,139422,138535],{"class":74},[39,139424,52412],{"class":53},[39,139426,8726],{"class":237},[39,139428,318],{"class":53},[39,139430,139431,139433,139435,139437],{"class":41,"line":112},[39,139432,129143],{"class":74},[39,139434,52412],{"class":53},[39,139436,61844],{"class":74},[39,139438,318],{"class":53},[39,139440,139441],{"class":41,"line":118},[39,139442,115],{"class":53},[476,139444,139446],{"id":139445},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[489,139448,139449],{},[331,139450,139451],{},"header 盒子必须要有高度",[19,139453,139454,139455,139457,139458],{},"1 号盒子是 ",[26,139456,132539],{}," 标志定位，在正常开发过程中， ",[350,139459,139460,139461,139464],{},"logo的布局其实是有讲究的，需要进行 ",[26,139462,139463],{},"logoSEO","的优化 （★★★）",[489,139466,139467,139475,139483,139510],{},[331,139468,139469,139471,139472,139474],{},[26,139470,132539],{}," 里面首先放一个 ",[26,139473,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[331,139476,139477,139479,139480,139482],{},[26,139478,10],{}," 里面再放一个链接，可以返回首页的，把 ",[26,139481,132539],{}," 的背景图片给链接即可",[331,139484,139485,139486],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[489,139487,139488,139503],{},[331,139489,139490,139491,139494,139495,139498,139499,139502],{},"方法1：",[26,139492,139493],{},"text-indent"," 移到盒子外面（",[26,139496,139497],{},"text-indent: -9999px",") ，然后 ",[26,139500,139501],{},"overflow:hidden"," ，淘宝的做法",[331,139504,139505,139506,139509],{},"方法2：直接给 ",[26,139507,139508],{},"font-size: 0;"," 就看不到文字了，京东的做法",[331,139511,139512,139513,139515,139516,139518],{},"最后给链接一个 ",[26,139514,52382],{}," 属性，这样鼠标放到 ",[26,139517,132539],{}," 上就可以看到提示文字了",[19,139520,139366],{},[30,139522,139523],{"className":128274,"code":132760,"language":128276,"meta":35,"style":35},[26,139524,139525],{"__ignoreMap":35},[39,139526,139527,139529,139531,139533,139535,139537,139539,139541,139543,139545,139547],{"class":41,"line":42},[39,139528,2170],{"class":53},[39,139530,922],{"class":52275},[39,139532,62032],{"class":49},[39,139534,1117],{"class":53},[39,139536,132775],{"class":237},[39,139538,132778],{"class":49},[39,139540,1117],{"class":53},[39,139542,132783],{"class":237},[39,139544,132786],{"class":53},[39,139546,922],{"class":52275},[39,139548,52282],{"class":53},[19,139550,139406],{},[30,139552,139553],{"className":128274,"code":132760,"language":128276,"meta":35,"style":35},[26,139554,139555],{"__ignoreMap":35},[39,139556,139557,139559,139561,139563,139565,139567,139569,139571,139573,139575,139577],{"class":41,"line":42},[39,139558,2170],{"class":53},[39,139560,922],{"class":52275},[39,139562,62032],{"class":49},[39,139564,1117],{"class":53},[39,139566,132775],{"class":237},[39,139568,132778],{"class":49},[39,139570,1117],{"class":53},[39,139572,132783],{"class":237},[39,139574,132786],{"class":53},[39,139576,922],{"class":52275},[39,139578,52282],{"class":53},[19,139580,139581,139582,139584],{},"2 号盒子是 ",[26,139583,132552],{}," 搜索模块定位",[489,139586,139587,139590,139593,139596],{},[331,139588,139589],{},"search盒子利用定位的方式放在对应的位置",[331,139591,139592],{},"search盒子设置绝对定位，header盒子设置相对定位",[331,139594,139595],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[331,139597,139598],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139600,139366],{},[30,139602,139603],{"className":127527,"code":132847,"language":127529,"meta":35,"style":35},[26,139604,139605,139627,139631,139641],{"__ignoreMap":35},[39,139606,139607,139609,139611,139613,139615,139617,139619,139621,139623,139625],{"class":41,"line":42},[39,139608,52586],{"class":52275},[39,139610,63],{"class":53},[39,139612,19],{"class":52275},[39,139614,63],{"class":53},[39,139616,10],{"class":52275},[39,139618,63],{"class":53},[39,139620,489],{"class":52275},[39,139622,63],{"class":53},[39,139624,331],{"class":52275},[39,139626,16545],{"class":53},[39,139628,139629],{"class":41,"line":92},[39,139630,132876],{"class":128},[39,139632,139633,139635,139637,139639],{"class":41,"line":112},[39,139634,129143],{"class":74},[39,139636,52412],{"class":53},[39,139638,61844],{"class":74},[39,139640,318],{"class":53},[39,139642,139643],{"class":41,"line":118},[39,139644,115],{"class":53},[19,139646,139406],{},[30,139648,139649],{"className":127527,"code":132847,"language":127529,"meta":35,"style":35},[26,139650,139651,139673,139677,139687],{"__ignoreMap":35},[39,139652,139653,139655,139657,139659,139661,139663,139665,139667,139669,139671],{"class":41,"line":42},[39,139654,52586],{"class":52275},[39,139656,63],{"class":53},[39,139658,19],{"class":52275},[39,139660,63],{"class":53},[39,139662,10],{"class":52275},[39,139664,63],{"class":53},[39,139666,489],{"class":52275},[39,139668,63],{"class":53},[39,139670,331],{"class":52275},[39,139672,16545],{"class":53},[39,139674,139675],{"class":41,"line":92},[39,139676,132876],{"class":128},[39,139678,139679,139681,139683,139685],{"class":41,"line":112},[39,139680,129143],{"class":74},[39,139682,52412],{"class":53},[39,139684,61844],{"class":74},[39,139686,318],{"class":53},[39,139688,139689],{"class":41,"line":118},[39,139690,115],{"class":53},[19,139692,139693],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139695,139696,139697,139700],{},"3 号盒子是 ",[26,139698,139699],{},"hotwords"," 热词模块定位",[489,139702,139703,139706,139709],{},[331,139704,139705],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[331,139707,139708],{},"给里面所有的a标签设置 左右10px的外边距",[331,139710,139711],{},"给第一个a标签设置文字变红色（#c81623）",[19,139713,139366],{},[30,139715,139717],{"className":127527,"code":139716,"language":127529,"meta":35,"style":35},"div {\n  margin: 0 auto;\n}\n",[26,139718,139719,139725,139737],{"__ignoreMap":35},[39,139720,139721,139723],{"class":41,"line":42},[39,139722,52586],{"class":52275},[39,139724,16545],{"class":53},[39,139726,139727,139729,139731,139733,139735],{"class":41,"line":92},[39,139728,71445],{"class":74},[39,139730,52412],{"class":53},[39,139732,1457],{"class":74},[39,139734,52531],{"class":74},[39,139736,318],{"class":53},[39,139738,139739],{"class":41,"line":112},[39,139740,115],{"class":53},[19,139742,139406],{},[30,139744,139745],{"className":127527,"code":139716,"language":127529,"meta":35,"style":35},[26,139746,139747,139753,139765],{"__ignoreMap":35},[39,139748,139749,139751],{"class":41,"line":42},[39,139750,52586],{"class":52275},[39,139752,16545],{"class":53},[39,139754,139755,139757,139759,139761,139763],{"class":41,"line":92},[39,139756,71445],{"class":74},[39,139758,52412],{"class":53},[39,139760,1457],{"class":74},[39,139762,52531],{"class":74},[39,139764,318],{"class":53},[39,139766,139767],{"class":41,"line":112},[39,139768,115],{"class":53},[19,139770,139771,139772,139775],{},"4 号盒子是 ",[26,139773,139774],{},"shopcar"," 购物车模块",[489,139777,139778,139783,139786,139789],{},[331,139779,124310,139780,139782],{},[26,139781,139774],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[331,139784,139785],{},"count 统计部分用绝对定位做",[331,139787,139788],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[331,139790,139791],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139793,139366],{},[30,139795,139796],{"className":127527,"code":132959,"language":127529,"meta":35,"style":35},[26,139797,139798,139802,139816,139820,139834,139838,139852,139856,139870,139874],{"__ignoreMap":35},[39,139799,139800],{"class":41,"line":42},[39,139801,132966],{"class":128},[39,139803,139804,139806,139808,139810,139812,139814],{"class":41,"line":92},[39,139805,132971],{"class":49},[39,139807,80782],{"class":53},[39,139809,129887],{"class":74},[39,139811,52412],{"class":53},[39,139813,132980],{"class":74},[39,139815,130457],{"class":53},[39,139817,139818],{"class":41,"line":112},[39,139819,132987],{"class":128},[39,139821,139822,139824,139826,139828,139830,139832],{"class":41,"line":118},[39,139823,132992],{"class":49},[39,139825,80782],{"class":53},[39,139827,129887],{"class":74},[39,139829,52412],{"class":53},[39,139831,55739],{"class":74},[39,139833,130457],{"class":53},[39,139835,139836],{"class":41,"line":125},[39,139837,133007],{"class":128},[39,139839,139840,139842,139844,139846,139848,139850],{"class":41,"line":132},[39,139841,133012],{"class":49},[39,139843,80782],{"class":53},[39,139845,129887],{"class":74},[39,139847,52412],{"class":53},[39,139849,55806],{"class":74},[39,139851,130457],{"class":53},[39,139853,139854],{"class":41,"line":138},[39,139855,133027],{"class":128},[39,139857,139858,139860,139862,139864,139866,139868],{"class":41,"line":169},[39,139859,133032],{"class":49},[39,139861,80782],{"class":53},[39,139863,129887],{"class":74},[39,139865,52412],{"class":53},[39,139867,87208],{"class":74},[39,139869,130457],{"class":53},[39,139871,139872],{"class":41,"line":190},[39,139873,133047],{"class":128},[39,139875,139876,139878,139880,139882,139884,139886],{"class":41,"line":202},[39,139877,133052],{"class":49},[39,139879,80782],{"class":53},[39,139881,129887],{"class":74},[39,139883,52412],{"class":53},[39,139885,133061],{"class":74},[39,139887,130457],{"class":53},[19,139889,139406],{},[30,139891,139892],{"className":127527,"code":132959,"language":127529,"meta":35,"style":35},[26,139893,139894,139898,139912,139916,139930,139934,139948,139952,139966,139970],{"__ignoreMap":35},[39,139895,139896],{"class":41,"line":42},[39,139897,132966],{"class":128},[39,139899,139900,139902,139904,139906,139908,139910],{"class":41,"line":92},[39,139901,132971],{"class":49},[39,139903,80782],{"class":53},[39,139905,129887],{"class":74},[39,139907,52412],{"class":53},[39,139909,132980],{"class":74},[39,139911,130457],{"class":53},[39,139913,139914],{"class":41,"line":112},[39,139915,132987],{"class":128},[39,139917,139918,139920,139922,139924,139926,139928],{"class":41,"line":118},[39,139919,132992],{"class":49},[39,139921,80782],{"class":53},[39,139923,129887],{"class":74},[39,139925,52412],{"class":53},[39,139927,55739],{"class":74},[39,139929,130457],{"class":53},[39,139931,139932],{"class":41,"line":125},[39,139933,133007],{"class":128},[39,139935,139936,139938,139940,139942,139944,139946],{"class":41,"line":132},[39,139937,133012],{"class":49},[39,139939,80782],{"class":53},[39,139941,129887],{"class":74},[39,139943,52412],{"class":53},[39,139945,55806],{"class":74},[39,139947,130457],{"class":53},[39,139949,139950],{"class":41,"line":138},[39,139951,133027],{"class":128},[39,139953,139954,139956,139958,139960,139962,139964],{"class":41,"line":169},[39,139955,133032],{"class":49},[39,139957,80782],{"class":53},[39,139959,129887],{"class":74},[39,139961,52412],{"class":53},[39,139963,87208],{"class":74},[39,139965,130457],{"class":53},[39,139967,139968],{"class":41,"line":190},[39,139969,133047],{"class":128},[39,139971,139972,139974,139976,139978,139980,139982],{"class":41,"line":202},[39,139973,133052],{"class":49},[39,139975,80782],{"class":53},[39,139977,129887],{"class":74},[39,139979,52412],{"class":53},[39,139981,133061],{"class":74},[39,139983,130457],{"class":53},[476,139985,139987,139988,139990],{"id":139986},"_1544-nav导航模块制作","15.4.4 ",[26,139989,54688],{},"导航模块制作",[2585,139992],{"style":127383,"src":139993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139995,139996,139998],{},[26,139997,54688],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140000,140001,140002],{},"1 号盒子左侧浮动，",[26,140003,140004],{},"dropdown",[489,140006,140007,140017,140025,140031,140039,140049,140057,140068],{},[331,140008,140009,140010,101993,140013,140016],{},"1号盒子有讲究，根据相关性 里面包含 ",[26,140011,140012],{},".dt",[26,140014,140015],{},".dd"," 两个盒子",[331,140018,140019,140021,140022,140024],{},[26,140020,140012],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[26,140023,140015],{}," 挤到下面去了",[331,140026,140027,140028,140030],{},"给 ",[26,140029,140015],{}," 盒子设置宽度 和 高度，以及背景颜色",[331,140032,140027,140033,140035,140036,121212],{},[26,140034,140015],{}," 盒子里面定义 无序列表 （",[26,140037,140038],{},"ul > li > a",[331,140040,140041,140042,140044,140045,140048],{},"每个 ",[26,140043,331],{}," 都有一个高度（",[26,140046,140047],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[331,140050,140027,140051,140053,140054,121212],{},[26,140052,331],{}," 里面的a设置文字大小（",[26,140055,140056],{},"14px",[331,140058,140027,140059,140061,140062,140064,140065,140067],{},[26,140060,331],{}," 设置 ",[26,140063,128688],{},"，当鼠标移入的时候，让",[26,140066,331],{},"的背景变成白色，让里面的文字变成红色",[331,140069,140070,140072,140073,140075,140076,140078],{},[26,140071,331],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[26,140074,331],{},"的右侧，那么给",[26,140077,331],{},"设置相对定位",[19,140080,140081],{},"一定要注意相关性",[19,140083,139366],{},[30,140085,140086],{"className":127527,"code":139369,"language":127529,"meta":35,"style":35},[26,140087,140088,140096,140106,140116],{"__ignoreMap":35},[39,140089,140090,140092,140094],{"class":41,"line":42},[39,140091,52586],{"class":52275},[39,140093,138528],{"class":49},[39,140095,16545],{"class":53},[39,140097,140098,140100,140102,140104],{"class":41,"line":92},[39,140099,138535],{"class":74},[39,140101,52412],{"class":53},[39,140103,8726],{"class":237},[39,140105,318],{"class":53},[39,140107,140108,140110,140112,140114],{"class":41,"line":112},[39,140109,129143],{"class":74},[39,140111,52412],{"class":53},[39,140113,61844],{"class":74},[39,140115,318],{"class":53},[39,140117,140118],{"class":41,"line":118},[39,140119,115],{"class":53},[19,140121,139406],{},[30,140123,140124],{"className":127527,"code":139369,"language":127529,"meta":35,"style":35},[26,140125,140126,140134,140144,140154],{"__ignoreMap":35},[39,140127,140128,140130,140132],{"class":41,"line":42},[39,140129,52586],{"class":52275},[39,140131,138528],{"class":49},[39,140133,16545],{"class":53},[39,140135,140136,140138,140140,140142],{"class":41,"line":92},[39,140137,138535],{"class":74},[39,140139,52412],{"class":53},[39,140141,8726],{"class":237},[39,140143,318],{"class":53},[39,140145,140146,140148,140150,140152],{"class":41,"line":112},[39,140147,129143],{"class":74},[39,140149,52412],{"class":53},[39,140151,61844],{"class":74},[39,140153,318],{"class":53},[39,140155,140156],{"class":41,"line":118},[39,140157,115],{"class":53},[19,140159,140160],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140162,140163,140164,140167],{},"2 号盒子左侧浮动，",[26,140165,140166],{},"navitems"," 导航栏组",[489,140169,140170,140175,140184],{},[331,140171,140172,140173],{},"里面结构是 ",[26,140174,140038],{},[331,140176,140177,140178,140180,140181,140183],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[26,140179,922],{},"左右的",[26,140182,31858],{},"把两侧撑开",[331,140185,140186],{},"让文字垂直居中（行高等于高度）",[2585,140188],{"style":127383,"src":140189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140191,140192],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140194,139366],{},[30,140196,140198],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},".box {\n  float: left;\n}\n",[26,140199,140200,140206,140216],{"__ignoreMap":35},[39,140201,140202,140204],{"class":41,"line":42},[39,140203,131375],{"class":49},[39,140205,16545],{"class":53},[39,140207,140208,140210,140212,140214],{"class":41,"line":92},[39,140209,132007],{"class":74},[39,140211,52412],{"class":53},[39,140213,24710],{"class":74},[39,140215,318],{"class":53},[39,140217,140218],{"class":41,"line":112},[39,140219,115],{"class":53},[19,140221,139406],{},[30,140223,140224],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},[26,140225,140226,140232,140242],{"__ignoreMap":35},[39,140227,140228,140230],{"class":41,"line":42},[39,140229,131375],{"class":49},[39,140231,16545],{"class":53},[39,140233,140234,140236,140238,140240],{"class":41,"line":92},[39,140235,132007],{"class":74},[39,140237,52412],{"class":53},[39,140239,24710],{"class":74},[39,140241,318],{"class":53},[39,140243,140244],{"class":41,"line":112},[39,140245,115],{"class":53},[19,140247,140248],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[2585,140250],{"style":127383,"src":140251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[30,140253,140254],{"className":127527,"code":131684,"language":127529,"meta":35,"style":35},[26,140255,140256,140262,140278],{"__ignoreMap":35},[39,140257,140258,140260],{"class":41,"line":42},[39,140259,52586],{"class":52275},[39,140261,16545],{"class":53},[39,140263,140264,140266,140268,140270,140272,140274,140276],{"class":41,"line":92},[39,140265,71871],{"class":74},[39,140267,52412],{"class":53},[39,140269,1483],{"class":74},[39,140271,52467],{"class":45},[39,140273,52496],{"class":74},[39,140275,130919],{"class":74},[39,140277,318],{"class":53},[39,140279,140280],{"class":41,"line":112},[39,140281,115],{"class":53},[476,140283,140285],{"id":140284},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[2585,140287],{"style":127383,"src":140288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[489,140290,140291,140296,140301],{},[331,140292,140293,140295],{},[26,140294,132730],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[331,140297,140298,140300],{},[26,140299,132730],{}," 里面有一个大的版心",[331,140302,140303,140304,140307,140308],{},"版心里面包含 1 号盒子，",[26,140305,140306],{},"mod_service"," 是服务模块，mod 是模块的意思",[489,140309,140310,140315,140328,140344,140349],{},[331,140311,140027,140312,140314],{},[26,140313,140306],{}," 设置高度（80px）和下边框",[331,140316,140317,140318,140321,140322,140324,140325,140327],{},"在里面定义 ",[26,140319,140320],{},"ul > li"," ,每个",[26,140323,331],{}," 宽度是300px 高度是 50px，给每个",[26,140326,331],{},"设置35px的左内边距",[331,140329,140330,140331,140333,140334,140336,140337,140339,140340,19383,140342,121212],{},"在每个",[26,140332,331],{},"里面，放一个 ",[26,140335,23883],{},"（里面放图标），一个",[26,140338,52586],{},"（里面放",[26,140341,52586],{},[26,140343,19],{},[331,140345,140027,140346,140348],{},[26,140347,23883],{},"设置浮动，让h5与这个div左右排列",[331,140350,140351],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140353,139366],{},[30,140355,140357],{"className":127527,"code":140356,"language":127529,"meta":35,"style":35},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[26,140358,140359,140365,140377,140389,140416],{"__ignoreMap":35},[39,140360,140361,140363],{"class":41,"line":42},[39,140362,135284],{"class":49},[39,140364,16545],{"class":53},[39,140366,140367,140369,140371,140373,140375],{"class":41,"line":92},[39,140368,71543],{"class":74},[39,140370,52412],{"class":53},[39,140372,248],{"class":74},[39,140374,52467],{"class":45},[39,140376,318],{"class":53},[39,140378,140379,140381,140383,140385,140387],{"class":41,"line":112},[39,140380,71763],{"class":74},[39,140382,52412],{"class":53},[39,140384,248],{"class":74},[39,140386,52467],{"class":45},[39,140388,318],{"class":53},[39,140390,140391,140393,140395,140397,140399,140401,140403,140405,140408,140410,140412,140414],{"class":41,"line":118},[39,140392,71586],{"class":74},[39,140394,52412],{"class":53},[39,140396,62701],{"class":74},[39,140398,54],{"class":53},[39,140400,135323],{"class":59},[39,140402,255],{"class":53},[39,140404,62711],{"class":74},[39,140406,140407],{"class":74}," -10",[39,140409,52467],{"class":45},[39,140411,135342],{"class":74},[39,140413,52467],{"class":45},[39,140415,318],{"class":53},[39,140417,140418],{"class":41,"line":125},[39,140419,115],{"class":53},[19,140421,139406],{},[30,140423,140424],{"className":127527,"code":140356,"language":127529,"meta":35,"style":35},[26,140425,140426,140432,140444,140456,140482],{"__ignoreMap":35},[39,140427,140428,140430],{"class":41,"line":42},[39,140429,135284],{"class":49},[39,140431,16545],{"class":53},[39,140433,140434,140436,140438,140440,140442],{"class":41,"line":92},[39,140435,71543],{"class":74},[39,140437,52412],{"class":53},[39,140439,248],{"class":74},[39,140441,52467],{"class":45},[39,140443,318],{"class":53},[39,140445,140446,140448,140450,140452,140454],{"class":41,"line":112},[39,140447,71763],{"class":74},[39,140449,52412],{"class":53},[39,140451,248],{"class":74},[39,140453,52467],{"class":45},[39,140455,318],{"class":53},[39,140457,140458,140460,140462,140464,140466,140468,140470,140472,140474,140476,140478,140480],{"class":41,"line":118},[39,140459,71586],{"class":74},[39,140461,52412],{"class":53},[39,140463,62701],{"class":74},[39,140465,54],{"class":53},[39,140467,135323],{"class":59},[39,140469,255],{"class":53},[39,140471,62711],{"class":74},[39,140473,140407],{"class":74},[39,140475,52467],{"class":45},[39,140477,135342],{"class":74},[39,140479,52467],{"class":45},[39,140481,318],{"class":53},[39,140483,140484],{"class":41,"line":125},[39,140485,115],{"class":53},[19,140487,140488],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[489,140490,140491,140494,140500,140506,140518],{},[331,140492,140493],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[331,140495,140496,140497,121212],{},"里面的布局利用 自定义列表来实现（",[26,140498,140499],{},"dl > dt + dd",[331,140501,140027,140502,140505],{},[26,140503,140504],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[331,140507,140027,140508,140511,140512,19383,140514,140517],{},[26,140509,140510],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[26,140513,140510],{},[26,140515,140516],{},"dd","之间有些距离",[331,140519,140520],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140522,139366],{},[30,140524,140525],{"className":127527,"code":139716,"language":127529,"meta":35,"style":35},[26,140526,140527,140533,140545],{"__ignoreMap":35},[39,140528,140529,140531],{"class":41,"line":42},[39,140530,52586],{"class":52275},[39,140532,16545],{"class":53},[39,140534,140535,140537,140539,140541,140543],{"class":41,"line":92},[39,140536,71445],{"class":74},[39,140538,52412],{"class":53},[39,140540,1457],{"class":74},[39,140542,52531],{"class":74},[39,140544,318],{"class":53},[39,140546,140547],{"class":41,"line":112},[39,140548,115],{"class":53},[19,140550,139406],{},[30,140552,140553],{"className":127527,"code":139716,"language":127529,"meta":35,"style":35},[26,140554,140555,140561,140573],{"__ignoreMap":35},[39,140556,140557,140559],{"class":41,"line":42},[39,140558,52586],{"class":52275},[39,140560,16545],{"class":53},[39,140562,140563,140565,140567,140569,140571],{"class":41,"line":92},[39,140564,71445],{"class":74},[39,140566,52412],{"class":53},[39,140568,1457],{"class":74},[39,140570,52531],{"class":74},[39,140572,318],{"class":53},[39,140574,140575],{"class":41,"line":112},[39,140576,115],{"class":53},[19,140578,140579],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[489,140581,140582,140591,140594,140605],{},[331,140583,140584,140585,140587,140588,140590],{},"分为上下两块，上面是 ",[26,140586,132747],{}," 友情链接，下面是 ",[26,140589,132740],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[331,140592,140593],{},"把内容分别复制到相应模块中",[331,140595,140027,140596,140598,140599,140601,140602,140604],{},[26,140597,132747],{}," 设置 15px 的下外边距，给",[26,140600,132747],{}," 里面 的 ",[26,140603,922],{}," 标签设置 左右 3px 的外边距",[331,140606,140607,140608,140610],{},"给",[26,140609,132740],{}," 设置 20px 的行高",[19,140612,139366],{},[30,140614,140615],{"className":127527,"code":139716,"language":127529,"meta":35,"style":35},[26,140616,140617,140623,140635],{"__ignoreMap":35},[39,140618,140619,140621],{"class":41,"line":42},[39,140620,52586],{"class":52275},[39,140622,16545],{"class":53},[39,140624,140625,140627,140629,140631,140633],{"class":41,"line":92},[39,140626,71445],{"class":74},[39,140628,52412],{"class":53},[39,140630,1457],{"class":74},[39,140632,52531],{"class":74},[39,140634,318],{"class":53},[39,140636,140637],{"class":41,"line":112},[39,140638,115],{"class":53},[19,140640,139406],{},[30,140642,140643],{"className":127527,"code":139716,"language":127529,"meta":35,"style":35},[26,140644,140645,140651,140663],{"__ignoreMap":35},[39,140646,140647,140649],{"class":41,"line":42},[39,140648,52586],{"class":52275},[39,140650,16545],{"class":53},[39,140652,140653,140655,140657,140659,140661],{"class":41,"line":92},[39,140654,71445],{"class":74},[39,140656,52412],{"class":53},[39,140658,1457],{"class":74},[39,140660,52531],{"class":74},[39,140662,318],{"class":53},[39,140664,140665],{"class":41,"line":112},[39,140666,115],{"class":53},[19,140668,140669],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1192,140671,140672],{},"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":92,"depth":92,"links":140674},[140675,140676,140677,140684],{"id":138955,"depth":92,"text":138956},{"id":138974,"depth":92,"text":138975},{"id":139001,"depth":92,"text":139002,"children":140678},[140679,140680,140681,140682,140683],{"id":139005,"depth":112,"text":139006},{"id":139018,"depth":112,"text":139019},{"id":139042,"depth":112,"text":139043},{"id":139064,"depth":112,"text":139065},{"id":139136,"depth":112,"text":139137},{"id":139262,"depth":92,"text":139263,"children":140685},[140686,140687,140688,140689,140691],{"id":139266,"depth":112,"text":139267},{"id":139273,"depth":112,"text":139274},{"id":139445,"depth":112,"text":139446},{"id":139986,"depth":112,"text":140690},"15.4.4 nav导航模块制作",{"id":140284,"depth":112,"text":140285},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138947,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140698,"title":140699,"body":140700,"description":24350,"extension":1203,"meta":143102,"navigation":121,"path":143103,"seo":143104,"stem":143105,"__hash__":143106},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140701,"toc":143079},[140702,140705,140709,140713,140725,140728,140731,140734,140745,140747,140771,140773,140797,140802,140805,140807,140843,140845,140881,140884,140889,140892,140895,140898,140928,140935,140938,140948,140950,140984,140987,141021,141027,141044,141046,141082,141084,141120,141125,141150,141152,141178,141180,141204,141211,141214,141278,141280,141322,141324,141364,141371,141376,141378,141408,141410,141440,141444,141447,141454,141466,141468,141494,141496,141520,141523,141525,141549,141555,141565,141567,141597,141599,141629,141636,141677,141679,141715,141717,141753,141757,141760,141763,141766,141772,141777,141780,141803,141806,141830,141833,141857,141862,141865,141868,141871,141874,141877,141951,141953,141983,141985,142015,142018,142021,142053,142057,142061,142075,142084,142087,142092,142094,142188,142190,142284,142307,142309,142333,142335,142359,142366,142369,142379,142381,142405,142410,142418,142420,142450,142455,142495,142497,142523,142525,142551,142555,142558,142563,142566,142570,142578,142585,142593,142595,142625,142627,142657,142665,142668,142671,142673,142703,142705,142735,142738,142743,142745,142769,142771,142795,142798,142883,142885,142909,142911,142935,142939,142941,142965,142967,143001,143005,143019,143022,143027,143030,143035,143038,143068,143076],[10,140703,140699],{"id":140704},"_16-品优购项目下篇-主体与页面开发",[14,140706,140708],{"id":140707},"_161-项目主体模块制作","16.1 项目主体模块制作",[476,140710,140712],{"id":140711},"_1611-首页制作","16.1.1 首页制作",[19,140714,140715,140717,140718,140720,140721,140724],{},[350,140716,103033],{}," 主体模块是 ",[350,140719,75033],{}," 里面专有的，注意需要新的样式文件 ",[350,140722,140723],{},"index.css，"," 就不要写在common.css中了",[2585,140726],{"style":127383,"src":140727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[2585,140729],{"style":127383,"src":140730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140732,140733],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[489,140735,140736,140739,140742],{},[331,140737,140738],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[331,140740,140741],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[331,140743,140744],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,140746,139366],{},[30,140748,140749],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},[26,140750,140751,140757,140767],{"__ignoreMap":35},[39,140752,140753,140755],{"class":41,"line":42},[39,140754,131375],{"class":49},[39,140756,16545],{"class":53},[39,140758,140759,140761,140763,140765],{"class":41,"line":92},[39,140760,132007],{"class":74},[39,140762,52412],{"class":53},[39,140764,24710],{"class":74},[39,140766,318],{"class":53},[39,140768,140769],{"class":41,"line":112},[39,140770,115],{"class":53},[19,140772,139406],{},[30,140774,140775],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},[26,140776,140777,140783,140793],{"__ignoreMap":35},[39,140778,140779,140781],{"class":41,"line":42},[39,140780,131375],{"class":49},[39,140782,16545],{"class":53},[39,140784,140785,140787,140789,140791],{"class":41,"line":92},[39,140786,132007],{"class":74},[39,140788,52412],{"class":53},[39,140790,24710],{"class":74},[39,140792,318],{"class":53},[39,140794,140795],{"class":41,"line":112},[39,140796,115],{"class":53},[328,140798,140799],{},[331,140800,140801],{},"左侧focus模块制作",[2585,140803],{"style":127383,"src":140804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140806,139366],{},[30,140808,140809],{"className":127527,"code":128850,"language":127529,"meta":35,"style":35},[26,140810,140811,140819,140829,140839],{"__ignoreMap":35},[39,140812,140813,140815,140817],{"class":41,"line":42},[39,140814,54796],{"class":52275},[39,140816,62875],{"class":49},[39,140818,16545],{"class":53},[39,140820,140821,140823,140825,140827],{"class":41,"line":92},[39,140822,128865],{"class":74},[39,140824,52412],{"class":53},[39,140826,55864],{"class":74},[39,140828,318],{"class":53},[39,140830,140831,140833,140835,140837],{"class":41,"line":112},[39,140832,71773],{"class":74},[39,140834,52412],{"class":53},[39,140836,55712],{"class":74},[39,140838,318],{"class":53},[39,140840,140841],{"class":41,"line":118},[39,140842,115],{"class":53},[19,140844,139406],{},[30,140846,140847],{"className":127527,"code":128850,"language":127529,"meta":35,"style":35},[26,140848,140849,140857,140867,140877],{"__ignoreMap":35},[39,140850,140851,140853,140855],{"class":41,"line":42},[39,140852,54796],{"class":52275},[39,140854,62875],{"class":49},[39,140856,16545],{"class":53},[39,140858,140859,140861,140863,140865],{"class":41,"line":92},[39,140860,128865],{"class":74},[39,140862,52412],{"class":53},[39,140864,55864],{"class":74},[39,140866,318],{"class":53},[39,140868,140869,140871,140873,140875],{"class":41,"line":112},[39,140870,71773],{"class":74},[39,140872,52412],{"class":53},[39,140874,55712],{"class":74},[39,140876,318],{"class":53},[39,140878,140879],{"class":41,"line":118},[39,140880,115],{"class":53},[19,140882,140883],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[328,140885,140886],{"start":92},[331,140887,140888],{},"右侧newsflash模块制作",[2585,140890],{"style":127383,"src":140891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140893,140894],{},"右侧的模块 分为上中下三个盒子",[19,140896,140897],{},"结构代码：",[30,140899,140900],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,140901,140902],{"__ignoreMap":35},[39,140903,140904,140906,140908,140910,140912,140914,140916,140918,140920,140922,140924,140926],{"class":41,"line":42},[39,140905,2170],{"class":53},[39,140907,2585],{"class":52275},[39,140909,56214],{"class":49},[39,140911,1117],{"class":53},[39,140913,135044],{"class":237},[39,140915,56222],{"class":49},[39,140917,1117],{"class":53},[39,140919,135051],{"class":237},[39,140921,135054],{"class":49},[39,140923,1117],{"class":53},[39,140925,135059],{"class":237},[39,140927,52282],{"class":53},[19,140929,140930,140931,140934],{},"1 号盒子为 ",[26,140932,140933],{},"news"," 新闻模块 高度为 165px",[2585,140936],{"style":127383,"src":140937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140939,140940,140941,140944,140945],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[26,140942,140943],{},"news-hd","，下面是 ",[26,140946,140947],{},"news-bd",[19,140949,140897],{},[30,140951,140952],{"className":128274,"code":131631,"language":128276,"meta":35,"style":35},[26,140953,140954,140958,140972,140976],{"__ignoreMap":35},[39,140955,140956],{"class":41,"line":42},[39,140957,131638],{"class":128},[39,140959,140960,140962,140964,140966,140968,140970],{"class":41,"line":92},[39,140961,2170],{"class":53},[39,140963,52586],{"class":52275},[39,140965,54461],{"class":49},[39,140967,1117],{"class":53},[39,140969,131651],{"class":237},[39,140971,52282],{"class":53},[39,140973,140974],{"class":41,"line":112},[39,140975,131658],{"class":53},[39,140977,140978,140980,140982],{"class":41,"line":118},[39,140979,52760],{"class":53},[39,140981,52586],{"class":52275},[39,140983,52282],{"class":53},[19,140985,140986],{},"样式代码：",[30,140988,140989],{"className":128274,"code":131631,"language":128276,"meta":35,"style":35},[26,140990,140991,140995,141009,141013],{"__ignoreMap":35},[39,140992,140993],{"class":41,"line":42},[39,140994,131638],{"class":128},[39,140996,140997,140999,141001,141003,141005,141007],{"class":41,"line":92},[39,140998,2170],{"class":53},[39,141000,52586],{"class":52275},[39,141002,54461],{"class":49},[39,141004,1117],{"class":53},[39,141006,131651],{"class":237},[39,141008,52282],{"class":53},[39,141010,141011],{"class":41,"line":112},[39,141012,131658],{"class":53},[39,141014,141015,141017,141019],{"class":41,"line":118},[39,141016,52760],{"class":53},[39,141018,52586],{"class":52275},[39,141020,52282],{"class":53},[19,141022,141023,141024,141026],{},"上面是",[26,141025,140943],{},"，设置高度是 33px，设置下边框",[489,141028,141029,141035],{},[331,141030,141031,141032,141034],{},"里面放一个",[26,141033,23883],{}," 标题",[331,141036,141037,141038,141040,141041,141043],{},"放一个a",[26,141039,103668],{},"，内容是 更多，然后让 ",[26,141042,922],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141045,140897],{},[30,141047,141048],{"className":127527,"code":139369,"language":127529,"meta":35,"style":35},[26,141049,141050,141058,141068,141078],{"__ignoreMap":35},[39,141051,141052,141054,141056],{"class":41,"line":42},[39,141053,52586],{"class":52275},[39,141055,138528],{"class":49},[39,141057,16545],{"class":53},[39,141059,141060,141062,141064,141066],{"class":41,"line":92},[39,141061,138535],{"class":74},[39,141063,52412],{"class":53},[39,141065,8726],{"class":237},[39,141067,318],{"class":53},[39,141069,141070,141072,141074,141076],{"class":41,"line":112},[39,141071,129143],{"class":74},[39,141073,52412],{"class":53},[39,141075,61844],{"class":74},[39,141077,318],{"class":53},[39,141079,141080],{"class":41,"line":118},[39,141081,115],{"class":53},[19,141083,140986],{},[30,141085,141086],{"className":127527,"code":139369,"language":127529,"meta":35,"style":35},[26,141087,141088,141096,141106,141116],{"__ignoreMap":35},[39,141089,141090,141092,141094],{"class":41,"line":42},[39,141091,52586],{"class":52275},[39,141093,138528],{"class":49},[39,141095,16545],{"class":53},[39,141097,141098,141100,141102,141104],{"class":41,"line":92},[39,141099,138535],{"class":74},[39,141101,52412],{"class":53},[39,141103,8726],{"class":237},[39,141105,318],{"class":53},[39,141107,141108,141110,141112,141114],{"class":41,"line":112},[39,141109,129143],{"class":74},[39,141111,52412],{"class":53},[39,141113,61844],{"class":74},[39,141115,318],{"class":53},[39,141117,141118],{"class":41,"line":118},[39,141119,115],{"class":53},[19,141121,141122,141123],{},"下面是",[26,141124,140947],{},[489,141126,141127,141135],{},[331,141128,141129,141130,101993,141132,141134],{},"里面包含 ",[26,141131,489],{},[26,141133,331],{}," 还有链接",[331,141136,140607,141137,141139,141140,141142,141143,141146,141147],{},[26,141138,331],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[26,141141,132193],{}," 2.设置 ",[26,141144,141145],{},"white-space: nowrap;"," 3. 设置 ",[26,141148,141149],{},"text-overflow: ellipsis;",[19,141151,140897],{},[30,141153,141155],{"className":127527,"code":141154,"language":127529,"meta":35,"style":35},"div {\n  overflow: hidden;\n}\n",[26,141156,141157,141163,141174],{"__ignoreMap":35},[39,141158,141159,141161],{"class":41,"line":42},[39,141160,52586],{"class":52275},[39,141162,16545],{"class":53},[39,141164,141165,141168,141170,141172],{"class":41,"line":92},[39,141166,141167],{"class":74},"  overflow",[39,141169,52412],{"class":53},[39,141171,62689],{"class":74},[39,141173,318],{"class":53},[39,141175,141176],{"class":41,"line":112},[39,141177,115],{"class":53},[19,141179,140986],{},[30,141181,141182],{"className":127527,"code":141154,"language":127529,"meta":35,"style":35},[26,141183,141184,141190,141200],{"__ignoreMap":35},[39,141185,141186,141188],{"class":41,"line":42},[39,141187,52586],{"class":52275},[39,141189,16545],{"class":53},[39,141191,141192,141194,141196,141198],{"class":41,"line":92},[39,141193,141167],{"class":74},[39,141195,52412],{"class":53},[39,141197,62689],{"class":74},[39,141199,318],{"class":53},[39,141201,141202],{"class":41,"line":112},[39,141203,115],{"class":53},[19,141205,141206,141207,141210],{},"2 号盒子为 ",[26,141208,141209],{},"lifeservice"," 生活服务模块 高度为 209px",[2585,141212],{"style":127383,"src":141213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[489,141215,141216,141219,141229,141253,141264],{},[331,141217,141218],{},"设置边框（左右下边框）",[331,141220,141221,141222,141225,141226,141228],{},"里面的内容 是 ",[26,141223,141224],{},"ul > 12*li","，给",[26,141227,331],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[331,141230,141231,141232],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[489,141233,141234,141239,141248],{},[331,141235,141236,141238],{},[26,141237,141209],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[331,141240,141241,141242,141244,141245,141247],{},"可以让 ",[26,141243,141209],{}," 里面的 ",[26,141246,489],{}," 宽度为 252，就可以装的下 4 个 小 li",[331,141249,141250,141252],{},[26,141251,141209],{}," 盒子 overflow 隐藏多余的部分就可以了",[331,141254,117442,141255,141257,141258,141260,141261,141263],{},[26,141256,331],{}," 里面放一个 ",[26,141259,1704],{},"（里面放图标），下面的文本用 ",[26,141262,19],{}," 标签包裹",[331,141265,140027,141266,141268,141269,141271,141272,140061,141274,141277],{},[26,141267,1704],{}," 设置 24px宽和28px的高（注意 ",[26,141270,1704],{}," 是行内元素， 转成行内块），给 ",[26,141273,331],{},[26,141275,141276],{},"text-align:center"," 让里面内容居中显示",[19,141279,140897],{},[30,141281,141283],{"className":127527,"code":141282,"language":127529,"meta":35,"style":35},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[26,141284,141285,141303,141308,141318],{"__ignoreMap":35},[39,141286,141287,141289,141291,141293,141295,141297,141299,141301],{"class":41,"line":42},[39,141288,39],{"class":52275},[39,141290,63],{"class":53},[39,141292,922],{"class":52275},[39,141294,63],{"class":53},[39,141296,24527],{"class":52275},[39,141298,63],{"class":53},[39,141300,350],{"class":52275},[39,141302,16545],{"class":53},[39,141304,141305],{"class":41,"line":92},[39,141306,141307],{"class":128},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[39,141309,141310,141312,141314,141316],{"class":41,"line":112},[39,141311,129143],{"class":74},[39,141313,52412],{"class":53},[39,141315,129205],{"class":74},[39,141317,318],{"class":53},[39,141319,141320],{"class":41,"line":118},[39,141321,115],{"class":53},[19,141323,140986],{},[30,141325,141326],{"className":127527,"code":141282,"language":127529,"meta":35,"style":35},[26,141327,141328,141346,141350,141360],{"__ignoreMap":35},[39,141329,141330,141332,141334,141336,141338,141340,141342,141344],{"class":41,"line":42},[39,141331,39],{"class":52275},[39,141333,63],{"class":53},[39,141335,922],{"class":52275},[39,141337,63],{"class":53},[39,141339,24527],{"class":52275},[39,141341,63],{"class":53},[39,141343,350],{"class":52275},[39,141345,16545],{"class":53},[39,141347,141348],{"class":41,"line":92},[39,141349,141307],{"class":128},[39,141351,141352,141354,141356,141358],{"class":41,"line":112},[39,141353,129143],{"class":74},[39,141355,52412],{"class":53},[39,141357,129205],{"class":74},[39,141359,318],{"class":53},[39,141361,141362],{"class":41,"line":118},[39,141363,115],{"class":53},[19,141365,141366,141367,141370],{},"3 号盒子为 ",[26,141368,141369],{},"bargain"," 特价商品",[489,141372,141373],{},[331,141374,141375],{},"这个比较简单，直接插入一张图片即可",[19,141377,140897],{},[30,141379,141380],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,141381,141382],{"__ignoreMap":35},[39,141383,141384,141386,141388,141390,141392,141394,141396,141398,141400,141402,141404,141406],{"class":41,"line":42},[39,141385,2170],{"class":53},[39,141387,2585],{"class":52275},[39,141389,56214],{"class":49},[39,141391,1117],{"class":53},[39,141393,135044],{"class":237},[39,141395,56222],{"class":49},[39,141397,1117],{"class":53},[39,141399,135051],{"class":237},[39,141401,135054],{"class":49},[39,141403,1117],{"class":53},[39,141405,135059],{"class":237},[39,141407,52282],{"class":53},[19,141409,140986],{},[30,141411,141412],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,141413,141414],{"__ignoreMap":35},[39,141415,141416,141418,141420,141422,141424,141426,141428,141430,141432,141434,141436,141438],{"class":41,"line":42},[39,141417,2170],{"class":53},[39,141419,2585],{"class":52275},[39,141421,56214],{"class":49},[39,141423,1117],{"class":53},[39,141425,135044],{"class":237},[39,141427,56222],{"class":49},[39,141429,1117],{"class":53},[39,141431,135051],{"class":237},[39,141433,135054],{"class":49},[39,141435,1117],{"class":53},[39,141437,135059],{"class":237},[39,141439,52282],{"class":53},[476,141441,141443],{"id":141442},"_1612-推荐模块制作","16.1.2 推荐模块制作",[2585,141445],{"style":127383,"src":141446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141448,141449,141450,141453],{},"大盒子 ",[26,141451,141452],{},"recom"," 推荐模块 recommend",[489,141455,141456],{},[331,141457,141458,141459,141461,141462,141465],{},"给这个 ",[26,141460,141452],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[26,141463,141464],{},"#ebebeb","），设置距离上边 12px",[19,141467,140897],{},[30,141469,141471],{"className":127527,"code":141470,"language":127529,"meta":35,"style":35},"div {\n  background-color: #f0f0f0;\n}\n",[26,141472,141473,141479,141490],{"__ignoreMap":35},[39,141474,141475,141477],{"class":41,"line":42},[39,141476,52586],{"class":52275},[39,141478,16545],{"class":53},[39,141480,141481,141483,141485,141488],{"class":41,"line":92},[39,141482,71853],{"class":74},[39,141484,52412],{"class":53},[39,141486,141487],{"class":74},"#f0f0f0",[39,141489,318],{"class":53},[39,141491,141492],{"class":41,"line":112},[39,141493,115],{"class":53},[19,141495,140986],{},[30,141497,141498],{"className":127527,"code":141470,"language":127529,"meta":35,"style":35},[26,141499,141500,141506,141516],{"__ignoreMap":35},[39,141501,141502,141504],{"class":41,"line":42},[39,141503,52586],{"class":52275},[39,141505,16545],{"class":53},[39,141507,141508,141510,141512,141514],{"class":41,"line":92},[39,141509,71853],{"class":74},[39,141511,52412],{"class":53},[39,141513,141487],{"class":74},[39,141515,318],{"class":53},[39,141517,141518],{"class":41,"line":112},[39,141519,115],{"class":53},[19,141521,141522],{},"里面包含 2 个盒子， 浮动即可",[19,141524,140897],{},[30,141526,141527],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},[26,141528,141529,141535,141545],{"__ignoreMap":35},[39,141530,141531,141533],{"class":41,"line":42},[39,141532,131375],{"class":49},[39,141534,16545],{"class":53},[39,141536,141537,141539,141541,141543],{"class":41,"line":92},[39,141538,132007],{"class":74},[39,141540,52412],{"class":53},[39,141542,24710],{"class":74},[39,141544,318],{"class":53},[39,141546,141547],{"class":41,"line":112},[39,141548,115],{"class":53},[19,141550,141551,141552],{},"1 号盒子 ",[26,141553,141554],{},"recom_hd",[489,141556,141557,141560],{},[331,141558,141559],{},"设置宽度205px，高度163px",[331,141561,141031,141562,141564],{},[26,141563,2585],{},"标签，插入图片即可",[19,141566,140897],{},[30,141568,141569],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,141570,141571],{"__ignoreMap":35},[39,141572,141573,141575,141577,141579,141581,141583,141585,141587,141589,141591,141593,141595],{"class":41,"line":42},[39,141574,2170],{"class":53},[39,141576,2585],{"class":52275},[39,141578,56214],{"class":49},[39,141580,1117],{"class":53},[39,141582,135044],{"class":237},[39,141584,56222],{"class":49},[39,141586,1117],{"class":53},[39,141588,135051],{"class":237},[39,141590,135054],{"class":49},[39,141592,1117],{"class":53},[39,141594,135059],{"class":237},[39,141596,52282],{"class":53},[19,141598,140986],{},[30,141600,141601],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,141602,141603],{"__ignoreMap":35},[39,141604,141605,141607,141609,141611,141613,141615,141617,141619,141621,141623,141625,141627],{"class":41,"line":42},[39,141606,2170],{"class":53},[39,141608,2585],{"class":52275},[39,141610,56214],{"class":49},[39,141612,1117],{"class":53},[39,141614,135044],{"class":237},[39,141616,56222],{"class":49},[39,141618,1117],{"class":53},[39,141620,135051],{"class":237},[39,141622,135054],{"class":49},[39,141624,1117],{"class":53},[39,141626,135059],{"class":237},[39,141628,52282],{"class":53},[19,141630,141631,141632,141635],{},"2 号盒子 ",[26,141633,141634],{},"recom_bd"," ，注意里面的小竖线",[489,141637,141638,141649,141652,141657,141662],{},[331,141639,141640,141641,141643,141644,141646,141647],{},"右侧结构里面放 ",[26,141642,489],{}," 包含 4个 ",[26,141645,331],{},"，每个li里面包含一个",[26,141648,2585],{},[331,141650,141651],{},"直接利用切片工具把里面的内容当成一张图片",[331,141653,140027,141654,141656],{},[26,141655,331],{}," 设置浮动",[331,141658,140027,141659,141661],{},[26,141660,2585],{}," 设置宽高，宽度 248px，高度 163px",[331,141663,141664,141665,141225,141668,141670,141671,141673,141674],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[26,141666,141667],{},"top 10px",[26,141669,331],{},"设置相对定位（注意，最后一个",[26,141672,331],{},"不用设置伪元素），可以利用 ",[26,141675,141676],{},"nth-child(-n+3){...}",[19,141678,140897],{},[30,141680,141681],{"className":127527,"code":139369,"language":127529,"meta":35,"style":35},[26,141682,141683,141691,141701,141711],{"__ignoreMap":35},[39,141684,141685,141687,141689],{"class":41,"line":42},[39,141686,52586],{"class":52275},[39,141688,138528],{"class":49},[39,141690,16545],{"class":53},[39,141692,141693,141695,141697,141699],{"class":41,"line":92},[39,141694,138535],{"class":74},[39,141696,52412],{"class":53},[39,141698,8726],{"class":237},[39,141700,318],{"class":53},[39,141702,141703,141705,141707,141709],{"class":41,"line":112},[39,141704,129143],{"class":74},[39,141706,52412],{"class":53},[39,141708,61844],{"class":74},[39,141710,318],{"class":53},[39,141712,141713],{"class":41,"line":118},[39,141714,115],{"class":53},[19,141716,140986],{},[30,141718,141719],{"className":127527,"code":139369,"language":127529,"meta":35,"style":35},[26,141720,141721,141729,141739,141749],{"__ignoreMap":35},[39,141722,141723,141725,141727],{"class":41,"line":42},[39,141724,52586],{"class":52275},[39,141726,138528],{"class":49},[39,141728,16545],{"class":53},[39,141730,141731,141733,141735,141737],{"class":41,"line":92},[39,141732,138535],{"class":74},[39,141734,52412],{"class":53},[39,141736,8726],{"class":237},[39,141738,318],{"class":53},[39,141740,141741,141743,141745,141747],{"class":41,"line":112},[39,141742,129143],{"class":74},[39,141744,52412],{"class":53},[39,141746,61844],{"class":74},[39,141748,318],{"class":53},[39,141750,141751],{"class":41,"line":118},[39,141752,115],{"class":53},[476,141754,141756],{"id":141755},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[2585,141758],{"style":127383,"src":141759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,141761,141762],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,141764,141765],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,141767,141768,141771],{},[26,141769,141770],{},"box_hd"," 制作",[19,141773,141551,141774,141776],{},[26,141775,141770],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[2585,141778],{"style":127383,"src":141779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[489,141781,141782,141787,141792,141795],{},[331,141783,141784,141786],{},[26,141785,141770],{}," 给 30px 的高度，2个像素的下边框",[331,141788,141789,141790],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[26,141791,140038],{},[331,141793,141794],{},"左侧盒左浮动，右侧盒子右浮动",[331,141796,141797,141799,141800,141802],{},[26,141798,922],{},"标签之间的距离用左右的",[26,141801,31858],{},"撑开即可",[19,141804,141805],{},"结构代码",[30,141807,141808],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},[26,141809,141810,141816,141826],{"__ignoreMap":35},[39,141811,141812,141814],{"class":41,"line":42},[39,141813,131375],{"class":49},[39,141815,16545],{"class":53},[39,141817,141818,141820,141822,141824],{"class":41,"line":92},[39,141819,132007],{"class":74},[39,141821,52412],{"class":53},[39,141823,24710],{"class":74},[39,141825,318],{"class":53},[39,141827,141828],{"class":41,"line":112},[39,141829,115],{"class":53},[19,141831,141832],{},"样式代码",[30,141834,141835],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},[26,141836,141837,141843,141853],{"__ignoreMap":35},[39,141838,141839,141841],{"class":41,"line":42},[39,141840,131375],{"class":49},[39,141842,16545],{"class":53},[39,141844,141845,141847,141849,141851],{"class":41,"line":92},[39,141846,132007],{"class":74},[39,141848,52412],{"class":53},[39,141850,24710],{"class":74},[39,141852,318],{"class":53},[39,141854,141855],{"class":41,"line":112},[39,141856,115],{"class":53},[19,141858,141859,141771],{},[26,141860,141861],{},"box_bd",[19,141863,141864],{},"2 号盒子 box_bd，不要给高度",[2585,141866],{"style":127383,"src":141867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141869,141870],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141872,141873],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141875,141876],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[489,141878,141879,141891,141907],{},[331,141880,141881,141883,141884,141887,141888,141890],{},[26,141882,141861],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[26,141885,141886],{},"tab_content","，在",[26,141889,141886],{}," 里面包裹tab选项卡对应的内容",[331,141892,141893,141894,141897,141898,141900,141901,141903,141904,141906],{},"内容被一个大盒子包裹（",[26,141895,141896],{},"tab_list_item","），里面是 ",[26,141899,489],{}," 包裹 5个 ",[26,141902,331],{},"，每个",[26,141905,331],{},"设置对应的宽度，然后设置浮动",[331,141908,141909,141910,141912,141913,141915,141916],{},"而这5个",[26,141911,331],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[26,141914,331],{},"设置",[489,141917,141918,141936,141939],{},[331,141919,141920,141921,141923,141924,141926,141927,141929,141930,141932,141933,141935],{},"第一个小 ",[26,141922,331],{}," 分为上下结构，上面是 ",[26,141925,489],{}," 包裹 ",[26,141928,331],{}," ，",[26,141931,331],{},"里面包裹 ",[26,141934,922],{},"，下面插入一张图片",[331,141937,141938],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[331,141940,141941,141942,141944,141945,141947,141948,141950],{},"后面的小 ",[26,141943,331],{}," 里面先放一个",[26,141946,922],{},"标签，然后在",[26,141949,922],{},"标签里面插入图片即可",[19,141952,141805],{},[30,141954,141955],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,141956,141957],{"__ignoreMap":35},[39,141958,141959,141961,141963,141965,141967,141969,141971,141973,141975,141977,141979,141981],{"class":41,"line":42},[39,141960,2170],{"class":53},[39,141962,2585],{"class":52275},[39,141964,56214],{"class":49},[39,141966,1117],{"class":53},[39,141968,135044],{"class":237},[39,141970,56222],{"class":49},[39,141972,1117],{"class":53},[39,141974,135051],{"class":237},[39,141976,135054],{"class":49},[39,141978,1117],{"class":53},[39,141980,135059],{"class":237},[39,141982,52282],{"class":53},[19,141984,141832],{},[30,141986,141987],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,141988,141989],{"__ignoreMap":35},[39,141990,141991,141993,141995,141997,141999,142001,142003,142005,142007,142009,142011,142013],{"class":41,"line":42},[39,141992,2170],{"class":53},[39,141994,2585],{"class":52275},[39,141996,56214],{"class":49},[39,141998,1117],{"class":53},[39,142000,135044],{"class":237},[39,142002,56222],{"class":49},[39,142004,1117],{"class":53},[39,142006,135051],{"class":237},[39,142008,135054],{"class":49},[39,142010,1117],{"class":53},[39,142012,135059],{"class":237},[39,142014,52282],{"class":53},[19,142016,142017],{},"tab栏切换需求！！！！！！介绍：",[2585,142019],{"style":127383,"src":142020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[489,142022,142023,142031,142037,142040],{},[331,142024,142025,142028,142029],{},[26,142026,142027],{},"tab","栏的布局是 ",[26,142030,140038],{},[331,142032,142033,142034,142036],{},"有多少个",[26,142035,142027],{},"选项卡，那么对应就有多少个内容",[331,142038,142039],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[331,142041,142042,142043,142046,142047,142049,142050,142052],{},"等后面我们学习了",[26,142044,142045],{},"js","之后，我们就会配合",[26,142048,142045],{},"来实现，",[26,142051,142027],{},"栏的切换",[14,142054,142056],{"id":142055},"_162-列表制作","16.2 列表制作",[476,142058,142060],{"id":142059},"_1621-准备工作","16.2.1 准备工作",[489,142062,142063,142066,142069,142072],{},[331,142064,142065],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[331,142067,142068],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[331,142070,142071],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[331,142073,142074],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[476,142076,142078,142079,101993,142081,142083],{"id":142077},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[26,142080,132532],{},[26,142082,54688],{}," 修改",[2585,142085],{"style":127383,"src":142086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[489,142088,142089],{},[331,142090,142091],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142093,140897],{},[30,142095,142096],{"className":127527,"code":132959,"language":127529,"meta":35,"style":35},[26,142097,142098,142102,142116,142120,142134,142138,142152,142156,142170,142174],{"__ignoreMap":35},[39,142099,142100],{"class":41,"line":42},[39,142101,132966],{"class":128},[39,142103,142104,142106,142108,142110,142112,142114],{"class":41,"line":92},[39,142105,132971],{"class":49},[39,142107,80782],{"class":53},[39,142109,129887],{"class":74},[39,142111,52412],{"class":53},[39,142113,132980],{"class":74},[39,142115,130457],{"class":53},[39,142117,142118],{"class":41,"line":112},[39,142119,132987],{"class":128},[39,142121,142122,142124,142126,142128,142130,142132],{"class":41,"line":118},[39,142123,132992],{"class":49},[39,142125,80782],{"class":53},[39,142127,129887],{"class":74},[39,142129,52412],{"class":53},[39,142131,55739],{"class":74},[39,142133,130457],{"class":53},[39,142135,142136],{"class":41,"line":125},[39,142137,133007],{"class":128},[39,142139,142140,142142,142144,142146,142148,142150],{"class":41,"line":132},[39,142141,133012],{"class":49},[39,142143,80782],{"class":53},[39,142145,129887],{"class":74},[39,142147,52412],{"class":53},[39,142149,55806],{"class":74},[39,142151,130457],{"class":53},[39,142153,142154],{"class":41,"line":138},[39,142155,133027],{"class":128},[39,142157,142158,142160,142162,142164,142166,142168],{"class":41,"line":169},[39,142159,133032],{"class":49},[39,142161,80782],{"class":53},[39,142163,129887],{"class":74},[39,142165,52412],{"class":53},[39,142167,87208],{"class":74},[39,142169,130457],{"class":53},[39,142171,142172],{"class":41,"line":190},[39,142173,133047],{"class":128},[39,142175,142176,142178,142180,142182,142184,142186],{"class":41,"line":202},[39,142177,133052],{"class":49},[39,142179,80782],{"class":53},[39,142181,129887],{"class":74},[39,142183,52412],{"class":53},[39,142185,133061],{"class":74},[39,142187,130457],{"class":53},[19,142189,140986],{},[30,142191,142192],{"className":127527,"code":132959,"language":127529,"meta":35,"style":35},[26,142193,142194,142198,142212,142216,142230,142234,142248,142252,142266,142270],{"__ignoreMap":35},[39,142195,142196],{"class":41,"line":42},[39,142197,132966],{"class":128},[39,142199,142200,142202,142204,142206,142208,142210],{"class":41,"line":92},[39,142201,132971],{"class":49},[39,142203,80782],{"class":53},[39,142205,129887],{"class":74},[39,142207,52412],{"class":53},[39,142209,132980],{"class":74},[39,142211,130457],{"class":53},[39,142213,142214],{"class":41,"line":112},[39,142215,132987],{"class":128},[39,142217,142218,142220,142222,142224,142226,142228],{"class":41,"line":118},[39,142219,132992],{"class":49},[39,142221,80782],{"class":53},[39,142223,129887],{"class":74},[39,142225,52412],{"class":53},[39,142227,55739],{"class":74},[39,142229,130457],{"class":53},[39,142231,142232],{"class":41,"line":125},[39,142233,133007],{"class":128},[39,142235,142236,142238,142240,142242,142244,142246],{"class":41,"line":132},[39,142237,133012],{"class":49},[39,142239,80782],{"class":53},[39,142241,129887],{"class":74},[39,142243,52412],{"class":53},[39,142245,55806],{"class":74},[39,142247,130457],{"class":53},[39,142249,142250],{"class":41,"line":138},[39,142251,133027],{"class":128},[39,142253,142254,142256,142258,142260,142262,142264],{"class":41,"line":169},[39,142255,133032],{"class":49},[39,142257,80782],{"class":53},[39,142259,129887],{"class":74},[39,142261,52412],{"class":53},[39,142263,87208],{"class":74},[39,142265,130457],{"class":53},[39,142267,142268],{"class":41,"line":190},[39,142269,133047],{"class":128},[39,142271,142272,142274,142276,142278,142280,142282],{"class":41,"line":202},[39,142273,133052],{"class":49},[39,142275,80782],{"class":53},[39,142277,129887],{"class":74},[39,142279,52412],{"class":53},[39,142281,133061],{"class":74},[39,142283,130457],{"class":53},[489,142285,142286,142297],{},[331,142287,142288,142289,142292,142293,101993,142295],{},"1 号盒子左侧浮动 ",[26,142290,142291],{},"sk_list"," 里面包含 ",[26,142294,489],{},[26,142296,331],{},[331,142298,142299,142300,142292,142303,101993,142305],{},"2 号盒子左侧浮动 ",[26,142301,142302],{},"sk_con",[26,142304,489],{},[26,142306,331],{},[19,142308,140897],{},[30,142310,142311],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},[26,142312,142313,142319,142329],{"__ignoreMap":35},[39,142314,142315,142317],{"class":41,"line":42},[39,142316,131375],{"class":49},[39,142318,16545],{"class":53},[39,142320,142321,142323,142325,142327],{"class":41,"line":92},[39,142322,132007],{"class":74},[39,142324,52412],{"class":53},[39,142326,24710],{"class":74},[39,142328,318],{"class":53},[39,142330,142331],{"class":41,"line":112},[39,142332,115],{"class":53},[19,142334,140986],{},[30,142336,142337],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},[26,142338,142339,142345,142355],{"__ignoreMap":35},[39,142340,142341,142343],{"class":41,"line":42},[39,142342,131375],{"class":49},[39,142344,16545],{"class":53},[39,142346,142347,142349,142351,142353],{"class":41,"line":92},[39,142348,132007],{"class":74},[39,142350,52412],{"class":53},[39,142352,24710],{"class":74},[39,142354,318],{"class":53},[39,142356,142357],{"class":41,"line":112},[39,142358,115],{"class":53},[476,142360,142362,142363],{"id":142361},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[26,142364,142365],{},"sk_container",[2585,142367],{"style":127383,"src":142368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[489,142370,142371,142376],{},[331,142372,141551,142373,142375],{},[26,142374,142365],{}," 给宽度 1200，不要给高度",[331,142377,142378],{},"一定不要忘记清除浮动",[19,142380,140897],{},[30,142382,142383],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},[26,142384,142385,142391,142401],{"__ignoreMap":35},[39,142386,142387,142389],{"class":41,"line":42},[39,142388,131375],{"class":49},[39,142390,16545],{"class":53},[39,142392,142393,142395,142397,142399],{"class":41,"line":92},[39,142394,132007],{"class":74},[39,142396,52412],{"class":53},[39,142398,24710],{"class":74},[39,142400,318],{"class":53},[39,142402,142403],{"class":41,"line":112},[39,142404,115],{"class":53},[328,142406,142407],{},[331,142408,142409],{},"sk_hd制作",[489,142411,142412],{},[331,142413,141631,142414,142417],{},[26,142415,142416],{},"sk_hd"," ，插入图片即可",[19,142419,140897],{},[30,142421,142422],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,142423,142424],{"__ignoreMap":35},[39,142425,142426,142428,142430,142432,142434,142436,142438,142440,142442,142444,142446,142448],{"class":41,"line":42},[39,142427,2170],{"class":53},[39,142429,2585],{"class":52275},[39,142431,56214],{"class":49},[39,142433,1117],{"class":53},[39,142435,135044],{"class":237},[39,142437,56222],{"class":49},[39,142439,1117],{"class":53},[39,142441,135051],{"class":237},[39,142443,135054],{"class":49},[39,142445,1117],{"class":53},[39,142447,135059],{"class":237},[39,142449,52282],{"class":53},[328,142451,142452],{"start":92},[331,142453,142454],{},"sk_bd制作",[489,142456,142457],{},[331,142458,142459,142460,142463,142464,101993,142466,142468],{},"3 号盒子 ",[26,142461,142462],{},"sk_bd"," ，里面包含很多的 ",[26,142465,489],{},[26,142467,331],{},[489,142469,142470,142479],{},[331,142471,142472,142473,142475,142476,142478],{},"当鼠标移入到 ",[26,142474,331],{}," 上面的时候显示红色的边框，在这里先给 ",[26,142477,331],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[331,142480,142481,142482,142484,142485,142487,142488,142491,142492,142494],{},"由于给每个 ",[26,142483,331],{}," 都设置了外边距，导致一行的最后一个 ",[26,142486,331],{}," 掉了下来，在这里我们利用 ",[26,142489,142490],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[26,142493,331],{},"，去掉外边距就好了",[19,142496,140897],{},[30,142498,142499],{"className":127527,"code":139716,"language":127529,"meta":35,"style":35},[26,142500,142501,142507,142519],{"__ignoreMap":35},[39,142502,142503,142505],{"class":41,"line":42},[39,142504,52586],{"class":52275},[39,142506,16545],{"class":53},[39,142508,142509,142511,142513,142515,142517],{"class":41,"line":92},[39,142510,71445],{"class":74},[39,142512,52412],{"class":53},[39,142514,1457],{"class":74},[39,142516,52531],{"class":74},[39,142518,318],{"class":53},[39,142520,142521],{"class":41,"line":112},[39,142522,115],{"class":53},[19,142524,140986],{},[30,142526,142527],{"className":127527,"code":139716,"language":127529,"meta":35,"style":35},[26,142528,142529,142535,142547],{"__ignoreMap":35},[39,142530,142531,142533],{"class":41,"line":42},[39,142532,52586],{"class":52275},[39,142534,16545],{"class":53},[39,142536,142537,142539,142541,142543,142545],{"class":41,"line":92},[39,142538,71445],{"class":74},[39,142540,52412],{"class":53},[39,142542,1457],{"class":74},[39,142544,52531],{"class":74},[39,142546,318],{"class":53},[39,142548,142549],{"class":41,"line":112},[39,142550,115],{"class":53},[14,142552,142554],{"id":142553},"_163-注册页面制作","16.3 注册页面制作",[2585,142556],{"style":127383,"src":142557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142559,142560,142562],{},[350,142561,10093],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[2585,142564],{"style":127383,"src":142565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[476,142567,142569],{"id":142568},"_1631-准备工作","16.3.1 准备工作",[489,142571,142572,142575],{},[331,142573,142574],{},"创建register.html，引入 base.css，引入favicon图标",[331,142576,142577],{},"创建register.css ，在html页面进行引入",[476,142579,142581,142582,142584],{"id":142580},"_1632-header-头部实现","16.3.2 ",[26,142583,132532],{}," 头部实现",[489,142586,142587,142590],{},[331,142588,142589],{},"整个内容用 版心 进行包裹",[331,142591,142592],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142594,140897],{},[30,142596,142597],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,142598,142599],{"__ignoreMap":35},[39,142600,142601,142603,142605,142607,142609,142611,142613,142615,142617,142619,142621,142623],{"class":41,"line":42},[39,142602,2170],{"class":53},[39,142604,2585],{"class":52275},[39,142606,56214],{"class":49},[39,142608,1117],{"class":53},[39,142610,135044],{"class":237},[39,142612,56222],{"class":49},[39,142614,1117],{"class":53},[39,142616,135051],{"class":237},[39,142618,135054],{"class":49},[39,142620,1117],{"class":53},[39,142622,135059],{"class":237},[39,142624,52282],{"class":53},[19,142626,140986],{},[30,142628,142629],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,142630,142631],{"__ignoreMap":35},[39,142632,142633,142635,142637,142639,142641,142643,142645,142647,142649,142651,142653,142655],{"class":41,"line":42},[39,142634,2170],{"class":53},[39,142636,2585],{"class":52275},[39,142638,56214],{"class":49},[39,142640,1117],{"class":53},[39,142642,135044],{"class":237},[39,142644,56222],{"class":49},[39,142646,1117],{"class":53},[39,142648,135051],{"class":237},[39,142650,135054],{"class":49},[39,142652,1117],{"class":53},[39,142654,135059],{"class":237},[39,142656,52282],{"class":53},[476,142658,142660,142661,142664],{"id":142659},"_1633-registerarea-主体模块实现","16.3.3 ",[26,142662,142663],{},"registerarea"," 主体模块实现",[2585,142666],{"style":127383,"src":142667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142669,142670],{},"整个大盒子 高度为 522px，设置4个边框",[19,142672,140897],{},[30,142674,142675],{"className":127527,"code":131684,"language":127529,"meta":35,"style":35},[26,142676,142677,142683,142699],{"__ignoreMap":35},[39,142678,142679,142681],{"class":41,"line":42},[39,142680,52586],{"class":52275},[39,142682,16545],{"class":53},[39,142684,142685,142687,142689,142691,142693,142695,142697],{"class":41,"line":92},[39,142686,71871],{"class":74},[39,142688,52412],{"class":53},[39,142690,1483],{"class":74},[39,142692,52467],{"class":45},[39,142694,52496],{"class":74},[39,142696,130919],{"class":74},[39,142698,318],{"class":53},[39,142700,142701],{"class":41,"line":112},[39,142702,115],{"class":53},[19,142704,140986],{},[30,142706,142707],{"className":127527,"code":131684,"language":127529,"meta":35,"style":35},[26,142708,142709,142715,142731],{"__ignoreMap":35},[39,142710,142711,142713],{"class":41,"line":42},[39,142712,52586],{"class":52275},[39,142714,16545],{"class":53},[39,142716,142717,142719,142721,142723,142725,142727,142729],{"class":41,"line":92},[39,142718,71871],{"class":74},[39,142720,52412],{"class":53},[39,142722,1483],{"class":74},[39,142724,52467],{"class":45},[39,142726,52496],{"class":74},[39,142728,130919],{"class":74},[39,142730,318],{"class":53},[39,142732,142733],{"class":41,"line":112},[39,142734,115],{"class":53},[19,142736,142737],{},"1号盒子 是一个 h3 标签，放标题",[489,142739,142740],{},[331,142741,142742],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,142744,140897],{},[30,142746,142747],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},[26,142748,142749,142755,142765],{"__ignoreMap":35},[39,142750,142751,142753],{"class":41,"line":42},[39,142752,131375],{"class":49},[39,142754,16545],{"class":53},[39,142756,142757,142759,142761,142763],{"class":41,"line":92},[39,142758,132007],{"class":74},[39,142760,52412],{"class":53},[39,142762,24710],{"class":74},[39,142764,318],{"class":53},[39,142766,142767],{"class":41,"line":112},[39,142768,115],{"class":53},[19,142770,140986],{},[30,142772,142773],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},[26,142774,142775,142781,142791],{"__ignoreMap":35},[39,142776,142777,142779],{"class":41,"line":42},[39,142778,131375],{"class":49},[39,142780,16545],{"class":53},[39,142782,142783,142785,142787,142789],{"class":41,"line":92},[39,142784,132007],{"class":74},[39,142786,52412],{"class":53},[39,142788,24710],{"class":74},[39,142790,318],{"class":53},[39,142792,142793],{"class":41,"line":112},[39,142794,115],{"class":53},[19,142796,142797],{},"2号盒子 里面放注册的内容",[489,142799,142800,142803,142812,142826,142839,142842,142845,142863,142877],{},[331,142801,142802],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[331,142804,142805,142806,142808,142809,142811],{},"里面的内容利用 ",[26,142807,489],{}," 包含 ",[26,142810,331],{}," 来实现的（不需要用表格）",[331,142813,140041,142814,142816,142817,142819,142820,142822,142823,142825],{},[26,142815,331],{}," 里面，左侧放 ",[26,142818,34583],{}," 标签， 中间放",[26,142821,54796],{}," 标签， 右侧放 ",[26,142824,39],{}," 提示信息",[331,142827,142828,142829,142831,142832,142834,142835,142838],{},"左侧 ",[26,142830,34583],{},"里面的文字都是右对齐，我们可以给",[26,142833,34583],{},"设置一个宽度（88px），然后利用",[26,142836,142837],{},"text-align"," 来设置右对齐",[331,142840,142841],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[331,142843,142844],{},"右侧 span修饰一下文字颜色",[331,142846,142847,142848],{},"提示信息的样式优化",[489,142849,142850,142853,142856],{},[331,142851,142852],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[331,142854,142855],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[331,142857,142858,142859,142862],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[26,142860,142861],{},"vertical-algin"," 来设置 图片与文字对齐方式",[331,142864,142865,142866],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[489,142867,142868,142874],{},[331,142869,142870,142871,142873],{},"设置 ",[26,142872,24527],{}," 的 左右 12px 的内边距，设置一下文字颜色",[331,142875,142876],{},"分别设置 背景颜色",[331,142878,142879,142880,142882],{},"同意协议 和 完成注册 都是用 ",[26,142881,331],{}," 进行包裹",[19,142884,140897],{},[30,142886,142887],{"className":127527,"code":141470,"language":127529,"meta":35,"style":35},[26,142888,142889,142895,142905],{"__ignoreMap":35},[39,142890,142891,142893],{"class":41,"line":42},[39,142892,52586],{"class":52275},[39,142894,16545],{"class":53},[39,142896,142897,142899,142901,142903],{"class":41,"line":92},[39,142898,71853],{"class":74},[39,142900,52412],{"class":53},[39,142902,141487],{"class":74},[39,142904,318],{"class":53},[39,142906,142907],{"class":41,"line":112},[39,142908,115],{"class":53},[19,142910,140986],{},[30,142912,142913],{"className":127527,"code":141470,"language":127529,"meta":35,"style":35},[26,142914,142915,142921,142931],{"__ignoreMap":35},[39,142916,142917,142919],{"class":41,"line":42},[39,142918,52586],{"class":52275},[39,142920,16545],{"class":53},[39,142922,142923,142925,142927,142929],{"class":41,"line":92},[39,142924,71853],{"class":74},[39,142926,52412],{"class":53},[39,142928,141487],{"class":74},[39,142930,318],{"class":53},[39,142932,142933],{"class":41,"line":112},[39,142934,115],{"class":53},[476,142936,142938],{"id":142937},"_1634-底部实现","16.3.4 底部实现",[19,142940,140897],{},[30,142942,142943],{"className":127527,"code":141470,"language":127529,"meta":35,"style":35},[26,142944,142945,142951,142961],{"__ignoreMap":35},[39,142946,142947,142949],{"class":41,"line":42},[39,142948,52586],{"class":52275},[39,142950,16545],{"class":53},[39,142952,142953,142955,142957,142959],{"class":41,"line":92},[39,142954,71853],{"class":74},[39,142956,52412],{"class":53},[39,142958,141487],{"class":74},[39,142960,318],{"class":53},[39,142962,142963],{"class":41,"line":112},[39,142964,115],{"class":53},[19,142966,140986],{},[30,142968,142969],{"className":128274,"code":131631,"language":128276,"meta":35,"style":35},[26,142970,142971,142975,142989,142993],{"__ignoreMap":35},[39,142972,142973],{"class":41,"line":42},[39,142974,131638],{"class":128},[39,142976,142977,142979,142981,142983,142985,142987],{"class":41,"line":92},[39,142978,2170],{"class":53},[39,142980,52586],{"class":52275},[39,142982,54461],{"class":49},[39,142984,1117],{"class":53},[39,142986,131651],{"class":237},[39,142988,52282],{"class":53},[39,142990,142991],{"class":41,"line":112},[39,142992,131658],{"class":53},[39,142994,142995,142997,142999],{"class":41,"line":118},[39,142996,52760],{"class":53},[39,142998,52586],{"class":52275},[39,143000,52282],{"class":53},[14,143002,143004],{"id":143003},"_164-项目总结","16.4 项目总结",[328,143006,143007,143010,143013,143016],{},[331,143008,143009],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[331,143011,143012],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[331,143014,143015],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[331,143017,143018],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[2585,143020],{"style":127383,"src":143021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[328,143023,143024],{"start":125},[331,143025,143026],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[2585,143028],{"style":127383,"src":143029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[328,143031,143032],{"start":132},[331,143033,143034],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[2585,143036],{"style":127383,"src":143037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[30,143039,143040],{"className":128274,"code":137684,"language":128276,"meta":35,"style":35},[26,143041,143042],{"__ignoreMap":35},[39,143043,143044,143046,143048,143050,143052,143054,143056,143058,143060,143062,143064,143066],{"class":41,"line":42},[39,143045,2170],{"class":53},[39,143047,54796],{"class":52275},[39,143049,54799],{"class":49},[39,143051,1117],{"class":53},[39,143053,63674],{"class":237},[39,143055,15893],{"class":49},[39,143057,1117],{"class":53},[39,143059,137705],{"class":237},[39,143061,61995],{"class":49},[39,143063,1117],{"class":53},[39,143065,137712],{"class":237},[39,143067,52282],{"class":53},[328,143069,143070,143073],{"start":138},[331,143071,143072],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[331,143074,143075],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1192,143077,143078],{},"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":92,"depth":92,"links":143080},[143081,143086,143093,143101],{"id":140707,"depth":92,"text":140708,"children":143082},[143083,143084,143085],{"id":140711,"depth":112,"text":140712},{"id":141442,"depth":112,"text":141443},{"id":141755,"depth":112,"text":141756},{"id":142055,"depth":92,"text":142056,"children":143087},[143088,143089,143091],{"id":142059,"depth":112,"text":142060},{"id":142077,"depth":112,"text":143090},"16.2.2 列表页 header 和 nav 修改",{"id":142361,"depth":112,"text":143092},"16.2.3 列表页主体 sk_container",{"id":142553,"depth":92,"text":142554,"children":143094},[143095,143096,143098,143100],{"id":142568,"depth":112,"text":142569},{"id":142580,"depth":112,"text":143097},"16.3.2 header 头部实现",{"id":142659,"depth":112,"text":143099},"16.3.3 registerarea 主体模块实现",{"id":142937,"depth":112,"text":142938},{"id":143003,"depth":92,"text":143004},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140699,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143108,"title":143109,"body":143110,"description":24350,"extension":1203,"meta":143218,"navigation":121,"path":143219,"seo":143220,"stem":143221,"__hash__":143222},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143111,"toc":143213},[143112,143115,143119,143122,143125,143134,143143,143147,143152,143159,143177,143180,143183,143186,143189,143192,143195,143198,143201,143204,143207,143210],[10,143113,143109],{"id":143114},"_17-web服务器与网站发布",[14,143116,143118],{"id":143117},"_171-web服务器","17.1 Web服务器",[19,143120,143121],{},"把自己网站上传到服务器上，可以让其他人访问",[2585,143123],{"style":127383,"src":143124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143126,143127,143130,143131],{},[350,143128,143129],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[350,143132,143133],{},"Web 服务器等",[19,143135,143136,143137,101993,143140,26715],{},"根据服务器在网络中所在的位置不同，又可分为 ",[350,143138,143139],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[350,143141,143142],{},"远程服务器",[476,143144,143146],{"id":143145},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143148,143149],{},[350,143150,143151],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143153,143154,143155],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[922,143156,143157],{"href":143157,"rel":143158},"http:\u002F\u002Ffree.3v.do\u002F",[24839],[489,143160,143161,143164,143167,143174],{},[331,143162,143163],{},"去免费空间网站注册账号。",[331,143165,143166],{},"记录下主机名、用户名、密码、域名。",[331,143168,143169,143170,143173],{},"利用 ",[26,143171,143172],{},"utftp"," 软件 上传网站到远程服务器",[331,143175,143176],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143178,143179],{},"使用软件上传，对上传软件文件进行解压",[2585,143181],{"style":127383,"src":143182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[2585,143184],{"style":127383,"src":143185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143187,143188],{},"输入刚刚申请的服务器账号信息：",[2585,143190],{"style":127383,"src":143191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[2585,143193],{"style":127383,"src":143194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[2585,143196],{"style":127383,"src":143197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[2585,143199],{"style":127383,"src":143200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143202,143203],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[2585,143205],{"style":127383,"src":143206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143208,143209],{},"浏览器输入域名即可访问",[19,143211,143212],{},"首页一定必须是index",{"title":35,"searchDepth":92,"depth":92,"links":143214},[143215],{"id":143117,"depth":92,"text":143118,"children":143216},[143217],{"id":143145,"depth":112,"text":143146},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143109,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143224,"title":143225,"body":143226,"description":24350,"extension":1203,"meta":144153,"navigation":121,"path":144154,"seo":144155,"stem":144156,"__hash__":144157},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143227,"toc":144136},[143228,143231,143235,143238,143241,143252,143255,143259,143263,143268,143271,143274,143277,143280,143284,143310,143314,143318,143321,143324,143328,143361,143365,143368,143371,143435,143439,143443,143446,143449,143452,143456,143501,143505,143508,143538,143542,143546,143549,143552,143556,143559,143628,143631,143739,143741,143747,143751,143754,143757,143853,143856,143860,143884,143888,143891,143895,143898,143902,143905,143908,143911,143914,143918,143921,143924,143928,143932,143935,143938,143941,143944,143948,143951,143955,143958,143961,144006,144010,144014,144017,144020,144023,144055,144059,144062,144096,144100,144103,144133],[10,143229,143225],{"id":143230},"_18-2d动画与3d转换",[14,143232,143234],{"id":143233},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143236,143237],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143239,143240],{},"转换（transform）你可以简单理解为变形",[489,143242,143243,143246,143249],{},[331,143244,143245],{},"移动：translate",[331,143247,143248],{},"旋转：rotate",[331,143250,143251],{},"缩放：scale",[2585,143253],{"style":127383,"src":143254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[476,143256,143258],{"id":143257},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22971,143260,143262],{"id":143261},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143264,143265,143266],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[350,143267,134186],{},[2585,143269],{"style":127383,"src":143270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143272,143273],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143275,143276],{},"对于行内元素无效",[19,143278,143279],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22971,143281,143283],{"id":143282},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[30,143285,143286],{"className":127527,"code":139716,"language":127529,"meta":35,"style":35},[26,143287,143288,143294,143306],{"__ignoreMap":35},[39,143289,143290,143292],{"class":41,"line":42},[39,143291,52586],{"class":52275},[39,143293,16545],{"class":53},[39,143295,143296,143298,143300,143302,143304],{"class":41,"line":92},[39,143297,71445],{"class":74},[39,143299,52412],{"class":53},[39,143301,1457],{"class":74},[39,143303,52531],{"class":74},[39,143305,318],{"class":53},[39,143307,143308],{"class":41,"line":112},[39,143309,115],{"class":53},[476,143311,143313],{"id":143312},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22971,143315,143317],{"id":143316},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143319,143320],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[2585,143322],{"style":127383,"src":143323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22971,143325,143327],{"id":143326},"_18122-旋转效果","18.1.2.2 旋转效果",[30,143329,143331],{"className":127527,"code":143330,"language":127529,"meta":35,"style":35},"div {\n  transform: rotate(45deg);\n}\n",[26,143332,143333,143339,143357],{"__ignoreMap":35},[39,143334,143335,143337],{"class":41,"line":42},[39,143336,52586],{"class":52275},[39,143338,16545],{"class":53},[39,143340,143341,143343,143345,143348,143350,143352,143355],{"class":41,"line":92},[39,143342,137511],{"class":74},[39,143344,52412],{"class":53},[39,143346,143347],{"class":74},"rotate",[39,143349,54],{"class":53},[39,143351,1790],{"class":74},[39,143353,143354],{"class":45},"deg",[39,143356,166],{"class":53},[39,143358,143359],{"class":41,"line":112},[39,143360,115],{"class":53},[22971,143362,143364],{"id":143363},"_18123-三角做法","18.1.2.3 三角做法",[19,143366,143367],{},"该下标当经过最外层大盒子时会实现向上反转",[2585,143369],{"style":127383,"src":143370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[30,143372,143373],{"className":127527,"code":136047,"language":127529,"meta":35,"style":35},[26,143374,143375,143379,143385,143395,143405,143421,143431],{"__ignoreMap":35},[39,143376,143377],{"class":41,"line":42},[39,143378,136054],{"class":128},[39,143380,143381,143383],{"class":41,"line":92},[39,143382,136059],{"class":49},[39,143384,16545],{"class":53},[39,143386,143387,143389,143391,143393],{"class":41,"line":112},[39,143388,71543],{"class":74},[39,143390,52412],{"class":53},[39,143392,1457],{"class":74},[39,143394,318],{"class":53},[39,143396,143397,143399,143401,143403],{"class":41,"line":118},[39,143398,71763],{"class":74},[39,143400,52412],{"class":53},[39,143402,1457],{"class":74},[39,143404,318],{"class":53},[39,143406,143407,143409,143411,143413,143415,143417,143419],{"class":41,"line":125},[39,143408,71871],{"class":74},[39,143410,52412],{"class":53},[39,143412,423],{"class":74},[39,143414,52467],{"class":45},[39,143416,52496],{"class":74},[39,143418,64966],{"class":74},[39,143420,318],{"class":53},[39,143422,143423,143425,143427,143429],{"class":41,"line":132},[39,143424,136102],{"class":74},[39,143426,52412],{"class":53},[39,143428,63344],{"class":74},[39,143430,318],{"class":53},[39,143432,143433],{"class":41,"line":138},[39,143434,115],{"class":53},[476,143436,143438],{"id":143437},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22971,143440,143442],{"id":143441},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143444,143445],{},"设置中心点",[2585,143447],{"style":127383,"src":143448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143450,143451],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22971,143453,143455],{"id":143454},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[30,143457,143459],{"className":127527,"code":143458,"language":127529,"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",[26,143460,143461,143466,143472,143487,143492,143497],{"__ignoreMap":35},[39,143462,143463],{"class":41,"line":42},[39,143464,143465],{"class":128},"\u002F* 转换中心点 *\u002F\n",[39,143467,143468,143470],{"class":41,"line":92},[39,143469,52586],{"class":52275},[39,143471,16545],{"class":53},[39,143473,143474,143477,143479,143481,143483,143485],{"class":41,"line":112},[39,143475,143476],{"class":74},"  transform-origin",[39,143478,52412],{"class":53},[39,143480,52567],{"class":74},[39,143482,18117],{"class":74},[39,143484,131390],{"class":53},[39,143486,136200],{"class":128},[39,143488,143489],{"class":41,"line":118},[39,143490,143491],{"class":128},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[39,143493,143494],{"class":41,"line":125},[39,143495,143496],{"class":128},"  \u002F* transform-origin: left top; *\u002F\n",[39,143498,143499],{"class":41,"line":132},[39,143500,115],{"class":53},[22971,143502,143504],{"id":143503},"_18133-旋转案例","18.1.3.3 旋转案例",[2585,143506],{"style":127383,"src":143507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[30,143509,143510],{"className":127527,"code":143330,"language":127529,"meta":35,"style":35},[26,143511,143512,143518,143534],{"__ignoreMap":35},[39,143513,143514,143516],{"class":41,"line":42},[39,143515,52586],{"class":52275},[39,143517,16545],{"class":53},[39,143519,143520,143522,143524,143526,143528,143530,143532],{"class":41,"line":92},[39,143521,137511],{"class":74},[39,143523,52412],{"class":53},[39,143525,143347],{"class":74},[39,143527,54],{"class":53},[39,143529,1790],{"class":74},[39,143531,143354],{"class":45},[39,143533,166],{"class":53},[39,143535,143536],{"class":41,"line":112},[39,143537,115],{"class":53},[476,143539,143541],{"id":143540},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22971,143543,143545],{"id":143544},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143547,143548],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[2585,143550],{"style":127383,"src":143551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22971,143553,143555],{"id":143554},"_18142-分页按钮","18.1.4.2 分页按钮",[2585,143557],{"style":127383,"src":143558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[30,143560,143562],{"className":127527,"code":143561,"language":127529,"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",[26,143563,143564,143570,143586,143590,143594,143599,143605,143619,143624],{"__ignoreMap":35},[39,143565,143566,143568],{"class":41,"line":42},[39,143567,52586],{"class":52275},[39,143569,16545],{"class":53},[39,143571,143572,143574,143576,143579,143581,143584],{"class":41,"line":92},[39,143573,137511],{"class":74},[39,143575,52412],{"class":53},[39,143577,143578],{"class":74},"scale",[39,143580,54],{"class":53},[39,143582,143583],{"class":74},"1.2",[39,143585,166],{"class":53},[39,143587,143588],{"class":41,"line":112},[39,143589,115],{"class":53},[39,143591,143592],{"class":41,"line":118},[39,143593,136988],{"class":53},[39,143595,143596],{"class":41,"line":125},[39,143597,143598],{"class":128},"\u002F* 2D 缩放 *\u002F\n",[39,143600,143601,143603],{"class":41,"line":132},[39,143602,52586],{"class":52275},[39,143604,16545],{"class":53},[39,143606,143607,143609,143611,143613,143615,143617],{"class":41,"line":138},[39,143608,137511],{"class":74},[39,143610,52412],{"class":53},[39,143612,143578],{"class":74},[39,143614,54],{"class":53},[39,143616,143583],{"class":74},[39,143618,166],{"class":53},[39,143620,143621],{"class":41,"line":169},[39,143622,143623],{"class":128},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[39,143625,143626],{"class":41,"line":190},[39,143627,115],{"class":53},[19,143629,143630],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[30,143632,143634],{"className":127527,"code":143633,"language":127529,"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",[26,143635,143636,143641,143651,143672,143693,143697,143702,143708,143735],{"__ignoreMap":35},[39,143637,143638],{"class":41,"line":42},[39,143639,143640],{"class":128},"\u002F* 定义动画 *\u002F\n",[39,143642,143643,143646,143649],{"class":41,"line":92},[39,143644,143645],{"class":45},"@keyframes",[39,143647,143648],{"class":59}," move",[39,143650,16545],{"class":53},[39,143652,143653,143656,143658,143660,143662,143665,143667,143669],{"class":41,"line":112},[39,143654,143655],{"class":49},"  0%",[39,143657,80782],{"class":53},[39,143659,49109],{"class":74},[39,143661,52412],{"class":53},[39,143663,143664],{"class":74},"translateX",[39,143666,54],{"class":53},[39,143668,1457],{"class":74},[39,143670,143671],{"class":53},"); }\n",[39,143673,143674,143677,143679,143681,143683,143685,143687,143689,143691],{"class":41,"line":118},[39,143675,143676],{"class":49},"  100%",[39,143678,80782],{"class":53},[39,143680,49109],{"class":74},[39,143682,52412],{"class":53},[39,143684,143664],{"class":74},[39,143686,54],{"class":53},[39,143688,278],{"class":74},[39,143690,52467],{"class":45},[39,143692,143671],{"class":53},[39,143694,143695],{"class":41,"line":125},[39,143696,115],{"class":53},[39,143698,143699],{"class":41,"line":132},[39,143700,143701],{"class":128},"\u002F* 调用动画 *\u002F\n",[39,143703,143704,143706],{"class":41,"line":138},[39,143705,52586],{"class":52275},[39,143707,16545],{"class":53},[39,143709,143710,143713,143715,143717,143719,143721,143723,143725,143727,143730,143733],{"class":41,"line":169},[39,143711,143712],{"class":74},"  animation",[39,143714,52412],{"class":53},[39,143716,136213],{"class":74},[39,143718,26093],{"class":74},[39,143720,1956],{"class":45},[39,143722,79655],{"class":74},[39,143724,315],{"class":74},[39,143726,1956],{"class":45},[39,143728,143729],{"class":74}," infinite",[39,143731,143732],{"class":74}," alternate",[39,143734,318],{"class":53},[39,143736,143737],{"class":41,"line":190},[39,143738,115],{"class":53},[19,143740,143630],{},[30,143742,143745],{"className":143743,"code":143744,"language":6267},[6265],"\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",[26,143746,143744],{"__ignoreMap":35},[22971,143748,143750],{"id":143749},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,143752,143753],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[2585,143755],{"style":127383,"src":143756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[30,143758,143759],{"className":127527,"code":143633,"language":127529,"meta":35,"style":35},[26,143760,143761,143765,143773,143791,143811,143815,143819,143825,143849],{"__ignoreMap":35},[39,143762,143763],{"class":41,"line":42},[39,143764,143640],{"class":128},[39,143766,143767,143769,143771],{"class":41,"line":92},[39,143768,143645],{"class":45},[39,143770,143648],{"class":59},[39,143772,16545],{"class":53},[39,143774,143775,143777,143779,143781,143783,143785,143787,143789],{"class":41,"line":112},[39,143776,143655],{"class":49},[39,143778,80782],{"class":53},[39,143780,49109],{"class":74},[39,143782,52412],{"class":53},[39,143784,143664],{"class":74},[39,143786,54],{"class":53},[39,143788,1457],{"class":74},[39,143790,143671],{"class":53},[39,143792,143793,143795,143797,143799,143801,143803,143805,143807,143809],{"class":41,"line":118},[39,143794,143676],{"class":49},[39,143796,80782],{"class":53},[39,143798,49109],{"class":74},[39,143800,52412],{"class":53},[39,143802,143664],{"class":74},[39,143804,54],{"class":53},[39,143806,278],{"class":74},[39,143808,52467],{"class":45},[39,143810,143671],{"class":53},[39,143812,143813],{"class":41,"line":125},[39,143814,115],{"class":53},[39,143816,143817],{"class":41,"line":132},[39,143818,143701],{"class":128},[39,143820,143821,143823],{"class":41,"line":138},[39,143822,52586],{"class":52275},[39,143824,16545],{"class":53},[39,143826,143827,143829,143831,143833,143835,143837,143839,143841,143843,143845,143847],{"class":41,"line":169},[39,143828,143712],{"class":74},[39,143830,52412],{"class":53},[39,143832,136213],{"class":74},[39,143834,26093],{"class":74},[39,143836,1956],{"class":45},[39,143838,79655],{"class":74},[39,143840,315],{"class":74},[39,143842,1956],{"class":45},[39,143844,143729],{"class":74},[39,143846,143732],{"class":74},[39,143848,318],{"class":53},[39,143850,143851],{"class":41,"line":190},[39,143852,115],{"class":53},[19,143854,143855],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[476,143857,143859],{"id":143858},"_1823-知识点回顾","18.2.3 知识点回顾",[30,143861,143862],{"className":127527,"code":129696,"language":127529,"meta":35,"style":35},[26,143863,143864,143870,143880],{"__ignoreMap":35},[39,143865,143866,143868],{"class":41,"line":42},[39,143867,52586],{"class":52275},[39,143869,16545],{"class":53},[39,143871,143872,143874,143876,143878],{"class":41,"line":92},[39,143873,129709],{"class":74},[39,143875,52412],{"class":53},[39,143877,62711],{"class":74},[39,143879,318],{"class":53},[39,143881,143882],{"class":41,"line":112},[39,143883,115],{"class":53},[14,143885,143887],{"id":143886},"_183-3d-转换","18.3 3D 转换",[19,143889,143890],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[476,143892,143894],{"id":143893},"_1831-坐标轴认识","18.3.1 坐标轴认识",[2585,143896],{"style":127383,"src":143897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[476,143899,143901],{"id":143900},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[2585,143903],{"style":127383,"src":143904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143906,143907],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143909,143910],{},"translate3d的效果需要搭配透视perspective来使用",[2585,143912],{"style":127383,"src":143913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[476,143915,143917],{"id":143916},"_1833-透视-perspective","18.3.3 透视 perspective",[2585,143919],{"style":127383,"src":143920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143922,143923],{},"透视写在父盒子上，单位为像素",[476,143925,143927],{"id":143926},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22971,143929,143931],{"id":143930},"_18341-分开解释","18.3.4.1 分开解释",[2585,143933],{"style":127383,"src":143934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[2585,143936],{"style":127383,"src":143937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[2585,143939],{"style":127383,"src":143940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143942,143943],{},"总结来说就是左手原则",[22971,143945,143947],{"id":143946},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[2585,143949],{"style":127383,"src":143950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[476,143952,143954],{"id":143953},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[2585,143956],{"style":127383,"src":143957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[2585,143959],{"style":127383,"src":143960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[30,143962,143964],{"className":127527,"code":143963,"language":127529,"meta":35,"style":35},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[26,143965,143966,143972,143985,144002],{"__ignoreMap":35},[39,143967,143968,143970],{"class":41,"line":42},[39,143969,52586],{"class":52275},[39,143971,16545],{"class":53},[39,143973,143974,143977,143979,143981,143983],{"class":41,"line":92},[39,143975,143976],{"class":74},"  perspective",[39,143978,52412],{"class":53},[39,143980,66049],{"class":74},[39,143982,52467],{"class":45},[39,143984,318],{"class":53},[39,143986,143987,143989,143991,143994,143996,143998,144000],{"class":41,"line":112},[39,143988,137511],{"class":74},[39,143990,52412],{"class":53},[39,143992,143993],{"class":74},"rotateX",[39,143995,54],{"class":53},[39,143997,1790],{"class":74},[39,143999,143354],{"class":45},[39,144001,166],{"class":53},[39,144003,144004],{"class":41,"line":118},[39,144005,115],{"class":53},[476,144007,144009],{"id":144008},"_1836-案例","18.3.6 案例",[22971,144011,144013],{"id":144012},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[2585,144015],{"style":127383,"src":144016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[2585,144018],{"style":127383,"src":144019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[2585,144021],{"style":127383,"src":144022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[30,144024,144026],{"className":127527,"code":144025,"language":127529,"meta":35,"style":35},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[26,144027,144028,144033,144039,144051],{"__ignoreMap":35},[39,144029,144030],{"class":41,"line":42},[39,144031,144032],{"class":128},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[39,144034,144035,144037],{"class":41,"line":92},[39,144036,134524],{"class":49},[39,144038,16545],{"class":53},[39,144040,144041,144043,144045,144047,144049],{"class":41,"line":112},[39,144042,143976],{"class":74},[39,144044,52412],{"class":53},[39,144046,66049],{"class":74},[39,144048,52467],{"class":45},[39,144050,318],{"class":53},[39,144052,144053],{"class":41,"line":118},[39,144054,115],{"class":53},[22971,144056,144058],{"id":144057},"_18362-3d导航栏","18.3.6.2 3D导航栏",[2585,144060],{"style":127383,"src":144061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[30,144063,144064],{"className":128274,"code":131631,"language":128276,"meta":35,"style":35},[26,144065,144066,144070,144084,144088],{"__ignoreMap":35},[39,144067,144068],{"class":41,"line":42},[39,144069,131638],{"class":128},[39,144071,144072,144074,144076,144078,144080,144082],{"class":41,"line":92},[39,144073,2170],{"class":53},[39,144075,52586],{"class":52275},[39,144077,54461],{"class":49},[39,144079,1117],{"class":53},[39,144081,131651],{"class":237},[39,144083,52282],{"class":53},[39,144085,144086],{"class":41,"line":112},[39,144087,131658],{"class":53},[39,144089,144090,144092,144094],{"class":41,"line":118},[39,144091,52760],{"class":53},[39,144093,52586],{"class":52275},[39,144095,52282],{"class":53},[22971,144097,144099],{"id":144098},"_18363-旋转木马","18.3.6.3 旋转木马",[2585,144101],{"style":127383,"src":144102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[30,144104,144105],{"className":127527,"code":143330,"language":127529,"meta":35,"style":35},[26,144106,144107,144113,144129],{"__ignoreMap":35},[39,144108,144109,144111],{"class":41,"line":42},[39,144110,52586],{"class":52275},[39,144112,16545],{"class":53},[39,144114,144115,144117,144119,144121,144123,144125,144127],{"class":41,"line":92},[39,144116,137511],{"class":74},[39,144118,52412],{"class":53},[39,144120,143347],{"class":74},[39,144122,54],{"class":53},[39,144124,1790],{"class":74},[39,144126,143354],{"class":45},[39,144128,166],{"class":53},[39,144130,144131],{"class":41,"line":112},[39,144132,115],{"class":53},[1192,144134,144135],{},"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":92,"depth":92,"links":144137},[144138,144145],{"id":143233,"depth":92,"text":143234,"children":144139},[144140,144141,144142,144143,144144],{"id":143257,"depth":112,"text":143258},{"id":143312,"depth":112,"text":143313},{"id":143437,"depth":112,"text":143438},{"id":143540,"depth":112,"text":143541},{"id":143858,"depth":112,"text":143859},{"id":143886,"depth":92,"text":143887,"children":144146},[144147,144148,144149,144150,144151,144152],{"id":143893,"depth":112,"text":143894},{"id":143900,"depth":112,"text":143901},{"id":143916,"depth":112,"text":143917},{"id":143926,"depth":112,"text":143927},{"id":143953,"depth":112,"text":143954},{"id":144008,"depth":112,"text":144009},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143225,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144159,"title":144160,"body":144161,"description":24350,"extension":1203,"meta":144364,"navigation":121,"path":144365,"seo":144366,"stem":144367,"__hash__":144368},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144162,"toc":144353},[144163,144166,144170,144173,144176,144180,144183,144186,144189,144193,144196,144200,144203,144207,144210,144214,144228,144232,144257,144260,144263,144280,144284,144288,144291,144294,144298,144301,144304,144322,144326,144329,144343,144347,144350],[10,144164,144160],{"id":144165},"_19-移动端基础-前缀现状与视口",[14,144167,144169],{"id":144168},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[2585,144171],{"style":127383,"src":144172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144174,144175],{},"意思就是加个前缀，增加兼容性",[14,144177,144179],{"id":144178},"_192-移动端现状认识","19.2 移动端现状认识",[2585,144181],{"style":127383,"src":144182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144184,144185],{},"调试方法：",[2585,144187],{"style":127383,"src":144188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144190,144192],{"id":144191},"_193-视口","19.3 视口",[19,144194,144195],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[476,144197,144199],{"id":144198},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[2585,144201],{"style":127383,"src":144202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[476,144204,144206],{"id":144205},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[2585,144208],{"style":127383,"src":144209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[476,144211,144213],{"id":144212},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[489,144215,144216,144219,144222,144225],{},[331,144217,144218],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[331,144220,144221],{},"理想视口，对设备来讲，是最理想的视口尺寸",[331,144223,144224],{},"需要手动添写meta视口标签通知浏览器操作",[331,144226,144227],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[476,144229,144231],{"id":144230},"_1934-meta视口标签","19.3.4 meta视口标签",[30,144233,144235],{"className":128274,"code":144234,"language":128276,"meta":35,"style":35},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[26,144236,144237],{"__ignoreMap":35},[39,144238,144239,144241,144243,144245,144247,144249,144251,144253,144255],{"class":41,"line":42},[39,144240,2170],{"class":53},[39,144242,52319],{"class":52275},[39,144244,15893],{"class":49},[39,144246,1117],{"class":53},[39,144248,52366],{"class":237},[39,144250,52346],{"class":49},[39,144252,1117],{"class":53},[39,144254,52373],{"class":237},[39,144256,52282],{"class":53},[2585,144258],{"style":127383,"src":144259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144261,144262],{},"标准视口设置：",[328,144264,144265,144268,144271,144274,144277],{},[331,144266,144267],{},"视口宽度和设备保持一致",[331,144269,144270],{},"视口的默认缩放比例1.0",[331,144272,144273],{},"不允许用户自行缩放",[331,144275,144276],{},"最大允许的缩放比例1.0",[331,144278,144279],{},"最小允许的缩放比例1.0",[476,144281,144283],{"id":144282},"_1935-二倍图","19.3.5 二倍图",[22971,144285,144287],{"id":144286},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[2585,144289],{"style":127383,"src":144290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[2585,144292],{"style":127383,"src":144293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22971,144295,144297],{"id":144296},"_19352-多倍图","19.3.5.2 多倍图",[2585,144299],{"style":127383,"src":144300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144302,144303],{},"二倍图法，代码如下：",[30,144305,144307],{"className":127527,"code":144306,"language":127529,"meta":35,"style":35},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[26,144308,144309,144314],{"__ignoreMap":35},[39,144310,144311],{"class":41,"line":42},[39,144312,144313],{"class":128},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[39,144315,144316,144319],{"class":41,"line":92},[39,144317,144318],{"class":52275},"background-size",[39,144320,144321],{"class":53},": 50% 50%;\n",[22971,144323,144325],{"id":144324},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[2585,144327],{"style":127383,"src":144328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[328,144330,144331,144334,144337,144340],{},[331,144332,144333],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[331,144335,144336],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[331,144338,144339],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[331,144341,144342],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22971,144344,144346],{"id":144345},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[2585,144348],{"style":127383,"src":144349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1192,144351,144352],{},"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":92,"depth":92,"links":144354},[144355,144356,144357],{"id":144168,"depth":92,"text":144169},{"id":144178,"depth":92,"text":144179},{"id":144191,"depth":92,"text":144192,"children":144358},[144359,144360,144361,144362,144363],{"id":144198,"depth":112,"text":144199},{"id":144205,"depth":112,"text":144206},{"id":144212,"depth":112,"text":144213},{"id":144230,"depth":112,"text":144231},{"id":144282,"depth":112,"text":144283},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144160,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144370,"title":144371,"body":144372,"description":24350,"extension":1203,"meta":145249,"navigation":121,"path":145250,"seo":145251,"stem":145252,"__hash__":145253},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144373,"toc":145233},[144374,144377,144381,144388,144391,144398,144401,144406,144409,144413,144417,144424,144427,144430,144434,144437,144440,144443,144446,144449,144453,144456,144460,144462,144465,144468,144471,144474,144476,144479,144481,144511,144513,144543,144547,144550,144554,144557,144574,144577,144580,144656,144658,144661,144664,144667,144670,144672,144675,144678,144682,144704,144707,144710,144714,144717,144723,144726,144730,144733,144736,144740,144743,144746,144749,144753,144756,144759,144762,144765,144769,144772,144776,144783,144786,144789,144792,144795,144805,144808,144811,144818,144821,144825,144828,144831,144835,144838,144841,144844,144889,144892,144895,144898,144900,145029,145031,145069,145072,145075,145077,145195,145197,145231],[10,144375,144371],{"id":144376},"_20-移动端布局实战上篇",[14,144378,144380],{"id":144379},"_201-移动端主流方案","20.1 移动端主流方案",[328,144382,144383],{},[331,144384,144385],{},[350,144386,144387],{},"单独移动端页面（主流）",[2585,144389],{"style":127383,"src":144390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[328,144392,144393],{"start":92},[331,144394,144395],{},[350,144396,144397],{},"响应式兼容PC移动端",[2585,144399],{"style":127383,"src":144400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[328,144402,144403],{"start":112},[331,144404,144405],{},"两种页面选型布局方式",[2585,144407],{"style":127383,"src":144408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144410,144412],{"id":144411},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[476,144414,144416],{"id":144415},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,144418,144419,144420],{},"官网地址： ",[922,144421,144422],{"href":144422,"rel":144423},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24839],[2585,144425],{"style":127383,"src":144426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[2585,144428],{"style":127383,"src":144429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[476,144431,144433],{"id":144432},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[2585,144435],{"style":127383,"src":144436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[2585,144438],{"style":127383,"src":144439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144441,144442],{},"去除高亮：",[19,144444,144445],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144447,144448],{},"-webkit- tap-highlight-color: transparent;",[14,144450,144452],{"id":144451},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[2585,144454],{"style":127383,"src":144455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144457,144459],{"id":144458},"_204-流式布局案例","20.4 流式布局案例",[19,144461,1301],{},[19,144463,144464],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144466,144467],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144469,144470],{},"图片格式：",[2585,144472],{"style":127383,"src":144473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144475,136570],{},[2585,144477],{"style":127383,"src":144478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144480,140897],{},[30,144482,144483],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,144484,144485],{"__ignoreMap":35},[39,144486,144487,144489,144491,144493,144495,144497,144499,144501,144503,144505,144507,144509],{"class":41,"line":42},[39,144488,2170],{"class":53},[39,144490,2585],{"class":52275},[39,144492,56214],{"class":49},[39,144494,1117],{"class":53},[39,144496,135044],{"class":237},[39,144498,56222],{"class":49},[39,144500,1117],{"class":53},[39,144502,135051],{"class":237},[39,144504,135054],{"class":49},[39,144506,1117],{"class":53},[39,144508,135059],{"class":237},[39,144510,52282],{"class":53},[19,144512,140986],{},[30,144514,144515],{"className":128274,"code":135029,"language":128276,"meta":35,"style":35},[26,144516,144517],{"__ignoreMap":35},[39,144518,144519,144521,144523,144525,144527,144529,144531,144533,144535,144537,144539,144541],{"class":41,"line":42},[39,144520,2170],{"class":53},[39,144522,2585],{"class":52275},[39,144524,56214],{"class":49},[39,144526,1117],{"class":53},[39,144528,135044],{"class":237},[39,144530,56222],{"class":49},[39,144532,1117],{"class":53},[39,144534,135051],{"class":237},[39,144536,135054],{"class":49},[39,144538,1117],{"class":53},[39,144540,135059],{"class":237},[39,144542,52282],{"class":53},[14,144544,144546],{"id":144545},"_205-flex布局","20.5 flex布局",[2585,144548],{"style":127383,"src":144549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[476,144551,144553],{"id":144552},"_2051-布局原理","20.5.1 布局原理",[19,144555,144556],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[489,144558,144559,144562,144565,144568,144571],{},[331,144560,144561],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[331,144563,144564],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[331,144566,144567],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[331,144569,144570],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[331,144572,144573],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144575,144576],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144578,144579],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[30,144581,144583],{"className":127527,"code":144582,"language":127529,"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",[26,144584,144585,144590,144597,144607,144619,144630,144641,144652],{"__ignoreMap":35},[39,144586,144587],{"class":41,"line":42},[39,144588,144589],{"class":128},"\u002F* Flex 弹性布局 *\u002F\n",[39,144591,144592,144595],{"class":41,"line":92},[39,144593,144594],{"class":49},".container",[39,144596,16545],{"class":53},[39,144598,144599,144601,144603,144605],{"class":41,"line":112},[39,144600,129143],{"class":74},[39,144602,52412],{"class":53},[39,144604,52452],{"class":74},[39,144606,318],{"class":53},[39,144608,144609,144612,144614,144617],{"class":41,"line":118},[39,144610,144611],{"class":74},"  flex-direction",[39,144613,52412],{"class":53},[39,144615,144616],{"class":74},"row",[39,144618,318],{"class":53},[39,144620,144621,144624,144626,144628],{"class":41,"line":125},[39,144622,144623],{"class":74},"  justify-content",[39,144625,52412],{"class":53},[39,144627,52643],{"class":74},[39,144629,318],{"class":53},[39,144631,144632,144635,144637,144639],{"class":41,"line":132},[39,144633,144634],{"class":74},"  align-items",[39,144636,52412],{"class":53},[39,144638,52567],{"class":74},[39,144640,318],{"class":53},[39,144642,144643,144646,144648,144650],{"class":41,"line":138},[39,144644,144645],{"class":74},"  flex-wrap",[39,144647,52412],{"class":53},[39,144649,79585],{"class":74},[39,144651,318],{"class":53},[39,144653,144654],{"class":41,"line":169},[39,144655,115],{"class":53},[19,144657,71428],{},[19,144659,144660],{},".form-item .male-label {",[19,144662,144663],{},"   margin-right: 20px;",[19,144665,144666],{},"   display: inline-flex;",[19,144668,144669],{},"   align-items: center;",[19,144671,2206],{},[2585,144673],{"style":127383,"src":144674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[2585,144676],{"style":127383,"src":144677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[476,144679,144681],{"id":144680},"_2052-常见父项属性","20.5.2 常见父项属性",[328,144683,144684,144687,144690,144693,144696,144699,144702],{},[331,144685,144686],{},"flex-direction：设置主轴的方向",[331,144688,144689],{},"justify-content：设置主轴上的子元素排列方式",[331,144691,144692],{},"flex-wrap：设置子元素是否换行",[331,144694,144695],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[331,144697,144698],{},"align-items：设置侧轴上的子元素排列方式（单行）",[331,144700,144701],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[331,144703,144686],{},[2585,144705],{"style":127383,"src":144706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[2585,144708],{"style":127383,"src":144709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[328,144711,144712],{"start":92},[331,144713,144689],{},[2585,144715],{"style":127383,"src":144716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144718,144719,144722],{},[26,144720,144721],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144724,144725],{},"跟着主轴走",[328,144727,144728],{"start":112},[331,144729,144692],{},[2585,144731],{"style":127383,"src":144732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,144734,144735],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[328,144737,144738],{"start":118},[331,144739,144695],{},[2585,144741],{"style":127383,"src":144742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,144744,144745],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,144747,144748],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[328,144750,144751],{"start":125},[331,144752,144698],{},[2585,144754],{"style":127383,"src":144755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,144757,144758],{},"align-items与align-content之间的区别：",[19,144760,144761],{},"单找items，多找content",[2585,144763],{"style":127383,"src":144764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[328,144766,144767],{"start":132},[331,144768,144701],{},[2585,144770],{"style":127383,"src":144771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[476,144773,144775],{"id":144774},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[328,144777,144778],{},[331,144779,144780],{},[350,144781,144782],{},"flex 属性",[19,144784,144785],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[2585,144787],{"style":127383,"src":144788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144790,144791],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144793,144794],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[328,144796,144797],{"start":92},[331,144798,144799,352,144802],{},[350,144800,144801],{},"align-self",[350,144803,144804],{},"控制子项自己在侧轴上的排列方式",[2585,144806],{"style":127383,"src":144807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144809,144810],{},"单个子盒子在父盒子侧轴上的排列方式",[328,144812,144813],{"start":112},[331,144814,144815,144817],{},[350,144816,96272],{}," 属性定义项目的排列顺序",[2585,144819],{"style":127383,"src":144820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[476,144822,144824],{"id":144823},"_2054-背景线性渐变","20.5.4 背景线性渐变",[2585,144826],{"style":127383,"src":144827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144829,144830],{},"必须要添加浏览器的私有前缀",[476,144832,144834],{"id":144833},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144836,144837],{},"学到最重要的知识：",[19,144839,144840],{},"flex处理这样的布局思路",[2585,144842],{"style":127383,"src":144843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[30,144845,144847],{"className":127527,"code":144846,"language":127529,"meta":35,"style":35},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[26,144848,144849,144855,144865,144875,144885],{"__ignoreMap":35},[39,144850,144851,144853],{"class":41,"line":42},[39,144852,144594],{"class":49},[39,144854,16545],{"class":53},[39,144856,144857,144859,144861,144863],{"class":41,"line":92},[39,144858,129143],{"class":74},[39,144860,52412],{"class":53},[39,144862,52452],{"class":74},[39,144864,318],{"class":53},[39,144866,144867,144869,144871,144873],{"class":41,"line":112},[39,144868,144623],{"class":74},[39,144870,52412],{"class":53},[39,144872,52567],{"class":74},[39,144874,318],{"class":53},[39,144876,144877,144879,144881,144883],{"class":41,"line":118},[39,144878,144634],{"class":74},[39,144880,52412],{"class":53},[39,144882,52567],{"class":74},[39,144884,318],{"class":53},[39,144886,144887],{"class":41,"line":125},[39,144888,115],{"class":53},[19,144890,144891],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144893,144894],{},"使用属性选择器",[2585,144896],{"style":127383,"src":144897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144899,69864],{},[30,144901,144903],{"className":128274,"code":144902,"language":128276,"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",[26,144904,144905,144910,144924,144929,144949,144954,144973,144978,144997,145002,145021],{"__ignoreMap":35},[39,144906,144907],{"class":41,"line":42},[39,144908,144909],{"class":128},"\u003C!-- 携程网移动端案例结构 -->\n",[39,144911,144912,144914,144916,144918,144920,144922],{"class":41,"line":92},[39,144913,2170],{"class":53},[39,144915,52586],{"class":52275},[39,144917,54461],{"class":49},[39,144919,1117],{"class":53},[39,144921,93298],{"class":237},[39,144923,52282],{"class":53},[39,144925,144926],{"class":41,"line":112},[39,144927,144928],{"class":128},"  \u003C!-- 搜索栏 -->\n",[39,144930,144931,144933,144935,144937,144939,144942,144945,144947],{"class":41,"line":118},[39,144932,53119],{"class":53},[39,144934,52586],{"class":52275},[39,144936,54461],{"class":49},[39,144938,1117],{"class":53},[39,144940,144941],{"class":237},"\"search-index\"",[39,144943,144944],{"class":53},">...\u003C\u002F",[39,144946,52586],{"class":52275},[39,144948,52282],{"class":53},[39,144950,144951],{"class":41,"line":125},[39,144952,144953],{"class":128},"  \u003C!-- 焦点图 -->\n",[39,144955,144956,144958,144960,144962,144964,144967,144969,144971],{"class":41,"line":132},[39,144957,53119],{"class":53},[39,144959,52586],{"class":52275},[39,144961,54461],{"class":49},[39,144963,1117],{"class":53},[39,144965,144966],{"class":237},"\"focus\"",[39,144968,144944],{"class":53},[39,144970,52586],{"class":52275},[39,144972,52282],{"class":53},[39,144974,144975],{"class":41,"line":138},[39,144976,144977],{"class":128},"  \u003C!-- 主导航 -->\n",[39,144979,144980,144982,144984,144986,144988,144991,144993,144995],{"class":41,"line":169},[39,144981,53119],{"class":53},[39,144983,52586],{"class":52275},[39,144985,54461],{"class":49},[39,144987,1117],{"class":53},[39,144989,144990],{"class":237},"\"local-nav\"",[39,144992,144944],{"class":53},[39,144994,52586],{"class":52275},[39,144996,52282],{"class":53},[39,144998,144999],{"class":41,"line":190},[39,145000,145001],{"class":128},"  \u003C!-- 子导航 -->\n",[39,145003,145004,145006,145008,145010,145012,145015,145017,145019],{"class":41,"line":202},[39,145005,53119],{"class":53},[39,145007,52586],{"class":52275},[39,145009,54461],{"class":49},[39,145011,1117],{"class":53},[39,145013,145014],{"class":237},"\"nav-common\"",[39,145016,144944],{"class":53},[39,145018,52586],{"class":52275},[39,145020,52282],{"class":53},[39,145022,145023,145025,145027],{"class":41,"line":207},[39,145024,52760],{"class":53},[39,145026,52586],{"class":52275},[39,145028,52282],{"class":53},[19,145030,71428],{},[30,145032,145033],{"className":127527,"code":137979,"language":127529,"meta":35,"style":35},[26,145034,145035,145049,145065],{"__ignoreMap":35},[39,145036,145037,145039,145041,145043,145045,145047],{"class":41,"line":42},[39,145038,54796],{"class":52275},[39,145040,2150],{"class":53},[39,145042,104082],{"class":49},[39,145044,1117],{"class":45},[39,145046,63674],{"class":237},[39,145048,137996],{"class":53},[39,145050,145051,145053,145055,145057,145059,145061,145063],{"class":41,"line":92},[39,145052,71871],{"class":74},[39,145054,52412],{"class":53},[39,145056,1483],{"class":74},[39,145058,52467],{"class":45},[39,145060,52496],{"class":74},[39,145062,131107],{"class":74},[39,145064,318],{"class":53},[39,145066,145067],{"class":41,"line":112},[39,145068,115],{"class":53},[19,145070,145071],{},"总代码和效果展示：",[2585,145073],{"style":127383,"src":145074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145076,69864],{},[30,145078,145079],{"className":128274,"code":144902,"language":128276,"meta":35,"style":35},[26,145080,145081,145085,145099,145103,145121,145125,145143,145147,145165,145169,145187],{"__ignoreMap":35},[39,145082,145083],{"class":41,"line":42},[39,145084,144909],{"class":128},[39,145086,145087,145089,145091,145093,145095,145097],{"class":41,"line":92},[39,145088,2170],{"class":53},[39,145090,52586],{"class":52275},[39,145092,54461],{"class":49},[39,145094,1117],{"class":53},[39,145096,93298],{"class":237},[39,145098,52282],{"class":53},[39,145100,145101],{"class":41,"line":112},[39,145102,144928],{"class":128},[39,145104,145105,145107,145109,145111,145113,145115,145117,145119],{"class":41,"line":118},[39,145106,53119],{"class":53},[39,145108,52586],{"class":52275},[39,145110,54461],{"class":49},[39,145112,1117],{"class":53},[39,145114,144941],{"class":237},[39,145116,144944],{"class":53},[39,145118,52586],{"class":52275},[39,145120,52282],{"class":53},[39,145122,145123],{"class":41,"line":125},[39,145124,144953],{"class":128},[39,145126,145127,145129,145131,145133,145135,145137,145139,145141],{"class":41,"line":132},[39,145128,53119],{"class":53},[39,145130,52586],{"class":52275},[39,145132,54461],{"class":49},[39,145134,1117],{"class":53},[39,145136,144966],{"class":237},[39,145138,144944],{"class":53},[39,145140,52586],{"class":52275},[39,145142,52282],{"class":53},[39,145144,145145],{"class":41,"line":138},[39,145146,144977],{"class":128},[39,145148,145149,145151,145153,145155,145157,145159,145161,145163],{"class":41,"line":169},[39,145150,53119],{"class":53},[39,145152,52586],{"class":52275},[39,145154,54461],{"class":49},[39,145156,1117],{"class":53},[39,145158,144990],{"class":237},[39,145160,144944],{"class":53},[39,145162,52586],{"class":52275},[39,145164,52282],{"class":53},[39,145166,145167],{"class":41,"line":190},[39,145168,145001],{"class":128},[39,145170,145171,145173,145175,145177,145179,145181,145183,145185],{"class":41,"line":202},[39,145172,53119],{"class":53},[39,145174,52586],{"class":52275},[39,145176,54461],{"class":49},[39,145178,1117],{"class":53},[39,145180,145014],{"class":237},[39,145182,144944],{"class":53},[39,145184,52586],{"class":52275},[39,145186,52282],{"class":53},[39,145188,145189,145191,145193],{"class":41,"line":207},[39,145190,52760],{"class":53},[39,145192,52586],{"class":52275},[39,145194,52282],{"class":53},[19,145196,71428],{},[30,145198,145199],{"className":128274,"code":131631,"language":128276,"meta":35,"style":35},[26,145200,145201,145205,145219,145223],{"__ignoreMap":35},[39,145202,145203],{"class":41,"line":42},[39,145204,131638],{"class":128},[39,145206,145207,145209,145211,145213,145215,145217],{"class":41,"line":92},[39,145208,2170],{"class":53},[39,145210,52586],{"class":52275},[39,145212,54461],{"class":49},[39,145214,1117],{"class":53},[39,145216,131651],{"class":237},[39,145218,52282],{"class":53},[39,145220,145221],{"class":41,"line":112},[39,145222,131658],{"class":53},[39,145224,145225,145227,145229],{"class":41,"line":118},[39,145226,52760],{"class":53},[39,145228,52586],{"class":52275},[39,145230,52282],{"class":53},[1192,145232,138928],{},{"title":35,"searchDepth":92,"depth":92,"links":145234},[145235,145236,145240,145241,145242],{"id":144379,"depth":92,"text":144380},{"id":144411,"depth":92,"text":144412,"children":145237},[145238,145239],{"id":144415,"depth":112,"text":144416},{"id":144432,"depth":112,"text":144433},{"id":144451,"depth":92,"text":144452},{"id":144458,"depth":92,"text":144459},{"id":144545,"depth":92,"text":144546,"children":145243},[145244,145245,145246,145247,145248],{"id":144552,"depth":112,"text":144553},{"id":144680,"depth":112,"text":144681},{"id":144774,"depth":112,"text":144775},{"id":144823,"depth":112,"text":144824},{"id":144833,"depth":112,"text":144834},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144371,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145255,"title":145256,"body":145257,"description":24350,"extension":1203,"meta":146484,"navigation":121,"path":146485,"seo":146486,"stem":146487,"__hash__":146488},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145258,"toc":146462},[145259,145262,145266,145270,145273,145276,145280,145285,145288,145291,145294,145297,145300,145357,145360,145365,145368,145371,145375,145386,145390,145393,145396,145403,145408,145412,145415,145421,145424,145428,145431,145438,145441,145444,145451,145454,145461,145464,145467,145474,145477,145480,145482,145499,145503,145506,145509,145512,145516,145519,145522,145525,145528,145531,145534,145536,145539,145542,145604,145607,145717,145724,145730,145733,145736,145740,145743,145747,145752,145755,145762,145765,145771,145776,145779,145782,145785,145788,145791,145794,145797,145800,145856,145858,145884,145888,145891,145894,145897,145905,145908,145911,145915,145971,145974,145978,145984,145995,145998,146003,146006,146009,146015,146018,146021,146024,146027,146030,146033,146036,146039,146064,146070,146073,146076,146079,146082,146085,146088,146093,146096,146099,146102,146110,146113,146120,146123,146126,146128,146152,146154,146157,146160,146163,146166,146169,146172,146175,146209,146212,146215,146249,146256,146259,146262,146265,146268,146271,146274,146281,146284,146287,146290,146293,146300,146303,146306,146313,146316,146319,146323,146326,146329,146332,146335,146338,146341,146344,146347,146349,146373,146375,146399,146403,146414,146417,146420,146423,146426,146429,146432,146435,146438,146441,146444,146447,146450,146453,146456,146459],[10,145260,145256],{"id":145261},"_21-移动端布局实战下篇",[14,145263,145265],{"id":145264},"_211-rem适配布局","21.1 rem适配布局",[476,145267,145269],{"id":145268},"_2111-rem单位","21.1.1 rem单位",[2585,145271],{"style":127383,"src":145272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145274,145275],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[476,145277,145279],{"id":145278},"_2112-媒体查询","21.1.2 媒体查询",[328,145281,145282],{},[331,145283,145284],{},"参数介绍",[2585,145286],{"style":127383,"src":145287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[2585,145289],{"style":127383,"src":145290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[2585,145292],{"style":127383,"src":145293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[2585,145295],{"style":127383,"src":145296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[2585,145298],{"style":127383,"src":145299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[30,145301,145303],{"className":127527,"code":145302,"language":127529,"meta":35,"style":35},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[26,145304,145305,145310,145329,145336,145349,145353],{"__ignoreMap":35},[39,145306,145307],{"class":41,"line":42},[39,145308,145309],{"class":128},"\u002F* 媒体查询 *\u002F\n",[39,145311,145312,145315,145317,145320,145322,145325,145327],{"class":41,"line":92},[39,145313,145314],{"class":45},"@media",[39,145316,2772],{"class":53},[39,145318,145319],{"class":74},"max-width",[39,145321,52412],{"class":53},[39,145323,145324],{"class":74},"768",[39,145326,52467],{"class":45},[39,145328,89],{"class":53},[39,145330,145331,145334],{"class":41,"line":112},[39,145332,145333],{"class":49},"  .container",[39,145335,16545],{"class":53},[39,145337,145338,145341,145343,145345,145347],{"class":41,"line":118},[39,145339,145340],{"class":74},"    width",[39,145342,52412],{"class":53},[39,145344,278],{"class":74},[39,145346,1592],{"class":45},[39,145348,318],{"class":53},[39,145350,145351],{"class":41,"line":125},[39,145352,128323],{"class":53},[39,145354,145355],{"class":41,"line":132},[39,145356,115],{"class":53},[19,145358,145359],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[328,145361,145362],{"start":92},[331,145363,145364],{},"引入资源",[2585,145366],{"style":127383,"src":145367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145369,145370],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[476,145372,145374],{"id":145373},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[489,145376,145377,145380,145383],{},[331,145378,145379],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[331,145381,145382],{},"媒体查询可以根据不同设备宽度来修改样式",[331,145384,145385],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145387,145389],{"id":145388},"_212-less基础","21.2 Less基础",[19,145391,145392],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,145394,145395],{},"Less可以解决该问题，它是css的扩展语言",[19,145397,145398,145399],{},"Less中文网址： ",[922,145400,145401],{"href":145401,"rel":145402},"http:\u002F\u002Flesscss.cn\u002F",[24839],[19,145404,145405],{},[350,145406,145407],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[476,145409,145411],{"id":145410},"_2121-less安装","21.2.1 less安装",[19,145413,145414],{},"如果使用vscode，则无需进行下方安装步骤",[19,145416,145417],{},[922,145418,145419],{"href":145419,"rel":145420},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24839],[2585,145422],{"style":127383,"src":145423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[476,145425,145427],{"id":145426},"_2122-less使用","21.2.2 less使用",[19,145429,145430],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[328,145432,145433],{},[331,145434,145435],{},[350,145436,145437],{},"Less 变量",[2585,145439],{"style":127383,"src":145440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[2585,145442],{"style":127383,"src":145443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[328,145445,145446],{"start":92},[331,145447,145448],{},[350,145449,145450],{},"Less 编译",[2585,145452],{"style":127383,"src":145453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[328,145455,145456],{"start":112},[331,145457,145458],{},[350,145459,145460],{},"Less 嵌套",[2585,145462],{"style":127383,"src":145463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[2585,145465],{"style":127383,"src":145466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[328,145468,145469],{"start":118},[331,145470,145471],{},[350,145472,145473],{},"Less 运算",[2585,145475],{"style":127383,"src":145476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145478,145479],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145481,1301],{},[489,145483,145484,145487,145490,145493,145496],{},[331,145485,145486],{},"乘号（*）和除号（\u002F）的写法",[331,145488,145489],{},"运算符中间左右有个空格隔开 1px + 5",[331,145491,145492],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[331,145494,145495],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[331,145497,145498],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145500,145502],{"id":145501},"_213-rem-适配方案","21.3 rem 适配方案",[19,145504,145505],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145507,145508],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[2585,145510],{"style":127383,"src":145511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[476,145513,145515],{"id":145514},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145517,145518],{},"rem + 媒体查询 + less 技术",[2585,145520],{"style":127383,"src":145521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145523,145524],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145526,145527],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[2585,145529],{"style":127383,"src":145530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145532,145533],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145535,15606],{},[2585,145537],{"style":127383,"src":145538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145540,145541],{},"index.html:",[30,145543,145545],{"className":127527,"code":145544,"language":127529,"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",[26,145546,145547,145552,145558,145574,145578,145584,145600],{"__ignoreMap":35},[39,145548,145549],{"class":41,"line":42},[39,145550,145551],{"class":128},"\u002F* rem 适配方案 *\u002F\n",[39,145553,145554,145556],{"class":41,"line":92},[39,145555,51610],{"class":52275},[39,145557,16545],{"class":53},[39,145559,145560,145562,145564,145567,145569,145571],{"class":41,"line":112},[39,145561,71601],{"class":74},[39,145563,52412],{"class":53},[39,145565,145566],{"class":74},"62.5",[39,145568,1592],{"class":45},[39,145570,131390],{"class":53},[39,145572,145573],{"class":128},"\u002F* 1rem = 10px *\u002F\n",[39,145575,145576],{"class":41,"line":118},[39,145577,115],{"class":53},[39,145579,145580,145582],{"class":41,"line":125},[39,145581,131375],{"class":49},[39,145583,16545],{"class":53},[39,145585,145586,145588,145590,145592,145595,145597],{"class":41,"line":132},[39,145587,71543],{"class":74},[39,145589,52412],{"class":53},[39,145591,423],{"class":74},[39,145593,145594],{"class":45},"rem",[39,145596,131390],{"class":53},[39,145598,145599],{"class":128},"\u002F* 100px *\u002F\n",[39,145601,145602],{"class":41,"line":138},[39,145603,115],{"class":53},[19,145605,145606],{},"common.less",[30,145608,145610],{"className":127527,"code":145609,"language":127529,"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",[26,145611,145612,145618,145633,145637,145643,145657,145661,145665,145669,145675,145689,145693,145699,145713],{"__ignoreMap":35},[39,145613,145614,145616],{"class":41,"line":42},[39,145615,51610],{"class":52275},[39,145617,16545],{"class":53},[39,145619,145620,145622,145624,145626,145628,145630],{"class":41,"line":92},[39,145621,71601],{"class":74},[39,145623,52412],{"class":53},[39,145625,145566],{"class":74},[39,145627,1592],{"class":45},[39,145629,27042],{"class":53},[39,145631,145632],{"class":128},"\u002F* 10px *\u002F\n",[39,145634,145635],{"class":41,"line":112},[39,145636,115],{"class":53},[39,145638,145639,145641],{"class":41,"line":118},[39,145640,52586],{"class":52275},[39,145642,16545],{"class":53},[39,145644,145645,145647,145649,145651,145653,145655],{"class":41,"line":125},[39,145646,71543],{"class":74},[39,145648,52412],{"class":53},[39,145650,423],{"class":74},[39,145652,145594],{"class":45},[39,145654,27042],{"class":53},[39,145656,145599],{"class":128},[39,145658,145659],{"class":41,"line":132},[39,145660,115],{"class":53},[39,145662,145663],{"class":41,"line":138},[39,145664,136988],{"class":53},[39,145666,145667],{"class":41,"line":169},[39,145668,145551],{"class":128},[39,145670,145671,145673],{"class":41,"line":190},[39,145672,51610],{"class":52275},[39,145674,16545],{"class":53},[39,145676,145677,145679,145681,145683,145685,145687],{"class":41,"line":202},[39,145678,71601],{"class":74},[39,145680,52412],{"class":53},[39,145682,145566],{"class":74},[39,145684,1592],{"class":45},[39,145686,131390],{"class":53},[39,145688,145573],{"class":128},[39,145690,145691],{"class":41,"line":207},[39,145692,115],{"class":53},[39,145694,145695,145697],{"class":41,"line":212},[39,145696,131375],{"class":49},[39,145698,16545],{"class":53},[39,145700,145701,145703,145705,145707,145709,145711],{"class":41,"line":223},[39,145702,71543],{"class":74},[39,145704,52412],{"class":53},[39,145706,423],{"class":74},[39,145708,145594],{"class":45},[39,145710,131390],{"class":53},[39,145712,145599],{"class":128},[39,145714,145715],{"class":41,"line":228},[39,145716,115],{"class":53},[19,145718,145719,145720,145723],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24527,145721,145722],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[30,145725,145728],{"className":145726,"code":145727,"language":6267},[6265],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[26,145729,145727],{"__ignoreMap":35},[19,145731,145732],{},"less保存时会自动变成.css文件",[19,145734,145735],{},"好好搞懂上述代码写法",[476,145737,145739],{"id":145738},"_2132-样式导入样式","21.3.2 样式导入样式",[2585,145741],{"style":127383,"src":145742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[476,145744,145746],{"id":145745},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[328,145748,145749],{},[331,145750,145751],{},"准备工作",[2585,145753],{"style":127383,"src":145754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,145756,145757,145758],{},"github地址：",[922,145759,145760],{"href":145760,"rel":145761},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24839],[19,145763,145764],{},"下载之后，将index.js文件拖到项目中就可以了",[19,145766,145767,145768],{},"js文件引入到index.html中使用的是",[26,145769,145770],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[328,145772,145773],{"start":92},[331,145774,145775],{},"vscode插件",[2585,145777],{"style":127383,"src":145778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145780,145781],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145783,145784],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[2585,145786],{"style":127383,"src":145787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145789,145790],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[2585,145792],{"style":127383,"src":145793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145795,145796],{},"修改成75就可以，alt+z为快捷键",[19,145798,145799],{},"index.css：",[30,145801,145802],{"className":127527,"code":145544,"language":127529,"meta":35,"style":35},[26,145803,145804,145808,145814,145828,145832,145838,145852],{"__ignoreMap":35},[39,145805,145806],{"class":41,"line":42},[39,145807,145551],{"class":128},[39,145809,145810,145812],{"class":41,"line":92},[39,145811,51610],{"class":52275},[39,145813,16545],{"class":53},[39,145815,145816,145818,145820,145822,145824,145826],{"class":41,"line":112},[39,145817,71601],{"class":74},[39,145819,52412],{"class":53},[39,145821,145566],{"class":74},[39,145823,1592],{"class":45},[39,145825,131390],{"class":53},[39,145827,145573],{"class":128},[39,145829,145830],{"class":41,"line":118},[39,145831,115],{"class":53},[39,145833,145834,145836],{"class":41,"line":125},[39,145835,131375],{"class":49},[39,145837,16545],{"class":53},[39,145839,145840,145842,145844,145846,145848,145850],{"class":41,"line":132},[39,145841,71543],{"class":74},[39,145843,52412],{"class":53},[39,145845,423],{"class":74},[39,145847,145594],{"class":45},[39,145849,131390],{"class":53},[39,145851,145599],{"class":128},[39,145853,145854],{"class":41,"line":138},[39,145855,115],{"class":53},[19,145857,145541],{},[30,145859,145860],{"className":127527,"code":127931,"language":127529,"meta":35,"style":35},[26,145861,145862,145868,145880],{"__ignoreMap":35},[39,145863,145864,145866],{"class":41,"line":42},[39,145865,52775],{"class":52275},[39,145867,16545],{"class":53},[39,145869,145870,145872,145874,145876,145878],{"class":41,"line":92},[39,145871,71601],{"class":74},[39,145873,52412],{"class":53},[39,145875,1862],{"class":74},[39,145877,52467],{"class":45},[39,145879,318],{"class":53},[39,145881,145882],{"class":41,"line":112},[39,145883,115],{"class":53},[14,145885,145887],{"id":145886},"_214-响应式开发","21.4 响应式开发",[19,145889,145890],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[2585,145892],{"style":127383,"src":145893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145895,145896],{},"做法：",[489,145898,145899,145902],{},[331,145900,145901],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[331,145903,145904],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[2585,145906],{"style":127383,"src":145907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145909,145910],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[476,145912,145914],{"id":145913},"_2141-简单代码示范","21.4.1 简单代码示范",[30,145916,145917],{"className":127527,"code":145544,"language":127529,"meta":35,"style":35},[26,145918,145919,145923,145929,145943,145947,145953,145967],{"__ignoreMap":35},[39,145920,145921],{"class":41,"line":42},[39,145922,145551],{"class":128},[39,145924,145925,145927],{"class":41,"line":92},[39,145926,51610],{"class":52275},[39,145928,16545],{"class":53},[39,145930,145931,145933,145935,145937,145939,145941],{"class":41,"line":112},[39,145932,71601],{"class":74},[39,145934,52412],{"class":53},[39,145936,145566],{"class":74},[39,145938,1592],{"class":45},[39,145940,131390],{"class":53},[39,145942,145573],{"class":128},[39,145944,145945],{"class":41,"line":118},[39,145946,115],{"class":53},[39,145948,145949,145951],{"class":41,"line":125},[39,145950,131375],{"class":49},[39,145952,16545],{"class":53},[39,145954,145955,145957,145959,145961,145963,145965],{"class":41,"line":132},[39,145956,71543],{"class":74},[39,145958,52412],{"class":53},[39,145960,423],{"class":74},[39,145962,145594],{"class":45},[39,145964,131390],{"class":53},[39,145966,145599],{"class":128},[39,145968,145969],{"class":41,"line":138},[39,145970,115],{"class":53},[19,145972,145973],{},"父盒子一般命名为container",[476,145975,145977],{"id":145976},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145979,145980,145981],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[350,145982,145983],{},"使得 Web 开发更加快捷",[489,145985,145986],{},[331,145987,145988,145989],{},"官网：",[350,145990,145991],{},[922,145992,145993],{"href":145993,"rel":145994},"http:\u002F\u002Fgetbootstrap.com\u002F",[24839],[19,145996,145997],{},"可以直接去官网拿现成的东西",[328,145999,146000],{},[331,146001,146002],{},"Bootstrap的使用",[19,146004,146005],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146007,146008],{},"Bootstrap 使用四步曲：",[19,146010,146011,146014],{},[350,146012,146013],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[2585,146016],{"style":127383,"src":146017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146019,146020],{},"打开Bootstrap官网，然后下载",[2585,146022],{"style":127383,"src":146023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[2585,146025],{"style":127383,"src":146026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146028,146029],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146031,146032],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146034,146035],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[2585,146037],{"style":127383,"src":146038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[30,146040,146042],{"className":127527,"code":146041,"language":127529,"meta":35,"style":35},".center {\n  color: red;\n}\n",[26,146043,146044,146050,146060],{"__ignoreMap":35},[39,146045,146046,146048],{"class":41,"line":42},[39,146047,127818],{"class":49},[39,146049,16545],{"class":53},[39,146051,146052,146054,146056,146058],{"class":41,"line":92},[39,146053,71880],{"class":74},[39,146055,52412],{"class":53},[39,146057,58396],{"class":74},[39,146059,318],{"class":53},[39,146061,146062],{"class":41,"line":112},[39,146063,115],{"class":53},[19,146065,146066,146069],{},[26,146067,146068],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[2585,146071],{"style":127383,"src":146072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[2585,146074],{"style":127383,"src":146075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[2585,146077],{"style":127383,"src":146078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146080,146081],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[2585,146083],{"style":127383,"src":146084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146086,146087],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[328,146089,146090],{"start":92},[331,146091,146092],{},"布局容器",[2585,146094],{"style":127383,"src":146095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146097,146098],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146100,146101],{},"container-fluid用于移动式布局比较方便",[328,146103,146104],{"start":112},[331,146105,146106,146107],{},"bootstrap ",[350,146108,146109],{},"栅格系统原理",[2585,146111],{"style":127383,"src":146112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[328,146114,146115],{"start":118},[331,146116,146117],{},[350,146118,146119],{},"栅格选项参数",[2585,146121],{"style":127383,"src":146122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146124,146125],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146127,15606],{},[30,146129,146130],{"className":127527,"code":146041,"language":127529,"meta":35,"style":35},[26,146131,146132,146138,146148],{"__ignoreMap":35},[39,146133,146134,146136],{"class":41,"line":42},[39,146135,127818],{"class":49},[39,146137,16545],{"class":53},[39,146139,146140,146142,146144,146146],{"class":41,"line":92},[39,146141,71880],{"class":74},[39,146143,52412],{"class":53},[39,146145,58396],{"class":74},[39,146147,318],{"class":53},[39,146149,146150],{"class":41,"line":112},[39,146151,115],{"class":53},[19,146153,136570],{},[2585,146155],{"style":127383,"src":146156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146158,146159],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146161,146162],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146164,146165],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146167,146168],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146170,146171],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146173,146174],{},"汇总展示说明：",[30,146176,146177],{"className":128274,"code":131631,"language":128276,"meta":35,"style":35},[26,146178,146179,146183,146197,146201],{"__ignoreMap":35},[39,146180,146181],{"class":41,"line":42},[39,146182,131638],{"class":128},[39,146184,146185,146187,146189,146191,146193,146195],{"class":41,"line":92},[39,146186,2170],{"class":53},[39,146188,52586],{"class":52275},[39,146190,54461],{"class":49},[39,146192,1117],{"class":53},[39,146194,131651],{"class":237},[39,146196,52282],{"class":53},[39,146198,146199],{"class":41,"line":112},[39,146200,131658],{"class":53},[39,146202,146203,146205,146207],{"class":41,"line":118},[39,146204,52760],{"class":53},[39,146206,52586],{"class":52275},[39,146208,52282],{"class":53},[2585,146210],{"style":127383,"src":146211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146213,146214],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[30,146216,146217],{"className":128274,"code":131631,"language":128276,"meta":35,"style":35},[26,146218,146219,146223,146237,146241],{"__ignoreMap":35},[39,146220,146221],{"class":41,"line":42},[39,146222,131638],{"class":128},[39,146224,146225,146227,146229,146231,146233,146235],{"class":41,"line":92},[39,146226,2170],{"class":53},[39,146228,52586],{"class":52275},[39,146230,54461],{"class":49},[39,146232,1117],{"class":53},[39,146234,131651],{"class":237},[39,146236,52282],{"class":53},[39,146238,146239],{"class":41,"line":112},[39,146240,131658],{"class":53},[39,146242,146243,146245,146247],{"class":41,"line":118},[39,146244,52760],{"class":53},[39,146246,52586],{"class":52275},[39,146248,52282],{"class":53},[328,146250,146251],{"start":125},[331,146252,146253],{},[350,146254,146255],{},"列嵌套",[2585,146257],{"style":127383,"src":146258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146260,146261],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146263,146264],{},"没加row内部这样：",[2585,146266],{"style":127383,"src":146267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146269,146270],{},"加上row之后内部为：",[2585,146272],{"style":127383,"src":146273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[328,146275,146276],{"start":132},[331,146277,146278],{},[350,146279,146280],{},"列偏移",[2585,146282],{"style":127383,"src":146283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146285,146286],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146288,146289],{},"要加偏移量，即偏移份数",[19,146291,146292],{},"偏移的份数=12-两个盒子的份数",[328,146294,146295],{"start":138},[331,146296,146297],{},[350,146298,146299],{},"列排序",[2585,146301],{"style":127383,"src":146302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146304,146305],{},"pull拉左；push推右",[328,146307,146308],{"start":169},[331,146309,146310],{},[350,146311,146312],{},"响应式工具",[2585,146314],{"style":127383,"src":146315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146317,146318],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[476,146320,146322],{"id":146321},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146324,146325],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146327,146328],{},"ul {",[19,146330,146331],{},"list-style: none;",[19,146333,146334],{},"margin:0;",[19,146336,146337],{},"padding:0; }",[2585,146339],{"style":127383,"src":146340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[2585,146342],{"style":127383,"src":146343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146345,146346],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146348,69864],{},[30,146350,146351],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},[26,146352,146353,146359,146369],{"__ignoreMap":35},[39,146354,146355,146357],{"class":41,"line":42},[39,146356,131375],{"class":49},[39,146358,16545],{"class":53},[39,146360,146361,146363,146365,146367],{"class":41,"line":92},[39,146362,132007],{"class":74},[39,146364,52412],{"class":53},[39,146366,24710],{"class":74},[39,146368,318],{"class":53},[39,146370,146371],{"class":41,"line":112},[39,146372,115],{"class":53},[19,146374,71428],{},[30,146376,146377],{"className":127527,"code":140197,"language":127529,"meta":35,"style":35},[26,146378,146379,146385,146395],{"__ignoreMap":35},[39,146380,146381,146383],{"class":41,"line":42},[39,146382,131375],{"class":49},[39,146384,16545],{"class":53},[39,146386,146387,146389,146391,146393],{"class":41,"line":92},[39,146388,132007],{"class":74},[39,146390,52412],{"class":53},[39,146392,24710],{"class":74},[39,146394,318],{"class":53},[39,146396,146397],{"class":41,"line":112},[39,146398,115],{"class":53},[14,146400,146402],{"id":146401},"_215-swiper-插件使用","21.5 swiper 插件使用",[489,146404,146405,146408,146411],{},[331,146406,146407],{},"下载需要的css和js文件html页面中 引入相关文件",[331,146409,146410],{},"官网找到类似案例，复制html结构，css样式 js 语法",[331,146412,146413],{},"根据需求定制修改模块",[2585,146415],{"style":127383,"src":146416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,146418,146419],{},"解压后将这两部分放到项目中",[2585,146421],{"style":127383,"src":146422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,146424,146425],{},"这个插件可以帮助我们实现轮播图效果",[19,146427,146428],{},"用法：",[2585,146430],{"style":127383,"src":146431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,146433,146434],{},"找到自己喜欢的",[2585,146436],{"style":127383,"src":146437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146439,146440],{},"右键，查看网页源代码",[2585,146442],{"style":127383,"src":146443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146445,146446],{},"复制人家的结构内容",[19,146448,146449],{},"然后去看API文档：",[2585,146451],{"style":127383,"src":146452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146454,146455],{},"可以看看如何修改样式",[19,146457,146458],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1192,146460,146461],{},"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":92,"depth":92,"links":146463},[146464,146469,146473,146478,146483],{"id":145264,"depth":92,"text":145265,"children":146465},[146466,146467,146468],{"id":145268,"depth":112,"text":145269},{"id":145278,"depth":112,"text":145279},{"id":145373,"depth":112,"text":145374},{"id":145388,"depth":92,"text":145389,"children":146470},[146471,146472],{"id":145410,"depth":112,"text":145411},{"id":145426,"depth":112,"text":145427},{"id":145501,"depth":92,"text":145502,"children":146474},[146475,146476,146477],{"id":145514,"depth":112,"text":145515},{"id":145738,"depth":112,"text":145739},{"id":145745,"depth":112,"text":145746},{"id":145886,"depth":92,"text":145887,"children":146479},[146480,146481,146482],{"id":145913,"depth":112,"text":145914},{"id":145976,"depth":112,"text":145977},{"id":146321,"depth":112,"text":146322},{"id":146401,"depth":92,"text":146402},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145256,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146490,"title":146491,"body":146492,"description":24350,"extension":1203,"meta":146712,"navigation":121,"path":146713,"seo":146714,"stem":146715,"__hash__":146716},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146493,"toc":146708},[146494,146497,146501,146504,146519,146524,146527,146532,146567,146572,146584,146589,146602,146607,146624,146629,146649,146654,146672,146675,146678,146681,146684,146688,146691,146694,146697,146700,146703,146706],[10,146495,146491],{"id":146496},"_22-代码提交与新型相对单位",[14,146498,146500],{"id":146499},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146502,146503],{},"法1：",[328,146505,146506,146513,146516],{},[331,146507,146508,146509],{},"登录网站注册：",[922,146510,146511],{"href":146511,"rel":146512},"https:\u002F\u002Fgitee.com\u002F",[24839],[331,146514,146515],{},"码云创建新的仓库",[331,146517,146518],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[489,146520,146521],{},[331,146522,146523],{},"在网站根目录右键-- Git Bash Here",[2585,146525],{"style":127383,"src":146526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[489,146528,146529],{},[331,146530,146531],{},"如果是第一次利用git提交，请配置好全局选项",[30,146533,146535],{"className":118271,"code":146534,"language":118273,"meta":35,"style":35},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[26,146536,146537,146553],{"__ignoreMap":35},[39,146538,146539,146542,146544,146547,146550],{"class":41,"line":42},[39,146540,146541],{"class":49},"git",[39,146543,120694],{"class":237},[39,146545,146546],{"class":74}," --global",[39,146548,146549],{"class":237}," user.name",[39,146551,146552],{"class":237}," \"你的名字\"\n",[39,146554,146555,146557,146559,146561,146564],{"class":41,"line":92},[39,146556,146541],{"class":49},[39,146558,120694],{"class":237},[39,146560,146546],{"class":74},[39,146562,146563],{"class":237}," user.email",[39,146565,146566],{"class":237}," \"你的邮箱\"\n",[489,146568,146569],{},[331,146570,146571],{},"初始化仓库",[30,146573,146575],{"className":118271,"code":146574,"language":118273,"meta":35,"style":35},"git init\n",[26,146576,146577],{"__ignoreMap":35},[39,146578,146579,146581],{"class":41,"line":42},[39,146580,146541],{"class":49},[39,146582,146583],{"class":237}," init\n",[489,146585,146586],{},[331,146587,146588],{},"把本地文件放到暂存区",[30,146590,146592],{"className":118271,"code":146591,"language":118273,"meta":35,"style":35},"git add .\n",[26,146593,146594],{"__ignoreMap":35},[39,146595,146596,146598,146600],{"class":41,"line":42},[39,146597,146541],{"class":49},[39,146599,6289],{"class":237},[39,146601,29716],{"class":237},[489,146603,146604],{},[331,146605,146606],{},"把本地文件放到本地仓库里面",[30,146608,146610],{"className":118271,"code":146609,"language":118273,"meta":35,"style":35},"git commit -m \"first commit\"\n",[26,146611,146612],{"__ignoreMap":35},[39,146613,146614,146616,146619,146621],{"class":41,"line":42},[39,146615,146541],{"class":49},[39,146617,146618],{"class":237}," commit",[39,146620,101857],{"class":74},[39,146622,146623],{"class":237}," \"first commit\"\n",[489,146625,146626],{},[331,146627,146628],{},"链接远程仓库",[30,146630,146632],{"className":118271,"code":146631,"language":118273,"meta":35,"style":35},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[26,146633,146634],{"__ignoreMap":35},[39,146635,146636,146638,146641,146643,146646],{"class":41,"line":42},[39,146637,146541],{"class":49},[39,146639,146640],{"class":237}," remote",[39,146642,6289],{"class":237},[39,146644,146645],{"class":237}," origin",[39,146647,146648],{"class":237}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[489,146650,146651],{},[331,146652,146653],{},"把本地仓库的文件推送到远程仓库 push",[30,146655,146657],{"className":118271,"code":146656,"language":118273,"meta":35,"style":35},"git push -u origin master\n",[26,146658,146659],{"__ignoreMap":35},[39,146660,146661,146663,146665,146667,146669],{"class":41,"line":42},[39,146662,146541],{"class":49},[39,146664,29991],{"class":237},[39,146666,29265],{"class":74},[39,146668,146645],{"class":237},[39,146670,146671],{"class":237}," master\n",[2585,146673],{"style":127383,"src":146674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146676,146677],{},"上方方法暂未实现，后边学完git后在整",[19,146679,146680],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[2585,146682],{"style":127383,"src":146683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146685,146687],{"id":146686},"_222-新型相对单位","22.2 新型相对单位",[2585,146689],{"style":127383,"src":146690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[2585,146692],{"style":127383,"src":146693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146695,146696],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146698,146699],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[2585,146701],{"style":127383,"src":146702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146704,146705],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1192,146707,24932],{},{"title":35,"searchDepth":92,"depth":92,"links":146709},[146710,146711],{"id":146499,"depth":92,"text":146500},{"id":146686,"depth":92,"text":146687},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146491,"description":24350},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146718,"title":146719,"body":146720,"description":146724,"extension":1203,"meta":146725,"navigation":121,"path":146726,"seo":146727,"stem":146728,"__hash__":146729},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146721,"toc":146722},[],{"title":35,"searchDepth":92,"depth":92,"links":146723},[],"自己正经开始学编程的第一门语言！",{"category":93814},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146719,"description":146724},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146731,"title":146732,"body":146733,"description":24350,"extension":1203,"meta":147880,"navigation":121,"path":147881,"seo":147882,"stem":147883,"__hash__":147884},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146734,"toc":147856},[146735,146738,146742,146745,146748,146773,146776,146782,146786,146789,146816,146819,146859,146862,146874,146877,146883,146887,146891,146918,146935,146942,146946,146949,146975,146978,146982,146985,147025,147028,147045,147051,147055,147060,147104,147107,147125,147128,147196,147200,147207,147210,147225,147228,147237,147240,147251,147254,147263,147266,147283,147286,147301,147305,147309,147312,147314,147334,147338,147341,147344,147355,147358,147364,147368,147374,147401,147404,147416,147419,147430,147433,147439,147443,147449,147499,147502,147544,147547,147580,147583,147617,147621,147624,147644,147647,147683,147686,147699,147703,147707,147713,147716,147729,147733,147736,147742,147745,147749,147752,147755,147804,147808,147824,147830,147837,147843,147853],[10,146736,146732],{"id":146737},"_1-python环境与第一个程序",[14,146739,146741],{"id":146740},"_11-什么是python","1.1 什么是Python",[19,146743,146744],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,146746,146747],{},"理解 Python 时抓住三个关键词：",[328,146749,146750,146753,146756],{},[331,146751,146752],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[331,146754,146755],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[331,146757,146758,146759,1478,146762,1478,146765,1478,146768,1478,146770,29360],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[26,146760,146761],{},"os",[26,146763,146764],{},"sys",[26,146766,146767],{},"json",[26,146769,58835],{},[26,146771,146772],{},"datetime",[19,146774,146775],{},"Python 程序的运行链路：",[30,146777,146780],{"className":146778,"code":146779,"language":6267,"meta":35},[6265],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[26,146781,146779],{"__ignoreMap":35},[14,146783,146785],{"id":146784},"_12-python解释器","1.2 Python解释器",[19,146787,146788],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[30,146790,146792],{"className":24796,"code":146791,"language":24798,"meta":35,"style":35},"python --version\npython3 --version\npython\npython3\n",[26,146793,146794,146800,146806,146811],{"__ignoreMap":35},[39,146795,146796,146798],{"class":41,"line":42},[39,146797,31355],{"class":49},[39,146799,27268],{"class":74},[39,146801,146802,146804],{"class":41,"line":92},[39,146803,101854],{"class":49},[39,146805,27268],{"class":74},[39,146807,146808],{"class":41,"line":112},[39,146809,146810],{"class":49},"python\n",[39,146812,146813],{"class":41,"line":118},[39,146814,146815],{"class":49},"python3\n",[19,146817,146818],{},"进入交互模式后，可以直接输入表达式：",[30,146820,146822],{"className":31353,"code":146821,"language":31355,"meta":35,"style":35},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[26,146823,146824,146835,146840,146854],{"__ignoreMap":35},[39,146825,146826,146829,146831,146833],{"class":41,"line":42},[39,146827,146828],{"class":45},">>>",[39,146830,26093],{"class":74},[39,146832,46541],{"class":45},[39,146834,48698],{"class":74},[39,146836,146837],{"class":41,"line":92},[39,146838,146839],{"class":74},"3\n",[39,146841,146842,146844,146847,146849,146852],{"class":41,"line":112},[39,146843,146828],{"class":45},[39,146845,146846],{"class":74}," print",[39,146848,54],{"class":53},[39,146850,146851],{"class":237},"\"hello python\"",[39,146853,574],{"class":53},[39,146855,146856],{"class":41,"line":118},[39,146857,146858],{"class":53},"hello python\n",[19,146860,146861],{},"退出交互模式：",[30,146863,146865],{"className":31353,"code":146864,"language":31355,"meta":35,"style":35},"exit()\n",[26,146866,146867],{"__ignoreMap":35},[39,146868,146869,146872],{"class":41,"line":42},[39,146870,146871],{"class":74},"exit",[39,146873,537],{"class":53},[19,146875,146876],{},"或使用快捷键：",[30,146878,146881],{"className":146879,"code":146880,"language":6267,"meta":35},[6265],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[26,146882,146880],{"__ignoreMap":35},[14,146884,146886],{"id":146885},"_13-安装python","1.3 安装Python",[476,146888,146890],{"id":146889},"_131-windows安装","1.3.1 Windows安装",[328,146892,146893,146900,146903,146909,146915],{},[331,146894,146895,146896],{},"打开 Python 官网：",[922,146897,146898],{"href":146898,"rel":146899},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24839],[331,146901,146902],{},"下载 Windows Installer。",[331,146904,146905,146906,29360],{},"安装时勾选 ",[26,146907,146908],{},"Add Python to PATH",[331,146910,146911,146912,29360],{},"点击 ",[26,146913,146914],{},"Install Now",[331,146916,146917],{},"安装完成后打开命令提示符验证：",[30,146919,146921],{"className":24796,"code":146920,"language":24798,"meta":35,"style":35},"python --version\npip --version\n",[26,146922,146923,146929],{"__ignoreMap":35},[39,146924,146925,146927],{"class":41,"line":42},[39,146926,31355],{"class":49},[39,146928,27268],{"class":74},[39,146930,146931,146933],{"class":41,"line":92},[39,146932,24805],{"class":49},[39,146934,27268],{"class":74},[19,146936,146937,146938,146941],{},"如果提示 ",[26,146939,146940],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[476,146943,146945],{"id":146944},"_132-macos安装","1.3.2 macOS安装",[19,146947,146948],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[30,146950,146952],{"className":24796,"code":146951,"language":24798,"meta":35,"style":35},"brew install python\npython3 --version\npip3 --version\n",[26,146953,146954,146963,146969],{"__ignoreMap":35},[39,146955,146956,146959,146961],{"class":41,"line":42},[39,146957,146958],{"class":49},"brew",[39,146960,24808],{"class":237},[39,146962,125293],{"class":237},[39,146964,146965,146967],{"class":41,"line":92},[39,146966,101854],{"class":49},[39,146968,27268],{"class":74},[39,146970,146971,146973],{"class":41,"line":112},[39,146972,120675],{"class":49},[39,146974,27268],{"class":74},[19,146976,146977],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[476,146979,146981],{"id":146980},"_133-linux安装","1.3.3 Linux安装",[19,146983,146984],{},"Ubuntu\u002FDebian：",[30,146986,146988],{"className":24796,"code":146987,"language":24798,"meta":35,"style":35},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[26,146989,146990,146998,147013,147019],{"__ignoreMap":35},[39,146991,146992,146994,146996],{"class":41,"line":42},[39,146993,25551],{"class":49},[39,146995,118292],{"class":237},[39,146997,27217],{"class":237},[39,146999,147000,147002,147004,147006,147008,147010],{"class":41,"line":92},[39,147001,25551],{"class":49},[39,147003,118292],{"class":237},[39,147005,24808],{"class":237},[39,147007,105378],{"class":237},[39,147009,101773],{"class":237},[39,147011,147012],{"class":237}," python3-venv\n",[39,147014,147015,147017],{"class":41,"line":112},[39,147016,101854],{"class":49},[39,147018,27268],{"class":74},[39,147020,147021,147023],{"class":41,"line":118},[39,147022,120675],{"class":49},[39,147024,27268],{"class":74},[19,147026,147027],{},"Fedora：",[30,147029,147031],{"className":24796,"code":147030,"language":24798,"meta":35,"style":35},"sudo dnf install python3 python3-pip\n",[26,147032,147033],{"__ignoreMap":35},[39,147034,147035,147037,147039,147041,147043],{"class":41,"line":42},[39,147036,25551],{"class":49},[39,147038,27290],{"class":237},[39,147040,24808],{"class":237},[39,147042,105378],{"class":237},[39,147044,120740],{"class":237},[19,147046,147047,147048,147050],{},"Linux 上通常使用 ",[26,147049,101854],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147052,147054],{"id":147053},"_14-pip包管理器","1.4 pip包管理器",[19,147056,147057,147059],{},[26,147058,24805],{}," 用来安装第三方库。",[30,147061,147063],{"className":24796,"code":147062,"language":24798,"meta":35,"style":35},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[26,147064,147065,147074,147083,147091,147097],{"__ignoreMap":35},[39,147066,147067,147069,147071],{"class":41,"line":42},[39,147068,24805],{"class":49},[39,147070,24808],{"class":237},[39,147072,147073],{"class":237}," requests\n",[39,147075,147076,147078,147081],{"class":41,"line":92},[39,147077,24805],{"class":49},[39,147079,147080],{"class":237}," uninstall",[39,147082,147073],{"class":237},[39,147084,147085,147087,147089],{"class":41,"line":112},[39,147086,24805],{"class":49},[39,147088,118549],{"class":237},[39,147090,147073],{"class":237},[39,147092,147093,147095],{"class":41,"line":118},[39,147094,24805],{"class":49},[39,147096,119930],{"class":237},[39,147098,147099,147101],{"class":41,"line":125},[39,147100,24805],{"class":49},[39,147102,147103],{"class":237}," freeze\n",[19,147105,147106],{},"国内网络较慢时可以临时使用镜像：",[30,147108,147110],{"className":24796,"code":147109,"language":24798,"meta":35,"style":35},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[26,147111,147112],{"__ignoreMap":35},[39,147113,147114,147116,147118,147121,147123],{"class":41,"line":42},[39,147115,24805],{"class":49},[39,147117,24808],{"class":237},[39,147119,147120],{"class":237}," requests",[39,147122,27405],{"class":74},[39,147124,120703],{"class":237},[19,147126,147127],{},"常见第三方库：",[1404,147129,147130,147139],{},[1407,147131,147132],{},[1410,147133,147134,147137],{},[1413,147135,147136],{},"库",[1413,147138,103671],{},[1450,147140,147141,147149,147156,147164,147172,147180,147188],{},[1410,147142,147143,147146],{},[1455,147144,147145],{},"requests",[1455,147147,147148],{},"网络请求",[1410,147150,147151,147153],{},[1455,147152,101601],{},[1455,147154,147155],{},"数值计算",[1410,147157,147158,147161],{},[1455,147159,147160],{},"pandas",[1455,147162,147163],{},"表格数据处理",[1410,147165,147166,147169],{},[1455,147167,147168],{},"matplotlib",[1455,147170,147171],{},"绘图",[1410,147173,147174,147177],{},[1455,147175,147176],{},"pyecharts",[1455,147178,147179],{},"ECharts 图表",[1410,147181,147182,147185],{},[1455,147183,147184],{},"flask",[1455,147186,147187],{},"Web 后端",[1410,147189,147190,147193],{},[1455,147191,147192],{},"pytest",[1455,147194,147195],{},"自动化测试",[14,147197,147199],{"id":147198},"_15-虚拟环境","1.5 虚拟环境",[19,147201,147202,147203,147206],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[26,147204,147205],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147208,147209],{},"创建虚拟环境：",[30,147211,147213],{"className":24796,"code":147212,"language":24798,"meta":35,"style":35},"python -m venv .venv\n",[26,147214,147215],{"__ignoreMap":35},[39,147216,147217,147219,147221,147223],{"class":41,"line":42},[39,147218,31355],{"class":49},[39,147220,101857],{"class":74},[39,147222,101860],{"class":237},[39,147224,101863],{"class":237},[19,147226,147227],{},"Windows 激活：",[30,147229,147231],{"className":24796,"code":147230,"language":24798,"meta":35,"style":35},".venv\\Scripts\\activate\n",[26,147232,147233],{"__ignoreMap":35},[39,147234,147235],{"class":41,"line":42},[39,147236,147230],{"class":49},[19,147238,147239],{},"macOS\u002FLinux 激活：",[30,147241,147243],{"className":24796,"code":147242,"language":24798,"meta":35,"style":35},"source .venv\u002Fbin\u002Factivate\n",[26,147244,147245],{"__ignoreMap":35},[39,147246,147247,147249],{"class":41,"line":42},[39,147248,101868],{"class":74},[39,147250,101871],{"class":237},[19,147252,147253],{},"退出虚拟环境：",[30,147255,147257],{"className":24796,"code":147256,"language":24798,"meta":35,"style":35},"deactivate\n",[26,147258,147259],{"__ignoreMap":35},[39,147260,147261],{"class":41,"line":42},[39,147262,147256],{"class":49},[19,147264,147265],{},"保存依赖：",[30,147267,147269],{"className":24796,"code":147268,"language":24798,"meta":35,"style":35},"pip freeze > requirements.txt\n",[26,147270,147271],{"__ignoreMap":35},[39,147272,147273,147275,147278,147280],{"class":41,"line":42},[39,147274,24805],{"class":49},[39,147276,147277],{"class":237}," freeze",[39,147279,27197],{"class":45},[39,147281,147282],{"class":237}," requirements.txt\n",[19,147284,147285],{},"安装依赖：",[30,147287,147289],{"className":24796,"code":147288,"language":24798,"meta":35,"style":35},"pip install -r requirements.txt\n",[26,147290,147291],{"__ignoreMap":35},[39,147292,147293,147295,147297,147299],{"class":41,"line":42},[39,147294,24805],{"class":49},[39,147296,24808],{"class":237},[39,147298,120614],{"class":74},[39,147300,147282],{"class":237},[14,147302,147304],{"id":147303},"_16-开发工具","1.6 开发工具",[476,147306,147308],{"id":147307},"_161-pycharm","1.6.1 PyCharm",[19,147310,147311],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147313,123037],{},[328,147315,147316,147319,147322,147328,147331],{},[331,147317,147318],{},"New Project：创建项目。",[331,147320,147321],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[331,147323,147324,147325,126958],{},"New Python File：创建 ",[26,147326,147327],{},".py",[331,147329,147330],{},"Run：运行当前文件。",[331,147332,147333],{},"Debug：断点调试。",[476,147335,147337],{"id":147336},"_162-vs-code","1.6.2 VS Code",[19,147339,147340],{},"VS Code 轻量，适合后续多语言开发。",[19,147342,147343],{},"建议安装插件：",[328,147345,147346,147349,147352],{},[331,147347,147348],{},"Python。",[331,147350,147351],{},"Pylance。",[331,147353,147354],{},"Jupyter。",[19,147356,147357],{},"选择解释器：",[30,147359,147362],{"className":147360,"code":147361,"language":6267,"meta":35},[6265],"Ctrl + Shift + P -> Python: Select Interpreter\n",[26,147363,147361],{"__ignoreMap":35},[14,147365,147367],{"id":147366},"_17-第一个python程序","1.7 第一个Python程序",[19,147369,147370,147371,25593],{},"创建文件 ",[26,147372,147373],{},"hello.py",[30,147375,147377],{"className":31353,"code":147376,"language":31355,"meta":35,"style":35},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[26,147378,147379,147390],{"__ignoreMap":35},[39,147380,147381,147383,147385,147388],{"class":41,"line":42},[39,147382,31390],{"class":74},[39,147384,54],{"class":53},[39,147386,147387],{"class":237},"\"Hello World\"",[39,147389,574],{"class":53},[39,147391,147392,147394,147396,147399],{"class":41,"line":92},[39,147393,31390],{"class":74},[39,147395,54],{"class":53},[39,147397,147398],{"class":237},"\"你好，Python\"",[39,147400,574],{"class":53},[19,147402,147403],{},"在终端运行：",[30,147405,147407],{"className":24796,"code":147406,"language":24798,"meta":35,"style":35},"python hello.py\n",[26,147408,147409],{"__ignoreMap":35},[39,147410,147411,147413],{"class":41,"line":42},[39,147412,31355],{"class":49},[39,147414,147415],{"class":237}," hello.py\n",[19,147417,147418],{},"或：",[30,147420,147422],{"className":24796,"code":147421,"language":24798,"meta":35,"style":35},"python3 hello.py\n",[26,147423,147424],{"__ignoreMap":35},[39,147425,147426,147428],{"class":41,"line":42},[39,147427,101854],{"class":49},[39,147429,147415],{"class":237},[19,147431,147432],{},"输出：",[30,147434,147437],{"className":147435,"code":147436,"language":6267,"meta":35},[6265],"Hello World\n你好，Python\n",[26,147438,147436],{"__ignoreMap":35},[14,147440,147442],{"id":147441},"_18-print函数","1.8 print函数",[19,147444,147445,147448],{},[26,147446,147447],{},"print()"," 用来输出内容。",[30,147450,147452],{"className":31353,"code":147451,"language":31355,"meta":35,"style":35},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[26,147453,147454,147464,147474,147484],{"__ignoreMap":35},[39,147455,147456,147458,147460,147462],{"class":41,"line":42},[39,147457,31390],{"class":74},[39,147459,54],{"class":53},[39,147461,6921],{"class":237},[39,147463,574],{"class":53},[39,147465,147466,147468,147470,147472],{"class":41,"line":92},[39,147467,31390],{"class":74},[39,147469,54],{"class":53},[39,147471,278],{"class":74},[39,147473,574],{"class":53},[39,147475,147476,147478,147480,147482],{"class":41,"line":112},[39,147477,31390],{"class":74},[39,147479,54],{"class":53},[39,147481,803],{"class":74},[39,147483,574],{"class":53},[39,147485,147486,147488,147490,147493,147495,147497],{"class":41,"line":118},[39,147487,31390],{"class":74},[39,147489,54],{"class":53},[39,147491,147492],{"class":237},"\"年龄:\"",[39,147494,63],{"class":53},[39,147496,1911],{"class":74},[39,147498,574],{"class":53},[19,147500,147501],{},"多个内容用逗号隔开，默认中间加空格：",[30,147503,147505],{"className":31353,"code":147504,"language":31355,"meta":35,"style":35},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[26,147506,147507,147517,147527],{"__ignoreMap":35},[39,147508,147509,147512,147514],{"class":41,"line":42},[39,147510,147511],{"class":53},"name ",[39,147513,1117],{"class":45},[39,147515,147516],{"class":237}," \"张三\"\n",[39,147518,147519,147522,147524],{"class":41,"line":92},[39,147520,147521],{"class":53},"age ",[39,147523,1117],{"class":45},[39,147525,147526],{"class":74}," 18\n",[39,147528,147529,147531,147533,147536,147539,147541],{"class":41,"line":112},[39,147530,31390],{"class":74},[39,147532,54],{"class":53},[39,147534,147535],{"class":237},"\"姓名:\"",[39,147537,147538],{"class":53},", name, ",[39,147540,147492],{"class":237},[39,147542,147543],{"class":53},", age)\n",[19,147545,147546],{},"修改分隔符：",[30,147548,147550],{"className":31353,"code":147549,"language":31355,"meta":35,"style":35},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[26,147551,147552],{"__ignoreMap":35},[39,147553,147554,147556,147558,147561,147563,147565,147567,147569,147571,147574,147576,147578],{"class":41,"line":42},[39,147555,31390],{"class":74},[39,147557,54],{"class":53},[39,147559,147560],{"class":237},"\"2024\"",[39,147562,63],{"class":53},[39,147564,55291],{"class":237},[39,147566,63],{"class":53},[39,147568,55291],{"class":237},[39,147570,63],{"class":53},[39,147572,147573],{"class":59},"sep",[39,147575,1117],{"class":45},[39,147577,33458],{"class":237},[39,147579,574],{"class":53},[19,147581,147582],{},"修改结尾符：",[30,147584,147586],{"className":31353,"code":147585,"language":31355,"meta":35,"style":35},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[26,147587,147588,147606],{"__ignoreMap":35},[39,147589,147590,147592,147594,147596,147598,147600,147602,147604],{"class":41,"line":42},[39,147591,31390],{"class":74},[39,147593,54],{"class":53},[39,147595,6921],{"class":237},[39,147597,63],{"class":53},[39,147599,46776],{"class":59},[39,147601,1117],{"class":45},[39,147603,5440],{"class":237},[39,147605,574],{"class":53},[39,147607,147608,147610,147612,147615],{"class":41,"line":92},[39,147609,31390],{"class":74},[39,147611,54],{"class":53},[39,147613,147614],{"class":237},"\"python\"",[39,147616,574],{"class":53},[14,147618,147620],{"id":147619},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147622,147623],{},"交互运行适合临时验证：",[30,147625,147627],{"className":31353,"code":147626,"language":31355,"meta":35,"style":35},">>> 10 * 3\n30\n",[26,147628,147629,147639],{"__ignoreMap":35},[39,147630,147631,147633,147635,147637],{"class":41,"line":42},[39,147632,146828],{"class":45},[39,147634,75],{"class":74},[39,147636,7594],{"class":45},[39,147638,121011],{"class":74},[39,147640,147641],{"class":41,"line":92},[39,147642,147643],{"class":74},"30\n",[19,147645,147646],{},"脚本运行适合保存程序：",[30,147648,147650],{"className":31353,"code":147649,"language":31355,"meta":35,"style":35},"price = 8\ncount = 5\nprint(price * count)\n",[26,147651,147652,147662,147671],{"__ignoreMap":35},[39,147653,147654,147657,147659],{"class":41,"line":42},[39,147655,147656],{"class":53},"price ",[39,147658,1117],{"class":45},[39,147660,147661],{"class":74}," 8\n",[39,147663,147664,147667,147669],{"class":41,"line":92},[39,147665,147666],{"class":53},"count ",[39,147668,1117],{"class":45},[39,147670,55402],{"class":74},[39,147672,147673,147675,147678,147680],{"class":41,"line":112},[39,147674,31390],{"class":74},[39,147676,147677],{"class":53},"(price ",[39,147679,1717],{"class":45},[39,147681,147682],{"class":53}," count)\n",[19,147684,147685],{},"实际学习中推荐：",[328,147687,147688,147691,147696],{},[331,147689,147690],{},"临时试一个语法，用交互模式。",[331,147692,147693,147694,126958],{},"写完整练习，用 ",[26,147695,147327],{},[331,147697,147698],{},"写项目，用独立目录和虚拟环境。",[14,147700,147702],{"id":147701},"_110-常见错误","1.10 常见错误",[476,147704,147706],{"id":147705},"_1101-命令找不到","1.10.1 命令找不到",[30,147708,147711],{"className":147709,"code":147710,"language":6267,"meta":35},[6265],"python: command not found\n",[26,147712,147710],{"__ignoreMap":35},[19,147714,147715],{},"原因：",[328,147717,147718,147721,147724],{},[331,147719,147720],{},"没安装 Python。",[331,147722,147723],{},"PATH 没配置。",[331,147725,147726,147727,29360],{},"Linux\u002FmacOS 应该使用 ",[26,147728,101854],{},[476,147730,147732],{"id":147731},"_1102-文件名冲突","1.10.2 文件名冲突",[19,147734,147735],{},"不要把文件命名为：",[30,147737,147740],{"className":147738,"code":147739,"language":6267,"meta":35},[6265],"random.py\njson.py\ntime.py\nrequests.py\n",[26,147741,147739],{"__ignoreMap":35},[19,147743,147744],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[476,147746,147748],{"id":147747},"_1103-中文乱码","1.10.3 中文乱码",[19,147750,147751],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,147753,147754],{},"如果读写文件出现乱码，要明确指定编码：",[30,147756,147758],{"className":31353,"code":147757,"language":31355,"meta":35,"style":35},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[26,147759,147760,147794],{"__ignoreMap":35},[39,147761,147762,147764,147767,147769,147772,147774,147777,147779,147782,147784,147787,147789,147791],{"class":41,"line":42},[39,147763,108808],{"class":45},[39,147765,147766],{"class":74}," open",[39,147768,54],{"class":53},[39,147770,147771],{"class":237},"\"data.txt\"",[39,147773,63],{"class":53},[39,147775,147776],{"class":237},"\"r\"",[39,147778,63],{"class":53},[39,147780,147781],{"class":59},"encoding",[39,147783,1117],{"class":45},[39,147785,147786],{"class":237},"\"utf-8\"",[39,147788,255],{"class":53},[39,147790,32358],{"class":45},[39,147792,147793],{"class":53}," f:\n",[39,147795,147796,147799,147801],{"class":41,"line":92},[39,147797,147798],{"class":53},"    content ",[39,147800,1117],{"class":45},[39,147802,147803],{"class":53}," f.read()\n",[14,147805,147807],{"id":147806},"_111-本章练习","1.11 本章练习",[328,147809,147810,147813,147819],{},[331,147811,147812],{},"安装 Python，并在终端输出版本号。",[331,147814,147815,147816,147818],{},"新建 ",[26,147817,147373],{},"，输出自己的姓名、年龄、学习目标。",[331,147820,105341,147821,147823],{},[26,147822,147447],{}," 输出下面格式：",[30,147825,147828],{"className":147826,"code":147827,"language":6267,"meta":35},[6265],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[26,147829,147827],{"__ignoreMap":35},[328,147831,147832],{"start":118},[331,147833,105341,147834,147836],{},[26,147835,147573],{}," 输出日期：",[30,147838,147841],{"className":147839,"code":147840,"language":6267,"meta":35},[6265],"2024-10-10\n",[26,147842,147840],{"__ignoreMap":35},[328,147844,147845],{"start":125},[331,147846,105341,147847,147849,147850,147852],{},[26,147848,46776],{}," 让两次 ",[26,147851,147447],{}," 输出在同一行。",[1192,147854,147855],{},"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":92,"depth":92,"links":147857},[147858,147859,147860,147865,147866,147867,147871,147872,147873,147874,147879],{"id":146740,"depth":92,"text":146741},{"id":146784,"depth":92,"text":146785},{"id":146885,"depth":92,"text":146886,"children":147861},[147862,147863,147864],{"id":146889,"depth":112,"text":146890},{"id":146944,"depth":112,"text":146945},{"id":146980,"depth":112,"text":146981},{"id":147053,"depth":92,"text":147054},{"id":147198,"depth":92,"text":147199},{"id":147303,"depth":92,"text":147304,"children":147868},[147869,147870],{"id":147307,"depth":112,"text":147308},{"id":147336,"depth":112,"text":147337},{"id":147366,"depth":92,"text":147367},{"id":147441,"depth":92,"text":147442},{"id":147619,"depth":92,"text":147620},{"id":147701,"depth":92,"text":147702,"children":147875},[147876,147877,147878],{"id":147705,"depth":112,"text":147706},{"id":147731,"depth":112,"text":147732},{"id":147747,"depth":112,"text":147748},{"id":147806,"depth":92,"text":147807},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146732,"description":24350},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147886,"title":147887,"body":147888,"description":24350,"extension":1203,"meta":150292,"navigation":121,"path":150293,"seo":150294,"stem":150295,"__hash__":150296},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147889,"toc":150277},[147890,147893,147897,147900,147903,147920,147923,147965,147968,147972,147975,147978,148015,148018,148052,148055,148147,148151,148165,148168,148195,148198,148202,148305,148312,148315,148332,148336,148343,148532,148535,148608,148612,148615,148699,148702,148734,148738,148942,148945,148949,148955,149057,149060,149316,149320,149323,149326,149340,149342,149528,149532,149894,149900,149904,149907,150031,150034,150213,150216,150220,150253,150257,150274],[10,147891,147887],{"id":147892},"_10-json与pyecharts折线图",[14,147894,147896],{"id":147895},"_101-数据可视化","10.1 数据可视化",[19,147898,147899],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147901,147902],{},"常见图表：",[328,147904,147905,147908,147911,147914,147917],{},[331,147906,147907],{},"折线图：看趋势。",[331,147909,147910],{},"柱状图：看分类对比。",[331,147912,147913],{},"饼图：看占比。",[331,147915,147916],{},"地图：看地域分布。",[331,147918,147919],{},"散点图：看两个变量之间的关系。",[19,147921,147922],{},"Python 可视化常用库：",[1404,147924,147925,147933],{},[1407,147926,147927],{},[1410,147928,147929,147931],{},[1413,147930,147136],{},[1413,147932,24714],{},[1450,147934,147935,147942,147950,147957],{},[1410,147936,147937,147939],{},[1455,147938,147168],{},[1455,147940,147941],{},"基础、经典、可定制",[1410,147943,147944,147947],{},[1455,147945,147946],{},"seaborn",[1455,147948,147949],{},"统计图表更美观",[1410,147951,147952,147954],{},[1455,147953,147176],{},[1455,147955,147956],{},"生成交互式网页图表",[1410,147958,147959,147962],{},[1455,147960,147961],{},"plotly",[1455,147963,147964],{},"交互图表能力强",[19,147966,147967],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147969,147971],{"id":147970},"_102-json回顾","10.2 JSON回顾",[19,147973,147974],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147976,147977],{},"Python 字典：",[30,147979,147981],{"className":31353,"code":147980,"language":31355,"meta":35,"style":35},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[26,147982,147983,147991,148002,148011],{"__ignoreMap":35},[39,147984,147985,147987,147989],{"class":41,"line":42},[39,147986,102633],{"class":53},[39,147988,1117],{"class":45},[39,147990,16545],{"class":53},[39,147992,147993,147996,147998,148000],{"class":41,"line":92},[39,147994,147995],{"class":237},"    \"name\"",[39,147997,52412],{"class":53},[39,147999,70244],{"class":237},[39,148001,32441],{"class":53},[39,148003,148004,148007,148009],{"class":41,"line":112},[39,148005,148006],{"class":237},"    \"value\"",[39,148008,52412],{"class":53},[39,148010,98433],{"class":74},[39,148012,148013],{"class":41,"line":118},[39,148014,115],{"class":53},[19,148016,148017],{},"JSON 字符串：",[30,148019,148022],{"className":148020,"code":148021,"language":146767,"meta":35,"style":35},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[26,148023,148024,148028,148039,148048],{"__ignoreMap":35},[39,148025,148026],{"class":41,"line":42},[39,148027,542],{"class":53},[39,148029,148030,148033,148035,148037],{"class":41,"line":92},[39,148031,148032],{"class":74},"  \"name\"",[39,148034,52412],{"class":53},[39,148036,70244],{"class":237},[39,148038,32441],{"class":53},[39,148040,148041,148044,148046],{"class":41,"line":112},[39,148042,148043],{"class":74},"  \"value\"",[39,148045,52412],{"class":53},[39,148047,98433],{"class":74},[39,148049,148050],{"class":41,"line":118},[39,148051,115],{"class":53},[19,148053,148054],{},"Python 与 JSON 的转换：",[30,148056,148058],{"className":31353,"code":148057,"language":31355,"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",[26,148059,148060,148067,148071,148096,148100,148119,148126,148130,148140],{"__ignoreMap":35},[39,148061,148062,148064],{"class":41,"line":42},[39,148063,31367],{"class":45},[39,148065,148066],{"class":53}," json\n",[39,148068,148069],{"class":41,"line":92},[39,148070,122],{"emptyLinePlaceholder":121},[39,148072,148073,148075,148077,148079,148081,148083,148085,148087,148090,148092,148094],{"class":41,"line":112},[39,148074,102633],{"class":53},[39,148076,1117],{"class":45},[39,148078,5529],{"class":53},[39,148080,63654],{"class":237},[39,148082,52412],{"class":53},[39,148084,70244],{"class":237},[39,148086,63],{"class":53},[39,148088,148089],{"class":237},"\"value\"",[39,148091,52412],{"class":53},[39,148093,278],{"class":74},[39,148095,115],{"class":53},[39,148097,148098],{"class":41,"line":118},[39,148099,122],{"emptyLinePlaceholder":121},[39,148101,148102,148105,148107,148110,148113,148115,148117],{"class":41,"line":125},[39,148103,148104],{"class":53},"json_text ",[39,148106,1117],{"class":45},[39,148108,148109],{"class":53}," json.dumps(data, ",[39,148111,148112],{"class":59},"ensure_ascii",[39,148114,1117],{"class":45},[39,148116,34962],{"class":74},[39,148118,574],{"class":53},[39,148120,148121,148123],{"class":41,"line":132},[39,148122,31390],{"class":74},[39,148124,148125],{"class":53},"(json_text)\n",[39,148127,148128],{"class":41,"line":138},[39,148129,122],{"emptyLinePlaceholder":121},[39,148131,148132,148135,148137],{"class":41,"line":169},[39,148133,148134],{"class":53},"new_data ",[39,148136,1117],{"class":45},[39,148138,148139],{"class":53}," json.loads(json_text)\n",[39,148141,148142,148144],{"class":41,"line":190},[39,148143,31390],{"class":74},[39,148145,148146],{"class":53},"(new_data)\n",[14,148148,148150],{"id":148149},"_103-安装pyecharts","10.3 安装pyecharts",[30,148152,148154],{"className":24796,"code":148153,"language":24798,"meta":35,"style":35},"pip install pyecharts\n",[26,148155,148156],{"__ignoreMap":35},[39,148157,148158,148160,148162],{"class":41,"line":42},[39,148159,24805],{"class":49},[39,148161,24808],{"class":237},[39,148163,148164],{"class":237}," pyecharts\n",[19,148166,148167],{},"验证：",[30,148169,148171],{"className":31353,"code":148170,"language":31355,"meta":35,"style":35},"import pyecharts\n\nprint(pyecharts.__version__)\n",[26,148172,148173,148179,148183],{"__ignoreMap":35},[39,148174,148175,148177],{"class":41,"line":42},[39,148176,31367],{"class":45},[39,148178,148164],{"class":53},[39,148180,148181],{"class":41,"line":92},[39,148182,122],{"emptyLinePlaceholder":121},[39,148184,148185,148187,148190,148193],{"class":41,"line":112},[39,148186,31390],{"class":74},[39,148188,148189],{"class":53},"(pyecharts.",[39,148191,148192],{"class":74},"__version__",[39,148194,574],{"class":53},[19,148196,148197],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148199,148201],{"id":148200},"_104-第一个折线图","10.4 第一个折线图",[30,148203,148205],{"className":31353,"code":148204,"language":31355,"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",[26,148206,148207,148219,148223,148233,148263,148295],{"__ignoreMap":35},[39,148208,148209,148211,148214,148216],{"class":41,"line":42},[39,148210,31712],{"class":45},[39,148212,148213],{"class":53}," pyecharts.charts ",[39,148215,31367],{"class":45},[39,148217,148218],{"class":53}," Line\n",[39,148220,148221],{"class":41,"line":92},[39,148222,122],{"emptyLinePlaceholder":121},[39,148224,148225,148228,148230],{"class":41,"line":112},[39,148226,148227],{"class":53},"line ",[39,148229,1117],{"class":45},[39,148231,148232],{"class":53}," Line()\n",[39,148234,148235,148238,148241,148243,148246,148248,148251,148253,148256,148258,148261],{"class":41,"line":118},[39,148236,148237],{"class":53},"line.add_xaxis([",[39,148239,148240],{"class":237},"\"周一\"",[39,148242,63],{"class":53},[39,148244,148245],{"class":237},"\"周二\"",[39,148247,63],{"class":53},[39,148249,148250],{"class":237},"\"周三\"",[39,148252,63],{"class":53},[39,148254,148255],{"class":237},"\"周四\"",[39,148257,63],{"class":53},[39,148259,148260],{"class":237},"\"周五\"",[39,148262,5738],{"class":53},[39,148264,148265,148268,148271,148273,148275,148277,148279,148281,148283,148285,148288,148290,148293],{"class":41,"line":125},[39,148266,148267],{"class":53},"line.add_yaxis(",[39,148269,148270],{"class":237},"\"销售额\"",[39,148272,78493],{"class":53},[39,148274,278],{"class":74},[39,148276,63],{"class":53},[39,148278,2077],{"class":74},[39,148280,63],{"class":53},[39,148282,2122],{"class":74},[39,148284,63],{"class":53},[39,148286,148287],{"class":74},"150",[39,148289,63],{"class":53},[39,148291,148292],{"class":74},"180",[39,148294,5738],{"class":53},[39,148296,148297,148300,148303],{"class":41,"line":132},[39,148298,148299],{"class":53},"line.render(",[39,148301,148302],{"class":237},"\"line.html\"",[39,148304,574],{"class":53},[19,148306,148307,148308,148311],{},"运行后会生成 ",[26,148309,148310],{},"line.html","，用浏览器打开即可看到图表。",[19,148313,148314],{},"核心步骤：",[328,148316,148317,148320,148323,148326,148329],{},[331,148318,148319],{},"导入图表类。",[331,148321,148322],{},"创建图表对象。",[331,148324,148325],{},"添加 x 轴数据。",[331,148327,148328],{},"添加 y 轴数据。",[331,148330,148331],{},"渲染为 HTML。",[14,148333,148335],{"id":148334},"_105-全局配置","10.5 全局配置",[19,148337,148338,148339,148342],{},"常用配置在 ",[26,148340,148341],{},"pyecharts.options"," 中。",[30,148344,148346],{"className":31353,"code":148345,"language":31355,"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",[26,148347,148348,148365,148375,148379,148387,148411,148439,148444,148463,148482,148500,148520,148524],{"__ignoreMap":35},[39,148349,148350,148352,148355,148357,148360,148362],{"class":41,"line":42},[39,148351,31712],{"class":45},[39,148353,148354],{"class":53}," pyecharts ",[39,148356,31367],{"class":45},[39,148358,148359],{"class":53}," options ",[39,148361,32358],{"class":45},[39,148363,148364],{"class":53}," opts\n",[39,148366,148367,148369,148371,148373],{"class":41,"line":92},[39,148368,31712],{"class":45},[39,148370,148213],{"class":53},[39,148372,31367],{"class":45},[39,148374,148218],{"class":53},[39,148376,148377],{"class":41,"line":112},[39,148378,122],{"emptyLinePlaceholder":121},[39,148380,148381,148383,148385],{"class":41,"line":118},[39,148382,148227],{"class":53},[39,148384,1117],{"class":45},[39,148386,148232],{"class":53},[39,148388,148389,148391,148393,148395,148397,148399,148401,148403,148405,148407,148409],{"class":41,"line":125},[39,148390,148237],{"class":53},[39,148392,148240],{"class":237},[39,148394,63],{"class":53},[39,148396,148245],{"class":237},[39,148398,63],{"class":53},[39,148400,148250],{"class":237},[39,148402,63],{"class":53},[39,148404,148255],{"class":237},[39,148406,63],{"class":53},[39,148408,148260],{"class":237},[39,148410,5738],{"class":53},[39,148412,148413,148415,148417,148419,148421,148423,148425,148427,148429,148431,148433,148435,148437],{"class":41,"line":132},[39,148414,148267],{"class":53},[39,148416,148270],{"class":237},[39,148418,78493],{"class":53},[39,148420,278],{"class":74},[39,148422,63],{"class":53},[39,148424,2077],{"class":74},[39,148426,63],{"class":53},[39,148428,2122],{"class":74},[39,148430,63],{"class":53},[39,148432,148287],{"class":74},[39,148434,63],{"class":53},[39,148436,148292],{"class":74},[39,148438,5738],{"class":53},[39,148440,148441],{"class":41,"line":138},[39,148442,148443],{"class":53},"line.set_global_opts(\n",[39,148445,148446,148449,148451,148454,148456,148458,148461],{"class":41,"line":169},[39,148447,148448],{"class":59},"    title_opts",[39,148450,1117],{"class":45},[39,148452,148453],{"class":53},"opts.TitleOpts(",[39,148455,52382],{"class":59},[39,148457,1117],{"class":45},[39,148459,148460],{"class":237},"\"一周销售额\"",[39,148462,39022],{"class":53},[39,148464,148465,148468,148470,148473,148475,148477,148480],{"class":41,"line":190},[39,148466,148467],{"class":59},"    xaxis_opts",[39,148469,1117],{"class":45},[39,148471,148472],{"class":53},"opts.AxisOpts(",[39,148474,80785],{"class":59},[39,148476,1117],{"class":45},[39,148478,148479],{"class":237},"\"日期\"",[39,148481,39022],{"class":53},[39,148483,148484,148487,148489,148491,148493,148495,148498],{"class":41,"line":202},[39,148485,148486],{"class":59},"    yaxis_opts",[39,148488,1117],{"class":45},[39,148490,148472],{"class":53},[39,148492,80785],{"class":59},[39,148494,1117],{"class":45},[39,148496,148497],{"class":237},"\"金额\"",[39,148499,39022],{"class":53},[39,148501,148502,148505,148507,148510,148513,148515,148518],{"class":41,"line":207},[39,148503,148504],{"class":59},"    tooltip_opts",[39,148506,1117],{"class":45},[39,148508,148509],{"class":53},"opts.TooltipOpts(",[39,148511,148512],{"class":59},"trigger",[39,148514,1117],{"class":45},[39,148516,148517],{"class":237},"\"axis\"",[39,148519,39022],{"class":53},[39,148521,148522],{"class":41,"line":212},[39,148523,574],{"class":53},[39,148525,148526,148528,148530],{"class":41,"line":223},[39,148527,148299],{"class":53},[39,148529,148302],{"class":237},[39,148531,574],{"class":53},[19,148533,148534],{},"常见全局配置：",[1404,148536,148537,148546],{},[1407,148538,148539],{},[1410,148540,148541,148544],{},[1413,148542,148543],{},"配置",[1413,148545,103671],{},[1450,148547,148548,148558,148568,148578,148588,148598],{},[1410,148549,148550,148555],{},[1455,148551,148552],{},[26,148553,148554],{},"TitleOpts",[1455,148556,148557],{},"标题",[1410,148559,148560,148565],{},[1455,148561,148562],{},[26,148563,148564],{},"LegendOpts",[1455,148566,148567],{},"图例",[1410,148569,148570,148575],{},[1455,148571,148572],{},[26,148573,148574],{},"TooltipOpts",[1455,148576,148577],{},"提示框",[1410,148579,148580,148585],{},[1455,148581,148582],{},[26,148583,148584],{},"AxisOpts",[1455,148586,148587],{},"坐标轴",[1410,148589,148590,148595],{},[1455,148591,148592],{},[26,148593,148594],{},"VisualMapOpts",[1455,148596,148597],{},"视觉映射",[1410,148599,148600,148605],{},[1455,148601,148602],{},[26,148603,148604],{},"DataZoomOpts",[1455,148606,148607],{},"区域缩放",[14,148609,148611],{"id":148610},"_106-系列配置","10.6 系列配置",[19,148613,148614],{},"系列配置作用于某一组数据。",[30,148616,148618],{"className":31353,"code":148617,"language":31355,"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",[26,148619,148620,148625,148636,148665,148676,148695],{"__ignoreMap":35},[39,148621,148622],{"class":41,"line":42},[39,148623,148624],{"class":53},"line.add_yaxis(\n",[39,148626,148627,148630,148632,148634],{"class":41,"line":92},[39,148628,148629],{"class":59},"    series_name",[39,148631,1117],{"class":45},[39,148633,148270],{"class":237},[39,148635,32441],{"class":53},[39,148637,148638,148641,148643,148645,148647,148649,148651,148653,148655,148657,148659,148661,148663],{"class":41,"line":112},[39,148639,148640],{"class":59},"    y_axis",[39,148642,1117],{"class":45},[39,148644,2150],{"class":53},[39,148646,278],{"class":74},[39,148648,63],{"class":53},[39,148650,2077],{"class":74},[39,148652,63],{"class":53},[39,148654,2122],{"class":74},[39,148656,63],{"class":53},[39,148658,148287],{"class":74},[39,148660,63],{"class":53},[39,148662,148292],{"class":74},[39,148664,88811],{"class":53},[39,148666,148667,148670,148672,148674],{"class":41,"line":118},[39,148668,148669],{"class":59},"    is_smooth",[39,148671,1117],{"class":45},[39,148673,32451],{"class":74},[39,148675,32441],{"class":53},[39,148677,148678,148681,148683,148686,148689,148691,148693],{"class":41,"line":125},[39,148679,148680],{"class":59},"    label_opts",[39,148682,1117],{"class":45},[39,148684,148685],{"class":53},"opts.LabelOpts(",[39,148687,148688],{"class":59},"is_show",[39,148690,1117],{"class":45},[39,148692,32451],{"class":74},[39,148694,39022],{"class":53},[39,148696,148697],{"class":41,"line":132},[39,148698,574],{"class":53},[19,148700,148701],{},"常用参数：",[328,148703,148704,148710,148716,148722,148728],{},[331,148705,148706,148709],{},[26,148707,148708],{},"series_name","：系列名称。",[331,148711,148712,148715],{},[26,148713,148714],{},"y_axis","：y 轴数据。",[331,148717,148718,148721],{},[26,148719,148720],{},"is_smooth","：是否平滑曲线。",[331,148723,148724,148727],{},[26,148725,148726],{},"label_opts","：标签配置。",[331,148729,148730,148733],{},[26,148731,148732],{},"symbol_size","：标记点大小。",[14,148735,148737],{"id":148736},"_107-多条折线","10.7 多条折线",[30,148739,148741],{"className":31353,"code":148740,"language":31355,"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",[26,148742,148743,148757,148767,148771,148800,148804,148812,148817,148855,148892,148896,148913,148929,148933],{"__ignoreMap":35},[39,148744,148745,148747,148749,148751,148753,148755],{"class":41,"line":42},[39,148746,31712],{"class":45},[39,148748,148354],{"class":53},[39,148750,31367],{"class":45},[39,148752,148359],{"class":53},[39,148754,32358],{"class":45},[39,148756,148364],{"class":53},[39,148758,148759,148761,148763,148765],{"class":41,"line":92},[39,148760,31712],{"class":45},[39,148762,148213],{"class":53},[39,148764,31367],{"class":45},[39,148766,148218],{"class":53},[39,148768,148769],{"class":41,"line":112},[39,148770,122],{"emptyLinePlaceholder":121},[39,148772,148773,148776,148778,148780,148782,148784,148786,148788,148790,148792,148794,148796,148798],{"class":41,"line":118},[39,148774,148775],{"class":53},"dates ",[39,148777,1117],{"class":45},[39,148779,53201],{"class":53},[39,148781,148240],{"class":237},[39,148783,63],{"class":53},[39,148785,148245],{"class":237},[39,148787,63],{"class":53},[39,148789,148250],{"class":237},[39,148791,63],{"class":53},[39,148793,148255],{"class":237},[39,148795,63],{"class":53},[39,148797,148260],{"class":237},[39,148799,34221],{"class":53},[39,148801,148802],{"class":41,"line":125},[39,148803,122],{"emptyLinePlaceholder":121},[39,148805,148806,148808,148810],{"class":41,"line":132},[39,148807,148227],{"class":53},[39,148809,1117],{"class":45},[39,148811,148232],{"class":53},[39,148813,148814],{"class":41,"line":138},[39,148815,148816],{"class":53},"line.add_xaxis(dates)\n",[39,148818,148819,148821,148824,148826,148828,148830,148833,148835,148837,148839,148841,148843,148845,148847,148849,148851,148853],{"class":41,"line":169},[39,148820,148267],{"class":53},[39,148822,148823],{"class":237},"\"线上销售\"",[39,148825,78493],{"class":53},[39,148827,278],{"class":74},[39,148829,63],{"class":53},[39,148831,148832],{"class":74},"130",[39,148834,63],{"class":53},[39,148836,2077],{"class":74},[39,148838,63],{"class":53},[39,148840,22021],{"class":74},[39,148842,63],{"class":53},[39,148844,2832],{"class":74},[39,148846,113177],{"class":53},[39,148848,148720],{"class":59},[39,148850,1117],{"class":45},[39,148852,32451],{"class":74},[39,148854,574],{"class":53},[39,148856,148857,148859,148862,148864,148866,148868,148870,148872,148874,148876,148878,148880,148882,148884,148886,148888,148890],{"class":41,"line":190},[39,148858,148267],{"class":53},[39,148860,148861],{"class":237},"\"线下销售\"",[39,148863,78493],{"class":53},[39,148865,1873],{"class":74},[39,148867,63],{"class":53},[39,148869,2122],{"class":74},[39,148871,63],{"class":53},[39,148873,278],{"class":74},[39,148875,63],{"class":53},[39,148877,2077],{"class":74},[39,148879,63],{"class":53},[39,148881,148287],{"class":74},[39,148883,113177],{"class":53},[39,148885,148720],{"class":59},[39,148887,1117],{"class":45},[39,148889,32451],{"class":74},[39,148891,574],{"class":53},[39,148893,148894],{"class":41,"line":202},[39,148895,148443],{"class":53},[39,148897,148898,148900,148902,148904,148906,148908,148911],{"class":41,"line":207},[39,148899,148448],{"class":59},[39,148901,1117],{"class":45},[39,148903,148453],{"class":53},[39,148905,52382],{"class":59},[39,148907,1117],{"class":45},[39,148909,148910],{"class":237},"\"线上线下销售趋势\"",[39,148912,39022],{"class":53},[39,148914,148915,148917,148919,148921,148923,148925,148927],{"class":41,"line":212},[39,148916,148504],{"class":59},[39,148918,1117],{"class":45},[39,148920,148509],{"class":53},[39,148922,148512],{"class":59},[39,148924,1117],{"class":45},[39,148926,148517],{"class":237},[39,148928,39022],{"class":53},[39,148930,148931],{"class":41,"line":223},[39,148932,574],{"class":53},[39,148934,148935,148937,148940],{"class":41,"line":228},[39,148936,148299],{"class":53},[39,148938,148939],{"class":237},"\"sales.html\"",[39,148941,574],{"class":53},[19,148943,148944],{},"多条折线适合比较不同指标或不同地区。",[14,148946,148948],{"id":148947},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148950,148951,148952,25593],{},"假设 ",[26,148953,148954],{},"sales.json",[30,148956,148958],{"className":148020,"code":148957,"language":146767,"meta":35,"style":35},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[26,148959,148960,148965,148997,149025,149053],{"__ignoreMap":35},[39,148961,148962],{"class":41,"line":42},[39,148963,148964],{"class":53},"[\n",[39,148966,148967,148970,148973,148975,148977,148979,148982,148984,148986,148988,148991,148993,148995],{"class":41,"line":92},[39,148968,148969],{"class":53},"  {",[39,148971,148972],{"class":74},"\"date\"",[39,148974,52412],{"class":53},[39,148976,148240],{"class":237},[39,148978,63],{"class":53},[39,148980,148981],{"class":74},"\"online\"",[39,148983,52412],{"class":53},[39,148985,278],{"class":74},[39,148987,63],{"class":53},[39,148989,148990],{"class":74},"\"offline\"",[39,148992,52412],{"class":53},[39,148994,1873],{"class":74},[39,148996,6011],{"class":53},[39,148998,148999,149001,149003,149005,149007,149009,149011,149013,149015,149017,149019,149021,149023],{"class":41,"line":112},[39,149000,148969],{"class":53},[39,149002,148972],{"class":74},[39,149004,52412],{"class":53},[39,149006,148245],{"class":237},[39,149008,63],{"class":53},[39,149010,148981],{"class":74},[39,149012,52412],{"class":53},[39,149014,148832],{"class":74},[39,149016,63],{"class":53},[39,149018,148990],{"class":74},[39,149020,52412],{"class":53},[39,149022,2122],{"class":74},[39,149024,6011],{"class":53},[39,149026,149027,149029,149031,149033,149035,149037,149039,149041,149043,149045,149047,149049,149051],{"class":41,"line":118},[39,149028,148969],{"class":53},[39,149030,148972],{"class":74},[39,149032,52412],{"class":53},[39,149034,148250],{"class":237},[39,149036,63],{"class":53},[39,149038,148981],{"class":74},[39,149040,52412],{"class":53},[39,149042,2077],{"class":74},[39,149044,63],{"class":53},[39,149046,148990],{"class":74},[39,149048,52412],{"class":53},[39,149050,278],{"class":74},[39,149052,115],{"class":53},[39,149054,149055],{"class":41,"line":125},[39,149056,34221],{"class":53},[19,149058,149059],{},"读取并绘图：",[30,149061,149063],{"className":31353,"code":149062,"language":31355,"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",[26,149064,149065,149071,149085,149095,149099,149131,149144,149148,149156,149165,149174,149178,149190,149199,149208,149217,149221,149229,149233,149250,149267,149271,149288,149304,149308],{"__ignoreMap":35},[39,149066,149067,149069],{"class":41,"line":42},[39,149068,31367],{"class":45},[39,149070,148066],{"class":53},[39,149072,149073,149075,149077,149079,149081,149083],{"class":41,"line":92},[39,149074,31712],{"class":45},[39,149076,148354],{"class":53},[39,149078,31367],{"class":45},[39,149080,148359],{"class":53},[39,149082,32358],{"class":45},[39,149084,148364],{"class":53},[39,149086,149087,149089,149091,149093],{"class":41,"line":112},[39,149088,31712],{"class":45},[39,149090,148213],{"class":53},[39,149092,31367],{"class":45},[39,149094,148218],{"class":53},[39,149096,149097],{"class":41,"line":118},[39,149098,122],{"emptyLinePlaceholder":121},[39,149100,149101,149103,149105,149107,149110,149112,149114,149116,149118,149120,149122,149124,149126,149129],{"class":41,"line":125},[39,149102,108808],{"class":45},[39,149104,147766],{"class":74},[39,149106,54],{"class":53},[39,149108,149109],{"class":237},"\"sales.json\"",[39,149111,63],{"class":53},[39,149113,147776],{"class":237},[39,149115,63],{"class":53},[39,149117,147781],{"class":59},[39,149119,1117],{"class":45},[39,149121,147786],{"class":237},[39,149123,255],{"class":53},[39,149125,32358],{"class":45},[39,149127,149128],{"class":59}," file",[39,149130,4822],{"class":53},[39,149132,149133,149135,149137,149140,149142],{"class":41,"line":132},[39,149134,102396],{"class":53},[39,149136,1117],{"class":45},[39,149138,149139],{"class":53}," json.load(",[39,149141,46329],{"class":59},[39,149143,574],{"class":53},[39,149145,149146],{"class":41,"line":138},[39,149147,122],{"emptyLinePlaceholder":121},[39,149149,149150,149152,149154],{"class":41,"line":169},[39,149151,148775],{"class":53},[39,149153,1117],{"class":45},[39,149155,52813],{"class":53},[39,149157,149158,149161,149163],{"class":41,"line":190},[39,149159,149160],{"class":53},"online_sales ",[39,149162,1117],{"class":45},[39,149164,52813],{"class":53},[39,149166,149167,149170,149172],{"class":41,"line":202},[39,149168,149169],{"class":53},"offline_sales ",[39,149171,1117],{"class":45},[39,149173,52813],{"class":53},[39,149175,149176],{"class":41,"line":207},[39,149177,122],{"emptyLinePlaceholder":121},[39,149179,149180,149182,149185,149187],{"class":41,"line":212},[39,149181,4108],{"class":45},[39,149183,149184],{"class":53}," item ",[39,149186,27018],{"class":45},[39,149188,149189],{"class":53}," data:\n",[39,149191,149192,149195,149197],{"class":41,"line":223},[39,149193,149194],{"class":53},"    dates.append(item[",[39,149196,148972],{"class":237},[39,149198,5738],{"class":53},[39,149200,149201,149204,149206],{"class":41,"line":228},[39,149202,149203],{"class":53},"    online_sales.append(item[",[39,149205,148981],{"class":237},[39,149207,5738],{"class":53},[39,149209,149210,149213,149215],{"class":41,"line":263},[39,149211,149212],{"class":53},"    offline_sales.append(item[",[39,149214,148990],{"class":237},[39,149216,5738],{"class":53},[39,149218,149219],{"class":41,"line":287},[39,149220,122],{"emptyLinePlaceholder":121},[39,149222,149223,149225,149227],{"class":41,"line":292},[39,149224,148227],{"class":53},[39,149226,1117],{"class":45},[39,149228,148232],{"class":53},[39,149230,149231],{"class":41,"line":305},[39,149232,148816],{"class":53},[39,149234,149235,149237,149239,149242,149244,149246,149248],{"class":41,"line":310},[39,149236,148267],{"class":53},[39,149238,148823],{"class":237},[39,149240,149241],{"class":53},", online_sales, ",[39,149243,148720],{"class":59},[39,149245,1117],{"class":45},[39,149247,32451],{"class":74},[39,149249,574],{"class":53},[39,149251,149252,149254,149256,149259,149261,149263,149265],{"class":41,"line":321},[39,149253,148267],{"class":53},[39,149255,148861],{"class":237},[39,149257,149258],{"class":53},", offline_sales, ",[39,149260,148720],{"class":59},[39,149262,1117],{"class":45},[39,149264,32451],{"class":74},[39,149266,574],{"class":53},[39,149268,149269],{"class":41,"line":713},[39,149270,148443],{"class":53},[39,149272,149273,149275,149277,149279,149281,149283,149286],{"class":41,"line":718},[39,149274,148448],{"class":59},[39,149276,1117],{"class":45},[39,149278,148453],{"class":53},[39,149280,52382],{"class":59},[39,149282,1117],{"class":45},[39,149284,149285],{"class":237},"\"销售趋势\"",[39,149287,39022],{"class":53},[39,149289,149290,149292,149294,149296,149298,149300,149302],{"class":41,"line":723},[39,149291,148504],{"class":59},[39,149293,1117],{"class":45},[39,149295,148509],{"class":53},[39,149297,148512],{"class":59},[39,149299,1117],{"class":45},[39,149301,148517],{"class":237},[39,149303,39022],{"class":53},[39,149305,149306],{"class":41,"line":729},[39,149307,574],{"class":53},[39,149309,149310,149312,149314],{"class":41,"line":735},[39,149311,148299],{"class":53},[39,149313,148939],{"class":237},[39,149315,574],{"class":53},[14,149317,149319],{"id":149318},"_109-数据清洗","10.9 数据清洗",[19,149321,149322],{},"真实数据经常不整齐，需要清洗。",[19,149324,149325],{},"常见问题：",[328,149327,149328,149331,149334,149337],{},[331,149329,149330],{},"数字是字符串。",[331,149332,149333],{},"字段缺失。",[331,149335,149336],{},"空值。",[331,149338,149339],{},"日期格式不统一。",[19,149341,16108],{},[30,149343,149345],{"className":31353,"code":149344,"language":31355,"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",[26,149346,149347,149356,149379,149399,149420,149424,149428,149436,149445,149449,149460,149474,149483,149488,149492,149500,149510,149514,149521],{"__ignoreMap":35},[39,149348,149349,149352,149354],{"class":41,"line":42},[39,149350,149351],{"class":53},"raw_data ",[39,149353,1117],{"class":45},[39,149355,56422],{"class":53},[39,149357,149358,149361,149363,149365,149367,149369,149372,149374,149377],{"class":41,"line":92},[39,149359,149360],{"class":53},"    {",[39,149362,148972],{"class":237},[39,149364,52412],{"class":53},[39,149366,148240],{"class":237},[39,149368,63],{"class":53},[39,149370,149371],{"class":237},"\"sales\"",[39,149373,52412],{"class":53},[39,149375,149376],{"class":237},"\"100\"",[39,149378,6011],{"class":53},[39,149380,149381,149383,149385,149387,149389,149391,149393,149395,149397],{"class":41,"line":112},[39,149382,149360],{"class":53},[39,149384,148972],{"class":237},[39,149386,52412],{"class":53},[39,149388,148245],{"class":237},[39,149390,63],{"class":53},[39,149392,149371],{"class":237},[39,149394,52412],{"class":53},[39,149396,8726],{"class":237},[39,149398,6011],{"class":53},[39,149400,149401,149403,149405,149407,149409,149411,149413,149415,149418],{"class":41,"line":118},[39,149402,149360],{"class":53},[39,149404,148972],{"class":237},[39,149406,52412],{"class":53},[39,149408,148250],{"class":237},[39,149410,63],{"class":53},[39,149412,149371],{"class":237},[39,149414,52412],{"class":53},[39,149416,149417],{"class":237},"\"120\"",[39,149419,6011],{"class":53},[39,149421,149422],{"class":41,"line":125},[39,149423,34221],{"class":53},[39,149425,149426],{"class":41,"line":132},[39,149427,122],{"emptyLinePlaceholder":121},[39,149429,149430,149432,149434],{"class":41,"line":138},[39,149431,148775],{"class":53},[39,149433,1117],{"class":45},[39,149435,52813],{"class":53},[39,149437,149438,149441,149443],{"class":41,"line":169},[39,149439,149440],{"class":53},"sales ",[39,149442,1117],{"class":45},[39,149444,52813],{"class":53},[39,149446,149447],{"class":41,"line":190},[39,149448,122],{"emptyLinePlaceholder":121},[39,149450,149451,149453,149455,149457],{"class":41,"line":202},[39,149452,4108],{"class":45},[39,149454,149184],{"class":53},[39,149456,27018],{"class":45},[39,149458,149459],{"class":53}," raw_data:\n",[39,149461,149462,149465,149467,149470,149472],{"class":41,"line":207},[39,149463,149464],{"class":53},"    value ",[39,149466,1117],{"class":45},[39,149468,149469],{"class":53}," item.get(",[39,149471,149371],{"class":237},[39,149473,574],{"class":53},[39,149475,149476,149478,149480],{"class":41,"line":212},[39,149477,4184],{"class":45},[39,149479,39905],{"class":45},[39,149481,149482],{"class":53}," value:\n",[39,149484,149485],{"class":41,"line":223},[39,149486,149487],{"class":45},"        continue\n",[39,149489,149490],{"class":41,"line":228},[39,149491,122],{"emptyLinePlaceholder":121},[39,149493,149494,149496,149498],{"class":41,"line":263},[39,149495,149194],{"class":53},[39,149497,148972],{"class":237},[39,149499,5738],{"class":53},[39,149501,149502,149505,149507],{"class":41,"line":287},[39,149503,149504],{"class":53},"    sales.append(",[39,149506,46],{"class":74},[39,149508,149509],{"class":53},"(value))\n",[39,149511,149512],{"class":41,"line":292},[39,149513,122],{"emptyLinePlaceholder":121},[39,149515,149516,149518],{"class":41,"line":305},[39,149517,31390],{"class":74},[39,149519,149520],{"class":53},"(dates)\n",[39,149522,149523,149525],{"class":41,"line":310},[39,149524,31390],{"class":74},[39,149526,149527],{"class":53},"(sales)\n",[14,149529,149531],{"id":149530},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[30,149533,149535],{"className":31353,"code":149534,"language":31355,"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",[26,149536,149537,149551,149561,149565,149573,149594,149616,149638,149660,149682,149686,149690,149712,149733,149737,149745,149749,149753,149763,149772,149782,149798,149802,149806,149823,149839,149855,149871,149881,149885],{"__ignoreMap":35},[39,149538,149539,149541,149543,149545,149547,149549],{"class":41,"line":42},[39,149540,31712],{"class":45},[39,149542,148354],{"class":53},[39,149544,31367],{"class":45},[39,149546,148359],{"class":53},[39,149548,32358],{"class":45},[39,149550,148364],{"class":53},[39,149552,149553,149555,149557,149559],{"class":41,"line":92},[39,149554,31712],{"class":45},[39,149556,148213],{"class":53},[39,149558,31367],{"class":45},[39,149560,148218],{"class":53},[39,149562,149563],{"class":41,"line":112},[39,149564,122],{"emptyLinePlaceholder":121},[39,149566,149567,149569,149571],{"class":41,"line":118},[39,149568,149440],{"class":53},[39,149570,1117],{"class":45},[39,149572,56422],{"class":53},[39,149574,149575,149577,149579,149581,149584,149586,149588,149590,149592],{"class":41,"line":125},[39,149576,149360],{"class":53},[39,149578,148972],{"class":237},[39,149580,52412],{"class":53},[39,149582,149583],{"class":237},"\"2024-10-01\"",[39,149585,63],{"class":53},[39,149587,85059],{"class":237},[39,149589,52412],{"class":53},[39,149591,92998],{"class":74},[39,149593,6011],{"class":53},[39,149595,149596,149598,149600,149602,149605,149607,149609,149611,149614],{"class":41,"line":132},[39,149597,149360],{"class":53},[39,149599,148972],{"class":237},[39,149601,52412],{"class":53},[39,149603,149604],{"class":237},"\"2024-10-02\"",[39,149606,63],{"class":53},[39,149608,85059],{"class":237},[39,149610,52412],{"class":53},[39,149612,149613],{"class":74},"1800",[39,149615,6011],{"class":53},[39,149617,149618,149620,149622,149624,149627,149629,149631,149633,149636],{"class":41,"line":138},[39,149619,149360],{"class":53},[39,149621,148972],{"class":237},[39,149623,52412],{"class":53},[39,149625,149626],{"class":237},"\"2024-10-03\"",[39,149628,63],{"class":53},[39,149630,85059],{"class":237},[39,149632,52412],{"class":53},[39,149634,149635],{"class":74},"1500",[39,149637,6011],{"class":53},[39,149639,149640,149642,149644,149646,149649,149651,149653,149655,149658],{"class":41,"line":169},[39,149641,149360],{"class":53},[39,149643,148972],{"class":237},[39,149645,52412],{"class":53},[39,149647,149648],{"class":237},"\"2024-10-04\"",[39,149650,63],{"class":53},[39,149652,85059],{"class":237},[39,149654,52412],{"class":53},[39,149656,149657],{"class":74},"2100",[39,149659,6011],{"class":53},[39,149661,149662,149664,149666,149668,149671,149673,149675,149677,149680],{"class":41,"line":190},[39,149663,149360],{"class":53},[39,149665,148972],{"class":237},[39,149667,52412],{"class":53},[39,149669,149670],{"class":237},"\"2024-10-05\"",[39,149672,63],{"class":53},[39,149674,85059],{"class":237},[39,149676,52412],{"class":53},[39,149678,149679],{"class":74},"2600",[39,149681,6011],{"class":53},[39,149683,149684],{"class":41,"line":202},[39,149685,34221],{"class":53},[39,149687,149688],{"class":41,"line":207},[39,149689,122],{"emptyLinePlaceholder":121},[39,149691,149692,149694,149696,149699,149701,149703,149705,149707,149709],{"class":41,"line":212},[39,149693,148775],{"class":53},[39,149695,1117],{"class":45},[39,149697,149698],{"class":53}," [item[",[39,149700,148972],{"class":237},[39,149702,5524],{"class":53},[39,149704,4108],{"class":45},[39,149706,149184],{"class":53},[39,149708,27018],{"class":45},[39,149710,149711],{"class":53}," sales]\n",[39,149713,149714,149717,149719,149721,149723,149725,149727,149729,149731],{"class":41,"line":223},[39,149715,149716],{"class":53},"amounts ",[39,149718,1117],{"class":45},[39,149720,149698],{"class":53},[39,149722,85059],{"class":237},[39,149724,5524],{"class":53},[39,149726,4108],{"class":45},[39,149728,149184],{"class":53},[39,149730,27018],{"class":45},[39,149732,149711],{"class":53},[39,149734,149735],{"class":41,"line":228},[39,149736,122],{"emptyLinePlaceholder":121},[39,149738,149739,149741,149743],{"class":41,"line":263},[39,149740,148227],{"class":53},[39,149742,1117],{"class":45},[39,149744,148232],{"class":53},[39,149746,149747],{"class":41,"line":287},[39,149748,148816],{"class":53},[39,149750,149751],{"class":41,"line":292},[39,149752,148624],{"class":53},[39,149754,149755,149757,149759,149761],{"class":41,"line":305},[39,149756,148629],{"class":59},[39,149758,1117],{"class":45},[39,149760,148270],{"class":237},[39,149762,32441],{"class":53},[39,149764,149765,149767,149769],{"class":41,"line":310},[39,149766,148640],{"class":59},[39,149768,1117],{"class":45},[39,149770,149771],{"class":53},"amounts,\n",[39,149773,149774,149776,149778,149780],{"class":41,"line":321},[39,149775,148669],{"class":59},[39,149777,1117],{"class":45},[39,149779,32451],{"class":74},[39,149781,32441],{"class":53},[39,149783,149784,149786,149788,149790,149792,149794,149796],{"class":41,"line":713},[39,149785,148680],{"class":59},[39,149787,1117],{"class":45},[39,149789,148685],{"class":53},[39,149791,148688],{"class":59},[39,149793,1117],{"class":45},[39,149795,32451],{"class":74},[39,149797,39022],{"class":53},[39,149799,149800],{"class":41,"line":718},[39,149801,574],{"class":53},[39,149803,149804],{"class":41,"line":723},[39,149805,148443],{"class":53},[39,149807,149808,149810,149812,149814,149816,149818,149821],{"class":41,"line":729},[39,149809,148448],{"class":59},[39,149811,1117],{"class":45},[39,149813,148453],{"class":53},[39,149815,52382],{"class":59},[39,149817,1117],{"class":45},[39,149819,149820],{"class":237},"\"每日销售额\"",[39,149822,39022],{"class":53},[39,149824,149825,149827,149829,149831,149833,149835,149837],{"class":41,"line":735},[39,149826,148467],{"class":59},[39,149828,1117],{"class":45},[39,149830,148472],{"class":53},[39,149832,80785],{"class":59},[39,149834,1117],{"class":45},[39,149836,148479],{"class":237},[39,149838,39022],{"class":53},[39,149840,149841,149843,149845,149847,149849,149851,149853],{"class":41,"line":741},[39,149842,148486],{"class":59},[39,149844,1117],{"class":45},[39,149846,148472],{"class":53},[39,149848,80785],{"class":59},[39,149850,1117],{"class":45},[39,149852,148497],{"class":237},[39,149854,39022],{"class":53},[39,149856,149857,149859,149861,149863,149865,149867,149869],{"class":41,"line":747},[39,149858,148504],{"class":59},[39,149860,1117],{"class":45},[39,149862,148509],{"class":53},[39,149864,148512],{"class":59},[39,149866,1117],{"class":45},[39,149868,148517],{"class":237},[39,149870,39022],{"class":53},[39,149872,149873,149876,149878],{"class":41,"line":753},[39,149874,149875],{"class":59},"    datazoom_opts",[39,149877,1117],{"class":45},[39,149879,149880],{"class":53},"[opts.DataZoomOpts()],\n",[39,149882,149883],{"class":41,"line":758},[39,149884,574],{"class":53},[39,149886,149887,149889,149892],{"class":41,"line":763},[39,149888,148299],{"class":53},[39,149890,149891],{"class":237},"\"daily_sales.html\"",[39,149893,574],{"class":53},[19,149895,149896,149899],{},[26,149897,149898],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149901,149903],{"id":149902},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149905,149906],{},"如果数据结构如下：",[30,149908,149910],{"className":31353,"code":149909,"language":31355,"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",[26,149911,149912,149920,149928,149950,149971,149976,149983,150003,150023,150027],{"__ignoreMap":35},[39,149913,149914,149916,149918],{"class":41,"line":42},[39,149915,102633],{"class":53},[39,149917,1117],{"class":45},[39,149919,16545],{"class":53},[39,149921,149922,149925],{"class":41,"line":92},[39,149923,149924],{"class":237},"    \"北京\"",[39,149926,149927],{"class":53},": [\n",[39,149929,149930,149932,149934,149936,149939,149941,149944,149946,149948],{"class":41,"line":112},[39,149931,5998],{"class":53},[39,149933,148972],{"class":237},[39,149935,52412],{"class":53},[39,149937,149938],{"class":237},"\"2024-01-01\"",[39,149940,63],{"class":53},[39,149942,149943],{"class":237},"\"confirm\"",[39,149945,52412],{"class":53},[39,149947,423],{"class":74},[39,149949,6011],{"class":53},[39,149951,149952,149954,149956,149958,149961,149963,149965,149967,149969],{"class":41,"line":118},[39,149953,5998],{"class":53},[39,149955,148972],{"class":237},[39,149957,52412],{"class":53},[39,149959,149960],{"class":237},"\"2024-01-02\"",[39,149962,63],{"class":53},[39,149964,149943],{"class":237},[39,149966,52412],{"class":53},[39,149968,1759],{"class":74},[39,149970,6011],{"class":53},[39,149972,149973],{"class":41,"line":125},[39,149974,149975],{"class":53},"    ],\n",[39,149977,149978,149981],{"class":41,"line":132},[39,149979,149980],{"class":237},"    \"上海\"",[39,149982,149927],{"class":53},[39,149984,149985,149987,149989,149991,149993,149995,149997,149999,150001],{"class":41,"line":138},[39,149986,5998],{"class":53},[39,149988,148972],{"class":237},[39,149990,52412],{"class":53},[39,149992,149938],{"class":237},[39,149994,63],{"class":53},[39,149996,149943],{"class":237},[39,149998,52412],{"class":53},[39,150000,1658],{"class":74},[39,150002,6011],{"class":53},[39,150004,150005,150007,150009,150011,150013,150015,150017,150019,150021],{"class":41,"line":169},[39,150006,5998],{"class":53},[39,150008,148972],{"class":237},[39,150010,52412],{"class":53},[39,150012,149960],{"class":237},[39,150014,63],{"class":53},[39,150016,149943],{"class":237},[39,150018,52412],{"class":53},[39,150020,1784],{"class":74},[39,150022,6011],{"class":53},[39,150024,150025],{"class":41,"line":190},[39,150026,149975],{"class":53},[39,150028,150029],{"class":41,"line":202},[39,150030,115],{"class":53},[19,150032,150033],{},"绘制多地区趋势：",[30,150035,150037],{"className":31353,"code":150036,"language":31355,"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",[26,150038,150039,150053,150063,150067,150092,150096,150104,150108,150112,150124,150146,150159,150163,150167,150184,150200,150204],{"__ignoreMap":35},[39,150040,150041,150043,150045,150047,150049,150051],{"class":41,"line":42},[39,150042,31712],{"class":45},[39,150044,148354],{"class":53},[39,150046,31367],{"class":45},[39,150048,148359],{"class":53},[39,150050,32358],{"class":45},[39,150052,148364],{"class":53},[39,150054,150055,150057,150059,150061],{"class":41,"line":92},[39,150056,31712],{"class":45},[39,150058,148213],{"class":53},[39,150060,31367],{"class":45},[39,150062,148218],{"class":53},[39,150064,150065],{"class":41,"line":112},[39,150066,122],{"emptyLinePlaceholder":121},[39,150068,150069,150071,150073,150075,150077,150079,150081,150083,150085,150088,150090],{"class":41,"line":118},[39,150070,148775],{"class":53},[39,150072,1117],{"class":45},[39,150074,149698],{"class":53},[39,150076,148972],{"class":237},[39,150078,5524],{"class":53},[39,150080,4108],{"class":45},[39,150082,149184],{"class":53},[39,150084,27018],{"class":45},[39,150086,150087],{"class":53}," data[",[39,150089,70244],{"class":237},[39,150091,78502],{"class":53},[39,150093,150094],{"class":41,"line":125},[39,150095,122],{"emptyLinePlaceholder":121},[39,150097,150098,150100,150102],{"class":41,"line":132},[39,150099,148227],{"class":53},[39,150101,1117],{"class":45},[39,150103,148232],{"class":53},[39,150105,150106],{"class":41,"line":138},[39,150107,148816],{"class":53},[39,150109,150110],{"class":41,"line":169},[39,150111,122],{"emptyLinePlaceholder":121},[39,150113,150114,150116,150119,150121],{"class":41,"line":190},[39,150115,4108],{"class":45},[39,150117,150118],{"class":53}," city, records ",[39,150120,27018],{"class":45},[39,150122,150123],{"class":53}," data.items():\n",[39,150125,150126,150129,150131,150133,150135,150137,150139,150141,150143],{"class":41,"line":202},[39,150127,150128],{"class":53},"    values ",[39,150130,1117],{"class":45},[39,150132,149698],{"class":53},[39,150134,149943],{"class":237},[39,150136,5524],{"class":53},[39,150138,4108],{"class":45},[39,150140,149184],{"class":53},[39,150142,27018],{"class":45},[39,150144,150145],{"class":53}," records]\n",[39,150147,150148,150151,150153,150155,150157],{"class":41,"line":207},[39,150149,150150],{"class":53},"    line.add_yaxis(city, values, ",[39,150152,148720],{"class":59},[39,150154,1117],{"class":45},[39,150156,32451],{"class":74},[39,150158,574],{"class":53},[39,150160,150161],{"class":41,"line":212},[39,150162,122],{"emptyLinePlaceholder":121},[39,150164,150165],{"class":41,"line":223},[39,150166,148443],{"class":53},[39,150168,150169,150171,150173,150175,150177,150179,150182],{"class":41,"line":228},[39,150170,148448],{"class":59},[39,150172,1117],{"class":45},[39,150174,148453],{"class":53},[39,150176,52382],{"class":59},[39,150178,1117],{"class":45},[39,150180,150181],{"class":237},"\"多地区趋势图\"",[39,150183,39022],{"class":53},[39,150185,150186,150188,150190,150192,150194,150196,150198],{"class":41,"line":263},[39,150187,148504],{"class":59},[39,150189,1117],{"class":45},[39,150191,148509],{"class":53},[39,150193,148512],{"class":59},[39,150195,1117],{"class":45},[39,150197,148517],{"class":237},[39,150199,39022],{"class":53},[39,150201,150202],{"class":41,"line":287},[39,150203,574],{"class":53},[39,150205,150206,150208,150211],{"class":41,"line":292},[39,150207,148299],{"class":53},[39,150209,150210],{"class":237},"\"trend.html\"",[39,150212,574],{"class":53},[19,150214,150215],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150217,150219],{"id":150218},"_1012-易错点","10.12 易错点",[328,150221,150222,150228,150234,150244,150250],{},[331,150223,150224,150227],{},[26,150225,150226],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[331,150229,150230,150233],{},[26,150231,150232],{},"render()"," 生成的是 HTML，不是图片。",[331,150235,150236,150237,150240,150241,29360],{},"JSON 字符串用 ",[26,150238,150239],{},"json.loads()","，JSON 文件用 ",[26,150242,150243],{},"json.load()",[331,150245,150246,150247,29360],{},"中文 JSON 保存时加 ",[26,150248,150249],{},"ensure_ascii=False",[331,150251,150252],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150254,150256],{"id":150255},"_1013-本章练习","10.13 本章练习",[328,150258,150259,150262,150265,150268,150271],{},[331,150260,150261],{},"安装 pyecharts 并生成第一个折线图。",[331,150263,150264],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[331,150266,150267],{},"绘制两条折线，对比线上和线下销售额。",[331,150269,150270],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[331,150272,150273],{},"对含有空值的销售数据进行清洗后再绘图。",[1192,150275,150276],{},"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":92,"depth":92,"links":150278},[150279,150280,150281,150282,150283,150284,150285,150286,150287,150288,150289,150290,150291],{"id":147895,"depth":92,"text":147896},{"id":147970,"depth":92,"text":147971},{"id":148149,"depth":92,"text":148150},{"id":148200,"depth":92,"text":148201},{"id":148334,"depth":92,"text":148335},{"id":148610,"depth":92,"text":148611},{"id":148736,"depth":92,"text":148737},{"id":148947,"depth":92,"text":148948},{"id":149318,"depth":92,"text":149319},{"id":149530,"depth":92,"text":149531},{"id":149902,"depth":92,"text":149903},{"id":150218,"depth":92,"text":150219},{"id":150255,"depth":92,"text":150256},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147887,"description":24350},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150298,"title":150299,"body":150300,"description":24350,"extension":1203,"meta":152660,"navigation":121,"path":152661,"seo":152662,"stem":152663,"__hash__":152664},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150301,"toc":152637},[150302,150305,150309,150312,150315,150391,150394,150485,150488,150492,150495,150539,150552,150556,150559,150626,150629,150633,150636,150720,150728,150732,150737,150878,150881,150892,150898,150904,151018,151022,151025,151028,151281,151284,151288,151291,151395,151398,151402,151553,151557,151564,151677,151681,151684,151790,151793,151797,151800,151831,151834,151939,151942,151946,151950,151960,152028,152032,152039,152103,152106,152110,152116,152212,152221,152225,152549,152558,152562,152590,152594,152634],[10,150303,150299],{"id":150304},"_11-面向对象基础",[14,150306,150308],{"id":150307},"_111-什么是面向对象","11.1 什么是面向对象",[19,150310,150311],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150313,150314],{},"面向过程：",[30,150316,150318],{"className":31353,"code":150317,"language":31355,"meta":35,"style":35},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[26,150319,150320,150329,150337,150341,150351,150382,150386],{"__ignoreMap":35},[39,150321,150322,150324,150326],{"class":41,"line":42},[39,150323,147511],{"class":53},[39,150325,1117],{"class":45},[39,150327,150328],{"class":237}," \"小明\"\n",[39,150330,150331,150333,150335],{"class":41,"line":92},[39,150332,147521],{"class":53},[39,150334,1117],{"class":45},[39,150336,147526],{"class":74},[39,150338,150339],{"class":41,"line":112},[39,150340,122],{"emptyLinePlaceholder":121},[39,150342,150343,150345,150348],{"class":41,"line":118},[39,150344,32922],{"class":45},[39,150346,150347],{"class":49}," introduce",[39,150349,150350],{"class":53},"(name, age):\n",[39,150352,150353,150355,150357,150359,150362,150364,150366,150368,150371,150373,150375,150377,150380],{"class":41,"line":125},[39,150354,32274],{"class":74},[39,150356,54],{"class":53},[39,150358,1321],{"class":45},[39,150360,150361],{"class":237},"\"我叫",[39,150363,2156],{"class":74},[39,150365,80785],{"class":53},[39,150367,2206],{"class":74},[39,150369,150370],{"class":237},"，今年",[39,150372,2156],{"class":74},[39,150374,71196],{"class":53},[39,150376,2206],{"class":74},[39,150378,150379],{"class":237},"岁\"",[39,150381,574],{"class":53},[39,150383,150384],{"class":41,"line":132},[39,150385,122],{"emptyLinePlaceholder":121},[39,150387,150388],{"class":41,"line":138},[39,150389,150390],{"class":53},"introduce(name, age)\n",[19,150392,150393],{},"面向对象：",[30,150395,150397],{"className":31353,"code":150396,"language":31355,"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",[26,150398,150399,150407,150415,150444,150448,150452,150462,150471,150480],{"__ignoreMap":35},[39,150400,150401,150403,150405],{"class":41,"line":42},[39,150402,15667],{"class":45},[39,150404,8972],{"class":49},[39,150406,4822],{"class":53},[39,150408,150409,150411,150413],{"class":41,"line":92},[39,150410,31776],{"class":45},[39,150412,150347],{"class":49},[39,150414,31782],{"class":53},[39,150416,150417,150419,150421,150423,150425,150428,150430,150432,150434,150436,150438,150440,150442],{"class":41,"line":112},[39,150418,33426],{"class":74},[39,150420,54],{"class":53},[39,150422,1321],{"class":45},[39,150424,150361],{"class":237},[39,150426,150427],{"class":74},"{self",[39,150429,81276],{"class":53},[39,150431,2206],{"class":74},[39,150433,150370],{"class":237},[39,150435,150427],{"class":74},[39,150437,81288],{"class":53},[39,150439,2206],{"class":74},[39,150441,150379],{"class":237},[39,150443,574],{"class":53},[39,150445,150446],{"class":41,"line":118},[39,150447,122],{"emptyLinePlaceholder":121},[39,150449,150450],{"class":41,"line":125},[39,150451,122],{"emptyLinePlaceholder":121},[39,150453,150454,150457,150459],{"class":41,"line":132},[39,150455,150456],{"class":53},"student ",[39,150458,1117],{"class":45},[39,150460,150461],{"class":53}," Student()\n",[39,150463,150464,150467,150469],{"class":41,"line":138},[39,150465,150466],{"class":53},"student.name ",[39,150468,1117],{"class":45},[39,150470,150328],{"class":237},[39,150472,150473,150476,150478],{"class":41,"line":169},[39,150474,150475],{"class":53},"student.age ",[39,150477,1117],{"class":45},[39,150479,147526],{"class":74},[39,150481,150482],{"class":41,"line":190},[39,150483,150484],{"class":53},"student.introduce()\n",[19,150486,150487],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150489,150491],{"id":150490},"_112-类和对象","11.2 类和对象",[19,150493,150494],{},"类是模板，对象是根据模板创建出来的具体实例。",[30,150496,150498],{"className":31353,"code":150497,"language":31355,"meta":35,"style":35},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[26,150499,150500,150508,150513,150517,150521,150530],{"__ignoreMap":35},[39,150501,150502,150504,150506],{"class":41,"line":42},[39,150503,15667],{"class":45},[39,150505,8972],{"class":49},[39,150507,4822],{"class":53},[39,150509,150510],{"class":41,"line":92},[39,150511,150512],{"class":45},"    pass\n",[39,150514,150515],{"class":41,"line":112},[39,150516,122],{"emptyLinePlaceholder":121},[39,150518,150519],{"class":41,"line":118},[39,150520,122],{"emptyLinePlaceholder":121},[39,150522,150523,150526,150528],{"class":41,"line":125},[39,150524,150525],{"class":53},"student1 ",[39,150527,1117],{"class":45},[39,150529,150461],{"class":53},[39,150531,150532,150535,150537],{"class":41,"line":132},[39,150533,150534],{"class":53},"student2 ",[39,150536,1117],{"class":45},[39,150538,150461],{"class":53},[19,150540,150541,150544,150545,101993,150548,150551],{},[26,150542,150543],{},"Student"," 是类，",[26,150546,150547],{},"student1",[26,150549,150550],{},"student2"," 是对象。",[14,150553,150555],{"id":150554},"_113-属性","11.3 属性",[19,150557,150558],{},"属性是对象保存的数据。",[30,150560,150562],{"className":31353,"code":150561,"language":31355,"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",[26,150563,150564,150572,150576,150580,150584,150592,150600,150608,150612,150619],{"__ignoreMap":35},[39,150565,150566,150568,150570],{"class":41,"line":42},[39,150567,15667],{"class":45},[39,150569,8972],{"class":49},[39,150571,4822],{"class":53},[39,150573,150574],{"class":41,"line":92},[39,150575,150512],{"class":45},[39,150577,150578],{"class":41,"line":112},[39,150579,122],{"emptyLinePlaceholder":121},[39,150581,150582],{"class":41,"line":118},[39,150583,122],{"emptyLinePlaceholder":121},[39,150585,150586,150588,150590],{"class":41,"line":125},[39,150587,150456],{"class":53},[39,150589,1117],{"class":45},[39,150591,150461],{"class":53},[39,150593,150594,150596,150598],{"class":41,"line":132},[39,150595,150466],{"class":53},[39,150597,1117],{"class":45},[39,150599,150328],{"class":237},[39,150601,150602,150604,150606],{"class":41,"line":138},[39,150603,150475],{"class":53},[39,150605,1117],{"class":45},[39,150607,147526],{"class":74},[39,150609,150610],{"class":41,"line":169},[39,150611,122],{"emptyLinePlaceholder":121},[39,150613,150614,150616],{"class":41,"line":190},[39,150615,31390],{"class":74},[39,150617,150618],{"class":53},"(student.name)\n",[39,150620,150621,150623],{"class":41,"line":202},[39,150622,31390],{"class":74},[39,150624,150625],{"class":53},"(student.age)\n",[19,150627,150628],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150630,150632],{"id":150631},"_114-方法","11.4 方法",[19,150634,150635],{},"类中的函数叫方法。",[30,150637,150638],{"className":31353,"code":150396,"language":31355,"meta":35,"style":35},[26,150639,150640,150648,150656,150684,150688,150692,150700,150708,150716],{"__ignoreMap":35},[39,150641,150642,150644,150646],{"class":41,"line":42},[39,150643,15667],{"class":45},[39,150645,8972],{"class":49},[39,150647,4822],{"class":53},[39,150649,150650,150652,150654],{"class":41,"line":92},[39,150651,31776],{"class":45},[39,150653,150347],{"class":49},[39,150655,31782],{"class":53},[39,150657,150658,150660,150662,150664,150666,150668,150670,150672,150674,150676,150678,150680,150682],{"class":41,"line":112},[39,150659,33426],{"class":74},[39,150661,54],{"class":53},[39,150663,1321],{"class":45},[39,150665,150361],{"class":237},[39,150667,150427],{"class":74},[39,150669,81276],{"class":53},[39,150671,2206],{"class":74},[39,150673,150370],{"class":237},[39,150675,150427],{"class":74},[39,150677,81288],{"class":53},[39,150679,2206],{"class":74},[39,150681,150379],{"class":237},[39,150683,574],{"class":53},[39,150685,150686],{"class":41,"line":118},[39,150687,122],{"emptyLinePlaceholder":121},[39,150689,150690],{"class":41,"line":125},[39,150691,122],{"emptyLinePlaceholder":121},[39,150693,150694,150696,150698],{"class":41,"line":132},[39,150695,150456],{"class":53},[39,150697,1117],{"class":45},[39,150699,150461],{"class":53},[39,150701,150702,150704,150706],{"class":41,"line":138},[39,150703,150466],{"class":53},[39,150705,1117],{"class":45},[39,150707,150328],{"class":237},[39,150709,150710,150712,150714],{"class":41,"line":169},[39,150711,150475],{"class":53},[39,150713,1117],{"class":45},[39,150715,147526],{"class":74},[39,150717,150718],{"class":41,"line":190},[39,150719,150484],{"class":53},[19,150721,150722,150724,150725,150727],{},[26,150723,31798],{}," 表示当前对象。调用方法时不需要手动传入 ",[26,150726,31798],{},"，Python 会自动传。",[14,150729,150731],{"id":150730},"_115-构造方法__init__","11.5 构造方法__init__",[19,150733,150734,150736],{},[26,150735,31804],{}," 在对象创建时自动执行，用于初始化属性。",[30,150738,150740],{"className":31353,"code":150739,"language":31355,"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",[26,150741,150742,150750,150759,150771,150783,150794,150798,150806,150844,150848,150852,150874],{"__ignoreMap":35},[39,150743,150744,150746,150748],{"class":41,"line":42},[39,150745,15667],{"class":45},[39,150747,8972],{"class":49},[39,150749,4822],{"class":53},[39,150751,150752,150754,150756],{"class":41,"line":92},[39,150753,31776],{"class":45},[39,150755,31779],{"class":74},[39,150757,150758],{"class":53},"(self, name, age, score):\n",[39,150760,150761,150763,150766,150768],{"class":41,"line":112},[39,150762,31820],{"class":74},[39,150764,150765],{"class":53},".name ",[39,150767,1117],{"class":45},[39,150769,150770],{"class":53}," name\n",[39,150772,150773,150775,150778,150780],{"class":41,"line":118},[39,150774,31820],{"class":74},[39,150776,150777],{"class":53},".age ",[39,150779,1117],{"class":45},[39,150781,150782],{"class":53}," age\n",[39,150784,150785,150787,150790,150792],{"class":41,"line":125},[39,150786,31820],{"class":74},[39,150788,150789],{"class":53},".score ",[39,150791,1117],{"class":45},[39,150793,2700],{"class":53},[39,150795,150796],{"class":41,"line":132},[39,150797,122],{"emptyLinePlaceholder":121},[39,150799,150800,150802,150804],{"class":41,"line":138},[39,150801,31776],{"class":45},[39,150803,150347],{"class":49},[39,150805,31782],{"class":53},[39,150807,150808,150810,150812,150814,150816,150818,150820,150822,150824,150826,150828,150830,150833,150835,150838,150840,150842],{"class":41,"line":169},[39,150809,33426],{"class":74},[39,150811,54],{"class":53},[39,150813,1321],{"class":45},[39,150815,150361],{"class":237},[39,150817,150427],{"class":74},[39,150819,81276],{"class":53},[39,150821,2206],{"class":74},[39,150823,150370],{"class":237},[39,150825,150427],{"class":74},[39,150827,81288],{"class":53},[39,150829,2206],{"class":74},[39,150831,150832],{"class":237},"岁，成绩",[39,150834,150427],{"class":74},[39,150836,150837],{"class":53},".score",[39,150839,2206],{"class":74},[39,150841,1516],{"class":237},[39,150843,574],{"class":53},[39,150845,150846],{"class":41,"line":190},[39,150847,122],{"emptyLinePlaceholder":121},[39,150849,150850],{"class":41,"line":202},[39,150851,122],{"emptyLinePlaceholder":121},[39,150853,150854,150856,150858,150861,150864,150866,150868,150870,150872],{"class":41,"line":207},[39,150855,150456],{"class":53},[39,150857,1117],{"class":45},[39,150859,150860],{"class":53}," Student(",[39,150862,150863],{"class":237},"\"小明\"",[39,150865,63],{"class":53},[39,150867,1911],{"class":74},[39,150869,63],{"class":53},[39,150871,2249],{"class":74},[39,150873,574],{"class":53},[39,150875,150876],{"class":41,"line":212},[39,150877,150484],{"class":53},[19,150879,150880],{},"构造方法的好处：",[328,150882,150883,150886,150889],{},[331,150884,150885],{},"创建对象时必须提供必要数据。",[331,150887,150888],{},"属性初始化集中，不容易漏。",[331,150890,150891],{},"对象状态更完整。",[14,150893,150895,150896],{"id":150894},"_116-str","11.6 ",[350,150897,2427],{},[19,150899,150900,150901,29360],{},"直接打印对象时，默认输出不直观。可以定义 ",[26,150902,150903],{},"__str__",[30,150905,150907],{"className":31353,"code":150906,"language":31355,"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",[26,150908,150909,150917,150926,150936,150946,150950,150959,150987,150991,150995,151011],{"__ignoreMap":35},[39,150910,150911,150913,150915],{"class":41,"line":42},[39,150912,15667],{"class":45},[39,150914,8972],{"class":49},[39,150916,4822],{"class":53},[39,150918,150919,150921,150923],{"class":41,"line":92},[39,150920,31776],{"class":45},[39,150922,31779],{"class":74},[39,150924,150925],{"class":53},"(self, name, age):\n",[39,150927,150928,150930,150932,150934],{"class":41,"line":112},[39,150929,31820],{"class":74},[39,150931,150765],{"class":53},[39,150933,1117],{"class":45},[39,150935,150770],{"class":53},[39,150937,150938,150940,150942,150944],{"class":41,"line":118},[39,150939,31820],{"class":74},[39,150941,150777],{"class":53},[39,150943,1117],{"class":45},[39,150945,150782],{"class":53},[39,150947,150948],{"class":41,"line":125},[39,150949,122],{"emptyLinePlaceholder":121},[39,150951,150952,150954,150957],{"class":41,"line":132},[39,150953,31776],{"class":45},[39,150955,150956],{"class":74}," __str__",[39,150958,31782],{"class":53},[39,150960,150961,150963,150966,150969,150971,150973,150975,150978,150980,150982,150984],{"class":41,"line":138},[39,150962,15725],{"class":45},[39,150964,150965],{"class":45}," f",[39,150967,150968],{"class":237},"\"Student(name=",[39,150970,150427],{"class":74},[39,150972,81276],{"class":53},[39,150974,2206],{"class":74},[39,150976,150977],{"class":237},", age=",[39,150979,150427],{"class":74},[39,150981,81288],{"class":53},[39,150983,2206],{"class":74},[39,150985,150986],{"class":237},")\"\n",[39,150988,150989],{"class":41,"line":169},[39,150990,122],{"emptyLinePlaceholder":121},[39,150992,150993],{"class":41,"line":190},[39,150994,122],{"emptyLinePlaceholder":121},[39,150996,150997,150999,151001,151003,151005,151007,151009],{"class":41,"line":202},[39,150998,150456],{"class":53},[39,151000,1117],{"class":45},[39,151002,150860],{"class":53},[39,151004,150863],{"class":237},[39,151006,63],{"class":53},[39,151008,1911],{"class":74},[39,151010,574],{"class":53},[39,151012,151013,151015],{"class":41,"line":207},[39,151014,31390],{"class":74},[39,151016,151017],{"class":53},"(student)\n",[14,151019,151021],{"id":151020},"_117-封装","11.7 封装",[19,151023,151024],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151026,151027],{},"Python 中以双下划线开头的属性通常视为私有属性。",[30,151029,151031],{"className":31353,"code":151030,"language":31355,"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",[26,151032,151033,151042,151051,151063,151075,151079,151088,151097,151101,151111,151124,151135,151140,151151,151155,151164,151176,151187,151191,151204,151215,151219,151230,151234,151238,151256,151265,151274],{"__ignoreMap":35},[39,151034,151035,151037,151040],{"class":41,"line":42},[39,151036,15667],{"class":45},[39,151038,151039],{"class":49}," Account",[39,151041,4822],{"class":53},[39,151043,151044,151046,151048],{"class":41,"line":92},[39,151045,31776],{"class":45},[39,151047,31779],{"class":74},[39,151049,151050],{"class":53},"(self, owner, balance):\n",[39,151052,151053,151055,151058,151060],{"class":41,"line":112},[39,151054,31820],{"class":74},[39,151056,151057],{"class":53},".owner ",[39,151059,1117],{"class":45},[39,151061,151062],{"class":53}," owner\n",[39,151064,151065,151067,151070,151072],{"class":41,"line":118},[39,151066,31820],{"class":74},[39,151068,151069],{"class":53},".__balance ",[39,151071,1117],{"class":45},[39,151073,151074],{"class":53}," balance\n",[39,151076,151077],{"class":41,"line":125},[39,151078,122],{"emptyLinePlaceholder":121},[39,151080,151081,151083,151086],{"class":41,"line":132},[39,151082,31776],{"class":45},[39,151084,151085],{"class":49}," get_balance",[39,151087,31782],{"class":53},[39,151089,151090,151092,151094],{"class":41,"line":138},[39,151091,15725],{"class":45},[39,151093,39848],{"class":74},[39,151095,151096],{"class":53},".__balance\n",[39,151098,151099],{"class":41,"line":169},[39,151100,122],{"emptyLinePlaceholder":121},[39,151102,151103,151105,151108],{"class":41,"line":190},[39,151104,31776],{"class":45},[39,151106,151107],{"class":49}," deposit",[39,151109,151110],{"class":53},"(self, money):\n",[39,151112,151113,151115,151118,151120,151122],{"class":41,"line":202},[39,151114,3590],{"class":45},[39,151116,151117],{"class":53}," money ",[39,151119,2709],{"class":45},[39,151121,315],{"class":74},[39,151123,4822],{"class":53},[39,151125,151126,151128,151130,151133],{"class":41,"line":207},[39,151127,35625],{"class":74},[39,151129,54],{"class":53},[39,151131,151132],{"class":237},"\"存款金额必须大于0\"",[39,151134,574],{"class":53},[39,151136,151137],{"class":41,"line":212},[39,151138,151139],{"class":45},"            return\n",[39,151141,151142,151144,151146,151148],{"class":41,"line":223},[39,151143,31820],{"class":74},[39,151145,151069],{"class":53},[39,151147,10545],{"class":45},[39,151149,151150],{"class":53}," money\n",[39,151152,151153],{"class":41,"line":228},[39,151154,122],{"emptyLinePlaceholder":121},[39,151156,151157,151159,151162],{"class":41,"line":263},[39,151158,31776],{"class":45},[39,151160,151161],{"class":49}," withdraw",[39,151163,151110],{"class":53},[39,151165,151166,151168,151170,151172,151174],{"class":41,"line":287},[39,151167,3590],{"class":45},[39,151169,151117],{"class":53},[39,151171,2709],{"class":45},[39,151173,315],{"class":74},[39,151175,4822],{"class":53},[39,151177,151178,151180,151182,151185],{"class":41,"line":292},[39,151179,35625],{"class":74},[39,151181,54],{"class":53},[39,151183,151184],{"class":237},"\"取款金额必须大于0\"",[39,151186,574],{"class":53},[39,151188,151189],{"class":41,"line":305},[39,151190,151139],{"class":45},[39,151192,151193,151195,151197,151199,151201],{"class":41,"line":310},[39,151194,3590],{"class":45},[39,151196,151117],{"class":53},[39,151198,2220],{"class":45},[39,151200,39848],{"class":74},[39,151202,151203],{"class":53},".__balance:\n",[39,151205,151206,151208,151210,151213],{"class":41,"line":321},[39,151207,35625],{"class":74},[39,151209,54],{"class":53},[39,151211,151212],{"class":237},"\"余额不足\"",[39,151214,574],{"class":53},[39,151216,151217],{"class":41,"line":713},[39,151218,151139],{"class":45},[39,151220,151221,151223,151225,151228],{"class":41,"line":718},[39,151222,31820],{"class":74},[39,151224,151069],{"class":53},[39,151226,151227],{"class":45},"-=",[39,151229,151150],{"class":53},[39,151231,151232],{"class":41,"line":723},[39,151233,122],{"emptyLinePlaceholder":121},[39,151235,151236],{"class":41,"line":729},[39,151237,122],{"emptyLinePlaceholder":121},[39,151239,151240,151243,151245,151248,151250,151252,151254],{"class":41,"line":735},[39,151241,151242],{"class":53},"account ",[39,151244,1117],{"class":45},[39,151246,151247],{"class":53}," Account(",[39,151249,150863],{"class":237},[39,151251,63],{"class":53},[39,151253,7486],{"class":74},[39,151255,574],{"class":53},[39,151257,151258,151261,151263],{"class":41,"line":741},[39,151259,151260],{"class":53},"account.deposit(",[39,151262,2832],{"class":74},[39,151264,574],{"class":53},[39,151266,151267,151270,151272],{"class":41,"line":747},[39,151268,151269],{"class":53},"account.withdraw(",[39,151271,278],{"class":74},[39,151273,574],{"class":53},[39,151275,151276,151278],{"class":41,"line":753},[39,151277,31390],{"class":74},[39,151279,151280],{"class":53},"(account.get_balance())\n",[19,151282,151283],{},"封装的意义是避免外部随意修改内部状态。",[14,151285,151287],{"id":151286},"_118-继承","11.8 继承",[19,151289,151290],{},"继承可以让子类复用父类的属性和方法。",[30,151292,151294],{"className":31353,"code":151293,"language":31355,"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",[26,151295,151296,151305,151314,151325,151329,151333,151347,151356,151367,151371,151375,151385,151390],{"__ignoreMap":35},[39,151297,151298,151300,151303],{"class":41,"line":42},[39,151299,15667],{"class":45},[39,151301,151302],{"class":49}," Animal",[39,151304,4822],{"class":53},[39,151306,151307,151309,151312],{"class":41,"line":92},[39,151308,31776],{"class":45},[39,151310,151311],{"class":49}," eat",[39,151313,31782],{"class":53},[39,151315,151316,151318,151320,151323],{"class":41,"line":112},[39,151317,33426],{"class":74},[39,151319,54],{"class":53},[39,151321,151322],{"class":237},"\"吃东西\"",[39,151324,574],{"class":53},[39,151326,151327],{"class":41,"line":118},[39,151328,122],{"emptyLinePlaceholder":121},[39,151330,151331],{"class":41,"line":125},[39,151332,122],{"emptyLinePlaceholder":121},[39,151334,151335,151337,151340,151342,151345],{"class":41,"line":132},[39,151336,15667],{"class":45},[39,151338,151339],{"class":49}," Dog",[39,151341,54],{"class":53},[39,151343,151344],{"class":49},"Animal",[39,151346,31761],{"class":53},[39,151348,151349,151351,151354],{"class":41,"line":138},[39,151350,31776],{"class":45},[39,151352,151353],{"class":49}," bark",[39,151355,31782],{"class":53},[39,151357,151358,151360,151362,151365],{"class":41,"line":169},[39,151359,33426],{"class":74},[39,151361,54],{"class":53},[39,151363,151364],{"class":237},"\"汪汪\"",[39,151366,574],{"class":53},[39,151368,151369],{"class":41,"line":190},[39,151370,122],{"emptyLinePlaceholder":121},[39,151372,151373],{"class":41,"line":202},[39,151374,122],{"emptyLinePlaceholder":121},[39,151376,151377,151380,151382],{"class":41,"line":207},[39,151378,151379],{"class":53},"dog ",[39,151381,1117],{"class":45},[39,151383,151384],{"class":53}," Dog()\n",[39,151386,151387],{"class":41,"line":212},[39,151388,151389],{"class":53},"dog.eat()\n",[39,151391,151392],{"class":41,"line":223},[39,151393,151394],{"class":53},"dog.bark()\n",[19,151396,151397],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151399,151401],{"id":151400},"_119-方法重写","11.9 方法重写",[30,151403,151405],{"className":31353,"code":151404,"language":31355,"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",[26,151406,151407,151415,151424,151435,151439,151443,151455,151463,151473,151477,151481,151494,151502,151513,151517,151521,151529,151539,151543,151548],{"__ignoreMap":35},[39,151408,151409,151411,151413],{"class":41,"line":42},[39,151410,15667],{"class":45},[39,151412,151302],{"class":49},[39,151414,4822],{"class":53},[39,151416,151417,151419,151422],{"class":41,"line":92},[39,151418,31776],{"class":45},[39,151420,151421],{"class":49}," speak",[39,151423,31782],{"class":53},[39,151425,151426,151428,151430,151433],{"class":41,"line":112},[39,151427,33426],{"class":74},[39,151429,54],{"class":53},[39,151431,151432],{"class":237},"\"动物叫\"",[39,151434,574],{"class":53},[39,151436,151437],{"class":41,"line":118},[39,151438,122],{"emptyLinePlaceholder":121},[39,151440,151441],{"class":41,"line":125},[39,151442,122],{"emptyLinePlaceholder":121},[39,151444,151445,151447,151449,151451,151453],{"class":41,"line":132},[39,151446,15667],{"class":45},[39,151448,151339],{"class":49},[39,151450,54],{"class":53},[39,151452,151344],{"class":49},[39,151454,31761],{"class":53},[39,151456,151457,151459,151461],{"class":41,"line":138},[39,151458,31776],{"class":45},[39,151460,151421],{"class":49},[39,151462,31782],{"class":53},[39,151464,151465,151467,151469,151471],{"class":41,"line":169},[39,151466,33426],{"class":74},[39,151468,54],{"class":53},[39,151470,151364],{"class":237},[39,151472,574],{"class":53},[39,151474,151475],{"class":41,"line":190},[39,151476,122],{"emptyLinePlaceholder":121},[39,151478,151479],{"class":41,"line":202},[39,151480,122],{"emptyLinePlaceholder":121},[39,151482,151483,151485,151488,151490,151492],{"class":41,"line":207},[39,151484,15667],{"class":45},[39,151486,151487],{"class":49}," Cat",[39,151489,54],{"class":53},[39,151491,151344],{"class":49},[39,151493,31761],{"class":53},[39,151495,151496,151498,151500],{"class":41,"line":212},[39,151497,31776],{"class":45},[39,151499,151421],{"class":49},[39,151501,31782],{"class":53},[39,151503,151504,151506,151508,151511],{"class":41,"line":223},[39,151505,33426],{"class":74},[39,151507,54],{"class":53},[39,151509,151510],{"class":237},"\"喵喵\"",[39,151512,574],{"class":53},[39,151514,151515],{"class":41,"line":228},[39,151516,122],{"emptyLinePlaceholder":121},[39,151518,151519],{"class":41,"line":263},[39,151520,122],{"emptyLinePlaceholder":121},[39,151522,151523,151525,151527],{"class":41,"line":287},[39,151524,151379],{"class":53},[39,151526,1117],{"class":45},[39,151528,151384],{"class":53},[39,151530,151531,151534,151536],{"class":41,"line":292},[39,151532,151533],{"class":53},"cat ",[39,151535,1117],{"class":45},[39,151537,151538],{"class":53}," Cat()\n",[39,151540,151541],{"class":41,"line":305},[39,151542,122],{"emptyLinePlaceholder":121},[39,151544,151545],{"class":41,"line":310},[39,151546,151547],{"class":53},"dog.speak()\n",[39,151549,151550],{"class":41,"line":321},[39,151551,151552],{"class":53},"cat.speak()\n",[14,151554,151556],{"id":151555},"_1110-super","11.10 super",[19,151558,151559,151560,151563],{},"子类可以通过 ",[26,151561,151562],{},"super()"," 调用父类方法。",[30,151565,151567],{"className":31353,"code":151566,"language":31355,"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",[26,151568,151569,151577,151586,151596,151600,151604,151616,151625,151636,151646,151650,151654,151670],{"__ignoreMap":35},[39,151570,151571,151573,151575],{"class":41,"line":42},[39,151572,15667],{"class":45},[39,151574,16542],{"class":49},[39,151576,4822],{"class":53},[39,151578,151579,151581,151583],{"class":41,"line":92},[39,151580,31776],{"class":45},[39,151582,31779],{"class":74},[39,151584,151585],{"class":53},"(self, name):\n",[39,151587,151588,151590,151592,151594],{"class":41,"line":112},[39,151589,31820],{"class":74},[39,151591,150765],{"class":53},[39,151593,1117],{"class":45},[39,151595,150770],{"class":53},[39,151597,151598],{"class":41,"line":118},[39,151599,122],{"emptyLinePlaceholder":121},[39,151601,151602],{"class":41,"line":125},[39,151603,122],{"emptyLinePlaceholder":121},[39,151605,151606,151608,151610,151612,151614],{"class":41,"line":132},[39,151607,15667],{"class":45},[39,151609,8972],{"class":49},[39,151611,54],{"class":53},[39,151613,20019],{"class":49},[39,151615,31761],{"class":53},[39,151617,151618,151620,151622],{"class":41,"line":138},[39,151619,31776],{"class":45},[39,151621,31779],{"class":74},[39,151623,151624],{"class":53},"(self, name, score):\n",[39,151626,151627,151629,151631,151633],{"class":41,"line":169},[39,151628,31792],{"class":74},[39,151630,18234],{"class":53},[39,151632,31804],{"class":74},[39,151634,151635],{"class":53},"(name)\n",[39,151637,151638,151640,151642,151644],{"class":41,"line":190},[39,151639,31820],{"class":74},[39,151641,150789],{"class":53},[39,151643,1117],{"class":45},[39,151645,2700],{"class":53},[39,151647,151648],{"class":41,"line":202},[39,151649,122],{"emptyLinePlaceholder":121},[39,151651,151652],{"class":41,"line":207},[39,151653,122],{"emptyLinePlaceholder":121},[39,151655,151656,151658,151660,151662,151664,151666,151668],{"class":41,"line":212},[39,151657,150456],{"class":53},[39,151659,1117],{"class":45},[39,151661,150860],{"class":53},[39,151663,150863],{"class":237},[39,151665,63],{"class":53},[39,151667,2249],{"class":74},[39,151669,574],{"class":53},[39,151671,151672,151674],{"class":41,"line":223},[39,151673,31390],{"class":74},[39,151675,151676],{"class":53},"(student.name, student.score)\n",[14,151678,151680],{"id":151679},"_1111-多态","11.11 多态",[19,151682,151683],{},"多态指不同对象响应同一个方法，表现出不同结果。",[30,151685,151687],{"className":31353,"code":151686,"language":31355,"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",[26,151688,151689,151697,151705,151715,151719,151723,151731,151739,151749,151753,151757,151767,151772,151776,151780,151785],{"__ignoreMap":35},[39,151690,151691,151693,151695],{"class":41,"line":42},[39,151692,15667],{"class":45},[39,151694,151339],{"class":49},[39,151696,4822],{"class":53},[39,151698,151699,151701,151703],{"class":41,"line":92},[39,151700,31776],{"class":45},[39,151702,151421],{"class":49},[39,151704,31782],{"class":53},[39,151706,151707,151709,151711,151713],{"class":41,"line":112},[39,151708,33426],{"class":74},[39,151710,54],{"class":53},[39,151712,151364],{"class":237},[39,151714,574],{"class":53},[39,151716,151717],{"class":41,"line":118},[39,151718,122],{"emptyLinePlaceholder":121},[39,151720,151721],{"class":41,"line":125},[39,151722,122],{"emptyLinePlaceholder":121},[39,151724,151725,151727,151729],{"class":41,"line":132},[39,151726,15667],{"class":45},[39,151728,151487],{"class":49},[39,151730,4822],{"class":53},[39,151732,151733,151735,151737],{"class":41,"line":138},[39,151734,31776],{"class":45},[39,151736,151421],{"class":49},[39,151738,31782],{"class":53},[39,151740,151741,151743,151745,151747],{"class":41,"line":169},[39,151742,33426],{"class":74},[39,151744,54],{"class":53},[39,151746,151510],{"class":237},[39,151748,574],{"class":53},[39,151750,151751],{"class":41,"line":190},[39,151752,122],{"emptyLinePlaceholder":121},[39,151754,151755],{"class":41,"line":202},[39,151756,122],{"emptyLinePlaceholder":121},[39,151758,151759,151761,151764],{"class":41,"line":207},[39,151760,32922],{"class":45},[39,151762,151763],{"class":49}," make_sound",[39,151765,151766],{"class":53},"(animal):\n",[39,151768,151769],{"class":41,"line":212},[39,151770,151771],{"class":53},"    animal.speak()\n",[39,151773,151774],{"class":41,"line":223},[39,151775,122],{"emptyLinePlaceholder":121},[39,151777,151778],{"class":41,"line":228},[39,151779,122],{"emptyLinePlaceholder":121},[39,151781,151782],{"class":41,"line":263},[39,151783,151784],{"class":53},"make_sound(Dog())\n",[39,151786,151787],{"class":41,"line":287},[39,151788,151789],{"class":53},"make_sound(Cat())\n",[19,151791,151792],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151794,151796],{"id":151795},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151798,151799],{},"实例属性属于对象：",[30,151801,151803],{"className":31353,"code":151802,"language":31355,"meta":35,"style":35},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[26,151804,151805,151813,151821],{"__ignoreMap":35},[39,151806,151807,151809,151811],{"class":41,"line":42},[39,151808,15667],{"class":45},[39,151810,8972],{"class":49},[39,151812,4822],{"class":53},[39,151814,151815,151817,151819],{"class":41,"line":92},[39,151816,31776],{"class":45},[39,151818,31779],{"class":74},[39,151820,151585],{"class":53},[39,151822,151823,151825,151827,151829],{"class":41,"line":112},[39,151824,31820],{"class":74},[39,151826,150765],{"class":53},[39,151828,1117],{"class":45},[39,151830,150770],{"class":53},[19,151832,151833],{},"类属性属于类，所有对象共享：",[30,151835,151837],{"className":31353,"code":151836,"language":31355,"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",[26,151838,151839,151847,151857,151861,151869,151879,151883,151887,151900,151914,151918,151925,151932],{"__ignoreMap":35},[39,151840,151841,151843,151845],{"class":41,"line":42},[39,151842,15667],{"class":45},[39,151844,8972],{"class":49},[39,151846,4822],{"class":53},[39,151848,151849,151852,151854],{"class":41,"line":92},[39,151850,151851],{"class":53},"    school ",[39,151853,1117],{"class":45},[39,151855,151856],{"class":237}," \"黑马学校\"\n",[39,151858,151859],{"class":41,"line":112},[39,151860,122],{"emptyLinePlaceholder":121},[39,151862,151863,151865,151867],{"class":41,"line":118},[39,151864,31776],{"class":45},[39,151866,31779],{"class":74},[39,151868,151585],{"class":53},[39,151870,151871,151873,151875,151877],{"class":41,"line":125},[39,151872,31820],{"class":74},[39,151874,150765],{"class":53},[39,151876,1117],{"class":45},[39,151878,150770],{"class":53},[39,151880,151881],{"class":41,"line":132},[39,151882,122],{"emptyLinePlaceholder":121},[39,151884,151885],{"class":41,"line":138},[39,151886,122],{"emptyLinePlaceholder":121},[39,151888,151889,151892,151894,151896,151898],{"class":41,"line":169},[39,151890,151891],{"class":53},"s1 ",[39,151893,1117],{"class":45},[39,151895,150860],{"class":53},[39,151897,150863],{"class":237},[39,151899,574],{"class":53},[39,151901,151902,151905,151907,151909,151912],{"class":41,"line":190},[39,151903,151904],{"class":53},"s2 ",[39,151906,1117],{"class":45},[39,151908,150860],{"class":53},[39,151910,151911],{"class":237},"\"小红\"",[39,151913,574],{"class":53},[39,151915,151916],{"class":41,"line":202},[39,151917,122],{"emptyLinePlaceholder":121},[39,151919,151920,151922],{"class":41,"line":207},[39,151921,31390],{"class":74},[39,151923,151924],{"class":53},"(s1.school)\n",[39,151926,151927,151929],{"class":41,"line":212},[39,151928,31390],{"class":74},[39,151930,151931],{"class":53},"(s2.school)\n",[39,151933,151934,151936],{"class":41,"line":223},[39,151935,31390],{"class":74},[39,151937,151938],{"class":53},"(Student.school)\n",[19,151940,151941],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151943,151945],{"id":151944},"_1113-类方法和静态方法","11.13 类方法和静态方法",[476,151947,151949],{"id":151948},"_11131-类方法","11.13.1 类方法",[19,151951,151952,151953,151956,151957,29360],{},"类方法使用 ",[26,151954,151955],{},"@classmethod","，第一个参数通常是 ",[26,151958,151959],{},"cls",[30,151961,151963],{"className":31353,"code":151962,"language":31355,"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",[26,151964,151965,151973,151981,151985,151993,152003,152013,152017,152021],{"__ignoreMap":35},[39,151966,151967,151969,151971],{"class":41,"line":42},[39,151968,15667],{"class":45},[39,151970,8972],{"class":49},[39,151972,4822],{"class":53},[39,151974,151975,151977,151979],{"class":41,"line":92},[39,151976,151851],{"class":53},[39,151978,1117],{"class":45},[39,151980,151856],{"class":237},[39,151982,151983],{"class":41,"line":112},[39,151984,122],{"emptyLinePlaceholder":121},[39,151986,151987,151990],{"class":41,"line":118},[39,151988,151989],{"class":49},"    @",[39,151991,151992],{"class":74},"classmethod\n",[39,151994,151995,151997,152000],{"class":41,"line":125},[39,151996,31776],{"class":45},[39,151998,151999],{"class":49}," get_school",[39,152001,152002],{"class":53},"(cls):\n",[39,152004,152005,152007,152010],{"class":41,"line":132},[39,152006,15725],{"class":45},[39,152008,152009],{"class":74}," cls",[39,152011,152012],{"class":53},".school\n",[39,152014,152015],{"class":41,"line":138},[39,152016,122],{"emptyLinePlaceholder":121},[39,152018,152019],{"class":41,"line":169},[39,152020,122],{"emptyLinePlaceholder":121},[39,152022,152023,152025],{"class":41,"line":190},[39,152024,31390],{"class":74},[39,152026,152027],{"class":53},"(Student.get_school())\n",[476,152029,152031],{"id":152030},"_11132-静态方法","11.13.2 静态方法",[19,152033,152034,152035,152038],{},"静态方法使用 ",[26,152036,152037],{},"@staticmethod","，不需要访问实例和类。",[30,152040,152042],{"className":31353,"code":152041,"language":31355,"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",[26,152043,152044,152053,152060,152069,152080,152084,152088],{"__ignoreMap":35},[39,152045,152046,152048,152051],{"class":41,"line":42},[39,152047,15667],{"class":45},[39,152049,152050],{"class":49}," MathUtils",[39,152052,4822],{"class":53},[39,152054,152055,152057],{"class":41,"line":92},[39,152056,151989],{"class":49},[39,152058,152059],{"class":74},"staticmethod\n",[39,152061,152062,152064,152066],{"class":41,"line":112},[39,152063,31776],{"class":45},[39,152065,6289],{"class":49},[39,152067,152068],{"class":53},"(a, b):\n",[39,152070,152071,152073,152075,152077],{"class":41,"line":118},[39,152072,15725],{"class":45},[39,152074,98],{"class":53},[39,152076,101],{"class":45},[39,152078,152079],{"class":53}," b\n",[39,152081,152082],{"class":41,"line":125},[39,152083,122],{"emptyLinePlaceholder":121},[39,152085,152086],{"class":41,"line":132},[39,152087,122],{"emptyLinePlaceholder":121},[39,152089,152090,152092,152095,152097,152099,152101],{"class":41,"line":138},[39,152091,31390],{"class":74},[39,152093,152094],{"class":53},"(MathUtils.add(",[39,152096,1483],{"class":74},[39,152098,63],{"class":53},[39,152100,1345],{"class":74},[39,152102,31472],{"class":53},[19,152104,152105],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152107,152109],{"id":152108},"_1114-dataclass","11.14 dataclass",[19,152111,152112,152115],{},[26,152113,152114],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[30,152117,152119],{"className":31353,"code":152118,"language":31355,"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",[26,152120,152121,152133,152137,152141,152146,152154,152162,152170,152178,152182,152186,152206],{"__ignoreMap":35},[39,152122,152123,152125,152128,152130],{"class":41,"line":42},[39,152124,31712],{"class":45},[39,152126,152127],{"class":53}," dataclasses ",[39,152129,31367],{"class":45},[39,152131,152132],{"class":53}," dataclass\n",[39,152134,152135],{"class":41,"line":92},[39,152136,122],{"emptyLinePlaceholder":121},[39,152138,152139],{"class":41,"line":112},[39,152140,122],{"emptyLinePlaceholder":121},[39,152142,152143],{"class":41,"line":118},[39,152144,152145],{"class":49},"@dataclass\n",[39,152147,152148,152150,152152],{"class":41,"line":125},[39,152149,15667],{"class":45},[39,152151,8972],{"class":49},[39,152153,4822],{"class":53},[39,152155,152156,152159],{"class":41,"line":132},[39,152157,152158],{"class":53},"    name: ",[39,152160,152161],{"class":74},"str\n",[39,152163,152164,152167],{"class":41,"line":138},[39,152165,152166],{"class":53},"    age: ",[39,152168,152169],{"class":74},"int\n",[39,152171,152172,152175],{"class":41,"line":169},[39,152173,152174],{"class":53},"    score: ",[39,152176,152177],{"class":74},"float\n",[39,152179,152180],{"class":41,"line":190},[39,152181,122],{"emptyLinePlaceholder":121},[39,152183,152184],{"class":41,"line":202},[39,152185,122],{"emptyLinePlaceholder":121},[39,152187,152188,152190,152192,152194,152196,152198,152200,152202,152204],{"class":41,"line":207},[39,152189,150456],{"class":53},[39,152191,1117],{"class":45},[39,152193,150860],{"class":53},[39,152195,150863],{"class":237},[39,152197,63],{"class":53},[39,152199,1911],{"class":74},[39,152201,63],{"class":53},[39,152203,2249],{"class":74},[39,152205,574],{"class":53},[39,152207,152208,152210],{"class":41,"line":212},[39,152209,31390],{"class":74},[39,152211,151017],{"class":53},[19,152213,152214,152215,1478,152217,152220],{},"它会自动生成 ",[26,152216,31804],{},[26,152218,152219],{},"__repr__"," 等方法。适合数据模型类。",[14,152222,152224],{"id":152223},"_1115-小案例学生类","11.15 小案例：学生类",[30,152226,152228],{"className":31353,"code":152227,"language":31355,"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",[26,152229,152230,152238,152247,152259,152269,152279,152289,152293,152302,152315,152319,152328,152334,152346,152358,152370,152382,152386,152390,152396,152406,152415,152425,152433,152441,152450,152454,152458,152466,152502,152506,152510,152535,152542],{"__ignoreMap":35},[39,152231,152232,152234,152236],{"class":41,"line":42},[39,152233,15667],{"class":45},[39,152235,8972],{"class":49},[39,152237,4822],{"class":53},[39,152239,152240,152242,152244],{"class":41,"line":92},[39,152241,31776],{"class":45},[39,152243,31779],{"class":74},[39,152245,152246],{"class":53},"(self, student_id, name, age, score):\n",[39,152248,152249,152251,152254,152256],{"class":41,"line":112},[39,152250,31820],{"class":74},[39,152252,152253],{"class":53},".student_id ",[39,152255,1117],{"class":45},[39,152257,152258],{"class":53}," student_id\n",[39,152260,152261,152263,152265,152267],{"class":41,"line":118},[39,152262,31820],{"class":74},[39,152264,150765],{"class":53},[39,152266,1117],{"class":45},[39,152268,150770],{"class":53},[39,152270,152271,152273,152275,152277],{"class":41,"line":125},[39,152272,31820],{"class":74},[39,152274,150777],{"class":53},[39,152276,1117],{"class":45},[39,152278,150782],{"class":53},[39,152280,152281,152283,152285,152287],{"class":41,"line":132},[39,152282,31820],{"class":74},[39,152284,150789],{"class":53},[39,152286,1117],{"class":45},[39,152288,2700],{"class":53},[39,152290,152291],{"class":41,"line":138},[39,152292,122],{"emptyLinePlaceholder":121},[39,152294,152295,152297,152300],{"class":41,"line":169},[39,152296,31776],{"class":45},[39,152298,152299],{"class":49}," is_passed",[39,152301,31782],{"class":53},[39,152303,152304,152306,152308,152310,152312],{"class":41,"line":190},[39,152305,15725],{"class":45},[39,152307,39848],{"class":74},[39,152309,150789],{"class":53},[39,152311,2820],{"class":45},[39,152313,152314],{"class":74}," 60\n",[39,152316,152317],{"class":41,"line":202},[39,152318,122],{"emptyLinePlaceholder":121},[39,152320,152321,152323,152326],{"class":41,"line":207},[39,152322,31776],{"class":45},[39,152324,152325],{"class":49}," to_dict",[39,152327,31782],{"class":53},[39,152329,152330,152332],{"class":41,"line":212},[39,152331,15725],{"class":45},[39,152333,16545],{"class":53},[39,152335,152336,152339,152341,152343],{"class":41,"line":223},[39,152337,152338],{"class":237},"            \"student_id\"",[39,152340,52412],{"class":53},[39,152342,31798],{"class":74},[39,152344,152345],{"class":53},".student_id,\n",[39,152347,152348,152351,152353,152355],{"class":41,"line":228},[39,152349,152350],{"class":237},"            \"name\"",[39,152352,52412],{"class":53},[39,152354,31798],{"class":74},[39,152356,152357],{"class":53},".name,\n",[39,152359,152360,152363,152365,152367],{"class":41,"line":263},[39,152361,152362],{"class":237},"            \"age\"",[39,152364,52412],{"class":53},[39,152366,31798],{"class":74},[39,152368,152369],{"class":53},".age,\n",[39,152371,152372,152375,152377,152379],{"class":41,"line":287},[39,152373,152374],{"class":237},"            \"score\"",[39,152376,52412],{"class":53},[39,152378,31798],{"class":74},[39,152380,152381],{"class":53},".score,\n",[39,152383,152384],{"class":41,"line":292},[39,152385,3622],{"class":53},[39,152387,152388],{"class":41,"line":305},[39,152389,122],{"emptyLinePlaceholder":121},[39,152391,152392,152394],{"class":41,"line":310},[39,152393,151989],{"class":49},[39,152395,151992],{"class":74},[39,152397,152398,152400,152403],{"class":41,"line":321},[39,152399,31776],{"class":45},[39,152401,152402],{"class":49}," from_dict",[39,152404,152405],{"class":53},"(cls, data):\n",[39,152407,152408,152410,152412],{"class":41,"line":713},[39,152409,15725],{"class":45},[39,152411,152009],{"class":74},[39,152413,152414],{"class":53},"(\n",[39,152416,152417,152420,152423],{"class":41,"line":718},[39,152418,152419],{"class":53},"            data[",[39,152421,152422],{"class":237},"\"student_id\"",[39,152424,88811],{"class":53},[39,152426,152427,152429,152431],{"class":41,"line":723},[39,152428,152419],{"class":53},[39,152430,63654],{"class":237},[39,152432,88811],{"class":53},[39,152434,152435,152437,152439],{"class":41,"line":729},[39,152436,152419],{"class":53},[39,152438,70099],{"class":237},[39,152440,88811],{"class":53},[39,152442,152443,152445,152448],{"class":41,"line":735},[39,152444,152419],{"class":53},[39,152446,152447],{"class":237},"\"score\"",[39,152449,88811],{"class":53},[39,152451,152452],{"class":41,"line":741},[39,152453,39101],{"class":53},[39,152455,152456],{"class":41,"line":747},[39,152457,122],{"emptyLinePlaceholder":121},[39,152459,152460,152462,152464],{"class":41,"line":753},[39,152461,31776],{"class":45},[39,152463,150956],{"class":74},[39,152465,31782],{"class":53},[39,152467,152468,152470,152472,152474,152476,152479,152481,152484,152486,152488,152490,152492,152494,152496,152498,152500],{"class":41,"line":758},[39,152469,15725],{"class":45},[39,152471,150965],{"class":45},[39,152473,1516],{"class":237},[39,152475,150427],{"class":74},[39,152477,152478],{"class":53},".student_id",[39,152480,2206],{"class":74},[39,152482,152483],{"class":74}," {self",[39,152485,81276],{"class":53},[39,152487,2206],{"class":74},[39,152489,152483],{"class":74},[39,152491,81288],{"class":53},[39,152493,2206],{"class":74},[39,152495,152483],{"class":74},[39,152497,150837],{"class":53},[39,152499,2206],{"class":74},[39,152501,26108],{"class":237},[39,152503,152504],{"class":41,"line":763},[39,152505,122],{"emptyLinePlaceholder":121},[39,152507,152508],{"class":41,"line":772},[39,152509,122],{"emptyLinePlaceholder":121},[39,152511,152512,152514,152516,152518,152521,152523,152525,152527,152529,152531,152533],{"class":41,"line":777},[39,152513,150456],{"class":53},[39,152515,1117],{"class":45},[39,152517,150860],{"class":53},[39,152519,152520],{"class":237},"\"001\"",[39,152522,63],{"class":53},[39,152524,150863],{"class":237},[39,152526,63],{"class":53},[39,152528,1911],{"class":74},[39,152530,63],{"class":53},[39,152532,2249],{"class":74},[39,152534,574],{"class":53},[39,152536,152537,152539],{"class":41,"line":785},[39,152538,31390],{"class":74},[39,152540,152541],{"class":53},"(student.is_passed())\n",[39,152543,152544,152546],{"class":41,"line":796},[39,152545,31390],{"class":74},[39,152547,152548],{"class":53},"(student.to_dict())\n",[19,152550,152551,101993,152554,152557],{},[26,152552,152553],{},"to_dict()",[26,152555,152556],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152559,152561],{"id":152560},"_1116-易错点","11.16 易错点",[328,152563,152564,152570,152576,152581,152584,152587],{},[331,152565,152566,152567,29360],{},"类名推荐使用大驼峰，如 ",[26,152568,152569],{},"StudentManager",[331,152571,152572,152573,152575],{},"方法第一个参数必须写 ",[26,152574,31798],{},"，调用时不用传。",[331,152577,152578,152580],{},[26,152579,31804],{}," 不是普通方法，它在创建对象时自动执行。",[331,152582,152583],{},"私有属性不是绝对安全，只是约定和名称改写。",[331,152585,152586],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[331,152588,152589],{},"类中方法太多时，说明职责可能过重。",[14,152591,152593],{"id":152592},"_1117-本章练习","11.17 本章练习",[328,152595,152596,152602,152608,152613,152626],{},[331,152597,152598,152599,152601],{},"定义 ",[26,152600,150543],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[331,152603,152598,152604,152607],{},[26,152605,152606],{},"Account"," 类，实现存款、取款、查询余额。",[331,152609,152598,152610,152612],{},[26,152611,18199],{}," 类，计算圆的周长和面积。",[331,152614,152598,152615,1478,152618,152621,152622,152625],{},[26,152616,152617],{},"Dog",[26,152619,152620],{},"Cat"," 类，并用同一个函数调用它们的 ",[26,152623,152624],{},"speak()"," 方法。",[331,152627,105341,152628,152630,152631,29360],{},[26,152629,152114],{}," 定义一个商品类 ",[26,152632,152633],{},"Product",[1192,152635,152636],{},"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":92,"depth":92,"links":152638},[152639,152640,152641,152642,152643,152644,152646,152647,152648,152649,152650,152651,152652,152656,152657,152658,152659],{"id":150307,"depth":92,"text":150308},{"id":150490,"depth":92,"text":150491},{"id":150554,"depth":92,"text":150555},{"id":150631,"depth":92,"text":150632},{"id":150730,"depth":92,"text":150731},{"id":150894,"depth":92,"text":152645},"11.6 str",{"id":151020,"depth":92,"text":151021},{"id":151286,"depth":92,"text":151287},{"id":151400,"depth":92,"text":151401},{"id":151555,"depth":92,"text":151556},{"id":151679,"depth":92,"text":151680},{"id":151795,"depth":92,"text":151796},{"id":151944,"depth":92,"text":151945,"children":152653},[152654,152655],{"id":151948,"depth":112,"text":151949},{"id":152030,"depth":112,"text":152031},{"id":152108,"depth":92,"text":152109},{"id":152223,"depth":92,"text":152224},{"id":152560,"depth":92,"text":152561},{"id":152592,"depth":92,"text":152593},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150299,"description":24350},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152666,"title":152667,"body":152668,"description":24350,"extension":1203,"meta":155981,"navigation":121,"path":155982,"seo":155983,"stem":155984,"__hash__":155985},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152669,"toc":155957},[152670,152673,152677,152680,152683,152712,152715,152723,152727,152731,152734,152757,152760,152766,152770,154216,154219,154240,154244,154247,154259,154262,154446,154449,154575,154578,154582,154586,154722,154726,154812,154816,154898,154902,154939,154943,155132,155136,155139,155369,155373,155376,155557,155560,155564,155567,155573,155576,155602,155606,155609,155623,155626,155651,155654,155668,155671,155688,155691,155708,155711,155728,155732,155758,155762,155785,155789,155792,155794,155800,155802,155823,155826,155832,155838,155842,155845,155921,155924,155928,155954],[10,152671,152667],{"id":152672},"_12-综合案例与复习路线",[14,152674,152676],{"id":152675},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152678,152679],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152681,152682],{},"一个合格的入门综合项目最好覆盖：",[328,152684,152685,152688,152691,152694,152697,152700,152703,152706,152709],{},[331,152686,152687],{},"输入输出。",[331,152689,152690],{},"判断和循环。",[331,152692,152693],{},"函数拆分。",[331,152695,152696],{},"列表、字典等容器。",[331,152698,152699],{},"文件持久化。",[331,152701,152702],{},"异常处理。",[331,152704,152705],{},"模块拆分。",[331,152707,152708],{},"可选：面向对象。",[331,152710,152711],{},"可选：数据可视化。",[19,152713,152714],{},"本章整理两个方向：",[328,152716,152717,152720],{},[331,152718,152719],{},"学生管理系统。",[331,152721,152722],{},"销售数据统计和可视化。",[14,152724,152726],{"id":152725},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[476,152728,152730],{"id":152729},"_1221-需求","12.2.1 需求",[19,152732,152733],{},"实现一个命令行学生管理系统：",[328,152735,152736,152739,152742,152745,152748,152751,152754],{},[331,152737,152738],{},"添加学生。",[331,152740,152741],{},"删除学生。",[331,152743,152744],{},"修改学生。",[331,152746,152747],{},"查询学生。",[331,152749,152750],{},"显示所有学生。",[331,152752,152753],{},"保存到 JSON 文件。",[331,152755,152756],{},"程序启动时自动读取 JSON 文件。",[19,152758,152759],{},"学生字段：",[30,152761,152764],{"className":152762,"code":152763,"language":6267,"meta":35},[6265],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[26,152765,152763],{"__ignoreMap":35},[14,152767,152769],{"id":152768},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[30,152771,152773],{"className":31353,"code":152772,"language":31355,"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",[26,152774,152775,152781,152791,152795,152809,152813,152817,152826,152838,152844,152848,152854,152885,152895,152902,152913,152919,152923,152927,152937,152968,152994,152998,153002,153011,153022,153033,153044,153055,153066,153077,153088,153092,153096,153106,153118,153134,153141,153148,153152,153156,153166,153174,153181,153194,153204,153215,153219,153223,153232,153240,153246,153258,153266,153277,153281,153285,153294,153310,153314,153321,153332,153337,153341,153357,153372,153387,153391,153396,153404,153412,153420,153428,153432,153437,153448,153452,153456,153465,153480,153490,153494,153506,153517,153521,153525,153530,153534,153545,153549,153553,153562,153577,153585,153589,153601,153611,153615,153619,153634,153647,153660,153664,153677,153689,153701,153705,153709,153720,153724,153728,153737,153752,153760,153764,153776,153786,153790,153794,153799,153803,153807,153817,153823,153845,153864,153883,153902,153907,153911,153915,153924,153932,153943,153947,153951,153977,153987,153992,153996,154000,154008,154018,154022,154030,154035,154051,154055,154069,154074,154088,154093,154106,154111,154124,154129,154142,154147,154160,154171,154175,154181,154192,154196,154200,154212],{"__ignoreMap":35},[39,152776,152777,152779],{"class":41,"line":42},[39,152778,31367],{"class":45},[39,152780,148066],{"class":53},[39,152782,152783,152785,152787,152789],{"class":41,"line":92},[39,152784,31712],{"class":45},[39,152786,109286],{"class":53},[39,152788,31367],{"class":45},[39,152790,109291],{"class":53},[39,152792,152793],{"class":41,"line":112},[39,152794,122],{"emptyLinePlaceholder":121},[39,152796,152797,152800,152802,152804,152807],{"class":41,"line":118},[39,152798,152799],{"class":74},"DATA_FILE",[39,152801,71],{"class":45},[39,152803,109520],{"class":53},[39,152805,152806],{"class":237},"\"students.json\"",[39,152808,574],{"class":53},[39,152810,152811],{"class":41,"line":125},[39,152812,122],{"emptyLinePlaceholder":121},[39,152814,152815],{"class":41,"line":132},[39,152816,122],{"emptyLinePlaceholder":121},[39,152818,152819,152821,152824],{"class":41,"line":138},[39,152820,32922],{"class":45},[39,152822,152823],{"class":49}," load_students",[39,152825,32928],{"class":53},[39,152827,152828,152830,152832,152835],{"class":41,"line":169},[39,152829,4184],{"class":45},[39,152831,39905],{"class":45},[39,152833,152834],{"class":74}," DATA_FILE",[39,152836,152837],{"class":53},".exists():\n",[39,152839,152840,152842],{"class":41,"line":190},[39,152841,15725],{"class":45},[39,152843,52813],{"class":53},[39,152845,152846],{"class":41,"line":202},[39,152847,122],{"emptyLinePlaceholder":121},[39,152849,152850,152852],{"class":41,"line":207},[39,152851,126759],{"class":45},[39,152853,4822],{"class":53},[39,152855,152856,152859,152861,152863,152865,152867,152869,152871,152873,152875,152877,152879,152881,152883],{"class":41,"line":212},[39,152857,152858],{"class":45},"        with",[39,152860,147766],{"class":74},[39,152862,54],{"class":53},[39,152864,152799],{"class":74},[39,152866,63],{"class":53},[39,152868,147776],{"class":237},[39,152870,63],{"class":53},[39,152872,147781],{"class":59},[39,152874,1117],{"class":45},[39,152876,147786],{"class":237},[39,152878,255],{"class":53},[39,152880,32358],{"class":45},[39,152882,149128],{"class":59},[39,152884,4822],{"class":53},[39,152886,152887,152889,152891,152893],{"class":41,"line":223},[39,152888,16705],{"class":45},[39,152890,149139],{"class":53},[39,152892,46329],{"class":59},[39,152894,574],{"class":53},[39,152896,152897,152899],{"class":41,"line":228},[39,152898,126787],{"class":45},[39,152900,152901],{"class":53}," json.JSONDecodeError:\n",[39,152903,152904,152906,152908,152911],{"class":41,"line":263},[39,152905,33426],{"class":74},[39,152907,54],{"class":53},[39,152909,152910],{"class":237},"\"数据文件格式错误，已使用空数据启动\"",[39,152912,574],{"class":53},[39,152914,152915,152917],{"class":41,"line":287},[39,152916,15725],{"class":45},[39,152918,52813],{"class":53},[39,152920,152921],{"class":41,"line":292},[39,152922,122],{"emptyLinePlaceholder":121},[39,152924,152925],{"class":41,"line":305},[39,152926,122],{"emptyLinePlaceholder":121},[39,152928,152929,152931,152934],{"class":41,"line":310},[39,152930,32922],{"class":45},[39,152932,152933],{"class":49}," save_students",[39,152935,152936],{"class":53},"(students):\n",[39,152938,152939,152941,152943,152945,152947,152949,152952,152954,152956,152958,152960,152962,152964,152966],{"class":41,"line":321},[39,152940,35153],{"class":45},[39,152942,147766],{"class":74},[39,152944,54],{"class":53},[39,152946,152799],{"class":74},[39,152948,63],{"class":53},[39,152950,152951],{"class":237},"\"w\"",[39,152953,63],{"class":53},[39,152955,147781],{"class":59},[39,152957,1117],{"class":45},[39,152959,147786],{"class":237},[39,152961,255],{"class":53},[39,152963,32358],{"class":45},[39,152965,149128],{"class":59},[39,152967,4822],{"class":53},[39,152969,152970,152973,152975,152977,152979,152981,152983,152985,152988,152990,152992],{"class":41,"line":713},[39,152971,152972],{"class":53},"        json.dump(students, ",[39,152974,46329],{"class":59},[39,152976,63],{"class":53},[39,152978,148112],{"class":59},[39,152980,1117],{"class":45},[39,152982,34962],{"class":74},[39,152984,63],{"class":53},[39,152986,152987],{"class":59},"indent",[39,152989,1117],{"class":45},[39,152991,1345],{"class":74},[39,152993,574],{"class":53},[39,152995,152996],{"class":41,"line":718},[39,152997,122],{"emptyLinePlaceholder":121},[39,152999,153000],{"class":41,"line":723},[39,153001,122],{"emptyLinePlaceholder":121},[39,153003,153004,153006,153009],{"class":41,"line":729},[39,153005,32922],{"class":45},[39,153007,153008],{"class":49}," show_menu",[39,153010,32928],{"class":53},[39,153012,153013,153015,153017,153020],{"class":41,"line":735},[39,153014,32274],{"class":74},[39,153016,54],{"class":53},[39,153018,153019],{"class":237},"\"====== 学生管理系统 ======\"",[39,153021,574],{"class":53},[39,153023,153024,153026,153028,153031],{"class":41,"line":741},[39,153025,32274],{"class":74},[39,153027,54],{"class":53},[39,153029,153030],{"class":237},"\"1. 添加学生\"",[39,153032,574],{"class":53},[39,153034,153035,153037,153039,153042],{"class":41,"line":747},[39,153036,32274],{"class":74},[39,153038,54],{"class":53},[39,153040,153041],{"class":237},"\"2. 删除学生\"",[39,153043,574],{"class":53},[39,153045,153046,153048,153050,153053],{"class":41,"line":753},[39,153047,32274],{"class":74},[39,153049,54],{"class":53},[39,153051,153052],{"class":237},"\"3. 修改学生\"",[39,153054,574],{"class":53},[39,153056,153057,153059,153061,153064],{"class":41,"line":758},[39,153058,32274],{"class":74},[39,153060,54],{"class":53},[39,153062,153063],{"class":237},"\"4. 查询学生\"",[39,153065,574],{"class":53},[39,153067,153068,153070,153072,153075],{"class":41,"line":763},[39,153069,32274],{"class":74},[39,153071,54],{"class":53},[39,153073,153074],{"class":237},"\"5. 显示所有学生\"",[39,153076,574],{"class":53},[39,153078,153079,153081,153083,153086],{"class":41,"line":772},[39,153080,32274],{"class":74},[39,153082,54],{"class":53},[39,153084,153085],{"class":237},"\"0. 退出系统\"",[39,153087,574],{"class":53},[39,153089,153090],{"class":41,"line":777},[39,153091,122],{"emptyLinePlaceholder":121},[39,153093,153094],{"class":41,"line":785},[39,153095,122],{"emptyLinePlaceholder":121},[39,153097,153098,153100,153103],{"class":41,"line":796},[39,153099,32922],{"class":45},[39,153101,153102],{"class":49}," find_student",[39,153104,153105],{"class":53},"(students, student_id):\n",[39,153107,153108,153110,153113,153115],{"class":41,"line":808},[39,153109,4284],{"class":45},[39,153111,153112],{"class":53}," student ",[39,153114,27018],{"class":45},[39,153116,153117],{"class":53}," students:\n",[39,153119,153120,153122,153125,153127,153129,153131],{"class":41,"line":823},[39,153121,3590],{"class":45},[39,153123,153124],{"class":53}," student[",[39,153126,152422],{"class":237},[39,153128,5524],{"class":53},[39,153130,4032],{"class":45},[39,153132,153133],{"class":53}," student_id:\n",[39,153135,153136,153138],{"class":41,"line":839},[39,153137,16705],{"class":45},[39,153139,153140],{"class":53}," student\n",[39,153142,153143,153145],{"class":41,"line":845},[39,153144,95],{"class":45},[39,153146,153147],{"class":74}," None\n",[39,153149,153150],{"class":41,"line":856},[39,153151,122],{"emptyLinePlaceholder":121},[39,153153,153154],{"class":41,"line":861},[39,153155,122],{"emptyLinePlaceholder":121},[39,153157,153158,153160,153163],{"class":41,"line":870},[39,153159,32922],{"class":45},[39,153161,153162],{"class":49}," input_int",[39,153164,153165],{"class":53},"(prompt):\n",[39,153167,153168,153170,153172],{"class":41,"line":9084},[39,153169,3348],{"class":45},[39,153171,96267],{"class":74},[39,153173,4822],{"class":53},[39,153175,153176,153179],{"class":41,"line":9090},[39,153177,153178],{"class":45},"        try",[39,153180,4822],{"class":53},[39,153182,153183,153185,153187,153189,153191],{"class":41,"line":9102},[39,153184,16705],{"class":45},[39,153186,963],{"class":74},[39,153188,54],{"class":53},[39,153190,54796],{"class":74},[39,153192,153193],{"class":53},"(prompt))\n",[39,153195,153196,153199,153202],{"class":41,"line":9114},[39,153197,153198],{"class":45},"        except",[39,153200,153201],{"class":74}," ValueError",[39,153203,4822],{"class":53},[39,153205,153206,153208,153210,153213],{"class":41,"line":9126},[39,153207,35625],{"class":74},[39,153209,54],{"class":53},[39,153211,153212],{"class":237},"\"请输入整数\"",[39,153214,574],{"class":53},[39,153216,153217],{"class":41,"line":10784},[39,153218,122],{"emptyLinePlaceholder":121},[39,153220,153221],{"class":41,"line":10809},[39,153222,122],{"emptyLinePlaceholder":121},[39,153224,153225,153227,153230],{"class":41,"line":10832},[39,153226,32922],{"class":45},[39,153228,153229],{"class":49}," input_float",[39,153231,153165],{"class":53},[39,153233,153234,153236,153238],{"class":41,"line":10856},[39,153235,3348],{"class":45},[39,153237,96267],{"class":74},[39,153239,4822],{"class":53},[39,153241,153242,153244],{"class":41,"line":10861},[39,153243,153178],{"class":45},[39,153245,4822],{"class":53},[39,153247,153248,153250,153252,153254,153256],{"class":41,"line":10866},[39,153249,16705],{"class":45},[39,153251,110772],{"class":74},[39,153253,54],{"class":53},[39,153255,54796],{"class":74},[39,153257,153193],{"class":53},[39,153259,153260,153262,153264],{"class":41,"line":10871},[39,153261,153198],{"class":45},[39,153263,153201],{"class":74},[39,153265,4822],{"class":53},[39,153267,153268,153270,153272,153275],{"class":41,"line":10880},[39,153269,35625],{"class":74},[39,153271,54],{"class":53},[39,153273,153274],{"class":237},"\"请输入数字\"",[39,153276,574],{"class":53},[39,153278,153279],{"class":41,"line":10885},[39,153280,122],{"emptyLinePlaceholder":121},[39,153282,153283],{"class":41,"line":10891},[39,153284,122],{"emptyLinePlaceholder":121},[39,153286,153287,153289,153292],{"class":41,"line":10912},[39,153288,32922],{"class":45},[39,153290,153291],{"class":49}," add_student",[39,153293,152936],{"class":53},[39,153295,153296,153299,153301,153303,153305,153308],{"class":41,"line":10918},[39,153297,153298],{"class":53},"    student_id ",[39,153300,1117],{"class":45},[39,153302,61580],{"class":74},[39,153304,54],{"class":53},[39,153306,153307],{"class":237},"\"请输入学号:\"",[39,153309,574],{"class":53},[39,153311,153312],{"class":41,"line":10932},[39,153313,122],{"emptyLinePlaceholder":121},[39,153315,153316,153318],{"class":41,"line":10938},[39,153317,4184],{"class":45},[39,153319,153320],{"class":53}," find_student(students, student_id):\n",[39,153322,153323,153325,153327,153330],{"class":41,"line":10965},[39,153324,33426],{"class":74},[39,153326,54],{"class":53},[39,153328,153329],{"class":237},"\"学号已存在\"",[39,153331,574],{"class":53},[39,153333,153334],{"class":41,"line":10974},[39,153335,153336],{"class":45},"        return\n",[39,153338,153339],{"class":41,"line":10980},[39,153340,122],{"emptyLinePlaceholder":121},[39,153342,153343,153346,153348,153350,153352,153355],{"class":41,"line":10988},[39,153344,153345],{"class":53},"    name ",[39,153347,1117],{"class":45},[39,153349,61580],{"class":74},[39,153351,54],{"class":53},[39,153353,153354],{"class":237},"\"请输入姓名:\"",[39,153356,574],{"class":53},[39,153358,153359,153362,153364,153367,153370],{"class":41,"line":10993},[39,153360,153361],{"class":53},"    age ",[39,153363,1117],{"class":45},[39,153365,153366],{"class":53}," input_int(",[39,153368,153369],{"class":237},"\"请输入年龄:\"",[39,153371,574],{"class":53},[39,153373,153374,153377,153379,153382,153385],{"class":41,"line":17577},[39,153375,153376],{"class":53},"    score ",[39,153378,1117],{"class":45},[39,153380,153381],{"class":53}," input_float(",[39,153383,153384],{"class":237},"\"请输入成绩:\"",[39,153386,574],{"class":53},[39,153388,153389],{"class":41,"line":17583},[39,153390,122],{"emptyLinePlaceholder":121},[39,153392,153393],{"class":41,"line":17606},[39,153394,153395],{"class":53},"    students.append({\n",[39,153397,153398,153401],{"class":41,"line":17612},[39,153399,153400],{"class":237},"        \"student_id\"",[39,153402,153403],{"class":53},": student_id,\n",[39,153405,153406,153409],{"class":41,"line":17635},[39,153407,153408],{"class":237},"        \"name\"",[39,153410,153411],{"class":53},": name,\n",[39,153413,153414,153417],{"class":41,"line":17649},[39,153415,153416],{"class":237},"        \"age\"",[39,153418,153419],{"class":53},": age,\n",[39,153421,153422,153425],{"class":41,"line":17669},[39,153423,153424],{"class":237},"        \"score\"",[39,153426,153427],{"class":53},": score,\n",[39,153429,153430],{"class":41,"line":17675},[39,153431,34436],{"class":53},[39,153433,153434],{"class":41,"line":17686},[39,153435,153436],{"class":53},"    save_students(students)\n",[39,153438,153439,153441,153443,153446],{"class":41,"line":17709},[39,153440,32274],{"class":74},[39,153442,54],{"class":53},[39,153444,153445],{"class":237},"\"添加成功\"",[39,153447,574],{"class":53},[39,153449,153450],{"class":41,"line":17731},[39,153451,122],{"emptyLinePlaceholder":121},[39,153453,153454],{"class":41,"line":17736},[39,153455,122],{"emptyLinePlaceholder":121},[39,153457,153458,153460,153463],{"class":41,"line":17742},[39,153459,32922],{"class":45},[39,153461,153462],{"class":49}," delete_student",[39,153464,152936],{"class":53},[39,153466,153467,153469,153471,153473,153475,153478],{"class":41,"line":17756},[39,153468,153298],{"class":53},[39,153470,1117],{"class":45},[39,153472,61580],{"class":74},[39,153474,54],{"class":53},[39,153476,153477],{"class":237},"\"请输入要删除的学号:\"",[39,153479,574],{"class":53},[39,153481,153482,153485,153487],{"class":41,"line":17769},[39,153483,153484],{"class":53},"    student ",[39,153486,1117],{"class":45},[39,153488,153489],{"class":53}," find_student(students, student_id)\n",[39,153491,153492],{"class":41,"line":17774},[39,153493,122],{"emptyLinePlaceholder":121},[39,153495,153496,153498,153500,153502,153504],{"class":41,"line":17788},[39,153497,4184],{"class":45},[39,153499,153112],{"class":53},[39,153501,39902],{"class":45},[39,153503,39908],{"class":74},[39,153505,4822],{"class":53},[39,153507,153508,153510,153512,153515],{"class":41,"line":17793},[39,153509,33426],{"class":74},[39,153511,54],{"class":53},[39,153513,153514],{"class":237},"\"学生不存在\"",[39,153516,574],{"class":53},[39,153518,153519],{"class":41,"line":17799},[39,153520,153336],{"class":45},[39,153522,153523],{"class":41,"line":17804},[39,153524,122],{"emptyLinePlaceholder":121},[39,153526,153527],{"class":41,"line":17818},[39,153528,153529],{"class":53},"    students.remove(student)\n",[39,153531,153532],{"class":41,"line":17823},[39,153533,153436],{"class":53},[39,153535,153536,153538,153540,153543],{"class":41,"line":17828},[39,153537,32274],{"class":74},[39,153539,54],{"class":53},[39,153541,153542],{"class":237},"\"删除成功\"",[39,153544,574],{"class":53},[39,153546,153547],{"class":41,"line":17842},[39,153548,122],{"emptyLinePlaceholder":121},[39,153550,153551],{"class":41,"line":17854},[39,153552,122],{"emptyLinePlaceholder":121},[39,153554,153555,153557,153560],{"class":41,"line":17859},[39,153556,32922],{"class":45},[39,153558,153559],{"class":49}," update_student",[39,153561,152936],{"class":53},[39,153563,153564,153566,153568,153570,153572,153575],{"class":41,"line":17872},[39,153565,153298],{"class":53},[39,153567,1117],{"class":45},[39,153569,61580],{"class":74},[39,153571,54],{"class":53},[39,153573,153574],{"class":237},"\"请输入要修改的学号:\"",[39,153576,574],{"class":53},[39,153578,153579,153581,153583],{"class":41,"line":17877},[39,153580,153484],{"class":53},[39,153582,1117],{"class":45},[39,153584,153489],{"class":53},[39,153586,153587],{"class":41,"line":17882},[39,153588,122],{"emptyLinePlaceholder":121},[39,153590,153591,153593,153595,153597,153599],{"class":41,"line":17887},[39,153592,4184],{"class":45},[39,153594,153112],{"class":53},[39,153596,39902],{"class":45},[39,153598,39908],{"class":74},[39,153600,4822],{"class":53},[39,153602,153603,153605,153607,153609],{"class":41,"line":17900},[39,153604,33426],{"class":74},[39,153606,54],{"class":53},[39,153608,153514],{"class":237},[39,153610,574],{"class":53},[39,153612,153613],{"class":41,"line":17905},[39,153614,153336],{"class":45},[39,153616,153617],{"class":41,"line":33608},[39,153618,122],{"emptyLinePlaceholder":121},[39,153620,153621,153623,153625,153627,153629,153632],{"class":41,"line":33614},[39,153622,153345],{"class":53},[39,153624,1117],{"class":45},[39,153626,61580],{"class":74},[39,153628,54],{"class":53},[39,153630,153631],{"class":237},"\"请输入新姓名:\"",[39,153633,574],{"class":53},[39,153635,153636,153638,153640,153642,153645],{"class":41,"line":33620},[39,153637,153361],{"class":53},[39,153639,1117],{"class":45},[39,153641,153366],{"class":53},[39,153643,153644],{"class":237},"\"请输入新年龄:\"",[39,153646,574],{"class":53},[39,153648,153649,153651,153653,153655,153658],{"class":41,"line":33626},[39,153650,153376],{"class":53},[39,153652,1117],{"class":45},[39,153654,153381],{"class":53},[39,153656,153657],{"class":237},"\"请输入新成绩:\"",[39,153659,574],{"class":53},[39,153661,153662],{"class":41,"line":33632},[39,153663,122],{"emptyLinePlaceholder":121},[39,153665,153666,153669,153671,153673,153675],{"class":41,"line":33643},[39,153667,153668],{"class":53},"    student[",[39,153670,63654],{"class":237},[39,153672,5524],{"class":53},[39,153674,1117],{"class":45},[39,153676,150770],{"class":53},[39,153678,153679,153681,153683,153685,153687],{"class":41,"line":33649},[39,153680,153668],{"class":53},[39,153682,70099],{"class":237},[39,153684,5524],{"class":53},[39,153686,1117],{"class":45},[39,153688,150782],{"class":53},[39,153690,153691,153693,153695,153697,153699],{"class":41,"line":33669},[39,153692,153668],{"class":53},[39,153694,152447],{"class":237},[39,153696,5524],{"class":53},[39,153698,1117],{"class":45},[39,153700,2700],{"class":53},[39,153702,153703],{"class":41,"line":33675},[39,153704,122],{"emptyLinePlaceholder":121},[39,153706,153707],{"class":41,"line":33686},[39,153708,153436],{"class":53},[39,153710,153711,153713,153715,153718],{"class":41,"line":33692},[39,153712,32274],{"class":74},[39,153714,54],{"class":53},[39,153716,153717],{"class":237},"\"修改成功\"",[39,153719,574],{"class":53},[39,153721,153722],{"class":41,"line":33698},[39,153723,122],{"emptyLinePlaceholder":121},[39,153725,153726],{"class":41,"line":33704},[39,153727,122],{"emptyLinePlaceholder":121},[39,153729,153730,153732,153735],{"class":41,"line":33710},[39,153731,32922],{"class":45},[39,153733,153734],{"class":49}," query_student",[39,153736,152936],{"class":53},[39,153738,153739,153741,153743,153745,153747,153750],{"class":41,"line":33716},[39,153740,153298],{"class":53},[39,153742,1117],{"class":45},[39,153744,61580],{"class":74},[39,153746,54],{"class":53},[39,153748,153749],{"class":237},"\"请输入要查询的学号:\"",[39,153751,574],{"class":53},[39,153753,153754,153756,153758],{"class":41,"line":33722},[39,153755,153484],{"class":53},[39,153757,1117],{"class":45},[39,153759,153489],{"class":53},[39,153761,153762],{"class":41,"line":33728},[39,153763,122],{"emptyLinePlaceholder":121},[39,153765,153766,153768,153770,153772,153774],{"class":41,"line":33748},[39,153767,4184],{"class":45},[39,153769,153112],{"class":53},[39,153771,39902],{"class":45},[39,153773,39908],{"class":74},[39,153775,4822],{"class":53},[39,153777,153778,153780,153782,153784],{"class":41,"line":33754},[39,153779,33426],{"class":74},[39,153781,54],{"class":53},[39,153783,153514],{"class":237},[39,153785,574],{"class":53},[39,153787,153788],{"class":41,"line":33770},[39,153789,153336],{"class":45},[39,153791,153792],{"class":41,"line":33776},[39,153793,122],{"emptyLinePlaceholder":121},[39,153795,153796],{"class":41,"line":33790},[39,153797,153798],{"class":53},"    print_student(student)\n",[39,153800,153801],{"class":41,"line":33796},[39,153802,122],{"emptyLinePlaceholder":121},[39,153804,153805],{"class":41,"line":33811},[39,153806,122],{"emptyLinePlaceholder":121},[39,153808,153809,153811,153814],{"class":41,"line":33817},[39,153810,32922],{"class":45},[39,153812,153813],{"class":49}," print_student",[39,153815,153816],{"class":53},"(student):\n",[39,153818,153819,153821],{"class":41,"line":33826},[39,153820,32274],{"class":74},[39,153822,152414],{"class":53},[39,153824,153825,153828,153830,153832,153835,153838,153840,153843],{"class":41,"line":33832},[39,153826,153827],{"class":45},"        f",[39,153829,1516],{"class":237},[39,153831,2156],{"class":74},[39,153833,153834],{"class":53},"student[",[39,153836,153837],{"class":237},"'student_id'",[39,153839,2200],{"class":53},[39,153841,153842],{"class":74},"}\\t",[39,153844,26108],{"class":237},[39,153846,153847,153849,153851,153853,153855,153858,153860,153862],{"class":41,"line":33841},[39,153848,153827],{"class":45},[39,153850,1516],{"class":237},[39,153852,2156],{"class":74},[39,153854,153834],{"class":53},[39,153856,153857],{"class":237},"'name'",[39,153859,2200],{"class":53},[39,153861,153842],{"class":74},[39,153863,26108],{"class":237},[39,153865,153866,153868,153870,153872,153874,153877,153879,153881],{"class":41,"line":33847},[39,153867,153827],{"class":45},[39,153869,1516],{"class":237},[39,153871,2156],{"class":74},[39,153873,153834],{"class":53},[39,153875,153876],{"class":237},"'age'",[39,153878,2200],{"class":53},[39,153880,153842],{"class":74},[39,153882,26108],{"class":237},[39,153884,153885,153887,153889,153891,153893,153896,153898,153900],{"class":41,"line":33853},[39,153886,153827],{"class":45},[39,153888,1516],{"class":237},[39,153890,2156],{"class":74},[39,153892,153834],{"class":53},[39,153894,153895],{"class":237},"'score'",[39,153897,2200],{"class":53},[39,153899,2206],{"class":74},[39,153901,26108],{"class":237},[39,153903,153904],{"class":41,"line":33862},[39,153905,153906],{"class":53},"    )\n",[39,153908,153909],{"class":41,"line":33868},[39,153910,122],{"emptyLinePlaceholder":121},[39,153912,153913],{"class":41,"line":33879},[39,153914,122],{"emptyLinePlaceholder":121},[39,153916,153917,153919,153922],{"class":41,"line":33885},[39,153918,32922],{"class":45},[39,153920,153921],{"class":49}," show_all_students",[39,153923,152936],{"class":53},[39,153925,153926,153928,153930],{"class":41,"line":33904},[39,153927,4184],{"class":45},[39,153929,39905],{"class":45},[39,153931,153117],{"class":53},[39,153933,153934,153936,153938,153941],{"class":41,"line":33910},[39,153935,33426],{"class":74},[39,153937,54],{"class":53},[39,153939,153940],{"class":237},"\"暂无学生\"",[39,153942,574],{"class":53},[39,153944,153945],{"class":41,"line":33921},[39,153946,153336],{"class":45},[39,153948,153949],{"class":41,"line":33927},[39,153950,122],{"emptyLinePlaceholder":121},[39,153952,153953,153955,153957,153960,153962,153965,153967,153970,153972,153975],{"class":41,"line":33947},[39,153954,32274],{"class":74},[39,153956,54],{"class":53},[39,153958,153959],{"class":237},"\"学号",[39,153961,2359],{"class":74},[39,153963,153964],{"class":237},"姓名",[39,153966,2359],{"class":74},[39,153968,153969],{"class":237},"年龄",[39,153971,2359],{"class":74},[39,153973,153974],{"class":237},"成绩\"",[39,153976,574],{"class":53},[39,153978,153979,153981,153983,153985],{"class":41,"line":33963},[39,153980,4284],{"class":45},[39,153982,153112],{"class":53},[39,153984,27018],{"class":45},[39,153986,153117],{"class":53},[39,153988,153989],{"class":41,"line":33969},[39,153990,153991],{"class":53},"        print_student(student)\n",[39,153993,153994],{"class":41,"line":33983},[39,153995,122],{"emptyLinePlaceholder":121},[39,153997,153998],{"class":41,"line":33989},[39,153999,122],{"emptyLinePlaceholder":121},[39,154001,154002,154004,154006],{"class":41,"line":33995},[39,154003,32922],{"class":45},[39,154005,217],{"class":49},[39,154007,32928],{"class":53},[39,154009,154010,154013,154015],{"class":41,"line":34006},[39,154011,154012],{"class":53},"    students ",[39,154014,1117],{"class":45},[39,154016,154017],{"class":53}," load_students()\n",[39,154019,154020],{"class":41,"line":34012},[39,154021,122],{"emptyLinePlaceholder":121},[39,154023,154024,154026,154028],{"class":41,"line":34018},[39,154025,3348],{"class":45},[39,154027,96267],{"class":74},[39,154029,4822],{"class":53},[39,154031,154032],{"class":41,"line":34028},[39,154033,154034],{"class":53},"        show_menu()\n",[39,154036,154037,154040,154042,154044,154046,154049],{"class":41,"line":34034},[39,154038,154039],{"class":53},"        choice ",[39,154041,1117],{"class":45},[39,154043,61580],{"class":74},[39,154045,54],{"class":53},[39,154047,154048],{"class":237},"\"请输入操作:\"",[39,154050,574],{"class":53},[39,154052,154053],{"class":41,"line":34045},[39,154054,122],{"emptyLinePlaceholder":121},[39,154056,154057,154059,154062,154064,154067],{"class":41,"line":34051},[39,154058,3590],{"class":45},[39,154060,154061],{"class":53}," choice ",[39,154063,4032],{"class":45},[39,154065,154066],{"class":237}," \"1\"",[39,154068,4822],{"class":53},[39,154070,154071],{"class":41,"line":34061},[39,154072,154073],{"class":53},"            add_student(students)\n",[39,154075,154076,154079,154081,154083,154086],{"class":41,"line":34066},[39,154077,154078],{"class":45},"        elif",[39,154080,154061],{"class":53},[39,154082,4032],{"class":45},[39,154084,154085],{"class":237}," \"2\"",[39,154087,4822],{"class":53},[39,154089,154090],{"class":41,"line":34072},[39,154091,154092],{"class":53},"            delete_student(students)\n",[39,154094,154095,154097,154099,154101,154104],{"class":41,"line":34121},[39,154096,154078],{"class":45},[39,154098,154061],{"class":53},[39,154100,4032],{"class":45},[39,154102,154103],{"class":237}," \"3\"",[39,154105,4822],{"class":53},[39,154107,154108],{"class":41,"line":34168},[39,154109,154110],{"class":53},"            update_student(students)\n",[39,154112,154113,154115,154117,154119,154122],{"class":41,"line":34173},[39,154114,154078],{"class":45},[39,154116,154061],{"class":53},[39,154118,4032],{"class":45},[39,154120,154121],{"class":237}," \"4\"",[39,154123,4822],{"class":53},[39,154125,154126],{"class":41,"line":34179},[39,154127,154128],{"class":53},"            query_student(students)\n",[39,154130,154131,154133,154135,154137,154140],{"class":41,"line":34198},[39,154132,154078],{"class":45},[39,154134,154061],{"class":53},[39,154136,4032],{"class":45},[39,154138,154139],{"class":237}," \"5\"",[39,154141,4822],{"class":53},[39,154143,154144],{"class":41,"line":34204},[39,154145,154146],{"class":53},"            show_all_students(students)\n",[39,154148,154149,154151,154153,154155,154158],{"class":41,"line":34224},[39,154150,154078],{"class":45},[39,154152,154061],{"class":53},[39,154154,4032],{"class":45},[39,154156,154157],{"class":237}," \"0\"",[39,154159,4822],{"class":53},[39,154161,154162,154164,154166,154169],{"class":41,"line":34230},[39,154163,35625],{"class":74},[39,154165,54],{"class":53},[39,154167,154168],{"class":237},"\"退出系统\"",[39,154170,574],{"class":53},[39,154172,154173],{"class":41,"line":34236},[39,154174,116073],{"class":45},[39,154176,154177,154179],{"class":41,"line":34246},[39,154178,3627],{"class":45},[39,154180,4822],{"class":53},[39,154182,154183,154185,154187,154190],{"class":41,"line":34251},[39,154184,35625],{"class":74},[39,154186,54],{"class":53},[39,154188,154189],{"class":237},"\"输入错误\"",[39,154191,574],{"class":53},[39,154193,154194],{"class":41,"line":34257},[39,154195,122],{"emptyLinePlaceholder":121},[39,154197,154198],{"class":41,"line":34273},[39,154199,122],{"emptyLinePlaceholder":121},[39,154201,154202,154204,154206,154208,154210],{"class":41,"line":34318},[39,154203,2654],{"class":45},[39,154205,32195],{"class":74},[39,154207,102534],{"class":45},[39,154209,102537],{"class":237},[39,154211,4822],{"class":53},[39,154213,154214],{"class":41,"line":34324},[39,154215,102544],{"class":53},[19,154217,154218],{},"这个项目串联了：",[328,154220,154221,154224,154227,154230,154233,154235],{},[331,154222,154223],{},"菜单循环。",[331,154225,154226],{},"函数封装。",[331,154228,154229],{},"列表字典。",[331,154231,154232],{},"JSON 读写。",[331,154234,152702],{},[331,154236,154237,29360],{},[26,154238,154239],{},"if __name__ == \"__main__\"",[14,154241,154243],{"id":154242},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154245,154246],{},"可以进一步拆成两个类：",[328,154248,154249,154254],{},[331,154250,154251,154253],{},[26,154252,150543],{},"：表示单个学生。",[331,154255,154256,154258],{},[26,154257,152569],{},"：负责学生增删改查和文件保存。",[19,154260,154261],{},"示意代码：",[30,154263,154265],{"className":31353,"code":154264,"language":31355,"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",[26,154266,154267,154277,154281,154285,154289,154297,154304,154310,154316,154322,154326,154334,154340,154350,154360,154370,154380,154384,154388,154394,154402,154410,154418,154426,154434,154442],{"__ignoreMap":35},[39,154268,154269,154271,154273,154275],{"class":41,"line":42},[39,154270,31712],{"class":45},[39,154272,152127],{"class":53},[39,154274,31367],{"class":45},[39,154276,152132],{"class":53},[39,154278,154279],{"class":41,"line":92},[39,154280,122],{"emptyLinePlaceholder":121},[39,154282,154283],{"class":41,"line":112},[39,154284,122],{"emptyLinePlaceholder":121},[39,154286,154287],{"class":41,"line":118},[39,154288,152145],{"class":49},[39,154290,154291,154293,154295],{"class":41,"line":125},[39,154292,15667],{"class":45},[39,154294,8972],{"class":49},[39,154296,4822],{"class":53},[39,154298,154299,154302],{"class":41,"line":132},[39,154300,154301],{"class":53},"    student_id: ",[39,154303,152161],{"class":74},[39,154305,154306,154308],{"class":41,"line":138},[39,154307,152158],{"class":53},[39,154309,152161],{"class":74},[39,154311,154312,154314],{"class":41,"line":169},[39,154313,152166],{"class":53},[39,154315,152169],{"class":74},[39,154317,154318,154320],{"class":41,"line":190},[39,154319,152174],{"class":53},[39,154321,152177],{"class":74},[39,154323,154324],{"class":41,"line":202},[39,154325,122],{"emptyLinePlaceholder":121},[39,154327,154328,154330,154332],{"class":41,"line":207},[39,154329,31776],{"class":45},[39,154331,152325],{"class":49},[39,154333,31782],{"class":53},[39,154335,154336,154338],{"class":41,"line":212},[39,154337,15725],{"class":45},[39,154339,16545],{"class":53},[39,154341,154342,154344,154346,154348],{"class":41,"line":223},[39,154343,152338],{"class":237},[39,154345,52412],{"class":53},[39,154347,31798],{"class":74},[39,154349,152345],{"class":53},[39,154351,154352,154354,154356,154358],{"class":41,"line":228},[39,154353,152350],{"class":237},[39,154355,52412],{"class":53},[39,154357,31798],{"class":74},[39,154359,152357],{"class":53},[39,154361,154362,154364,154366,154368],{"class":41,"line":263},[39,154363,152362],{"class":237},[39,154365,52412],{"class":53},[39,154367,31798],{"class":74},[39,154369,152369],{"class":53},[39,154371,154372,154374,154376,154378],{"class":41,"line":287},[39,154373,152374],{"class":237},[39,154375,52412],{"class":53},[39,154377,31798],{"class":74},[39,154379,152381],{"class":53},[39,154381,154382],{"class":41,"line":292},[39,154383,3622],{"class":53},[39,154385,154386],{"class":41,"line":305},[39,154387,122],{"emptyLinePlaceholder":121},[39,154389,154390,154392],{"class":41,"line":310},[39,154391,151989],{"class":49},[39,154393,151992],{"class":74},[39,154395,154396,154398,154400],{"class":41,"line":321},[39,154397,31776],{"class":45},[39,154399,152402],{"class":49},[39,154401,152405],{"class":53},[39,154403,154404,154406,154408],{"class":41,"line":713},[39,154405,15725],{"class":45},[39,154407,152009],{"class":74},[39,154409,152414],{"class":53},[39,154411,154412,154414,154416],{"class":41,"line":718},[39,154413,152419],{"class":53},[39,154415,152422],{"class":237},[39,154417,88811],{"class":53},[39,154419,154420,154422,154424],{"class":41,"line":723},[39,154421,152419],{"class":53},[39,154423,63654],{"class":237},[39,154425,88811],{"class":53},[39,154427,154428,154430,154432],{"class":41,"line":729},[39,154429,152419],{"class":53},[39,154431,70099],{"class":237},[39,154433,88811],{"class":53},[39,154435,154436,154438,154440],{"class":41,"line":735},[39,154437,152419],{"class":53},[39,154439,152447],{"class":237},[39,154441,88811],{"class":53},[39,154443,154444],{"class":41,"line":741},[39,154445,39101],{"class":53},[19,154447,154448],{},"管理器示意：",[30,154450,154452],{"className":31353,"code":154451,"language":31355,"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",[26,154453,154454,154463,154471,154482,154486,154496,154509,154520,154527,154533,154537,154546,154555,154561,154568],{"__ignoreMap":35},[39,154455,154456,154458,154461],{"class":41,"line":42},[39,154457,15667],{"class":45},[39,154459,154460],{"class":49}," StudentManager",[39,154462,4822],{"class":53},[39,154464,154465,154467,154469],{"class":41,"line":92},[39,154466,31776],{"class":45},[39,154468,31779],{"class":74},[39,154470,31782],{"class":53},[39,154472,154473,154475,154478,154480],{"class":41,"line":112},[39,154474,31820],{"class":74},[39,154476,154477],{"class":53},".students ",[39,154479,1117],{"class":45},[39,154481,52813],{"class":53},[39,154483,154484],{"class":41,"line":118},[39,154485,122],{"emptyLinePlaceholder":121},[39,154487,154488,154490,154493],{"class":41,"line":125},[39,154489,31776],{"class":45},[39,154491,154492],{"class":49}," find_by_id",[39,154494,154495],{"class":53},"(self, student_id):\n",[39,154497,154498,154500,154502,154504,154506],{"class":41,"line":132},[39,154499,4486],{"class":45},[39,154501,153112],{"class":53},[39,154503,27018],{"class":45},[39,154505,39848],{"class":74},[39,154507,154508],{"class":53},".students:\n",[39,154510,154511,154513,154516,154518],{"class":41,"line":138},[39,154512,5723],{"class":45},[39,154514,154515],{"class":53}," student.student_id ",[39,154517,4032],{"class":45},[39,154519,153133],{"class":53},[39,154521,154522,154525],{"class":41,"line":169},[39,154523,154524],{"class":45},"                return",[39,154526,153140],{"class":53},[39,154528,154529,154531],{"class":41,"line":190},[39,154530,15725],{"class":45},[39,154532,153147],{"class":74},[39,154534,154535],{"class":41,"line":202},[39,154536,122],{"emptyLinePlaceholder":121},[39,154538,154539,154541,154543],{"class":41,"line":207},[39,154540,31776],{"class":45},[39,154542,6289],{"class":49},[39,154544,154545],{"class":53},"(self, student):\n",[39,154547,154548,154550,154552],{"class":41,"line":212},[39,154549,3590],{"class":45},[39,154551,39848],{"class":74},[39,154553,154554],{"class":53},".find_by_id(student.student_id):\n",[39,154556,154557,154559],{"class":41,"line":223},[39,154558,16705],{"class":45},[39,154560,126782],{"class":74},[39,154562,154563,154565],{"class":41,"line":228},[39,154564,31820],{"class":74},[39,154566,154567],{"class":53},".students.append(student)\n",[39,154569,154570,154572],{"class":41,"line":263},[39,154571,15725],{"class":45},[39,154573,154574],{"class":74}," True\n",[19,154576,154577],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154579,154581],{"id":154580},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[476,154583,154585],{"id":154584},"_1251-数据结构","12.5.1 数据结构",[30,154587,154589],{"className":31353,"code":154588,"language":31355,"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",[26,154590,154591,154599,154630,154660,154689,154718],{"__ignoreMap":35},[39,154592,154593,154595,154597],{"class":41,"line":42},[39,154594,149440],{"class":53},[39,154596,1117],{"class":45},[39,154598,56422],{"class":53},[39,154600,154601,154603,154605,154607,154609,154611,154614,154616,154619,154621,154623,154625,154628],{"class":41,"line":92},[39,154602,149360],{"class":53},[39,154604,148972],{"class":237},[39,154606,52412],{"class":53},[39,154608,149583],{"class":237},[39,154610,63],{"class":53},[39,154612,154613],{"class":237},"\"category\"",[39,154615,52412],{"class":53},[39,154617,154618],{"class":237},"\"手机\"",[39,154620,63],{"class":53},[39,154622,85059],{"class":237},[39,154624,52412],{"class":53},[39,154626,154627],{"class":74},"12000",[39,154629,6011],{"class":53},[39,154631,154632,154634,154636,154638,154640,154642,154644,154646,154649,154651,154653,154655,154658],{"class":41,"line":112},[39,154633,149360],{"class":53},[39,154635,148972],{"class":237},[39,154637,52412],{"class":53},[39,154639,149583],{"class":237},[39,154641,63],{"class":53},[39,154643,154613],{"class":237},[39,154645,52412],{"class":53},[39,154647,154648],{"class":237},"\"电脑\"",[39,154650,63],{"class":53},[39,154652,85059],{"class":237},[39,154654,52412],{"class":53},[39,154656,154657],{"class":74},"18000",[39,154659,6011],{"class":53},[39,154661,154662,154664,154666,154668,154670,154672,154674,154676,154678,154680,154682,154684,154687],{"class":41,"line":118},[39,154663,149360],{"class":53},[39,154665,148972],{"class":237},[39,154667,52412],{"class":53},[39,154669,149604],{"class":237},[39,154671,63],{"class":53},[39,154673,154613],{"class":237},[39,154675,52412],{"class":53},[39,154677,154618],{"class":237},[39,154679,63],{"class":53},[39,154681,85059],{"class":237},[39,154683,52412],{"class":53},[39,154685,154686],{"class":74},"15000",[39,154688,6011],{"class":53},[39,154690,154691,154693,154695,154697,154699,154701,154703,154705,154707,154709,154711,154713,154716],{"class":41,"line":125},[39,154692,149360],{"class":53},[39,154694,148972],{"class":237},[39,154696,52412],{"class":53},[39,154698,149604],{"class":237},[39,154700,63],{"class":53},[39,154702,154613],{"class":237},[39,154704,52412],{"class":53},[39,154706,154648],{"class":237},[39,154708,63],{"class":53},[39,154710,85059],{"class":237},[39,154712,52412],{"class":53},[39,154714,154715],{"class":74},"16000",[39,154717,6011],{"class":53},[39,154719,154720],{"class":41,"line":132},[39,154721,34221],{"class":53},[476,154723,154725],{"id":154724},"_1252-按日期统计","12.5.2 按日期统计",[30,154727,154729],{"className":31353,"code":154728,"language":31355,"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",[26,154730,154731,154740,154744,154755,154769,154782,154801,154805],{"__ignoreMap":35},[39,154732,154733,154736,154738],{"class":41,"line":42},[39,154734,154735],{"class":53},"daily_total ",[39,154737,1117],{"class":45},[39,154739,88843],{"class":53},[39,154741,154742],{"class":41,"line":92},[39,154743,122],{"emptyLinePlaceholder":121},[39,154745,154746,154748,154750,154752],{"class":41,"line":112},[39,154747,4108],{"class":45},[39,154749,149184],{"class":53},[39,154751,27018],{"class":45},[39,154753,154754],{"class":53}," sales:\n",[39,154756,154757,154760,154762,154765,154767],{"class":41,"line":118},[39,154758,154759],{"class":53},"    date ",[39,154761,1117],{"class":45},[39,154763,154764],{"class":53}," item[",[39,154766,148972],{"class":237},[39,154768,34221],{"class":53},[39,154770,154771,154774,154776,154778,154780],{"class":41,"line":125},[39,154772,154773],{"class":53},"    amount ",[39,154775,1117],{"class":45},[39,154777,154764],{"class":53},[39,154779,85059],{"class":237},[39,154781,34221],{"class":53},[39,154783,154784,154787,154789,154792,154794,154796,154798],{"class":41,"line":132},[39,154785,154786],{"class":53},"    daily_total[date] ",[39,154788,1117],{"class":45},[39,154790,154791],{"class":53}," daily_total.get(date, ",[39,154793,1457],{"class":74},[39,154795,255],{"class":53},[39,154797,101],{"class":45},[39,154799,154800],{"class":53}," amount\n",[39,154802,154803],{"class":41,"line":138},[39,154804,122],{"emptyLinePlaceholder":121},[39,154806,154807,154809],{"class":41,"line":169},[39,154808,31390],{"class":74},[39,154810,154811],{"class":53},"(daily_total)\n",[476,154813,154815],{"id":154814},"_1253-按类别统计","12.5.3 按类别统计",[30,154817,154819],{"className":31353,"code":154818,"language":31355,"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",[26,154820,154821,154830,154834,154844,154857,154869,154887,154891],{"__ignoreMap":35},[39,154822,154823,154826,154828],{"class":41,"line":42},[39,154824,154825],{"class":53},"category_total ",[39,154827,1117],{"class":45},[39,154829,88843],{"class":53},[39,154831,154832],{"class":41,"line":92},[39,154833,122],{"emptyLinePlaceholder":121},[39,154835,154836,154838,154840,154842],{"class":41,"line":112},[39,154837,4108],{"class":45},[39,154839,149184],{"class":53},[39,154841,27018],{"class":45},[39,154843,154754],{"class":53},[39,154845,154846,154849,154851,154853,154855],{"class":41,"line":118},[39,154847,154848],{"class":53},"    category ",[39,154850,1117],{"class":45},[39,154852,154764],{"class":53},[39,154854,154613],{"class":237},[39,154856,34221],{"class":53},[39,154858,154859,154861,154863,154865,154867],{"class":41,"line":125},[39,154860,154773],{"class":53},[39,154862,1117],{"class":45},[39,154864,154764],{"class":53},[39,154866,85059],{"class":237},[39,154868,34221],{"class":53},[39,154870,154871,154874,154876,154879,154881,154883,154885],{"class":41,"line":132},[39,154872,154873],{"class":53},"    category_total[category] ",[39,154875,1117],{"class":45},[39,154877,154878],{"class":53}," category_total.get(category, ",[39,154880,1457],{"class":74},[39,154882,255],{"class":53},[39,154884,101],{"class":45},[39,154886,154800],{"class":53},[39,154888,154889],{"class":41,"line":138},[39,154890,122],{"emptyLinePlaceholder":121},[39,154892,154893,154895],{"class":41,"line":169},[39,154894,31390],{"class":74},[39,154896,154897],{"class":53},"(category_total)\n",[476,154899,154901],{"id":154900},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[30,154903,154905],{"className":31353,"code":154904,"language":31355,"meta":35,"style":35},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[26,154906,154907,154932],{"__ignoreMap":35},[39,154908,154909,154912,154914,154916,154919,154922,154925,154928,154930],{"class":41,"line":42},[39,154910,154911],{"class":53},"top_date, top_amount ",[39,154913,1117],{"class":45},[39,154915,7028],{"class":74},[39,154917,154918],{"class":53},"(daily_total.items(), ",[39,154920,154921],{"class":59},"key",[39,154923,154924],{"class":45},"=lambda",[39,154926,154927],{"class":53}," item: item[",[39,154929,1483],{"class":74},[39,154931,5738],{"class":53},[39,154933,154934,154936],{"class":41,"line":92},[39,154935,31390],{"class":74},[39,154937,154938],{"class":53},"(top_date, top_amount)\n",[14,154940,154942],{"id":154941},"_126-绘制柱状图","12.6 绘制柱状图",[30,154944,154946],{"className":31353,"code":154945,"language":31355,"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",[26,154947,154948,154962,154973,154977,154985,154997,155009,155020,155024,155028,155038,155049,155063,155068,155085,155102,155118,155122],{"__ignoreMap":35},[39,154949,154950,154952,154954,154956,154958,154960],{"class":41,"line":42},[39,154951,31712],{"class":45},[39,154953,148354],{"class":53},[39,154955,31367],{"class":45},[39,154957,148359],{"class":53},[39,154959,32358],{"class":45},[39,154961,148364],{"class":53},[39,154963,154964,154966,154968,154970],{"class":41,"line":92},[39,154965,31712],{"class":45},[39,154967,148213],{"class":53},[39,154969,31367],{"class":45},[39,154971,154972],{"class":53}," Bar\n",[39,154974,154975],{"class":41,"line":112},[39,154976,122],{"emptyLinePlaceholder":121},[39,154978,154979,154981,154983],{"class":41,"line":118},[39,154980,154825],{"class":53},[39,154982,1117],{"class":45},[39,154984,16545],{"class":53},[39,154986,154987,154990,154992,154995],{"class":41,"line":125},[39,154988,154989],{"class":237},"    \"手机\"",[39,154991,52412],{"class":53},[39,154993,154994],{"class":74},"27000",[39,154996,32441],{"class":53},[39,154998,154999,155002,155004,155007],{"class":41,"line":132},[39,155000,155001],{"class":237},"    \"电脑\"",[39,155003,52412],{"class":53},[39,155005,155006],{"class":74},"34000",[39,155008,32441],{"class":53},[39,155010,155011,155014,155016,155018],{"class":41,"line":138},[39,155012,155013],{"class":237},"    \"耳机\"",[39,155015,52412],{"class":53},[39,155017,125374],{"class":74},[39,155019,32441],{"class":53},[39,155021,155022],{"class":41,"line":169},[39,155023,115],{"class":53},[39,155025,155026],{"class":41,"line":190},[39,155027,122],{"emptyLinePlaceholder":121},[39,155029,155030,155033,155035],{"class":41,"line":202},[39,155031,155032],{"class":53},"bar ",[39,155034,1117],{"class":45},[39,155036,155037],{"class":53}," Bar()\n",[39,155039,155040,155043,155046],{"class":41,"line":207},[39,155041,155042],{"class":53},"bar.add_xaxis(",[39,155044,155045],{"class":74},"list",[39,155047,155048],{"class":53},"(category_total.keys()))\n",[39,155050,155051,155054,155056,155058,155060],{"class":41,"line":212},[39,155052,155053],{"class":53},"bar.add_yaxis(",[39,155055,148270],{"class":237},[39,155057,63],{"class":53},[39,155059,155045],{"class":74},[39,155061,155062],{"class":53},"(category_total.values()))\n",[39,155064,155065],{"class":41,"line":223},[39,155066,155067],{"class":53},"bar.set_global_opts(\n",[39,155069,155070,155072,155074,155076,155078,155080,155083],{"class":41,"line":228},[39,155071,148448],{"class":59},[39,155073,1117],{"class":45},[39,155075,148453],{"class":53},[39,155077,52382],{"class":59},[39,155079,1117],{"class":45},[39,155081,155082],{"class":237},"\"品类销售额\"",[39,155084,39022],{"class":53},[39,155086,155087,155089,155091,155093,155095,155097,155100],{"class":41,"line":263},[39,155088,148467],{"class":59},[39,155090,1117],{"class":45},[39,155092,148472],{"class":53},[39,155094,80785],{"class":59},[39,155096,1117],{"class":45},[39,155098,155099],{"class":237},"\"品类\"",[39,155101,39022],{"class":53},[39,155103,155104,155106,155108,155110,155112,155114,155116],{"class":41,"line":287},[39,155105,148486],{"class":59},[39,155107,1117],{"class":45},[39,155109,148472],{"class":53},[39,155111,80785],{"class":59},[39,155113,1117],{"class":45},[39,155115,148270],{"class":237},[39,155117,39022],{"class":53},[39,155119,155120],{"class":41,"line":292},[39,155121,574],{"class":53},[39,155123,155124,155127,155130],{"class":41,"line":305},[39,155125,155126],{"class":53},"bar.render(",[39,155128,155129],{"class":237},"\"category_sales.html\"",[39,155131,574],{"class":53},[14,155133,155135],{"id":155134},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155137,155138],{},"时间线适合展示不同日期、月份、年份的数据变化。",[30,155140,155142],{"className":31353,"code":155141,"language":31355,"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",[26,155143,155144,155158,155169,155173,155181,155205,155228,155253,155257,155261,155271,155275,155286,155295,155305,155319,155350,155355,155359],{"__ignoreMap":35},[39,155145,155146,155148,155150,155152,155154,155156],{"class":41,"line":42},[39,155147,31712],{"class":45},[39,155149,148354],{"class":53},[39,155151,31367],{"class":45},[39,155153,148359],{"class":53},[39,155155,32358],{"class":45},[39,155157,148364],{"class":53},[39,155159,155160,155162,155164,155166],{"class":41,"line":92},[39,155161,31712],{"class":45},[39,155163,148213],{"class":53},[39,155165,31367],{"class":45},[39,155167,155168],{"class":53}," Bar, Timeline\n",[39,155170,155171],{"class":41,"line":112},[39,155172,122],{"emptyLinePlaceholder":121},[39,155174,155175,155177,155179],{"class":41,"line":118},[39,155176,102633],{"class":53},[39,155178,1117],{"class":45},[39,155180,16545],{"class":53},[39,155182,155183,155186,155189,155191,155193,155195,155197,155199,155201,155203],{"class":41,"line":125},[39,155184,155185],{"class":237},"    \"2024-10-01\"",[39,155187,155188],{"class":53},": {",[39,155190,154618],{"class":237},[39,155192,52412],{"class":53},[39,155194,154627],{"class":74},[39,155196,63],{"class":53},[39,155198,154648],{"class":237},[39,155200,52412],{"class":53},[39,155202,154657],{"class":74},[39,155204,6011],{"class":53},[39,155206,155207,155210,155212,155214,155216,155218,155220,155222,155224,155226],{"class":41,"line":132},[39,155208,155209],{"class":237},"    \"2024-10-02\"",[39,155211,155188],{"class":53},[39,155213,154618],{"class":237},[39,155215,52412],{"class":53},[39,155217,154686],{"class":74},[39,155219,63],{"class":53},[39,155221,154648],{"class":237},[39,155223,52412],{"class":53},[39,155225,154715],{"class":74},[39,155227,6011],{"class":53},[39,155229,155230,155233,155235,155237,155239,155242,155244,155246,155248,155251],{"class":41,"line":138},[39,155231,155232],{"class":237},"    \"2024-10-03\"",[39,155234,155188],{"class":53},[39,155236,154618],{"class":237},[39,155238,52412],{"class":53},[39,155240,155241],{"class":74},"17000",[39,155243,63],{"class":53},[39,155245,154648],{"class":237},[39,155247,52412],{"class":53},[39,155249,155250],{"class":74},"19000",[39,155252,6011],{"class":53},[39,155254,155255],{"class":41,"line":169},[39,155256,115],{"class":53},[39,155258,155259],{"class":41,"line":190},[39,155260,122],{"emptyLinePlaceholder":121},[39,155262,155263,155266,155268],{"class":41,"line":202},[39,155264,155265],{"class":53},"timeline ",[39,155267,1117],{"class":45},[39,155269,155270],{"class":53}," Timeline()\n",[39,155272,155273],{"class":41,"line":207},[39,155274,122],{"emptyLinePlaceholder":121},[39,155276,155277,155279,155282,155284],{"class":41,"line":212},[39,155278,4108],{"class":45},[39,155280,155281],{"class":53}," date, category_data ",[39,155283,27018],{"class":45},[39,155285,150123],{"class":53},[39,155287,155288,155291,155293],{"class":41,"line":223},[39,155289,155290],{"class":53},"    bar ",[39,155292,1117],{"class":45},[39,155294,155037],{"class":53},[39,155296,155297,155300,155302],{"class":41,"line":228},[39,155298,155299],{"class":53},"    bar.add_xaxis(",[39,155301,155045],{"class":74},[39,155303,155304],{"class":53},"(category_data.keys()))\n",[39,155306,155307,155310,155312,155314,155316],{"class":41,"line":263},[39,155308,155309],{"class":53},"    bar.add_yaxis(",[39,155311,148270],{"class":237},[39,155313,63],{"class":53},[39,155315,155045],{"class":74},[39,155317,155318],{"class":53},"(category_data.values()))\n",[39,155320,155321,155324,155327,155329,155331,155333,155335,155337,155339,155341,155343,155345,155348],{"class":41,"line":287},[39,155322,155323],{"class":53},"    bar.set_global_opts(",[39,155325,155326],{"class":59},"title_opts",[39,155328,1117],{"class":45},[39,155330,148453],{"class":53},[39,155332,52382],{"class":59},[39,155334,1117],{"class":45},[39,155336,1321],{"class":45},[39,155338,1516],{"class":237},[39,155340,2156],{"class":74},[39,155342,74901],{"class":53},[39,155344,2206],{"class":74},[39,155346,155347],{"class":237},"销售额\"",[39,155349,31472],{"class":53},[39,155351,155352],{"class":41,"line":292},[39,155353,155354],{"class":53},"    timeline.add(bar, date)\n",[39,155356,155357],{"class":41,"line":305},[39,155358,122],{"emptyLinePlaceholder":121},[39,155360,155361,155364,155367],{"class":41,"line":310},[39,155362,155363],{"class":53},"timeline.render(",[39,155365,155366],{"class":237},"\"timeline_sales.html\"",[39,155368,574],{"class":53},[14,155370,155372],{"id":155371},"_128-绘制地图","12.8 绘制地图",[19,155374,155375],{},"地图适合展示地区数据。",[30,155377,155379],{"className":31353,"code":155378,"language":31355,"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",[26,155380,155381,155395,155406,155410,155418,155431,155443,155456,155469,155473,155477,155487,155502,155507,155524,155543,155547],{"__ignoreMap":35},[39,155382,155383,155385,155387,155389,155391,155393],{"class":41,"line":42},[39,155384,31712],{"class":45},[39,155386,148354],{"class":53},[39,155388,31367],{"class":45},[39,155390,148359],{"class":53},[39,155392,32358],{"class":45},[39,155394,148364],{"class":53},[39,155396,155397,155399,155401,155403],{"class":41,"line":92},[39,155398,31712],{"class":45},[39,155400,148213],{"class":53},[39,155402,31367],{"class":45},[39,155404,155405],{"class":53}," Map\n",[39,155407,155408],{"class":41,"line":112},[39,155409,122],{"emptyLinePlaceholder":121},[39,155411,155412,155414,155416],{"class":41,"line":118},[39,155413,102633],{"class":53},[39,155415,1117],{"class":45},[39,155417,56422],{"class":53},[39,155419,155420,155423,155425,155427,155429],{"class":41,"line":125},[39,155421,155422],{"class":53},"    (",[39,155424,70244],{"class":237},[39,155426,63],{"class":53},[39,155428,2077],{"class":74},[39,155430,39022],{"class":53},[39,155432,155433,155435,155437,155439,155441],{"class":41,"line":132},[39,155434,155422],{"class":53},[39,155436,70264],{"class":237},[39,155438,63],{"class":53},[39,155440,148287],{"class":74},[39,155442,39022],{"class":53},[39,155444,155445,155447,155450,155452,155454],{"class":41,"line":138},[39,155446,155422],{"class":53},[39,155448,155449],{"class":237},"\"广东\"",[39,155451,63],{"class":53},[39,155453,2832],{"class":74},[39,155455,39022],{"class":53},[39,155457,155458,155460,155463,155465,155467],{"class":41,"line":169},[39,155459,155422],{"class":53},[39,155461,155462],{"class":237},"\"浙江\"",[39,155464,63],{"class":53},[39,155466,148292],{"class":74},[39,155468,39022],{"class":53},[39,155470,155471],{"class":41,"line":190},[39,155472,34221],{"class":53},[39,155474,155475],{"class":41,"line":202},[39,155476,122],{"emptyLinePlaceholder":121},[39,155478,155479,155482,155484],{"class":41,"line":207},[39,155480,155481],{"class":53},"map_chart ",[39,155483,1117],{"class":45},[39,155485,155486],{"class":53}," Map()\n",[39,155488,155489,155492,155494,155497,155500],{"class":41,"line":212},[39,155490,155491],{"class":53},"map_chart.add(",[39,155493,148270],{"class":237},[39,155495,155496],{"class":53},", data, ",[39,155498,155499],{"class":237},"\"china\"",[39,155501,574],{"class":53},[39,155503,155504],{"class":41,"line":223},[39,155505,155506],{"class":53},"map_chart.set_global_opts(\n",[39,155508,155509,155511,155513,155515,155517,155519,155522],{"class":41,"line":228},[39,155510,148448],{"class":59},[39,155512,1117],{"class":45},[39,155514,148453],{"class":53},[39,155516,52382],{"class":59},[39,155518,1117],{"class":45},[39,155520,155521],{"class":237},"\"地区销售额\"",[39,155523,39022],{"class":53},[39,155525,155526,155529,155531,155534,155537,155539,155541],{"class":41,"line":263},[39,155527,155528],{"class":59},"    visualmap_opts",[39,155530,1117],{"class":45},[39,155532,155533],{"class":53},"opts.VisualMapOpts(",[39,155535,155536],{"class":59},"max_",[39,155538,1117],{"class":45},[39,155540,2832],{"class":74},[39,155542,39022],{"class":53},[39,155544,155545],{"class":41,"line":287},[39,155546,574],{"class":53},[39,155548,155549,155552,155555],{"class":41,"line":292},[39,155550,155551],{"class":53},"map_chart.render(",[39,155553,155554],{"class":237},"\"map_sales.html\"",[39,155556,574],{"class":53},[19,155558,155559],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155561,155563],{"id":155562},"_129-项目拆分建议","12.9 项目拆分建议",[19,155565,155566],{},"当代码超过一个文件时，可以这样组织：",[30,155568,155571],{"className":155569,"code":155570,"language":6267,"meta":35},[6265],"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",[26,155572,155570],{"__ignoreMap":35},[19,155574,155575],{},"职责：",[328,155577,155578,155584,155590,155596],{},[331,155579,155580,155583],{},[26,155581,155582],{},"main.py","：程序入口。",[331,155585,155586,155589],{},[26,155587,155588],{},"file_utils.py","：读写 JSON。",[331,155591,155592,155595],{},[26,155593,155594],{},"sales_service.py","：统计销售数据。",[331,155597,155598,155601],{},[26,155599,155600],{},"chart_builder.py","：生成图表。",[14,155603,155605],{"id":155604},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155607,155608],{},"语法基础：",[328,155610,155611,155614,155617,155620],{},[331,155612,155613],{},"会写变量、注释、输入输出。",[331,155615,155616],{},"会使用 int、float、str、bool。",[331,155618,155619],{},"会做类型转换。",[331,155621,155622],{},"会使用 f-string 格式化输出。",[19,155624,155625],{},"流程控制：",[328,155627,155628,155634,155640,155648],{},[331,155629,155630,155631,29360],{},"会写 ",[26,155632,155633],{},"if elif else",[331,155635,155630,155636,101993,155638,29360],{},[26,155637,109638],{},[26,155639,4108],{},[331,155641,155642,155643,101993,155645,29360],{},"理解 ",[26,155644,3150],{},[26,155646,155647],{},"continue",[331,155649,155650],{},"能写嵌套循环。",[19,155652,155653],{},"函数：",[328,155655,155656,155659,155662,155665],{},[331,155657,155658],{},"会定义和调用函数。",[331,155660,155661],{},"理解参数和返回值。",[331,155663,155664],{},"知道局部变量和全局变量。",[331,155666,155667],{},"会使用默认参数、关键字参数、不定长参数。",[19,155669,155670],{},"容器：",[328,155672,155673,155676,155679,155682,155685],{},[331,155674,155675],{},"会使用列表增删改查。",[331,155677,155678],{},"会遍历列表、字典。",[331,155680,155681],{},"会使用切片。",[331,155683,155684],{},"会用集合去重。",[331,155686,155687],{},"会处理列表嵌套字典。",[19,155689,155690],{},"文件和模块：",[328,155692,155693,155696,155699,155702,155705],{},[331,155694,155695],{},"会读写文本文件。",[331,155697,155698],{},"会读写 JSON。",[331,155700,155701],{},"会捕获常见异常。",[331,155703,155704],{},"会导入模块和第三方包。",[331,155706,155707],{},"会创建简单包结构。",[19,155709,155710],{},"项目能力：",[328,155712,155713,155716,155719,155722,155725],{},[331,155714,155715],{},"能把代码拆成函数。",[331,155717,155718],{},"能把数据保存到文件。",[331,155720,155721],{},"能处理用户输入错误。",[331,155723,155724],{},"能写一个完整菜单程序。",[331,155726,155727],{},"能用 pyecharts 生成图表。",[14,155729,155731],{"id":155730},"_1211-推荐练习顺序","12.11 推荐练习顺序",[328,155733,155734,155737,155740,155743,155746,155749,155752,155755],{},[331,155735,155736],{},"猜数字游戏。",[331,155738,155739],{},"ATM 菜单程序。",[331,155741,155742],{},"学生成绩统计。",[331,155744,155745],{},"学生管理系统函数版。",[331,155747,155748],{},"学生管理系统文件持久化版。",[331,155750,155751],{},"学生管理系统面向对象版。",[331,155753,155754],{},"销售数据统计。",[331,155756,155757],{},"销售数据可视化。",[14,155759,155761],{"id":155760},"_1212-常见学习误区","12.12 常见学习误区",[328,155763,155764,155767,155770,155773,155776,155779,155782],{},[331,155765,155766],{},"只看视频不敲代码。",[331,155768,155769],{},"一报错就复制错误去搜，不先读报错位置。",[331,155771,155772],{},"变量名随便写，后续自己看不懂。",[331,155774,155775],{},"所有代码都写在一个文件一个函数里。",[331,155777,155778],{},"不保存练习代码，复习时没有材料。",[331,155780,155781],{},"还没掌握列表字典就急着学框架。",[331,155783,155784],{},"不会读官方文档，只依赖教程。",[14,155786,155788],{"id":155787},"_1213-如何读报错","12.13 如何读报错",[19,155790,155791],{},"报错通常从下往上看最后几行。",[19,155793,16108],{},[30,155795,155798],{"className":155796,"code":155797,"language":6267,"meta":35},[6265],"ValueError: invalid literal for int() with base 10: 'abc'\n",[26,155799,155797],{"__ignoreMap":35},[19,155801,25574],{},[328,155803,155804,155810,155820],{},[331,155805,155806,155807,29360],{},"异常类型是 ",[26,155808,155809],{},"ValueError",[331,155811,108320,155812,155815,155816,155819],{},[26,155813,155814],{},"int()"," 无法把 ",[26,155817,155818],{},"'abc'"," 转成整数。",[331,155821,155822],{},"应该检查输入内容或增加异常处理。",[19,155824,155825],{},"再看文件名和行号：",[30,155827,155830],{"className":155828,"code":155829,"language":6267,"meta":35},[6265],"File \"main.py\", line 10, in \u003Cmodule>\n",[26,155831,155829],{"__ignoreMap":35},[19,155833,155834,155835,155837],{},"表示错误发生在 ",[26,155836,155582],{}," 第 10 行。",[14,155839,155841],{"id":155840},"_1214-后续学习方向","12.14 后续学习方向",[19,155843,155844],{},"Python 基础完成后，可以按兴趣选择方向：",[328,155846,155847,155859,155868,155880,155891,155900,155910],{},[331,155848,155849,155850,1478,155853,1478,155856,29360],{},"自动化办公：",[26,155851,155852],{},"openpyxl",[26,155854,155855],{},"python-docx",[26,155857,155858],{},"pdfplumber",[331,155860,155861,155862,1478,155864,1478,155866,29360],{},"数据分析：",[26,155863,101601],{},[26,155865,147160],{},[26,155867,147168],{},[331,155869,155870,155871,1478,155874,1478,155877,29360],{},"Web 后端：",[26,155872,155873],{},"Flask",[26,155875,155876],{},"FastAPI",[26,155878,155879],{},"Django",[331,155881,155882,155883,1478,155885,1478,155888,29360],{},"爬虫：",[26,155884,147145],{},[26,155886,155887],{},"BeautifulSoup",[26,155889,155890],{},"Scrapy",[331,155892,155893,155894,1478,155896,155899],{},"测试开发：",[26,155895,147192],{},[26,155897,155898],{},"selenium","、接口测试。",[331,155901,155902,155903,1478,155905,1478,155907,29360],{},"人工智能：",[26,155904,101601],{},[26,155906,147160],{},[26,155908,155909],{},"pytorch",[331,155911,155912,155913,1478,155915,1478,155918,29360],{},"运维脚本：",[26,155914,146761],{},[26,155916,155917],{},"subprocess",[26,155919,155920],{},"paramiko",[19,155922,155923],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155925,155927],{"id":155926},"_1215-结课练习","12.15 结课练习",[328,155929,155930,155933,155936,155939,155942,155945,155948,155951],{},[331,155931,155932],{},"完成函数版学生管理系统。",[331,155934,155935],{},"给学生管理系统增加 JSON 持久化。",[331,155937,155938],{},"给学生管理系统增加异常处理。",[331,155940,155941],{},"把学生管理系统改成面向对象版。",[331,155943,155944],{},"使用 pyecharts 绘制学生成绩柱状图。",[331,155946,155947],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[331,155949,155950],{},"按品类统计销售额并绘制柱状图。",[331,155952,155953],{},"写一份自己的 Python 学习路线图。",[1192,155955,155956],{},"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":92,"depth":92,"links":155958},[155959,155960,155963,155964,155965,155971,155972,155973,155974,155975,155976,155977,155978,155979,155980],{"id":152675,"depth":92,"text":152676},{"id":152725,"depth":92,"text":152726,"children":155961},[155962],{"id":152729,"depth":112,"text":152730},{"id":152768,"depth":92,"text":152769},{"id":154242,"depth":92,"text":154243},{"id":154580,"depth":92,"text":154581,"children":155966},[155967,155968,155969,155970],{"id":154584,"depth":112,"text":154585},{"id":154724,"depth":112,"text":154725},{"id":154814,"depth":112,"text":154815},{"id":154900,"depth":112,"text":154901},{"id":154941,"depth":92,"text":154942},{"id":155134,"depth":92,"text":155135},{"id":155371,"depth":92,"text":155372},{"id":155562,"depth":92,"text":155563},{"id":155604,"depth":92,"text":155605},{"id":155730,"depth":92,"text":155731},{"id":155760,"depth":92,"text":155761},{"id":155787,"depth":92,"text":155788},{"id":155840,"depth":92,"text":155841},{"id":155926,"depth":92,"text":155927},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152667,"description":24350},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155987,"title":155988,"body":155989,"description":24350,"extension":1203,"meta":158458,"navigation":121,"path":158459,"seo":158460,"stem":158461,"__hash__":158462},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155990,"toc":158433},[155991,155994,155998,156001,156004,156024,156027,156050,156053,156056,156078,156081,156103,156107,156110,156150,156153,156274,156278,156281,156321,156324,156348,156351,156355,156358,156372,156405,156408,156443,156446,156469,156472,156505,156508,156510,156516,156591,156594,156600,156617,156657,156661,156664,156710,156712,156750,156753,156788,156791,156826,156829,156861,156864,156883,156887,156891,157004,157006,157081,157085,157131,157134,157160,157169,157173,157176,157239,157247,157275,157279,157319,157384,157388,157391,157430,157433,157478,157481,157542,157546,157573,157576,157604,157607,157611,157615,157680,157683,157721,157724,157756,157760,157859,157863,157866,157939,157942,157990,157994,158000,158040,158043,158090,158093,158142,158146,158148,158162,158164,158345,158349,158376,158396,158403,158407,158424,158430],[10,155992,155988],{"id":155993},"_2-基础语法变量与字符串",[14,155995,155997],{"id":155996},"_21-注释","2.1 注释",[19,155999,156000],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156002,156003],{},"单行注释：",[30,156005,156007],{"className":31353,"code":156006,"language":31355,"meta":35,"style":35},"# 这是单行注释\nprint(\"hello\")\n",[26,156008,156009,156014],{"__ignoreMap":35},[39,156010,156011],{"class":41,"line":42},[39,156012,156013],{"class":128},"# 这是单行注释\n",[39,156015,156016,156018,156020,156022],{"class":41,"line":92},[39,156017,31390],{"class":74},[39,156019,54],{"class":53},[39,156021,6921],{"class":237},[39,156023,574],{"class":53},[19,156025,156026],{},"多行说明常用三引号：",[30,156028,156030],{"className":31353,"code":156029,"language":31355,"meta":35,"style":35},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[26,156031,156032,156036,156041,156046],{"__ignoreMap":35},[39,156033,156034],{"class":41,"line":42},[39,156035,96673],{"class":237},[39,156037,156038],{"class":41,"line":92},[39,156039,156040],{"class":237},"这是多行说明。\n",[39,156042,156043],{"class":41,"line":112},[39,156044,156045],{"class":237},"常用于文件顶部说明、函数说明等。\n",[39,156047,156048],{"class":41,"line":118},[39,156049,96673],{"class":237},[19,156051,156052],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156054,156055],{},"不好：",[30,156057,156059],{"className":31353,"code":156058,"language":31355,"meta":35,"style":35},"# age 加 1\nage = age + 1\n",[26,156060,156061,156066],{"__ignoreMap":35},[39,156062,156063],{"class":41,"line":42},[39,156064,156065],{"class":128},"# age 加 1\n",[39,156067,156068,156070,156072,156074,156076],{"class":41,"line":92},[39,156069,147521],{"class":53},[39,156071,1117],{"class":45},[39,156073,16680],{"class":53},[39,156075,101],{"class":45},[39,156077,56674],{"class":74},[19,156079,156080],{},"较好：",[30,156082,156084],{"className":31353,"code":156083,"language":31355,"meta":35,"style":35},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[26,156085,156086,156091],{"__ignoreMap":35},[39,156087,156088],{"class":41,"line":42},[39,156089,156090],{"class":128},"# 用户过完生日后，年龄增加一岁\n",[39,156092,156093,156095,156097,156099,156101],{"class":41,"line":92},[39,156094,147521],{"class":53},[39,156096,1117],{"class":45},[39,156098,16680],{"class":53},[39,156100,101],{"class":45},[39,156102,56674],{"class":74},[14,156104,156106],{"id":156105},"_22-字面量","2.2 字面量",[19,156108,156109],{},"字面量就是代码中直接写出来的数据。",[30,156111,156113],{"className":31353,"code":156112,"language":31355,"meta":35,"style":35},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[26,156114,156115,156122,156129,156136,156143],{"__ignoreMap":35},[39,156116,156117,156119],{"class":41,"line":42},[39,156118,278],{"class":74},[39,156120,156121],{"class":128},"          # 整数\n",[39,156123,156124,156126],{"class":41,"line":92},[39,156125,803],{"class":74},[39,156127,156128],{"class":128},"         # 小数\n",[39,156130,156131,156133],{"class":41,"line":112},[39,156132,6921],{"class":237},[39,156134,156135],{"class":128},"      # 字符串\n",[39,156137,156138,156140],{"class":41,"line":118},[39,156139,32451],{"class":74},[39,156141,156142],{"class":128},"         # 布尔值\n",[39,156144,156145,156147],{"class":41,"line":125},[39,156146,96661],{"class":74},[39,156148,156149],{"class":128},"         # 空值\n",[19,156151,156152],{},"常见字面量类型：",[1404,156154,156155,156165],{},[1407,156156,156157],{},[1410,156158,156159,156161,156163],{},[1413,156160,24711],{},[1413,156162,28467],{},[1413,156164,26844],{},[1450,156166,156167,156178,156189,156200,156212,156224,156236,156249,156261],{},[1410,156168,156169,156171,156175],{},[1455,156170,46],{},[1455,156172,156173],{},[26,156174,278],{},[1455,156176,156177],{},"整数",[1410,156179,156180,156182,156186],{},[1455,156181,1311],{},[1455,156183,156184],{},[26,156185,803],{},[1455,156187,156188],{},"浮点数",[1410,156190,156191,156193,156197],{},[1455,156192,2427],{},[1455,156194,156195],{},[26,156196,6921],{},[1455,156198,156199],{},"字符串",[1410,156201,156202,156204,156210],{},[1455,156203,2479],{},[1455,156205,156206,1478,156208],{},[26,156207,32451],{},[26,156209,34962],{},[1455,156211,66990],{},[1410,156213,156214,156217,156221],{},[1455,156215,156216],{},"NoneType",[1455,156218,156219],{},[26,156220,96661],{},[1455,156222,156223],{},"空值",[1410,156225,156226,156228,156233],{},[1455,156227,155045],{},[1455,156229,156230],{},[26,156231,156232],{},"[1, 2, 3]",[1455,156234,156235],{},"列表",[1410,156237,156238,156241,156246],{},[1455,156239,156240],{},"tuple",[1455,156242,156243],{},[26,156244,156245],{},"(1, 2, 3)",[1455,156247,156248],{},"元组",[1410,156250,156251,156253,156258],{},[1455,156252,115521],{},[1455,156254,156255],{},[26,156256,156257],{},"{\"name\": \"张三\"}",[1455,156259,156260],{},"字典",[1410,156262,156263,156266,156271],{},[1455,156264,156265],{},"set",[1455,156267,156268],{},[26,156269,156270],{},"{1, 2, 3}",[1455,156272,156273],{},"集合",[14,156275,156277],{"id":156276},"_23-变量","2.3 变量",[19,156279,156280],{},"变量是保存数据的名字。",[30,156282,156284],{"className":31353,"code":156283,"language":31355,"meta":35,"style":35},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[26,156285,156286,156294,156302,156312],{"__ignoreMap":35},[39,156287,156288,156290,156292],{"class":41,"line":42},[39,156289,147511],{"class":53},[39,156291,1117],{"class":45},[39,156293,150328],{"class":237},[39,156295,156296,156298,156300],{"class":41,"line":92},[39,156297,147521],{"class":53},[39,156299,1117],{"class":45},[39,156301,147526],{"class":74},[39,156303,156304,156307,156309],{"class":41,"line":112},[39,156305,156306],{"class":53},"height ",[39,156308,1117],{"class":45},[39,156310,156311],{"class":74}," 1.75\n",[39,156313,156314,156317,156319],{"class":41,"line":118},[39,156315,156316],{"class":53},"is_student ",[39,156318,1117],{"class":45},[39,156320,154574],{"class":74},[19,156322,156323],{},"Python 的变量不需要提前声明类型：",[30,156325,156327],{"className":31353,"code":156326,"language":31355,"meta":35,"style":35},"score = 100\nscore = \"满分\"\n",[26,156328,156329,156339],{"__ignoreMap":35},[39,156330,156331,156334,156336],{"class":41,"line":42},[39,156332,156333],{"class":53},"score ",[39,156335,1117],{"class":45},[39,156337,156338],{"class":74}," 100\n",[39,156340,156341,156343,156345],{"class":41,"line":92},[39,156342,156333],{"class":53},[39,156344,1117],{"class":45},[39,156346,156347],{"class":237}," \"满分\"\n",[19,156349,156350],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156352,156354],{"id":156353},"_24-变量命名规则","2.4 变量命名规则",[19,156356,156357],{},"硬性规则：",[328,156359,156360,156363,156366,156369],{},[331,156361,156362],{},"只能由字母、数字、下划线组成。",[331,156364,156365],{},"不能以数字开头。",[331,156367,156368],{},"不能使用 Python 关键字。",[331,156370,156371],{},"区分大小写。",[30,156373,156375],{"className":31353,"code":156374,"language":31355,"meta":35,"style":35},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[26,156376,156377,156386,156395],{"__ignoreMap":35},[39,156378,156379,156382,156384],{"class":41,"line":42},[39,156380,156381],{"class":53},"user_name ",[39,156383,1117],{"class":45},[39,156385,147516],{"class":237},[39,156387,156388,156391,156393],{"class":41,"line":92},[39,156389,156390],{"class":53},"age2 ",[39,156392,1117],{"class":45},[39,156394,147526],{"class":74},[39,156396,156397,156400,156402],{"class":41,"line":112},[39,156398,156399],{"class":53},"_token ",[39,156401,1117],{"class":45},[39,156403,156404],{"class":237}," \"abc\"\n",[19,156406,156407],{},"错误写法：",[30,156409,156411],{"className":31353,"code":156410,"language":31355,"meta":35,"style":35},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[26,156412,156413,156422,156434],{"__ignoreMap":35},[39,156414,156415,156418,156420],{"class":41,"line":42},[39,156416,156417],{"class":78378},"2age",[39,156419,71],{"class":45},[39,156421,147526],{"class":74},[39,156423,156424,156426,156428,156430,156432],{"class":41,"line":92},[39,156425,132559],{"class":53},[39,156427,1793],{"class":45},[39,156429,147511],{"class":53},[39,156431,1117],{"class":45},[39,156433,147516],{"class":237},[39,156435,156436,156438,156440],{"class":41,"line":112},[39,156437,15667],{"class":45},[39,156439,71],{"class":45},[39,156441,156442],{"class":237}," \"一班\"\n",[19,156444,156445],{},"查看关键字：",[30,156447,156449],{"className":31353,"code":156448,"language":31355,"meta":35,"style":35},"import keyword\n\nprint(keyword.kwlist)\n",[26,156450,156451,156458,156462],{"__ignoreMap":35},[39,156452,156453,156455],{"class":41,"line":42},[39,156454,31367],{"class":45},[39,156456,156457],{"class":53}," keyword\n",[39,156459,156460],{"class":41,"line":92},[39,156461,122],{"emptyLinePlaceholder":121},[39,156463,156464,156466],{"class":41,"line":112},[39,156465,31390],{"class":74},[39,156467,156468],{"class":53},"(keyword.kwlist)\n",[19,156470,156471],{},"推荐命名风格：",[30,156473,156475],{"className":31353,"code":156474,"language":31355,"meta":35,"style":35},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[26,156476,156477,156486,156496],{"__ignoreMap":35},[39,156478,156479,156482,156484],{"class":41,"line":42},[39,156480,156481],{"class":53},"student_name ",[39,156483,1117],{"class":45},[39,156485,150328],{"class":237},[39,156487,156488,156491,156493],{"class":41,"line":92},[39,156489,156490],{"class":53},"total_price ",[39,156492,1117],{"class":45},[39,156494,156495],{"class":74}," 99.8\n",[39,156497,156498,156501,156503],{"class":41,"line":112},[39,156499,156500],{"class":53},"is_finished ",[39,156502,1117],{"class":45},[39,156504,126782],{"class":74},[19,156506,156507],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156509,51707],{"id":51706},[19,156511,105341,156512,156515],{},[26,156513,156514],{},"type()"," 查看数据类型：",[30,156517,156519],{"className":31353,"code":156518,"language":31355,"meta":35,"style":35},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[26,156520,156521,156535,156549,156563,156577],{"__ignoreMap":35},[39,156522,156523,156525,156527,156529,156531,156533],{"class":41,"line":42},[39,156524,31390],{"class":74},[39,156526,54],{"class":53},[39,156528,104082],{"class":74},[39,156530,54],{"class":53},[39,156532,278],{"class":74},[39,156534,31472],{"class":53},[39,156536,156537,156539,156541,156543,156545,156547],{"class":41,"line":92},[39,156538,31390],{"class":74},[39,156540,54],{"class":53},[39,156542,104082],{"class":74},[39,156544,54],{"class":53},[39,156546,803],{"class":74},[39,156548,31472],{"class":53},[39,156550,156551,156553,156555,156557,156559,156561],{"class":41,"line":112},[39,156552,31390],{"class":74},[39,156554,54],{"class":53},[39,156556,104082],{"class":74},[39,156558,54],{"class":53},[39,156560,6921],{"class":237},[39,156562,31472],{"class":53},[39,156564,156565,156567,156569,156571,156573,156575],{"class":41,"line":118},[39,156566,31390],{"class":74},[39,156568,54],{"class":53},[39,156570,104082],{"class":74},[39,156572,54],{"class":53},[39,156574,32451],{"class":74},[39,156576,31472],{"class":53},[39,156578,156579,156581,156583,156585,156587,156589],{"class":41,"line":125},[39,156580,31390],{"class":74},[39,156582,54],{"class":53},[39,156584,104082],{"class":74},[39,156586,54],{"class":53},[39,156588,96661],{"class":74},[39,156590,31472],{"class":53},[19,156592,156593],{},"输出类似：",[30,156595,156598],{"className":156596,"code":156597,"language":6267,"meta":35},[6265],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[26,156599,156597],{"__ignoreMap":35},[19,156601,10093,156602,108258,156604,156606,156607,156609,156610,22473,156612,156609,156614,156616],{},[26,156603,2479],{},[26,156605,46],{}," 的子类，",[26,156608,32451],{}," 可以当作 ",[26,156611,1483],{},[26,156613,34962],{},[26,156615,1457],{},"，但业务代码中不要滥用。",[30,156618,156620],{"className":31353,"code":156619,"language":31355,"meta":35,"style":35},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[26,156621,156622,156640],{"__ignoreMap":35},[39,156623,156624,156626,156628,156630,156632,156634,156637],{"class":41,"line":42},[39,156625,31390],{"class":74},[39,156627,54],{"class":53},[39,156629,32451],{"class":74},[39,156631,46541],{"class":45},[39,156633,26093],{"class":74},[39,156635,156636],{"class":53},")   ",[39,156638,156639],{"class":128},"# 2\n",[39,156641,156642,156644,156646,156648,156650,156652,156654],{"class":41,"line":92},[39,156643,31390],{"class":74},[39,156645,54],{"class":53},[39,156647,34962],{"class":74},[39,156649,46541],{"class":45},[39,156651,26093],{"class":74},[39,156653,46783],{"class":53},[39,156655,156656],{"class":128},"# 1\n",[14,156658,156660],{"id":156659},"_26-类型转换","2.6 类型转换",[19,156662,156663],{},"常用转换函数：",[30,156665,156667],{"className":31353,"code":156666,"language":31355,"meta":35,"style":35},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[26,156668,156669,156679,156690,156700],{"__ignoreMap":35},[39,156670,156671,156673,156675,156677],{"class":41,"line":42},[39,156672,46],{"class":74},[39,156674,54],{"class":53},[39,156676,55291],{"class":237},[39,156678,574],{"class":53},[39,156680,156681,156683,156685,156688],{"class":41,"line":92},[39,156682,1311],{"class":74},[39,156684,54],{"class":53},[39,156686,156687],{"class":237},"\"3.14\"",[39,156689,574],{"class":53},[39,156691,156692,156694,156696,156698],{"class":41,"line":112},[39,156693,2427],{"class":74},[39,156695,54],{"class":53},[39,156697,278],{"class":74},[39,156699,574],{"class":53},[39,156701,156702,156704,156706,156708],{"class":41,"line":118},[39,156703,2479],{"class":74},[39,156705,54],{"class":53},[39,156707,1483],{"class":74},[39,156709,574],{"class":53},[19,156711,16108],{},[30,156713,156715],{"className":31353,"code":156714,"language":31355,"meta":35,"style":35},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[26,156716,156717,156726,156737],{"__ignoreMap":35},[39,156718,156719,156721,156723],{"class":41,"line":42},[39,156720,147521],{"class":53},[39,156722,1117],{"class":45},[39,156724,156725],{"class":237}," \"18\"\n",[39,156727,156728,156730,156732,156734],{"class":41,"line":92},[39,156729,147521],{"class":53},[39,156731,1117],{"class":45},[39,156733,963],{"class":74},[39,156735,156736],{"class":53},"(age)\n",[39,156738,156739,156741,156744,156746,156748],{"class":41,"line":112},[39,156740,31390],{"class":74},[39,156742,156743],{"class":53},"(age ",[39,156745,101],{"class":45},[39,156747,26093],{"class":74},[39,156749,574],{"class":53},[19,156751,156752],{},"输入得到的内容永远是字符串：",[30,156754,156756],{"className":31353,"code":156755,"language":31355,"meta":35,"style":35},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[26,156757,156758,156774],{"__ignoreMap":35},[39,156759,156760,156763,156765,156767,156769,156772],{"class":41,"line":42},[39,156761,156762],{"class":53},"num ",[39,156764,1117],{"class":45},[39,156766,61580],{"class":74},[39,156768,54],{"class":53},[39,156770,156771],{"class":237},"\"请输入数字:\"",[39,156773,574],{"class":53},[39,156775,156776,156778,156780,156782,156785],{"class":41,"line":92},[39,156777,31390],{"class":74},[39,156779,54],{"class":53},[39,156781,104082],{"class":74},[39,156783,156784],{"class":53},"(num))  ",[39,156786,156787],{"class":128},"# str\n",[19,156789,156790],{},"如果要做数学运算，必须转换：",[30,156792,156794],{"className":31353,"code":156793,"language":31355,"meta":35,"style":35},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[26,156795,156796,156814],{"__ignoreMap":35},[39,156797,156798,156800,156802,156804,156806,156808,156810,156812],{"class":41,"line":42},[39,156799,156762],{"class":53},[39,156801,1117],{"class":45},[39,156803,963],{"class":74},[39,156805,54],{"class":53},[39,156807,54796],{"class":74},[39,156809,54],{"class":53},[39,156811,156771],{"class":237},[39,156813,31472],{"class":53},[39,156815,156816,156818,156820,156822,156824],{"class":41,"line":92},[39,156817,31390],{"class":74},[39,156819,46594],{"class":53},[39,156821,101],{"class":45},[39,156823,75],{"class":74},[39,156825,574],{"class":53},[19,156827,156828],{},"常见错误：",[30,156830,156832],{"className":31353,"code":156831,"language":31355,"meta":35,"style":35},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[26,156833,156834,156847],{"__ignoreMap":35},[39,156835,156836,156838,156840,156842,156844],{"class":41,"line":42},[39,156837,46],{"class":74},[39,156839,54],{"class":53},[39,156841,156687],{"class":237},[39,156843,156636],{"class":53},[39,156845,156846],{"class":128},"# 错误\n",[39,156848,156849,156851,156853,156856,156859],{"class":41,"line":92},[39,156850,46],{"class":74},[39,156852,54],{"class":53},[39,156854,156855],{"class":237},"\"abc\"",[39,156857,156858],{"class":53},")    ",[39,156860,156846],{"class":128},[19,156862,156863],{},"正确写法：",[30,156865,156867],{"className":31353,"code":156866,"language":31355,"meta":35,"style":35},"num = float(\"3.14\")\n",[26,156868,156869],{"__ignoreMap":35},[39,156870,156871,156873,156875,156877,156879,156881],{"class":41,"line":42},[39,156872,156762],{"class":53},[39,156874,1117],{"class":45},[39,156876,110772],{"class":74},[39,156878,54],{"class":53},[39,156880,156687],{"class":237},[39,156882,574],{"class":53},[14,156884,156886],{"id":156885},"_27-运算符","2.7 运算符",[476,156888,156890],{"id":156889},"_271-算术运算符","2.7.1 算术运算符",[1404,156892,156893,156904],{},[1407,156894,156895],{},[1410,156896,156897,156900,156902],{},[1413,156898,156899],{},"运算符",[1413,156901,26844],{},[1413,156903,28467],{},[1450,156905,156906,156920,156934,156948,156962,156976,156990],{},[1410,156907,156908,156912,156915],{},[1455,156909,156910],{},[26,156911,101],{},[1455,156913,156914],{},"加法",[1455,156916,156917],{},[26,156918,156919],{},"1 + 2",[1410,156921,156922,156926,156929],{},[1455,156923,156924],{},[26,156925,1793],{},[1455,156927,156928],{},"减法",[1455,156930,156931],{},[26,156932,156933],{},"5 - 3",[1410,156935,156936,156940,156943],{},[1455,156937,156938],{},[26,156939,1717],{},[1455,156941,156942],{},"乘法",[1455,156944,156945],{},[26,156946,156947],{},"2 * 3",[1410,156949,156950,156954,156957],{},[1455,156951,156952],{},[26,156953,1845],{},[1455,156955,156956],{},"除法，结果是浮点数",[1455,156958,156959],{},[26,156960,156961],{},"5 \u002F 2",[1410,156963,156964,156968,156971],{},[1455,156965,156966],{},[26,156967,34304],{},[1455,156969,156970],{},"整除",[1455,156972,156973],{},[26,156974,156975],{},"5 \u002F\u002F 2",[1410,156977,156978,156982,156985],{},[1455,156979,156980],{},[26,156981,1592],{},[1455,156983,156984],{},"取余",[1455,156986,156987],{},[26,156988,156989],{},"5 % 2",[1410,156991,156992,156996,156999],{},[1455,156993,156994],{},[26,156995,11726],{},[1455,156997,156998],{},"幂运算",[1455,157000,157001],{},[26,157002,157003],{},"2 ** 3",[19,157005,16108],{},[30,157007,157009],{"className":31353,"code":157008,"language":31355,"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",[26,157010,157011,157029,157046,157063],{"__ignoreMap":35},[39,157012,157013,157015,157017,157019,157022,157024,157026],{"class":41,"line":42},[39,157014,31390],{"class":74},[39,157016,54],{"class":53},[39,157018,1583],{"class":74},[39,157020,157021],{"class":45}," \u002F",[39,157023,15728],{"class":74},[39,157025,156636],{"class":53},[39,157027,157028],{"class":128},"# 2.5\n",[39,157030,157031,157033,157035,157037,157040,157042,157044],{"class":41,"line":92},[39,157032,31390],{"class":74},[39,157034,54],{"class":53},[39,157036,1583],{"class":74},[39,157038,157039],{"class":45}," \u002F\u002F",[39,157041,15728],{"class":74},[39,157043,46783],{"class":53},[39,157045,156639],{"class":128},[39,157047,157048,157050,157052,157054,157057,157059,157061],{"class":41,"line":112},[39,157049,31390],{"class":74},[39,157051,54],{"class":53},[39,157053,1583],{"class":74},[39,157055,157056],{"class":45}," %",[39,157058,15728],{"class":74},[39,157060,156636],{"class":53},[39,157062,156656],{"class":128},[39,157064,157065,157067,157069,157071,157074,157076,157078],{"class":41,"line":118},[39,157066,31390],{"class":74},[39,157068,54],{"class":53},[39,157070,1345],{"class":74},[39,157072,157073],{"class":45}," **",[39,157075,79045],{"class":74},[39,157077,46783],{"class":53},[39,157079,157080],{"class":128},"# 8\n",[476,157082,157084],{"id":157083},"_272-赋值运算符","2.7.2 赋值运算符",[30,157086,157088],{"className":31353,"code":157087,"language":31355,"meta":35,"style":35},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[26,157089,157090,157098,157106,157114,157122],{"__ignoreMap":35},[39,157091,157092,157094,157096],{"class":41,"line":42},[39,157093,156762],{"class":53},[39,157095,1117],{"class":45},[39,157097,59403],{"class":74},[39,157099,157100,157102,157104],{"class":41,"line":92},[39,157101,156762],{"class":53},[39,157103,10545],{"class":45},[39,157105,55402],{"class":74},[39,157107,157108,157110,157112],{"class":41,"line":112},[39,157109,156762],{"class":53},[39,157111,151227],{"class":45},[39,157113,48698],{"class":74},[39,157115,157116,157118,157120],{"class":41,"line":118},[39,157117,156762],{"class":53},[39,157119,138123],{"class":45},[39,157121,121011],{"class":74},[39,157123,157124,157126,157129],{"class":41,"line":125},[39,157125,156762],{"class":53},[39,157127,157128],{"class":45},"\u002F=",[39,157130,48698],{"class":74},[19,157132,157133],{},"等价关系：",[30,157135,157137],{"className":31353,"code":157136,"language":31355,"meta":35,"style":35},"num += 1\nnum = num + 1\n",[26,157138,157139,157147],{"__ignoreMap":35},[39,157140,157141,157143,157145],{"class":41,"line":42},[39,157142,156762],{"class":53},[39,157144,10545],{"class":45},[39,157146,56674],{"class":74},[39,157148,157149,157151,157153,157156,157158],{"class":41,"line":92},[39,157150,156762],{"class":53},[39,157152,1117],{"class":45},[39,157154,157155],{"class":53}," num ",[39,157157,101],{"class":45},[39,157159,56674],{"class":74},[19,157161,157162,157163,101993,157166,29360],{},"Python 没有 ",[26,157164,157165],{},"num++",[26,157167,157168],{},"num--",[476,157170,157172],{"id":157171},"_273-比较运算符","2.7.3 比较运算符",[19,157174,157175],{},"比较运算结果是布尔值。",[30,157177,157179],{"className":31353,"code":157178,"language":31355,"meta":35,"style":35},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[26,157180,157181,157195,157210,157224],{"__ignoreMap":35},[39,157182,157183,157185,157187,157189,157191,157193],{"class":41,"line":42},[39,157184,31390],{"class":74},[39,157186,54],{"class":53},[39,157188,423],{"class":74},[39,157190,27197],{"class":45},[39,157192,3245],{"class":74},[39,157194,574],{"class":53},[39,157196,157197,157199,157201,157203,157206,157208],{"class":41,"line":92},[39,157198,31390],{"class":74},[39,157200,54],{"class":53},[39,157202,423],{"class":74},[39,157204,157205],{"class":45}," >=",[39,157207,75],{"class":74},[39,157209,574],{"class":53},[39,157211,157212,157214,157216,157218,157220,157222],{"class":41,"line":112},[39,157213,31390],{"class":74},[39,157215,54],{"class":53},[39,157217,423],{"class":74},[39,157219,102534],{"class":45},[39,157221,3180],{"class":74},[39,157223,574],{"class":53},[39,157225,157226,157228,157230,157232,157235,157237],{"class":41,"line":118},[39,157227,31390],{"class":74},[39,157229,54],{"class":53},[39,157231,423],{"class":74},[39,157233,157234],{"class":45}," !=",[39,157236,3180],{"class":74},[39,157238,574],{"class":53},[19,157240,157241,157242,157244,157245,29360],{},"注意：判断相等用 ",[26,157243,4032],{},"，赋值用 ",[26,157246,1117],{},[30,157248,157250],{"className":31353,"code":157249,"language":31355,"meta":35,"style":35},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[26,157251,157252,157264],{"__ignoreMap":35},[39,157253,157254,157256,157258,157261],{"class":41,"line":42},[39,157255,147521],{"class":53},[39,157257,1117],{"class":45},[39,157259,157260],{"class":74}," 18",[39,157262,157263],{"class":128},"       # 赋值\n",[39,157265,157266,157268,157270,157272],{"class":41,"line":92},[39,157267,147521],{"class":53},[39,157269,4032],{"class":45},[39,157271,157260],{"class":74},[39,157273,157274],{"class":128},"      # 判断是否相等\n",[476,157276,157278],{"id":157277},"_274-逻辑运算符","2.7.4 逻辑运算符",[1404,157280,157281,157289],{},[1407,157282,157283],{},[1410,157284,157285,157287],{},[1413,157286,156899],{},[1413,157288,26844],{},[1450,157290,157291,157300,157309],{},[1410,157292,157293,157297],{},[1455,157294,157295],{},[26,157296,31437],{},[1455,157298,157299],{},"并且",[1410,157301,157302,157306],{},[1455,157303,157304],{},[26,157305,116065],{},[1455,157307,157308],{},"或者",[1410,157310,157311,157316],{},[1455,157312,157313],{},[26,157314,157315],{},"not",[1455,157317,157318],{},"取反",[30,157320,157322],{"className":31353,"code":157321,"language":31355,"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",[26,157323,157324,157332,157341,157345,157360,157374],{"__ignoreMap":35},[39,157325,157326,157328,157330],{"class":41,"line":42},[39,157327,147521],{"class":53},[39,157329,1117],{"class":45},[39,157331,89040],{"class":74},[39,157333,157334,157337,157339],{"class":41,"line":92},[39,157335,157336],{"class":53},"has_ticket ",[39,157338,1117],{"class":45},[39,157340,154574],{"class":74},[39,157342,157343],{"class":41,"line":112},[39,157344,122],{"emptyLinePlaceholder":121},[39,157346,157347,157349,157351,157353,157355,157357],{"class":41,"line":118},[39,157348,31390],{"class":74},[39,157350,156743],{"class":53},[39,157352,2820],{"class":45},[39,157354,157260],{"class":74},[39,157356,121404],{"class":45},[39,157358,157359],{"class":53}," has_ticket)\n",[39,157361,157362,157364,157366,157368,157370,157372],{"class":41,"line":125},[39,157363,31390],{"class":74},[39,157365,156743],{"class":53},[39,157367,2170],{"class":45},[39,157369,157260],{"class":74},[39,157371,115176],{"class":45},[39,157373,157359],{"class":53},[39,157375,157376,157378,157380,157382],{"class":41,"line":132},[39,157377,31390],{"class":74},[39,157379,54],{"class":53},[39,157381,157315],{"class":45},[39,157383,157359],{"class":53},[14,157385,157387],{"id":157386},"_28-字符串定义","2.8 字符串定义",[19,157389,157390],{},"三种常见写法：",[30,157392,157394],{"className":31353,"code":157393,"language":31355,"meta":35,"style":35},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[26,157395,157396,157406,157415,157425],{"__ignoreMap":35},[39,157397,157398,157401,157403],{"class":41,"line":42},[39,157399,157400],{"class":53},"name1 ",[39,157402,1117],{"class":45},[39,157404,157405],{"class":237}," '小明'\n",[39,157407,157408,157411,157413],{"class":41,"line":92},[39,157409,157410],{"class":53},"name2 ",[39,157412,1117],{"class":45},[39,157414,150328],{"class":237},[39,157416,157417,157420,157422],{"class":41,"line":112},[39,157418,157419],{"class":53},"text ",[39,157421,1117],{"class":45},[39,157423,157424],{"class":237}," \"\"\"这是多行字符串\n",[39,157426,157427],{"class":41,"line":118},[39,157428,157429],{"class":237},"可以换行\"\"\"\n",[19,157431,157432],{},"字符串中包含引号：",[30,157434,157436],{"className":31353,"code":157435,"language":31355,"meta":35,"style":35},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[26,157437,157438,157448,157458],{"__ignoreMap":35},[39,157439,157440,157443,157445],{"class":41,"line":42},[39,157441,157442],{"class":53},"msg ",[39,157444,1117],{"class":45},[39,157446,157447],{"class":237}," \"他说:'你好'\"\n",[39,157449,157450,157453,157455],{"class":41,"line":92},[39,157451,157452],{"class":53},"msg2 ",[39,157454,1117],{"class":45},[39,157456,157457],{"class":237}," '他说:\"你好\"'\n",[39,157459,157460,157463,157465,157468,157471,157474,157476],{"class":41,"line":112},[39,157461,157462],{"class":53},"msg3 ",[39,157464,1117],{"class":45},[39,157466,157467],{"class":237}," \"他说:",[39,157469,157470],{"class":74},"\\\"",[39,157472,157473],{"class":237},"你好",[39,157475,157470],{"class":74},[39,157477,26108],{"class":237},[19,157479,157480],{},"常见转义字符：",[1404,157482,157483,157492],{},[1407,157484,157485],{},[1410,157486,157487,157490],{},[1413,157488,157489],{},"写法",[1413,157491,101675],{},[1450,157493,157494,157504,157513,157523,157532],{},[1410,157495,157496,157501],{},[1455,157497,157498],{},[26,157499,157500],{},"\\n",[1455,157502,157503],{},"换行",[1410,157505,157506,157510],{},[1455,157507,157508],{},[26,157509,2359],{},[1455,157511,157512],{},"制表符",[1410,157514,157515,157520],{},[1455,157516,157517],{},[26,157518,157519],{},"\\\\",[1455,157521,157522],{},"反斜杠",[1410,157524,157525,157529],{},[1455,157526,157527],{},[26,157528,157470],{},[1455,157530,157531],{},"双引号",[1410,157533,157534,157539],{},[1455,157535,157536],{},[26,157537,157538],{},"\\'",[1455,157540,157541],{},"单引号",[14,157543,157545],{"id":157544},"_29-字符串拼接","2.9 字符串拼接",[30,157547,157549],{"className":31353,"code":157548,"language":31355,"meta":35,"style":35},"name = \"小明\"\nprint(\"你好，\" + name)\n",[26,157550,157551,157559],{"__ignoreMap":35},[39,157552,157553,157555,157557],{"class":41,"line":42},[39,157554,147511],{"class":53},[39,157556,1117],{"class":45},[39,157558,150328],{"class":237},[39,157560,157561,157563,157565,157568,157570],{"class":41,"line":92},[39,157562,31390],{"class":74},[39,157564,54],{"class":53},[39,157566,157567],{"class":237},"\"你好，\"",[39,157569,46541],{"class":45},[39,157571,157572],{"class":53}," name)\n",[19,157574,157575],{},"字符串只能和字符串拼接：",[30,157577,157579],{"className":31353,"code":157578,"language":31355,"meta":35,"style":35},"age = 18\nprint(\"年龄:\" + str(age))\n",[26,157580,157581,157589],{"__ignoreMap":35},[39,157582,157583,157585,157587],{"class":41,"line":42},[39,157584,147521],{"class":53},[39,157586,1117],{"class":45},[39,157588,147526],{"class":74},[39,157590,157591,157593,157595,157597,157599,157601],{"class":41,"line":92},[39,157592,31390],{"class":74},[39,157594,54],{"class":53},[39,157596,147492],{"class":237},[39,157598,46541],{"class":45},[39,157600,74894],{"class":74},[39,157602,157603],{"class":53},"(age))\n",[19,157605,157606],{},"更推荐使用格式化字符串。",[14,157608,157610],{"id":157609},"_210-字符串格式化","2.10 字符串格式化",[476,157612,157614],{"id":157613},"_2101-百分号格式化","2.10.1 百分号格式化",[30,157616,157618],{"className":31353,"code":157617,"language":31355,"meta":35,"style":35},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[26,157619,157620,157628,157636,157645,157649],{"__ignoreMap":35},[39,157621,157622,157624,157626],{"class":41,"line":42},[39,157623,147511],{"class":53},[39,157625,1117],{"class":45},[39,157627,150328],{"class":237},[39,157629,157630,157632,157634],{"class":41,"line":92},[39,157631,147521],{"class":53},[39,157633,1117],{"class":45},[39,157635,147526],{"class":74},[39,157637,157638,157640,157642],{"class":41,"line":112},[39,157639,156333],{"class":53},[39,157641,1117],{"class":45},[39,157643,157644],{"class":74}," 95.5\n",[39,157646,157647],{"class":41,"line":118},[39,157648,122],{"emptyLinePlaceholder":121},[39,157650,157651,157653,157655,157658,157661,157664,157667,157670,157673,157675,157677],{"class":41,"line":125},[39,157652,31390],{"class":74},[39,157654,54],{"class":53},[39,157656,157657],{"class":237},"\"姓名:",[39,157659,157660],{"class":74},"%s",[39,157662,157663],{"class":237}," 年龄:",[39,157665,157666],{"class":74},"%d",[39,157668,157669],{"class":237}," 分数:",[39,157671,157672],{"class":74},"%.1f",[39,157674,1516],{"class":237},[39,157676,157056],{"class":45},[39,157678,157679],{"class":53}," (name, age, score))\n",[19,157681,157682],{},"常用占位符：",[1404,157684,157685,157694],{},[1407,157686,157687],{},[1410,157688,157689,157692],{},[1413,157690,157691],{},"占位符",[1413,157693,26844],{},[1450,157695,157696,157704,157712],{},[1410,157697,157698,157702],{},[1455,157699,157700],{},[26,157701,157660],{},[1455,157703,156199],{},[1410,157705,157706,157710],{},[1455,157707,157708],{},[26,157709,157666],{},[1455,157711,156177],{},[1410,157713,157714,157719],{},[1455,157715,157716],{},[26,157717,157718],{},"%f",[1455,157720,156188],{},[19,157722,157723],{},"精度控制：",[30,157725,157727],{"className":31353,"code":157726,"language":31355,"meta":35,"style":35},"price = 12.3456\nprint(\"%.2f\" % price)\n",[26,157728,157729,157738],{"__ignoreMap":35},[39,157730,157731,157733,157735],{"class":41,"line":42},[39,157732,147656],{"class":53},[39,157734,1117],{"class":45},[39,157736,157737],{"class":74}," 12.3456\n",[39,157739,157740,157742,157744,157746,157749,157751,157753],{"class":41,"line":92},[39,157741,31390],{"class":74},[39,157743,54],{"class":53},[39,157745,1516],{"class":237},[39,157747,157748],{"class":74},"%.2f",[39,157750,1516],{"class":237},[39,157752,157056],{"class":45},[39,157754,157755],{"class":53}," price)\n",[476,157757,157759],{"id":157758},"_2102-format方法","2.10.2 format方法",[30,157761,157763],{"className":31353,"code":157762,"language":31355,"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",[26,157764,157765,157773,157781,157785,157804,157824],{"__ignoreMap":35},[39,157766,157767,157769,157771],{"class":41,"line":42},[39,157768,147511],{"class":53},[39,157770,1117],{"class":45},[39,157772,150328],{"class":237},[39,157774,157775,157777,157779],{"class":41,"line":92},[39,157776,147521],{"class":53},[39,157778,1117],{"class":45},[39,157780,147526],{"class":74},[39,157782,157783],{"class":41,"line":112},[39,157784,122],{"emptyLinePlaceholder":121},[39,157786,157787,157789,157791,157793,157795,157797,157799,157801],{"class":41,"line":118},[39,157788,31390],{"class":74},[39,157790,54],{"class":53},[39,157792,157657],{"class":237},[39,157794,33434],{"class":74},[39,157796,157663],{"class":237},[39,157798,33434],{"class":74},[39,157800,1516],{"class":237},[39,157802,157803],{"class":53},".format(name, age))\n",[39,157805,157806,157808,157810,157812,157815,157817,157820,157822],{"class":41,"line":125},[39,157807,31390],{"class":74},[39,157809,54],{"class":53},[39,157811,157657],{"class":237},[39,157813,157814],{"class":74},"{0}",[39,157816,157663],{"class":237},[39,157818,157819],{"class":74},"{1}",[39,157821,1516],{"class":237},[39,157823,157803],{"class":53},[39,157825,157826,157828,157830,157832,157835,157837,157840,157842,157845,157847,157849,157852,157854,157856],{"class":41,"line":132},[39,157827,31390],{"class":74},[39,157829,54],{"class":53},[39,157831,157657],{"class":237},[39,157833,157834],{"class":74},"{name}",[39,157836,157663],{"class":237},[39,157838,157839],{"class":74},"{age}",[39,157841,1516],{"class":237},[39,157843,157844],{"class":53},".format(",[39,157846,80785],{"class":59},[39,157848,1117],{"class":45},[39,157850,157851],{"class":53},"name, ",[39,157853,71196],{"class":59},[39,157855,1117],{"class":45},[39,157857,157858],{"class":53},"age))\n",[476,157860,157862],{"id":157861},"_2103-f-string","2.10.3 f-string",[19,157864,157865],{},"推荐写法：",[30,157867,157869],{"className":31353,"code":157868,"language":31355,"meta":35,"style":35},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[26,157870,157871,157879,157887,157895,157899],{"__ignoreMap":35},[39,157872,157873,157875,157877],{"class":41,"line":42},[39,157874,147511],{"class":53},[39,157876,1117],{"class":45},[39,157878,150328],{"class":237},[39,157880,157881,157883,157885],{"class":41,"line":92},[39,157882,147521],{"class":53},[39,157884,1117],{"class":45},[39,157886,147526],{"class":74},[39,157888,157889,157891,157893],{"class":41,"line":112},[39,157890,156333],{"class":53},[39,157892,1117],{"class":45},[39,157894,157644],{"class":74},[39,157896,157897],{"class":41,"line":118},[39,157898,122],{"emptyLinePlaceholder":121},[39,157900,157901,157903,157905,157907,157909,157911,157913,157915,157917,157919,157921,157923,157925,157927,157930,157933,157935,157937],{"class":41,"line":125},[39,157902,31390],{"class":74},[39,157904,54],{"class":53},[39,157906,1321],{"class":45},[39,157908,157657],{"class":237},[39,157910,2156],{"class":74},[39,157912,80785],{"class":53},[39,157914,2206],{"class":74},[39,157916,157663],{"class":237},[39,157918,2156],{"class":74},[39,157920,71196],{"class":53},[39,157922,2206],{"class":74},[39,157924,157669],{"class":237},[39,157926,2156],{"class":74},[39,157928,157929],{"class":53},"score",[39,157931,157932],{"class":45},":.1f",[39,157934,2206],{"class":74},[39,157936,1516],{"class":237},[39,157938,574],{"class":53},[19,157940,157941],{},"表达式也可以放进去：",[30,157943,157945],{"className":31353,"code":157944,"language":31355,"meta":35,"style":35},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[26,157946,157947,157955,157963],{"__ignoreMap":35},[39,157948,157949,157951,157953],{"class":41,"line":42},[39,157950,147656],{"class":53},[39,157952,1117],{"class":45},[39,157954,147661],{"class":74},[39,157956,157957,157959,157961],{"class":41,"line":92},[39,157958,147666],{"class":53},[39,157960,1117],{"class":45},[39,157962,55402],{"class":74},[39,157964,157965,157967,157969,157971,157974,157976,157978,157980,157983,157985,157988],{"class":41,"line":112},[39,157966,31390],{"class":74},[39,157968,54],{"class":53},[39,157970,1321],{"class":45},[39,157972,157973],{"class":237},"\"总价:",[39,157975,2156],{"class":74},[39,157977,147656],{"class":53},[39,157979,1717],{"class":45},[39,157981,157982],{"class":53}," count",[39,157984,2206],{"class":74},[39,157986,157987],{"class":237},"元\"",[39,157989,574],{"class":53},[14,157991,157993],{"id":157992},"_211-input输入","2.11 input输入",[19,157995,157996,157999],{},[26,157997,157998],{},"input()"," 会暂停程序，等待用户输入。",[30,158001,158003],{"className":31353,"code":158002,"language":31355,"meta":35,"style":35},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[26,158004,158005,158019],{"__ignoreMap":35},[39,158006,158007,158009,158011,158013,158015,158017],{"class":41,"line":42},[39,158008,147511],{"class":53},[39,158010,1117],{"class":45},[39,158012,61580],{"class":74},[39,158014,54],{"class":53},[39,158016,153354],{"class":237},[39,158018,574],{"class":53},[39,158020,158021,158023,158025,158027,158030,158032,158034,158036,158038],{"class":41,"line":92},[39,158022,31390],{"class":74},[39,158024,54],{"class":53},[39,158026,1321],{"class":45},[39,158028,158029],{"class":237},"\"你好，",[39,158031,2156],{"class":74},[39,158033,80785],{"class":53},[39,158035,2206],{"class":74},[39,158037,1516],{"class":237},[39,158039,574],{"class":53},[19,158041,158042],{},"输入整数：",[30,158044,158046],{"className":31353,"code":158045,"language":31355,"meta":35,"style":35},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[26,158047,158048,158066],{"__ignoreMap":35},[39,158049,158050,158052,158054,158056,158058,158060,158062,158064],{"class":41,"line":42},[39,158051,147521],{"class":53},[39,158053,1117],{"class":45},[39,158055,963],{"class":74},[39,158057,54],{"class":53},[39,158059,54796],{"class":74},[39,158061,54],{"class":53},[39,158063,153369],{"class":237},[39,158065,31472],{"class":53},[39,158067,158068,158070,158072,158074,158077,158079,158081,158083,158086,158088],{"class":41,"line":92},[39,158069,31390],{"class":74},[39,158071,54],{"class":53},[39,158073,1321],{"class":45},[39,158075,158076],{"class":237},"\"明年你",[39,158078,2156],{"class":74},[39,158080,147521],{"class":53},[39,158082,101],{"class":45},[39,158084,158085],{"class":74}," 1}",[39,158087,150379],{"class":237},[39,158089,574],{"class":53},[19,158091,158092],{},"输入小数：",[30,158094,158096],{"className":31353,"code":158095,"language":31355,"meta":35,"style":35},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[26,158097,158098,158117],{"__ignoreMap":35},[39,158099,158100,158102,158104,158106,158108,158110,158112,158115],{"class":41,"line":42},[39,158101,156306],{"class":53},[39,158103,1117],{"class":45},[39,158105,110772],{"class":74},[39,158107,54],{"class":53},[39,158109,54796],{"class":74},[39,158111,54],{"class":53},[39,158113,158114],{"class":237},"\"请输入身高:\"",[39,158116,31472],{"class":53},[39,158118,158119,158121,158123,158125,158128,158130,158132,158135,158137,158140],{"class":41,"line":92},[39,158120,31390],{"class":74},[39,158122,54],{"class":53},[39,158124,1321],{"class":45},[39,158126,158127],{"class":237},"\"身高:",[39,158129,2156],{"class":74},[39,158131,25956],{"class":53},[39,158133,158134],{"class":45},":.2f",[39,158136,2206],{"class":74},[39,158138,158139],{"class":237},"米\"",[39,158141,574],{"class":53},[14,158143,158145],{"id":158144},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158147,124267],{},[328,158149,158150,158153,158156,158159],{},[331,158151,158152],{},"输入商品单价。",[331,158154,158155],{},"输入购买数量。",[331,158157,158158],{},"输入折扣，例如 0.8 表示八折。",[331,158160,158161],{},"输出最终金额，保留两位小数。",[19,158163,11101],{},[30,158165,158167],{"className":31353,"code":158166,"language":31355,"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",[26,158168,158169,158188,158207,158227,158231,158251,158255,158278,158299,158321],{"__ignoreMap":35},[39,158170,158171,158173,158175,158177,158179,158181,158183,158186],{"class":41,"line":42},[39,158172,147656],{"class":53},[39,158174,1117],{"class":45},[39,158176,110772],{"class":74},[39,158178,54],{"class":53},[39,158180,54796],{"class":74},[39,158182,54],{"class":53},[39,158184,158185],{"class":237},"\"请输入商品单价:\"",[39,158187,31472],{"class":53},[39,158189,158190,158192,158194,158196,158198,158200,158202,158205],{"class":41,"line":92},[39,158191,147666],{"class":53},[39,158193,1117],{"class":45},[39,158195,963],{"class":74},[39,158197,54],{"class":53},[39,158199,54796],{"class":74},[39,158201,54],{"class":53},[39,158203,158204],{"class":237},"\"请输入购买数量:\"",[39,158206,31472],{"class":53},[39,158208,158209,158212,158214,158216,158218,158220,158222,158225],{"class":41,"line":112},[39,158210,158211],{"class":53},"discount ",[39,158213,1117],{"class":45},[39,158215,110772],{"class":74},[39,158217,54],{"class":53},[39,158219,54796],{"class":74},[39,158221,54],{"class":53},[39,158223,158224],{"class":237},"\"请输入折扣:\"",[39,158226,31472],{"class":53},[39,158228,158229],{"class":41,"line":118},[39,158230,122],{"emptyLinePlaceholder":121},[39,158232,158233,158236,158238,158241,158243,158246,158248],{"class":41,"line":125},[39,158234,158235],{"class":53},"total ",[39,158237,1117],{"class":45},[39,158239,158240],{"class":53}," price ",[39,158242,1717],{"class":45},[39,158244,158245],{"class":53}," count ",[39,158247,1717],{"class":45},[39,158249,158250],{"class":53}," discount\n",[39,158252,158253],{"class":41,"line":132},[39,158254,122],{"emptyLinePlaceholder":121},[39,158256,158257,158259,158261,158263,158266,158268,158270,158272,158274,158276],{"class":41,"line":138},[39,158258,31390],{"class":74},[39,158260,54],{"class":53},[39,158262,1321],{"class":45},[39,158264,158265],{"class":237},"\"商品单价:",[39,158267,2156],{"class":74},[39,158269,80790],{"class":53},[39,158271,158134],{"class":45},[39,158273,2206],{"class":74},[39,158275,1516],{"class":237},[39,158277,574],{"class":53},[39,158279,158280,158282,158284,158286,158289,158291,158293,158295,158297],{"class":41,"line":169},[39,158281,31390],{"class":74},[39,158283,54],{"class":53},[39,158285,1321],{"class":45},[39,158287,158288],{"class":237},"\"购买数量:",[39,158290,2156],{"class":74},[39,158292,85409],{"class":53},[39,158294,2206],{"class":74},[39,158296,1516],{"class":237},[39,158298,574],{"class":53},[39,158300,158301,158303,158305,158307,158310,158312,158315,158317,158319],{"class":41,"line":190},[39,158302,31390],{"class":74},[39,158304,54],{"class":53},[39,158306,1321],{"class":45},[39,158308,158309],{"class":237},"\"折扣:",[39,158311,2156],{"class":74},[39,158313,158314],{"class":53},"discount",[39,158316,2206],{"class":74},[39,158318,1516],{"class":237},[39,158320,574],{"class":53},[39,158322,158323,158325,158327,158329,158332,158334,158337,158339,158341,158343],{"class":41,"line":202},[39,158324,31390],{"class":74},[39,158326,54],{"class":53},[39,158328,1321],{"class":45},[39,158330,158331],{"class":237},"\"应付金额:",[39,158333,2156],{"class":74},[39,158335,158336],{"class":53},"total",[39,158338,158134],{"class":45},[39,158340,2206],{"class":74},[39,158342,157987],{"class":237},[39,158344,574],{"class":53},[14,158346,158348],{"id":158347},"_213-易错点","2.13 易错点",[328,158350,158351,158356,158362,158370,158373],{},[331,158352,158353,158355],{},[26,158354,157998],{}," 的结果是字符串，做运算前要转换。",[331,158357,158358,158359,29360],{},"字符串拼接时，数字要先 ",[26,158360,158361],{},"str()",[331,158363,158364,158366,158367,158369],{},[26,158365,1117],{}," 是赋值，",[26,158368,4032],{}," 是比较。",[331,158371,158372],{},"Python 没有自增自减运算符。",[331,158374,158375],{},"浮点数计算可能有精度误差：",[30,158377,158379],{"className":31353,"code":158378,"language":31355,"meta":35,"style":35},"print(0.1 + 0.2)\n",[26,158380,158381],{"__ignoreMap":35},[39,158382,158383,158385,158387,158389,158391,158394],{"class":41,"line":42},[39,158384,31390],{"class":74},[39,158386,54],{"class":53},[39,158388,87185],{"class":74},[39,158390,46541],{"class":45},[39,158392,158393],{"class":74}," 0.2",[39,158395,574],{"class":53},[19,158397,158398,158399,158402],{},"金额计算如果要求严格，可以后续学习 ",[26,158400,158401],{},"decimal"," 模块。",[14,158404,158406],{"id":158405},"_214-本章练习","2.14 本章练习",[328,158408,158409,158412,158415,158418,158421],{},[331,158410,158411],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[331,158413,158414],{},"输入圆的半径，计算面积，保留两位小数。",[331,158416,158417],{},"输入工资和奖金，计算总收入。",[331,158419,158420],{},"输入摄氏温度，转换为华氏温度。",[331,158422,158423],{},"写一个 BMI 计算程序：",[30,158425,158428],{"className":158426,"code":158427,"language":6267,"meta":35},[6265],"BMI = 体重kg \u002F 身高m ** 2\n",[26,158429,158427],{"__ignoreMap":35},[1192,158431,158432],{},"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":92,"depth":92,"links":158434},[158435,158436,158437,158438,158439,158440,158441,158447,158448,158449,158454,158455,158456,158457],{"id":155996,"depth":92,"text":155997},{"id":156105,"depth":92,"text":156106},{"id":156276,"depth":92,"text":156277},{"id":156353,"depth":92,"text":156354},{"id":51706,"depth":92,"text":51707},{"id":156659,"depth":92,"text":156660},{"id":156885,"depth":92,"text":156886,"children":158442},[158443,158444,158445,158446],{"id":156889,"depth":112,"text":156890},{"id":157083,"depth":112,"text":157084},{"id":157171,"depth":112,"text":157172},{"id":157277,"depth":112,"text":157278},{"id":157386,"depth":92,"text":157387},{"id":157544,"depth":92,"text":157545},{"id":157609,"depth":92,"text":157610,"children":158450},[158451,158452,158453],{"id":157613,"depth":112,"text":157614},{"id":157758,"depth":112,"text":157759},{"id":157861,"depth":112,"text":157862},{"id":157992,"depth":92,"text":157993},{"id":158144,"depth":92,"text":158145},{"id":158347,"depth":92,"text":158348},{"id":158405,"depth":92,"text":158406},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155988,"description":24350},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158464,"title":158465,"body":158466,"description":24350,"extension":1203,"meta":160102,"navigation":121,"path":160103,"seo":160104,"stem":160105,"__hash__":160106},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158467,"toc":160083},[158468,158471,158475,158478,158493,158496,158524,158528,158578,158580,158596,158599,158625,158628,158632,158699,158702,158718,158722,158725,158843,158846,158853,158902,158908,158912,158915,159028,159031,159035,159039,159042,159092,159096,159099,159149,159153,159156,159194,159198,159201,159247,159250,159285,159289,159294,159297,159343,159345,159412,159416,159422,159533,159542,159546,159548,159559,159561,159727,159731,159733,159747,159749,159963,159967,159986,160003,160006,160052,160056,160080],[10,158469,158465],{"id":158470},"_3-判断语句",[14,158472,158474],{"id":158473},"_31-布尔值","3.1 布尔值",[19,158476,158477],{},"判断语句依赖布尔值：",[30,158479,158481],{"className":31353,"code":158480,"language":31355,"meta":35,"style":35},"True\nFalse\n",[26,158482,158483,158488],{"__ignoreMap":35},[39,158484,158485],{"class":41,"line":42},[39,158486,158487],{"class":74},"True\n",[39,158489,158490],{"class":41,"line":92},[39,158491,158492],{"class":74},"False\n",[19,158494,158495],{},"比较表达式会产生布尔值：",[30,158497,158499],{"className":31353,"code":158498,"language":31355,"meta":35,"style":35},"age = 18\nprint(age >= 18)  # True\n",[26,158500,158501,158509],{"__ignoreMap":35},[39,158502,158503,158505,158507],{"class":41,"line":42},[39,158504,147521],{"class":53},[39,158506,1117],{"class":45},[39,158508,147526],{"class":74},[39,158510,158511,158513,158515,158517,158519,158521],{"class":41,"line":92},[39,158512,31390],{"class":74},[39,158514,156743],{"class":53},[39,158516,2820],{"class":45},[39,158518,157260],{"class":74},[39,158520,46783],{"class":53},[39,158522,158523],{"class":128},"# True\n",[14,158525,158527],{"id":158526},"_32-if基础语法","3.2 if基础语法",[30,158529,158531],{"className":31353,"code":158530,"language":31355,"meta":35,"style":35},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[26,158532,158533,158551,158555,158567],{"__ignoreMap":35},[39,158534,158535,158537,158539,158541,158543,158545,158547,158549],{"class":41,"line":42},[39,158536,147521],{"class":53},[39,158538,1117],{"class":45},[39,158540,963],{"class":74},[39,158542,54],{"class":53},[39,158544,54796],{"class":74},[39,158546,54],{"class":53},[39,158548,153369],{"class":237},[39,158550,31472],{"class":53},[39,158552,158553],{"class":41,"line":92},[39,158554,122],{"emptyLinePlaceholder":121},[39,158556,158557,158559,158561,158563,158565],{"class":41,"line":112},[39,158558,2654],{"class":45},[39,158560,16680],{"class":53},[39,158562,2820],{"class":45},[39,158564,157260],{"class":74},[39,158566,4822],{"class":53},[39,158568,158569,158571,158573,158576],{"class":41,"line":118},[39,158570,32274],{"class":74},[39,158572,54],{"class":53},[39,158574,158575],{"class":237},"\"可以进入网吧\"",[39,158577,574],{"class":53},[19,158579,10093],{},[328,158581,158582,158587,158590,158593],{},[331,158583,158584,158586],{},[26,158585,2654],{}," 后面是条件表达式。",[331,158588,158589],{},"条件后面必须写冒号。",[331,158591,158592],{},"条件成立时执行缩进代码块。",[331,158594,158595],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158597,158598],{},"错误示例：",[30,158600,158602],{"className":31353,"code":158601,"language":31355,"meta":35,"style":35},"if age >= 18\n    print(\"可以进入\")\n",[26,158603,158604,158614],{"__ignoreMap":35},[39,158605,158606,158608,158610,158612],{"class":41,"line":42},[39,158607,2654],{"class":45},[39,158609,16680],{"class":53},[39,158611,2820],{"class":45},[39,158613,147526],{"class":74},[39,158615,158616,158618,158620,158623],{"class":41,"line":92},[39,158617,32274],{"class":74},[39,158619,54],{"class":53},[39,158621,158622],{"class":237},"\"可以进入\"",[39,158624,574],{"class":53},[19,158626,158627],{},"缺少冒号。",[14,158629,158631],{"id":158630},"_33-if-else","3.3 if else",[30,158633,158635],{"className":31353,"code":158634,"language":31355,"meta":35,"style":35},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[26,158636,158637,158655,158659,158671,158682,158688],{"__ignoreMap":35},[39,158638,158639,158641,158643,158645,158647,158649,158651,158653],{"class":41,"line":42},[39,158640,147521],{"class":53},[39,158642,1117],{"class":45},[39,158644,963],{"class":74},[39,158646,54],{"class":53},[39,158648,54796],{"class":74},[39,158650,54],{"class":53},[39,158652,153369],{"class":237},[39,158654,31472],{"class":53},[39,158656,158657],{"class":41,"line":92},[39,158658,122],{"emptyLinePlaceholder":121},[39,158660,158661,158663,158665,158667,158669],{"class":41,"line":112},[39,158662,2654],{"class":45},[39,158664,16680],{"class":53},[39,158666,2820],{"class":45},[39,158668,157260],{"class":74},[39,158670,4822],{"class":53},[39,158672,158673,158675,158677,158680],{"class":41,"line":118},[39,158674,32274],{"class":74},[39,158676,54],{"class":53},[39,158678,158679],{"class":237},"\"成年人\"",[39,158681,574],{"class":53},[39,158683,158684,158686],{"class":41,"line":125},[39,158685,2811],{"class":45},[39,158687,4822],{"class":53},[39,158689,158690,158692,158694,158697],{"class":41,"line":132},[39,158691,32274],{"class":74},[39,158693,54],{"class":53},[39,158695,158696],{"class":237},"\"未成年人\"",[39,158698,574],{"class":53},[19,158700,158701],{},"执行逻辑：",[328,158703,158704,158710,158715],{},[331,158705,158706,158707,158709],{},"条件成立，执行 ",[26,158708,2654],{}," 代码块。",[331,158711,158712,158713,158709],{},"条件不成立，执行 ",[26,158714,2811],{},[331,158716,158717],{},"两个代码块只会执行其中一个。",[14,158719,158721],{"id":158720},"_34-if-elif-else","3.4 if elif else",[19,158723,158724],{},"多条件判断：",[30,158726,158728],{"className":31353,"code":158727,"language":31355,"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",[26,158729,158730,158748,158752,158766,158777,158791,158802,158815,158826,158832],{"__ignoreMap":35},[39,158731,158732,158734,158736,158738,158740,158742,158744,158746],{"class":41,"line":42},[39,158733,156333],{"class":53},[39,158735,1117],{"class":45},[39,158737,963],{"class":74},[39,158739,54],{"class":53},[39,158741,54796],{"class":74},[39,158743,54],{"class":53},[39,158745,153384],{"class":237},[39,158747,31472],{"class":53},[39,158749,158750],{"class":41,"line":92},[39,158751,122],{"emptyLinePlaceholder":121},[39,158753,158754,158756,158759,158761,158764],{"class":41,"line":112},[39,158755,2654],{"class":45},[39,158757,158758],{"class":53}," score ",[39,158760,2820],{"class":45},[39,158762,158763],{"class":74}," 90",[39,158765,4822],{"class":53},[39,158767,158768,158770,158772,158775],{"class":41,"line":118},[39,158769,32274],{"class":74},[39,158771,54],{"class":53},[39,158773,158774],{"class":237},"\"优秀\"",[39,158776,574],{"class":53},[39,158778,158779,158782,158784,158786,158789],{"class":41,"line":125},[39,158780,158781],{"class":45},"elif",[39,158783,158758],{"class":53},[39,158785,2820],{"class":45},[39,158787,158788],{"class":74}," 80",[39,158790,4822],{"class":53},[39,158792,158793,158795,158797,158800],{"class":41,"line":132},[39,158794,32274],{"class":74},[39,158796,54],{"class":53},[39,158798,158799],{"class":237},"\"良好\"",[39,158801,574],{"class":53},[39,158803,158804,158806,158808,158810,158813],{"class":41,"line":138},[39,158805,158781],{"class":45},[39,158807,158758],{"class":53},[39,158809,2820],{"class":45},[39,158811,158812],{"class":74}," 60",[39,158814,4822],{"class":53},[39,158816,158817,158819,158821,158824],{"class":41,"line":169},[39,158818,32274],{"class":74},[39,158820,54],{"class":53},[39,158822,158823],{"class":237},"\"及格\"",[39,158825,574],{"class":53},[39,158827,158828,158830],{"class":41,"line":190},[39,158829,2811],{"class":45},[39,158831,4822],{"class":53},[39,158833,158834,158836,158838,158841],{"class":41,"line":202},[39,158835,32274],{"class":74},[39,158837,54],{"class":53},[39,158839,158840],{"class":237},"\"不及格\"",[39,158842,574],{"class":53},[19,158844,158845],{},"注意判断顺序很重要。",[19,158847,158848,158849,158852],{},"如果把 ",[26,158850,158851],{},"score >= 60"," 放在最前面：",[30,158854,158856],{"className":31353,"code":158855,"language":31355,"meta":35,"style":35},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[26,158857,158858,158870,158880,158892],{"__ignoreMap":35},[39,158859,158860,158862,158864,158866,158868],{"class":41,"line":42},[39,158861,2654],{"class":45},[39,158863,158758],{"class":53},[39,158865,2820],{"class":45},[39,158867,158812],{"class":74},[39,158869,4822],{"class":53},[39,158871,158872,158874,158876,158878],{"class":41,"line":92},[39,158873,32274],{"class":74},[39,158875,54],{"class":53},[39,158877,158823],{"class":237},[39,158879,574],{"class":53},[39,158881,158882,158884,158886,158888,158890],{"class":41,"line":112},[39,158883,158781],{"class":45},[39,158885,158758],{"class":53},[39,158887,2820],{"class":45},[39,158889,158763],{"class":74},[39,158891,4822],{"class":53},[39,158893,158894,158896,158898,158900],{"class":41,"line":118},[39,158895,32274],{"class":74},[39,158897,54],{"class":53},[39,158899,158774],{"class":237},[39,158901,574],{"class":53},[19,158903,158904,158905,158907],{},"成绩 95 会先满足 ",[26,158906,158851],{},"，后面的优秀分支就不会执行。",[14,158909,158911],{"id":158910},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158913,158914],{},"嵌套判断就是在一个判断内部再写判断。",[30,158916,158918],{"className":31353,"code":158917,"language":31355,"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",[26,158919,158920,158938,158953,158957,158969,158983,158993,159000,159011,159017],{"__ignoreMap":35},[39,158921,158922,158924,158926,158928,158930,158932,158934,158936],{"class":41,"line":42},[39,158923,147521],{"class":53},[39,158925,1117],{"class":45},[39,158927,963],{"class":74},[39,158929,54],{"class":53},[39,158931,54796],{"class":74},[39,158933,54],{"class":53},[39,158935,153369],{"class":237},[39,158937,31472],{"class":53},[39,158939,158940,158942,158944,158946,158948,158951],{"class":41,"line":92},[39,158941,157336],{"class":53},[39,158943,1117],{"class":45},[39,158945,61580],{"class":74},[39,158947,54],{"class":53},[39,158949,158950],{"class":237},"\"是否有票(y\u002Fn):\"",[39,158952,574],{"class":53},[39,158954,158955],{"class":41,"line":112},[39,158956,122],{"emptyLinePlaceholder":121},[39,158958,158959,158961,158963,158965,158967],{"class":41,"line":118},[39,158960,2654],{"class":45},[39,158962,16680],{"class":53},[39,158964,2820],{"class":45},[39,158966,157260],{"class":74},[39,158968,4822],{"class":53},[39,158970,158971,158973,158976,158978,158981],{"class":41,"line":125},[39,158972,4184],{"class":45},[39,158974,158975],{"class":53}," has_ticket ",[39,158977,4032],{"class":45},[39,158979,158980],{"class":237}," \"y\"",[39,158982,4822],{"class":53},[39,158984,158985,158987,158989,158991],{"class":41,"line":132},[39,158986,33426],{"class":74},[39,158988,54],{"class":53},[39,158990,158622],{"class":237},[39,158992,574],{"class":53},[39,158994,158995,158998],{"class":41,"line":138},[39,158996,158997],{"class":45},"    else",[39,158999,4822],{"class":53},[39,159001,159002,159004,159006,159009],{"class":41,"line":169},[39,159003,33426],{"class":74},[39,159005,54],{"class":53},[39,159007,159008],{"class":237},"\"请先买票\"",[39,159010,574],{"class":53},[39,159012,159013,159015],{"class":41,"line":190},[39,159014,2811],{"class":45},[39,159016,4822],{"class":53},[39,159018,159019,159021,159023,159026],{"class":41,"line":202},[39,159020,32274],{"class":74},[39,159022,54],{"class":53},[39,159024,159025],{"class":237},"\"未成年人禁止进入\"",[39,159027,574],{"class":53},[19,159029,159030],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159032,159034],{"id":159033},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[476,159036,159038],{"id":159037},"_361-and","3.6.1 and",[19,159040,159041],{},"两个条件都成立才成立。",[30,159043,159045],{"className":31353,"code":159044,"language":31355,"meta":35,"style":35},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[26,159046,159047,159055,159063,159067,159082],{"__ignoreMap":35},[39,159048,159049,159051,159053],{"class":41,"line":42},[39,159050,147521],{"class":53},[39,159052,1117],{"class":45},[39,159054,89040],{"class":74},[39,159056,159057,159059,159061],{"class":41,"line":92},[39,159058,157336],{"class":53},[39,159060,1117],{"class":45},[39,159062,154574],{"class":74},[39,159064,159065],{"class":41,"line":112},[39,159066,122],{"emptyLinePlaceholder":121},[39,159068,159069,159071,159073,159075,159077,159079],{"class":41,"line":118},[39,159070,2654],{"class":45},[39,159072,16680],{"class":53},[39,159074,2820],{"class":45},[39,159076,157260],{"class":74},[39,159078,121404],{"class":45},[39,159080,159081],{"class":53}," has_ticket:\n",[39,159083,159084,159086,159088,159090],{"class":41,"line":125},[39,159085,32274],{"class":74},[39,159087,54],{"class":53},[39,159089,158622],{"class":237},[39,159091,574],{"class":53},[476,159093,159095],{"id":159094},"_362-or","3.6.2 or",[19,159097,159098],{},"只要一个条件成立就成立。",[30,159100,159102],{"className":31353,"code":159101,"language":31355,"meta":35,"style":35},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[26,159103,159104,159113,159122,159126,159138],{"__ignoreMap":35},[39,159105,159106,159109,159111],{"class":41,"line":42},[39,159107,159108],{"class":53},"is_vip ",[39,159110,1117],{"class":45},[39,159112,126782],{"class":74},[39,159114,159115,159118,159120],{"class":41,"line":92},[39,159116,159117],{"class":53},"coupon ",[39,159119,1117],{"class":45},[39,159121,154574],{"class":74},[39,159123,159124],{"class":41,"line":112},[39,159125,122],{"emptyLinePlaceholder":121},[39,159127,159128,159130,159133,159135],{"class":41,"line":118},[39,159129,2654],{"class":45},[39,159131,159132],{"class":53}," is_vip ",[39,159134,116065],{"class":45},[39,159136,159137],{"class":53}," coupon:\n",[39,159139,159140,159142,159144,159147],{"class":41,"line":125},[39,159141,32274],{"class":74},[39,159143,54],{"class":53},[39,159145,159146],{"class":237},"\"可以享受优惠\"",[39,159148,574],{"class":53},[476,159150,159152],{"id":159151},"_363-not","3.6.3 not",[19,159154,159155],{},"取反。",[30,159157,159159],{"className":31353,"code":159158,"language":31355,"meta":35,"style":35},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[26,159160,159161,159170,159174,159183],{"__ignoreMap":35},[39,159162,159163,159166,159168],{"class":41,"line":42},[39,159164,159165],{"class":53},"is_closed ",[39,159167,1117],{"class":45},[39,159169,126782],{"class":74},[39,159171,159172],{"class":41,"line":92},[39,159173,122],{"emptyLinePlaceholder":121},[39,159175,159176,159178,159180],{"class":41,"line":112},[39,159177,2654],{"class":45},[39,159179,39905],{"class":45},[39,159181,159182],{"class":53}," is_closed:\n",[39,159184,159185,159187,159189,159192],{"class":41,"line":118},[39,159186,32274],{"class":74},[39,159188,54],{"class":53},[39,159190,159191],{"class":237},"\"店铺营业中\"",[39,159193,574],{"class":53},[14,159195,159197],{"id":159196},"_37-链式比较","3.7 链式比较",[19,159199,159200],{},"Python 支持链式比较：",[30,159202,159204],{"className":31353,"code":159203,"language":31355,"meta":35,"style":35},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[26,159205,159206,159215,159219,159236],{"__ignoreMap":35},[39,159207,159208,159210,159212],{"class":41,"line":42},[39,159209,156333],{"class":53},[39,159211,1117],{"class":45},[39,159213,159214],{"class":74}," 85\n",[39,159216,159217],{"class":41,"line":92},[39,159218,122],{"emptyLinePlaceholder":121},[39,159220,159221,159223,159225,159228,159230,159232,159234],{"class":41,"line":112},[39,159222,2654],{"class":45},[39,159224,315],{"class":74},[39,159226,159227],{"class":45}," \u003C=",[39,159229,158758],{"class":53},[39,159231,2709],{"class":45},[39,159233,6831],{"class":74},[39,159235,4822],{"class":53},[39,159237,159238,159240,159242,159245],{"class":41,"line":118},[39,159239,32274],{"class":74},[39,159241,54],{"class":53},[39,159243,159244],{"class":237},"\"成绩合法\"",[39,159246,574],{"class":53},[19,159248,159249],{},"等价于：",[30,159251,159253],{"className":31353,"code":159252,"language":31355,"meta":35,"style":35},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[26,159254,159255,159275],{"__ignoreMap":35},[39,159256,159257,159259,159261,159263,159265,159267,159269,159271,159273],{"class":41,"line":42},[39,159258,2654],{"class":45},[39,159260,158758],{"class":53},[39,159262,2820],{"class":45},[39,159264,315],{"class":74},[39,159266,121404],{"class":45},[39,159268,158758],{"class":53},[39,159270,2709],{"class":45},[39,159272,6831],{"class":74},[39,159274,4822],{"class":53},[39,159276,159277,159279,159281,159283],{"class":41,"line":92},[39,159278,32274],{"class":74},[39,159280,54],{"class":53},[39,159282,159244],{"class":237},[39,159284,574],{"class":53},[14,159286,159288],{"id":159287},"_38-真值和假值","3.8 真值和假值",[19,159290,117442,159291,159293],{},[26,159292,2654],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159295,159296],{},"假值：",[30,159298,159300],{"className":31353,"code":159299,"language":31355,"meta":35,"style":35},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[26,159301,159302,159306,159311,159315,159319,159324,159328,159332,159337],{"__ignoreMap":35},[39,159303,159304],{"class":41,"line":42},[39,159305,158492],{"class":74},[39,159307,159308],{"class":41,"line":92},[39,159309,159310],{"class":74},"None\n",[39,159312,159313],{"class":41,"line":112},[39,159314,4168],{"class":74},[39,159316,159317],{"class":41,"line":118},[39,159318,33317],{"class":74},[39,159320,159321],{"class":41,"line":125},[39,159322,159323],{"class":237},"\"\"\n",[39,159325,159326],{"class":41,"line":132},[39,159327,33332],{"class":53},[39,159329,159330],{"class":41,"line":138},[39,159331,537],{"class":53},[39,159333,159334],{"class":41,"line":169},[39,159335,159336],{"class":53},"{}\n",[39,159338,159339,159341],{"class":41,"line":190},[39,159340,156265],{"class":74},[39,159342,537],{"class":53},[19,159344,16108],{},[30,159346,159348],{"className":31353,"code":159347,"language":31355,"meta":35,"style":35},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[26,159349,159350,159364,159368,159375,159395,159401],{"__ignoreMap":35},[39,159351,159352,159354,159356,159358,159360,159362],{"class":41,"line":42},[39,159353,147511],{"class":53},[39,159355,1117],{"class":45},[39,159357,61580],{"class":74},[39,159359,54],{"class":53},[39,159361,153354],{"class":237},[39,159363,574],{"class":53},[39,159365,159366],{"class":41,"line":92},[39,159367,122],{"emptyLinePlaceholder":121},[39,159369,159370,159372],{"class":41,"line":112},[39,159371,2654],{"class":45},[39,159373,159374],{"class":53}," name:\n",[39,159376,159377,159379,159381,159383,159385,159387,159389,159391,159393],{"class":41,"line":118},[39,159378,32274],{"class":74},[39,159380,54],{"class":53},[39,159382,1321],{"class":45},[39,159384,158029],{"class":237},[39,159386,2156],{"class":74},[39,159388,80785],{"class":53},[39,159390,2206],{"class":74},[39,159392,1516],{"class":237},[39,159394,574],{"class":53},[39,159396,159397,159399],{"class":41,"line":125},[39,159398,2811],{"class":45},[39,159400,4822],{"class":53},[39,159402,159403,159405,159407,159410],{"class":41,"line":132},[39,159404,32274],{"class":74},[39,159406,54],{"class":53},[39,159408,159409],{"class":237},"\"姓名不能为空\"",[39,159411,574],{"class":53},[14,159413,159415],{"id":159414},"_39-match语句","3.9 match语句",[19,159417,159418,159419,159421],{},"Python 3.10 开始支持 ",[26,159420,72240],{},"。它适合处理固定选项。",[30,159423,159425],{"className":31353,"code":159424,"language":31355,"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",[26,159426,159427,159443,159447,159454,159464,159475,159484,159495,159504,159515,159522],{"__ignoreMap":35},[39,159428,159429,159432,159434,159436,159438,159441],{"class":41,"line":42},[39,159430,159431],{"class":53},"command ",[39,159433,1117],{"class":45},[39,159435,61580],{"class":74},[39,159437,54],{"class":53},[39,159439,159440],{"class":237},"\"请输入命令:\"",[39,159442,574],{"class":53},[39,159444,159445],{"class":41,"line":92},[39,159446,122],{"emptyLinePlaceholder":121},[39,159448,159449,159451],{"class":41,"line":112},[39,159450,72240],{"class":45},[39,159452,159453],{"class":53}," command:\n",[39,159455,159456,159459,159462],{"class":41,"line":118},[39,159457,159458],{"class":45},"    case",[39,159460,159461],{"class":237}," \"start\"",[39,159463,4822],{"class":53},[39,159465,159466,159468,159470,159473],{"class":41,"line":125},[39,159467,33426],{"class":74},[39,159469,54],{"class":53},[39,159471,159472],{"class":237},"\"启动\"",[39,159474,574],{"class":53},[39,159476,159477,159479,159482],{"class":41,"line":132},[39,159478,159458],{"class":45},[39,159480,159481],{"class":237}," \"stop\"",[39,159483,4822],{"class":53},[39,159485,159486,159488,159490,159493],{"class":41,"line":138},[39,159487,33426],{"class":74},[39,159489,54],{"class":53},[39,159491,159492],{"class":237},"\"停止\"",[39,159494,574],{"class":53},[39,159496,159497,159499,159502],{"class":41,"line":169},[39,159498,159458],{"class":45},[39,159500,159501],{"class":237}," \"restart\"",[39,159503,4822],{"class":53},[39,159505,159506,159508,159510,159513],{"class":41,"line":190},[39,159507,33426],{"class":74},[39,159509,54],{"class":53},[39,159511,159512],{"class":237},"\"重启\"",[39,159514,574],{"class":53},[39,159516,159517,159519],{"class":41,"line":202},[39,159518,159458],{"class":45},[39,159520,159521],{"class":53}," _:\n",[39,159523,159524,159526,159528,159531],{"class":41,"line":207},[39,159525,33426],{"class":74},[39,159527,54],{"class":53},[39,159529,159530],{"class":237},"\"未知命令\"",[39,159532,574],{"class":53},[19,159534,159535,159536,159538,159539,159541],{},"入门阶段掌握 ",[26,159537,155633],{}," 更重要，",[26,159540,72240],{}," 可以作为补充。",[14,159543,159545],{"id":159544},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159547,124267],{},[328,159549,159550,159553,159556],{},[331,159551,159552],{},"输入成绩。",[331,159554,159555],{},"判断成绩是否合法。",[331,159557,159558],{},"输出等级。",[19,159560,11101],{},[30,159562,159564],{"className":31353,"code":159563,"language":31355,"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",[26,159565,159566,159584,159588,159606,159617,159629,159640,159652,159663,159676,159687,159699,159710,159716],{"__ignoreMap":35},[39,159567,159568,159570,159572,159574,159576,159578,159580,159582],{"class":41,"line":42},[39,159569,156333],{"class":53},[39,159571,1117],{"class":45},[39,159573,110772],{"class":74},[39,159575,54],{"class":53},[39,159577,54796],{"class":74},[39,159579,54],{"class":53},[39,159581,153384],{"class":237},[39,159583,31472],{"class":53},[39,159585,159586],{"class":41,"line":92},[39,159587,122],{"emptyLinePlaceholder":121},[39,159589,159590,159592,159594,159596,159598,159600,159602,159604],{"class":41,"line":112},[39,159591,2654],{"class":45},[39,159593,39905],{"class":45},[39,159595,315],{"class":74},[39,159597,159227],{"class":45},[39,159599,158758],{"class":53},[39,159601,2709],{"class":45},[39,159603,6831],{"class":74},[39,159605,4822],{"class":53},[39,159607,159608,159610,159612,159615],{"class":41,"line":118},[39,159609,32274],{"class":74},[39,159611,54],{"class":53},[39,159613,159614],{"class":237},"\"成绩不合法\"",[39,159616,574],{"class":53},[39,159618,159619,159621,159623,159625,159627],{"class":41,"line":125},[39,159620,158781],{"class":45},[39,159622,158758],{"class":53},[39,159624,2820],{"class":45},[39,159626,158763],{"class":74},[39,159628,4822],{"class":53},[39,159630,159631,159633,159635,159638],{"class":41,"line":132},[39,159632,32274],{"class":74},[39,159634,54],{"class":53},[39,159636,159637],{"class":237},"\"等级:A\"",[39,159639,574],{"class":53},[39,159641,159642,159644,159646,159648,159650],{"class":41,"line":138},[39,159643,158781],{"class":45},[39,159645,158758],{"class":53},[39,159647,2820],{"class":45},[39,159649,158788],{"class":74},[39,159651,4822],{"class":53},[39,159653,159654,159656,159658,159661],{"class":41,"line":169},[39,159655,32274],{"class":74},[39,159657,54],{"class":53},[39,159659,159660],{"class":237},"\"等级:B\"",[39,159662,574],{"class":53},[39,159664,159665,159667,159669,159671,159674],{"class":41,"line":190},[39,159666,158781],{"class":45},[39,159668,158758],{"class":53},[39,159670,2820],{"class":45},[39,159672,159673],{"class":74}," 70",[39,159675,4822],{"class":53},[39,159677,159678,159680,159682,159685],{"class":41,"line":202},[39,159679,32274],{"class":74},[39,159681,54],{"class":53},[39,159683,159684],{"class":237},"\"等级:C\"",[39,159686,574],{"class":53},[39,159688,159689,159691,159693,159695,159697],{"class":41,"line":207},[39,159690,158781],{"class":45},[39,159692,158758],{"class":53},[39,159694,2820],{"class":45},[39,159696,158812],{"class":74},[39,159698,4822],{"class":53},[39,159700,159701,159703,159705,159708],{"class":41,"line":212},[39,159702,32274],{"class":74},[39,159704,54],{"class":53},[39,159706,159707],{"class":237},"\"等级:D\"",[39,159709,574],{"class":53},[39,159711,159712,159714],{"class":41,"line":223},[39,159713,2811],{"class":45},[39,159715,4822],{"class":53},[39,159717,159718,159720,159722,159725],{"class":41,"line":228},[39,159719,32274],{"class":74},[39,159721,54],{"class":53},[39,159723,159724],{"class":237},"\"等级:E\"",[39,159726,574],{"class":53},[14,159728,159730],{"id":159729},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159732,124267],{},[328,159734,159735,159738,159741,159744],{},[331,159736,159737],{},"输入消费金额。",[331,159739,159740],{},"输入会员等级，普通、银卡、金卡。",[331,159742,159743],{},"普通不打折，银卡 9 折，金卡 8 折。",[331,159745,159746],{},"满 500 再减 50。",[19,159748,11101],{},[30,159750,159752],{"className":31353,"code":159751,"language":31355,"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",[26,159753,159754,159774,159790,159794,159802,159806,159820,159830,159843,159852,159865,159873,159879,159890,159894,159908,159912,159926,159936,159940],{"__ignoreMap":35},[39,159755,159756,159759,159761,159763,159765,159767,159769,159772],{"class":41,"line":42},[39,159757,159758],{"class":53},"amount ",[39,159760,1117],{"class":45},[39,159762,110772],{"class":74},[39,159764,54],{"class":53},[39,159766,54796],{"class":74},[39,159768,54],{"class":53},[39,159770,159771],{"class":237},"\"请输入消费金额:\"",[39,159773,31472],{"class":53},[39,159775,159776,159779,159781,159783,159785,159788],{"class":41,"line":92},[39,159777,159778],{"class":53},"level ",[39,159780,1117],{"class":45},[39,159782,61580],{"class":74},[39,159784,54],{"class":53},[39,159786,159787],{"class":237},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[39,159789,574],{"class":53},[39,159791,159792],{"class":41,"line":112},[39,159793,122],{"emptyLinePlaceholder":121},[39,159795,159796,159798,159800],{"class":41,"line":118},[39,159797,158211],{"class":53},[39,159799,1117],{"class":45},[39,159801,56674],{"class":74},[39,159803,159804],{"class":41,"line":125},[39,159805,122],{"emptyLinePlaceholder":121},[39,159807,159808,159810,159813,159815,159818],{"class":41,"line":132},[39,159809,2654],{"class":45},[39,159811,159812],{"class":53}," level ",[39,159814,4032],{"class":45},[39,159816,159817],{"class":237}," \"银卡\"",[39,159819,4822],{"class":53},[39,159821,159822,159825,159827],{"class":41,"line":138},[39,159823,159824],{"class":53},"    discount ",[39,159826,1117],{"class":45},[39,159828,159829],{"class":74}," 0.9\n",[39,159831,159832,159834,159836,159838,159841],{"class":41,"line":169},[39,159833,158781],{"class":45},[39,159835,159812],{"class":53},[39,159837,4032],{"class":45},[39,159839,159840],{"class":237}," \"金卡\"",[39,159842,4822],{"class":53},[39,159844,159845,159847,159849],{"class":41,"line":190},[39,159846,159824],{"class":53},[39,159848,1117],{"class":45},[39,159850,159851],{"class":74}," 0.8\n",[39,159853,159854,159856,159858,159860,159863],{"class":41,"line":202},[39,159855,158781],{"class":45},[39,159857,159812],{"class":53},[39,159859,4032],{"class":45},[39,159861,159862],{"class":237}," \"普通\"",[39,159864,4822],{"class":53},[39,159866,159867,159869,159871],{"class":41,"line":207},[39,159868,159824],{"class":53},[39,159870,1117],{"class":45},[39,159872,56674],{"class":74},[39,159874,159875,159877],{"class":41,"line":212},[39,159876,2811],{"class":45},[39,159878,4822],{"class":53},[39,159880,159881,159883,159885,159888],{"class":41,"line":223},[39,159882,32274],{"class":74},[39,159884,54],{"class":53},[39,159886,159887],{"class":237},"\"会员等级输入错误，按普通会员计算\"",[39,159889,574],{"class":53},[39,159891,159892],{"class":41,"line":228},[39,159893,122],{"emptyLinePlaceholder":121},[39,159895,159896,159899,159901,159904,159906],{"class":41,"line":263},[39,159897,159898],{"class":53},"pay ",[39,159900,1117],{"class":45},[39,159902,159903],{"class":53}," amount ",[39,159905,1717],{"class":45},[39,159907,158250],{"class":53},[39,159909,159910],{"class":41,"line":287},[39,159911,122],{"emptyLinePlaceholder":121},[39,159913,159914,159916,159919,159921,159924],{"class":41,"line":292},[39,159915,2654],{"class":45},[39,159917,159918],{"class":53}," pay ",[39,159920,2820],{"class":45},[39,159922,159923],{"class":74}," 500",[39,159925,4822],{"class":53},[39,159927,159928,159931,159933],{"class":41,"line":305},[39,159929,159930],{"class":53},"    pay ",[39,159932,151227],{"class":45},[39,159934,159935],{"class":74}," 50\n",[39,159937,159938],{"class":41,"line":310},[39,159939,122],{"emptyLinePlaceholder":121},[39,159941,159942,159944,159946,159948,159950,159952,159955,159957,159959,159961],{"class":41,"line":321},[39,159943,31390],{"class":74},[39,159945,54],{"class":53},[39,159947,1321],{"class":45},[39,159949,158331],{"class":237},[39,159951,2156],{"class":74},[39,159953,159954],{"class":53},"pay",[39,159956,158134],{"class":45},[39,159958,2206],{"class":74},[39,159960,157987],{"class":237},[39,159962,574],{"class":53},[14,159964,159966],{"id":159965},"_312-易错点","3.12 易错点",[328,159968,159969,159972,159975,159978,159983],{},[331,159970,159971],{},"冒号不能漏。",[331,159973,159974],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[331,159976,159977],{},"多分支判断要注意顺序。",[331,159979,159980,159981,29360],{},"判断相等用 ",[26,159982,4032],{},[331,159984,159985],{},"字符串比较区分大小写：",[30,159987,159989],{"className":31353,"code":159988,"language":31355,"meta":35,"style":35},"\"Y\" == \"y\"  # False\n",[26,159990,159991],{"__ignoreMap":35},[39,159992,159993,159996,159998,160000],{"class":41,"line":42},[39,159994,159995],{"class":237},"\"Y\"",[39,159997,102534],{"class":45},[39,159999,158980],{"class":237},[39,160001,160002],{"class":128},"  # False\n",[19,160004,160005],{},"可转换后再判断：",[30,160007,160009],{"className":31353,"code":160008,"language":31355,"meta":35,"style":35},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[26,160010,160011,160028,160041],{"__ignoreMap":35},[39,160012,160013,160016,160018,160020,160022,160025],{"class":41,"line":42},[39,160014,160015],{"class":53},"answer ",[39,160017,1117],{"class":45},[39,160019,61580],{"class":74},[39,160021,54],{"class":53},[39,160023,160024],{"class":237},"\"是否继续(y\u002Fn):\"",[39,160026,160027],{"class":53},").lower()\n",[39,160029,160030,160032,160035,160037,160039],{"class":41,"line":92},[39,160031,2654],{"class":45},[39,160033,160034],{"class":53}," answer ",[39,160036,4032],{"class":45},[39,160038,158980],{"class":237},[39,160040,4822],{"class":53},[39,160042,160043,160045,160047,160050],{"class":41,"line":112},[39,160044,32274],{"class":74},[39,160046,54],{"class":53},[39,160048,160049],{"class":237},"\"继续\"",[39,160051,574],{"class":53},[14,160053,160055],{"id":160054},"_313-本章练习","3.13 本章练习",[328,160057,160058,160061,160064,160067,160077],{},[331,160059,160060],{},"输入年龄，判断是否成年。",[331,160062,160063],{},"输入年份，判断是否为闰年。",[331,160065,160066],{},"输入三个数字，输出最大值。",[331,160068,160069,160070,160073,160074,160076],{},"写登录判断：用户名是 ",[26,160071,160072],{},"admin"," 且密码是 ",[26,160075,16057],{}," 才登录成功。",[331,160078,160079],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1192,160081,160082],{},"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":92,"depth":92,"links":160084},[160085,160086,160087,160088,160089,160090,160095,160096,160097,160098,160099,160100,160101],{"id":158473,"depth":92,"text":158474},{"id":158526,"depth":92,"text":158527},{"id":158630,"depth":92,"text":158631},{"id":158720,"depth":92,"text":158721},{"id":158910,"depth":92,"text":158911},{"id":159033,"depth":92,"text":159034,"children":160091},[160092,160093,160094],{"id":159037,"depth":112,"text":159038},{"id":159094,"depth":112,"text":159095},{"id":159151,"depth":112,"text":159152},{"id":159196,"depth":92,"text":159197},{"id":159287,"depth":92,"text":159288},{"id":159414,"depth":92,"text":159415},{"id":159544,"depth":92,"text":159545},{"id":159729,"depth":92,"text":159730},{"id":159965,"depth":92,"text":159966},{"id":160054,"depth":92,"text":160055},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158465,"description":24350},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160108,"title":160109,"body":160110,"description":24350,"extension":1203,"meta":161879,"navigation":121,"path":161880,"seo":161881,"stem":161882,"__hash__":161883},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160111,"toc":161859},[160112,160115,160119,160125,160128,160145,160149,160151,160168,160170,160215,160217,160234,160238,160241,160307,160310,160328,160332,160493,160502,160506,160510,160515,160562,160564,160570,160574,160579,160626,160628,160634,160638,160643,160679,160682,160729,160733,160739,160797,160802,160833,160838,160842,160897,160900,160972,160975,161034,161038,161041,161116,161119,161123,161229,161232,161258,161262,161274,161343,161346,161438,161442,161444,161455,161457,161587,161591,161793,161801,161805,161835,161839,161856],[10,160113,160109],{"id":160114},"_4-循环语句",[14,160116,160118],{"id":160117},"_41-为什么需要循环","4.1 为什么需要循环",[19,160120,160121,160122,160124],{},"如果要输出 1 到 100，不应该写 100 行 ",[26,160123,147447],{},"，而应该用循环。",[19,160126,160127],{},"循环适合处理重复任务：",[328,160129,160130,160133,160136,160139,160142],{},[331,160131,160132],{},"重复输出。",[331,160134,160135],{},"重复输入。",[331,160137,160138],{},"遍历数据。",[331,160140,160141],{},"持续执行菜单。",[331,160143,160144],{},"批量处理文件或数据。",[14,160146,160148],{"id":160147},"_42-while循环","4.2 while循环",[19,160150,24],{},[30,160152,160154],{"className":31353,"code":160153,"language":31355,"meta":35,"style":35},"while 条件:\n    循环体\n",[26,160155,160156,160163],{"__ignoreMap":35},[39,160157,160158,160160],{"class":41,"line":42},[39,160159,109638],{"class":45},[39,160161,160162],{"class":53}," 条件:\n",[39,160164,160165],{"class":41,"line":92},[39,160166,160167],{"class":53},"    循环体\n",[19,160169,16108],{},[30,160171,160173],{"className":31353,"code":160172,"language":31355,"meta":35,"style":35},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[26,160174,160175,160183,160187,160199,160206],{"__ignoreMap":35},[39,160176,160177,160179,160181],{"class":41,"line":42},[39,160178,101123],{"class":53},[39,160180,1117],{"class":45},[39,160182,56674],{"class":74},[39,160184,160185],{"class":41,"line":92},[39,160186,122],{"emptyLinePlaceholder":121},[39,160188,160189,160191,160193,160195,160197],{"class":41,"line":112},[39,160190,109638],{"class":45},[39,160192,10506],{"class":53},[39,160194,2709],{"class":45},[39,160196,3245],{"class":74},[39,160198,4822],{"class":53},[39,160200,160201,160203],{"class":41,"line":118},[39,160202,32274],{"class":74},[39,160204,160205],{"class":53},"(i)\n",[39,160207,160208,160211,160213],{"class":41,"line":125},[39,160209,160210],{"class":53},"    i ",[39,160212,10545],{"class":45},[39,160214,56674],{"class":74},[19,160216,81904],{},[328,160218,160219,160225,160228,160231],{},[331,160220,160221,160222,29360],{},"判断条件 ",[26,160223,160224],{},"i \u003C= 5",[331,160226,160227],{},"条件成立，执行循环体。",[331,160229,160230],{},"执行完后回到条件判断。",[331,160232,160233],{},"条件不成立，退出循环。",[14,160235,160237],{"id":160236},"_43-while累加","4.3 while累加",[19,160239,160240],{},"计算 1 到 100 的和：",[30,160242,160244],{"className":31353,"code":160243,"language":31355,"meta":35,"style":35},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[26,160245,160246,160254,160262,160266,160278,160288,160296,160300],{"__ignoreMap":35},[39,160247,160248,160250,160252],{"class":41,"line":42},[39,160249,101123],{"class":53},[39,160251,1117],{"class":45},[39,160253,56674],{"class":74},[39,160255,160256,160258,160260],{"class":41,"line":92},[39,160257,158235],{"class":53},[39,160259,1117],{"class":45},[39,160261,48308],{"class":74},[39,160263,160264],{"class":41,"line":112},[39,160265,122],{"emptyLinePlaceholder":121},[39,160267,160268,160270,160272,160274,160276],{"class":41,"line":118},[39,160269,109638],{"class":45},[39,160271,10506],{"class":53},[39,160273,2709],{"class":45},[39,160275,6831],{"class":74},[39,160277,4822],{"class":53},[39,160279,160280,160283,160285],{"class":41,"line":125},[39,160281,160282],{"class":53},"    total ",[39,160284,10545],{"class":45},[39,160286,160287],{"class":53}," i\n",[39,160289,160290,160292,160294],{"class":41,"line":132},[39,160291,160210],{"class":53},[39,160293,10545],{"class":45},[39,160295,56674],{"class":74},[39,160297,160298],{"class":41,"line":138},[39,160299,122],{"emptyLinePlaceholder":121},[39,160301,160302,160304],{"class":41,"line":169},[39,160303,31390],{"class":74},[39,160305,160306],{"class":53},"(total)\n",[19,160308,160309],{},"核心思想：",[328,160311,160312,160317,160322],{},[331,160313,160314,160316],{},[26,160315,1704],{}," 控制循环次数。",[331,160318,160319,160321],{},[26,160320,158336],{}," 保存累加结果。",[331,160323,160324,160325,160327],{},"每轮循环都要更新 ",[26,160326,1704],{},"，否则可能死循环。",[14,160329,160331],{"id":160330},"_44-while猜数字","4.4 while猜数字",[30,160333,160335],{"className":31353,"code":160334,"language":31355,"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",[26,160336,160337,160343,160347,160364,160372,160376,160384,160404,160413,160417,160429,160440,160450,160461,160467,160489],{"__ignoreMap":35},[39,160338,160339,160341],{"class":41,"line":42},[39,160340,31367],{"class":45},[39,160342,46303],{"class":53},[39,160344,160345],{"class":41,"line":92},[39,160346,122],{"emptyLinePlaceholder":121},[39,160348,160349,160351,160353,160356,160358,160360,160362],{"class":41,"line":112},[39,160350,160015],{"class":53},[39,160352,1117],{"class":45},[39,160354,160355],{"class":53}," random.randint(",[39,160357,1483],{"class":74},[39,160359,63],{"class":53},[39,160361,278],{"class":74},[39,160363,574],{"class":53},[39,160365,160366,160368,160370],{"class":41,"line":118},[39,160367,147666],{"class":53},[39,160369,1117],{"class":45},[39,160371,48308],{"class":74},[39,160373,160374],{"class":41,"line":125},[39,160375,122],{"emptyLinePlaceholder":121},[39,160377,160378,160380,160382],{"class":41,"line":132},[39,160379,109638],{"class":45},[39,160381,96267],{"class":74},[39,160383,4822],{"class":53},[39,160385,160386,160389,160391,160393,160395,160397,160399,160402],{"class":41,"line":138},[39,160387,160388],{"class":53},"    guess ",[39,160390,1117],{"class":45},[39,160392,963],{"class":74},[39,160394,54],{"class":53},[39,160396,54796],{"class":74},[39,160398,54],{"class":53},[39,160400,160401],{"class":237},"\"请输入1到100之间的数字:\"",[39,160403,31472],{"class":53},[39,160405,160406,160409,160411],{"class":41,"line":169},[39,160407,160408],{"class":53},"    count ",[39,160410,10545],{"class":45},[39,160412,56674],{"class":74},[39,160414,160415],{"class":41,"line":190},[39,160416,122],{"emptyLinePlaceholder":121},[39,160418,160419,160421,160424,160426],{"class":41,"line":202},[39,160420,4184],{"class":45},[39,160422,160423],{"class":53}," guess ",[39,160425,2220],{"class":45},[39,160427,160428],{"class":53}," answer:\n",[39,160430,160431,160433,160435,160438],{"class":41,"line":207},[39,160432,33426],{"class":74},[39,160434,54],{"class":53},[39,160436,160437],{"class":237},"\"猜大了\"",[39,160439,574],{"class":53},[39,160441,160442,160444,160446,160448],{"class":41,"line":212},[39,160443,40268],{"class":45},[39,160445,160423],{"class":53},[39,160447,2170],{"class":45},[39,160449,160428],{"class":53},[39,160451,160452,160454,160456,160459],{"class":41,"line":223},[39,160453,33426],{"class":74},[39,160455,54],{"class":53},[39,160457,160458],{"class":237},"\"猜小了\"",[39,160460,574],{"class":53},[39,160462,160463,160465],{"class":41,"line":228},[39,160464,158997],{"class":45},[39,160466,4822],{"class":53},[39,160468,160469,160471,160473,160475,160478,160480,160482,160484,160487],{"class":41,"line":263},[39,160470,33426],{"class":74},[39,160472,54],{"class":53},[39,160474,1321],{"class":45},[39,160476,160477],{"class":237},"\"猜对了，一共猜了",[39,160479,2156],{"class":74},[39,160481,85409],{"class":53},[39,160483,2206],{"class":74},[39,160485,160486],{"class":237},"次\"",[39,160488,574],{"class":53},[39,160490,160491],{"class":41,"line":287},[39,160492,32602],{"class":45},[19,160494,160495,160498,160499,160501],{},[26,160496,160497],{},"while True"," 表示无限循环，通常配合 ",[26,160500,3150],{}," 使用。",[14,160503,160505],{"id":160504},"_45-break和continue","4.5 break和continue",[476,160507,160509],{"id":160508},"_451-break","4.5.1 break",[19,160511,160512,160514],{},[26,160513,3150],{}," 直接结束整个循环。",[30,160516,160518],{"className":31353,"code":160517,"language":31355,"meta":35,"style":35},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[26,160519,160520,160540,160552,160556],{"__ignoreMap":35},[39,160521,160522,160524,160526,160528,160530,160532,160534,160536,160538],{"class":41,"line":42},[39,160523,4108],{"class":45},[39,160525,10506],{"class":53},[39,160527,27018],{"class":45},[39,160529,33418],{"class":74},[39,160531,54],{"class":53},[39,160533,1483],{"class":74},[39,160535,63],{"class":53},[39,160537,1608],{"class":74},[39,160539,31761],{"class":53},[39,160541,160542,160544,160546,160548,160550],{"class":41,"line":92},[39,160543,4184],{"class":45},[39,160545,10506],{"class":53},[39,160547,4032],{"class":45},[39,160549,79045],{"class":74},[39,160551,4822],{"class":53},[39,160553,160554],{"class":41,"line":112},[39,160555,32602],{"class":45},[39,160557,160558,160560],{"class":41,"line":118},[39,160559,32274],{"class":74},[39,160561,160205],{"class":53},[19,160563,147432],{},[30,160565,160568],{"className":160566,"code":160567,"language":6267,"meta":35},[6265],"1\n2\n",[26,160569,160567],{"__ignoreMap":35},[476,160571,160573],{"id":160572},"_452-continue","4.5.2 continue",[19,160575,160576,160578],{},[26,160577,155647],{}," 跳过本轮剩余代码，进入下一轮循环。",[30,160580,160582],{"className":31353,"code":160581,"language":31355,"meta":35,"style":35},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[26,160583,160584,160604,160616,160620],{"__ignoreMap":35},[39,160585,160586,160588,160590,160592,160594,160596,160598,160600,160602],{"class":41,"line":42},[39,160587,4108],{"class":45},[39,160589,10506],{"class":53},[39,160591,27018],{"class":45},[39,160593,33418],{"class":74},[39,160595,54],{"class":53},[39,160597,1483],{"class":74},[39,160599,63],{"class":53},[39,160601,1608],{"class":74},[39,160603,31761],{"class":53},[39,160605,160606,160608,160610,160612,160614],{"class":41,"line":92},[39,160607,4184],{"class":45},[39,160609,10506],{"class":53},[39,160611,4032],{"class":45},[39,160613,79045],{"class":74},[39,160615,4822],{"class":53},[39,160617,160618],{"class":41,"line":112},[39,160619,149487],{"class":45},[39,160621,160622,160624],{"class":41,"line":118},[39,160623,32274],{"class":74},[39,160625,160205],{"class":53},[19,160627,147432],{},[30,160629,160632],{"className":160630,"code":160631,"language":6267,"meta":35},[6265],"1\n2\n4\n5\n",[26,160633,160631],{"__ignoreMap":35},[14,160635,160637],{"id":160636},"_46-for循环","4.6 for循环",[19,160639,160640,160642],{},[26,160641,4108],{}," 常用于遍历序列。",[30,160644,160646],{"className":31353,"code":160645,"language":31355,"meta":35,"style":35},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[26,160647,160648,160657,160661,160672],{"__ignoreMap":35},[39,160649,160650,160652,160654],{"class":41,"line":42},[39,160651,147511],{"class":53},[39,160653,1117],{"class":45},[39,160655,160656],{"class":237}," \"python\"\n",[39,160658,160659],{"class":41,"line":92},[39,160660,122],{"emptyLinePlaceholder":121},[39,160662,160663,160665,160668,160670],{"class":41,"line":112},[39,160664,4108],{"class":45},[39,160666,160667],{"class":53}," ch ",[39,160669,27018],{"class":45},[39,160671,159374],{"class":53},[39,160673,160674,160676],{"class":41,"line":118},[39,160675,32274],{"class":74},[39,160677,160678],{"class":53},"(ch)\n",[19,160680,160681],{},"遍历列表：",[30,160683,160685],{"className":31353,"code":160684,"language":31355,"meta":35,"style":35},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[26,160686,160687,160709,160713,160723],{"__ignoreMap":35},[39,160688,160689,160692,160694,160696,160698,160700,160702,160704,160707],{"class":41,"line":42},[39,160690,160691],{"class":53},"students ",[39,160693,1117],{"class":45},[39,160695,53201],{"class":53},[39,160697,150863],{"class":237},[39,160699,63],{"class":53},[39,160701,151911],{"class":237},[39,160703,63],{"class":53},[39,160705,160706],{"class":237},"\"小刚\"",[39,160708,34221],{"class":53},[39,160710,160711],{"class":41,"line":92},[39,160712,122],{"emptyLinePlaceholder":121},[39,160714,160715,160717,160719,160721],{"class":41,"line":112},[39,160716,4108],{"class":45},[39,160718,153112],{"class":53},[39,160720,27018],{"class":45},[39,160722,153117],{"class":53},[39,160724,160725,160727],{"class":41,"line":118},[39,160726,32274],{"class":74},[39,160728,151017],{"class":53},[14,160730,160732],{"id":160731},"_47-range函数","4.7 range函数",[19,160734,160735,160738],{},[26,160736,160737],{},"range()"," 用于生成整数序列。",[30,160740,160742],{"className":31353,"code":160741,"language":31355,"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",[26,160743,160744,160758,160776],{"__ignoreMap":35},[39,160745,160746,160748,160750,160752,160755],{"class":41,"line":42},[39,160747,34391],{"class":74},[39,160749,54],{"class":53},[39,160751,1583],{"class":74},[39,160753,160754],{"class":53},")          ",[39,160756,160757],{"class":128},"# 0,1,2,3,4\n",[39,160759,160760,160762,160764,160766,160768,160770,160773],{"class":41,"line":92},[39,160761,34391],{"class":74},[39,160763,54],{"class":53},[39,160765,1483],{"class":74},[39,160767,63],{"class":53},[39,160769,1583],{"class":74},[39,160771,160772],{"class":53},")       ",[39,160774,160775],{"class":128},"# 1,2,3,4\n",[39,160777,160778,160780,160782,160784,160786,160788,160790,160792,160794],{"class":41,"line":112},[39,160779,34391],{"class":74},[39,160781,54],{"class":53},[39,160783,1483],{"class":74},[39,160785,63],{"class":53},[39,160787,423],{"class":74},[39,160789,63],{"class":53},[39,160791,1345],{"class":74},[39,160793,156636],{"class":53},[39,160795,160796],{"class":128},"# 1,3,5,7,9\n",[19,160798,160799,160800,25593],{},"配合 ",[26,160801,4108],{},[30,160803,160805],{"className":31353,"code":160804,"language":31355,"meta":35,"style":35},"for i in range(1, 6):\n    print(i)\n",[26,160806,160807,160827],{"__ignoreMap":35},[39,160808,160809,160811,160813,160815,160817,160819,160821,160823,160825],{"class":41,"line":42},[39,160810,4108],{"class":45},[39,160812,10506],{"class":53},[39,160814,27018],{"class":45},[39,160816,33418],{"class":74},[39,160818,54],{"class":53},[39,160820,1483],{"class":74},[39,160822,63],{"class":53},[39,160824,1608],{"class":74},[39,160826,31761],{"class":53},[39,160828,160829,160831],{"class":41,"line":92},[39,160830,32274],{"class":74},[39,160832,160205],{"class":53},[19,160834,10093,160835,160837],{},[26,160836,34391],{}," 的结束值不包含在内。",[14,160839,160841],{"id":160840},"_48-for循环求和","4.8 for循环求和",[30,160843,160845],{"className":31353,"code":160844,"language":31355,"meta":35,"style":35},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[26,160846,160847,160855,160859,160879,160887,160891],{"__ignoreMap":35},[39,160848,160849,160851,160853],{"class":41,"line":42},[39,160850,158235],{"class":53},[39,160852,1117],{"class":45},[39,160854,48308],{"class":74},[39,160856,160857],{"class":41,"line":92},[39,160858,122],{"emptyLinePlaceholder":121},[39,160860,160861,160863,160865,160867,160869,160871,160873,160875,160877],{"class":41,"line":112},[39,160862,4108],{"class":45},[39,160864,10506],{"class":53},[39,160866,27018],{"class":45},[39,160868,33418],{"class":74},[39,160870,54],{"class":53},[39,160872,1483],{"class":74},[39,160874,63],{"class":53},[39,160876,1601],{"class":74},[39,160878,31761],{"class":53},[39,160880,160881,160883,160885],{"class":41,"line":118},[39,160882,160282],{"class":53},[39,160884,10545],{"class":45},[39,160886,160287],{"class":53},[39,160888,160889],{"class":41,"line":125},[39,160890,122],{"emptyLinePlaceholder":121},[39,160892,160893,160895],{"class":41,"line":132},[39,160894,31390],{"class":74},[39,160896,160306],{"class":53},[19,160898,160899],{},"求偶数和：",[30,160901,160903],{"className":31353,"code":160902,"language":31355,"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",[26,160904,160905,160913,160917,160937,160953,160962,160966],{"__ignoreMap":35},[39,160906,160907,160909,160911],{"class":41,"line":42},[39,160908,158235],{"class":53},[39,160910,1117],{"class":45},[39,160912,48308],{"class":74},[39,160914,160915],{"class":41,"line":92},[39,160916,122],{"emptyLinePlaceholder":121},[39,160918,160919,160921,160923,160925,160927,160929,160931,160933,160935],{"class":41,"line":112},[39,160920,4108],{"class":45},[39,160922,10506],{"class":53},[39,160924,27018],{"class":45},[39,160926,33418],{"class":74},[39,160928,54],{"class":53},[39,160930,1483],{"class":74},[39,160932,63],{"class":53},[39,160934,1601],{"class":74},[39,160936,31761],{"class":53},[39,160938,160939,160941,160943,160945,160947,160949,160951],{"class":41,"line":118},[39,160940,4184],{"class":45},[39,160942,10506],{"class":53},[39,160944,1592],{"class":45},[39,160946,15728],{"class":74},[39,160948,102534],{"class":45},[39,160950,315],{"class":74},[39,160952,4822],{"class":53},[39,160954,160955,160958,160960],{"class":41,"line":125},[39,160956,160957],{"class":53},"        total ",[39,160959,10545],{"class":45},[39,160961,160287],{"class":53},[39,160963,160964],{"class":41,"line":132},[39,160965,122],{"emptyLinePlaceholder":121},[39,160967,160968,160970],{"class":41,"line":138},[39,160969,31390],{"class":74},[39,160971,160306],{"class":53},[19,160973,160974],{},"也可以：",[30,160976,160978],{"className":31353,"code":160977,"language":31355,"meta":35,"style":35},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[26,160979,160980,160988,160992,161016,161024,161028],{"__ignoreMap":35},[39,160981,160982,160984,160986],{"class":41,"line":42},[39,160983,158235],{"class":53},[39,160985,1117],{"class":45},[39,160987,48308],{"class":74},[39,160989,160990],{"class":41,"line":92},[39,160991,122],{"emptyLinePlaceholder":121},[39,160993,160994,160996,160998,161000,161002,161004,161006,161008,161010,161012,161014],{"class":41,"line":112},[39,160995,4108],{"class":45},[39,160997,10506],{"class":53},[39,160999,27018],{"class":45},[39,161001,33418],{"class":74},[39,161003,54],{"class":53},[39,161005,1345],{"class":74},[39,161007,63],{"class":53},[39,161009,1601],{"class":74},[39,161011,63],{"class":53},[39,161013,1345],{"class":74},[39,161015,31761],{"class":53},[39,161017,161018,161020,161022],{"class":41,"line":118},[39,161019,160282],{"class":53},[39,161021,10545],{"class":45},[39,161023,160287],{"class":53},[39,161025,161026],{"class":41,"line":125},[39,161027,122],{"emptyLinePlaceholder":121},[39,161029,161030,161032],{"class":41,"line":132},[39,161031,31390],{"class":74},[39,161033,160306],{"class":53},[14,161035,161037],{"id":161036},"_49-循环嵌套","4.9 循环嵌套",[19,161039,161040],{},"嵌套循环就是循环里面再写循环。",[30,161042,161044],{"className":31353,"code":161043,"language":31355,"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",[26,161045,161046,161066,161086],{"__ignoreMap":35},[39,161047,161048,161050,161052,161054,161056,161058,161060,161062,161064],{"class":41,"line":42},[39,161049,4108],{"class":45},[39,161051,10506],{"class":53},[39,161053,27018],{"class":45},[39,161055,33418],{"class":74},[39,161057,54],{"class":53},[39,161059,1483],{"class":74},[39,161061,63],{"class":53},[39,161063,1558],{"class":74},[39,161065,31761],{"class":53},[39,161067,161068,161070,161072,161074,161076,161078,161080,161082,161084],{"class":41,"line":92},[39,161069,4284],{"class":45},[39,161071,10568],{"class":53},[39,161073,27018],{"class":45},[39,161075,33418],{"class":74},[39,161077,54],{"class":53},[39,161079,1483],{"class":74},[39,161081,63],{"class":53},[39,161083,1558],{"class":74},[39,161085,31761],{"class":53},[39,161087,161088,161090,161092,161094,161097,161099,161101,161103,161106,161108,161110,161112,161114],{"class":41,"line":112},[39,161089,33426],{"class":74},[39,161091,54],{"class":53},[39,161093,1321],{"class":45},[39,161095,161096],{"class":237},"\"i=",[39,161098,2156],{"class":74},[39,161100,1704],{"class":53},[39,161102,2206],{"class":74},[39,161104,161105],{"class":237},", j=",[39,161107,2156],{"class":74},[39,161109,1729],{"class":53},[39,161111,2206],{"class":74},[39,161113,1516],{"class":237},[39,161115,574],{"class":53},[19,161117,161118],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161120,161122],{"id":161121},"_410-九九乘法表","4.10 九九乘法表",[30,161124,161126],{"className":31353,"code":161125,"language":31355,"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",[26,161127,161128,161148,161171,161223],{"__ignoreMap":35},[39,161129,161130,161132,161134,161136,161138,161140,161142,161144,161146],{"class":41,"line":42},[39,161131,4108],{"class":45},[39,161133,10506],{"class":53},[39,161135,27018],{"class":45},[39,161137,33418],{"class":74},[39,161139,54],{"class":53},[39,161141,1483],{"class":74},[39,161143,63],{"class":53},[39,161145,423],{"class":74},[39,161147,31761],{"class":53},[39,161149,161150,161152,161154,161156,161158,161160,161162,161165,161167,161169],{"class":41,"line":92},[39,161151,4284],{"class":45},[39,161153,10568],{"class":53},[39,161155,27018],{"class":45},[39,161157,33418],{"class":74},[39,161159,54],{"class":53},[39,161161,1483],{"class":74},[39,161163,161164],{"class":53},", i ",[39,161166,101],{"class":45},[39,161168,26093],{"class":74},[39,161170,31761],{"class":53},[39,161172,161173,161175,161177,161179,161181,161183,161185,161187,161189,161191,161193,161195,161197,161199,161201,161203,161205,161207,161209,161211,161213,161215,161217,161219,161221],{"class":41,"line":112},[39,161174,33426],{"class":74},[39,161176,54],{"class":53},[39,161178,1321],{"class":45},[39,161180,1516],{"class":237},[39,161182,2156],{"class":74},[39,161184,1729],{"class":53},[39,161186,2206],{"class":74},[39,161188,1717],{"class":237},[39,161190,2156],{"class":74},[39,161192,1704],{"class":53},[39,161194,2206],{"class":74},[39,161196,1117],{"class":237},[39,161198,2156],{"class":74},[39,161200,101123],{"class":53},[39,161202,1717],{"class":45},[39,161204,4493],{"class":53},[39,161206,2206],{"class":74},[39,161208,1516],{"class":237},[39,161210,63],{"class":53},[39,161212,46776],{"class":59},[39,161214,1117],{"class":45},[39,161216,1516],{"class":237},[39,161218,2359],{"class":74},[39,161220,1516],{"class":237},[39,161222,574],{"class":53},[39,161224,161225,161227],{"class":41,"line":118},[39,161226,32274],{"class":74},[39,161228,537],{"class":53},[19,161230,161231],{},"关键点：",[328,161233,161234,161240,161246,161252],{},[331,161235,161236,161237,161239],{},"外层 ",[26,161238,1704],{}," 控制行。",[331,161241,161242,161243,161245],{},"内层 ",[26,161244,1729],{}," 控制列。",[331,161247,161248,161249,161251],{},"每行结束后用 ",[26,161250,147447],{}," 换行。",[331,161253,161254,161257],{},[26,161255,161256],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161259,161261],{"id":161260},"_411-循环else","4.11 循环else",[19,161263,161264,161265,161267,161268,161270,161271,161273],{},"Python 的循环可以带 ",[26,161266,2811],{},"。当循环正常结束时执行 ",[26,161269,2811],{},"，如果被 ",[26,161272,3150],{}," 打断，则不执行。",[30,161275,161277],{"className":31353,"code":161276,"language":31355,"meta":35,"style":35},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[26,161278,161279,161299,161311,161322,161326,161332],{"__ignoreMap":35},[39,161280,161281,161283,161285,161287,161289,161291,161293,161295,161297],{"class":41,"line":42},[39,161282,4108],{"class":45},[39,161284,10506],{"class":53},[39,161286,27018],{"class":45},[39,161288,33418],{"class":74},[39,161290,54],{"class":53},[39,161292,1483],{"class":74},[39,161294,63],{"class":53},[39,161296,1608],{"class":74},[39,161298,31761],{"class":53},[39,161300,161301,161303,161305,161307,161309],{"class":41,"line":92},[39,161302,4184],{"class":45},[39,161304,10506],{"class":53},[39,161306,4032],{"class":45},[39,161308,75],{"class":74},[39,161310,4822],{"class":53},[39,161312,161313,161315,161317,161320],{"class":41,"line":112},[39,161314,33426],{"class":74},[39,161316,54],{"class":53},[39,161318,161319],{"class":237},"\"找到了\"",[39,161321,574],{"class":53},[39,161323,161324],{"class":41,"line":118},[39,161325,32602],{"class":45},[39,161327,161328,161330],{"class":41,"line":125},[39,161329,2811],{"class":45},[39,161331,4822],{"class":53},[39,161333,161334,161336,161338,161341],{"class":41,"line":132},[39,161335,32274],{"class":74},[39,161337,54],{"class":53},[39,161339,161340],{"class":237},"\"没找到\"",[39,161342,574],{"class":53},[19,161344,161345],{},"常用于搜索。",[30,161347,161349],{"className":31353,"code":161348,"language":31355,"meta":35,"style":35},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[26,161350,161351,161372,161381,161385,161397,161408,161418,161422,161428],{"__ignoreMap":35},[39,161352,161353,161356,161358,161360,161362,161364,161366,161368,161370],{"class":41,"line":42},[39,161354,161355],{"class":53},"names ",[39,161357,1117],{"class":45},[39,161359,53201],{"class":53},[39,161361,150863],{"class":237},[39,161363,63],{"class":53},[39,161365,151911],{"class":237},[39,161367,63],{"class":53},[39,161369,160706],{"class":237},[39,161371,34221],{"class":53},[39,161373,161374,161376,161378],{"class":41,"line":92},[39,161375,112553],{"class":53},[39,161377,1117],{"class":45},[39,161379,161380],{"class":237}," \"小李\"\n",[39,161382,161383],{"class":41,"line":112},[39,161384,122],{"emptyLinePlaceholder":121},[39,161386,161387,161389,161392,161394],{"class":41,"line":118},[39,161388,4108],{"class":45},[39,161390,161391],{"class":53}," name ",[39,161393,27018],{"class":45},[39,161395,161396],{"class":53}," names:\n",[39,161398,161399,161401,161403,161405],{"class":41,"line":125},[39,161400,4184],{"class":45},[39,161402,161391],{"class":53},[39,161404,4032],{"class":45},[39,161406,161407],{"class":53}," target:\n",[39,161409,161410,161412,161414,161416],{"class":41,"line":132},[39,161411,33426],{"class":74},[39,161413,54],{"class":53},[39,161415,161319],{"class":237},[39,161417,574],{"class":53},[39,161419,161420],{"class":41,"line":138},[39,161421,32602],{"class":45},[39,161423,161424,161426],{"class":41,"line":169},[39,161425,2811],{"class":45},[39,161427,4822],{"class":53},[39,161429,161430,161432,161434,161436],{"class":41,"line":190},[39,161431,32274],{"class":74},[39,161433,54],{"class":53},[39,161435,161340],{"class":237},[39,161437,574],{"class":53},[14,161439,161441],{"id":161440},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161443,124267],{},[328,161445,161446,161449,161452],{},[331,161447,161448],{},"用户最多输入 3 次密码。",[331,161450,161451],{},"密码正确则登录成功。",[331,161453,161454],{},"3 次都错误则锁定账号。",[19,161456,11101],{},[30,161458,161460],{"className":31353,"code":161459,"language":31355,"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",[26,161461,161462,161472,161476,161492,161508,161512,161524,161535,161539,161545,161570,161576],{"__ignoreMap":35},[39,161463,161464,161467,161469],{"class":41,"line":42},[39,161465,161466],{"class":53},"password ",[39,161468,1117],{"class":45},[39,161470,161471],{"class":237}," \"123456\"\n",[39,161473,161474],{"class":41,"line":92},[39,161475,122],{"emptyLinePlaceholder":121},[39,161477,161478,161480,161482,161484,161486,161488,161490],{"class":41,"line":112},[39,161479,4108],{"class":45},[39,161481,10506],{"class":53},[39,161483,27018],{"class":45},[39,161485,33418],{"class":74},[39,161487,54],{"class":53},[39,161489,1339],{"class":74},[39,161491,31761],{"class":53},[39,161493,161494,161497,161499,161501,161503,161506],{"class":41,"line":118},[39,161495,161496],{"class":53},"    user_password ",[39,161498,1117],{"class":45},[39,161500,61580],{"class":74},[39,161502,54],{"class":53},[39,161504,161505],{"class":237},"\"请输入密码:\"",[39,161507,574],{"class":53},[39,161509,161510],{"class":41,"line":125},[39,161511,122],{"emptyLinePlaceholder":121},[39,161513,161514,161516,161519,161521],{"class":41,"line":132},[39,161515,4184],{"class":45},[39,161517,161518],{"class":53}," user_password ",[39,161520,4032],{"class":45},[39,161522,161523],{"class":53}," password:\n",[39,161525,161526,161528,161530,161533],{"class":41,"line":138},[39,161527,33426],{"class":74},[39,161529,54],{"class":53},[39,161531,161532],{"class":237},"\"登录成功\"",[39,161534,574],{"class":53},[39,161536,161537],{"class":41,"line":169},[39,161538,32602],{"class":45},[39,161540,161541,161543],{"class":41,"line":190},[39,161542,158997],{"class":45},[39,161544,4822],{"class":53},[39,161546,161547,161549,161551,161553,161556,161559,161561,161563,161565,161568],{"class":41,"line":202},[39,161548,33426],{"class":74},[39,161550,54],{"class":53},[39,161552,1321],{"class":45},[39,161554,161555],{"class":237},"\"密码错误，还剩",[39,161557,161558],{"class":74},"{2",[39,161560,53246],{"class":45},[39,161562,4115],{"class":53},[39,161564,2206],{"class":74},[39,161566,161567],{"class":237},"次机会\"",[39,161569,574],{"class":53},[39,161571,161572,161574],{"class":41,"line":207},[39,161573,2811],{"class":45},[39,161575,4822],{"class":53},[39,161577,161578,161580,161582,161585],{"class":41,"line":212},[39,161579,32274],{"class":74},[39,161581,54],{"class":53},[39,161583,161584],{"class":237},"\"账号已锁定\"",[39,161586,574],{"class":53},[14,161588,161590],{"id":161589},"_413-小案例菜单程序","4.13 小案例：菜单程序",[30,161592,161594],{"className":31353,"code":161593,"language":31355,"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",[26,161595,161596,161604,161615,161626,161637,161648,161659,161663,161678,161682,161694,161705,161717,161728,161740,161751,161763,161773,161777,161783],{"__ignoreMap":35},[39,161597,161598,161600,161602],{"class":41,"line":42},[39,161599,109638],{"class":45},[39,161601,96267],{"class":74},[39,161603,4822],{"class":53},[39,161605,161606,161608,161610,161613],{"class":41,"line":92},[39,161607,32274],{"class":74},[39,161609,54],{"class":53},[39,161611,161612],{"class":237},"\"====== 菜单 ======\"",[39,161614,574],{"class":53},[39,161616,161617,161619,161621,161624],{"class":41,"line":112},[39,161618,32274],{"class":74},[39,161620,54],{"class":53},[39,161622,161623],{"class":237},"\"1. 查询余额\"",[39,161625,574],{"class":53},[39,161627,161628,161630,161632,161635],{"class":41,"line":118},[39,161629,32274],{"class":74},[39,161631,54],{"class":53},[39,161633,161634],{"class":237},"\"2. 存款\"",[39,161636,574],{"class":53},[39,161638,161639,161641,161643,161646],{"class":41,"line":125},[39,161640,32274],{"class":74},[39,161642,54],{"class":53},[39,161644,161645],{"class":237},"\"3. 取款\"",[39,161647,574],{"class":53},[39,161649,161650,161652,161654,161657],{"class":41,"line":132},[39,161651,32274],{"class":74},[39,161653,54],{"class":53},[39,161655,161656],{"class":237},"\"0. 退出\"",[39,161658,574],{"class":53},[39,161660,161661],{"class":41,"line":138},[39,161662,122],{"emptyLinePlaceholder":121},[39,161664,161665,161668,161670,161672,161674,161676],{"class":41,"line":169},[39,161666,161667],{"class":53},"    choice ",[39,161669,1117],{"class":45},[39,161671,61580],{"class":74},[39,161673,54],{"class":53},[39,161675,154048],{"class":237},[39,161677,574],{"class":53},[39,161679,161680],{"class":41,"line":190},[39,161681,122],{"emptyLinePlaceholder":121},[39,161683,161684,161686,161688,161690,161692],{"class":41,"line":202},[39,161685,4184],{"class":45},[39,161687,154061],{"class":53},[39,161689,4032],{"class":45},[39,161691,154066],{"class":237},[39,161693,4822],{"class":53},[39,161695,161696,161698,161700,161703],{"class":41,"line":207},[39,161697,33426],{"class":74},[39,161699,54],{"class":53},[39,161701,161702],{"class":237},"\"余额为1000元\"",[39,161704,574],{"class":53},[39,161706,161707,161709,161711,161713,161715],{"class":41,"line":212},[39,161708,40268],{"class":45},[39,161710,154061],{"class":53},[39,161712,4032],{"class":45},[39,161714,154085],{"class":237},[39,161716,4822],{"class":53},[39,161718,161719,161721,161723,161726],{"class":41,"line":223},[39,161720,33426],{"class":74},[39,161722,54],{"class":53},[39,161724,161725],{"class":237},"\"存款功能\"",[39,161727,574],{"class":53},[39,161729,161730,161732,161734,161736,161738],{"class":41,"line":228},[39,161731,40268],{"class":45},[39,161733,154061],{"class":53},[39,161735,4032],{"class":45},[39,161737,154103],{"class":237},[39,161739,4822],{"class":53},[39,161741,161742,161744,161746,161749],{"class":41,"line":263},[39,161743,33426],{"class":74},[39,161745,54],{"class":53},[39,161747,161748],{"class":237},"\"取款功能\"",[39,161750,574],{"class":53},[39,161752,161753,161755,161757,161759,161761],{"class":41,"line":287},[39,161754,40268],{"class":45},[39,161756,154061],{"class":53},[39,161758,4032],{"class":45},[39,161760,154157],{"class":237},[39,161762,4822],{"class":53},[39,161764,161765,161767,161769,161771],{"class":41,"line":292},[39,161766,33426],{"class":74},[39,161768,54],{"class":53},[39,161770,154168],{"class":237},[39,161772,574],{"class":53},[39,161774,161775],{"class":41,"line":305},[39,161776,32602],{"class":45},[39,161778,161779,161781],{"class":41,"line":310},[39,161780,158997],{"class":45},[39,161782,4822],{"class":53},[39,161784,161785,161787,161789,161791],{"class":41,"line":321},[39,161786,33426],{"class":74},[39,161788,54],{"class":53},[39,161790,154189],{"class":237},[39,161792,574],{"class":53},[19,161794,161795,161796,161798,161799,29360],{},"菜单类程序通常使用 ",[26,161797,160497],{},"，用户选择退出时 ",[26,161800,3150],{},[14,161802,161804],{"id":161803},"_414-易错点","4.14 易错点",[328,161806,161807,161812,161818,161826,161832],{},[331,161808,161809,161811],{},[26,161810,109638],{}," 循环必须更新控制变量。",[331,161813,161814,161817],{},[26,161815,161816],{},"range(1, 10)"," 不包含 10。",[331,161819,161820,161822,161823,161825],{},[26,161821,3150],{}," 结束整个循环，",[26,161824,155647],{}," 只跳过本轮。",[331,161827,161828,161829,161831],{},"嵌套循环中，",[26,161830,3150],{}," 只跳出当前所在的一层循环。",[331,161833,161834],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161836,161838],{"id":161837},"_415-本章练习","4.15 本章练习",[328,161840,161841,161844,161847,161850,161853],{},[331,161842,161843],{},"输出 1 到 100。",[331,161845,161846],{},"计算 1 到 100 的偶数和。",[331,161848,161849],{},"输出 100 以内能被 3 和 5 同时整除的数。",[331,161851,161852],{},"编写猜数字游戏，限制最多猜 7 次。",[331,161854,161855],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1192,161857,161858],{},"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":92,"depth":92,"links":161860},[161861,161862,161863,161864,161865,161869,161870,161871,161872,161873,161874,161875,161876,161877,161878],{"id":160117,"depth":92,"text":160118},{"id":160147,"depth":92,"text":160148},{"id":160236,"depth":92,"text":160237},{"id":160330,"depth":92,"text":160331},{"id":160504,"depth":92,"text":160505,"children":161866},[161867,161868],{"id":160508,"depth":112,"text":160509},{"id":160572,"depth":112,"text":160573},{"id":160636,"depth":92,"text":160637},{"id":160731,"depth":92,"text":160732},{"id":160840,"depth":92,"text":160841},{"id":161036,"depth":92,"text":161037},{"id":161121,"depth":92,"text":161122},{"id":161260,"depth":92,"text":161261},{"id":161440,"depth":92,"text":161441},{"id":161589,"depth":92,"text":161590},{"id":161803,"depth":92,"text":161804},{"id":161837,"depth":92,"text":161838},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160109,"description":24350},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161885,"title":161886,"body":161887,"description":24350,"extension":1203,"meta":163892,"navigation":121,"path":163893,"seo":163894,"stem":163895,"__hash__":163896},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161888,"toc":163872},[161889,161892,161896,161899,161902,161916,161919,161933,161937,161939,161958,161960,162007,162009,162023,162027,162101,162104,162108,162111,162170,162178,162181,162234,162237,162241,162246,162301,162309,162359,162363,162368,162376,162475,162481,162485,162490,162493,162504,162545,162558,162562,162565,162601,162604,162617,162620,162680,162684,162688,162691,162742,162746,162749,162796,162802,162868,162871,162875,162878,162994,162997,163001,163004,163110,163114,163117,163155,163158,163200,163203,163263,163266,163270,163734,163737,163741,163768,163774,163835,163839,163869],[10,161890,161886],{"id":161891},"_5-函数基础",[14,161893,161895],{"id":161894},"_51-为什么需要函数","5.1 为什么需要函数",[19,161897,161898],{},"函数用于封装一段可以重复使用的代码。",[19,161900,161901],{},"不使用函数的问题：",[328,161903,161904,161907,161910,161913],{},[331,161905,161906],{},"重复代码多。",[331,161908,161909],{},"修改逻辑时容易漏改。",[331,161911,161912],{},"主流程不清晰。",[331,161914,161915],{},"程序越写越长，难以维护。",[19,161917,161918],{},"使用函数后的好处：",[328,161920,161921,161924,161927,161930],{},[331,161922,161923],{},"提高复用性。",[331,161925,161926],{},"提高可读性。",[331,161928,161929],{},"便于调试。",[331,161931,161932],{},"便于分工。",[14,161934,161936],{"id":161935},"_52-函数定义","5.2 函数定义",[19,161938,24],{},[30,161940,161942],{"className":31353,"code":161941,"language":31355,"meta":35,"style":35},"def 函数名():\n    函数体\n",[26,161943,161944,161953],{"__ignoreMap":35},[39,161945,161946,161948,161951],{"class":41,"line":42},[39,161947,32922],{"class":45},[39,161949,161950],{"class":49}," 函数名",[39,161952,32928],{"class":53},[39,161954,161955],{"class":41,"line":92},[39,161956,161957],{"class":53},"    函数体\n",[19,161959,16108],{},[30,161961,161963],{"className":31353,"code":161962,"language":31355,"meta":35,"style":35},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[26,161964,161965,161974,161984,161994,161998,162002],{"__ignoreMap":35},[39,161966,161967,161969,161972],{"class":41,"line":42},[39,161968,32922],{"class":45},[39,161970,161971],{"class":49}," say_hello",[39,161973,32928],{"class":53},[39,161975,161976,161978,161980,161982],{"class":41,"line":92},[39,161977,32274],{"class":74},[39,161979,54],{"class":53},[39,161981,6921],{"class":237},[39,161983,574],{"class":53},[39,161985,161986,161988,161990,161992],{"class":41,"line":112},[39,161987,32274],{"class":74},[39,161989,54],{"class":53},[39,161991,147614],{"class":237},[39,161993,574],{"class":53},[39,161995,161996],{"class":41,"line":118},[39,161997,122],{"emptyLinePlaceholder":121},[39,161999,162000],{"class":41,"line":125},[39,162001,122],{"emptyLinePlaceholder":121},[39,162003,162004],{"class":41,"line":132},[39,162005,162006],{"class":53},"say_hello()\n",[19,162008,10093],{},[328,162010,162011,162014,162017,162020],{},[331,162012,162013],{},"函数必须先定义，再调用。",[331,162015,162016],{},"函数名遵循变量命名规则。",[331,162018,162019],{},"函数体需要缩进。",[331,162021,162022],{},"函数不调用就不会执行。",[14,162024,162026],{"id":162025},"_53-函数调用","5.3 函数调用",[30,162028,162030],{"className":31353,"code":162029,"language":31355,"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",[26,162031,162032,162041,162052,162063,162074,162084,162088,162092,162097],{"__ignoreMap":35},[39,162033,162034,162036,162039],{"class":41,"line":42},[39,162035,32922],{"class":45},[39,162037,162038],{"class":49}," print_menu",[39,162040,32928],{"class":53},[39,162042,162043,162045,162047,162050],{"class":41,"line":92},[39,162044,32274],{"class":74},[39,162046,54],{"class":53},[39,162048,162049],{"class":237},"\"1. 查询\"",[39,162051,574],{"class":53},[39,162053,162054,162056,162058,162061],{"class":41,"line":112},[39,162055,32274],{"class":74},[39,162057,54],{"class":53},[39,162059,162060],{"class":237},"\"2. 添加\"",[39,162062,574],{"class":53},[39,162064,162065,162067,162069,162072],{"class":41,"line":118},[39,162066,32274],{"class":74},[39,162068,54],{"class":53},[39,162070,162071],{"class":237},"\"3. 删除\"",[39,162073,574],{"class":53},[39,162075,162076,162078,162080,162082],{"class":41,"line":125},[39,162077,32274],{"class":74},[39,162079,54],{"class":53},[39,162081,161656],{"class":237},[39,162083,574],{"class":53},[39,162085,162086],{"class":41,"line":132},[39,162087,122],{"emptyLinePlaceholder":121},[39,162089,162090],{"class":41,"line":138},[39,162091,122],{"emptyLinePlaceholder":121},[39,162093,162094],{"class":41,"line":169},[39,162095,162096],{"class":53},"print_menu()\n",[39,162098,162099],{"class":41,"line":190},[39,162100,162096],{"class":53},[19,162102,162103],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162105,162107],{"id":162106},"_54-参数","5.4 参数",[19,162109,162110],{},"参数用于向函数传递数据。",[30,162112,162114],{"className":31353,"code":162113,"language":31355,"meta":35,"style":35},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[26,162115,162116,162125,162145,162149,162153,162162],{"__ignoreMap":35},[39,162117,162118,162120,162122],{"class":41,"line":42},[39,162119,32922],{"class":45},[39,162121,161971],{"class":49},[39,162123,162124],{"class":53},"(name):\n",[39,162126,162127,162129,162131,162133,162135,162137,162139,162141,162143],{"class":41,"line":92},[39,162128,32274],{"class":74},[39,162130,54],{"class":53},[39,162132,1321],{"class":45},[39,162134,158029],{"class":237},[39,162136,2156],{"class":74},[39,162138,80785],{"class":53},[39,162140,2206],{"class":74},[39,162142,1516],{"class":237},[39,162144,574],{"class":53},[39,162146,162147],{"class":41,"line":112},[39,162148,122],{"emptyLinePlaceholder":121},[39,162150,162151],{"class":41,"line":118},[39,162152,122],{"emptyLinePlaceholder":121},[39,162154,162155,162158,162160],{"class":41,"line":125},[39,162156,162157],{"class":53},"say_hello(",[39,162159,150863],{"class":237},[39,162161,574],{"class":53},[39,162163,162164,162166,162168],{"class":41,"line":132},[39,162165,162157],{"class":53},[39,162167,151911],{"class":237},[39,162169,574],{"class":53},[19,162171,162172,162174,162175,162177],{},[26,162173,80785],{}," 是形参，",[26,162176,150863],{}," 是实参。",[19,162179,162180],{},"多个参数：",[30,162182,162184],{"className":31353,"code":162183,"language":31355,"meta":35,"style":35},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[26,162185,162186,162194,162207,162213,162217,162221],{"__ignoreMap":35},[39,162187,162188,162190,162192],{"class":41,"line":42},[39,162189,32922],{"class":45},[39,162191,6289],{"class":49},[39,162193,152068],{"class":53},[39,162195,162196,162199,162201,162203,162205],{"class":41,"line":92},[39,162197,162198],{"class":53},"    result ",[39,162200,1117],{"class":45},[39,162202,98],{"class":53},[39,162204,101],{"class":45},[39,162206,152079],{"class":53},[39,162208,162209,162211],{"class":41,"line":112},[39,162210,32274],{"class":74},[39,162212,77560],{"class":53},[39,162214,162215],{"class":41,"line":118},[39,162216,122],{"emptyLinePlaceholder":121},[39,162218,162219],{"class":41,"line":125},[39,162220,122],{"emptyLinePlaceholder":121},[39,162222,162223,162226,162228,162230,162232],{"class":41,"line":132},[39,162224,162225],{"class":53},"add(",[39,162227,423],{"class":74},[39,162229,63],{"class":53},[39,162231,248],{"class":74},[39,162233,574],{"class":53},[19,162235,162236],{},"调用时参数数量必须匹配。",[14,162238,162240],{"id":162239},"_55-返回值","5.5 返回值",[19,162242,162243,162245],{},[26,162244,18019],{}," 用于把函数内部的结果返回给调用者。",[30,162247,162249],{"className":31353,"code":162248,"language":31355,"meta":35,"style":35},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[26,162250,162251,162259,162269,162273,162277,162295],{"__ignoreMap":35},[39,162252,162253,162255,162257],{"class":41,"line":42},[39,162254,32922],{"class":45},[39,162256,6289],{"class":49},[39,162258,152068],{"class":53},[39,162260,162261,162263,162265,162267],{"class":41,"line":92},[39,162262,95],{"class":45},[39,162264,98],{"class":53},[39,162266,101],{"class":45},[39,162268,152079],{"class":53},[39,162270,162271],{"class":41,"line":112},[39,162272,122],{"emptyLinePlaceholder":121},[39,162274,162275],{"class":41,"line":118},[39,162276,122],{"emptyLinePlaceholder":121},[39,162278,162279,162282,162284,162287,162289,162291,162293],{"class":41,"line":125},[39,162280,162281],{"class":53},"result ",[39,162283,1117],{"class":45},[39,162285,162286],{"class":53}," add(",[39,162288,423],{"class":74},[39,162290,63],{"class":53},[39,162292,248],{"class":74},[39,162294,574],{"class":53},[39,162296,162297,162299],{"class":41,"line":132},[39,162298,31390],{"class":74},[39,162300,77560],{"class":53},[19,162302,162303,162304,162306,162307,29360],{},"如果函数没有写 ",[26,162305,18019],{},"，默认返回 ",[26,162308,96661],{},[30,162310,162312],{"className":31353,"code":162311,"language":31355,"meta":35,"style":35},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[26,162313,162314,162322,162332,162336,162340,162349],{"__ignoreMap":35},[39,162315,162316,162318,162320],{"class":41,"line":42},[39,162317,32922],{"class":45},[39,162319,161971],{"class":49},[39,162321,32928],{"class":53},[39,162323,162324,162326,162328,162330],{"class":41,"line":92},[39,162325,32274],{"class":74},[39,162327,54],{"class":53},[39,162329,6921],{"class":237},[39,162331,574],{"class":53},[39,162333,162334],{"class":41,"line":112},[39,162335,122],{"emptyLinePlaceholder":121},[39,162337,162338],{"class":41,"line":118},[39,162339,122],{"emptyLinePlaceholder":121},[39,162341,162342,162344,162346],{"class":41,"line":125},[39,162343,162281],{"class":53},[39,162345,1117],{"class":45},[39,162347,162348],{"class":53}," say_hello()\n",[39,162350,162351,162353,162356],{"class":41,"line":132},[39,162352,31390],{"class":74},[39,162354,162355],{"class":53},"(result)  ",[39,162357,162358],{"class":128},"# None\n",[14,162360,162362],{"id":162361},"_56-return的作用","5.6 return的作用",[19,162364,162365,162367],{},[26,162366,18019],{}," 有两个作用：",[328,162369,162370,162373],{},[331,162371,162372],{},"返回结果。",[331,162374,162375],{},"结束函数。",[30,162377,162379],{"className":31353,"code":162378,"language":31355,"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",[26,162380,162381,162391,162403,162410,162414,162426,162433,162437,162444,162448,162452,162463],{"__ignoreMap":35},[39,162382,162383,162385,162388],{"class":41,"line":42},[39,162384,32922],{"class":45},[39,162386,162387],{"class":49}," check_age",[39,162389,162390],{"class":53},"(age):\n",[39,162392,162393,162395,162397,162399,162401],{"class":41,"line":92},[39,162394,4184],{"class":45},[39,162396,16680],{"class":53},[39,162398,2170],{"class":45},[39,162400,315],{"class":74},[39,162402,4822],{"class":53},[39,162404,162405,162407],{"class":41,"line":112},[39,162406,15725],{"class":45},[39,162408,162409],{"class":237}," \"年龄不合法\"\n",[39,162411,162412],{"class":41,"line":118},[39,162413,122],{"emptyLinePlaceholder":121},[39,162415,162416,162418,162420,162422,162424],{"class":41,"line":125},[39,162417,4184],{"class":45},[39,162419,16680],{"class":53},[39,162421,2820],{"class":45},[39,162423,157260],{"class":74},[39,162425,4822],{"class":53},[39,162427,162428,162430],{"class":41,"line":132},[39,162429,15725],{"class":45},[39,162431,162432],{"class":237}," \"成年人\"\n",[39,162434,162435],{"class":41,"line":138},[39,162436,122],{"emptyLinePlaceholder":121},[39,162438,162439,162441],{"class":41,"line":169},[39,162440,95],{"class":45},[39,162442,162443],{"class":237}," \"未成年人\"\n",[39,162445,162446],{"class":41,"line":190},[39,162447,122],{"emptyLinePlaceholder":121},[39,162449,162450],{"class":41,"line":202},[39,162451,122],{"emptyLinePlaceholder":121},[39,162453,162454,162456,162459,162461],{"class":41,"line":207},[39,162455,31390],{"class":74},[39,162457,162458],{"class":53},"(check_age(",[39,162460,248],{"class":74},[39,162462,31472],{"class":53},[39,162464,162465,162467,162469,162471,162473],{"class":41,"line":212},[39,162466,31390],{"class":74},[39,162468,162458],{"class":53},[39,162470,1793],{"class":45},[39,162472,1483],{"class":74},[39,162474,31472],{"class":53},[19,162476,162477,162478,162480],{},"函数执行到 ",[26,162479,18019],{}," 后，后面的代码不会继续执行。",[14,162482,162484],{"id":162483},"_57-none","5.7 None",[19,162486,162487,162489],{},[26,162488,96661],{}," 表示空值或没有结果。",[19,162491,162492],{},"常见使用场景：",[328,162494,162495,162498,162501],{},[331,162496,162497],{},"函数没有返回值。",[331,162499,162500],{},"变量暂时没有具体值。",[331,162502,162503],{},"表示查询不到结果。",[30,162505,162507],{"className":31353,"code":162506,"language":31355,"meta":35,"style":35},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[26,162508,162509,162517,162521,162534],{"__ignoreMap":35},[39,162510,162511,162513,162515],{"class":41,"line":42},[39,162512,162281],{"class":53},[39,162514,1117],{"class":45},[39,162516,153147],{"class":74},[39,162518,162519],{"class":41,"line":92},[39,162520,122],{"emptyLinePlaceholder":121},[39,162522,162523,162525,162528,162530,162532],{"class":41,"line":112},[39,162524,2654],{"class":45},[39,162526,162527],{"class":53}," result ",[39,162529,39902],{"class":45},[39,162531,39908],{"class":74},[39,162533,4822],{"class":53},[39,162535,162536,162538,162540,162543],{"class":41,"line":118},[39,162537,32274],{"class":74},[39,162539,54],{"class":53},[39,162541,162542],{"class":237},"\"没有数据\"",[39,162544,574],{"class":53},[19,162546,162547,162548,162550,162551,162554,162555,29360],{},"判断 ",[26,162549,96661],{}," 推荐使用 ",[26,162552,162553],{},"is None","，不要写成 ",[26,162556,162557],{},"== None",[14,162559,162561],{"id":162560},"_58-函数文档字符串","5.8 函数文档字符串",[19,162563,162564],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[30,162566,162568],{"className":31353,"code":162567,"language":31355,"meta":35,"style":35},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[26,162569,162570,162580,162585],{"__ignoreMap":35},[39,162571,162572,162574,162577],{"class":41,"line":42},[39,162573,32922],{"class":45},[39,162575,162576],{"class":49}," calculate_bmi",[39,162578,162579],{"class":53},"(weight, height):\n",[39,162581,162582],{"class":41,"line":92},[39,162583,162584],{"class":237},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[39,162586,162587,162589,162592,162594,162597,162599],{"class":41,"line":112},[39,162588,95],{"class":45},[39,162590,162591],{"class":53}," weight ",[39,162593,1845],{"class":45},[39,162595,162596],{"class":53}," height ",[39,162598,11726],{"class":45},[39,162600,48698],{"class":74},[19,162602,162603],{},"查看说明：",[30,162605,162607],{"className":31353,"code":162606,"language":31355,"meta":35,"style":35},"help(calculate_bmi)\n",[26,162608,162609],{"__ignoreMap":35},[39,162610,162611,162614],{"class":41,"line":42},[39,162612,162613],{"class":74},"help",[39,162615,162616],{"class":53},"(calculate_bmi)\n",[19,162618,162619],{},"较完整的写法：",[30,162621,162623],{"className":31353,"code":162622,"language":31355,"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",[26,162624,162625,162633,162638,162643,162647,162652,162657,162662,162666],{"__ignoreMap":35},[39,162626,162627,162629,162631],{"class":41,"line":42},[39,162628,32922],{"class":45},[39,162630,162576],{"class":49},[39,162632,162579],{"class":53},[39,162634,162635],{"class":41,"line":92},[39,162636,162637],{"class":237},"    \"\"\"\n",[39,162639,162640],{"class":41,"line":112},[39,162641,162642],{"class":237},"    计算BMI。\n",[39,162644,162645],{"class":41,"line":118},[39,162646,122],{"emptyLinePlaceholder":121},[39,162648,162649],{"class":41,"line":125},[39,162650,162651],{"class":237},"    :param weight: 体重，单位kg\n",[39,162653,162654],{"class":41,"line":132},[39,162655,162656],{"class":237},"    :param height: 身高，单位m\n",[39,162658,162659],{"class":41,"line":138},[39,162660,162661],{"class":237},"    :return: BMI数值\n",[39,162663,162664],{"class":41,"line":169},[39,162665,162637],{"class":237},[39,162667,162668,162670,162672,162674,162676,162678],{"class":41,"line":190},[39,162669,95],{"class":45},[39,162671,162591],{"class":53},[39,162673,1845],{"class":45},[39,162675,162596],{"class":53},[39,162677,11726],{"class":45},[39,162679,48698],{"class":74},[14,162681,162683],{"id":162682},"_59-变量作用域","5.9 变量作用域",[476,162685,162687],{"id":162686},"_591-局部变量","5.9.1 局部变量",[19,162689,162690],{},"在函数内部定义的变量，只能在函数内部使用。",[30,162692,162694],{"className":31353,"code":162693,"language":31355,"meta":35,"style":35},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[26,162695,162696,162705,162713,162719,162723,162727,162732],{"__ignoreMap":35},[39,162697,162698,162700,162703],{"class":41,"line":42},[39,162699,32922],{"class":45},[39,162701,162702],{"class":49}," test",[39,162704,32928],{"class":53},[39,162706,162707,162709,162711],{"class":41,"line":92},[39,162708,46568],{"class":53},[39,162710,1117],{"class":45},[39,162712,59403],{"class":74},[39,162714,162715,162717],{"class":41,"line":112},[39,162716,32274],{"class":74},[39,162718,1285],{"class":53},[39,162720,162721],{"class":41,"line":118},[39,162722,122],{"emptyLinePlaceholder":121},[39,162724,162725],{"class":41,"line":125},[39,162726,122],{"emptyLinePlaceholder":121},[39,162728,162729],{"class":41,"line":132},[39,162730,162731],{"class":53},"test()\n",[39,162733,162734,162736,162739],{"class":41,"line":138},[39,162735,31390],{"class":74},[39,162737,162738],{"class":53},"(num)  ",[39,162740,162741],{"class":128},"# 报错\n",[476,162743,162745],{"id":162744},"_592-全局变量","5.9.2 全局变量",[19,162747,162748],{},"在函数外部定义的变量，可以在函数内部读取。",[30,162750,162752],{"className":31353,"code":162751,"language":31355,"meta":35,"style":35},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[26,162753,162754,162762,162766,162770,162778,162784,162788,162792],{"__ignoreMap":35},[39,162755,162756,162758,162760],{"class":41,"line":42},[39,162757,147511],{"class":53},[39,162759,1117],{"class":45},[39,162761,150328],{"class":237},[39,162763,162764],{"class":41,"line":92},[39,162765,122],{"emptyLinePlaceholder":121},[39,162767,162768],{"class":41,"line":112},[39,162769,122],{"emptyLinePlaceholder":121},[39,162771,162772,162774,162776],{"class":41,"line":118},[39,162773,32922],{"class":45},[39,162775,161971],{"class":49},[39,162777,32928],{"class":53},[39,162779,162780,162782],{"class":41,"line":125},[39,162781,32274],{"class":74},[39,162783,151635],{"class":53},[39,162785,162786],{"class":41,"line":132},[39,162787,122],{"emptyLinePlaceholder":121},[39,162789,162790],{"class":41,"line":138},[39,162791,122],{"emptyLinePlaceholder":121},[39,162793,162794],{"class":41,"line":169},[39,162795,162006],{"class":53},[19,162797,162798,162799,29360],{},"如果要在函数内部修改全局变量，需要 ",[26,162800,162801],{},"global",[30,162803,162805],{"className":31353,"code":162804,"language":31355,"meta":35,"style":35},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[26,162806,162807,162815,162819,162823,162832,162840,162848,162852,162856,162861],{"__ignoreMap":35},[39,162808,162809,162811,162813],{"class":41,"line":42},[39,162810,147666],{"class":53},[39,162812,1117],{"class":45},[39,162814,48308],{"class":74},[39,162816,162817],{"class":41,"line":92},[39,162818,122],{"emptyLinePlaceholder":121},[39,162820,162821],{"class":41,"line":112},[39,162822,122],{"emptyLinePlaceholder":121},[39,162824,162825,162827,162830],{"class":41,"line":118},[39,162826,32922],{"class":45},[39,162828,162829],{"class":49}," add_count",[39,162831,32928],{"class":53},[39,162833,162834,162837],{"class":41,"line":125},[39,162835,162836],{"class":45},"    global",[39,162838,162839],{"class":53}," count\n",[39,162841,162842,162844,162846],{"class":41,"line":132},[39,162843,160408],{"class":53},[39,162845,10545],{"class":45},[39,162847,56674],{"class":74},[39,162849,162850],{"class":41,"line":138},[39,162851,122],{"emptyLinePlaceholder":121},[39,162853,162854],{"class":41,"line":169},[39,162855,122],{"emptyLinePlaceholder":121},[39,162857,162858],{"class":41,"line":190},[39,162859,162860],{"class":53},"add_count()\n",[39,162862,162863,162865],{"class":41,"line":202},[39,162864,31390],{"class":74},[39,162866,162867],{"class":53},"(count)\n",[19,162869,162870],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162872,162874],{"id":162873},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162876,162877],{},"一个函数中可以调用另一个函数。",[30,162879,162881],{"className":31353,"code":162880,"language":31355,"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",[26,162882,162883,162892,162906,162910,162914,162923,162928,162948,162969,162973,162977,162981],{"__ignoreMap":35},[39,162884,162885,162887,162890],{"class":41,"line":42},[39,162886,32922],{"class":45},[39,162888,162889],{"class":49}," print_line",[39,162891,32928],{"class":53},[39,162893,162894,162896,162898,162900,162902,162904],{"class":41,"line":92},[39,162895,32274],{"class":74},[39,162897,54],{"class":53},[39,162899,33458],{"class":237},[39,162901,7594],{"class":45},[39,162903,79640],{"class":74},[39,162905,574],{"class":53},[39,162907,162908],{"class":41,"line":112},[39,162909,122],{"emptyLinePlaceholder":121},[39,162911,162912],{"class":41,"line":118},[39,162913,122],{"emptyLinePlaceholder":121},[39,162915,162916,162918,162921],{"class":41,"line":125},[39,162917,32922],{"class":45},[39,162919,162920],{"class":49}," print_info",[39,162922,150350],{"class":53},[39,162924,162925],{"class":41,"line":132},[39,162926,162927],{"class":53},"    print_line()\n",[39,162929,162930,162932,162934,162936,162938,162940,162942,162944,162946],{"class":41,"line":138},[39,162931,32274],{"class":74},[39,162933,54],{"class":53},[39,162935,1321],{"class":45},[39,162937,157657],{"class":237},[39,162939,2156],{"class":74},[39,162941,80785],{"class":53},[39,162943,2206],{"class":74},[39,162945,1516],{"class":237},[39,162947,574],{"class":53},[39,162949,162950,162952,162954,162956,162959,162961,162963,162965,162967],{"class":41,"line":169},[39,162951,32274],{"class":74},[39,162953,54],{"class":53},[39,162955,1321],{"class":45},[39,162957,162958],{"class":237},"\"年龄:",[39,162960,2156],{"class":74},[39,162962,71196],{"class":53},[39,162964,2206],{"class":74},[39,162966,1516],{"class":237},[39,162968,574],{"class":53},[39,162970,162971],{"class":41,"line":190},[39,162972,162927],{"class":53},[39,162974,162975],{"class":41,"line":202},[39,162976,122],{"emptyLinePlaceholder":121},[39,162978,162979],{"class":41,"line":207},[39,162980,122],{"emptyLinePlaceholder":121},[39,162982,162983,162986,162988,162990,162992],{"class":41,"line":212},[39,162984,162985],{"class":53},"print_info(",[39,162987,150863],{"class":237},[39,162989,63],{"class":53},[39,162991,1911],{"class":74},[39,162993,574],{"class":53},[19,162995,162996],{},"这种方式可以把小功能组合成大功能。",[14,162998,163000],{"id":162999},"_511-参数检查","5.11 参数检查",[19,163002,163003],{},"函数内部可以检查参数是否合法。",[30,163005,163007],{"className":31353,"code":163006,"language":31355,"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",[26,163008,163009,163018,163030,163036,163046,163050,163054,163071,163075,163087,163098,163104],{"__ignoreMap":35},[39,163010,163011,163013,163016],{"class":41,"line":42},[39,163012,32922],{"class":45},[39,163014,163015],{"class":49}," divide",[39,163017,152068],{"class":53},[39,163019,163020,163022,163024,163026,163028],{"class":41,"line":92},[39,163021,4184],{"class":45},[39,163023,104],{"class":53},[39,163025,4032],{"class":45},[39,163027,315],{"class":74},[39,163029,4822],{"class":53},[39,163031,163032,163034],{"class":41,"line":112},[39,163033,15725],{"class":45},[39,163035,153147],{"class":74},[39,163037,163038,163040,163042,163044],{"class":41,"line":118},[39,163039,95],{"class":45},[39,163041,98],{"class":53},[39,163043,1845],{"class":45},[39,163045,152079],{"class":53},[39,163047,163048],{"class":41,"line":125},[39,163049,122],{"emptyLinePlaceholder":121},[39,163051,163052],{"class":41,"line":132},[39,163053,122],{"emptyLinePlaceholder":121},[39,163055,163056,163058,163060,163063,163065,163067,163069],{"class":41,"line":138},[39,163057,162281],{"class":53},[39,163059,1117],{"class":45},[39,163061,163062],{"class":53}," divide(",[39,163064,423],{"class":74},[39,163066,63],{"class":53},[39,163068,1457],{"class":74},[39,163070,574],{"class":53},[39,163072,163073],{"class":41,"line":169},[39,163074,122],{"emptyLinePlaceholder":121},[39,163076,163077,163079,163081,163083,163085],{"class":41,"line":190},[39,163078,2654],{"class":45},[39,163080,162527],{"class":53},[39,163082,39902],{"class":45},[39,163084,39908],{"class":74},[39,163086,4822],{"class":53},[39,163088,163089,163091,163093,163096],{"class":41,"line":202},[39,163090,32274],{"class":74},[39,163092,54],{"class":53},[39,163094,163095],{"class":237},"\"除数不能为0\"",[39,163097,574],{"class":53},[39,163099,163100,163102],{"class":41,"line":207},[39,163101,2811],{"class":45},[39,163103,4822],{"class":53},[39,163105,163106,163108],{"class":41,"line":212},[39,163107,32274],{"class":74},[39,163109,77560],{"class":53},[14,163111,163113],{"id":163112},"_512-类型提示","5.12 类型提示",[19,163115,163116],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[30,163118,163120],{"className":31353,"code":163119,"language":31355,"meta":35,"style":35},"def add(a: int, b: int) -> int:\n    return a + b\n",[26,163121,163122,163145],{"__ignoreMap":35},[39,163123,163124,163126,163128,163131,163133,163136,163138,163141,163143],{"class":41,"line":42},[39,163125,32922],{"class":45},[39,163127,6289],{"class":49},[39,163129,163130],{"class":53},"(a: ",[39,163132,46],{"class":74},[39,163134,163135],{"class":53},", b: ",[39,163137,46],{"class":74},[39,163139,163140],{"class":53},") -> ",[39,163142,46],{"class":74},[39,163144,4822],{"class":53},[39,163146,163147,163149,163151,163153],{"class":41,"line":92},[39,163148,95],{"class":45},[39,163150,98],{"class":53},[39,163152,101],{"class":45},[39,163154,152079],{"class":53},[19,163156,163157],{},"字符串参数：",[30,163159,163161],{"className":31353,"code":163160,"language":31355,"meta":35,"style":35},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[26,163162,163163,163180],{"__ignoreMap":35},[39,163164,163165,163167,163169,163172,163174,163176,163178],{"class":41,"line":42},[39,163166,32922],{"class":45},[39,163168,161971],{"class":49},[39,163170,163171],{"class":53},"(name: ",[39,163173,2427],{"class":74},[39,163175,163140],{"class":53},[39,163177,96661],{"class":74},[39,163179,4822],{"class":53},[39,163181,163182,163184,163186,163188,163190,163192,163194,163196,163198],{"class":41,"line":92},[39,163183,32274],{"class":74},[39,163185,54],{"class":53},[39,163187,1321],{"class":45},[39,163189,158029],{"class":237},[39,163191,2156],{"class":74},[39,163193,80785],{"class":53},[39,163195,2206],{"class":74},[39,163197,1516],{"class":237},[39,163199,574],{"class":53},[19,163201,163202],{},"列表参数：",[30,163204,163206],{"className":31353,"code":163205,"language":31355,"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",[26,163207,163208,163227,163235,163247,163256],{"__ignoreMap":35},[39,163209,163210,163212,163215,163218,163220,163223,163225],{"class":41,"line":42},[39,163211,32922],{"class":45},[39,163213,163214],{"class":49}," get_total",[39,163216,163217],{"class":53},"(numbers: list[",[39,163219,46],{"class":74},[39,163221,163222],{"class":53},"]) -> ",[39,163224,46],{"class":74},[39,163226,4822],{"class":53},[39,163228,163229,163231,163233],{"class":41,"line":92},[39,163230,160282],{"class":53},[39,163232,1117],{"class":45},[39,163234,48308],{"class":74},[39,163236,163237,163239,163242,163244],{"class":41,"line":112},[39,163238,4284],{"class":45},[39,163240,163241],{"class":53}," number ",[39,163243,27018],{"class":45},[39,163245,163246],{"class":53}," numbers:\n",[39,163248,163249,163251,163253],{"class":41,"line":118},[39,163250,160957],{"class":53},[39,163252,10545],{"class":45},[39,163254,163255],{"class":53}," number\n",[39,163257,163258,163260],{"class":41,"line":125},[39,163259,95],{"class":45},[39,163261,163262],{"class":53}," total\n",[19,163264,163265],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163267,163269],{"id":163268},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[30,163271,163273],{"className":31353,"code":163272,"language":31355,"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",[26,163274,163275,163285,163289,163293,163301,163312,163322,163332,163342,163352,163356,163360,163369,163391,163395,163399,163408,163414,163434,163446,163457,163461,163470,163481,163486,163490,163494,163503,163509,163528,163540,163550,163554,163565,163575,163579,163587,163598,163602,163606,163610,163618,163623,163637,163641,163653,163658,163670,163675,163687,163692,163704,163714,163718,163724],{"__ignoreMap":35},[39,163276,163277,163280,163282],{"class":41,"line":42},[39,163278,163279],{"class":53},"balance ",[39,163281,1117],{"class":45},[39,163283,163284],{"class":74}," 1000\n",[39,163286,163287],{"class":41,"line":92},[39,163288,122],{"emptyLinePlaceholder":121},[39,163290,163291],{"class":41,"line":112},[39,163292,122],{"emptyLinePlaceholder":121},[39,163294,163295,163297,163299],{"class":41,"line":118},[39,163296,32922],{"class":45},[39,163298,153008],{"class":49},[39,163300,32928],{"class":53},[39,163302,163303,163305,163307,163310],{"class":41,"line":125},[39,163304,32274],{"class":74},[39,163306,54],{"class":53},[39,163308,163309],{"class":237},"\"====== ATM ======\"",[39,163311,574],{"class":53},[39,163313,163314,163316,163318,163320],{"class":41,"line":132},[39,163315,32274],{"class":74},[39,163317,54],{"class":53},[39,163319,161623],{"class":237},[39,163321,574],{"class":53},[39,163323,163324,163326,163328,163330],{"class":41,"line":138},[39,163325,32274],{"class":74},[39,163327,54],{"class":53},[39,163329,161634],{"class":237},[39,163331,574],{"class":53},[39,163333,163334,163336,163338,163340],{"class":41,"line":169},[39,163335,32274],{"class":74},[39,163337,54],{"class":53},[39,163339,161645],{"class":237},[39,163341,574],{"class":53},[39,163343,163344,163346,163348,163350],{"class":41,"line":190},[39,163345,32274],{"class":74},[39,163347,54],{"class":53},[39,163349,161656],{"class":237},[39,163351,574],{"class":53},[39,163353,163354],{"class":41,"line":202},[39,163355,122],{"emptyLinePlaceholder":121},[39,163357,163358],{"class":41,"line":207},[39,163359,122],{"emptyLinePlaceholder":121},[39,163361,163362,163364,163367],{"class":41,"line":212},[39,163363,32922],{"class":45},[39,163365,163366],{"class":49}," show_balance",[39,163368,32928],{"class":53},[39,163370,163371,163373,163375,163377,163380,163382,163385,163387,163389],{"class":41,"line":223},[39,163372,32274],{"class":74},[39,163374,54],{"class":53},[39,163376,1321],{"class":45},[39,163378,163379],{"class":237},"\"当前余额:",[39,163381,2156],{"class":74},[39,163383,163384],{"class":53},"balance",[39,163386,2206],{"class":74},[39,163388,157987],{"class":237},[39,163390,574],{"class":53},[39,163392,163393],{"class":41,"line":228},[39,163394,122],{"emptyLinePlaceholder":121},[39,163396,163397],{"class":41,"line":263},[39,163398,122],{"emptyLinePlaceholder":121},[39,163400,163401,163403,163406],{"class":41,"line":287},[39,163402,32922],{"class":45},[39,163404,163405],{"class":49}," save_money",[39,163407,32928],{"class":53},[39,163409,163410,163412],{"class":41,"line":292},[39,163411,162836],{"class":45},[39,163413,151074],{"class":53},[39,163415,163416,163419,163421,163423,163425,163427,163429,163432],{"class":41,"line":305},[39,163417,163418],{"class":53},"    money ",[39,163420,1117],{"class":45},[39,163422,110772],{"class":74},[39,163424,54],{"class":53},[39,163426,54796],{"class":74},[39,163428,54],{"class":53},[39,163430,163431],{"class":237},"\"请输入存款金额:\"",[39,163433,31472],{"class":53},[39,163435,163436,163438,163440,163442,163444],{"class":41,"line":310},[39,163437,4184],{"class":45},[39,163439,151117],{"class":53},[39,163441,2709],{"class":45},[39,163443,315],{"class":74},[39,163445,4822],{"class":53},[39,163447,163448,163450,163452,163455],{"class":41,"line":321},[39,163449,33426],{"class":74},[39,163451,54],{"class":53},[39,163453,163454],{"class":237},"\"金额必须大于0\"",[39,163456,574],{"class":53},[39,163458,163459],{"class":41,"line":713},[39,163460,153336],{"class":45},[39,163462,163463,163466,163468],{"class":41,"line":718},[39,163464,163465],{"class":53},"    balance ",[39,163467,10545],{"class":45},[39,163469,151150],{"class":53},[39,163471,163472,163474,163476,163479],{"class":41,"line":723},[39,163473,32274],{"class":74},[39,163475,54],{"class":53},[39,163477,163478],{"class":237},"\"存款成功\"",[39,163480,574],{"class":53},[39,163482,163483],{"class":41,"line":729},[39,163484,163485],{"class":53},"    show_balance()\n",[39,163487,163488],{"class":41,"line":735},[39,163489,122],{"emptyLinePlaceholder":121},[39,163491,163492],{"class":41,"line":741},[39,163493,122],{"emptyLinePlaceholder":121},[39,163495,163496,163498,163501],{"class":41,"line":747},[39,163497,32922],{"class":45},[39,163499,163500],{"class":49}," withdraw_money",[39,163502,32928],{"class":53},[39,163504,163505,163507],{"class":41,"line":753},[39,163506,162836],{"class":45},[39,163508,151074],{"class":53},[39,163510,163511,163513,163515,163517,163519,163521,163523,163526],{"class":41,"line":758},[39,163512,163418],{"class":53},[39,163514,1117],{"class":45},[39,163516,110772],{"class":74},[39,163518,54],{"class":53},[39,163520,54796],{"class":74},[39,163522,54],{"class":53},[39,163524,163525],{"class":237},"\"请输入取款金额:\"",[39,163527,31472],{"class":53},[39,163529,163530,163532,163534,163536,163538],{"class":41,"line":763},[39,163531,4184],{"class":45},[39,163533,151117],{"class":53},[39,163535,2709],{"class":45},[39,163537,315],{"class":74},[39,163539,4822],{"class":53},[39,163541,163542,163544,163546,163548],{"class":41,"line":772},[39,163543,33426],{"class":74},[39,163545,54],{"class":53},[39,163547,163454],{"class":237},[39,163549,574],{"class":53},[39,163551,163552],{"class":41,"line":777},[39,163553,153336],{"class":45},[39,163555,163556,163558,163560,163562],{"class":41,"line":785},[39,163557,4184],{"class":45},[39,163559,151117],{"class":53},[39,163561,2220],{"class":45},[39,163563,163564],{"class":53}," balance:\n",[39,163566,163567,163569,163571,163573],{"class":41,"line":796},[39,163568,33426],{"class":74},[39,163570,54],{"class":53},[39,163572,151212],{"class":237},[39,163574,574],{"class":53},[39,163576,163577],{"class":41,"line":808},[39,163578,153336],{"class":45},[39,163580,163581,163583,163585],{"class":41,"line":823},[39,163582,163465],{"class":53},[39,163584,151227],{"class":45},[39,163586,151150],{"class":53},[39,163588,163589,163591,163593,163596],{"class":41,"line":839},[39,163590,32274],{"class":74},[39,163592,54],{"class":53},[39,163594,163595],{"class":237},"\"取款成功\"",[39,163597,574],{"class":53},[39,163599,163600],{"class":41,"line":845},[39,163601,163485],{"class":53},[39,163603,163604],{"class":41,"line":856},[39,163605,122],{"emptyLinePlaceholder":121},[39,163607,163608],{"class":41,"line":861},[39,163609,122],{"emptyLinePlaceholder":121},[39,163611,163612,163614,163616],{"class":41,"line":870},[39,163613,109638],{"class":45},[39,163615,96267],{"class":74},[39,163617,4822],{"class":53},[39,163619,163620],{"class":41,"line":9084},[39,163621,163622],{"class":53},"    show_menu()\n",[39,163624,163625,163627,163629,163631,163633,163635],{"class":41,"line":9090},[39,163626,161667],{"class":53},[39,163628,1117],{"class":45},[39,163630,61580],{"class":74},[39,163632,54],{"class":53},[39,163634,154048],{"class":237},[39,163636,574],{"class":53},[39,163638,163639],{"class":41,"line":9102},[39,163640,122],{"emptyLinePlaceholder":121},[39,163642,163643,163645,163647,163649,163651],{"class":41,"line":9114},[39,163644,4184],{"class":45},[39,163646,154061],{"class":53},[39,163648,4032],{"class":45},[39,163650,154066],{"class":237},[39,163652,4822],{"class":53},[39,163654,163655],{"class":41,"line":9126},[39,163656,163657],{"class":53},"        show_balance()\n",[39,163659,163660,163662,163664,163666,163668],{"class":41,"line":10784},[39,163661,40268],{"class":45},[39,163663,154061],{"class":53},[39,163665,4032],{"class":45},[39,163667,154085],{"class":237},[39,163669,4822],{"class":53},[39,163671,163672],{"class":41,"line":10809},[39,163673,163674],{"class":53},"        save_money()\n",[39,163676,163677,163679,163681,163683,163685],{"class":41,"line":10832},[39,163678,40268],{"class":45},[39,163680,154061],{"class":53},[39,163682,4032],{"class":45},[39,163684,154103],{"class":237},[39,163686,4822],{"class":53},[39,163688,163689],{"class":41,"line":10856},[39,163690,163691],{"class":53},"        withdraw_money()\n",[39,163693,163694,163696,163698,163700,163702],{"class":41,"line":10861},[39,163695,40268],{"class":45},[39,163697,154061],{"class":53},[39,163699,4032],{"class":45},[39,163701,154157],{"class":237},[39,163703,4822],{"class":53},[39,163705,163706,163708,163710,163712],{"class":41,"line":10866},[39,163707,33426],{"class":74},[39,163709,54],{"class":53},[39,163711,154168],{"class":237},[39,163713,574],{"class":53},[39,163715,163716],{"class":41,"line":10871},[39,163717,32602],{"class":45},[39,163719,163720,163722],{"class":41,"line":10880},[39,163721,158997],{"class":45},[39,163723,4822],{"class":53},[39,163725,163726,163728,163730,163732],{"class":41,"line":10885},[39,163727,33426],{"class":74},[39,163729,54],{"class":53},[39,163731,154189],{"class":237},[39,163733,574],{"class":53},[19,163735,163736],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163738,163740],{"id":163739},"_514-易错点","5.14 易错点",[328,163742,163743,163746,163749,163754,163759,163762],{},[331,163744,163745],{},"函数定义后必须调用才会执行。",[331,163747,163748],{},"函数名后面有括号才是调用。",[331,163750,163751,163753],{},[26,163752,18019],{}," 后面的代码不会执行。",[331,163755,163756,163757,29360],{},"没有返回值的函数默认返回 ",[26,163758,96661],{},[331,163760,163761],{},"局部变量不能在函数外部访问。",[331,163763,163764,163765,163767],{},"不要滥用 ",[26,163766,162801],{},"，更好的方式是让函数返回新值。",[19,163769,163770,163771,163773],{},"例如不用 ",[26,163772,162801],{}," 改写存款：",[30,163775,163777],{"className":31353,"code":163776,"language":31355,"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",[26,163778,163779,163788,163799,163803,163807,163815,163828],{"__ignoreMap":35},[39,163780,163781,163783,163785],{"class":41,"line":42},[39,163782,32922],{"class":45},[39,163784,163405],{"class":49},[39,163786,163787],{"class":53},"(balance, money):\n",[39,163789,163790,163792,163795,163797],{"class":41,"line":92},[39,163791,95],{"class":45},[39,163793,163794],{"class":53}," balance ",[39,163796,101],{"class":45},[39,163798,151150],{"class":53},[39,163800,163801],{"class":41,"line":112},[39,163802,122],{"emptyLinePlaceholder":121},[39,163804,163805],{"class":41,"line":118},[39,163806,122],{"emptyLinePlaceholder":121},[39,163808,163809,163811,163813],{"class":41,"line":125},[39,163810,163279],{"class":53},[39,163812,1117],{"class":45},[39,163814,163284],{"class":74},[39,163816,163817,163819,163821,163824,163826],{"class":41,"line":132},[39,163818,163279],{"class":53},[39,163820,1117],{"class":45},[39,163822,163823],{"class":53}," save_money(balance, ",[39,163825,2832],{"class":74},[39,163827,574],{"class":53},[39,163829,163830,163832],{"class":41,"line":138},[39,163831,31390],{"class":74},[39,163833,163834],{"class":53},"(balance)\n",[14,163836,163838],{"id":163837},"_515-本章练习","5.15 本章练习",[328,163840,163841,163848,163854,163860,163866],{},[331,163842,163843,163844,163847],{},"定义函数 ",[26,163845,163846],{},"print_student(name, age)","，输出学生信息。",[331,163849,163843,163850,163853],{},[26,163851,163852],{},"get_max(a, b, c)","，返回三个数中的最大值。",[331,163855,163843,163856,163859],{},[26,163857,163858],{},"is_even(num)","，判断一个数是否为偶数。",[331,163861,163843,163862,163865],{},[26,163863,163864],{},"calculate_bmi(weight, height)","，返回 BMI。",[331,163867,163868],{},"把第 4 章的菜单程序拆分成多个函数。",[1192,163870,163871],{},"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":92,"depth":92,"links":163873},[163874,163875,163876,163877,163878,163879,163880,163881,163882,163886,163887,163888,163889,163890,163891],{"id":161894,"depth":92,"text":161895},{"id":161935,"depth":92,"text":161936},{"id":162025,"depth":92,"text":162026},{"id":162106,"depth":92,"text":162107},{"id":162239,"depth":92,"text":162240},{"id":162361,"depth":92,"text":162362},{"id":162483,"depth":92,"text":162484},{"id":162560,"depth":92,"text":162561},{"id":162682,"depth":92,"text":162683,"children":163883},[163884,163885],{"id":162686,"depth":112,"text":162687},{"id":162744,"depth":112,"text":162745},{"id":162873,"depth":92,"text":162874},{"id":162999,"depth":92,"text":163000},{"id":163112,"depth":92,"text":163113},{"id":163268,"depth":92,"text":163269},{"id":163739,"depth":92,"text":163740},{"id":163837,"depth":92,"text":163838},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161886,"description":24350},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163898,"title":163899,"body":163900,"description":24350,"extension":1203,"meta":166944,"navigation":121,"path":166945,"seo":166946,"stem":166947,"__hash__":166948},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163901,"toc":166925},[163902,163905,163909,163912,163915,164019,164022,164026,164029,164109,164112,164116,164119,164179,164182,164218,164221,164236,164240,164313,164316,164371,164374,164444,164447,164531,164541,164599,164603,164648,164651,164677,164680,164786,164790,164793,164835,164838,164902,164905,164909,164912,164973,164976,165006,165009,165047,165051,165054,165063,165066,165190,165193,165234,165238,165241,165252,165292,165295,165310,165315,165318,165385,165388,165478,165482,165485,165533,165536,165563,165565,165595,165598,165618,165621,165652,165655,165688,165692,165695,165719,165722,165746,165749,165773,165777,165780,165910,165913,165993,165996,166071,166075,166078,166128,166131,166173,166176,166200,166202,166226,166229,166284,166287,166353,166357,166360,166363,166401,166404,166457,166460,166506,166509,166542,166545,166549,166868,166872,166901,166905,166922],[10,163903,163899],{"id":163904},"_6-数据容器",[14,163906,163908],{"id":163907},"_61-什么是数据容器","6.1 什么是数据容器",[19,163910,163911],{},"数据容器用于一次保存多个数据。",[19,163913,163914],{},"常见容器：",[1404,163916,163917,163934],{},[1407,163918,163919],{},[1410,163920,163921,163923,163926,163929,163932],{},[1413,163922,26746],{},[1413,163924,163925],{},"是否有序",[1413,163927,163928],{},"是否可变",[1413,163930,163931],{},"是否允许重复",[1413,163933,28467],{},[1450,163935,163936,163954,163970,163985,164002],{},[1410,163937,163938,163941,163944,163947,163950],{},[1455,163939,163940],{},"list列表",[1455,163942,163943],{},"有序",[1455,163945,163946],{},"可变",[1455,163948,163949],{},"允许",[1455,163951,163952],{},[26,163953,156232],{},[1410,163955,163956,163959,163961,163964,163966],{},[1455,163957,163958],{},"tuple元组",[1455,163960,163943],{},[1455,163962,163963],{},"不可变",[1455,163965,163949],{},[1455,163967,163968],{},[26,163969,156245],{},[1410,163971,163972,163975,163977,163979,163981],{},[1455,163973,163974],{},"str字符串",[1455,163976,163943],{},[1455,163978,163963],{},[1455,163980,163949],{},[1455,163982,163983],{},[26,163984,156855],{},[1410,163986,163987,163990,163993,163995,163998],{},[1455,163988,163989],{},"set集合",[1455,163991,163992],{},"无序",[1455,163994,163946],{},[1455,163996,163997],{},"不允许",[1455,163999,164000],{},[26,164001,156270],{},[1410,164003,164004,164007,164009,164011,164014],{},[1455,164005,164006],{},"dict字典",[1455,164008,163943],{},[1455,164010,163946],{},[1455,164012,164013],{},"key不允许重复",[1455,164015,164016],{},[26,164017,164018],{},"{\"name\": \"小明\"}",[19,164020,164021],{},"Python 3.7 之后，字典保持插入顺序。",[14,164023,164025],{"id":164024},"_62-列表list","6.2 列表list",[19,164027,164028],{},"列表用于保存一组有顺序的数据。",[30,164030,164032],{"className":31353,"code":164031,"language":31355,"meta":35,"style":35},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[26,164033,164034,164054,164079,164100],{"__ignoreMap":35},[39,164035,164036,164038,164040,164042,164044,164046,164048,164050,164052],{"class":41,"line":42},[39,164037,161355],{"class":53},[39,164039,1117],{"class":45},[39,164041,53201],{"class":53},[39,164043,150863],{"class":237},[39,164045,63],{"class":53},[39,164047,151911],{"class":237},[39,164049,63],{"class":53},[39,164051,160706],{"class":237},[39,164053,34221],{"class":53},[39,164055,164056,164059,164061,164063,164065,164067,164069,164071,164073,164075,164077],{"class":41,"line":92},[39,164057,164058],{"class":53},"numbers ",[39,164060,1117],{"class":45},[39,164062,53201],{"class":53},[39,164064,1483],{"class":74},[39,164066,63],{"class":53},[39,164068,1345],{"class":74},[39,164070,63],{"class":53},[39,164072,1339],{"class":74},[39,164074,63],{"class":53},[39,164076,1558],{"class":74},[39,164078,34221],{"class":53},[39,164080,164081,164084,164086,164088,164090,164092,164094,164096,164098],{"class":41,"line":112},[39,164082,164083],{"class":53},"mixed ",[39,164085,1117],{"class":45},[39,164087,53201],{"class":53},[39,164089,150863],{"class":237},[39,164091,63],{"class":53},[39,164093,1911],{"class":74},[39,164095,63],{"class":53},[39,164097,32451],{"class":74},[39,164099,34221],{"class":53},[39,164101,164102,164105,164107],{"class":41,"line":118},[39,164103,164104],{"class":53},"empty ",[39,164106,1117],{"class":45},[39,164108,52813],{"class":53},[19,164110,164111],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164113,164115],{"id":164114},"_63-列表索引","6.3 列表索引",[19,164117,164118],{},"正向索引从 0 开始：",[30,164120,164122],{"className":31353,"code":164121,"language":31355,"meta":35,"style":35},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[26,164123,164124,164144,164148,164159,164169],{"__ignoreMap":35},[39,164125,164126,164128,164130,164132,164134,164136,164138,164140,164142],{"class":41,"line":42},[39,164127,161355],{"class":53},[39,164129,1117],{"class":45},[39,164131,53201],{"class":53},[39,164133,150863],{"class":237},[39,164135,63],{"class":53},[39,164137,151911],{"class":237},[39,164139,63],{"class":53},[39,164141,160706],{"class":237},[39,164143,34221],{"class":53},[39,164145,164146],{"class":41,"line":92},[39,164147,122],{"emptyLinePlaceholder":121},[39,164149,164150,164152,164155,164157],{"class":41,"line":112},[39,164151,31390],{"class":74},[39,164153,164154],{"class":53},"(names[",[39,164156,1457],{"class":74},[39,164158,5738],{"class":53},[39,164160,164161,164163,164165,164167],{"class":41,"line":118},[39,164162,31390],{"class":74},[39,164164,164154],{"class":53},[39,164166,1483],{"class":74},[39,164168,5738],{"class":53},[39,164170,164171,164173,164175,164177],{"class":41,"line":125},[39,164172,31390],{"class":74},[39,164174,164154],{"class":53},[39,164176,1345],{"class":74},[39,164178,5738],{"class":53},[19,164180,164181],{},"反向索引从 -1 开始：",[30,164183,164185],{"className":31353,"code":164184,"language":31355,"meta":35,"style":35},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[26,164186,164187,164203],{"__ignoreMap":35},[39,164188,164189,164191,164193,164195,164197,164200],{"class":41,"line":42},[39,164190,31390],{"class":74},[39,164192,164154],{"class":53},[39,164194,1793],{"class":45},[39,164196,1483],{"class":74},[39,164198,164199],{"class":53},"])  ",[39,164201,164202],{"class":128},"# 小刚\n",[39,164204,164205,164207,164209,164211,164213,164215],{"class":41,"line":92},[39,164206,31390],{"class":74},[39,164208,164154],{"class":53},[39,164210,1793],{"class":45},[39,164212,1345],{"class":74},[39,164214,164199],{"class":53},[39,164216,164217],{"class":128},"# 小红\n",[19,164219,164220],{},"索引越界会报错：",[30,164222,164224],{"className":31353,"code":164223,"language":31355,"meta":35,"style":35},"print(names[3])\n",[26,164225,164226],{"__ignoreMap":35},[39,164227,164228,164230,164232,164234],{"class":41,"line":42},[39,164229,31390],{"class":74},[39,164231,164154],{"class":53},[39,164233,1339],{"class":74},[39,164235,5738],{"class":53},[14,164237,164239],{"id":164238},"_64-列表常用方法","6.4 列表常用方法",[30,164241,164243],{"className":31353,"code":164242,"language":31355,"meta":35,"style":35},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[26,164244,164245,164261,164265,164274,164288,164302,164306],{"__ignoreMap":35},[39,164246,164247,164249,164251,164253,164255,164257,164259],{"class":41,"line":42},[39,164248,161355],{"class":53},[39,164250,1117],{"class":45},[39,164252,53201],{"class":53},[39,164254,150863],{"class":237},[39,164256,63],{"class":53},[39,164258,151911],{"class":237},[39,164260,34221],{"class":53},[39,164262,164263],{"class":41,"line":92},[39,164264,122],{"emptyLinePlaceholder":121},[39,164266,164267,164270,164272],{"class":41,"line":112},[39,164268,164269],{"class":53},"names.append(",[39,164271,160706],{"class":237},[39,164273,574],{"class":53},[39,164275,164276,164279,164281,164283,164286],{"class":41,"line":118},[39,164277,164278],{"class":53},"names.insert(",[39,164280,1483],{"class":74},[39,164282,63],{"class":53},[39,164284,164285],{"class":237},"\"小李\"",[39,164287,574],{"class":53},[39,164289,164290,164293,164295,164297,164300],{"class":41,"line":125},[39,164291,164292],{"class":53},"names.extend([",[39,164294,9752],{"class":237},[39,164296,63],{"class":53},[39,164298,164299],{"class":237},"\"小赵\"",[39,164301,5738],{"class":53},[39,164303,164304],{"class":41,"line":132},[39,164305,122],{"emptyLinePlaceholder":121},[39,164307,164308,164310],{"class":41,"line":138},[39,164309,31390],{"class":74},[39,164311,164312],{"class":53},"(names)\n",[19,164314,164315],{},"删除元素：",[30,164317,164319],{"className":31353,"code":164318,"language":31355,"meta":35,"style":35},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[26,164320,164321,164330,164340,164354,164366],{"__ignoreMap":35},[39,164322,164323,164326,164328],{"class":41,"line":42},[39,164324,164325],{"class":53},"names.remove(",[39,164327,151911],{"class":237},[39,164329,574],{"class":53},[39,164331,164332,164335,164337],{"class":41,"line":92},[39,164333,164334],{"class":53},"last ",[39,164336,1117],{"class":45},[39,164338,164339],{"class":53}," names.pop()\n",[39,164341,164342,164345,164347,164350,164352],{"class":41,"line":112},[39,164343,164344],{"class":53},"first ",[39,164346,1117],{"class":45},[39,164348,164349],{"class":53}," names.pop(",[39,164351,1457],{"class":74},[39,164353,574],{"class":53},[39,164355,164356,164359,164362,164364],{"class":41,"line":118},[39,164357,164358],{"class":45},"del",[39,164360,164361],{"class":53}," names[",[39,164363,1457],{"class":74},[39,164365,34221],{"class":53},[39,164367,164368],{"class":41,"line":125},[39,164369,164370],{"class":53},"names.clear()\n",[19,164372,164373],{},"查询和统计：",[30,164375,164377],{"className":31353,"code":164376,"language":31355,"meta":35,"style":35},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[26,164378,164379,164407,164411,164422,164433],{"__ignoreMap":35},[39,164380,164381,164383,164385,164387,164389,164391,164393,164395,164397,164399,164401,164403,164405],{"class":41,"line":42},[39,164382,164058],{"class":53},[39,164384,1117],{"class":45},[39,164386,53201],{"class":53},[39,164388,1483],{"class":74},[39,164390,63],{"class":53},[39,164392,1345],{"class":74},[39,164394,63],{"class":53},[39,164396,1339],{"class":74},[39,164398,63],{"class":53},[39,164400,1345],{"class":74},[39,164402,63],{"class":53},[39,164404,1558],{"class":74},[39,164406,34221],{"class":53},[39,164408,164409],{"class":41,"line":92},[39,164410,122],{"emptyLinePlaceholder":121},[39,164412,164413,164415,164418,164420],{"class":41,"line":112},[39,164414,31390],{"class":74},[39,164416,164417],{"class":53},"(numbers.index(",[39,164419,1339],{"class":74},[39,164421,31472],{"class":53},[39,164423,164424,164426,164429,164431],{"class":41,"line":118},[39,164425,31390],{"class":74},[39,164427,164428],{"class":53},"(numbers.count(",[39,164430,1345],{"class":74},[39,164432,31472],{"class":53},[39,164434,164435,164437,164439,164441],{"class":41,"line":125},[39,164436,31390],{"class":74},[39,164438,54],{"class":53},[39,164440,8432],{"class":74},[39,164442,164443],{"class":53},"(numbers))\n",[19,164445,164446],{},"排序：",[30,164448,164450],{"className":31353,"code":164449,"language":31355,"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",[26,164451,164452,164476,164480,164485,164492,164496,164510,164516,164520,164525],{"__ignoreMap":35},[39,164453,164454,164456,164458,164460,164462,164464,164466,164468,164470,164472,164474],{"class":41,"line":42},[39,164455,164058],{"class":53},[39,164457,1117],{"class":45},[39,164459,53201],{"class":53},[39,164461,1339],{"class":74},[39,164463,63],{"class":53},[39,164465,1483],{"class":74},[39,164467,63],{"class":53},[39,164469,1583],{"class":74},[39,164471,63],{"class":53},[39,164473,1345],{"class":74},[39,164475,34221],{"class":53},[39,164477,164478],{"class":41,"line":92},[39,164479,122],{"emptyLinePlaceholder":121},[39,164481,164482],{"class":41,"line":112},[39,164483,164484],{"class":53},"numbers.sort()\n",[39,164486,164487,164489],{"class":41,"line":118},[39,164488,31390],{"class":74},[39,164490,164491],{"class":53},"(numbers)\n",[39,164493,164494],{"class":41,"line":125},[39,164495,122],{"emptyLinePlaceholder":121},[39,164497,164498,164501,164504,164506,164508],{"class":41,"line":132},[39,164499,164500],{"class":53},"numbers.sort(",[39,164502,164503],{"class":59},"reverse",[39,164505,1117],{"class":45},[39,164507,32451],{"class":74},[39,164509,574],{"class":53},[39,164511,164512,164514],{"class":41,"line":138},[39,164513,31390],{"class":74},[39,164515,164491],{"class":53},[39,164517,164518],{"class":41,"line":169},[39,164519,122],{"emptyLinePlaceholder":121},[39,164521,164522],{"class":41,"line":190},[39,164523,164524],{"class":53},"numbers.reverse()\n",[39,164526,164527,164529],{"class":41,"line":202},[39,164528,31390],{"class":74},[39,164530,164491],{"class":53},[19,164532,164533,164536,164537,164540],{},[26,164534,164535],{},"sort()"," 会修改原列表，",[26,164538,164539],{},"sorted()"," 返回新列表。",[30,164542,164544],{"className":31353,"code":164543,"language":31355,"meta":35,"style":35},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[26,164545,164546,164570,164582,164586,164592],{"__ignoreMap":35},[39,164547,164548,164550,164552,164554,164556,164558,164560,164562,164564,164566,164568],{"class":41,"line":42},[39,164549,164058],{"class":53},[39,164551,1117],{"class":45},[39,164553,53201],{"class":53},[39,164555,1339],{"class":74},[39,164557,63],{"class":53},[39,164559,1483],{"class":74},[39,164561,63],{"class":53},[39,164563,1583],{"class":74},[39,164565,63],{"class":53},[39,164567,1345],{"class":74},[39,164569,34221],{"class":53},[39,164571,164572,164575,164577,164580],{"class":41,"line":92},[39,164573,164574],{"class":53},"new_numbers ",[39,164576,1117],{"class":45},[39,164578,164579],{"class":74}," sorted",[39,164581,164491],{"class":53},[39,164583,164584],{"class":41,"line":112},[39,164585,122],{"emptyLinePlaceholder":121},[39,164587,164588,164590],{"class":41,"line":118},[39,164589,31390],{"class":74},[39,164591,164491],{"class":53},[39,164593,164594,164596],{"class":41,"line":125},[39,164595,31390],{"class":74},[39,164597,164598],{"class":53},"(new_numbers)\n",[14,164600,164602],{"id":164601},"_65-列表遍历","6.5 列表遍历",[30,164604,164606],{"className":31353,"code":164605,"language":31355,"meta":35,"style":35},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[26,164607,164608,164628,164632,164642],{"__ignoreMap":35},[39,164609,164610,164612,164614,164616,164618,164620,164622,164624,164626],{"class":41,"line":42},[39,164611,161355],{"class":53},[39,164613,1117],{"class":45},[39,164615,53201],{"class":53},[39,164617,150863],{"class":237},[39,164619,63],{"class":53},[39,164621,151911],{"class":237},[39,164623,63],{"class":53},[39,164625,160706],{"class":237},[39,164627,34221],{"class":53},[39,164629,164630],{"class":41,"line":92},[39,164631,122],{"emptyLinePlaceholder":121},[39,164633,164634,164636,164638,164640],{"class":41,"line":112},[39,164635,4108],{"class":45},[39,164637,161391],{"class":53},[39,164639,27018],{"class":45},[39,164641,161396],{"class":53},[39,164643,164644,164646],{"class":41,"line":118},[39,164645,32274],{"class":74},[39,164647,151635],{"class":53},[19,164649,164650],{},"需要索引时：",[30,164652,164654],{"className":31353,"code":164653,"language":31355,"meta":35,"style":35},"for index, name in enumerate(names):\n    print(index, name)\n",[26,164655,164656,164670],{"__ignoreMap":35},[39,164657,164658,164660,164663,164665,164667],{"class":41,"line":42},[39,164659,4108],{"class":45},[39,164661,164662],{"class":53}," index, name ",[39,164664,27018],{"class":45},[39,164666,32581],{"class":74},[39,164668,164669],{"class":53},"(names):\n",[39,164671,164672,164674],{"class":41,"line":92},[39,164673,32274],{"class":74},[39,164675,164676],{"class":53},"(index, name)\n",[19,164678,164679],{},"统计总分：",[30,164681,164683],{"className":31353,"code":164682,"language":31355,"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",[26,164684,164685,164710,164718,164722,164733,164741,164745,164762],{"__ignoreMap":35},[39,164686,164687,164690,164692,164694,164696,164698,164700,164702,164704,164706,164708],{"class":41,"line":42},[39,164688,164689],{"class":53},"scores ",[39,164691,1117],{"class":45},[39,164693,53201],{"class":53},[39,164695,2122],{"class":74},[39,164697,63],{"class":53},[39,164699,1996],{"class":74},[39,164701,63],{"class":53},[39,164703,1519],{"class":74},[39,164705,63],{"class":53},[39,164707,1822],{"class":74},[39,164709,34221],{"class":53},[39,164711,164712,164714,164716],{"class":41,"line":92},[39,164713,158235],{"class":53},[39,164715,1117],{"class":45},[39,164717,48308],{"class":74},[39,164719,164720],{"class":41,"line":112},[39,164721,122],{"emptyLinePlaceholder":121},[39,164723,164724,164726,164728,164730],{"class":41,"line":118},[39,164725,4108],{"class":45},[39,164727,158758],{"class":53},[39,164729,27018],{"class":45},[39,164731,164732],{"class":53}," scores:\n",[39,164734,164735,164737,164739],{"class":41,"line":125},[39,164736,160282],{"class":53},[39,164738,10545],{"class":45},[39,164740,2700],{"class":53},[39,164742,164743],{"class":41,"line":132},[39,164744,122],{"emptyLinePlaceholder":121},[39,164746,164747,164750,164752,164755,164757,164759],{"class":41,"line":138},[39,164748,164749],{"class":53},"avg ",[39,164751,1117],{"class":45},[39,164753,164754],{"class":53}," total ",[39,164756,1845],{"class":45},[39,164758,8405],{"class":74},[39,164760,164761],{"class":53},"(scores)\n",[39,164763,164764,164766,164768,164770,164773,164775,164778,164780,164782,164784],{"class":41,"line":169},[39,164765,31390],{"class":74},[39,164767,54],{"class":53},[39,164769,1321],{"class":45},[39,164771,164772],{"class":237},"\"平均分:",[39,164774,2156],{"class":74},[39,164776,164777],{"class":53},"avg",[39,164779,158134],{"class":45},[39,164781,2206],{"class":74},[39,164783,1516],{"class":237},[39,164785,574],{"class":53},[14,164787,164789],{"id":164788},"_66-元组tuple","6.6 元组tuple",[19,164791,164792],{},"元组和列表类似，但不可修改。",[30,164794,164796],{"className":31353,"code":164795,"language":31355,"meta":35,"style":35},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[26,164797,164798,164815],{"__ignoreMap":35},[39,164799,164800,164803,164805,164807,164809,164811,164813],{"class":41,"line":42},[39,164801,164802],{"class":53},"point ",[39,164804,1117],{"class":45},[39,164806,2772],{"class":53},[39,164808,423],{"class":74},[39,164810,63],{"class":53},[39,164812,248],{"class":74},[39,164814,574],{"class":53},[39,164816,164817,164819,164821,164823,164825,164827,164829,164831,164833],{"class":41,"line":92},[39,164818,117289],{"class":53},[39,164820,1117],{"class":45},[39,164822,2772],{"class":53},[39,164824,150863],{"class":237},[39,164826,63],{"class":53},[39,164828,1911],{"class":74},[39,164830,63],{"class":53},[39,164832,70244],{"class":237},[39,164834,574],{"class":53},[19,164836,164837],{},"单元素元组必须加逗号：",[30,164839,164841],{"className":31353,"code":164840,"language":31355,"meta":35,"style":35},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[26,164842,164843,164857,164870,164874,164888],{"__ignoreMap":35},[39,164844,164845,164848,164850,164852,164854],{"class":41,"line":42},[39,164846,164847],{"class":53},"t1 ",[39,164849,1117],{"class":45},[39,164851,2772],{"class":53},[39,164853,423],{"class":74},[39,164855,164856],{"class":53},",)\n",[39,164858,164859,164862,164864,164866,164868],{"class":41,"line":92},[39,164860,164861],{"class":53},"t2 ",[39,164863,1117],{"class":45},[39,164865,2772],{"class":53},[39,164867,423],{"class":74},[39,164869,574],{"class":53},[39,164871,164872],{"class":41,"line":112},[39,164873,122],{"emptyLinePlaceholder":121},[39,164875,164876,164878,164880,164882,164885],{"class":41,"line":118},[39,164877,31390],{"class":74},[39,164879,54],{"class":53},[39,164881,104082],{"class":74},[39,164883,164884],{"class":53},"(t1))  ",[39,164886,164887],{"class":128},"# tuple\n",[39,164889,164890,164892,164894,164896,164899],{"class":41,"line":125},[39,164891,31390],{"class":74},[39,164893,54],{"class":53},[39,164895,104082],{"class":74},[39,164897,164898],{"class":53},"(t2))  ",[39,164900,164901],{"class":128},"# int\n",[19,164903,164904],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164906,164908],{"id":164907},"_67-字符串str","6.7 字符串str",[19,164910,164911],{},"字符串也是序列，可以索引、切片和遍历。",[30,164913,164915],{"className":31353,"code":164914,"language":31355,"meta":35,"style":35},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[26,164916,164917,164925,164929,164940,164952,164956,164967],{"__ignoreMap":35},[39,164918,164919,164921,164923],{"class":41,"line":42},[39,164920,157419],{"class":53},[39,164922,1117],{"class":45},[39,164924,160656],{"class":237},[39,164926,164927],{"class":41,"line":92},[39,164928,122],{"emptyLinePlaceholder":121},[39,164930,164931,164933,164936,164938],{"class":41,"line":112},[39,164932,31390],{"class":74},[39,164934,164935],{"class":53},"(text[",[39,164937,1457],{"class":74},[39,164939,5738],{"class":53},[39,164941,164942,164944,164946,164948,164950],{"class":41,"line":118},[39,164943,31390],{"class":74},[39,164945,164935],{"class":53},[39,164947,1793],{"class":45},[39,164949,1483],{"class":74},[39,164951,5738],{"class":53},[39,164953,164954],{"class":41,"line":125},[39,164955,122],{"emptyLinePlaceholder":121},[39,164957,164958,164960,164962,164964],{"class":41,"line":132},[39,164959,4108],{"class":45},[39,164961,160667],{"class":53},[39,164963,27018],{"class":45},[39,164965,164966],{"class":53}," text:\n",[39,164968,164969,164971],{"class":41,"line":138},[39,164970,32274],{"class":74},[39,164972,160678],{"class":53},[19,164974,164975],{},"字符串不可变：",[30,164977,164979],{"className":31353,"code":164978,"language":31355,"meta":35,"style":35},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[26,164980,164981,164989],{"__ignoreMap":35},[39,164982,164983,164985,164987],{"class":41,"line":42},[39,164984,157419],{"class":53},[39,164986,1117],{"class":45},[39,164988,160656],{"class":237},[39,164990,164991,164994,164996,164998,165000,165003],{"class":41,"line":92},[39,164992,164993],{"class":53},"text[",[39,164995,1457],{"class":74},[39,164997,5524],{"class":53},[39,164999,1117],{"class":45},[39,165001,165002],{"class":237}," \"P\"",[39,165004,165005],{"class":128},"  # 报错\n",[19,165007,165008],{},"如果要得到新字符串：",[30,165010,165012],{"className":31353,"code":165011,"language":31355,"meta":35,"style":35},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[26,165013,165014,165022,165040],{"__ignoreMap":35},[39,165015,165016,165018,165020],{"class":41,"line":42},[39,165017,157419],{"class":53},[39,165019,1117],{"class":45},[39,165021,160656],{"class":237},[39,165023,165024,165026,165028,165030,165032,165035,165037],{"class":41,"line":92},[39,165025,157419],{"class":53},[39,165027,1117],{"class":45},[39,165029,165002],{"class":237},[39,165031,46541],{"class":45},[39,165033,165034],{"class":53}," text[",[39,165036,1483],{"class":74},[39,165038,165039],{"class":53},":]\n",[39,165041,165042,165044],{"class":41,"line":112},[39,165043,31390],{"class":74},[39,165045,165046],{"class":53},"(text)\n",[14,165048,165050],{"id":165049},"_68-切片","6.8 切片",[19,165052,165053],{},"切片用于从序列中取一部分。",[30,165055,165057],{"className":31353,"code":165056,"language":31355,"meta":35,"style":35},"序列[开始:结束:步长]\n",[26,165058,165059],{"__ignoreMap":35},[39,165060,165061],{"class":41,"line":42},[39,165062,165056],{"class":53},[19,165064,165065],{},"结束位置不包含。",[30,165067,165069],{"className":31353,"code":165068,"language":31355,"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",[26,165070,165071,165108,165112,165131,165146,165160,165174],{"__ignoreMap":35},[39,165072,165073,165076,165078,165080,165082,165084,165086,165088,165090,165092,165094,165096,165098,165100,165102,165104,165106],{"class":41,"line":42},[39,165074,165075],{"class":53},"nums ",[39,165077,1117],{"class":45},[39,165079,53201],{"class":53},[39,165081,1457],{"class":74},[39,165083,63],{"class":53},[39,165085,1483],{"class":74},[39,165087,63],{"class":53},[39,165089,1345],{"class":74},[39,165091,63],{"class":53},[39,165093,1339],{"class":74},[39,165095,63],{"class":53},[39,165097,1558],{"class":74},[39,165099,63],{"class":53},[39,165101,1583],{"class":74},[39,165103,63],{"class":53},[39,165105,1608],{"class":74},[39,165107,34221],{"class":53},[39,165109,165110],{"class":41,"line":92},[39,165111,122],{"emptyLinePlaceholder":121},[39,165113,165114,165116,165119,165121,165123,165125,165128],{"class":41,"line":112},[39,165115,31390],{"class":74},[39,165117,165118],{"class":53},"(nums[",[39,165120,1483],{"class":74},[39,165122,2119],{"class":53},[39,165124,1558],{"class":74},[39,165126,165127],{"class":53},"])    ",[39,165129,165130],{"class":128},"# [1, 2, 3]\n",[39,165132,165133,165135,165138,165140,165143],{"class":41,"line":118},[39,165134,31390],{"class":74},[39,165136,165137],{"class":53},"(nums[:",[39,165139,1339],{"class":74},[39,165141,165142],{"class":53},"])     ",[39,165144,165145],{"class":128},"# [0, 1, 2]\n",[39,165147,165148,165150,165152,165154,165157],{"class":41,"line":125},[39,165149,31390],{"class":74},[39,165151,165118],{"class":53},[39,165153,1339],{"class":74},[39,165155,165156],{"class":53},":])     ",[39,165158,165159],{"class":128},"# [3, 4, 5, 6]\n",[39,165161,165162,165164,165167,165169,165171],{"class":41,"line":132},[39,165163,31390],{"class":74},[39,165165,165166],{"class":53},"(nums[::",[39,165168,1345],{"class":74},[39,165170,165127],{"class":53},[39,165172,165173],{"class":128},"# [0, 2, 4, 6]\n",[39,165175,165176,165178,165180,165182,165184,165187],{"class":41,"line":138},[39,165177,31390],{"class":74},[39,165179,165166],{"class":53},[39,165181,1793],{"class":45},[39,165183,1483],{"class":74},[39,165185,165186],{"class":53},"])   ",[39,165188,165189],{"class":128},"# 反转\n",[19,165191,165192],{},"字符串切片：",[30,165194,165196],{"className":31353,"code":165195,"language":31355,"meta":35,"style":35},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[26,165197,165198,165207,165221],{"__ignoreMap":35},[39,165199,165200,165202,165204],{"class":41,"line":42},[39,165201,157419],{"class":53},[39,165203,1117],{"class":45},[39,165205,165206],{"class":237}," \"abcdef\"\n",[39,165208,165209,165211,165213,165215,165217,165219],{"class":41,"line":92},[39,165210,31390],{"class":74},[39,165212,164935],{"class":53},[39,165214,1483],{"class":74},[39,165216,2119],{"class":53},[39,165218,1558],{"class":74},[39,165220,5738],{"class":53},[39,165222,165223,165225,165228,165230,165232],{"class":41,"line":112},[39,165224,31390],{"class":74},[39,165226,165227],{"class":53},"(text[::",[39,165229,1793],{"class":45},[39,165231,1483],{"class":74},[39,165233,5738],{"class":53},[14,165235,165237],{"id":165236},"_69-集合set","6.9 集合set",[19,165239,165240],{},"集合特点：",[328,165242,165243,165246,165249],{},[331,165244,165245],{},"无序。",[331,165247,165248],{},"元素不重复。",[331,165250,165251],{},"可以做交集、并集、差集。",[30,165253,165255],{"className":31353,"code":165254,"language":31355,"meta":35,"style":35},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[26,165256,165257,165285],{"__ignoreMap":35},[39,165258,165259,165261,165263,165265,165267,165269,165271,165273,165275,165277,165279,165281,165283],{"class":41,"line":42},[39,165260,165075],{"class":53},[39,165262,1117],{"class":45},[39,165264,5529],{"class":53},[39,165266,1483],{"class":74},[39,165268,63],{"class":53},[39,165270,1345],{"class":74},[39,165272,63],{"class":53},[39,165274,1339],{"class":74},[39,165276,63],{"class":53},[39,165278,1339],{"class":74},[39,165280,63],{"class":53},[39,165282,1558],{"class":74},[39,165284,115],{"class":53},[39,165286,165287,165289],{"class":41,"line":92},[39,165288,31390],{"class":74},[39,165290,165291],{"class":53},"(nums)\n",[19,165293,165294],{},"创建空集合：",[30,165296,165298],{"className":31353,"code":165297,"language":31355,"meta":35,"style":35},"s = set()\n",[26,165299,165300],{"__ignoreMap":35},[39,165301,165302,165304,165306,165308],{"class":41,"line":42},[39,165303,11645],{"class":53},[39,165305,1117],{"class":45},[39,165307,120697],{"class":74},[39,165309,537],{"class":53},[19,165311,10093,165312,165314],{},[26,165313,33434],{}," 是空字典，不是空集合。",[19,165316,165317],{},"集合常用操作：",[30,165319,165321],{"className":31353,"code":165320,"language":31355,"meta":35,"style":35},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[26,165322,165323,165343,165347,165356,165365,165374],{"__ignoreMap":35},[39,165324,165325,165327,165329,165331,165333,165335,165337,165339,165341],{"class":41,"line":42},[39,165326,11645],{"class":53},[39,165328,1117],{"class":45},[39,165330,5529],{"class":53},[39,165332,1483],{"class":74},[39,165334,63],{"class":53},[39,165336,1345],{"class":74},[39,165338,63],{"class":53},[39,165340,1339],{"class":74},[39,165342,115],{"class":53},[39,165344,165345],{"class":41,"line":92},[39,165346,122],{"emptyLinePlaceholder":121},[39,165348,165349,165352,165354],{"class":41,"line":112},[39,165350,165351],{"class":53},"s.add(",[39,165353,1558],{"class":74},[39,165355,574],{"class":53},[39,165357,165358,165361,165363],{"class":41,"line":118},[39,165359,165360],{"class":53},"s.remove(",[39,165362,1345],{"class":74},[39,165364,574],{"class":53},[39,165366,165367,165370,165372],{"class":41,"line":125},[39,165368,165369],{"class":53},"s.discard(",[39,165371,423],{"class":74},[39,165373,574],{"class":53},[39,165375,165376,165378,165380,165382],{"class":41,"line":132},[39,165377,31390],{"class":74},[39,165379,54],{"class":53},[39,165381,8432],{"class":74},[39,165383,165384],{"class":53},"(s))\n",[19,165386,165387],{},"交并差：",[30,165389,165391],{"className":31353,"code":165390,"language":31355,"meta":35,"style":35},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[26,165392,165393,165413,165433,165437,165452,165465],{"__ignoreMap":35},[39,165394,165395,165397,165399,165401,165403,165405,165407,165409,165411],{"class":41,"line":42},[39,165396,11981],{"class":53},[39,165398,1117],{"class":45},[39,165400,5529],{"class":53},[39,165402,1483],{"class":74},[39,165404,63],{"class":53},[39,165406,1345],{"class":74},[39,165408,63],{"class":53},[39,165410,1339],{"class":74},[39,165412,115],{"class":53},[39,165414,165415,165417,165419,165421,165423,165425,165427,165429,165431],{"class":41,"line":92},[39,165416,12007],{"class":53},[39,165418,1117],{"class":45},[39,165420,5529],{"class":53},[39,165422,1339],{"class":74},[39,165424,63],{"class":53},[39,165426,1558],{"class":74},[39,165428,63],{"class":53},[39,165430,1583],{"class":74},[39,165432,115],{"class":53},[39,165434,165435],{"class":41,"line":112},[39,165436,122],{"emptyLinePlaceholder":121},[39,165438,165439,165441,165444,165446,165449],{"class":41,"line":118},[39,165440,31390],{"class":74},[39,165442,165443],{"class":53},"(a ",[39,165445,1617],{"class":45},[39,165447,165448],{"class":53}," b)  ",[39,165450,165451],{"class":128},"# 交集\n",[39,165453,165454,165456,165458,165460,165462],{"class":41,"line":125},[39,165455,31390],{"class":74},[39,165457,165443],{"class":53},[39,165459,2181],{"class":45},[39,165461,165448],{"class":53},[39,165463,165464],{"class":128},"# 并集\n",[39,165466,165467,165469,165471,165473,165475],{"class":41,"line":132},[39,165468,31390],{"class":74},[39,165470,165443],{"class":53},[39,165472,1793],{"class":45},[39,165474,165448],{"class":53},[39,165476,165477],{"class":128},"# 差集\n",[14,165479,165481],{"id":165480},"_610-字典dict","6.10 字典dict",[19,165483,165484],{},"字典通过 key-value 保存数据。",[30,165486,165488],{"className":31353,"code":165487,"language":31355,"meta":35,"style":35},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[26,165489,165490,165498,165508,165519,165529],{"__ignoreMap":35},[39,165491,165492,165494,165496],{"class":41,"line":42},[39,165493,150456],{"class":53},[39,165495,1117],{"class":45},[39,165497,16545],{"class":53},[39,165499,165500,165502,165504,165506],{"class":41,"line":92},[39,165501,147995],{"class":237},[39,165503,52412],{"class":53},[39,165505,150863],{"class":237},[39,165507,32441],{"class":53},[39,165509,165510,165513,165515,165517],{"class":41,"line":112},[39,165511,165512],{"class":237},"    \"age\"",[39,165514,52412],{"class":53},[39,165516,1911],{"class":74},[39,165518,32441],{"class":53},[39,165520,165521,165524,165526],{"class":41,"line":118},[39,165522,165523],{"class":237},"    \"score\"",[39,165525,52412],{"class":53},[39,165527,165528],{"class":74},"95\n",[39,165530,165531],{"class":41,"line":125},[39,165532,115],{"class":53},[19,165534,165535],{},"获取值：",[30,165537,165539],{"className":31353,"code":165538,"language":31355,"meta":35,"style":35},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[26,165540,165541,165552],{"__ignoreMap":35},[39,165542,165543,165545,165548,165550],{"class":41,"line":42},[39,165544,31390],{"class":74},[39,165546,165547],{"class":53},"(student[",[39,165549,63654],{"class":237},[39,165551,5738],{"class":53},[39,165553,165554,165556,165559,165561],{"class":41,"line":92},[39,165555,31390],{"class":74},[39,165557,165558],{"class":53},"(student.get(",[39,165560,63654],{"class":237},[39,165562,31472],{"class":53},[19,165564,16361],{},[30,165566,165568],{"className":31353,"code":165567,"language":31355,"meta":35,"style":35},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[26,165569,165570,165583],{"__ignoreMap":35},[39,165571,165572,165574,165577,165580],{"class":41,"line":42},[39,165573,153834],{"class":53},[39,165575,165576],{"class":237},"\"address\"",[39,165578,165579],{"class":53},"]     ",[39,165581,165582],{"class":128},"# key不存在会报错\n",[39,165584,165585,165588,165590,165592],{"class":41,"line":92},[39,165586,165587],{"class":53},"student.get(",[39,165589,165576],{"class":237},[39,165591,255],{"class":53},[39,165593,165594],{"class":128},"# key不存在返回None\n",[19,165596,165597],{},"设置默认值：",[30,165599,165601],{"className":31353,"code":165600,"language":31355,"meta":35,"style":35},"print(student.get(\"address\", \"未知\"))\n",[26,165602,165603],{"__ignoreMap":35},[39,165604,165605,165607,165609,165611,165613,165616],{"class":41,"line":42},[39,165606,31390],{"class":74},[39,165608,165558],{"class":53},[39,165610,165576],{"class":237},[39,165612,63],{"class":53},[39,165614,165615],{"class":237},"\"未知\"",[39,165617,31472],{"class":53},[19,165619,165620],{},"新增和修改：",[30,165622,165624],{"className":31353,"code":165623,"language":31355,"meta":35,"style":35},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[26,165625,165626,165639],{"__ignoreMap":35},[39,165627,165628,165630,165632,165634,165636],{"class":41,"line":42},[39,165629,153834],{"class":53},[39,165631,70099],{"class":237},[39,165633,5524],{"class":53},[39,165635,1117],{"class":45},[39,165637,165638],{"class":74}," 19\n",[39,165640,165641,165643,165645,165647,165649],{"class":41,"line":92},[39,165642,153834],{"class":53},[39,165644,165576],{"class":237},[39,165646,5524],{"class":53},[39,165648,1117],{"class":45},[39,165650,165651],{"class":237}," \"北京\"\n",[19,165653,165654],{},"删除：",[30,165656,165658],{"className":31353,"code":165657,"language":31355,"meta":35,"style":35},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[26,165659,165660,165673,165683],{"__ignoreMap":35},[39,165661,165662,165664,165666,165669,165671],{"class":41,"line":42},[39,165663,156333],{"class":53},[39,165665,1117],{"class":45},[39,165667,165668],{"class":53}," student.pop(",[39,165670,152447],{"class":237},[39,165672,574],{"class":53},[39,165674,165675,165677,165679,165681],{"class":41,"line":92},[39,165676,164358],{"class":45},[39,165678,153124],{"class":53},[39,165680,70099],{"class":237},[39,165682,34221],{"class":53},[39,165684,165685],{"class":41,"line":112},[39,165686,165687],{"class":53},"student.clear()\n",[14,165689,165691],{"id":165690},"_611-字典遍历","6.11 字典遍历",[19,165693,165694],{},"遍历 key：",[30,165696,165698],{"className":31353,"code":165697,"language":31355,"meta":35,"style":35},"for key in student:\n    print(key, student[key])\n",[26,165699,165700,165712],{"__ignoreMap":35},[39,165701,165702,165704,165707,165709],{"class":41,"line":42},[39,165703,4108],{"class":45},[39,165705,165706],{"class":53}," key ",[39,165708,27018],{"class":45},[39,165710,165711],{"class":53}," student:\n",[39,165713,165714,165716],{"class":41,"line":92},[39,165715,32274],{"class":74},[39,165717,165718],{"class":53},"(key, student[key])\n",[19,165720,165721],{},"遍历 value：",[30,165723,165725],{"className":31353,"code":165724,"language":31355,"meta":35,"style":35},"for value in student.values():\n    print(value)\n",[26,165726,165727,165739],{"__ignoreMap":35},[39,165728,165729,165731,165734,165736],{"class":41,"line":42},[39,165730,4108],{"class":45},[39,165732,165733],{"class":53}," value ",[39,165735,27018],{"class":45},[39,165737,165738],{"class":53}," student.values():\n",[39,165740,165741,165743],{"class":41,"line":92},[39,165742,32274],{"class":74},[39,165744,165745],{"class":53},"(value)\n",[19,165747,165748],{},"遍历 key 和 value：",[30,165750,165752],{"className":31353,"code":165751,"language":31355,"meta":35,"style":35},"for key, value in student.items():\n    print(key, value)\n",[26,165753,165754,165766],{"__ignoreMap":35},[39,165755,165756,165758,165761,165763],{"class":41,"line":42},[39,165757,4108],{"class":45},[39,165759,165760],{"class":53}," key, value ",[39,165762,27018],{"class":45},[39,165764,165765],{"class":53}," student.items():\n",[39,165767,165768,165770],{"class":41,"line":92},[39,165769,32274],{"class":74},[39,165771,165772],{"class":53},"(key, value)\n",[14,165774,165776],{"id":165775},"_612-嵌套容器","6.12 嵌套容器",[19,165778,165779],{},"列表中保存字典，是项目中最常见的结构之一。",[30,165781,165783],{"className":31353,"code":165782,"language":31355,"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",[26,165784,165785,165793,165821,165849,165877,165881,165885,165895],{"__ignoreMap":35},[39,165786,165787,165789,165791],{"class":41,"line":42},[39,165788,160691],{"class":53},[39,165790,1117],{"class":45},[39,165792,56422],{"class":53},[39,165794,165795,165797,165799,165801,165803,165805,165807,165809,165811,165813,165815,165817,165819],{"class":41,"line":92},[39,165796,149360],{"class":53},[39,165798,63654],{"class":237},[39,165800,52412],{"class":53},[39,165802,150863],{"class":237},[39,165804,63],{"class":53},[39,165806,70099],{"class":237},[39,165808,52412],{"class":53},[39,165810,1911],{"class":74},[39,165812,63],{"class":53},[39,165814,152447],{"class":237},[39,165816,52412],{"class":53},[39,165818,2249],{"class":74},[39,165820,6011],{"class":53},[39,165822,165823,165825,165827,165829,165831,165833,165835,165837,165839,165841,165843,165845,165847],{"class":41,"line":112},[39,165824,149360],{"class":53},[39,165826,63654],{"class":237},[39,165828,52412],{"class":53},[39,165830,151911],{"class":237},[39,165832,63],{"class":53},[39,165834,70099],{"class":237},[39,165836,52412],{"class":53},[39,165838,1886],{"class":74},[39,165840,63],{"class":53},[39,165842,152447],{"class":237},[39,165844,52412],{"class":53},[39,165846,2071],{"class":74},[39,165848,6011],{"class":53},[39,165850,165851,165853,165855,165857,165859,165861,165863,165865,165867,165869,165871,165873,165875],{"class":41,"line":118},[39,165852,149360],{"class":53},[39,165854,63654],{"class":237},[39,165856,52412],{"class":53},[39,165858,160706],{"class":237},[39,165860,63],{"class":53},[39,165862,70099],{"class":237},[39,165864,52412],{"class":53},[39,165866,1936],{"class":74},[39,165868,63],{"class":53},[39,165870,152447],{"class":237},[39,165872,52412],{"class":53},[39,165874,1669],{"class":74},[39,165876,6011],{"class":53},[39,165878,165879],{"class":41,"line":125},[39,165880,34221],{"class":53},[39,165882,165883],{"class":41,"line":132},[39,165884,122],{"emptyLinePlaceholder":121},[39,165886,165887,165889,165891,165893],{"class":41,"line":138},[39,165888,4108],{"class":45},[39,165890,153112],{"class":53},[39,165892,27018],{"class":45},[39,165894,153117],{"class":53},[39,165896,165897,165899,165901,165903,165906,165908],{"class":41,"line":169},[39,165898,32274],{"class":74},[39,165900,165547],{"class":53},[39,165902,63654],{"class":237},[39,165904,165905],{"class":53},"], student[",[39,165907,152447],{"class":237},[39,165909,5738],{"class":53},[19,165911,165912],{},"统计平均分：",[30,165914,165916],{"className":31353,"code":165915,"language":31355,"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",[26,165917,165918,165926,165930,165940,165952,165956,165971],{"__ignoreMap":35},[39,165919,165920,165922,165924],{"class":41,"line":42},[39,165921,158235],{"class":53},[39,165923,1117],{"class":45},[39,165925,48308],{"class":74},[39,165927,165928],{"class":41,"line":92},[39,165929,122],{"emptyLinePlaceholder":121},[39,165931,165932,165934,165936,165938],{"class":41,"line":112},[39,165933,4108],{"class":45},[39,165935,153112],{"class":53},[39,165937,27018],{"class":45},[39,165939,153117],{"class":53},[39,165941,165942,165944,165946,165948,165950],{"class":41,"line":118},[39,165943,160282],{"class":53},[39,165945,10545],{"class":45},[39,165947,153124],{"class":53},[39,165949,152447],{"class":237},[39,165951,34221],{"class":53},[39,165953,165954],{"class":41,"line":125},[39,165955,122],{"emptyLinePlaceholder":121},[39,165957,165958,165960,165962,165964,165966,165968],{"class":41,"line":132},[39,165959,164749],{"class":53},[39,165961,1117],{"class":45},[39,165963,164754],{"class":53},[39,165965,1845],{"class":45},[39,165967,8405],{"class":74},[39,165969,165970],{"class":53},"(students)\n",[39,165972,165973,165975,165977,165979,165981,165983,165985,165987,165989,165991],{"class":41,"line":138},[39,165974,31390],{"class":74},[39,165976,54],{"class":53},[39,165978,1321],{"class":45},[39,165980,164772],{"class":237},[39,165982,2156],{"class":74},[39,165984,164777],{"class":53},[39,165986,158134],{"class":45},[39,165988,2206],{"class":74},[39,165990,1516],{"class":237},[39,165992,574],{"class":53},[19,165994,165995],{},"查找学生：",[30,165997,165999],{"className":31353,"code":165998,"language":31355,"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",[26,166000,166001,166016,166020,166030,166044,166050,166054,166060],{"__ignoreMap":35},[39,166002,166003,166005,166007,166009,166011,166014],{"class":41,"line":42},[39,166004,112553],{"class":53},[39,166006,1117],{"class":45},[39,166008,61580],{"class":74},[39,166010,54],{"class":53},[39,166012,166013],{"class":237},"\"请输入学生姓名:\"",[39,166015,574],{"class":53},[39,166017,166018],{"class":41,"line":92},[39,166019,122],{"emptyLinePlaceholder":121},[39,166021,166022,166024,166026,166028],{"class":41,"line":112},[39,166023,4108],{"class":45},[39,166025,153112],{"class":53},[39,166027,27018],{"class":45},[39,166029,153117],{"class":53},[39,166031,166032,166034,166036,166038,166040,166042],{"class":41,"line":118},[39,166033,4184],{"class":45},[39,166035,153124],{"class":53},[39,166037,63654],{"class":237},[39,166039,5524],{"class":53},[39,166041,4032],{"class":45},[39,166043,161407],{"class":53},[39,166045,166046,166048],{"class":41,"line":125},[39,166047,33426],{"class":74},[39,166049,151017],{"class":53},[39,166051,166052],{"class":41,"line":132},[39,166053,32602],{"class":45},[39,166055,166056,166058],{"class":41,"line":138},[39,166057,2811],{"class":45},[39,166059,4822],{"class":53},[39,166061,166062,166064,166066,166069],{"class":41,"line":169},[39,166063,32274],{"class":74},[39,166065,54],{"class":53},[39,166067,166068],{"class":237},"\"没有找到\"",[39,166070,574],{"class":53},[14,166072,166074],{"id":166073},"_613-容器通用操作","6.13 容器通用操作",[19,166076,166077],{},"长度：",[30,166079,166081],{"className":31353,"code":166080,"language":31355,"meta":35,"style":35},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[26,166082,166083,166102,166112],{"__ignoreMap":35},[39,166084,166085,166087,166090,166092,166094,166096,166098,166100],{"class":41,"line":42},[39,166086,8432],{"class":74},[39,166088,166089],{"class":53},"([",[39,166091,1483],{"class":74},[39,166093,63],{"class":53},[39,166095,1345],{"class":74},[39,166097,63],{"class":53},[39,166099,1339],{"class":74},[39,166101,5738],{"class":53},[39,166103,166104,166106,166108,166110],{"class":41,"line":92},[39,166105,8432],{"class":74},[39,166107,54],{"class":53},[39,166109,156855],{"class":237},[39,166111,574],{"class":53},[39,166113,166114,166116,166119,166121,166123,166125],{"class":41,"line":112},[39,166115,8432],{"class":74},[39,166117,166118],{"class":53},"({",[39,166120,63654],{"class":237},[39,166122,52412],{"class":53},[39,166124,150863],{"class":237},[39,166126,166127],{"class":53},"})\n",[19,166129,166130],{},"最大最小：",[30,166132,166134],{"className":31353,"code":166133,"language":31355,"meta":35,"style":35},"max([1, 2, 3])\nmin([1, 2, 3])\n",[26,166135,166136,166154],{"__ignoreMap":35},[39,166137,166138,166140,166142,166144,166146,166148,166150,166152],{"class":41,"line":42},[39,166139,7091],{"class":74},[39,166141,166089],{"class":53},[39,166143,1483],{"class":74},[39,166145,63],{"class":53},[39,166147,1345],{"class":74},[39,166149,63],{"class":53},[39,166151,1339],{"class":74},[39,166153,5738],{"class":53},[39,166155,166156,166159,166161,166163,166165,166167,166169,166171],{"class":41,"line":92},[39,166157,166158],{"class":74},"min",[39,166160,166089],{"class":53},[39,166162,1483],{"class":74},[39,166164,63],{"class":53},[39,166166,1345],{"class":74},[39,166168,63],{"class":53},[39,166170,1339],{"class":74},[39,166172,5738],{"class":53},[19,166174,166175],{},"求和：",[30,166177,166179],{"className":31353,"code":166178,"language":31355,"meta":35,"style":35},"sum([1, 2, 3])\n",[26,166180,166181],{"__ignoreMap":35},[39,166182,166183,166186,166188,166190,166192,166194,166196,166198],{"class":41,"line":42},[39,166184,166185],{"class":74},"sum",[39,166187,166089],{"class":53},[39,166189,1483],{"class":74},[39,166191,63],{"class":53},[39,166193,1345],{"class":74},[39,166195,63],{"class":53},[39,166197,1339],{"class":74},[39,166199,5738],{"class":53},[19,166201,164446],{},[30,166203,166205],{"className":31353,"code":166204,"language":31355,"meta":35,"style":35},"sorted([3, 1, 2])\n",[26,166206,166207],{"__ignoreMap":35},[39,166208,166209,166212,166214,166216,166218,166220,166222,166224],{"class":41,"line":42},[39,166210,166211],{"class":74},"sorted",[39,166213,166089],{"class":53},[39,166215,1339],{"class":74},[39,166217,63],{"class":53},[39,166219,1483],{"class":74},[39,166221,63],{"class":53},[39,166223,1345],{"class":74},[39,166225,5738],{"class":53},[19,166227,166228],{},"类型转换：",[30,166230,166232],{"className":31353,"code":166231,"language":31355,"meta":35,"style":35},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[26,166233,166234,166244,166262],{"__ignoreMap":35},[39,166235,166236,166238,166240,166242],{"class":41,"line":42},[39,166237,155045],{"class":74},[39,166239,54],{"class":53},[39,166241,156855],{"class":237},[39,166243,574],{"class":53},[39,166245,166246,166248,166250,166252,166254,166256,166258,166260],{"class":41,"line":92},[39,166247,156240],{"class":74},[39,166249,166089],{"class":53},[39,166251,1483],{"class":74},[39,166253,63],{"class":53},[39,166255,1345],{"class":74},[39,166257,63],{"class":53},[39,166259,1339],{"class":74},[39,166261,5738],{"class":53},[39,166263,166264,166266,166268,166270,166272,166274,166276,166278,166280,166282],{"class":41,"line":112},[39,166265,156265],{"class":74},[39,166267,166089],{"class":53},[39,166269,1483],{"class":74},[39,166271,63],{"class":53},[39,166273,1483],{"class":74},[39,166275,63],{"class":53},[39,166277,1345],{"class":74},[39,166279,63],{"class":53},[39,166281,1339],{"class":74},[39,166283,5738],{"class":53},[19,166285,166286],{},"成员判断：",[30,166288,166290],{"className":31353,"code":166289,"language":31355,"meta":35,"style":35},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[26,166291,166292,166309,166333],{"__ignoreMap":35},[39,166293,166294,166296,166298,166301,166304,166307],{"class":41,"line":42},[39,166295,31390],{"class":74},[39,166297,54],{"class":53},[39,166299,166300],{"class":237},"\"a\"",[39,166302,166303],{"class":45}," in",[39,166305,166306],{"class":237}," \"abc\"",[39,166308,574],{"class":53},[39,166310,166311,166313,166315,166317,166319,166321,166323,166325,166327,166329,166331],{"class":41,"line":92},[39,166312,31390],{"class":74},[39,166314,54],{"class":53},[39,166316,1483],{"class":74},[39,166318,166303],{"class":45},[39,166320,53201],{"class":53},[39,166322,1483],{"class":74},[39,166324,63],{"class":53},[39,166326,1345],{"class":74},[39,166328,63],{"class":53},[39,166330,1339],{"class":74},[39,166332,5738],{"class":53},[39,166334,166335,166337,166339,166341,166343,166345,166347,166349,166351],{"class":41,"line":112},[39,166336,31390],{"class":74},[39,166338,54],{"class":53},[39,166340,63654],{"class":237},[39,166342,166303],{"class":45},[39,166344,5529],{"class":53},[39,166346,63654],{"class":237},[39,166348,52412],{"class":53},[39,166350,150863],{"class":237},[39,166352,166127],{"class":53},[14,166354,166356],{"id":166355},"_614-推导式","6.14 推导式",[19,166358,166359],{},"推导式用于快速生成容器。",[19,166361,166362],{},"列表推导式：",[30,166364,166366],{"className":31353,"code":166365,"language":31355,"meta":35,"style":35},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[26,166367,166368,166395],{"__ignoreMap":35},[39,166369,166370,166372,166374,166377,166379,166381,166383,166385,166387,166389,166391,166393],{"class":41,"line":42},[39,166371,165075],{"class":53},[39,166373,1117],{"class":45},[39,166375,166376],{"class":53}," [i ",[39,166378,4108],{"class":45},[39,166380,10506],{"class":53},[39,166382,27018],{"class":45},[39,166384,33418],{"class":74},[39,166386,54],{"class":53},[39,166388,1483],{"class":74},[39,166390,63],{"class":53},[39,166392,1608],{"class":74},[39,166394,98275],{"class":53},[39,166396,166397,166399],{"class":41,"line":92},[39,166398,31390],{"class":74},[39,166400,165291],{"class":53},[19,166402,166403],{},"带条件：",[30,166405,166407],{"className":31353,"code":166406,"language":31355,"meta":35,"style":35},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[26,166408,166409,166450],{"__ignoreMap":35},[39,166410,166411,166414,166416,166418,166420,166422,166424,166426,166428,166430,166432,166434,166436,166438,166440,166442,166444,166446,166448],{"class":41,"line":42},[39,166412,166413],{"class":53},"even_nums ",[39,166415,1117],{"class":45},[39,166417,166376],{"class":53},[39,166419,4108],{"class":45},[39,166421,10506],{"class":53},[39,166423,27018],{"class":45},[39,166425,33418],{"class":74},[39,166427,54],{"class":53},[39,166429,1483],{"class":74},[39,166431,63],{"class":53},[39,166433,1601],{"class":74},[39,166435,255],{"class":53},[39,166437,2654],{"class":45},[39,166439,10506],{"class":53},[39,166441,1592],{"class":45},[39,166443,15728],{"class":74},[39,166445,102534],{"class":45},[39,166447,315],{"class":74},[39,166449,34221],{"class":53},[39,166451,166452,166454],{"class":41,"line":92},[39,166453,31390],{"class":74},[39,166455,166456],{"class":53},"(even_nums)\n",[19,166458,166459],{},"字典推导式：",[30,166461,166463],{"className":31353,"code":166462,"language":31355,"meta":35,"style":35},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[26,166464,166465,166499],{"__ignoreMap":35},[39,166466,166467,166470,166472,166475,166477,166479,166482,166484,166486,166488,166490,166492,166494,166496],{"class":41,"line":42},[39,166468,166469],{"class":53},"squares ",[39,166471,1117],{"class":45},[39,166473,166474],{"class":53}," {i: i ",[39,166476,11726],{"class":45},[39,166478,15728],{"class":74},[39,166480,166481],{"class":45}," for",[39,166483,10506],{"class":53},[39,166485,27018],{"class":45},[39,166487,33418],{"class":74},[39,166489,54],{"class":53},[39,166491,1483],{"class":74},[39,166493,63],{"class":53},[39,166495,1608],{"class":74},[39,166497,166498],{"class":53},")}\n",[39,166500,166501,166503],{"class":41,"line":92},[39,166502,31390],{"class":74},[39,166504,166505],{"class":53},"(squares)\n",[19,166507,166508],{},"集合推导式：",[30,166510,166512],{"className":31353,"code":166511,"language":31355,"meta":35,"style":35},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[26,166513,166514,166535],{"__ignoreMap":35},[39,166515,166516,166519,166521,166524,166526,166528,166530,166533],{"class":41,"line":42},[39,166517,166518],{"class":53},"chars ",[39,166520,1117],{"class":45},[39,166522,166523],{"class":53}," {ch ",[39,166525,4108],{"class":45},[39,166527,160667],{"class":53},[39,166529,27018],{"class":45},[39,166531,166532],{"class":237}," \"hello\"",[39,166534,115],{"class":53},[39,166536,166537,166539],{"class":41,"line":92},[39,166538,31390],{"class":74},[39,166540,166541],{"class":53},"(chars)\n",[19,166543,166544],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166546,166548],{"id":166547},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[30,166550,166552],{"className":31353,"code":166551,"language":31355,"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",[26,166553,166554,166562,166582,166602,166622,166642,166646,166650,166658,166672,166681,166685,166695,166707,166711,166731,166740,166744,166760,166765,166769,166783,166787,166809,166845],{"__ignoreMap":35},[39,166555,166556,166558,166560],{"class":41,"line":42},[39,166557,160691],{"class":53},[39,166559,1117],{"class":45},[39,166561,56422],{"class":53},[39,166563,166564,166566,166568,166570,166572,166574,166576,166578,166580],{"class":41,"line":92},[39,166565,149360],{"class":53},[39,166567,63654],{"class":237},[39,166569,52412],{"class":53},[39,166571,150863],{"class":237},[39,166573,63],{"class":53},[39,166575,152447],{"class":237},[39,166577,52412],{"class":53},[39,166579,2249],{"class":74},[39,166581,6011],{"class":53},[39,166583,166584,166586,166588,166590,166592,166594,166596,166598,166600],{"class":41,"line":112},[39,166585,149360],{"class":53},[39,166587,63654],{"class":237},[39,166589,52412],{"class":53},[39,166591,151911],{"class":237},[39,166593,63],{"class":53},[39,166595,152447],{"class":237},[39,166597,52412],{"class":53},[39,166599,2071],{"class":74},[39,166601,6011],{"class":53},[39,166603,166604,166606,166608,166610,166612,166614,166616,166618,166620],{"class":41,"line":118},[39,166605,149360],{"class":53},[39,166607,63654],{"class":237},[39,166609,52412],{"class":53},[39,166611,160706],{"class":237},[39,166613,63],{"class":53},[39,166615,152447],{"class":237},[39,166617,52412],{"class":53},[39,166619,1669],{"class":74},[39,166621,6011],{"class":53},[39,166623,166624,166626,166628,166630,166632,166634,166636,166638,166640],{"class":41,"line":125},[39,166625,149360],{"class":53},[39,166627,63654],{"class":237},[39,166629,52412],{"class":53},[39,166631,164285],{"class":237},[39,166633,63],{"class":53},[39,166635,152447],{"class":237},[39,166637,52412],{"class":53},[39,166639,2142],{"class":74},[39,166641,6011],{"class":53},[39,166643,166644],{"class":41,"line":132},[39,166645,34221],{"class":53},[39,166647,166648],{"class":41,"line":138},[39,166649,122],{"emptyLinePlaceholder":121},[39,166651,166652,166654,166656],{"class":41,"line":169},[39,166653,158235],{"class":53},[39,166655,1117],{"class":45},[39,166657,48308],{"class":74},[39,166659,166660,166663,166665,166668,166670],{"class":41,"line":190},[39,166661,166662],{"class":53},"max_student ",[39,166664,1117],{"class":45},[39,166666,166667],{"class":53}," students[",[39,166669,1457],{"class":74},[39,166671,34221],{"class":53},[39,166673,166674,166677,166679],{"class":41,"line":202},[39,166675,166676],{"class":53},"passed ",[39,166678,1117],{"class":45},[39,166680,52813],{"class":53},[39,166682,166683],{"class":41,"line":207},[39,166684,122],{"emptyLinePlaceholder":121},[39,166686,166687,166689,166691,166693],{"class":41,"line":212},[39,166688,4108],{"class":45},[39,166690,153112],{"class":53},[39,166692,27018],{"class":45},[39,166694,153117],{"class":53},[39,166696,166697,166699,166701,166703,166705],{"class":41,"line":223},[39,166698,160282],{"class":53},[39,166700,10545],{"class":45},[39,166702,153124],{"class":53},[39,166704,152447],{"class":237},[39,166706,34221],{"class":53},[39,166708,166709],{"class":41,"line":228},[39,166710,122],{"emptyLinePlaceholder":121},[39,166712,166713,166715,166717,166719,166721,166723,166726,166728],{"class":41,"line":263},[39,166714,4184],{"class":45},[39,166716,153124],{"class":53},[39,166718,152447],{"class":237},[39,166720,5524],{"class":53},[39,166722,2220],{"class":45},[39,166724,166725],{"class":53}," max_student[",[39,166727,152447],{"class":237},[39,166729,166730],{"class":53},"]:\n",[39,166732,166733,166736,166738],{"class":41,"line":287},[39,166734,166735],{"class":53},"        max_student ",[39,166737,1117],{"class":45},[39,166739,153140],{"class":53},[39,166741,166742],{"class":41,"line":292},[39,166743,122],{"emptyLinePlaceholder":121},[39,166745,166746,166748,166750,166752,166754,166756,166758],{"class":41,"line":305},[39,166747,4184],{"class":45},[39,166749,153124],{"class":53},[39,166751,152447],{"class":237},[39,166753,5524],{"class":53},[39,166755,2820],{"class":45},[39,166757,158812],{"class":74},[39,166759,4822],{"class":53},[39,166761,166762],{"class":41,"line":310},[39,166763,166764],{"class":53},"        passed.append(student)\n",[39,166766,166767],{"class":41,"line":321},[39,166768,122],{"emptyLinePlaceholder":121},[39,166770,166771,166773,166775,166777,166779,166781],{"class":41,"line":713},[39,166772,164749],{"class":53},[39,166774,1117],{"class":45},[39,166776,164754],{"class":53},[39,166778,1845],{"class":45},[39,166780,8405],{"class":74},[39,166782,165970],{"class":53},[39,166784,166785],{"class":41,"line":718},[39,166786,122],{"emptyLinePlaceholder":121},[39,166788,166789,166791,166793,166795,166797,166799,166801,166803,166805,166807],{"class":41,"line":723},[39,166790,31390],{"class":74},[39,166792,54],{"class":53},[39,166794,1321],{"class":45},[39,166796,164772],{"class":237},[39,166798,2156],{"class":74},[39,166800,164777],{"class":53},[39,166802,158134],{"class":45},[39,166804,2206],{"class":74},[39,166806,1516],{"class":237},[39,166808,574],{"class":53},[39,166810,166811,166813,166815,166817,166820,166822,166825,166827,166829,166831,166833,166835,166837,166839,166841,166843],{"class":41,"line":729},[39,166812,31390],{"class":74},[39,166814,54],{"class":53},[39,166816,1321],{"class":45},[39,166818,166819],{"class":237},"\"最高分学生:",[39,166821,2156],{"class":74},[39,166823,166824],{"class":53},"max_student[",[39,166826,153857],{"class":237},[39,166828,2200],{"class":53},[39,166830,2206],{"class":74},[39,166832,5529],{"class":74},[39,166834,166824],{"class":53},[39,166836,153895],{"class":237},[39,166838,2200],{"class":53},[39,166840,2206],{"class":74},[39,166842,1516],{"class":237},[39,166844,574],{"class":53},[39,166846,166847,166849,166851,166853,166856,166859,166862,166864,166866],{"class":41,"line":735},[39,166848,31390],{"class":74},[39,166850,54],{"class":53},[39,166852,1321],{"class":45},[39,166854,166855],{"class":237},"\"及格人数:",[39,166857,166858],{"class":74},"{len",[39,166860,166861],{"class":53},"(passed)",[39,166863,2206],{"class":74},[39,166865,1516],{"class":237},[39,166867,574],{"class":53},[14,166869,166871],{"id":166870},"_616-易错点","6.16 易错点",[328,166873,166874,166877,166880,166883,166889,166898],{},[331,166875,166876],{},"列表可变，元组和字符串不可变。",[331,166878,166879],{},"切片结束位置不包含。",[331,166881,166882],{},"字典通过 key 取值，不是通过索引。",[331,166884,166885,166886,29360],{},"空集合要用 ",[26,166887,166888],{},"set()",[331,166890,105341,166891,166894,166895,29360],{},[26,166892,166893],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[26,166896,166897],{},"get()",[331,166899,166900],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166902,166904],{"id":166903},"_617-本章练习","6.17 本章练习",[328,166906,166907,166910,166913,166916,166919],{},[331,166908,166909],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[331,166911,166912],{},"输入一句话，统计每个字符出现次数。",[331,166914,166915],{},"使用集合去除列表中的重复元素。",[331,166917,166918],{},"使用字典保存一个学生的信息，并实现修改成绩。",[331,166920,166921],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1192,166923,166924],{},"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":92,"depth":92,"links":166926},[166927,166928,166929,166930,166931,166932,166933,166934,166935,166936,166937,166938,166939,166940,166941,166942,166943],{"id":163907,"depth":92,"text":163908},{"id":164024,"depth":92,"text":164025},{"id":164114,"depth":92,"text":164115},{"id":164238,"depth":92,"text":164239},{"id":164601,"depth":92,"text":164602},{"id":164788,"depth":92,"text":164789},{"id":164907,"depth":92,"text":164908},{"id":165049,"depth":92,"text":165050},{"id":165236,"depth":92,"text":165237},{"id":165480,"depth":92,"text":165481},{"id":165690,"depth":92,"text":165691},{"id":165775,"depth":92,"text":165776},{"id":166073,"depth":92,"text":166074},{"id":166355,"depth":92,"text":166356},{"id":166547,"depth":92,"text":166548},{"id":166870,"depth":92,"text":166871},{"id":166903,"depth":92,"text":166904},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163899,"description":24350},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166950,"title":166951,"body":166952,"description":24350,"extension":1203,"meta":169124,"navigation":121,"path":169125,"seo":169126,"stem":169127,"__hash__":169128},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166953,"toc":169099},[166954,166957,166961,166964,167044,167047,167068,167071,167075,167078,167140,167143,167160,167164,167167,167212,167214,167222,167226,167229,167311,167314,167317,167342,167345,167368,167372,167375,167377,167439,167442,167444,167495,167499,167503,167509,167614,167618,167624,167695,167699,167702,167770,167773,167853,167857,167863,167899,167902,167905,168015,168021,168025,168028,168100,168103,168107,168111,168116,168178,168182,168187,168255,168259,168264,168380,168384,168387,168467,168470,168474,168477,168581,168583,168598,168601,168605,168743,168751,168755,168757,168768,168770,169028,169032,169064,169068,169096],[10,166955,166951],{"id":166956},"_7-函数进阶",[14,166958,166960],{"id":166959},"_71-多返回值","7.1 多返回值",[19,166962,166963],{},"Python 函数可以返回多个值，本质上返回的是元组。",[30,166965,166967],{"className":31353,"code":166966,"language":31355,"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",[26,166968,166969,166978,166986,166994,167003,167010,167014,167018,167027,167033],{"__ignoreMap":35},[39,166970,166971,166973,166976],{"class":41,"line":42},[39,166972,32922],{"class":45},[39,166974,166975],{"class":49}," get_info",[39,166977,32928],{"class":53},[39,166979,166980,166982,166984],{"class":41,"line":92},[39,166981,153345],{"class":53},[39,166983,1117],{"class":45},[39,166985,150328],{"class":237},[39,166987,166988,166990,166992],{"class":41,"line":112},[39,166989,153361],{"class":53},[39,166991,1117],{"class":45},[39,166993,147526],{"class":74},[39,166995,166996,166998,167000],{"class":41,"line":118},[39,166997,153376],{"class":53},[39,166999,1117],{"class":45},[39,167001,167002],{"class":74}," 95\n",[39,167004,167005,167007],{"class":41,"line":125},[39,167006,95],{"class":45},[39,167008,167009],{"class":53}," name, age, score\n",[39,167011,167012],{"class":41,"line":132},[39,167013,122],{"emptyLinePlaceholder":121},[39,167015,167016],{"class":41,"line":138},[39,167017,122],{"emptyLinePlaceholder":121},[39,167019,167020,167022,167024],{"class":41,"line":169},[39,167021,162281],{"class":53},[39,167023,1117],{"class":45},[39,167025,167026],{"class":53}," get_info()\n",[39,167028,167029,167031],{"class":41,"line":190},[39,167030,31390],{"class":74},[39,167032,77560],{"class":53},[39,167034,167035,167037,167039,167041],{"class":41,"line":202},[39,167036,31390],{"class":74},[39,167038,54],{"class":53},[39,167040,104082],{"class":74},[39,167042,167043],{"class":53},"(result))\n",[19,167045,167046],{},"可以直接解包：",[30,167048,167050],{"className":31353,"code":167049,"language":31355,"meta":35,"style":35},"name, age, score = get_info()\nprint(name, age, score)\n",[26,167051,167052,167061],{"__ignoreMap":35},[39,167053,167054,167057,167059],{"class":41,"line":42},[39,167055,167056],{"class":53},"name, age, score ",[39,167058,1117],{"class":45},[39,167060,167026],{"class":53},[39,167062,167063,167065],{"class":41,"line":92},[39,167064,31390],{"class":74},[39,167066,167067],{"class":53},"(name, age, score)\n",[19,167069,167070],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167072,167074],{"id":167073},"_72-位置参数","7.2 位置参数",[19,167076,167077],{},"位置参数按顺序传递。",[30,167079,167081],{"className":31353,"code":167080,"language":31355,"meta":35,"style":35},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[26,167082,167083,167091,167119,167123,167127],{"__ignoreMap":35},[39,167084,167085,167087,167089],{"class":41,"line":42},[39,167086,32922],{"class":45},[39,167088,150347],{"class":49},[39,167090,150350],{"class":53},[39,167092,167093,167095,167097,167099,167101,167103,167105,167107,167109,167111,167113,167115,167117],{"class":41,"line":92},[39,167094,32274],{"class":74},[39,167096,54],{"class":53},[39,167098,1321],{"class":45},[39,167100,150361],{"class":237},[39,167102,2156],{"class":74},[39,167104,80785],{"class":53},[39,167106,2206],{"class":74},[39,167108,150370],{"class":237},[39,167110,2156],{"class":74},[39,167112,71196],{"class":53},[39,167114,2206],{"class":74},[39,167116,150379],{"class":237},[39,167118,574],{"class":53},[39,167120,167121],{"class":41,"line":112},[39,167122,122],{"emptyLinePlaceholder":121},[39,167124,167125],{"class":41,"line":118},[39,167126,122],{"emptyLinePlaceholder":121},[39,167128,167129,167132,167134,167136,167138],{"class":41,"line":125},[39,167130,167131],{"class":53},"introduce(",[39,167133,150863],{"class":237},[39,167135,63],{"class":53},[39,167137,1911],{"class":74},[39,167139,574],{"class":53},[19,167141,167142],{},"顺序错了就会得到错误含义：",[30,167144,167146],{"className":31353,"code":167145,"language":31355,"meta":35,"style":35},"introduce(18, \"小明\")\n",[26,167147,167148],{"__ignoreMap":35},[39,167149,167150,167152,167154,167156,167158],{"class":41,"line":42},[39,167151,167131],{"class":53},[39,167153,1911],{"class":74},[39,167155,63],{"class":53},[39,167157,150863],{"class":237},[39,167159,574],{"class":53},[14,167161,167163],{"id":167162},"_73-关键字参数","7.3 关键字参数",[19,167165,167166],{},"关键字参数按参数名传递。",[30,167168,167170],{"className":31353,"code":167169,"language":31355,"meta":35,"style":35},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[26,167171,167172,167192],{"__ignoreMap":35},[39,167173,167174,167176,167178,167180,167182,167184,167186,167188,167190],{"class":41,"line":42},[39,167175,167131],{"class":53},[39,167177,80785],{"class":59},[39,167179,1117],{"class":45},[39,167181,150863],{"class":237},[39,167183,63],{"class":53},[39,167185,71196],{"class":59},[39,167187,1117],{"class":45},[39,167189,1911],{"class":74},[39,167191,574],{"class":53},[39,167193,167194,167196,167198,167200,167202,167204,167206,167208,167210],{"class":41,"line":92},[39,167195,167131],{"class":53},[39,167197,71196],{"class":59},[39,167199,1117],{"class":45},[39,167201,1911],{"class":74},[39,167203,63],{"class":53},[39,167205,80785],{"class":59},[39,167207,1117],{"class":45},[39,167209,150863],{"class":237},[39,167211,574],{"class":53},[19,167213,118909],{},[328,167215,167216,167219],{},[331,167217,167218],{},"顺序不容易错。",[331,167220,167221],{},"调用时可读性更强。",[14,167223,167225],{"id":167224},"_74-默认参数","7.4 默认参数",[19,167227,167228],{},"默认参数给参数设置默认值。",[30,167230,167232],{"className":31353,"code":167231,"language":31355,"meta":35,"style":35},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[26,167233,167234,167250,167280,167284,167288,167298],{"__ignoreMap":35},[39,167235,167236,167238,167240,167243,167245,167248],{"class":41,"line":42},[39,167237,32922],{"class":45},[39,167239,123068],{"class":49},[39,167241,167242],{"class":53},"(host, port",[39,167244,1117],{"class":45},[39,167246,167247],{"class":74},"3306",[39,167249,31761],{"class":53},[39,167251,167252,167254,167256,167258,167261,167263,167265,167267,167269,167271,167274,167276,167278],{"class":41,"line":92},[39,167253,32274],{"class":74},[39,167255,54],{"class":53},[39,167257,1321],{"class":45},[39,167259,167260],{"class":237},"\"连接",[39,167262,2156],{"class":74},[39,167264,28370],{"class":53},[39,167266,2206],{"class":74},[39,167268,2119],{"class":237},[39,167270,2156],{"class":74},[39,167272,167273],{"class":53},"port",[39,167275,2206],{"class":74},[39,167277,1516],{"class":237},[39,167279,574],{"class":53},[39,167281,167282],{"class":41,"line":112},[39,167283,122],{"emptyLinePlaceholder":121},[39,167285,167286],{"class":41,"line":118},[39,167287,122],{"emptyLinePlaceholder":121},[39,167289,167290,167293,167296],{"class":41,"line":125},[39,167291,167292],{"class":53},"connect(",[39,167294,167295],{"class":237},"\"localhost\"",[39,167297,574],{"class":53},[39,167299,167300,167302,167304,167306,167309],{"class":41,"line":132},[39,167301,167292],{"class":53},[39,167303,167295],{"class":237},[39,167305,63],{"class":53},[39,167307,167308],{"class":74},"6379",[39,167310,574],{"class":53},[19,167312,167313],{},"注意：默认参数必须放在非默认参数后面。",[19,167315,167316],{},"错误：",[30,167318,167320],{"className":31353,"code":167319,"language":31355,"meta":35,"style":35},"def connect(port=3306, host):\n    pass\n",[26,167321,167322,167338],{"__ignoreMap":35},[39,167323,167324,167326,167328,167331,167333,167335],{"class":41,"line":42},[39,167325,32922],{"class":45},[39,167327,123068],{"class":49},[39,167329,167330],{"class":53},"(port",[39,167332,1117],{"class":45},[39,167334,167247],{"class":74},[39,167336,167337],{"class":53},", host):\n",[39,167339,167340],{"class":41,"line":92},[39,167341,150512],{"class":45},[19,167343,167344],{},"正确：",[30,167346,167348],{"className":31353,"code":167347,"language":31355,"meta":35,"style":35},"def connect(host, port=3306):\n    pass\n",[26,167349,167350,167364],{"__ignoreMap":35},[39,167351,167352,167354,167356,167358,167360,167362],{"class":41,"line":42},[39,167353,32922],{"class":45},[39,167355,123068],{"class":49},[39,167357,167242],{"class":53},[39,167359,1117],{"class":45},[39,167361,167247],{"class":74},[39,167363,31761],{"class":53},[39,167365,167366],{"class":41,"line":92},[39,167367,150512],{"class":45},[14,167369,167371],{"id":167370},"_75-默认参数的坑","7.5 默认参数的坑",[19,167373,167374],{},"不要使用可变对象作为默认参数。",[19,167376,158598],{},[30,167378,167380],{"className":31353,"code":167379,"language":31355,"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",[26,167381,167382,167397,167402,167409,167413,167417,167428],{"__ignoreMap":35},[39,167383,167384,167386,167389,167392,167394],{"class":41,"line":42},[39,167385,32922],{"class":45},[39,167387,167388],{"class":49}," add_item",[39,167390,167391],{"class":53},"(item, items",[39,167393,1117],{"class":45},[39,167395,167396],{"class":53},"[]):\n",[39,167398,167399],{"class":41,"line":92},[39,167400,167401],{"class":53},"    items.append(item)\n",[39,167403,167404,167406],{"class":41,"line":112},[39,167405,95],{"class":45},[39,167407,167408],{"class":53}," items\n",[39,167410,167411],{"class":41,"line":118},[39,167412,122],{"emptyLinePlaceholder":121},[39,167414,167415],{"class":41,"line":125},[39,167416,122],{"emptyLinePlaceholder":121},[39,167418,167419,167421,167424,167426],{"class":41,"line":132},[39,167420,31390],{"class":74},[39,167422,167423],{"class":53},"(add_item(",[39,167425,166300],{"class":237},[39,167427,31472],{"class":53},[39,167429,167430,167432,167434,167437],{"class":41,"line":138},[39,167431,31390],{"class":74},[39,167433,167423],{"class":53},[39,167435,167436],{"class":237},"\"b\"",[39,167438,31472],{"class":53},[19,167440,167441],{},"第二次调用会复用第一次的列表。",[19,167443,156863],{},[30,167445,167447],{"className":31353,"code":167446,"language":31355,"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",[26,167448,167449,167463,167476,167485,167489],{"__ignoreMap":35},[39,167450,167451,167453,167455,167457,167459,167461],{"class":41,"line":42},[39,167452,32922],{"class":45},[39,167454,167388],{"class":49},[39,167456,167391],{"class":53},[39,167458,1117],{"class":45},[39,167460,96661],{"class":74},[39,167462,31761],{"class":53},[39,167464,167465,167467,167470,167472,167474],{"class":41,"line":92},[39,167466,4184],{"class":45},[39,167468,167469],{"class":53}," items ",[39,167471,39902],{"class":45},[39,167473,39908],{"class":74},[39,167475,4822],{"class":53},[39,167477,167478,167481,167483],{"class":41,"line":112},[39,167479,167480],{"class":53},"        items ",[39,167482,1117],{"class":45},[39,167484,52813],{"class":53},[39,167486,167487],{"class":41,"line":118},[39,167488,167401],{"class":53},[39,167490,167491,167493],{"class":41,"line":125},[39,167492,95],{"class":45},[39,167494,167408],{"class":53},[14,167496,167498],{"id":167497},"_76-不定长参数","7.6 不定长参数",[476,167500,167502],{"id":167501},"_761-args","7.6.1 *args",[19,167504,167505,167508],{},[26,167506,167507],{},"*args"," 接收任意数量的位置参数，得到元组。",[30,167510,167512],{"className":31353,"code":167511,"language":31355,"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",[26,167513,167514,167527,167535,167546,167555,167561,167565,167569,167588],{"__ignoreMap":35},[39,167515,167516,167518,167520,167522,167524],{"class":41,"line":42},[39,167517,32922],{"class":45},[39,167519,6289],{"class":49},[39,167521,54],{"class":53},[39,167523,1717],{"class":45},[39,167525,167526],{"class":53},"args):\n",[39,167528,167529,167531,167533],{"class":41,"line":92},[39,167530,160282],{"class":53},[39,167532,1117],{"class":45},[39,167534,48308],{"class":74},[39,167536,167537,167539,167541,167543],{"class":41,"line":112},[39,167538,4284],{"class":45},[39,167540,157155],{"class":53},[39,167542,27018],{"class":45},[39,167544,167545],{"class":53}," args:\n",[39,167547,167548,167550,167552],{"class":41,"line":118},[39,167549,160957],{"class":53},[39,167551,10545],{"class":45},[39,167553,167554],{"class":53}," num\n",[39,167556,167557,167559],{"class":41,"line":125},[39,167558,95],{"class":45},[39,167560,163262],{"class":53},[39,167562,167563],{"class":41,"line":132},[39,167564,122],{"emptyLinePlaceholder":121},[39,167566,167567],{"class":41,"line":138},[39,167568,122],{"emptyLinePlaceholder":121},[39,167570,167571,167573,167576,167578,167580,167582,167584,167586],{"class":41,"line":169},[39,167572,31390],{"class":74},[39,167574,167575],{"class":53},"(add(",[39,167577,1483],{"class":74},[39,167579,63],{"class":53},[39,167581,1345],{"class":74},[39,167583,63],{"class":53},[39,167585,1339],{"class":74},[39,167587,31472],{"class":53},[39,167589,167590,167592,167594,167596,167598,167600,167602,167604,167606,167608,167610,167612],{"class":41,"line":190},[39,167591,31390],{"class":74},[39,167593,167575],{"class":53},[39,167595,1483],{"class":74},[39,167597,63],{"class":53},[39,167599,1345],{"class":74},[39,167601,63],{"class":53},[39,167603,1339],{"class":74},[39,167605,63],{"class":53},[39,167607,1558],{"class":74},[39,167609,63],{"class":53},[39,167611,1583],{"class":74},[39,167613,31472],{"class":53},[476,167615,167617],{"id":167616},"_762-kwargs","7.6.2 **kwargs",[19,167619,167620,167623],{},[26,167621,167622],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[30,167625,167627],{"className":31353,"code":167626,"language":31355,"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",[26,167628,167629,167642,167653,167659,167663,167667],{"__ignoreMap":35},[39,167630,167631,167633,167635,167637,167639],{"class":41,"line":42},[39,167632,32922],{"class":45},[39,167634,162920],{"class":49},[39,167636,54],{"class":53},[39,167638,11726],{"class":45},[39,167640,167641],{"class":53},"kwargs):\n",[39,167643,167644,167646,167648,167650],{"class":41,"line":92},[39,167645,4284],{"class":45},[39,167647,165760],{"class":53},[39,167649,27018],{"class":45},[39,167651,167652],{"class":53}," kwargs.items():\n",[39,167654,167655,167657],{"class":41,"line":112},[39,167656,33426],{"class":74},[39,167658,165772],{"class":53},[39,167660,167661],{"class":41,"line":118},[39,167662,122],{"emptyLinePlaceholder":121},[39,167664,167665],{"class":41,"line":125},[39,167666,122],{"emptyLinePlaceholder":121},[39,167668,167669,167671,167673,167675,167677,167679,167681,167683,167685,167687,167689,167691,167693],{"class":41,"line":132},[39,167670,162985],{"class":53},[39,167672,80785],{"class":59},[39,167674,1117],{"class":45},[39,167676,150863],{"class":237},[39,167678,63],{"class":53},[39,167680,71196],{"class":59},[39,167682,1117],{"class":45},[39,167684,1911],{"class":74},[39,167686,63],{"class":53},[39,167688,71247],{"class":59},[39,167690,1117],{"class":45},[39,167692,70244],{"class":237},[39,167694,574],{"class":53},[14,167696,167698],{"id":167697},"_77-参数解包","7.7 参数解包",[19,167700,167701],{},"列表或元组解包为位置参数：",[30,167703,167705],{"className":31353,"code":167704,"language":31355,"meta":35,"style":35},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[26,167706,167707,167716,167731,167735,167739,167759],{"__ignoreMap":35},[39,167708,167709,167711,167713],{"class":41,"line":42},[39,167710,32922],{"class":45},[39,167712,6289],{"class":49},[39,167714,167715],{"class":53},"(a, b, c):\n",[39,167717,167718,167720,167722,167724,167726,167728],{"class":41,"line":92},[39,167719,95],{"class":45},[39,167721,98],{"class":53},[39,167723,101],{"class":45},[39,167725,104],{"class":53},[39,167727,101],{"class":45},[39,167729,167730],{"class":53}," c\n",[39,167732,167733],{"class":41,"line":112},[39,167734,122],{"emptyLinePlaceholder":121},[39,167736,167737],{"class":41,"line":118},[39,167738,122],{"emptyLinePlaceholder":121},[39,167740,167741,167743,167745,167747,167749,167751,167753,167755,167757],{"class":41,"line":125},[39,167742,165075],{"class":53},[39,167744,1117],{"class":45},[39,167746,53201],{"class":53},[39,167748,1483],{"class":74},[39,167750,63],{"class":53},[39,167752,1345],{"class":74},[39,167754,63],{"class":53},[39,167756,1339],{"class":74},[39,167758,34221],{"class":53},[39,167760,167761,167763,167765,167767],{"class":41,"line":132},[39,167762,31390],{"class":74},[39,167764,167575],{"class":53},[39,167766,1717],{"class":45},[39,167768,167769],{"class":53},"nums))\n",[19,167771,167772],{},"字典解包为关键字参数：",[30,167774,167776],{"className":31353,"code":167775,"language":31355,"meta":35,"style":35},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[26,167777,167778,167786,167812,167816,167820,167844],{"__ignoreMap":35},[39,167779,167780,167782,167784],{"class":41,"line":42},[39,167781,32922],{"class":45},[39,167783,150347],{"class":49},[39,167785,150350],{"class":53},[39,167787,167788,167790,167792,167794,167796,167798,167800,167802,167804,167806,167808,167810],{"class":41,"line":92},[39,167789,32274],{"class":74},[39,167791,54],{"class":53},[39,167793,1321],{"class":45},[39,167795,1516],{"class":237},[39,167797,2156],{"class":74},[39,167799,80785],{"class":53},[39,167801,2206],{"class":74},[39,167803,5529],{"class":74},[39,167805,71196],{"class":53},[39,167807,2206],{"class":74},[39,167809,1516],{"class":237},[39,167811,574],{"class":53},[39,167813,167814],{"class":41,"line":112},[39,167815,122],{"emptyLinePlaceholder":121},[39,167817,167818],{"class":41,"line":118},[39,167819,122],{"emptyLinePlaceholder":121},[39,167821,167822,167824,167826,167828,167830,167832,167834,167836,167838,167840,167842],{"class":41,"line":125},[39,167823,117289],{"class":53},[39,167825,1117],{"class":45},[39,167827,5529],{"class":53},[39,167829,63654],{"class":237},[39,167831,52412],{"class":53},[39,167833,150863],{"class":237},[39,167835,63],{"class":53},[39,167837,70099],{"class":237},[39,167839,52412],{"class":53},[39,167841,1911],{"class":74},[39,167843,115],{"class":53},[39,167845,167846,167848,167850],{"class":41,"line":132},[39,167847,167131],{"class":53},[39,167849,11726],{"class":45},[39,167851,167852],{"class":53},"info)\n",[14,167854,167856],{"id":167855},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167858,167859,167862],{},[26,167860,167861],{},"lambda"," 用于定义简单匿名函数。",[30,167864,167866],{"className":31353,"code":167865,"language":31355,"meta":35,"style":35},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[26,167867,167868,167885],{"__ignoreMap":35},[39,167869,167870,167873,167875,167878,167881,167883],{"class":41,"line":42},[39,167871,167872],{"class":53},"add ",[39,167874,1117],{"class":45},[39,167876,167877],{"class":45}," lambda",[39,167879,167880],{"class":53}," a, b: a ",[39,167882,101],{"class":45},[39,167884,152079],{"class":53},[39,167886,167887,167889,167891,167893,167895,167897],{"class":41,"line":92},[39,167888,31390],{"class":74},[39,167890,167575],{"class":53},[39,167892,1483],{"class":74},[39,167894,63],{"class":53},[39,167896,1345],{"class":74},[39,167898,31472],{"class":53},[19,167900,167901],{},"常和排序、过滤等函数一起使用。",[19,167903,167904],{},"按分数排序：",[30,167906,167908],{"className":31353,"code":167907,"language":31355,"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",[26,167909,167910,167918,167938,167958,167978,167982,167986,168009],{"__ignoreMap":35},[39,167911,167912,167914,167916],{"class":41,"line":42},[39,167913,160691],{"class":53},[39,167915,1117],{"class":45},[39,167917,56422],{"class":53},[39,167919,167920,167922,167924,167926,167928,167930,167932,167934,167936],{"class":41,"line":92},[39,167921,149360],{"class":53},[39,167923,63654],{"class":237},[39,167925,52412],{"class":53},[39,167927,150863],{"class":237},[39,167929,63],{"class":53},[39,167931,152447],{"class":237},[39,167933,52412],{"class":53},[39,167935,2249],{"class":74},[39,167937,6011],{"class":53},[39,167939,167940,167942,167944,167946,167948,167950,167952,167954,167956],{"class":41,"line":112},[39,167941,149360],{"class":53},[39,167943,63654],{"class":237},[39,167945,52412],{"class":53},[39,167947,151911],{"class":237},[39,167949,63],{"class":53},[39,167951,152447],{"class":237},[39,167953,52412],{"class":53},[39,167955,2071],{"class":74},[39,167957,6011],{"class":53},[39,167959,167960,167962,167964,167966,167968,167970,167972,167974,167976],{"class":41,"line":118},[39,167961,149360],{"class":53},[39,167963,63654],{"class":237},[39,167965,52412],{"class":53},[39,167967,160706],{"class":237},[39,167969,63],{"class":53},[39,167971,152447],{"class":237},[39,167973,52412],{"class":53},[39,167975,1669],{"class":74},[39,167977,6011],{"class":53},[39,167979,167980],{"class":41,"line":125},[39,167981,34221],{"class":53},[39,167983,167984],{"class":41,"line":132},[39,167985,122],{"emptyLinePlaceholder":121},[39,167987,167988,167991,167993,167995,167997,167999,168001,168003,168005,168007],{"class":41,"line":138},[39,167989,167990],{"class":53},"students.sort(",[39,167992,154921],{"class":59},[39,167994,154924],{"class":45},[39,167996,154927],{"class":53},[39,167998,152447],{"class":237},[39,168000,113177],{"class":53},[39,168002,164503],{"class":59},[39,168004,1117],{"class":45},[39,168006,32451],{"class":74},[39,168008,574],{"class":53},[39,168010,168011,168013],{"class":41,"line":169},[39,168012,31390],{"class":74},[39,168014,165970],{"class":53},[19,168016,168017,168018,168020],{},"如果逻辑复杂，不要硬写 ",[26,168019,167861],{},"，定义普通函数更清晰。",[14,168022,168024],{"id":168023},"_79-函数作为参数","7.9 函数作为参数",[19,168026,168027],{},"函数可以作为参数传给另一个函数。",[30,168029,168031],{"className":31353,"code":168030,"language":31355,"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",[26,168032,168033,168041,168051,168055,168059,168069,168076,168080,168084],{"__ignoreMap":35},[39,168034,168035,168037,168039],{"class":41,"line":42},[39,168036,32922],{"class":45},[39,168038,6289],{"class":49},[39,168040,152068],{"class":53},[39,168042,168043,168045,168047,168049],{"class":41,"line":92},[39,168044,95],{"class":45},[39,168046,98],{"class":53},[39,168048,101],{"class":45},[39,168050,152079],{"class":53},[39,168052,168053],{"class":41,"line":112},[39,168054,122],{"emptyLinePlaceholder":121},[39,168056,168057],{"class":41,"line":118},[39,168058,122],{"emptyLinePlaceholder":121},[39,168060,168061,168063,168066],{"class":41,"line":125},[39,168062,32922],{"class":45},[39,168064,168065],{"class":49}," calculate",[39,168067,168068],{"class":53},"(a, b, func):\n",[39,168070,168071,168073],{"class":41,"line":132},[39,168072,95],{"class":45},[39,168074,168075],{"class":53}," func(a, b)\n",[39,168077,168078],{"class":41,"line":138},[39,168079,122],{"emptyLinePlaceholder":121},[39,168081,168082],{"class":41,"line":169},[39,168083,122],{"emptyLinePlaceholder":121},[39,168085,168086,168088,168091,168093,168095,168097],{"class":41,"line":190},[39,168087,31390],{"class":74},[39,168089,168090],{"class":53},"(calculate(",[39,168092,423],{"class":74},[39,168094,63],{"class":53},[39,168096,248],{"class":74},[39,168098,168099],{"class":53},", add))\n",[19,168101,168102],{},"这种思想在排序、回调、框架中经常出现。",[14,168104,168106],{"id":168105},"_710-mapfiltersorted","7.10 map、filter、sorted",[476,168108,168110],{"id":168109},"_7101-map","7.10.1 map",[19,168112,168113,168115],{},[26,168114,75019],{}," 对每个元素执行函数。",[30,168117,168119],{"className":31353,"code":168118,"language":31355,"meta":35,"style":35},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[26,168120,168121,168145,168168],{"__ignoreMap":35},[39,168122,168123,168125,168127,168129,168131,168133,168135,168137,168139,168141,168143],{"class":41,"line":42},[39,168124,165075],{"class":53},[39,168126,1117],{"class":45},[39,168128,53201],{"class":53},[39,168130,1483],{"class":74},[39,168132,63],{"class":53},[39,168134,1345],{"class":74},[39,168136,63],{"class":53},[39,168138,1339],{"class":74},[39,168140,63],{"class":53},[39,168142,1558],{"class":74},[39,168144,34221],{"class":53},[39,168146,168147,168149,168151,168154,168156,168158,168161,168163,168165],{"class":41,"line":92},[39,168148,162281],{"class":53},[39,168150,1117],{"class":45},[39,168152,168153],{"class":74}," map",[39,168155,54],{"class":53},[39,168157,167861],{"class":45},[39,168159,168160],{"class":53}," x: x ",[39,168162,1717],{"class":45},[39,168164,15728],{"class":74},[39,168166,168167],{"class":53},", nums)\n",[39,168169,168170,168172,168174,168176],{"class":41,"line":112},[39,168171,31390],{"class":74},[39,168173,54],{"class":53},[39,168175,155045],{"class":74},[39,168177,167043],{"class":53},[476,168179,168181],{"id":168180},"_7102-filter","7.10.2 filter",[19,168183,168184,168186],{},[26,168185,81026],{}," 保留满足条件的元素。",[30,168188,168190],{"className":31353,"code":168189,"language":31355,"meta":35,"style":35},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[26,168191,168192,168220,168245],{"__ignoreMap":35},[39,168193,168194,168196,168198,168200,168202,168204,168206,168208,168210,168212,168214,168216,168218],{"class":41,"line":42},[39,168195,165075],{"class":53},[39,168197,1117],{"class":45},[39,168199,53201],{"class":53},[39,168201,1483],{"class":74},[39,168203,63],{"class":53},[39,168205,1345],{"class":74},[39,168207,63],{"class":53},[39,168209,1339],{"class":74},[39,168211,63],{"class":53},[39,168213,1558],{"class":74},[39,168215,63],{"class":53},[39,168217,1583],{"class":74},[39,168219,34221],{"class":53},[39,168221,168222,168224,168226,168229,168231,168233,168235,168237,168239,168241,168243],{"class":41,"line":92},[39,168223,162281],{"class":53},[39,168225,1117],{"class":45},[39,168227,168228],{"class":74}," filter",[39,168230,54],{"class":53},[39,168232,167861],{"class":45},[39,168234,168160],{"class":53},[39,168236,1592],{"class":45},[39,168238,15728],{"class":74},[39,168240,102534],{"class":45},[39,168242,315],{"class":74},[39,168244,168167],{"class":53},[39,168246,168247,168249,168251,168253],{"class":41,"line":112},[39,168248,31390],{"class":74},[39,168250,54],{"class":53},[39,168252,155045],{"class":74},[39,168254,167043],{"class":53},[476,168256,168258],{"id":168257},"_7103-sorted","7.10.3 sorted",[19,168260,168261,168263],{},[26,168262,166211],{}," 返回排序后的新列表。",[30,168265,168267],{"className":31353,"code":168266,"language":31355,"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",[26,168268,168269,168277,168297,168317,168337,168341,168345,168374],{"__ignoreMap":35},[39,168270,168271,168273,168275],{"class":41,"line":42},[39,168272,160691],{"class":53},[39,168274,1117],{"class":45},[39,168276,56422],{"class":53},[39,168278,168279,168281,168283,168285,168287,168289,168291,168293,168295],{"class":41,"line":92},[39,168280,149360],{"class":53},[39,168282,63654],{"class":237},[39,168284,52412],{"class":53},[39,168286,150863],{"class":237},[39,168288,63],{"class":53},[39,168290,152447],{"class":237},[39,168292,52412],{"class":53},[39,168294,2249],{"class":74},[39,168296,6011],{"class":53},[39,168298,168299,168301,168303,168305,168307,168309,168311,168313,168315],{"class":41,"line":112},[39,168300,149360],{"class":53},[39,168302,63654],{"class":237},[39,168304,52412],{"class":53},[39,168306,151911],{"class":237},[39,168308,63],{"class":53},[39,168310,152447],{"class":237},[39,168312,52412],{"class":53},[39,168314,2071],{"class":74},[39,168316,6011],{"class":53},[39,168318,168319,168321,168323,168325,168327,168329,168331,168333,168335],{"class":41,"line":118},[39,168320,149360],{"class":53},[39,168322,63654],{"class":237},[39,168324,52412],{"class":53},[39,168326,160706],{"class":237},[39,168328,63],{"class":53},[39,168330,152447],{"class":237},[39,168332,52412],{"class":53},[39,168334,1669],{"class":74},[39,168336,6011],{"class":53},[39,168338,168339],{"class":41,"line":125},[39,168340,34221],{"class":53},[39,168342,168343],{"class":41,"line":132},[39,168344,122],{"emptyLinePlaceholder":121},[39,168346,168347,168349,168351,168353,168356,168358,168360,168362,168364,168366,168368,168370,168372],{"class":41,"line":138},[39,168348,162281],{"class":53},[39,168350,1117],{"class":45},[39,168352,164579],{"class":74},[39,168354,168355],{"class":53},"(students, ",[39,168357,154921],{"class":59},[39,168359,154924],{"class":45},[39,168361,154927],{"class":53},[39,168363,152447],{"class":237},[39,168365,113177],{"class":53},[39,168367,164503],{"class":59},[39,168369,1117],{"class":45},[39,168371,32451],{"class":74},[39,168373,574],{"class":53},[39,168375,168376,168378],{"class":41,"line":169},[39,168377,31390],{"class":74},[39,168379,77560],{"class":53},[14,168381,168383],{"id":168382},"_711-闭包入门","7.11 闭包入门",[19,168385,168386],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[30,168388,168390],{"className":31353,"code":168389,"language":31355,"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",[26,168391,168392,168402,168412,168423,168427,168434,168438,168442,168456],{"__ignoreMap":35},[39,168393,168394,168396,168399],{"class":41,"line":42},[39,168395,32922],{"class":45},[39,168397,168398],{"class":49}," outer",[39,168400,168401],{"class":53},"(base):\n",[39,168403,168404,168406,168409],{"class":41,"line":92},[39,168405,31776],{"class":45},[39,168407,168408],{"class":49}," inner",[39,168410,168411],{"class":53},"(num):\n",[39,168413,168414,168416,168419,168421],{"class":41,"line":112},[39,168415,15725],{"class":45},[39,168417,168418],{"class":53}," base ",[39,168420,101],{"class":45},[39,168422,167554],{"class":53},[39,168424,168425],{"class":41,"line":118},[39,168426,122],{"emptyLinePlaceholder":121},[39,168428,168429,168431],{"class":41,"line":125},[39,168430,95],{"class":45},[39,168432,168433],{"class":53}," inner\n",[39,168435,168436],{"class":41,"line":132},[39,168437,122],{"emptyLinePlaceholder":121},[39,168439,168440],{"class":41,"line":138},[39,168441,122],{"emptyLinePlaceholder":121},[39,168443,168444,168447,168449,168452,168454],{"class":41,"line":169},[39,168445,168446],{"class":53},"add_10 ",[39,168448,1117],{"class":45},[39,168450,168451],{"class":53}," outer(",[39,168453,423],{"class":74},[39,168455,574],{"class":53},[39,168457,168458,168460,168463,168465],{"class":41,"line":190},[39,168459,31390],{"class":74},[39,168461,168462],{"class":53},"(add_10(",[39,168464,1583],{"class":74},[39,168466,31472],{"class":53},[19,168468,168469],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168471,168473],{"id":168472},"_712-装饰器入门","7.12 装饰器入门",[19,168475,168476],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[30,168478,168480],{"className":31353,"code":168479,"language":31355,"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",[26,168481,168482,168491,168500,168511,168516,168527,168531,168538,168542,168546,168551,168559,168569,168573,168577],{"__ignoreMap":35},[39,168483,168484,168486,168488],{"class":41,"line":42},[39,168485,32922],{"class":45},[39,168487,88166],{"class":49},[39,168489,168490],{"class":53},"(func):\n",[39,168492,168493,168495,168498],{"class":41,"line":92},[39,168494,31776],{"class":45},[39,168496,168497],{"class":49}," wrapper",[39,168499,32928],{"class":53},[39,168501,168502,168504,168506,168509],{"class":41,"line":112},[39,168503,33426],{"class":74},[39,168505,54],{"class":53},[39,168507,168508],{"class":237},"\"函数开始执行\"",[39,168510,574],{"class":53},[39,168512,168513],{"class":41,"line":118},[39,168514,168515],{"class":53},"        func()\n",[39,168517,168518,168520,168522,168525],{"class":41,"line":125},[39,168519,33426],{"class":74},[39,168521,54],{"class":53},[39,168523,168524],{"class":237},"\"函数执行结束\"",[39,168526,574],{"class":53},[39,168528,168529],{"class":41,"line":132},[39,168530,122],{"emptyLinePlaceholder":121},[39,168532,168533,168535],{"class":41,"line":138},[39,168534,95],{"class":45},[39,168536,168537],{"class":53}," wrapper\n",[39,168539,168540],{"class":41,"line":169},[39,168541,122],{"emptyLinePlaceholder":121},[39,168543,168544],{"class":41,"line":190},[39,168545,122],{"emptyLinePlaceholder":121},[39,168547,168548],{"class":41,"line":202},[39,168549,168550],{"class":49},"@log\n",[39,168552,168553,168555,168557],{"class":41,"line":207},[39,168554,32922],{"class":45},[39,168556,161971],{"class":49},[39,168558,32928],{"class":53},[39,168560,168561,168563,168565,168567],{"class":41,"line":212},[39,168562,32274],{"class":74},[39,168564,54],{"class":53},[39,168566,6921],{"class":237},[39,168568,574],{"class":53},[39,168570,168571],{"class":41,"line":223},[39,168572,122],{"emptyLinePlaceholder":121},[39,168574,168575],{"class":41,"line":228},[39,168576,122],{"emptyLinePlaceholder":121},[39,168578,168579],{"class":41,"line":263},[39,168580,162006],{"class":53},[19,168582,159249],{},[30,168584,168586],{"className":31353,"code":168585,"language":31355,"meta":35,"style":35},"say_hello = log(say_hello)\n",[26,168587,168588],{"__ignoreMap":35},[39,168589,168590,168593,168595],{"class":41,"line":42},[39,168591,168592],{"class":53},"say_hello ",[39,168594,1117],{"class":45},[39,168596,168597],{"class":53}," log(say_hello)\n",[19,168599,168600],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168602,168604],{"id":168603},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[30,168606,168608],{"className":31353,"code":168607,"language":31355,"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",[26,168609,168610,168618,168635,168645,168664,168674,168681,168685,168691,168695,168699,168703,168711,168721,168725,168729],{"__ignoreMap":35},[39,168611,168612,168614,168616],{"class":41,"line":42},[39,168613,32922],{"class":45},[39,168615,88166],{"class":49},[39,168617,168490],{"class":53},[39,168619,168620,168622,168624,168626,168628,168631,168633],{"class":41,"line":92},[39,168621,31776],{"class":45},[39,168623,168497],{"class":49},[39,168625,54],{"class":53},[39,168627,1717],{"class":45},[39,168629,168630],{"class":53},"args, ",[39,168632,11726],{"class":45},[39,168634,167641],{"class":53},[39,168636,168637,168639,168641,168643],{"class":41,"line":112},[39,168638,33426],{"class":74},[39,168640,54],{"class":53},[39,168642,168508],{"class":237},[39,168644,574],{"class":53},[39,168646,168647,168650,168652,168655,168657,168659,168661],{"class":41,"line":118},[39,168648,168649],{"class":53},"        result ",[39,168651,1117],{"class":45},[39,168653,168654],{"class":53}," func(",[39,168656,1717],{"class":45},[39,168658,168630],{"class":53},[39,168660,11726],{"class":45},[39,168662,168663],{"class":53},"kwargs)\n",[39,168665,168666,168668,168670,168672],{"class":41,"line":125},[39,168667,33426],{"class":74},[39,168669,54],{"class":53},[39,168671,168524],{"class":237},[39,168673,574],{"class":53},[39,168675,168676,168678],{"class":41,"line":132},[39,168677,15725],{"class":45},[39,168679,168680],{"class":53}," result\n",[39,168682,168683],{"class":41,"line":138},[39,168684,122],{"emptyLinePlaceholder":121},[39,168686,168687,168689],{"class":41,"line":169},[39,168688,95],{"class":45},[39,168690,168537],{"class":53},[39,168692,168693],{"class":41,"line":190},[39,168694,122],{"emptyLinePlaceholder":121},[39,168696,168697],{"class":41,"line":202},[39,168698,122],{"emptyLinePlaceholder":121},[39,168700,168701],{"class":41,"line":207},[39,168702,168550],{"class":49},[39,168704,168705,168707,168709],{"class":41,"line":212},[39,168706,32922],{"class":45},[39,168708,6289],{"class":49},[39,168710,152068],{"class":53},[39,168712,168713,168715,168717,168719],{"class":41,"line":223},[39,168714,95],{"class":45},[39,168716,98],{"class":53},[39,168718,101],{"class":45},[39,168720,152079],{"class":53},[39,168722,168723],{"class":41,"line":228},[39,168724,122],{"emptyLinePlaceholder":121},[39,168726,168727],{"class":41,"line":263},[39,168728,122],{"emptyLinePlaceholder":121},[39,168730,168731,168733,168735,168737,168739,168741],{"class":41,"line":287},[39,168732,31390],{"class":74},[39,168734,167575],{"class":53},[39,168736,423],{"class":74},[39,168738,63],{"class":53},[39,168740,248],{"class":74},[39,168742,31472],{"class":53},[19,168744,168745,168746,101993,168748,168750],{},"这个写法使用 ",[26,168747,167507],{},[26,168749,167622],{}," 接收原函数的所有参数。",[14,168752,168754],{"id":168753},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,168756,124267],{},[328,168758,168759,168762,168765],{},[331,168760,168761],{},"给定一组学生数据。",[331,168763,168764],{},"封装函数，根据传入规则筛选学生。",[331,168766,168767],{},"筛选及格、优秀、未成年学生。",[19,168769,11101],{},[30,168771,168773],{"className":31353,"code":168772,"language":31355,"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",[26,168774,168775,168783,168811,168839,168867,168871,168875,168879,168889,168897,168907,168914,168919,168925,168929,168933,168957,168980,169003,169007,169014,169021],{"__ignoreMap":35},[39,168776,168777,168779,168781],{"class":41,"line":42},[39,168778,160691],{"class":53},[39,168780,1117],{"class":45},[39,168782,56422],{"class":53},[39,168784,168785,168787,168789,168791,168793,168795,168797,168799,168801,168803,168805,168807,168809],{"class":41,"line":92},[39,168786,149360],{"class":53},[39,168788,63654],{"class":237},[39,168790,52412],{"class":53},[39,168792,150863],{"class":237},[39,168794,63],{"class":53},[39,168796,70099],{"class":237},[39,168798,52412],{"class":53},[39,168800,1911],{"class":74},[39,168802,63],{"class":53},[39,168804,152447],{"class":237},[39,168806,52412],{"class":53},[39,168808,2249],{"class":74},[39,168810,6011],{"class":53},[39,168812,168813,168815,168817,168819,168821,168823,168825,168827,168829,168831,168833,168835,168837],{"class":41,"line":112},[39,168814,149360],{"class":53},[39,168816,63654],{"class":237},[39,168818,52412],{"class":53},[39,168820,151911],{"class":237},[39,168822,63],{"class":53},[39,168824,70099],{"class":237},[39,168826,52412],{"class":53},[39,168828,1886],{"class":74},[39,168830,63],{"class":53},[39,168832,152447],{"class":237},[39,168834,52412],{"class":53},[39,168836,2071],{"class":74},[39,168838,6011],{"class":53},[39,168840,168841,168843,168845,168847,168849,168851,168853,168855,168857,168859,168861,168863,168865],{"class":41,"line":118},[39,168842,149360],{"class":53},[39,168844,63654],{"class":237},[39,168846,52412],{"class":53},[39,168848,160706],{"class":237},[39,168850,63],{"class":53},[39,168852,70099],{"class":237},[39,168854,52412],{"class":53},[39,168856,1936],{"class":74},[39,168858,63],{"class":53},[39,168860,152447],{"class":237},[39,168862,52412],{"class":53},[39,168864,2142],{"class":74},[39,168866,6011],{"class":53},[39,168868,168869],{"class":41,"line":125},[39,168870,34221],{"class":53},[39,168872,168873],{"class":41,"line":132},[39,168874,122],{"emptyLinePlaceholder":121},[39,168876,168877],{"class":41,"line":138},[39,168878,122],{"emptyLinePlaceholder":121},[39,168880,168881,168883,168886],{"class":41,"line":169},[39,168882,32922],{"class":45},[39,168884,168885],{"class":49}," filter_students",[39,168887,168888],{"class":53},"(students, condition):\n",[39,168890,168891,168893,168895],{"class":41,"line":190},[39,168892,162198],{"class":53},[39,168894,1117],{"class":45},[39,168896,52813],{"class":53},[39,168898,168899,168901,168903,168905],{"class":41,"line":202},[39,168900,4284],{"class":45},[39,168902,153112],{"class":53},[39,168904,27018],{"class":45},[39,168906,153117],{"class":53},[39,168908,168909,168911],{"class":41,"line":207},[39,168910,3590],{"class":45},[39,168912,168913],{"class":53}," condition(student):\n",[39,168915,168916],{"class":41,"line":212},[39,168917,168918],{"class":53},"            result.append(student)\n",[39,168920,168921,168923],{"class":41,"line":223},[39,168922,95],{"class":45},[39,168924,168680],{"class":53},[39,168926,168927],{"class":41,"line":228},[39,168928,122],{"emptyLinePlaceholder":121},[39,168930,168931],{"class":41,"line":263},[39,168932,122],{"emptyLinePlaceholder":121},[39,168934,168935,168937,168939,168942,168944,168947,168949,168951,168953,168955],{"class":41,"line":287},[39,168936,166676],{"class":53},[39,168938,1117],{"class":45},[39,168940,168941],{"class":53}," filter_students(students, ",[39,168943,167861],{"class":45},[39,168945,168946],{"class":53}," s: s[",[39,168948,152447],{"class":237},[39,168950,5524],{"class":53},[39,168952,2820],{"class":45},[39,168954,158812],{"class":74},[39,168956,574],{"class":53},[39,168958,168959,168962,168964,168966,168968,168970,168972,168974,168976,168978],{"class":41,"line":292},[39,168960,168961],{"class":53},"excellent ",[39,168963,1117],{"class":45},[39,168965,168941],{"class":53},[39,168967,167861],{"class":45},[39,168969,168946],{"class":53},[39,168971,152447],{"class":237},[39,168973,5524],{"class":53},[39,168975,2820],{"class":45},[39,168977,158763],{"class":74},[39,168979,574],{"class":53},[39,168981,168982,168985,168987,168989,168991,168993,168995,168997,168999,169001],{"class":41,"line":305},[39,168983,168984],{"class":53},"under_age ",[39,168986,1117],{"class":45},[39,168988,168941],{"class":53},[39,168990,167861],{"class":45},[39,168992,168946],{"class":53},[39,168994,70099],{"class":237},[39,168996,5524],{"class":53},[39,168998,2170],{"class":45},[39,169000,157260],{"class":74},[39,169002,574],{"class":53},[39,169004,169005],{"class":41,"line":310},[39,169006,122],{"emptyLinePlaceholder":121},[39,169008,169009,169011],{"class":41,"line":321},[39,169010,31390],{"class":74},[39,169012,169013],{"class":53},"(passed)\n",[39,169015,169016,169018],{"class":41,"line":713},[39,169017,31390],{"class":74},[39,169019,169020],{"class":53},"(excellent)\n",[39,169022,169023,169025],{"class":41,"line":718},[39,169024,31390],{"class":74},[39,169026,169027],{"class":53},"(under_age)\n",[14,169029,169031],{"id":169030},"_715-易错点","7.15 易错点",[328,169033,169034,169037,169045,169050,169061],{},[331,169035,169036],{},"默认参数不要写可变对象。",[331,169038,169039,169041,169042,169044],{},[26,169040,167507],{}," 是元组，",[26,169043,167622],{}," 是字典。",[331,169046,169047,169049],{},[26,169048,167861],{}," 只适合简单表达式。",[331,169051,169052,101993,169054,169056,169057,169060],{},[26,169053,75019],{},[26,169055,81026],{}," 的结果是迭代器，常用 ",[26,169058,169059],{},"list()"," 转换查看。",[331,169062,169063],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169065,169067],{"id":169066},"_716-本章练习","7.16 本章练习",[328,169069,169070,169077,169083,169088,169093],{},[331,169071,169072,169073,169076],{},"写函数 ",[26,169074,169075],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[331,169078,169072,169079,169082],{},[26,169080,169081],{},"print_user(**kwargs)","，输出用户所有字段。",[331,169084,105341,169085,169087],{},[26,169086,167861],{}," 对学生列表按年龄排序。",[331,169089,105341,169090,169092],{},[26,169091,81026],{}," 找出成绩不及格的学生。",[331,169094,169095],{},"写一个装饰器，统计函数执行前后的提示信息。",[1192,169097,169098],{},"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":92,"depth":92,"links":169100},[169101,169102,169103,169104,169105,169106,169110,169111,169112,169113,169118,169119,169120,169121,169122,169123],{"id":166959,"depth":92,"text":166960},{"id":167073,"depth":92,"text":167074},{"id":167162,"depth":92,"text":167163},{"id":167224,"depth":92,"text":167225},{"id":167370,"depth":92,"text":167371},{"id":167497,"depth":92,"text":167498,"children":169107},[169108,169109],{"id":167501,"depth":112,"text":167502},{"id":167616,"depth":112,"text":167617},{"id":167697,"depth":92,"text":167698},{"id":167855,"depth":92,"text":167856},{"id":168023,"depth":92,"text":168024},{"id":168105,"depth":92,"text":168106,"children":169114},[169115,169116,169117],{"id":168109,"depth":112,"text":168110},{"id":168180,"depth":112,"text":168181},{"id":168257,"depth":112,"text":168258},{"id":168382,"depth":92,"text":168383},{"id":168472,"depth":92,"text":168473},{"id":168603,"depth":92,"text":168604},{"id":168753,"depth":92,"text":168754},{"id":169030,"depth":92,"text":169031},{"id":169066,"depth":92,"text":169067},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166951,"description":24350},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169130,"title":169131,"body":169132,"description":24350,"extension":1203,"meta":171651,"navigation":121,"path":171652,"seo":171653,"stem":171654,"__hash__":171655},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169133,"toc":171626},[169134,169137,169141,169144,169147,169178,169182,169186,169189,169216,169220,169223,169274,169277,169292,169295,169330,169334,169336,169360,169363,169423,169427,169431,169434,169491,169494,169514,169518,169521,169584,169588,169591,169647,169654,169678,169682,169685,169748,169752,169757,169808,169811,169815,169820,169887,169890,169972,169976,169981,170032,170035,170039,170042,170045,170053,170056,170102,170105,170151,170155,170161,170205,170208,170254,170257,170297,170300,170361,170365,170368,170458,170461,170603,170606,170673,170677,170680,170683,170824,170827,170905,170908,171084,171088,171090,171101,171103,171302,171306,171550,171554,171588,171592,171623],[10,169135,169131],{"id":169136},"_8-文件操作",[14,169138,169140],{"id":169139},"_81-文件操作的意义","8.1 文件操作的意义",[19,169142,169143],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169145,169146],{},"常见文件类型：",[328,169148,169149,169155,169161,169167,169173],{},[331,169150,169151,169154],{},[26,169152,169153],{},".txt","：普通文本。",[331,169156,169157,169160],{},[26,169158,169159],{},".csv","：表格文本。",[331,169162,169163,169166],{},[26,169164,169165],{},".json","：结构化数据。",[331,169168,169169,169172],{},[26,169170,169171],{},".log","：日志文件。",[331,169174,169175,169177],{},[26,169176,147327],{},"：Python 源代码。",[14,169179,169181],{"id":169180},"_82-路径","8.2 路径",[476,169183,169185],{"id":169184},"_821-相对路径","8.2.1 相对路径",[19,169187,169188],{},"相对当前运行目录：",[30,169190,169192],{"className":31353,"code":169191,"language":31355,"meta":35,"style":35},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[26,169193,169194],{"__ignoreMap":35},[39,169195,169196,169198,169200,169202,169204,169206,169208,169210,169212,169214],{"class":41,"line":42},[39,169197,87890],{"class":74},[39,169199,54],{"class":53},[39,169201,147771],{"class":237},[39,169203,63],{"class":53},[39,169205,147776],{"class":237},[39,169207,63],{"class":53},[39,169209,147781],{"class":59},[39,169211,1117],{"class":45},[39,169213,147786],{"class":237},[39,169215,574],{"class":53},[476,169217,169219],{"id":169218},"_822-绝对路径","8.2.2 绝对路径",[19,169221,169222],{},"从根目录或盘符开始：",[30,169224,169226],{"className":31353,"code":169225,"language":31355,"meta":35,"style":35},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[26,169227,169228,169251],{"__ignoreMap":35},[39,169229,169230,169232,169234,169237,169239,169241,169243,169245,169247,169249],{"class":41,"line":42},[39,169231,87890],{"class":74},[39,169233,54],{"class":53},[39,169235,169236],{"class":237},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[39,169238,63],{"class":53},[39,169240,147776],{"class":237},[39,169242,63],{"class":53},[39,169244,147781],{"class":59},[39,169246,1117],{"class":45},[39,169248,147786],{"class":237},[39,169250,574],{"class":53},[39,169252,169253,169255,169257,169260,169262,169264,169266,169268,169270,169272],{"class":41,"line":92},[39,169254,87890],{"class":74},[39,169256,54],{"class":53},[39,169258,169259],{"class":237},"\"D:\u002Fdata\u002Fdata.txt\"",[39,169261,63],{"class":53},[39,169263,147776],{"class":237},[39,169265,63],{"class":53},[39,169267,147781],{"class":59},[39,169269,1117],{"class":45},[39,169271,147786],{"class":237},[39,169273,574],{"class":53},[19,169275,169276],{},"Windows 路径建议写成：",[30,169278,169280],{"className":31353,"code":169279,"language":31355,"meta":35,"style":35},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[26,169281,169282],{"__ignoreMap":35},[39,169283,169284,169287,169289],{"class":41,"line":42},[39,169285,169286],{"class":53},"path ",[39,169288,1117],{"class":45},[39,169290,169291],{"class":237}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169293,169294],{},"或原始字符串：",[30,169296,169298],{"className":31353,"code":169297,"language":31355,"meta":35,"style":35},"path = r\"D:\\data\\data.txt\"\n",[26,169299,169300],{"__ignoreMap":35},[39,169301,169302,169304,169306,169308,169310,169313,169316,169319,169321,169323,169325,169328],{"class":41,"line":42},[39,169303,169286],{"class":53},[39,169305,1117],{"class":45},[39,169307,18094],{"class":45},[39,169309,1516],{"class":237},[39,169311,169312],{"class":48952},"D:",[39,169314,169315],{"class":74},"\\d",[39,169317,169318],{"class":48952},"ata",[39,169320,169315],{"class":74},[39,169322,169318],{"class":48952},[39,169324,1819],{"class":74},[39,169326,169327],{"class":48952},"txt",[39,169329,26108],{"class":237},[14,169331,169333],{"id":169332},"_83-open函数","8.3 open函数",[19,169335,24],{},[30,169337,169339],{"className":31353,"code":169338,"language":31355,"meta":35,"style":35},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[26,169340,169341],{"__ignoreMap":35},[39,169342,169343,169345,169347,169349,169352,169354,169356,169358],{"class":41,"line":42},[39,169344,46329],{"class":59},[39,169346,71],{"class":45},[39,169348,147766],{"class":74},[39,169350,169351],{"class":53},"(文件路径, 打开模式, ",[39,169353,147781],{"class":59},[39,169355,1117],{"class":45},[39,169357,147786],{"class":237},[39,169359,574],{"class":53},[19,169361,169362],{},"常见模式：",[1404,169364,169365,169374],{},[1407,169366,169367],{},[1410,169368,169369,169372],{},[1413,169370,169371],{},"模式",[1413,169373,26844],{},[1450,169375,169376,169385,169394,169403,169413],{},[1410,169377,169378,169382],{},[1455,169379,169380],{},[26,169381,1931],{},[1455,169383,169384],{},"只读，文件不存在会报错",[1410,169386,169387,169391],{},[1455,169388,169389],{},[26,169390,2055],{},[1455,169392,169393],{},"只写，文件不存在会创建，存在会清空",[1410,169395,169396,169400],{},[1455,169397,169398],{},[26,169399,922],{},[1455,169401,169402],{},"追加，文件不存在会创建",[1410,169404,169405,169410],{},[1455,169406,169407],{},[26,169408,169409],{},"rb",[1455,169411,169412],{},"二进制只读",[1410,169414,169415,169420],{},[1455,169416,169417],{},[26,169418,169419],{},"wb",[1455,169421,169422],{},"二进制只写",[14,169424,169426],{"id":169425},"_84-读取文件","8.4 读取文件",[476,169428,169430],{"id":169429},"_841-read","8.4.1 read",[19,169432,169433],{},"一次读取全部内容：",[30,169435,169437],{"className":31353,"code":169436,"language":31355,"meta":35,"style":35},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[26,169438,169439,169465,169477,169484],{"__ignoreMap":35},[39,169440,169441,169443,169445,169447,169449,169451,169453,169455,169457,169459,169461,169463],{"class":41,"line":42},[39,169442,46329],{"class":59},[39,169444,71],{"class":45},[39,169446,147766],{"class":74},[39,169448,54],{"class":53},[39,169450,147771],{"class":237},[39,169452,63],{"class":53},[39,169454,147776],{"class":237},[39,169456,63],{"class":53},[39,169458,147781],{"class":59},[39,169460,1117],{"class":45},[39,169462,147786],{"class":237},[39,169464,574],{"class":53},[39,169466,169467,169470,169472,169474],{"class":41,"line":92},[39,169468,169469],{"class":53},"content ",[39,169471,1117],{"class":45},[39,169473,149128],{"class":59},[39,169475,169476],{"class":53},".read()\n",[39,169478,169479,169481],{"class":41,"line":112},[39,169480,31390],{"class":74},[39,169482,169483],{"class":53},"(content)\n",[39,169485,169486,169488],{"class":41,"line":118},[39,169487,46329],{"class":59},[39,169489,169490],{"class":53},".close()\n",[19,169492,169493],{},"可以指定读取字符数：",[30,169495,169497],{"className":31353,"code":169496,"language":31355,"meta":35,"style":35},"content = file.read(10)\n",[26,169498,169499],{"__ignoreMap":35},[39,169500,169501,169503,169505,169507,169510,169512],{"class":41,"line":42},[39,169502,169469],{"class":53},[39,169504,1117],{"class":45},[39,169506,149128],{"class":59},[39,169508,169509],{"class":53},".read(",[39,169511,423],{"class":74},[39,169513,574],{"class":53},[476,169515,169517],{"id":169516},"_842-readline","8.4.2 readline",[19,169519,169520],{},"一次读取一行：",[30,169522,169524],{"className":31353,"code":169523,"language":31355,"meta":35,"style":35},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[26,169525,169526,169552,169556,169567,169574,169578],{"__ignoreMap":35},[39,169527,169528,169530,169532,169534,169536,169538,169540,169542,169544,169546,169548,169550],{"class":41,"line":42},[39,169529,46329],{"class":59},[39,169531,71],{"class":45},[39,169533,147766],{"class":74},[39,169535,54],{"class":53},[39,169537,147771],{"class":237},[39,169539,63],{"class":53},[39,169541,147776],{"class":237},[39,169543,63],{"class":53},[39,169545,147781],{"class":59},[39,169547,1117],{"class":45},[39,169549,147786],{"class":237},[39,169551,574],{"class":53},[39,169553,169554],{"class":41,"line":92},[39,169555,122],{"emptyLinePlaceholder":121},[39,169557,169558,169560,169562,169564],{"class":41,"line":112},[39,169559,148227],{"class":53},[39,169561,1117],{"class":45},[39,169563,149128],{"class":59},[39,169565,169566],{"class":53},".readline()\n",[39,169568,169569,169571],{"class":41,"line":118},[39,169570,31390],{"class":74},[39,169572,169573],{"class":53},"(line)\n",[39,169575,169576],{"class":41,"line":125},[39,169577,122],{"emptyLinePlaceholder":121},[39,169579,169580,169582],{"class":41,"line":132},[39,169581,46329],{"class":59},[39,169583,169490],{"class":53},[476,169585,169587],{"id":169586},"_843-readlines","8.4.3 readlines",[19,169589,169590],{},"读取所有行，返回列表：",[30,169592,169594],{"className":31353,"code":169593,"language":31355,"meta":35,"style":35},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[26,169595,169596,169622,169634,169641],{"__ignoreMap":35},[39,169597,169598,169600,169602,169604,169606,169608,169610,169612,169614,169616,169618,169620],{"class":41,"line":42},[39,169599,46329],{"class":59},[39,169601,71],{"class":45},[39,169603,147766],{"class":74},[39,169605,54],{"class":53},[39,169607,147771],{"class":237},[39,169609,63],{"class":53},[39,169611,147776],{"class":237},[39,169613,63],{"class":53},[39,169615,147781],{"class":59},[39,169617,1117],{"class":45},[39,169619,147786],{"class":237},[39,169621,574],{"class":53},[39,169623,169624,169627,169629,169631],{"class":41,"line":92},[39,169625,169626],{"class":53},"lines ",[39,169628,1117],{"class":45},[39,169630,149128],{"class":59},[39,169632,169633],{"class":53},".readlines()\n",[39,169635,169636,169638],{"class":41,"line":112},[39,169637,31390],{"class":74},[39,169639,169640],{"class":53},"(lines)\n",[39,169642,169643,169645],{"class":41,"line":118},[39,169644,46329],{"class":59},[39,169646,169490],{"class":53},[19,169648,169649,169650,169653],{},"每一行通常带有换行符，可以用 ",[26,169651,169652],{},"strip()"," 去掉：",[30,169655,169657],{"className":31353,"code":169656,"language":31355,"meta":35,"style":35},"for line in lines:\n    print(line.strip())\n",[26,169658,169659,169671],{"__ignoreMap":35},[39,169660,169661,169663,169666,169668],{"class":41,"line":42},[39,169662,4108],{"class":45},[39,169664,169665],{"class":53}," line ",[39,169667,27018],{"class":45},[39,169669,169670],{"class":53}," lines:\n",[39,169672,169673,169675],{"class":41,"line":92},[39,169674,32274],{"class":74},[39,169676,169677],{"class":53},"(line.strip())\n",[476,169679,169681],{"id":169680},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169683,169684],{},"推荐读取大文件时使用：",[30,169686,169688],{"className":31353,"code":169687,"language":31355,"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",[26,169689,169690,169716,169720,169732,169738,169742],{"__ignoreMap":35},[39,169691,169692,169694,169696,169698,169700,169702,169704,169706,169708,169710,169712,169714],{"class":41,"line":42},[39,169693,46329],{"class":59},[39,169695,71],{"class":45},[39,169697,147766],{"class":74},[39,169699,54],{"class":53},[39,169701,147771],{"class":237},[39,169703,63],{"class":53},[39,169705,147776],{"class":237},[39,169707,63],{"class":53},[39,169709,147781],{"class":59},[39,169711,1117],{"class":45},[39,169713,147786],{"class":237},[39,169715,574],{"class":53},[39,169717,169718],{"class":41,"line":92},[39,169719,122],{"emptyLinePlaceholder":121},[39,169721,169722,169724,169726,169728,169730],{"class":41,"line":112},[39,169723,4108],{"class":45},[39,169725,169665],{"class":53},[39,169727,27018],{"class":45},[39,169729,149128],{"class":59},[39,169731,4822],{"class":53},[39,169733,169734,169736],{"class":41,"line":118},[39,169735,32274],{"class":74},[39,169737,169677],{"class":53},[39,169739,169740],{"class":41,"line":125},[39,169741,122],{"emptyLinePlaceholder":121},[39,169743,169744,169746],{"class":41,"line":132},[39,169745,46329],{"class":59},[39,169747,169490],{"class":53},[14,169749,169751],{"id":169750},"_85-with语句","8.5 with语句",[19,169753,169754,169756],{},[26,169755,108808],{}," 会自动关闭文件，推荐使用。",[30,169758,169760],{"className":31353,"code":169759,"language":31355,"meta":35,"style":35},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[26,169761,169762,169792,169802],{"__ignoreMap":35},[39,169763,169764,169766,169768,169770,169772,169774,169776,169778,169780,169782,169784,169786,169788,169790],{"class":41,"line":42},[39,169765,108808],{"class":45},[39,169767,147766],{"class":74},[39,169769,54],{"class":53},[39,169771,147771],{"class":237},[39,169773,63],{"class":53},[39,169775,147776],{"class":237},[39,169777,63],{"class":53},[39,169779,147781],{"class":59},[39,169781,1117],{"class":45},[39,169783,147786],{"class":237},[39,169785,255],{"class":53},[39,169787,32358],{"class":45},[39,169789,149128],{"class":59},[39,169791,4822],{"class":53},[39,169793,169794,169796,169798,169800],{"class":41,"line":92},[39,169795,147798],{"class":53},[39,169797,1117],{"class":45},[39,169799,149128],{"class":59},[39,169801,169476],{"class":53},[39,169803,169804,169806],{"class":41,"line":112},[39,169805,32274],{"class":74},[39,169807,169483],{"class":53},[19,169809,169810],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169812,169814],{"id":169813},"_86-写入文件","8.6 写入文件",[19,169816,169817,169819],{},[26,169818,2055],{}," 模式会清空原文件。",[30,169821,169823],{"className":31353,"code":169822,"language":31355,"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",[26,169824,169825,169855,169872],{"__ignoreMap":35},[39,169826,169827,169829,169831,169833,169835,169837,169839,169841,169843,169845,169847,169849,169851,169853],{"class":41,"line":42},[39,169828,108808],{"class":45},[39,169830,147766],{"class":74},[39,169832,54],{"class":53},[39,169834,147771],{"class":237},[39,169836,63],{"class":53},[39,169838,152951],{"class":237},[39,169840,63],{"class":53},[39,169842,147781],{"class":59},[39,169844,1117],{"class":45},[39,169846,147786],{"class":237},[39,169848,255],{"class":53},[39,169850,32358],{"class":45},[39,169852,149128],{"class":59},[39,169854,4822],{"class":53},[39,169856,169857,169860,169863,169866,169868,169870],{"class":41,"line":92},[39,169858,169859],{"class":59},"    file",[39,169861,169862],{"class":53},".write(",[39,169864,169865],{"class":237},"\"hello",[39,169867,157500],{"class":74},[39,169869,1516],{"class":237},[39,169871,574],{"class":53},[39,169873,169874,169876,169878,169881,169883,169885],{"class":41,"line":112},[39,169875,169859],{"class":59},[39,169877,169862],{"class":53},[39,169879,169880],{"class":237},"\"python",[39,169882,157500],{"class":74},[39,169884,1516],{"class":237},[39,169886,574],{"class":53},[19,169888,169889],{},"写入多行：",[30,169891,169893],{"className":31353,"code":169892,"language":31355,"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",[26,169894,169895,169930,169934,169965],{"__ignoreMap":35},[39,169896,169897,169899,169901,169903,169906,169908,169910,169912,169915,169917,169919,169921,169924,169926,169928],{"class":41,"line":42},[39,169898,169626],{"class":53},[39,169900,1117],{"class":45},[39,169902,53201],{"class":53},[39,169904,169905],{"class":237},"\"小明,18",[39,169907,157500],{"class":74},[39,169909,1516],{"class":237},[39,169911,63],{"class":53},[39,169913,169914],{"class":237},"\"小红,17",[39,169916,157500],{"class":74},[39,169918,1516],{"class":237},[39,169920,63],{"class":53},[39,169922,169923],{"class":237},"\"小刚,19",[39,169925,157500],{"class":74},[39,169927,1516],{"class":237},[39,169929,34221],{"class":53},[39,169931,169932],{"class":41,"line":92},[39,169933,122],{"emptyLinePlaceholder":121},[39,169935,169936,169938,169940,169942,169945,169947,169949,169951,169953,169955,169957,169959,169961,169963],{"class":41,"line":112},[39,169937,108808],{"class":45},[39,169939,147766],{"class":74},[39,169941,54],{"class":53},[39,169943,169944],{"class":237},"\"students.txt\"",[39,169946,63],{"class":53},[39,169948,152951],{"class":237},[39,169950,63],{"class":53},[39,169952,147781],{"class":59},[39,169954,1117],{"class":45},[39,169956,147786],{"class":237},[39,169958,255],{"class":53},[39,169960,32358],{"class":45},[39,169962,149128],{"class":59},[39,169964,4822],{"class":53},[39,169966,169967,169969],{"class":41,"line":118},[39,169968,169859],{"class":59},[39,169970,169971],{"class":53},".writelines(lines)\n",[14,169973,169975],{"id":169974},"_87-追加文件","8.7 追加文件",[19,169977,169978,169980],{},[26,169979,922],{}," 模式不会清空原内容，而是在末尾追加。",[30,169982,169984],{"className":31353,"code":169983,"language":31355,"meta":35,"style":35},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[26,169985,169986,170017],{"__ignoreMap":35},[39,169987,169988,169990,169992,169994,169997,169999,170001,170003,170005,170007,170009,170011,170013,170015],{"class":41,"line":42},[39,169989,108808],{"class":45},[39,169991,147766],{"class":74},[39,169993,54],{"class":53},[39,169995,169996],{"class":237},"\"log.txt\"",[39,169998,63],{"class":53},[39,170000,166300],{"class":237},[39,170002,63],{"class":53},[39,170004,147781],{"class":59},[39,170006,1117],{"class":45},[39,170008,147786],{"class":237},[39,170010,255],{"class":53},[39,170012,32358],{"class":45},[39,170014,149128],{"class":59},[39,170016,4822],{"class":53},[39,170018,170019,170021,170023,170026,170028,170030],{"class":41,"line":92},[39,170020,169859],{"class":59},[39,170022,169862],{"class":53},[39,170024,170025],{"class":237},"\"程序启动",[39,170027,157500],{"class":74},[39,170029,1516],{"class":237},[39,170031,574],{"class":53},[19,170033,170034],{},"日志类文件常用追加模式。",[14,170036,170038],{"id":170037},"_88-文件编码","8.8 文件编码",[19,170040,170041],{},"编码决定文字如何保存为字节。",[19,170043,170044],{},"常见编码：",[328,170046,170047,170050],{},[331,170048,170049],{},"UTF-8：推荐。",[331,170051,170052],{},"GBK：部分 Windows 中文文件常见。",[19,170054,170055],{},"读取文件乱码时，可以尝试：",[30,170057,170059],{"className":31353,"code":170058,"language":31355,"meta":35,"style":35},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[26,170060,170061,170092],{"__ignoreMap":35},[39,170062,170063,170065,170067,170069,170071,170073,170075,170077,170079,170081,170084,170086,170088,170090],{"class":41,"line":42},[39,170064,108808],{"class":45},[39,170066,147766],{"class":74},[39,170068,54],{"class":53},[39,170070,147771],{"class":237},[39,170072,63],{"class":53},[39,170074,147776],{"class":237},[39,170076,63],{"class":53},[39,170078,147781],{"class":59},[39,170080,1117],{"class":45},[39,170082,170083],{"class":237},"\"gbk\"",[39,170085,255],{"class":53},[39,170087,32358],{"class":45},[39,170089,149128],{"class":59},[39,170091,4822],{"class":53},[39,170093,170094,170096,170098,170100],{"class":41,"line":92},[39,170095,147798],{"class":53},[39,170097,1117],{"class":45},[39,170099,149128],{"class":59},[39,170101,169476],{"class":53},[19,170103,170104],{},"写文件时建议统一 UTF-8：",[30,170106,170108],{"className":31353,"code":170107,"language":31355,"meta":35,"style":35},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[26,170109,170110,170140],{"__ignoreMap":35},[39,170111,170112,170114,170116,170118,170120,170122,170124,170126,170128,170130,170132,170134,170136,170138],{"class":41,"line":42},[39,170113,108808],{"class":45},[39,170115,147766],{"class":74},[39,170117,54],{"class":53},[39,170119,147771],{"class":237},[39,170121,63],{"class":53},[39,170123,152951],{"class":237},[39,170125,63],{"class":53},[39,170127,147781],{"class":59},[39,170129,1117],{"class":45},[39,170131,147786],{"class":237},[39,170133,255],{"class":53},[39,170135,32358],{"class":45},[39,170137,149128],{"class":59},[39,170139,4822],{"class":53},[39,170141,170142,170144,170146,170149],{"class":41,"line":92},[39,170143,169859],{"class":59},[39,170145,169862],{"class":53},[39,170147,170148],{"class":237},"\"中文内容\"",[39,170150,574],{"class":53},[14,170152,170154],{"id":170153},"_89-pathlib","8.9 pathlib",[19,170156,170157,170160],{},[26,170158,170159],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[30,170162,170164],{"className":31353,"code":170163,"language":31355,"meta":35,"style":35},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[26,170165,170166,170176,170180,170198],{"__ignoreMap":35},[39,170167,170168,170170,170172,170174],{"class":41,"line":42},[39,170169,31712],{"class":45},[39,170171,109286],{"class":53},[39,170173,31367],{"class":45},[39,170175,109291],{"class":53},[39,170177,170178],{"class":41,"line":92},[39,170179,122],{"emptyLinePlaceholder":121},[39,170181,170182,170184,170186,170188,170191,170193,170195],{"class":41,"line":112},[39,170183,169286],{"class":53},[39,170185,1117],{"class":45},[39,170187,109520],{"class":53},[39,170189,170190],{"class":237},"\"data\"",[39,170192,255],{"class":53},[39,170194,1845],{"class":45},[39,170196,170197],{"class":237}," \"students.txt\"\n",[39,170199,170200,170202],{"class":41,"line":118},[39,170201,31390],{"class":74},[39,170203,170204],{"class":53},"(path)\n",[19,170206,170207],{},"创建目录：",[30,170209,170211],{"className":31353,"code":170210,"language":31355,"meta":35,"style":35},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[26,170212,170213,170223,170227,170240],{"__ignoreMap":35},[39,170214,170215,170217,170219,170221],{"class":41,"line":42},[39,170216,31712],{"class":45},[39,170218,109286],{"class":53},[39,170220,31367],{"class":45},[39,170222,109291],{"class":53},[39,170224,170225],{"class":41,"line":92},[39,170226,122],{"emptyLinePlaceholder":121},[39,170228,170229,170232,170234,170236,170238],{"class":41,"line":112},[39,170230,170231],{"class":53},"data_dir ",[39,170233,1117],{"class":45},[39,170235,109520],{"class":53},[39,170237,170190],{"class":237},[39,170239,574],{"class":53},[39,170241,170242,170245,170248,170250,170252],{"class":41,"line":118},[39,170243,170244],{"class":53},"data_dir.mkdir(",[39,170246,170247],{"class":59},"exist_ok",[39,170249,1117],{"class":45},[39,170251,32451],{"class":74},[39,170253,574],{"class":53},[19,170255,170256],{},"判断文件是否存在：",[30,170258,170260],{"className":31353,"code":170259,"language":31355,"meta":35,"style":35},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[26,170261,170262,170275,170279,170286],{"__ignoreMap":35},[39,170263,170264,170266,170268,170270,170273],{"class":41,"line":42},[39,170265,169286],{"class":53},[39,170267,1117],{"class":45},[39,170269,109520],{"class":53},[39,170271,170272],{"class":237},"\"data\u002Fstudents.txt\"",[39,170274,574],{"class":53},[39,170276,170277],{"class":41,"line":92},[39,170278,122],{"emptyLinePlaceholder":121},[39,170280,170281,170283],{"class":41,"line":112},[39,170282,2654],{"class":45},[39,170284,170285],{"class":53}," path.exists():\n",[39,170287,170288,170290,170292,170295],{"class":41,"line":118},[39,170289,32274],{"class":74},[39,170291,54],{"class":53},[39,170293,170294],{"class":237},"\"文件存在\"",[39,170296,574],{"class":53},[19,170298,170299],{},"读写文本：",[30,170301,170303],{"className":31353,"code":170302,"language":31355,"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",[26,170304,170305,170317,170321,170338,170355],{"__ignoreMap":35},[39,170306,170307,170309,170311,170313,170315],{"class":41,"line":42},[39,170308,169286],{"class":53},[39,170310,1117],{"class":45},[39,170312,109520],{"class":53},[39,170314,147771],{"class":237},[39,170316,574],{"class":53},[39,170318,170319],{"class":41,"line":92},[39,170320,122],{"emptyLinePlaceholder":121},[39,170322,170323,170326,170328,170330,170332,170334,170336],{"class":41,"line":112},[39,170324,170325],{"class":53},"path.write_text(",[39,170327,146851],{"class":237},[39,170329,63],{"class":53},[39,170331,147781],{"class":59},[39,170333,1117],{"class":45},[39,170335,147786],{"class":237},[39,170337,574],{"class":53},[39,170339,170340,170342,170344,170347,170349,170351,170353],{"class":41,"line":118},[39,170341,169469],{"class":53},[39,170343,1117],{"class":45},[39,170345,170346],{"class":53}," path.read_text(",[39,170348,147781],{"class":59},[39,170350,1117],{"class":45},[39,170352,147786],{"class":237},[39,170354,574],{"class":53},[39,170356,170357,170359],{"class":41,"line":125},[39,170358,31390],{"class":74},[39,170360,169483],{"class":53},[14,170362,170364],{"id":170363},"_810-json文件","8.10 JSON文件",[19,170366,170367],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[30,170369,170371],{"className":31353,"code":170370,"language":31355,"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",[26,170372,170373,170379,170383,170391,170401,170411,170419,170423,170427,170452],{"__ignoreMap":35},[39,170374,170375,170377],{"class":41,"line":42},[39,170376,31367],{"class":45},[39,170378,148066],{"class":53},[39,170380,170381],{"class":41,"line":92},[39,170382,122],{"emptyLinePlaceholder":121},[39,170384,170385,170387,170389],{"class":41,"line":112},[39,170386,150456],{"class":53},[39,170388,1117],{"class":45},[39,170390,16545],{"class":53},[39,170392,170393,170395,170397,170399],{"class":41,"line":118},[39,170394,147995],{"class":237},[39,170396,52412],{"class":53},[39,170398,150863],{"class":237},[39,170400,32441],{"class":53},[39,170402,170403,170405,170407,170409],{"class":41,"line":125},[39,170404,165512],{"class":237},[39,170406,52412],{"class":53},[39,170408,1911],{"class":74},[39,170410,32441],{"class":53},[39,170412,170413,170415,170417],{"class":41,"line":132},[39,170414,165523],{"class":237},[39,170416,52412],{"class":53},[39,170418,165528],{"class":74},[39,170420,170421],{"class":41,"line":138},[39,170422,115],{"class":53},[39,170424,170425],{"class":41,"line":169},[39,170426,122],{"emptyLinePlaceholder":121},[39,170428,170429,170431,170433,170436,170438,170440,170442,170444,170446,170448,170450],{"class":41,"line":190},[39,170430,157419],{"class":53},[39,170432,1117],{"class":45},[39,170434,170435],{"class":53}," json.dumps(student, ",[39,170437,148112],{"class":59},[39,170439,1117],{"class":45},[39,170441,34962],{"class":74},[39,170443,63],{"class":53},[39,170445,152987],{"class":59},[39,170447,1117],{"class":45},[39,170449,1345],{"class":74},[39,170451,574],{"class":53},[39,170453,170454,170456],{"class":41,"line":202},[39,170455,31390],{"class":74},[39,170457,165046],{"class":53},[19,170459,170460],{},"写入 JSON 文件：",[30,170462,170464],{"className":31353,"code":170463,"language":31355,"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",[26,170465,170466,170472,170476,170484,170512,170540,170544,170548,170578],{"__ignoreMap":35},[39,170467,170468,170470],{"class":41,"line":42},[39,170469,31367],{"class":45},[39,170471,148066],{"class":53},[39,170473,170474],{"class":41,"line":92},[39,170475,122],{"emptyLinePlaceholder":121},[39,170477,170478,170480,170482],{"class":41,"line":112},[39,170479,160691],{"class":53},[39,170481,1117],{"class":45},[39,170483,56422],{"class":53},[39,170485,170486,170488,170490,170492,170494,170496,170498,170500,170502,170504,170506,170508,170510],{"class":41,"line":118},[39,170487,149360],{"class":53},[39,170489,63654],{"class":237},[39,170491,52412],{"class":53},[39,170493,150863],{"class":237},[39,170495,63],{"class":53},[39,170497,70099],{"class":237},[39,170499,52412],{"class":53},[39,170501,1911],{"class":74},[39,170503,63],{"class":53},[39,170505,152447],{"class":237},[39,170507,52412],{"class":53},[39,170509,2249],{"class":74},[39,170511,6011],{"class":53},[39,170513,170514,170516,170518,170520,170522,170524,170526,170528,170530,170532,170534,170536,170538],{"class":41,"line":125},[39,170515,149360],{"class":53},[39,170517,63654],{"class":237},[39,170519,52412],{"class":53},[39,170521,151911],{"class":237},[39,170523,63],{"class":53},[39,170525,70099],{"class":237},[39,170527,52412],{"class":53},[39,170529,1886],{"class":74},[39,170531,63],{"class":53},[39,170533,152447],{"class":237},[39,170535,52412],{"class":53},[39,170537,2071],{"class":74},[39,170539,6011],{"class":53},[39,170541,170542],{"class":41,"line":132},[39,170543,34221],{"class":53},[39,170545,170546],{"class":41,"line":138},[39,170547,122],{"emptyLinePlaceholder":121},[39,170549,170550,170552,170554,170556,170558,170560,170562,170564,170566,170568,170570,170572,170574,170576],{"class":41,"line":169},[39,170551,108808],{"class":45},[39,170553,147766],{"class":74},[39,170555,54],{"class":53},[39,170557,152806],{"class":237},[39,170559,63],{"class":53},[39,170561,152951],{"class":237},[39,170563,63],{"class":53},[39,170565,147781],{"class":59},[39,170567,1117],{"class":45},[39,170569,147786],{"class":237},[39,170571,255],{"class":53},[39,170573,32358],{"class":45},[39,170575,149128],{"class":59},[39,170577,4822],{"class":53},[39,170579,170580,170583,170585,170587,170589,170591,170593,170595,170597,170599,170601],{"class":41,"line":190},[39,170581,170582],{"class":53},"    json.dump(students, ",[39,170584,46329],{"class":59},[39,170586,63],{"class":53},[39,170588,148112],{"class":59},[39,170590,1117],{"class":45},[39,170592,34962],{"class":74},[39,170594,63],{"class":53},[39,170596,152987],{"class":59},[39,170598,1117],{"class":45},[39,170600,1345],{"class":74},[39,170602,574],{"class":53},[19,170604,170605],{},"读取 JSON 文件：",[30,170607,170609],{"className":31353,"code":170608,"language":31355,"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",[26,170610,170611,170617,170621,170651,170663,170667],{"__ignoreMap":35},[39,170612,170613,170615],{"class":41,"line":42},[39,170614,31367],{"class":45},[39,170616,148066],{"class":53},[39,170618,170619],{"class":41,"line":92},[39,170620,122],{"emptyLinePlaceholder":121},[39,170622,170623,170625,170627,170629,170631,170633,170635,170637,170639,170641,170643,170645,170647,170649],{"class":41,"line":112},[39,170624,108808],{"class":45},[39,170626,147766],{"class":74},[39,170628,54],{"class":53},[39,170630,152806],{"class":237},[39,170632,63],{"class":53},[39,170634,147776],{"class":237},[39,170636,63],{"class":53},[39,170638,147781],{"class":59},[39,170640,1117],{"class":45},[39,170642,147786],{"class":237},[39,170644,255],{"class":53},[39,170646,32358],{"class":45},[39,170648,149128],{"class":59},[39,170650,4822],{"class":53},[39,170652,170653,170655,170657,170659,170661],{"class":41,"line":118},[39,170654,154012],{"class":53},[39,170656,1117],{"class":45},[39,170658,149139],{"class":53},[39,170660,46329],{"class":59},[39,170662,574],{"class":53},[39,170664,170665],{"class":41,"line":125},[39,170666,122],{"emptyLinePlaceholder":121},[39,170668,170669,170671],{"class":41,"line":132},[39,170670,31390],{"class":74},[39,170672,165970],{"class":53},[14,170674,170676],{"id":170675},"_811-csv文件","8.11 CSV文件",[19,170678,170679],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170681,170682],{},"写入 CSV：",[30,170684,170686],{"className":31353,"code":170685,"language":31355,"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",[26,170687,170688,170695,170699,170707,170725,170741,170757,170761,170765,170805,170819],{"__ignoreMap":35},[39,170689,170690,170692],{"class":41,"line":42},[39,170691,31367],{"class":45},[39,170693,170694],{"class":53}," csv\n",[39,170696,170697],{"class":41,"line":92},[39,170698,122],{"emptyLinePlaceholder":121},[39,170700,170701,170703,170705],{"class":41,"line":112},[39,170702,160691],{"class":53},[39,170704,1117],{"class":45},[39,170706,56422],{"class":53},[39,170708,170709,170712,170714,170716,170718,170720,170723],{"class":41,"line":118},[39,170710,170711],{"class":53},"    [",[39,170713,74074],{"class":237},[39,170715,63],{"class":53},[39,170717,74107],{"class":237},[39,170719,63],{"class":53},[39,170721,170722],{"class":237},"\"成绩\"",[39,170724,88811],{"class":53},[39,170726,170727,170729,170731,170733,170735,170737,170739],{"class":41,"line":125},[39,170728,170711],{"class":53},[39,170730,150863],{"class":237},[39,170732,63],{"class":53},[39,170734,1911],{"class":74},[39,170736,63],{"class":53},[39,170738,2249],{"class":74},[39,170740,88811],{"class":53},[39,170742,170743,170745,170747,170749,170751,170753,170755],{"class":41,"line":132},[39,170744,170711],{"class":53},[39,170746,151911],{"class":237},[39,170748,63],{"class":53},[39,170750,1886],{"class":74},[39,170752,63],{"class":53},[39,170754,2071],{"class":74},[39,170756,88811],{"class":53},[39,170758,170759],{"class":41,"line":138},[39,170760,34221],{"class":53},[39,170762,170763],{"class":41,"line":169},[39,170764,122],{"emptyLinePlaceholder":121},[39,170766,170767,170769,170771,170773,170776,170778,170780,170782,170784,170786,170788,170790,170793,170795,170797,170799,170801,170803],{"class":41,"line":190},[39,170768,108808],{"class":45},[39,170770,147766],{"class":74},[39,170772,54],{"class":53},[39,170774,170775],{"class":237},"\"students.csv\"",[39,170777,63],{"class":53},[39,170779,152951],{"class":237},[39,170781,63],{"class":53},[39,170783,147781],{"class":59},[39,170785,1117],{"class":45},[39,170787,147786],{"class":237},[39,170789,63],{"class":53},[39,170791,170792],{"class":59},"newline",[39,170794,1117],{"class":45},[39,170796,8726],{"class":237},[39,170798,255],{"class":53},[39,170800,32358],{"class":45},[39,170802,149128],{"class":59},[39,170804,4822],{"class":53},[39,170806,170807,170810,170812,170815,170817],{"class":41,"line":202},[39,170808,170809],{"class":53},"    writer ",[39,170811,1117],{"class":45},[39,170813,170814],{"class":53}," csv.writer(",[39,170816,46329],{"class":59},[39,170818,574],{"class":53},[39,170820,170821],{"class":41,"line":207},[39,170822,170823],{"class":53},"    writer.writerows(students)\n",[19,170825,170826],{},"读取 CSV：",[30,170828,170830],{"className":31353,"code":170829,"language":31355,"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",[26,170831,170832,170838,170842,170872,170886,170898],{"__ignoreMap":35},[39,170833,170834,170836],{"class":41,"line":42},[39,170835,31367],{"class":45},[39,170837,170694],{"class":53},[39,170839,170840],{"class":41,"line":92},[39,170841,122],{"emptyLinePlaceholder":121},[39,170843,170844,170846,170848,170850,170852,170854,170856,170858,170860,170862,170864,170866,170868,170870],{"class":41,"line":112},[39,170845,108808],{"class":45},[39,170847,147766],{"class":74},[39,170849,54],{"class":53},[39,170851,170775],{"class":237},[39,170853,63],{"class":53},[39,170855,147776],{"class":237},[39,170857,63],{"class":53},[39,170859,147781],{"class":59},[39,170861,1117],{"class":45},[39,170863,147786],{"class":237},[39,170865,255],{"class":53},[39,170867,32358],{"class":45},[39,170869,149128],{"class":59},[39,170871,4822],{"class":53},[39,170873,170874,170877,170879,170882,170884],{"class":41,"line":118},[39,170875,170876],{"class":53},"    reader ",[39,170878,1117],{"class":45},[39,170880,170881],{"class":53}," csv.reader(",[39,170883,46329],{"class":59},[39,170885,574],{"class":53},[39,170887,170888,170890,170893,170895],{"class":41,"line":125},[39,170889,4284],{"class":45},[39,170891,170892],{"class":53}," row ",[39,170894,27018],{"class":45},[39,170896,170897],{"class":53}," reader:\n",[39,170899,170900,170902],{"class":41,"line":132},[39,170901,33426],{"class":74},[39,170903,170904],{"class":53},"(row)\n",[19,170906,170907],{},"使用字典写入：",[30,170909,170911],{"className":31353,"code":170910,"language":31355,"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",[26,170912,170913,170919,170923,170931,170959,170987,170991,170995,171033,171054,171075,171080],{"__ignoreMap":35},[39,170914,170915,170917],{"class":41,"line":42},[39,170916,31367],{"class":45},[39,170918,170694],{"class":53},[39,170920,170921],{"class":41,"line":92},[39,170922,122],{"emptyLinePlaceholder":121},[39,170924,170925,170927,170929],{"class":41,"line":112},[39,170926,160691],{"class":53},[39,170928,1117],{"class":45},[39,170930,56422],{"class":53},[39,170932,170933,170935,170937,170939,170941,170943,170945,170947,170949,170951,170953,170955,170957],{"class":41,"line":118},[39,170934,149360],{"class":53},[39,170936,63654],{"class":237},[39,170938,52412],{"class":53},[39,170940,150863],{"class":237},[39,170942,63],{"class":53},[39,170944,70099],{"class":237},[39,170946,52412],{"class":53},[39,170948,1911],{"class":74},[39,170950,63],{"class":53},[39,170952,152447],{"class":237},[39,170954,52412],{"class":53},[39,170956,2249],{"class":74},[39,170958,6011],{"class":53},[39,170960,170961,170963,170965,170967,170969,170971,170973,170975,170977,170979,170981,170983,170985],{"class":41,"line":125},[39,170962,149360],{"class":53},[39,170964,63654],{"class":237},[39,170966,52412],{"class":53},[39,170968,151911],{"class":237},[39,170970,63],{"class":53},[39,170972,70099],{"class":237},[39,170974,52412],{"class":53},[39,170976,1886],{"class":74},[39,170978,63],{"class":53},[39,170980,152447],{"class":237},[39,170982,52412],{"class":53},[39,170984,2071],{"class":74},[39,170986,6011],{"class":53},[39,170988,170989],{"class":41,"line":132},[39,170990,34221],{"class":53},[39,170992,170993],{"class":41,"line":138},[39,170994,122],{"emptyLinePlaceholder":121},[39,170996,170997,170999,171001,171003,171005,171007,171009,171011,171013,171015,171017,171019,171021,171023,171025,171027,171029,171031],{"class":41,"line":169},[39,170998,108808],{"class":45},[39,171000,147766],{"class":74},[39,171002,54],{"class":53},[39,171004,170775],{"class":237},[39,171006,63],{"class":53},[39,171008,152951],{"class":237},[39,171010,63],{"class":53},[39,171012,147781],{"class":59},[39,171014,1117],{"class":45},[39,171016,147786],{"class":237},[39,171018,63],{"class":53},[39,171020,170792],{"class":59},[39,171022,1117],{"class":45},[39,171024,8726],{"class":237},[39,171026,255],{"class":53},[39,171028,32358],{"class":45},[39,171030,149128],{"class":59},[39,171032,4822],{"class":53},[39,171034,171035,171038,171040,171042,171044,171046,171048,171050,171052],{"class":41,"line":190},[39,171036,171037],{"class":53},"    fieldnames ",[39,171039,1117],{"class":45},[39,171041,53201],{"class":53},[39,171043,63654],{"class":237},[39,171045,63],{"class":53},[39,171047,70099],{"class":237},[39,171049,63],{"class":53},[39,171051,152447],{"class":237},[39,171053,34221],{"class":53},[39,171055,171056,171058,171060,171063,171065,171067,171070,171072],{"class":41,"line":202},[39,171057,170809],{"class":53},[39,171059,1117],{"class":45},[39,171061,171062],{"class":53}," csv.DictWriter(",[39,171064,46329],{"class":59},[39,171066,63],{"class":53},[39,171068,171069],{"class":59},"fieldnames",[39,171071,1117],{"class":45},[39,171073,171074],{"class":53},"fieldnames)\n",[39,171076,171077],{"class":41,"line":207},[39,171078,171079],{"class":53},"    writer.writeheader()\n",[39,171081,171082],{"class":41,"line":212},[39,171083,170823],{"class":53},[14,171085,171087],{"id":171086},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171089,124267],{},[328,171091,171092,171095,171098],{},[331,171093,171094],{},"读取文本文件。",[331,171096,171097],{},"统计每个单词出现次数。",[331,171099,171100],{},"输出出现次数最多的前 10 个单词。",[19,171102,11101],{},[30,171104,171106],{"className":31353,"code":171105,"language":31355,"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",[26,171107,171108,171118,171122,171135,171151,171155,171165,171174,171178,171190,171210,171219,171223,171241,171245,171275,171279,171295],{"__ignoreMap":35},[39,171109,171110,171112,171114,171116],{"class":41,"line":42},[39,171111,31712],{"class":45},[39,171113,109286],{"class":53},[39,171115,31367],{"class":45},[39,171117,109291],{"class":53},[39,171119,171120],{"class":41,"line":92},[39,171121,122],{"emptyLinePlaceholder":121},[39,171123,171124,171126,171128,171130,171133],{"class":41,"line":112},[39,171125,169286],{"class":53},[39,171127,1117],{"class":45},[39,171129,109520],{"class":53},[39,171131,171132],{"class":237},"\"article.txt\"",[39,171134,574],{"class":53},[39,171136,171137,171139,171141,171143,171145,171147,171149],{"class":41,"line":118},[39,171138,169469],{"class":53},[39,171140,1117],{"class":45},[39,171142,170346],{"class":53},[39,171144,147781],{"class":59},[39,171146,1117],{"class":45},[39,171148,147786],{"class":237},[39,171150,574],{"class":53},[39,171152,171153],{"class":41,"line":125},[39,171154,122],{"emptyLinePlaceholder":121},[39,171156,171157,171160,171162],{"class":41,"line":132},[39,171158,171159],{"class":53},"words ",[39,171161,1117],{"class":45},[39,171163,171164],{"class":53}," content.lower().split()\n",[39,171166,171167,171170,171172],{"class":41,"line":138},[39,171168,171169],{"class":53},"counter ",[39,171171,1117],{"class":45},[39,171173,88843],{"class":53},[39,171175,171176],{"class":41,"line":169},[39,171177,122],{"emptyLinePlaceholder":121},[39,171179,171180,171182,171185,171187],{"class":41,"line":190},[39,171181,4108],{"class":45},[39,171183,171184],{"class":53}," word ",[39,171186,27018],{"class":45},[39,171188,171189],{"class":53}," words:\n",[39,171191,171192,171195,171197,171200,171203,171205,171208],{"class":41,"line":202},[39,171193,171194],{"class":53},"    word ",[39,171196,1117],{"class":45},[39,171198,171199],{"class":53}," word.strip(",[39,171201,171202],{"class":237},"\".,!?;:",[39,171204,157470],{"class":74},[39,171206,171207],{"class":237},"'()[]\"",[39,171209,574],{"class":53},[39,171211,171212,171214,171216],{"class":41,"line":207},[39,171213,4184],{"class":45},[39,171215,39905],{"class":45},[39,171217,171218],{"class":53}," word:\n",[39,171220,171221],{"class":41,"line":212},[39,171222,149487],{"class":45},[39,171224,171225,171228,171230,171233,171235,171237,171239],{"class":41,"line":223},[39,171226,171227],{"class":53},"    counter[word] ",[39,171229,1117],{"class":45},[39,171231,171232],{"class":53}," counter.get(word, ",[39,171234,1457],{"class":74},[39,171236,255],{"class":53},[39,171238,101],{"class":45},[39,171240,56674],{"class":74},[39,171242,171243],{"class":41,"line":228},[39,171244,122],{"emptyLinePlaceholder":121},[39,171246,171247,171250,171252,171254,171257,171259,171261,171263,171265,171267,171269,171271,171273],{"class":41,"line":263},[39,171248,171249],{"class":53},"items ",[39,171251,1117],{"class":45},[39,171253,164579],{"class":74},[39,171255,171256],{"class":53},"(counter.items(), ",[39,171258,154921],{"class":59},[39,171260,154924],{"class":45},[39,171262,154927],{"class":53},[39,171264,1483],{"class":74},[39,171266,113177],{"class":53},[39,171268,164503],{"class":59},[39,171270,1117],{"class":45},[39,171272,32451],{"class":74},[39,171274,574],{"class":53},[39,171276,171277],{"class":41,"line":287},[39,171278,122],{"emptyLinePlaceholder":121},[39,171280,171281,171283,171286,171288,171291,171293],{"class":41,"line":292},[39,171282,4108],{"class":45},[39,171284,171285],{"class":53}," word, count ",[39,171287,27018],{"class":45},[39,171289,171290],{"class":53}," items[:",[39,171292,423],{"class":74},[39,171294,166730],{"class":53},[39,171296,171297,171299],{"class":41,"line":305},[39,171298,32274],{"class":74},[39,171300,171301],{"class":53},"(word, count)\n",[14,171303,171305],{"id":171304},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[30,171307,171309],{"className":31353,"code":171308,"language":31355,"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",[26,171310,171311,171317,171327,171331,171343,171347,171351,171359,171369,171375,171379,171409,171419,171423,171427,171435,171465,171489,171493,171497,171505,171534,171539],{"__ignoreMap":35},[39,171312,171313,171315],{"class":41,"line":42},[39,171314,31367],{"class":45},[39,171316,148066],{"class":53},[39,171318,171319,171321,171323,171325],{"class":41,"line":92},[39,171320,31712],{"class":45},[39,171322,109286],{"class":53},[39,171324,31367],{"class":45},[39,171326,109291],{"class":53},[39,171328,171329],{"class":41,"line":112},[39,171330,122],{"emptyLinePlaceholder":121},[39,171332,171333,171335,171337,171339,171341],{"class":41,"line":118},[39,171334,152799],{"class":74},[39,171336,71],{"class":45},[39,171338,109520],{"class":53},[39,171340,152806],{"class":237},[39,171342,574],{"class":53},[39,171344,171345],{"class":41,"line":125},[39,171346,122],{"emptyLinePlaceholder":121},[39,171348,171349],{"class":41,"line":132},[39,171350,122],{"emptyLinePlaceholder":121},[39,171352,171353,171355,171357],{"class":41,"line":138},[39,171354,32922],{"class":45},[39,171356,152823],{"class":49},[39,171358,32928],{"class":53},[39,171360,171361,171363,171365,171367],{"class":41,"line":169},[39,171362,4184],{"class":45},[39,171364,39905],{"class":45},[39,171366,152834],{"class":74},[39,171368,152837],{"class":53},[39,171370,171371,171373],{"class":41,"line":190},[39,171372,15725],{"class":45},[39,171374,52813],{"class":53},[39,171376,171377],{"class":41,"line":202},[39,171378,122],{"emptyLinePlaceholder":121},[39,171380,171381,171383,171385,171387,171389,171391,171393,171395,171397,171399,171401,171403,171405,171407],{"class":41,"line":207},[39,171382,35153],{"class":45},[39,171384,147766],{"class":74},[39,171386,54],{"class":53},[39,171388,152799],{"class":74},[39,171390,63],{"class":53},[39,171392,147776],{"class":237},[39,171394,63],{"class":53},[39,171396,147781],{"class":59},[39,171398,1117],{"class":45},[39,171400,147786],{"class":237},[39,171402,255],{"class":53},[39,171404,32358],{"class":45},[39,171406,149128],{"class":59},[39,171408,4822],{"class":53},[39,171410,171411,171413,171415,171417],{"class":41,"line":212},[39,171412,15725],{"class":45},[39,171414,149139],{"class":53},[39,171416,46329],{"class":59},[39,171418,574],{"class":53},[39,171420,171421],{"class":41,"line":223},[39,171422,122],{"emptyLinePlaceholder":121},[39,171424,171425],{"class":41,"line":228},[39,171426,122],{"emptyLinePlaceholder":121},[39,171428,171429,171431,171433],{"class":41,"line":263},[39,171430,32922],{"class":45},[39,171432,152933],{"class":49},[39,171434,152936],{"class":53},[39,171436,171437,171439,171441,171443,171445,171447,171449,171451,171453,171455,171457,171459,171461,171463],{"class":41,"line":287},[39,171438,35153],{"class":45},[39,171440,147766],{"class":74},[39,171442,54],{"class":53},[39,171444,152799],{"class":74},[39,171446,63],{"class":53},[39,171448,152951],{"class":237},[39,171450,63],{"class":53},[39,171452,147781],{"class":59},[39,171454,1117],{"class":45},[39,171456,147786],{"class":237},[39,171458,255],{"class":53},[39,171460,32358],{"class":45},[39,171462,149128],{"class":59},[39,171464,4822],{"class":53},[39,171466,171467,171469,171471,171473,171475,171477,171479,171481,171483,171485,171487],{"class":41,"line":292},[39,171468,152972],{"class":53},[39,171470,46329],{"class":59},[39,171472,63],{"class":53},[39,171474,148112],{"class":59},[39,171476,1117],{"class":45},[39,171478,34962],{"class":74},[39,171480,63],{"class":53},[39,171482,152987],{"class":59},[39,171484,1117],{"class":45},[39,171486,1345],{"class":74},[39,171488,574],{"class":53},[39,171490,171491],{"class":41,"line":305},[39,171492,122],{"emptyLinePlaceholder":121},[39,171494,171495],{"class":41,"line":310},[39,171496,122],{"emptyLinePlaceholder":121},[39,171498,171499,171501,171503],{"class":41,"line":321},[39,171500,160691],{"class":53},[39,171502,1117],{"class":45},[39,171504,154017],{"class":53},[39,171506,171507,171510,171512,171514,171516,171518,171520,171522,171524,171526,171528,171530,171532],{"class":41,"line":713},[39,171508,171509],{"class":53},"students.append({",[39,171511,63654],{"class":237},[39,171513,52412],{"class":53},[39,171515,150863],{"class":237},[39,171517,63],{"class":53},[39,171519,70099],{"class":237},[39,171521,52412],{"class":53},[39,171523,1911],{"class":74},[39,171525,63],{"class":53},[39,171527,152447],{"class":237},[39,171529,52412],{"class":53},[39,171531,2249],{"class":74},[39,171533,166127],{"class":53},[39,171535,171536],{"class":41,"line":718},[39,171537,171538],{"class":53},"save_students(students)\n",[39,171540,171541,171543,171545,171548],{"class":41,"line":723},[39,171542,31390],{"class":74},[39,171544,54],{"class":53},[39,171546,171547],{"class":237},"\"保存成功\"",[39,171549,574],{"class":53},[14,171551,171553],{"id":171552},"_814-易错点","8.14 易错点",[328,171555,171556,171560,171566,171571,171578,171585],{},[331,171557,171558,169819],{},[26,171559,2055],{},[331,171561,171562,171563,29360],{},"读写中文要指定 ",[26,171564,171565],{},"encoding=\"utf-8\"",[331,171567,171568,171569,29360],{},"打开文件后要关闭，推荐使用 ",[26,171570,108808],{},[331,171572,171573,171574,171577],{},"读取大文件不要直接 ",[26,171575,171576],{},"read()"," 全部内容。",[331,171579,171580,171581,171584],{},"Windows 写 CSV 时建议加 ",[26,171582,171583],{},"newline=\"\"","，避免空行。",[331,171586,171587],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171589,171591],{"id":171590},"_815-本章练习","8.15 本章练习",[328,171593,171594,171601,171606,171609,171612],{},[331,171595,171596,171597,171600],{},"写入一个 ",[26,171598,171599],{},"students.txt","，每行保存一个学生姓名。",[331,171602,105330,171603,171605],{},[26,171604,171599],{}," 并输出所有学生。",[331,171607,171608],{},"把学生列表保存为 JSON 文件。",[331,171610,171611],{},"从 JSON 文件读取学生数据，计算平均分。",[331,171613,171614,171615,171618,171619,171622],{},"写一个日志函数 ",[26,171616,171617],{},"write_log(message)","，每次调用向 ",[26,171620,171621],{},"app.log"," 追加一行。",[1192,171624,171625],{},"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":92,"depth":92,"links":171627},[171628,171629,171633,171634,171640,171641,171642,171643,171644,171645,171646,171647,171648,171649,171650],{"id":169139,"depth":92,"text":169140},{"id":169180,"depth":92,"text":169181,"children":171630},[171631,171632],{"id":169184,"depth":112,"text":169185},{"id":169218,"depth":112,"text":169219},{"id":169332,"depth":92,"text":169333},{"id":169425,"depth":92,"text":169426,"children":171635},[171636,171637,171638,171639],{"id":169429,"depth":112,"text":169430},{"id":169516,"depth":112,"text":169517},{"id":169586,"depth":112,"text":169587},{"id":169680,"depth":112,"text":169681},{"id":169750,"depth":92,"text":169751},{"id":169813,"depth":92,"text":169814},{"id":169974,"depth":92,"text":169975},{"id":170037,"depth":92,"text":170038},{"id":170153,"depth":92,"text":170154},{"id":170363,"depth":92,"text":170364},{"id":170675,"depth":92,"text":170676},{"id":171086,"depth":92,"text":171087},{"id":171304,"depth":92,"text":171305},{"id":171552,"depth":92,"text":171553},{"id":171590,"depth":92,"text":171591},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169131,"description":24350},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171657,"title":171658,"body":171659,"description":24350,"extension":1203,"meta":173845,"navigation":121,"path":173846,"seo":173847,"stem":173848,"__hash__":173849},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171660,"toc":173812},[171661,171664,171668,171671,171674,171766,171768,171787,171792,171796,171799,171802,171831,171838,171841,171845,171848,171877,171879,171931,171937,171990,171994,172092,172095,172162,172166,172223,172225,172231,172235,172240,172246,172337,172342,172346,172349,172427,172430,172468,172472,172590,172593,172597,172600,172645,172648,172652,172657,172663,172713,172716,172747,172751,172755,172785,172789,172824,172828,172863,172903,172907,172923,172926,172930,172934,173013,173017,173058,173062,173117,173121,173155,173159,173189,173198,173205,173211,173268,173271,173279,173282,173286,173293,173296,173302,173305,173322,173327,173331,173337,173350,173353,173390,173393,173404,173407,173421,173424,173438,173442,173449,173482,173485,173487,173493,173496,173500,173502,173508,173513,173686,173690,173753,173757,173781,173785,173809],[10,171662,171658],{"id":171663},"_9-异常模块与包",[14,171665,171667],{"id":171666},"_91-什么是异常","9.1 什么是异常",[19,171669,171670],{},"异常是程序运行过程中出现的错误。",[19,171672,171673],{},"常见异常：",[1404,171675,171676,171685],{},[1407,171677,171678],{},[1410,171679,171680,171683],{},[1413,171681,171682],{},"异常",[1413,171684,26844],{},[1450,171686,171687,171697,171707,171716,171726,171736,171746,171756],{},[1410,171688,171689,171694],{},[1455,171690,171691],{},[26,171692,171693],{},"NameError",[1455,171695,171696],{},"使用了未定义变量",[1410,171698,171699,171704],{},[1455,171700,171701],{},[26,171702,171703],{},"TypeError",[1455,171705,171706],{},"类型不匹配",[1410,171708,171709,171713],{},[1455,171710,171711],{},[26,171712,155809],{},[1455,171714,171715],{},"值不合法",[1410,171717,171718,171723],{},[1455,171719,171720],{},[26,171721,171722],{},"IndexError",[1455,171724,171725],{},"列表索引越界",[1410,171727,171728,171733],{},[1455,171729,171730],{},[26,171731,171732],{},"KeyError",[1455,171734,171735],{},"字典 key 不存在",[1410,171737,171738,171743],{},[1455,171739,171740],{},[26,171741,171742],{},"FileNotFoundError",[1455,171744,171745],{},"文件不存在",[1410,171747,171748,171753],{},[1455,171749,171750],{},[26,171751,171752],{},"ZeroDivisionError",[1455,171754,171755],{},"除数为 0",[1410,171757,171758,171763],{},[1455,171759,171760],{},[26,171761,171762],{},"ImportError",[1455,171764,171765],{},"导入失败",[19,171767,16108],{},[30,171769,171771],{"className":31353,"code":171770,"language":31355,"meta":35,"style":35},"num = int(\"abc\")\n",[26,171772,171773],{"__ignoreMap":35},[39,171774,171775,171777,171779,171781,171783,171785],{"class":41,"line":42},[39,171776,156762],{"class":53},[39,171778,1117],{"class":45},[39,171780,963],{"class":74},[39,171782,54],{"class":53},[39,171784,156855],{"class":237},[39,171786,574],{"class":53},[19,171788,171789,171790,29360],{},"会触发 ",[26,171791,155809],{},[14,171793,171795],{"id":171794},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171797,171798],{},"如果不处理异常，程序会直接终止。",[19,171800,171801],{},"例如用户输入年龄：",[30,171803,171805],{"className":31353,"code":171804,"language":31355,"meta":35,"style":35},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[26,171806,171807,171825],{"__ignoreMap":35},[39,171808,171809,171811,171813,171815,171817,171819,171821,171823],{"class":41,"line":42},[39,171810,147521],{"class":53},[39,171812,1117],{"class":45},[39,171814,963],{"class":74},[39,171816,54],{"class":53},[39,171818,54796],{"class":74},[39,171820,54],{"class":53},[39,171822,153369],{"class":237},[39,171824,31472],{"class":53},[39,171826,171827,171829],{"class":41,"line":92},[39,171828,31390],{"class":74},[39,171830,156736],{"class":53},[19,171832,171833,171834,171837],{},"用户输入 ",[26,171835,171836],{},"abc","，程序就会报错退出。",[19,171839,171840],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171842,171844],{"id":171843},"_93-try-except","9.3 try except",[19,171846,171847],{},"基础语法：",[30,171849,171851],{"className":31353,"code":171850,"language":31355,"meta":35,"style":35},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[26,171852,171853,171860,171865,171872],{"__ignoreMap":35},[39,171854,171855,171858],{"class":41,"line":42},[39,171856,171857],{"class":45},"try",[39,171859,4822],{"class":53},[39,171861,171862],{"class":41,"line":92},[39,171863,171864],{"class":53},"    可能出错的代码\n",[39,171866,171867,171870],{"class":41,"line":112},[39,171868,171869],{"class":45},"except",[39,171871,4822],{"class":53},[39,171873,171874],{"class":41,"line":118},[39,171875,171876],{"class":53},"    出错后的处理代码\n",[19,171878,16108],{},[30,171880,171882],{"className":31353,"code":171881,"language":31355,"meta":35,"style":35},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[26,171883,171884,171890,171908,171914,171920],{"__ignoreMap":35},[39,171885,171886,171888],{"class":41,"line":42},[39,171887,171857],{"class":45},[39,171889,4822],{"class":53},[39,171891,171892,171894,171896,171898,171900,171902,171904,171906],{"class":41,"line":92},[39,171893,153361],{"class":53},[39,171895,1117],{"class":45},[39,171897,963],{"class":74},[39,171899,54],{"class":53},[39,171901,54796],{"class":74},[39,171903,54],{"class":53},[39,171905,153369],{"class":237},[39,171907,31472],{"class":53},[39,171909,171910,171912],{"class":41,"line":112},[39,171911,32274],{"class":74},[39,171913,156736],{"class":53},[39,171915,171916,171918],{"class":41,"line":118},[39,171917,171869],{"class":45},[39,171919,4822],{"class":53},[39,171921,171922,171924,171926,171929],{"class":41,"line":125},[39,171923,32274],{"class":74},[39,171925,54],{"class":53},[39,171927,171928],{"class":237},"\"年龄必须是数字\"",[39,171930,574],{"class":53},[19,171932,171933,171934,171936],{},"不建议裸写 ",[26,171935,171869],{},"，最好指定异常类型。",[30,171938,171940],{"className":31353,"code":171939,"language":31355,"meta":35,"style":35},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[26,171941,171942,171948,171966,171972,171980],{"__ignoreMap":35},[39,171943,171944,171946],{"class":41,"line":42},[39,171945,171857],{"class":45},[39,171947,4822],{"class":53},[39,171949,171950,171952,171954,171956,171958,171960,171962,171964],{"class":41,"line":92},[39,171951,153361],{"class":53},[39,171953,1117],{"class":45},[39,171955,963],{"class":74},[39,171957,54],{"class":53},[39,171959,54796],{"class":74},[39,171961,54],{"class":53},[39,171963,153369],{"class":237},[39,171965,31472],{"class":53},[39,171967,171968,171970],{"class":41,"line":112},[39,171969,32274],{"class":74},[39,171971,156736],{"class":53},[39,171973,171974,171976,171978],{"class":41,"line":118},[39,171975,171869],{"class":45},[39,171977,153201],{"class":74},[39,171979,4822],{"class":53},[39,171981,171982,171984,171986,171988],{"class":41,"line":125},[39,171983,32274],{"class":74},[39,171985,54],{"class":53},[39,171987,171928],{"class":237},[39,171989,574],{"class":53},[14,171991,171993],{"id":171992},"_94-捕获多个异常","9.4 捕获多个异常",[30,171995,171997],{"className":31353,"code":171996,"language":31355,"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",[26,171998,171999,172005,172026,172046,172053,172061,172072,172081],{"__ignoreMap":35},[39,172000,172001,172003],{"class":41,"line":42},[39,172002,171857],{"class":45},[39,172004,4822],{"class":53},[39,172006,172007,172010,172012,172014,172016,172018,172020,172022,172024],{"class":41,"line":92},[39,172008,172009],{"class":53},"    nums ",[39,172011,1117],{"class":45},[39,172013,53201],{"class":53},[39,172015,1483],{"class":74},[39,172017,63],{"class":53},[39,172019,1345],{"class":74},[39,172021,63],{"class":53},[39,172023,1339],{"class":74},[39,172025,34221],{"class":53},[39,172027,172028,172031,172033,172035,172037,172039,172041,172044],{"class":41,"line":112},[39,172029,172030],{"class":53},"    index ",[39,172032,1117],{"class":45},[39,172034,963],{"class":74},[39,172036,54],{"class":53},[39,172038,54796],{"class":74},[39,172040,54],{"class":53},[39,172042,172043],{"class":237},"\"请输入索引:\"",[39,172045,31472],{"class":53},[39,172047,172048,172050],{"class":41,"line":118},[39,172049,32274],{"class":74},[39,172051,172052],{"class":53},"(nums[index])\n",[39,172054,172055,172057,172059],{"class":41,"line":125},[39,172056,171869],{"class":45},[39,172058,153201],{"class":74},[39,172060,4822],{"class":53},[39,172062,172063,172065,172067,172070],{"class":41,"line":132},[39,172064,32274],{"class":74},[39,172066,54],{"class":53},[39,172068,172069],{"class":237},"\"索引必须是整数\"",[39,172071,574],{"class":53},[39,172073,172074,172076,172079],{"class":41,"line":138},[39,172075,171869],{"class":45},[39,172077,172078],{"class":74}," IndexError",[39,172080,4822],{"class":53},[39,172082,172083,172085,172087,172090],{"class":41,"line":169},[39,172084,32274],{"class":74},[39,172086,54],{"class":53},[39,172088,172089],{"class":237},"\"索引越界\"",[39,172091,574],{"class":53},[19,172093,172094],{},"多个异常使用相同处理逻辑：",[30,172096,172098],{"className":31353,"code":172097,"language":31355,"meta":35,"style":35},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[26,172099,172100,172106,172124,172137,172151],{"__ignoreMap":35},[39,172101,172102,172104],{"class":41,"line":42},[39,172103,171857],{"class":45},[39,172105,4822],{"class":53},[39,172107,172108,172110,172112,172114,172116,172118,172120,172122],{"class":41,"line":92},[39,172109,46568],{"class":53},[39,172111,1117],{"class":45},[39,172113,963],{"class":74},[39,172115,54],{"class":53},[39,172117,54796],{"class":74},[39,172119,54],{"class":53},[39,172121,156771],{"class":237},[39,172123,31472],{"class":53},[39,172125,172126,172128,172130,172132,172134],{"class":41,"line":112},[39,172127,32274],{"class":74},[39,172129,54],{"class":53},[39,172131,423],{"class":74},[39,172133,157021],{"class":45},[39,172135,172136],{"class":53}," num)\n",[39,172138,172139,172141,172143,172145,172147,172149],{"class":41,"line":118},[39,172140,171869],{"class":45},[39,172142,2772],{"class":53},[39,172144,155809],{"class":74},[39,172146,63],{"class":53},[39,172148,171752],{"class":74},[39,172150,31761],{"class":53},[39,172152,172153,172155,172157,172160],{"class":41,"line":125},[39,172154,32274],{"class":74},[39,172156,54],{"class":53},[39,172158,172159],{"class":237},"\"输入不合法\"",[39,172161,574],{"class":53},[14,172163,172165],{"id":172164},"_95-获取异常信息","9.5 获取异常信息",[30,172167,172169],{"className":31353,"code":172168,"language":31355,"meta":35,"style":35},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[26,172170,172171,172177,172191,172202],{"__ignoreMap":35},[39,172172,172173,172175],{"class":41,"line":42},[39,172174,171857],{"class":45},[39,172176,4822],{"class":53},[39,172178,172179,172181,172183,172185,172187,172189],{"class":41,"line":92},[39,172180,46568],{"class":53},[39,172182,1117],{"class":45},[39,172184,963],{"class":74},[39,172186,54],{"class":53},[39,172188,156855],{"class":237},[39,172190,574],{"class":53},[39,172192,172193,172195,172197,172199],{"class":41,"line":112},[39,172194,171869],{"class":45},[39,172196,153201],{"class":74},[39,172198,65579],{"class":45},[39,172200,172201],{"class":53}," e:\n",[39,172203,172204,172206,172208,172210,172213,172215,172217,172219,172221],{"class":41,"line":118},[39,172205,32274],{"class":74},[39,172207,54],{"class":53},[39,172209,1321],{"class":45},[39,172211,172212],{"class":237},"\"出错了:",[39,172214,2156],{"class":74},[39,172216,1342],{"class":53},[39,172218,2206],{"class":74},[39,172220,1516],{"class":237},[39,172222,574],{"class":53},[19,172224,147432],{},[30,172226,172229],{"className":172227,"code":172228,"language":6267,"meta":35},[6265],"出错了:invalid literal for int() with base 10: 'abc'\n",[26,172230,172228],{"__ignoreMap":35},[14,172232,172234],{"id":172233},"_96-else和finally","9.6 else和finally",[19,172236,172237,172239],{},[26,172238,2811],{},"：没有异常时执行。",[19,172241,172242,172245],{},[26,172243,172244],{},"finally","：无论是否异常都会执行。",[30,172247,172249],{"className":31353,"code":172248,"language":31355,"meta":35,"style":35},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[26,172250,172251,172257,172275,172283,172293,172299,172320,172326],{"__ignoreMap":35},[39,172252,172253,172255],{"class":41,"line":42},[39,172254,171857],{"class":45},[39,172256,4822],{"class":53},[39,172258,172259,172261,172263,172265,172267,172269,172271,172273],{"class":41,"line":92},[39,172260,46568],{"class":53},[39,172262,1117],{"class":45},[39,172264,963],{"class":74},[39,172266,54],{"class":53},[39,172268,54796],{"class":74},[39,172270,54],{"class":53},[39,172272,156771],{"class":237},[39,172274,31472],{"class":53},[39,172276,172277,172279,172281],{"class":41,"line":112},[39,172278,171869],{"class":45},[39,172280,153201],{"class":74},[39,172282,4822],{"class":53},[39,172284,172285,172287,172289,172291],{"class":41,"line":118},[39,172286,32274],{"class":74},[39,172288,54],{"class":53},[39,172290,154189],{"class":237},[39,172292,574],{"class":53},[39,172294,172295,172297],{"class":41,"line":125},[39,172296,2811],{"class":45},[39,172298,4822],{"class":53},[39,172300,172301,172303,172305,172307,172310,172312,172314,172316,172318],{"class":41,"line":132},[39,172302,32274],{"class":74},[39,172304,54],{"class":53},[39,172306,1321],{"class":45},[39,172308,172309],{"class":237},"\"输入正确:",[39,172311,2156],{"class":74},[39,172313,2779],{"class":53},[39,172315,2206],{"class":74},[39,172317,1516],{"class":237},[39,172319,574],{"class":53},[39,172321,172322,172324],{"class":41,"line":138},[39,172323,172244],{"class":45},[39,172325,4822],{"class":53},[39,172327,172328,172330,172332,172335],{"class":41,"line":169},[39,172329,32274],{"class":74},[39,172331,54],{"class":53},[39,172333,172334],{"class":237},"\"程序结束\"",[39,172336,574],{"class":53},[19,172338,172339,172341],{},[26,172340,172244],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172343,172345],{"id":172344},"_97-抛出异常","9.7 抛出异常",[19,172347,172348],{},"程序可以主动抛出异常。",[30,172350,172352],{"className":31353,"code":172351,"language":31355,"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",[26,172353,172354,172363,172375,172388,172408,172412,172416],{"__ignoreMap":35},[39,172355,172356,172358,172361],{"class":41,"line":42},[39,172357,32922],{"class":45},[39,172359,172360],{"class":49}," set_age",[39,172362,162390],{"class":53},[39,172364,172365,172367,172369,172371,172373],{"class":41,"line":92},[39,172366,4184],{"class":45},[39,172368,16680],{"class":53},[39,172370,2170],{"class":45},[39,172372,315],{"class":74},[39,172374,4822],{"class":53},[39,172376,172377,172379,172381,172383,172386],{"class":41,"line":112},[39,172378,104407],{"class":45},[39,172380,153201],{"class":74},[39,172382,54],{"class":53},[39,172384,172385],{"class":237},"\"年龄不能为负数\"",[39,172387,574],{"class":53},[39,172389,172390,172392,172394,172396,172398,172400,172402,172404,172406],{"class":41,"line":118},[39,172391,32274],{"class":74},[39,172393,54],{"class":53},[39,172395,1321],{"class":45},[39,172397,162958],{"class":237},[39,172399,2156],{"class":74},[39,172401,71196],{"class":53},[39,172403,2206],{"class":74},[39,172405,1516],{"class":237},[39,172407,574],{"class":53},[39,172409,172410],{"class":41,"line":125},[39,172411,122],{"emptyLinePlaceholder":121},[39,172413,172414],{"class":41,"line":132},[39,172415,122],{"emptyLinePlaceholder":121},[39,172417,172418,172421,172423,172425],{"class":41,"line":138},[39,172419,172420],{"class":53},"set_age(",[39,172422,1793],{"class":45},[39,172424,1483],{"class":74},[39,172426,574],{"class":53},[19,172428,172429],{},"调用者可以捕获：",[30,172431,172433],{"className":31353,"code":172432,"language":31355,"meta":35,"style":35},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[26,172434,172435,172441,172452,172462],{"__ignoreMap":35},[39,172436,172437,172439],{"class":41,"line":42},[39,172438,171857],{"class":45},[39,172440,4822],{"class":53},[39,172442,172443,172446,172448,172450],{"class":41,"line":92},[39,172444,172445],{"class":53},"    set_age(",[39,172447,1793],{"class":45},[39,172449,1483],{"class":74},[39,172451,574],{"class":53},[39,172453,172454,172456,172458,172460],{"class":41,"line":112},[39,172455,171869],{"class":45},[39,172457,153201],{"class":74},[39,172459,65579],{"class":45},[39,172461,172201],{"class":53},[39,172463,172464,172466],{"class":41,"line":118},[39,172465,32274],{"class":74},[39,172467,67974],{"class":53},[14,172469,172471],{"id":172470},"_98-自定义异常","9.8 自定义异常",[30,172473,172475],{"className":31353,"code":172474,"language":31355,"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",[26,172476,172477,172491,172495,172499,172503,172511,172521,172532,172542,172546,172550,172556,172573,172584],{"__ignoreMap":35},[39,172478,172479,172481,172484,172486,172489],{"class":41,"line":42},[39,172480,15667],{"class":45},[39,172482,172483],{"class":49}," BalanceNotEnoughError",[39,172485,54],{"class":53},[39,172487,172488],{"class":74},"Exception",[39,172490,31761],{"class":53},[39,172492,172493],{"class":41,"line":92},[39,172494,150512],{"class":45},[39,172496,172497],{"class":41,"line":112},[39,172498,122],{"emptyLinePlaceholder":121},[39,172500,172501],{"class":41,"line":118},[39,172502,122],{"emptyLinePlaceholder":121},[39,172504,172505,172507,172509],{"class":41,"line":125},[39,172506,32922],{"class":45},[39,172508,151161],{"class":49},[39,172510,163787],{"class":53},[39,172512,172513,172515,172517,172519],{"class":41,"line":132},[39,172514,4184],{"class":45},[39,172516,151117],{"class":53},[39,172518,2220],{"class":45},[39,172520,163564],{"class":53},[39,172522,172523,172525,172528,172530],{"class":41,"line":138},[39,172524,104407],{"class":45},[39,172526,172527],{"class":53}," BalanceNotEnoughError(",[39,172529,151212],{"class":237},[39,172531,574],{"class":53},[39,172533,172534,172536,172538,172540],{"class":41,"line":169},[39,172535,95],{"class":45},[39,172537,163794],{"class":53},[39,172539,1793],{"class":45},[39,172541,151150],{"class":53},[39,172543,172544],{"class":41,"line":190},[39,172545,122],{"emptyLinePlaceholder":121},[39,172547,172548],{"class":41,"line":202},[39,172549,122],{"emptyLinePlaceholder":121},[39,172551,172552,172554],{"class":41,"line":207},[39,172553,171857],{"class":45},[39,172555,4822],{"class":53},[39,172557,172558,172560,172562,172565,172567,172569,172571],{"class":41,"line":212},[39,172559,163465],{"class":53},[39,172561,1117],{"class":45},[39,172563,172564],{"class":53}," withdraw(",[39,172566,278],{"class":74},[39,172568,63],{"class":53},[39,172570,2832],{"class":74},[39,172572,574],{"class":53},[39,172574,172575,172577,172580,172582],{"class":41,"line":223},[39,172576,171869],{"class":45},[39,172578,172579],{"class":53}," BalanceNotEnoughError ",[39,172581,32358],{"class":45},[39,172583,172201],{"class":53},[39,172585,172586,172588],{"class":41,"line":228},[39,172587,32274],{"class":74},[39,172589,67974],{"class":53},[19,172591,172592],{},"入门阶段大多数情况使用内置异常即可。",[14,172594,172596],{"id":172595},"_99-traceback","9.9 traceback",[19,172598,172599],{},"调试时可以输出完整异常堆栈。",[30,172601,172603],{"className":31353,"code":172602,"language":31355,"meta":35,"style":35},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[26,172604,172605,172612,172616,172622,172632,172640],{"__ignoreMap":35},[39,172606,172607,172609],{"class":41,"line":42},[39,172608,31367],{"class":45},[39,172610,172611],{"class":53}," traceback\n",[39,172613,172614],{"class":41,"line":92},[39,172615,122],{"emptyLinePlaceholder":121},[39,172617,172618,172620],{"class":41,"line":112},[39,172619,171857],{"class":45},[39,172621,4822],{"class":53},[39,172623,172624,172626,172628,172630],{"class":41,"line":118},[39,172625,1112],{"class":74},[39,172627,54],{"class":53},[39,172629,156855],{"class":237},[39,172631,574],{"class":53},[39,172633,172634,172636,172638],{"class":41,"line":125},[39,172635,171869],{"class":45},[39,172637,153201],{"class":74},[39,172639,4822],{"class":53},[39,172641,172642],{"class":41,"line":132},[39,172643,172644],{"class":53},"    traceback.print_exc()\n",[19,172646,172647],{},"日志系统中常把异常堆栈记录到文件。",[14,172649,172651],{"id":172650},"_910-什么是模块","9.10 什么是模块",[19,172653,172654,172655,126958],{},"模块就是一个 ",[26,172656,147327],{},[19,172658,172659,172660,25593],{},"例如创建 ",[26,172661,172662],{},"my_math.py",[30,172664,172666],{"className":31353,"code":172665,"language":31355,"meta":35,"style":35},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[26,172667,172668,172676,172686,172690,172694,172703],{"__ignoreMap":35},[39,172669,172670,172672,172674],{"class":41,"line":42},[39,172671,32922],{"class":45},[39,172673,6289],{"class":49},[39,172675,152068],{"class":53},[39,172677,172678,172680,172682,172684],{"class":41,"line":92},[39,172679,95],{"class":45},[39,172681,98],{"class":53},[39,172683,101],{"class":45},[39,172685,152079],{"class":53},[39,172687,172688],{"class":41,"line":112},[39,172689,122],{"emptyLinePlaceholder":121},[39,172691,172692],{"class":41,"line":118},[39,172693,122],{"emptyLinePlaceholder":121},[39,172695,172696,172698,172701],{"class":41,"line":125},[39,172697,32922],{"class":45},[39,172699,172700],{"class":49}," sub",[39,172702,152068],{"class":53},[39,172704,172705,172707,172709,172711],{"class":41,"line":132},[39,172706,95],{"class":45},[39,172708,98],{"class":53},[39,172710,1793],{"class":45},[39,172712,152079],{"class":53},[19,172714,172715],{},"在另一个文件中导入：",[30,172717,172719],{"className":31353,"code":172718,"language":31355,"meta":35,"style":35},"import my_math\n\nprint(my_math.add(1, 2))\n",[26,172720,172721,172728,172732],{"__ignoreMap":35},[39,172722,172723,172725],{"class":41,"line":42},[39,172724,31367],{"class":45},[39,172726,172727],{"class":53}," my_math\n",[39,172729,172730],{"class":41,"line":92},[39,172731,122],{"emptyLinePlaceholder":121},[39,172733,172734,172736,172739,172741,172743,172745],{"class":41,"line":112},[39,172735,31390],{"class":74},[39,172737,172738],{"class":53},"(my_math.add(",[39,172740,1483],{"class":74},[39,172742,63],{"class":53},[39,172744,1345],{"class":74},[39,172746,31472],{"class":53},[14,172748,172750],{"id":172749},"_911-import导入","9.11 import导入",[476,172752,172754],{"id":172753},"_9111-导入模块","9.11.1 导入模块",[30,172756,172758],{"className":31353,"code":172757,"language":31355,"meta":35,"style":35},"import random\n\nprint(random.randint(1, 10))\n",[26,172759,172760,172766,172770],{"__ignoreMap":35},[39,172761,172762,172764],{"class":41,"line":42},[39,172763,31367],{"class":45},[39,172765,46303],{"class":53},[39,172767,172768],{"class":41,"line":92},[39,172769,122],{"emptyLinePlaceholder":121},[39,172771,172772,172774,172777,172779,172781,172783],{"class":41,"line":112},[39,172773,31390],{"class":74},[39,172775,172776],{"class":53},"(random.randint(",[39,172778,1483],{"class":74},[39,172780,63],{"class":53},[39,172782,423],{"class":74},[39,172784,31472],{"class":53},[476,172786,172788],{"id":172787},"_9112-导入指定内容","9.11.2 导入指定内容",[30,172790,172792],{"className":31353,"code":172791,"language":31355,"meta":35,"style":35},"from random import randint\n\nprint(randint(1, 10))\n",[26,172793,172794,172805,172809],{"__ignoreMap":35},[39,172795,172796,172798,172800,172802],{"class":41,"line":42},[39,172797,31712],{"class":45},[39,172799,58771],{"class":53},[39,172801,31367],{"class":45},[39,172803,172804],{"class":53}," randint\n",[39,172806,172807],{"class":41,"line":92},[39,172808,122],{"emptyLinePlaceholder":121},[39,172810,172811,172813,172816,172818,172820,172822],{"class":41,"line":112},[39,172812,31390],{"class":74},[39,172814,172815],{"class":53},"(randint(",[39,172817,1483],{"class":74},[39,172819,63],{"class":53},[39,172821,423],{"class":74},[39,172823,31472],{"class":53},[476,172825,172827],{"id":172826},"_9113-起别名","9.11.3 起别名",[30,172829,172831],{"className":31353,"code":172830,"language":31355,"meta":35,"style":35},"import random as rd\n\nprint(rd.randint(1, 10))\n",[26,172832,172833,172844,172848],{"__ignoreMap":35},[39,172834,172835,172837,172839,172841],{"class":41,"line":42},[39,172836,31367],{"class":45},[39,172838,58771],{"class":53},[39,172840,32358],{"class":45},[39,172842,172843],{"class":53}," rd\n",[39,172845,172846],{"class":41,"line":92},[39,172847,122],{"emptyLinePlaceholder":121},[39,172849,172850,172852,172855,172857,172859,172861],{"class":41,"line":112},[39,172851,31390],{"class":74},[39,172853,172854],{"class":53},"(rd.randint(",[39,172856,1483],{"class":74},[39,172858,63],{"class":53},[39,172860,423],{"class":74},[39,172862,31472],{"class":53},[30,172864,172866],{"className":31353,"code":172865,"language":31355,"meta":35,"style":35},"from random import randint as rint\n\nprint(rint(1, 10))\n",[26,172867,172868,172884,172888],{"__ignoreMap":35},[39,172869,172870,172872,172874,172876,172879,172881],{"class":41,"line":42},[39,172871,31712],{"class":45},[39,172873,58771],{"class":53},[39,172875,31367],{"class":45},[39,172877,172878],{"class":53}," randint ",[39,172880,32358],{"class":45},[39,172882,172883],{"class":53}," rint\n",[39,172885,172886],{"class":41,"line":92},[39,172887,122],{"emptyLinePlaceholder":121},[39,172889,172890,172892,172895,172897,172899,172901],{"class":41,"line":112},[39,172891,31390],{"class":74},[39,172893,172894],{"class":53},"(rint(",[39,172896,1483],{"class":74},[39,172898,63],{"class":53},[39,172900,423],{"class":74},[39,172902,31472],{"class":53},[476,172904,172906],{"id":172905},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[30,172908,172910],{"className":31353,"code":172909,"language":31355,"meta":35,"style":35},"from random import *\n",[26,172911,172912],{"__ignoreMap":35},[39,172913,172914,172916,172918,172920],{"class":41,"line":42},[39,172915,31712],{"class":45},[39,172917,58771],{"class":53},[39,172919,31367],{"class":45},[39,172921,172922],{"class":45}," *\n",[19,172924,172925],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172927,172929],{"id":172928},"_912-常用内置模块","9.12 常用内置模块",[476,172931,172933],{"id":172932},"_9121-random","9.12.1 random",[30,172935,172937],{"className":31353,"code":172936,"language":31355,"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",[26,172938,172939,172945,172949,172963,172982],{"__ignoreMap":35},[39,172940,172941,172943],{"class":41,"line":42},[39,172942,31367],{"class":45},[39,172944,46303],{"class":53},[39,172946,172947],{"class":41,"line":92},[39,172948,122],{"emptyLinePlaceholder":121},[39,172950,172951,172953,172955,172957,172959,172961],{"class":41,"line":112},[39,172952,31390],{"class":74},[39,172954,172776],{"class":53},[39,172956,1483],{"class":74},[39,172958,63],{"class":53},[39,172960,423],{"class":74},[39,172962,31472],{"class":53},[39,172964,172965,172967,172970,172972,172974,172976,172978,172980],{"class":41,"line":118},[39,172966,31390],{"class":74},[39,172968,172969],{"class":53},"(random.choice([",[39,172971,150863],{"class":237},[39,172973,63],{"class":53},[39,172975,151911],{"class":237},[39,172977,63],{"class":53},[39,172979,160706],{"class":237},[39,172981,34118],{"class":53},[39,172983,172984,172986,172989,172991,172993,172995,172997,172999,173001,173003,173005,173007,173009,173011],{"class":41,"line":125},[39,172985,31390],{"class":74},[39,172987,172988],{"class":53},"(random.sample([",[39,172990,1483],{"class":74},[39,172992,63],{"class":53},[39,172994,1345],{"class":74},[39,172996,63],{"class":53},[39,172998,1339],{"class":74},[39,173000,63],{"class":53},[39,173002,1558],{"class":74},[39,173004,63],{"class":53},[39,173006,1583],{"class":74},[39,173008,113177],{"class":53},[39,173010,1345],{"class":74},[39,173012,31472],{"class":53},[476,173014,173016],{"id":173015},"_9122-time","9.12.2 time",[30,173018,173020],{"className":31353,"code":173019,"language":31355,"meta":35,"style":35},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[26,173021,173022,173028,173032,173039,173047],{"__ignoreMap":35},[39,173023,173024,173026],{"class":41,"line":42},[39,173025,31367],{"class":45},[39,173027,32804],{"class":53},[39,173029,173030],{"class":41,"line":92},[39,173031,122],{"emptyLinePlaceholder":121},[39,173033,173034,173036],{"class":41,"line":112},[39,173035,31390],{"class":74},[39,173037,173038],{"class":53},"(time.time())\n",[39,173040,173041,173043,173045],{"class":41,"line":118},[39,173042,96046],{"class":53},[39,173044,1483],{"class":74},[39,173046,574],{"class":53},[39,173048,173049,173051,173053,173056],{"class":41,"line":125},[39,173050,31390],{"class":74},[39,173052,54],{"class":53},[39,173054,173055],{"class":237},"\"1秒后执行\"",[39,173057,574],{"class":53},[476,173059,173061],{"id":173060},"_9123-datetime","9.12.3 datetime",[30,173063,173065],{"className":31353,"code":173064,"language":31355,"meta":35,"style":35},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[26,173066,173067,173079,173083,173093,173100],{"__ignoreMap":35},[39,173068,173069,173071,173074,173076],{"class":41,"line":42},[39,173070,31712],{"class":45},[39,173072,173073],{"class":53}," datetime ",[39,173075,31367],{"class":45},[39,173077,173078],{"class":53}," datetime\n",[39,173080,173081],{"class":41,"line":92},[39,173082,122],{"emptyLinePlaceholder":121},[39,173084,173085,173088,173090],{"class":41,"line":112},[39,173086,173087],{"class":53},"now ",[39,173089,1117],{"class":45},[39,173091,173092],{"class":53}," datetime.now()\n",[39,173094,173095,173097],{"class":41,"line":118},[39,173096,31390],{"class":74},[39,173098,173099],{"class":53},"(now)\n",[39,173101,173102,173104,173107,173110,173112,173115],{"class":41,"line":125},[39,173103,31390],{"class":74},[39,173105,173106],{"class":53},"(now.strftime(",[39,173108,173109],{"class":237},"\"%Y-%m-",[39,173111,157666],{"class":74},[39,173113,173114],{"class":237}," %H:%M:%S\"",[39,173116,31472],{"class":53},[476,173118,173120],{"id":173119},"_9124-os","9.12.4 os",[30,173122,173124],{"className":31353,"code":173123,"language":31355,"meta":35,"style":35},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[26,173125,173126,173132,173136,173143],{"__ignoreMap":35},[39,173127,173128,173130],{"class":41,"line":42},[39,173129,31367],{"class":45},[39,173131,46280],{"class":53},[39,173133,173134],{"class":41,"line":92},[39,173135,122],{"emptyLinePlaceholder":121},[39,173137,173138,173140],{"class":41,"line":112},[39,173139,31390],{"class":74},[39,173141,173142],{"class":53},"(os.getcwd())\n",[39,173144,173145,173147,173150,173153],{"class":41,"line":118},[39,173146,31390],{"class":74},[39,173148,173149],{"class":53},"(os.listdir(",[39,173151,173152],{"class":237},"\".\"",[39,173154,31472],{"class":53},[476,173156,173158],{"id":173157},"_9125-sys","9.12.5 sys",[30,173160,173162],{"className":31353,"code":173161,"language":31355,"meta":35,"style":35},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[26,173163,173164,173171,173175,173182],{"__ignoreMap":35},[39,173165,173166,173168],{"class":41,"line":42},[39,173167,31367],{"class":45},[39,173169,173170],{"class":53}," sys\n",[39,173172,173173],{"class":41,"line":92},[39,173174,122],{"emptyLinePlaceholder":121},[39,173176,173177,173179],{"class":41,"line":112},[39,173178,31390],{"class":74},[39,173180,173181],{"class":53},"(sys.version)\n",[39,173183,173184,173186],{"class":41,"line":118},[39,173185,31390],{"class":74},[39,173187,173188],{"class":53},"(sys.path)\n",[14,173190,173192,173193,173195,173196,1516],{"id":173191},"_913-if-name-main","9.13 if ",[350,173194,80785],{}," == \"",[350,173197,103033],{},[19,173199,173200,173201,173204],{},"模块被直接运行和被导入时，",[26,173202,173203],{},"__name__"," 的值不同。",[19,173206,173207,173208,25593],{},"创建 ",[26,173209,173210],{},"my_module.py",[30,173212,173214],{"className":31353,"code":173213,"language":31355,"meta":35,"style":35},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[26,173215,173216,173224,173234,173238,173242,173254],{"__ignoreMap":35},[39,173217,173218,173220,173222],{"class":41,"line":42},[39,173219,32922],{"class":45},[39,173221,6289],{"class":49},[39,173223,152068],{"class":53},[39,173225,173226,173228,173230,173232],{"class":41,"line":92},[39,173227,95],{"class":45},[39,173229,98],{"class":53},[39,173231,101],{"class":45},[39,173233,152079],{"class":53},[39,173235,173236],{"class":41,"line":112},[39,173237,122],{"emptyLinePlaceholder":121},[39,173239,173240],{"class":41,"line":118},[39,173241,122],{"emptyLinePlaceholder":121},[39,173243,173244,173246,173248,173250,173252],{"class":41,"line":125},[39,173245,2654],{"class":45},[39,173247,32195],{"class":74},[39,173249,102534],{"class":45},[39,173251,102537],{"class":237},[39,173253,4822],{"class":53},[39,173255,173256,173258,173260,173262,173264,173266],{"class":41,"line":132},[39,173257,32274],{"class":74},[39,173259,167575],{"class":53},[39,173261,1483],{"class":74},[39,173263,63],{"class":53},[39,173265,1345],{"class":74},[39,173267,31472],{"class":53},[19,173269,173270],{},"作用：",[328,173272,173273,173276],{},[331,173274,173275],{},"直接运行该文件时，执行测试代码。",[331,173277,173278],{},"被其他文件导入时，不执行测试代码。",[19,173280,173281],{},"这是写模块时很常用的习惯。",[14,173283,173285],{"id":173284},"_914-包","9.14 包",[19,173287,173288,173289,173292],{},"包是包含 ",[26,173290,173291],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173294,173295],{},"目录结构：",[30,173297,173300],{"className":173298,"code":173299,"language":6267,"meta":35},[6265],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[26,173301,173299],{"__ignoreMap":35},[19,173303,173304],{},"导入：",[30,173306,173308],{"className":31353,"code":173307,"language":31355,"meta":35,"style":35},"from utils.file_utils import read_file\n",[26,173309,173310],{"__ignoreMap":35},[39,173311,173312,173314,173317,173319],{"class":41,"line":42},[39,173313,31712],{"class":45},[39,173315,173316],{"class":53}," utils.file_utils ",[39,173318,31367],{"class":45},[39,173320,173321],{"class":53}," read_file\n",[19,173323,173324,173326],{},[26,173325,173291],{}," 可以为空，也可以写包初始化逻辑。",[14,173328,173330],{"id":173329},"_915-第三方包","9.15 第三方包",[19,173332,173333,173334,173336],{},"第三方包通过 ",[26,173335,24805],{}," 安装。",[30,173338,173340],{"className":24796,"code":173339,"language":24798,"meta":35,"style":35},"pip install requests\n",[26,173341,173342],{"__ignoreMap":35},[39,173343,173344,173346,173348],{"class":41,"line":42},[39,173345,24805],{"class":49},[39,173347,24808],{"class":237},[39,173349,147073],{"class":237},[19,173351,173352],{},"使用：",[30,173354,173356],{"className":31353,"code":173355,"language":31355,"meta":35,"style":35},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[26,173357,173358,173364,173368,173383],{"__ignoreMap":35},[39,173359,173360,173362],{"class":41,"line":42},[39,173361,31367],{"class":45},[39,173363,147073],{"class":53},[39,173365,173366],{"class":41,"line":92},[39,173367,122],{"emptyLinePlaceholder":121},[39,173369,173370,173373,173375,173378,173381],{"class":41,"line":112},[39,173371,173372],{"class":53},"response ",[39,173374,1117],{"class":45},[39,173376,173377],{"class":53}," requests.get(",[39,173379,173380],{"class":237},"\"https:\u002F\u002Fwww.example.com\"",[39,173382,574],{"class":53},[39,173384,173385,173387],{"class":41,"line":118},[39,173386,31390],{"class":74},[39,173388,173389],{"class":53},"(response.status_code)\n",[19,173391,173392],{},"查看已安装包：",[30,173394,173396],{"className":24796,"code":173395,"language":24798,"meta":35,"style":35},"pip list\n",[26,173397,173398],{"__ignoreMap":35},[39,173399,173400,173402],{"class":41,"line":42},[39,173401,24805],{"class":49},[39,173403,119930],{"class":237},[19,173405,173406],{},"导出项目依赖：",[30,173408,173409],{"className":24796,"code":147268,"language":24798,"meta":35,"style":35},[26,173410,173411],{"__ignoreMap":35},[39,173412,173413,173415,173417,173419],{"class":41,"line":42},[39,173414,24805],{"class":49},[39,173416,147277],{"class":237},[39,173418,27197],{"class":45},[39,173420,147282],{"class":237},[19,173422,173423],{},"安装项目依赖：",[30,173425,173426],{"className":24796,"code":147288,"language":24798,"meta":35,"style":35},[26,173427,173428],{"__ignoreMap":35},[39,173429,173430,173432,173434,173436],{"class":41,"line":42},[39,173431,24805],{"class":49},[39,173433,24808],{"class":237},[39,173435,120614],{"class":74},[39,173437,147282],{"class":237},[14,173439,173441],{"id":173440},"_916-模块搜索路径","9.16 模块搜索路径",[19,173443,173444,173445,173448],{},"Python 导入模块时会在 ",[26,173446,173447],{},"sys.path"," 中查找。",[30,173450,173452],{"className":31353,"code":173451,"language":31355,"meta":35,"style":35},"import sys\n\nfor path in sys.path:\n    print(path)\n",[26,173453,173454,173460,173464,173476],{"__ignoreMap":35},[39,173455,173456,173458],{"class":41,"line":42},[39,173457,31367],{"class":45},[39,173459,173170],{"class":53},[39,173461,173462],{"class":41,"line":92},[39,173463,122],{"emptyLinePlaceholder":121},[39,173465,173466,173468,173471,173473],{"class":41,"line":112},[39,173467,4108],{"class":45},[39,173469,173470],{"class":53}," path ",[39,173472,27018],{"class":45},[39,173474,173475],{"class":53}," sys.path:\n",[39,173477,173478,173480],{"class":41,"line":118},[39,173479,32274],{"class":74},[39,173481,170204],{"class":53},[19,173483,173484],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173486,158598],{},[30,173488,173491],{"className":173489,"code":173490,"language":6267,"meta":35},[6265],"random.py\njson.py\ntime.py\n",[26,173492,173490],{"__ignoreMap":35},[19,173494,173495],{},"这些文件名可能导致导入异常。",[14,173497,173499],{"id":173498},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173501,173295],{},[30,173503,173506],{"className":173504,"code":173505,"language":6267,"meta":35},[6265],"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",[26,173507,173505],{"__ignoreMap":35},[19,173509,173510,25593],{},[26,173511,173512],{},"utils\u002Ffile_utils.py",[30,173514,173516],{"className":31353,"code":173515,"language":31355,"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",[26,173517,173518,173524,173534,173538,173542,173552,173562,173570,173576,173580,173607,173617,173621,173625,173635,173661],{"__ignoreMap":35},[39,173519,173520,173522],{"class":41,"line":42},[39,173521,31367],{"class":45},[39,173523,148066],{"class":53},[39,173525,173526,173528,173530,173532],{"class":41,"line":92},[39,173527,31712],{"class":45},[39,173529,109286],{"class":53},[39,173531,31367],{"class":45},[39,173533,109291],{"class":53},[39,173535,173536],{"class":41,"line":112},[39,173537,122],{"emptyLinePlaceholder":121},[39,173539,173540],{"class":41,"line":118},[39,173541,122],{"emptyLinePlaceholder":121},[39,173543,173544,173546,173549],{"class":41,"line":125},[39,173545,32922],{"class":45},[39,173547,173548],{"class":49}," read_json",[39,173550,173551],{"class":53},"(path):\n",[39,173553,173554,173557,173559],{"class":41,"line":132},[39,173555,173556],{"class":53},"    path ",[39,173558,1117],{"class":45},[39,173560,173561],{"class":53}," Path(path)\n",[39,173563,173564,173566,173568],{"class":41,"line":138},[39,173565,4184],{"class":45},[39,173567,39905],{"class":45},[39,173569,170285],{"class":53},[39,173571,173572,173574],{"class":41,"line":169},[39,173573,15725],{"class":45},[39,173575,52813],{"class":53},[39,173577,173578],{"class":41,"line":190},[39,173579,122],{"emptyLinePlaceholder":121},[39,173581,173582,173584,173586,173589,173591,173593,173595,173597,173599,173601,173603,173605],{"class":41,"line":202},[39,173583,35153],{"class":45},[39,173585,147766],{"class":74},[39,173587,173588],{"class":53},"(path, ",[39,173590,147776],{"class":237},[39,173592,63],{"class":53},[39,173594,147781],{"class":59},[39,173596,1117],{"class":45},[39,173598,147786],{"class":237},[39,173600,255],{"class":53},[39,173602,32358],{"class":45},[39,173604,149128],{"class":59},[39,173606,4822],{"class":53},[39,173608,173609,173611,173613,173615],{"class":41,"line":207},[39,173610,15725],{"class":45},[39,173612,149139],{"class":53},[39,173614,46329],{"class":59},[39,173616,574],{"class":53},[39,173618,173619],{"class":41,"line":212},[39,173620,122],{"emptyLinePlaceholder":121},[39,173622,173623],{"class":41,"line":223},[39,173624,122],{"emptyLinePlaceholder":121},[39,173626,173627,173629,173632],{"class":41,"line":228},[39,173628,32922],{"class":45},[39,173630,173631],{"class":49}," write_json",[39,173633,173634],{"class":53},"(path, data):\n",[39,173636,173637,173639,173641,173643,173645,173647,173649,173651,173653,173655,173657,173659],{"class":41,"line":263},[39,173638,35153],{"class":45},[39,173640,147766],{"class":74},[39,173642,173588],{"class":53},[39,173644,152951],{"class":237},[39,173646,63],{"class":53},[39,173648,147781],{"class":59},[39,173650,1117],{"class":45},[39,173652,147786],{"class":237},[39,173654,255],{"class":53},[39,173656,32358],{"class":45},[39,173658,149128],{"class":59},[39,173660,4822],{"class":53},[39,173662,173663,173666,173668,173670,173672,173674,173676,173678,173680,173682,173684],{"class":41,"line":287},[39,173664,173665],{"class":53},"        json.dump(data, ",[39,173667,46329],{"class":59},[39,173669,63],{"class":53},[39,173671,148112],{"class":59},[39,173673,1117],{"class":45},[39,173675,34962],{"class":74},[39,173677,63],{"class":53},[39,173679,152987],{"class":59},[39,173681,1117],{"class":45},[39,173683,1345],{"class":74},[39,173685,574],{"class":53},[19,173687,173688,25593],{},[26,173689,155582],{},[30,173691,173693],{"className":31353,"code":173692,"language":31355,"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",[26,173694,173695,173706,173710,173723,173743],{"__ignoreMap":35},[39,173696,173697,173699,173701,173703],{"class":41,"line":42},[39,173698,31712],{"class":45},[39,173700,173316],{"class":53},[39,173702,31367],{"class":45},[39,173704,173705],{"class":53}," read_json, write_json\n",[39,173707,173708],{"class":41,"line":92},[39,173709,122],{"emptyLinePlaceholder":121},[39,173711,173712,173714,173716,173719,173721],{"class":41,"line":112},[39,173713,160691],{"class":53},[39,173715,1117],{"class":45},[39,173717,173718],{"class":53}," read_json(",[39,173720,152806],{"class":237},[39,173722,574],{"class":53},[39,173724,173725,173727,173729,173731,173733,173735,173737,173739,173741],{"class":41,"line":118},[39,173726,171509],{"class":53},[39,173728,63654],{"class":237},[39,173730,52412],{"class":53},[39,173732,150863],{"class":237},[39,173734,63],{"class":53},[39,173736,152447],{"class":237},[39,173738,52412],{"class":53},[39,173740,2249],{"class":74},[39,173742,166127],{"class":53},[39,173744,173745,173748,173750],{"class":41,"line":125},[39,173746,173747],{"class":53},"write_json(",[39,173749,152806],{"class":237},[39,173751,173752],{"class":53},", students)\n",[14,173754,173756],{"id":173755},"_918-易错点","9.18 易错点",[328,173758,173759,173762,173767,173772,173775,173778],{},[331,173760,173761],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[331,173763,173764,173765,29360],{},"能指定异常类型就不要裸写 ",[26,173766,171869],{},[331,173768,173769,173771],{},[26,173770,172244],{}," 无论是否出错都会执行。",[331,173773,173774],{},"模块文件名不要和标准库重名。",[331,173776,173777],{},"导入自己写的模块时，要注意运行目录。",[331,173779,173780],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173782,173784],{"id":173783},"_919-本章练习","9.19 本章练习",[328,173786,173787,173790,173793,173799,173806],{},[331,173788,173789],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[331,173791,173792],{},"写函数读取文件，如果文件不存在则返回空字符串。",[331,173794,173207,173795,173798],{},[26,173796,173797],{},"math_utils.py","，实现加减乘除函数并导入使用。",[331,173800,173801,173802,173805],{},"创建一个 ",[26,173803,173804],{},"utils"," 包，把 JSON 读写函数放进去。",[331,173807,173808],{},"写一个程序，捕获除零异常和输入格式异常。",[1192,173810,173811],{},"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":92,"depth":92,"links":173813},[173814,173815,173816,173817,173818,173819,173820,173821,173822,173823,173824,173830,173837,173839,173840,173841,173842,173843,173844],{"id":171666,"depth":92,"text":171667},{"id":171794,"depth":92,"text":171795},{"id":171843,"depth":92,"text":171844},{"id":171992,"depth":92,"text":171993},{"id":172164,"depth":92,"text":172165},{"id":172233,"depth":92,"text":172234},{"id":172344,"depth":92,"text":172345},{"id":172470,"depth":92,"text":172471},{"id":172595,"depth":92,"text":172596},{"id":172650,"depth":92,"text":172651},{"id":172749,"depth":92,"text":172750,"children":173825},[173826,173827,173828,173829],{"id":172753,"depth":112,"text":172754},{"id":172787,"depth":112,"text":172788},{"id":172826,"depth":112,"text":172827},{"id":172905,"depth":112,"text":172906},{"id":172928,"depth":92,"text":172929,"children":173831},[173832,173833,173834,173835,173836],{"id":172932,"depth":112,"text":172933},{"id":173015,"depth":112,"text":173016},{"id":173060,"depth":112,"text":173061},{"id":173119,"depth":112,"text":173120},{"id":173157,"depth":112,"text":173158},{"id":173191,"depth":92,"text":173838},"9.13 if name == \"main\"",{"id":173284,"depth":92,"text":173285},{"id":173329,"depth":92,"text":173330},{"id":173440,"depth":92,"text":173441},{"id":173498,"depth":92,"text":173499},{"id":173755,"depth":92,"text":173756},{"id":173783,"depth":92,"text":173784},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171658,"description":24350},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173851,"title":173852,"body":173853,"description":174016,"extension":1203,"meta":174017,"navigation":121,"path":174018,"seo":174019,"stem":174020,"__hash__":174021},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173854,"toc":174011},[173855,173858,173861,173864,173875,173877,173951,173954,173957,173960,173963,173966,173969,173972,173975,173978,173981],[10,173856,173852],{"id":173857},"python教程",[19,173859,173860],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173862,173863],{},"建议学习环境：",[328,173865,173866,173869,173872],{},[331,173867,173868],{},"Python 版本：Python 3.10 及以上。",[331,173870,173871],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[331,173873,173874],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173876,118053],{"id":118053},[328,173878,173879,173885,173891,173897,173903,173909,173915,173921,173927,173933,173939,173945],{},[331,173880,173881],{},[922,173882,173884],{"href":173883},".\u002Fch1-Python","Python环境与第一个程序",[331,173886,173887],{},[922,173888,173890],{"href":173889},".\u002Fch2","基础语法、变量与字符串",[331,173892,173893],{},[922,173894,173896],{"href":173895},".\u002Fch3","判断语句",[331,173898,173899],{},[922,173900,173902],{"href":173901},".\u002Fch4","循环语句",[331,173904,173905],{},[922,173906,173908],{"href":173907},".\u002Fch5","函数基础",[331,173910,173911],{},[922,173912,173914],{"href":173913},".\u002Fch6","数据容器",[331,173916,173917],{},[922,173918,173920],{"href":173919},".\u002Fch7","函数进阶",[331,173922,173923],{},[922,173924,173926],{"href":173925},".\u002Fch8","文件操作",[331,173928,173929],{},[922,173930,173932],{"href":173931},".\u002Fch9","异常、模块与包",[331,173934,173935],{},[922,173936,173938],{"href":173937},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[331,173940,173941],{},[922,173942,173944],{"href":173943},".\u002Fch11","面向对象基础",[331,173946,173947],{},[922,173948,173950],{"href":173949},".\u002Fch12","综合案例与复习路线",[14,173952,173953],{"id":173953},"学习路线",[19,173955,173956],{},"第一阶段：能运行程序。",[19,173958,173959],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173961,173962],{},"第二阶段：能组织数据。",[19,173964,173965],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173967,173968],{},"第三阶段：能封装逻辑。",[19,173970,173971],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173973,173974],{},"第四阶段：能做小项目。",[19,173976,173977],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173979,173980],{"id":173980},"参考资料",[328,173982,173983,173990,173997,174004],{},[331,173984,173985,173986],{},"黑马程序员 Python 入门教程推荐：",[922,173987,173988],{"href":173988,"rel":173989},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24839],[331,173991,173992,173993],{},"Python 官方中文教程：",[922,173994,173995],{"href":173995,"rel":173996},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24839],[331,173998,173999,174000],{},"Python 标准库文档：",[922,174001,174002],{"href":174002,"rel":174003},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24839],[331,174005,174006,174007],{},"pyecharts 文档：",[922,174008,174009],{"href":174009,"rel":174010},"https:\u002F\u002Fpyecharts.org\u002F",[24839],{"title":35,"searchDepth":92,"depth":92,"links":174012},[174013,174014,174015],{"id":118053,"depth":92,"text":118053},{"id":173953,"depth":92,"text":173953},{"id":173980,"depth":92,"text":173980},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24352},"\u002Fwiki\u002F2024-10-10-python",{"title":173852,"description":174016},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331380768]